4.4.5. Le langage de requête Sparql

Sparql est le langage de requête développé par le W3C pour interroger les graphes RDF. Il est adapté à la structure spécifique de triplets qui les constituent. Il permet d'exprimer des requêtes interrogatives ou constructives :

A partir de l'exemple précédent, nous pouvons peut donner un exemple de requête Sparql qui rattacherait un nouvel événement de type "virage B" chaque fois qu'un événement de type "volant" est suivi d'un événement de type "vitesse" avec une valeur de vitesse supérieure à 50 km/h :

CONSTRUCT

(?r1, relation, Nouvel événement)

(?r2, relation, Nouvel événement)

(Nouvel événement, rdf:type, Virage B)

WHERE

(?r1, rdf:type, Volant)

(?r2, rdf:type, Vitesse)

(?r1, relation, ?r2)

(?r2, propriété, ?v)

FILTER

(?v > 50)

La clause construct spécifie les triplets qui doivent être ajoutés au graphe RDF partout ou le sous-graphe défini dans la clause where est rencontré.

Dans cette syntaxe, les termes ?r1 et ?r2 identifient des nœuds du graphe. Ainsi c'est le même nœud qui est identifié par ?r1 chaque fois que ce terme apparaît dans la requête. Le terme ?v désigne une variable qui peut ensuite être testée dans la clause filter. Cette clause permet de ne garder que les sous-graphes qui répondent la condition du filtre. La Figure 50 montre, en vert, un sous-graphe qui répond à la clause where et en rouge le sous-graphe ajouté dans la trace par la clause construct. A l'application de la requête, un nouveau sous-graphe sera ajouté à chaque sous-graphe qui répondra à la clause where.

Figure 50 : Application d'une requête Sparql construct

Le moteur de requête Sparql est capable d'exploiter la sémantique du langage RDFS. Cela signifie par exemple qu'il est capable d'appliquer la transitivité de la relation rdfs:subClassOf. Ainsi une condition (Evénement B, rdf:type, Virage) dans une clause where sera évaluée "vraie", car on a dans le graphe : (Evénement B, rdf:type, Virage B) et (Virage B, rdfs:subClassOf, Virage). Ainsi, en définissant l'ontologie, l'utilisateur s'engage sur les calculs formels qui pourront être effectués par le système. Ces contraintes donnent une valeur à l'ontologie produite.

Le moteur de requête offre également la possibilité de définir des règles spécifiques grâce à un module appelé le "raisonneur". Ainsi nous pourrons créer une sémantique formelle pour des relations dédiées à l'analyse des traces.