Skip to main content

Semantic Data Provider

Installation​

npm install @semapps/semantic-data-provider

Usage​

import { Admin } from 'react-admin';
import { dataProvider } from '@semapps/semantic-data-provider';

const App = () => (
<Admin
dataProvider={dataProvider({
dataServers: { ... },
resources: { ... },
ontologies: [ ... ],
jsonContext: 'http://localhost:3000/context.json',
returnFailedResources: false,
plugins: [ ... ]
})}
>
<Resource name="Project" ... />
<Resource name="Organization" ... />
</Admin>
);

The semantic data provider rely on several important configuration:

  • The Data Servers, which describes the servers to which we want to connect and what they contain.
  • The Data Model, which describes how we want the data to be displayed in React-Admin.
  • The Plugins, which can automatically transform the data provider configuration.

Settings​

dataServers​

See the Data servers page.

resources​

See the Data model page.

ontologies​

List of ontologies used to format or select SPARQL data. Format:

const ontologies = {
rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
ldp: 'http://www.w3.org/ns/ldp#'
};

jsonContext​

All SPARQL results returned will be framed with this context.

If it is not set, the ontologies set above will be used.

returnFailedResources​

If true, the getMany method will not fail completely if one resource is missing.

Missing resources will be returned with their id and _error: true.

plugins​

See the Plugins page.

Filters​

When using React-Admin filters, in the List components or the ReferenceArrayInput, there are special keywords that you can use:

_predicates​

Return only the given predicates instead of the full resource.

For example, { _predicates: ['foaf:name']} will return only the name of a list of users.

Note: The @type is always returned because it is needed by React-Admin.

_servers​

Select the data servers that you want to query, bypassing the config in the data model.

You can use the server keys or special keywords.

blankNodes​

Choose the blank nodes you want to dereference, bypassing the config in the data model or the VOID endpoint.

For example, { blankNodes: [] } will not dereference any blank nodes for the given resources.

This is useful if you don't need the values of the blank nodes and want to increase performances.

q​

Do a full-text search on the resources.

For example, { q: "sem" } will return all resources with the characters "sem" in string-types values.

sparqlWhere​

Allow to make advanced search by providing a SPARQL.js-formatted array that will be appended to the WHERE query.

Here's an example to fetch ActivityStreams events after a given date:

{
sparqlWhere: [
{
type: 'bgp',
triples: [
{
subject: { termType: 'Variable', value: 's1' },
predicate: { termType: 'NameNode', value: 'https://www.w3.org/ns/activitystreams#startTime' },
object: { termType: 'Variable', value: 'startTime' }
}
]
},
{
type: 'filter',
expression: {
type: 'operation',
operator: '>',
args: [
{
termType: 'Variable',
value: 'startTime'
},
{
termType: 'Literal',
datatype: {
termType: 'NamedNode',
value: 'http://www.w3.org/2001/XMLSchema#dateTime'
},
value: '2022-11-17T10:20:13+05:30'
}
]
}
}
];
}

Note: In the above example, the variable s1 is the URI of a LDP resource.

Custom methods​

In addition to regular React-Admin methods, we provide custom methods that are specific to linked data. These can be accessed with the useDataProvider hook.

patch​

Patch a resource with a SPARQL-Update (application/sparql-update) operation.

Parameters​

PropertyTypeDefaultDescription
resourceIdStringrequiredReact-Admin resource ID
params.idStringrequiredURI of the resource to patch
params.triplesToAdd[Quad]Triples to insert, formatted with the RDFJS data model
params.triplesToRemove[Quad]Triples to delete, formatted with the RDFJS data model

refreshConfig​

Refresh the dymamically loaded config (VOID endpoint and, for Pods, the user config)

Hooks​

useContainers​

Returns a list of containers linked with a given resource.

const containers = useContainers(resourceId, serverKeys);

Parameters​

PropertyTypeDefaultDescription
resourceIdStringrequiredReact-Admin resource ID
serverKeysArray or String"@all"The servers where the containers are

Return value​

Array of containers URIs.

useCreateContainer​

Get the URI of the container where to create a new resource.

const createContainerUri = useCreateContainer(resourceId);

Parameters​

PropertyTypeDefaultDescription
resourceIdStringrequiredReact-Admin resource ID

Return value​

URI of the container where to create a new resource.

useCreateContainerUri​

Get the URI of the container where to create a new resource.

const getContainerUri = useCreateContainer();
const createContainerUri = getContainerUri(resourceId);

Return value​

Function to get the URI of the container where to create a new resource

PropertyTypeDefaultDescription
resourceIdStringrequiredReact-Admin resource ID

useDataModel​

Get the data model config of the given resource, including data fetched through VoID endpoints.

const dataModel = useDataModel(resourceId);

Parameters​

PropertyTypeDefaultDescription
resourceIdStringrequiredReact-Admin resource ID

Return value​

The data model config of the given resource.

useDataModels​

Get the data model config of all the resources, including data fetched through VoID endpoints.

const dataModel = useDataModels();

useDataServers​

Get the data servers config, including data fetched through VoID endpoints.

const dataServers = useDataServers();

Utilities​

getOrCreateWsChannel​

This function adheres to the Solid Notification Protocol, specifically the WebSocketChannel2023 specification. It creates a WebSocket that conforms to this specification.

Parameters​

Param PositionPropertyTypeDefaultDescription
1fetchFunctionrequiredA React Admin fetch function. You can obtain it using const { fetch } = useDataProvider().
2resourceUristringrequiredThe URI of the resource to subscribe to.
3optionsobjectOptions to pass to createSolidNotificationChannel if the channel does not exist yet. Refer to the documentation of the features in the spec for more details. See CreateSolidChannelOptions.

CreateSolidChannelOptions Interface​

PropertyTypeDefaultDescription
typestringWebSocketChannel2023The type of channel. The default and only supported option is WebSocketChannel2023.
closeAfternumberTime in milliseconds after which the channel should close.
startInnumberTime in milliseconds to wait before starting the channel.
startAtstring (ISO 8601)ISO 8601 timestamp indicating when to start the channel.
endAtstring (ISO 8601)ISO 8601 timestamp indicating when to end the channel.
ratenumberThe rate in milliseconds at which notifications should be sent at most.

createWsChannel​

This function operates similarly to getOrCreateWsChannel but always creates a new channel, even if a channel for the same resource (but potentially with different options) is already open. The newly created channel is not registered in the cache used by getOrCreateWsChannel.

createSolidNotificationChannel​

This function is used internally by getOrCreateWsChannel and createWsChannel to create a WebSocket channel object conforming to the Solid Notification Protocol.