Éléments de syntaxe SPARQL 1.1

Guy Lapalme

SPARQL 1.1 est une recommandation récente du W3C pour interroger des banques de triplets RDF.

SPARQL a une syntaxe basée sur la définition de modèles de triplets comportant des variables qui doivent correspondre à des triplets de la base. Ce document est une introduction aux principales composantes des interrogations de base de triplets RDF pour leur utilisation dans Twinkle.

Éléments de base

Un triplet regroupe trois composantes parmi les suivantes. Un triplet doit être terminé par un point (.) souvent précédé par un espace pour éviter les ambiguïtés.

URI
Description d'un URI entre les signes plus petit (<) et plus grand (>) selon la syntaxe définie dans le standard. Un IRI est décomposable en parties. Par exemple
<http://www.iro.umontreal.ca/lapalme/SPARQL?bonjour#toto>
sera séparé en composantes optionnelles: Cette notion de composante est utilisée pour définir la notion de chemin relatif que nous n'abordons pas dans ce document.
littéral ou constante
Toute constante est une chaîne de caractères entourée par des guillemets simples (') ou doubles (") selon les conventions habituelles du web. Il y a toutefois quelques particularités:
variable
Identificateur ou nombre préfixé par ? ou $. ?x et $x utilisés dans le même modèle de graphe désignent la même variable.
noeud anonyme
Identificateur préfixé par _: qui peut aussi être noté par [] dans quel cas, le système génère un identificateur interne .

Définitions de préfixes

Un préfixe pour un URI est défini par
PREFIX ident: IRI .
Par exemple:
PREFIX gl: <http://www.iro.umontreal.ca/lapalme/SPARQL#> .
Ce préfixe est ajouté à ce qui suit le deux-points pour former l'URI complet. Ainsi gl:toto désignera l'URI <http://www.iro.umontreal.ca/lapalme/SPARQL#toto>. L'identificateur de préfixe peut être vide.

Triplet

Un triplet est noté par trois URI suivis par un point. Ils désignent respectivement le sujet, le prédicat et l'objet RDF. L'objet peut aussi être un littéral. Par exemple

gl:s gl:p "o" .

Lorsqu'un sujet est partagé par plusieurs triplets successifs on sépare les paires prédicat et objet par un point-virgule. Par exemple

gl:s gl:p "o"; gl:p1 "o1" .
équivaut à
gl:s gl:p "o" .
gl:s gl:p1 "o1" .

Lorsqu'un sujet et un prédicat sont communs à plusieurs objets, ces derniers sont séparés par des virgules. Par exemple
gl:s gl:p gl:o, "o1".
équivaut à
gl:s gl:p gl:o.
gl:s gl:p "o1".
Attention: les parenthèses dans ce contexte sont utilisées pour dénoter des collections que nous ne décrivons pas ici.

Notation pour les noeuds anonymes

Un noeud anonyme pouvant être noté par [], un triplet [] gl:p "o". peut aussi être noté [gl:p "o"]. Cette notation crochet peut être utilisée en position sujet, objet et être combinée avec les virgules ou point-virgules. Le tableau suivant indique à gauche la notation avec crochets et la partie droit indique les triplets équivalents:
[gl:p "o"] . _:b1 gl:p "o" .
[gl:p "o"] gl:q gl:o2 . _:b2 gl:p "o".
_b2 gl:q gl:o2 .
gl:s gl:p [gl:p1 gl:o]. gl:s gl:p _:b3 .
_:b3 gl:p1 gl:o .
[gl:p gl:o;gl:p1 "o1"]. _:b4 gl:p gl:o .
_:b4 gl:p1 "o1" .

Modèle de graphe

Les requêtes sont basées sur la notion de modèle de graphe qu'on cherche à retrouver dans une base de triplets. Dans un modèle de graphe, un triplet peut comporter des variables (i.e. des identificateurs précédés par ? ou $) qui seront instanciées lorsqu'un triplet concorde au modèle en affectant une variable.

Un modèle de graphe est une suite de triplets entre accolades { }. Une variable liée dans un triplet garde la même valeur dans tous les autres triplets où elle est utilisée dans le même modèle de graphe. Il est de plus possible d'ajouter des contraintes supplémentaires sur les triplets par un filtre qui peut apparaître entre des triplets dans un modèle de graphe. Par exemple, le modèle de graphe {?s gl:p "o". ?s gl:p "o1"} liera la variable ?s à tous les sujets de la base de triplets qui ont comme prédicat gl:p et objet "o" et "o1". Comme on peut utiliser les notations abrégées de triplets, ce modèle de graphe aurait pu aussi s'écrire {?s gl:p "o", "o1"}.

Un filtre est de la forme FILTER expressionexpression est composée d'une combinaison des éléments suivants:

Un filtre s'applique au modèle de graphe entier où il se trouve, peu importe sa position dans le graphe.

Requêtes

Une requête est composée d'un des verbes suivants:

Modification de solution

Les triplets étant considérés comme un ensemble, il est difficile de se fier sur l'ordre d'apparition des résultats. Il est toutefois possible de modifier la sortie avec les mots clés suivants:

Autres possibilités

SPARQL 1.1 fournit également des fonctions d'agrégation telles des sommes ou des moyennes et la possibilité de définir des variables. Nous n'avons décrit ici que les principaux éléments de syntaxe de SPARQL. En particulier, nous avons omis la possibilité d'interroger plusieurs graphes dans une même requête. Nous avons aussi passé sous silence quelques possibilités qui nous semblaient moins importantes ainsi que le traitement des BASE pour créer des URI relatifs.

Pour la syntaxe complète, il faut consulter le document du W3C.

On peut avoir plus de détails dans cette feuille de rappel.

SPARQL Update

Pour modifier la base de triplets, il faut utiliser SPARQL 1.1 Update sur un Graph Store tel que TDB ou Fuseki.

Feigenbaum présente une bonne introduction à SPARQL 1.1 avec une feuille de rappel