Home > Archives > Configure datasource on object properties
Configure datasources on object properties
/!\ This is now deprecated. Please transition to SHACL configuration
This is an extension chapter for the property datasource shown in Object properties. Some widgets such as sparnatural:AutocompleteProperty and sparnatural:ListProperty require a datasource key to populate respectively the list of values or the values proposed by autocompletion. Creating a datasource for a widget can be achieved in 4 ways:
| Nr | Method | JSON example |
|---|---|---|
| 1. | A reference to a preconfigured datasource |
"datasource": "datasources:list_rdfslabel_alpha"
|
| 2. | Reference to a preconfigured SPARQL query + a URI to be injected |
"datasource": {
"queryTemplate":"query_list_label_count",
"labelProperty":"http://foo.bar/label"
}
|
| 3. | Your own SPARQL query |
"datasource": {
"queryString":"SELECT ?uri ?label WHERE { here your own query }"
}
|
| 4. | Callback method provided in the JavaScript code | see Advanced : customizing lists and autocomplete |
A reference to a preconfigured datasource
JSON:
{
"@id" : "http://labs.sparna.fr/sparnatural-demo-dbpedia/onto#bornIn",
...
"datasource": "datasources:list_rdfslabel_alpha"
}
Sparnatural comes preconfigured with datasources that can populate lists based on rdfs:label, skos:prefLabel, foaf:name, dcterms:title, schema:name or the URI of the entity (which is the default behavior). For each of these properties, 3 flavors of datasource exist : either with an alphabetical ordering, an alphabetical ordering plus the count shown in parenthesis, or a descending count ordering.
| queryTemplate | property path | widget |
|---|---|---|
datasources:list_URI_alpha |
none | sparnatural:ListProperty |
datasources:list_URI_count |
none | sparnatural:ListProperty |
datasources:list_rdfslabel_alpha |
rdfs:label |
sparnatural:ListProperty |
datasources:list_rdfslabel_count |
rdfs:label |
sparnatural:ListProperty |
datasources:list_skospreflabel_alpha |
skos:prefLabel |
sparnatural:ListProperty |
datasources:list_skospreflabel_count |
skos:prefLabel |
sparnatural:ListProperty |
datasources:list_skospreflabel_alpha_with_count |
skos:prefLabel |
sparnatural:ListProperty |
datasources:list_dctermstitle_alpha |
dcterms:title |
sparnatural:ListProperty |
datasources:list_dctermstitle_count |
dcterms:title |
sparnatural:ListProperty |
datasources:list_dctermstitle_alpha_with_count |
dcterms:title |
sparnatural:ListProperty |
datasources:list_schemaname_alpha |
schema:name |
sparnatural:ListProperty |
datasources:list_schemaname_count |
schema:name |
sparnatural:ListProperty |
datasources:list_schemaname_alpha_with_count |
schema:name |
sparnatural:ListProperty |
datasources:search_URI_contains |
none | sparnatural:AutocompleteProperty |
datasources:search_rdfslabel_strstarts |
rdfs:label |
sparnatural:AutocompleteProperty |
datasources:search_rdfslabel_contains |
rdfs:label |
sparnatural:AutocompleteProperty |
datasources:search_rdfslabel_bifcontains |
rdfs:label |
sparnatural:AutocompleteProperty |
datasources:search_foafname_strstarts |
foaf:name |
sparnatural:AutocompleteProperty |
datasources:search_foafname_contains |
foaf:name |
sparnatural:AutocompleteProperty |
datasources:search_foafname_bifcontains |
foaf:name |
sparnatural:AutocompleteProperty |
datasources:search_dctermstitle_strstarts |
dcterms:title |
sparnatural:AutocompleteProperty |
datasources:search_dctermstitle_contains |
dcterms:title |
sparnatural:AutocompleteProperty |
datasources:search_dctermstitle_bifcontains |
dcterms:title |
sparnatural:AutocompleteProperty |
datasources:search_skospreflabel_strstarts |
skos:prefLabel |
sparnatural:AutocompleteProperty |
datasources:search_skospreflabel_contains |
skos:prefLabel |
sparnatural:AutocompleteProperty |
datasources:search_skospreflabel_bifcontains |
skos:prefLabel |
sparnatural:AutocompleteProperty |
datasources:search_schemaname_strstarts |
schema:name |
sparnatural:AutocompleteProperty |
datasources:search_schemaname_contains |
schema:name |
sparnatural:AutocompleteProperty |
datasources:search_schemaname_bifcontains |
schema:name |
sparnatural:AutocompleteProperty |
The queryTemplate can be viewed here. For a datasources:list_rdfslabel_alpha_with_count it looks like the following:
SELECT ?uri ?count (CONCAT(STR(?theLabel), ' (', STR(?count), ')') AS ?label)
WHERE {
{
SELECT DISTINCT ?uri (COUNT(?domain) AS ?count)
WHERE {
?domain a $domain .
?domain $property ?uri .
FILTER(isIRI(?uri))
}
GROUP BY ?uri
}
?uri $labelPath ?theLabel .
FILTER(lang(?theLabel) = "" || lang(?theLabel) = $lang)
}
ORDER BY UCASE(?label)
LIMIT 500
Given: The selection is on domain <http://dbpedia.org/ontology/Museum> and we have chosen datasources:list_rdfslabel_alpha_with_count then this query will be transformed to the following (note: The inserted rdfs:label for the regex $labelPath):
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?uri ?count (CONCAT(STR(?theLabel), ' (', STR(?count), ')') AS ?label)
WHERE {
{
SELECT DISTINCT ?uri (COUNT(?domain) AS ?count)
WHERE {
?domain a <http://dbpedia.org/ontology/Museum> .
?domain <http://dbpedia.org/ontology/country> ?uri .
FILTER(isIRI(?uri))
}
GROUP BY ?uri
}
?uri <http://www.w3.org/2000/01/rdf-schema#label> ?theLabel .
FILTER(lang(?theLabel) = "" || lang(?theLabel) = 'fr')
}
ORDER BY UCASE(?label)
LIMIT 500
Preconfigured datasources for a TreeProperty
Sparnatural comes preconfigured with datasources that can populate a tree selector with the roots and the children of each node.
Preconfigured datasources for the roots of a TreeProperty
These datasources are to be used with a treeRootsDatasource on a TreeProperty.
The preconfigured datasource identifiers for roots datasource on a TreeProperty are :
datasources:tree_root_skostopconcept: reads the roots of a SKOS ConceptScheme usingskos:hasTopConceptor^skos:topConceptOf, assuming the URI of the Sparnatural class is equal to the URI of the ConceptSchemedatasources:tree_root_skostopconcept_with_count: same as previous, but returns the number of occurences of each node in parenthesis
Preconfigured datasources for the children of a TreeProperty
These datasources are to be used with a treeChildrenDatasource on a TreeProperty.
The preconfigured datasource identifiers for children datasource on a TreeProperty are :
datasources:tree_children_skosnarrower: reads the children of a node usingskos:narroweror^skos:broaderdatasources:tree_children_skosnarrower_with_count: same as previous, but returns the number of occurences of each node in parenthesis
Reference to a preconfigured SPARQL query + a URI to be injected
If the preconfigured datasources do not fit the data model to be queried, you have the ability to refer to the same SPARQL queries used by these datasources, but adjust the property to be searched or used as a label. To do so, the datasource key should hold:
- a
queryTemplatereference to one of the preconfigured SPARQL query template from table A reference to a preconfigured datasource - a
labelPropertyorlabelPathspecifying either the full URI of the labelling property to use or a SPARQL property path (using angle brackets) to use.
e.g. to create a list widget based on http://foo.bar/label ordered by count :
{
"@id" : "http://labs.sparna.fr/sparnatural-demo-dbpedia/onto#bornIn",
...
"datasource": {
"queryTemplate" : "datasources:query_list_label_count",
"labelProperty" : "http://foo.bar/label"
}
}
Your own SPARQL query
You can provide your own SPARQL queries to populate lists or autocomplete suggestions. To do so, provide a queryString key to your datasource object, holding the SPARQL query that should be used to populate the list/autocomplete.
The SPARQL query MUST return 2 variables : ?uri and ?label, populated anyway you like.
In this SPARQL query, the following replacements will happen:
$domain, if present, will be replaced by the URI of the domain class;$range, if present, will be replaced by the URI of the range class;$property, if present, will be replaced by the URI of the property;$lang, if present, will be replaced by the language Sparnatural is configured with;$type, if present, will be replace by thetypePredicateconfig parameter of Sparnatural; this is useful if you query wikibase endpoints where the type rpedicate is something else than rdf:type;$key, if present, will be replaced by the searched key for autocomplete fields;
Take a look at the preconfigured SPARQL queries in the Sparnatural datasources ontology to get you started.
e.g. to create a list widget based on http://foo.bar/label and ordered by reverse-alphabetical :
{
"@id" : "http://labs.sparna.fr/sparnatural-demo-dbpedia/onto#bornIn",
...
"datasource": {
"queryString" : `
SELECT DISTINCT ?uri ?label
WHERE {
?domain a $domain .
?domain $property ?uri .
?uri <http://foo.bar/label> ?label .
FILTER(lang(?label) = "" || lang(?label) = $lang)
}
ORDER BY DESC(?label)
`
}
}
Specifying the SPARQL service of a datasource
By default, a SPARQL datasource will be executed against the SPARQL endpoint given in the defaultEndpoint property of Sparnatural configuration.
It is however possible to indicate a different SPARQL endpoint to which the query should be sent, by using the sparqlEndpointUrl key on the datasource object.
This is not possible for preconfigured datasources that are always executed on the default endpoint.
e.g. to populate a list with rdfs:labels fetched from DBPedia:
{
"@id" : "http://labs.sparna.fr/sparnatural-demo-dbpedia/onto#bornIn",
...
"datasource": {
"queryTemplate" : "datasources:query_search_label_strstarts",
"labelProperty" : "http://www.w3.org/2000/01/rdf-schema#label",
"sparqlEndpointUrl" : "http://dbpedia.org/sparql"
}
}