Aller au contenu

SPARQL

Un article de Wikipédia, l'encyclopédie libre.

SPARQL
Dernière version 1.1[1]Voir et modifier les données sur Wikidata

SPARQL (prononcé sparkle, en anglais : « étincelle »[2]) est un langage de requête et un protocole qui permet de rechercher, d'ajouter, de modifier ou de supprimer des données RDF disponibles à travers Internet. Son nom est un acronyme récursif qui signifie SPARQL Protocol and RDF Query Language[3].

SPARQL est considéré dès 2007 comme l'une des technologies clés du Web sémantique par Tim Berners-Lee, l'inventeur du Web sémantique, qui explique que « Tenter d’utiliser le Web sémantique sans SPARQL revient à exploiter une base de données relationnelle sans SQL »[4].

Aujourd'hui, le Web des données (ou Linked Open Data) est constitué de centaines de services SPARQL qui mettent à disposition de plus en plus de données au travers d'Internet comme le fait le projet Wikidata. L'ambition du W3C est d'offrir une interopérabilité non seulement au niveau des services, comme avec les services Web, mais également au niveau des données.

Ce standard a été créé par le groupe de travail DAWG (RDF Data Access Working Group[5]) du W3C (Consortium World Wide Web). Les implémentations de SPARQL au sein de triplestores se multiplient[6]. Le premier brouillon a été publié le [7] et le , la version 1.0 est devenue une recommandation officielle du W3C[8].

SPARUL, ou SPARQL / Update, est un ajout ultérieur au langage de recherche SPARQL, également appelé SPARQL / Update 1.0 à partir de afin de pouvoir enregistrer des données via ce langage[9].

La version SPARQL 1.1 a été proposée en 2009[10] puis recommandée officiellement pour remplacer la version 1.0 en 2013[11]. Elle intègre toutes les fonctionnalités précédentes et en propose de nouvelles comme la possibilité de construire des requêtes fédérées afin de pouvoir interroger simultanément plusieurs services SPARQL au travers du protocole que la spécification SPARQL contient.

Caractéristiques

[modifier | modifier le code]

SPARQL est adapté à la structure spécifique des graphes RDF, et s'appuie sur les triplets qui les constituent. En cela, il est différent du classique SQL (langage de requête qui est adapté aux bases de données de type relationnelles), mais sa syntaxe et ses fonctionnalités paraissent en être fortement inspirées. Certaines caractéristiques peuvent s’apparenter avec Prolog.

SPARQL permet d'exprimer des requêtes interrogatives ou constructives :

  • une requête SELECT, de type interrogative, permet d'extraire du graphe RDF un sous-graphe correspondant à un ensemble de ressources vérifiant les conditions définies dans une clause WHERE ;
  • une requête CONSTRUCT, de type constructive, engendre un nouveau graphe qui complète le graphe interrogé.

Par exemple sur un graphe RDF contenant des informations généalogiques, on pourra par une requête SELECT trouver les parents ou grands-parents d'une personne donnée, et par des requêtes CONSTRUCT ajouter des relations frère-sœur, cousin-cousine, oncle-neveu, qui ne seraient pas explicitement déclarées dans le graphe initial.

Exemple de requête SPARQL retournant une liste de photos avec le nom de la personne qu'elles représentent et une description, à partir d'une base de données de type RDF utilisant l'ontologie (vocabulaire) FOAF (une des plus connues et utilisée pour décrire les personnes et les liens entre elles).

  • Extrait du graphe RDF (écriture XML) d'exemple :
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:foaf="http://xmlns.com/foaf/0.1/"
   xmlns:rss="http://purl.org/rss/1.0/"
   xmlns:dc="http://purl.org/dc/elements/1.1/">
 	<foaf:Person rdf:about="http://example.net/Paul_Dupont">
 		<foaf:name>Paul Dupont</foaf:name>
 		<foaf:img rdf:resource="http://example.net/Paul_Dupont.jpg"/>
 		<foaf:knows rdf:resource="http://example.net/Pierre_Dumoulin"/>
 	</foaf:Person>
 	<foaf:Person rdf:about="http://example.net/Pierre_Dumoulin">
 		<foaf:name>Pierre Dumoulin</foaf:name>
 		<foaf:img rdf:resource="http://example.net/Pierre_Dumoulin.jpg"/>
 	</foaf:Person>
 	<foaf:Image rdf:about="http://example.net/Paul_Dupont.jpg">
 		<dc:description>Photo d'identité de Paul Dupont</dc:description>
 	</foaf:Image>
 	<foaf:Image rdf:about="http://example.net/Pierre_Dumoulin.jpg">
 		<dc:description>Photo d'identité de Pierre Dumoulin</dc:description>
 	</foaf:Image>
 </rdf:RDF>
  • La requête SPARQL :
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
 PREFIX foaf: <http://xmlns.com/foaf/0.1/>
 PREFIX dc: <http://purl.org/dc/elements/1.1/>
 SELECT DISTINCT ?nom ?image ?description
 WHERE {
 	?personne rdf:type foaf:Person.
 	?personne foaf:name ?nom.
 	?image rdf:type foaf:Image.
 	?personne foaf:img ?image.
 	?image dc:description ?description
 }

On remarque la déclaration des espaces de noms en début, suivis de la requête proprement dite. Le nom des variables est précédé d'un point d'interrogation ?.

La ligne SELECT permet de sélectionner l'ensemble des tuples, ou lignes de variables (nom, image, description) correspondant aux contraintes de la clause WHERE.

La première ligne de la clause WHERE se lit : la variable personne est de type Person au sens de l'ontologie FoaF. La seconde ligne permet de définir la variable nom en tant que propriété name de la variable personne.

  • Le résultat SPARQL :
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
	<head>
		<variable name="nom"/>
		<variable name="image"/>
		<variable name="description"/>
	</head>
	<results ordered="false" distinct="true">
		<result>
			<binding name="nom">
				<literal>Pierre Dumoulin</literal>
			</binding>
			<binding name="image">
				<uri>http://example.net/Pierre_Dumoulin.jpg</uri>
			</binding>
			<binding name="description">
				<literal>Photo d'identité de Pierre Dumoulin</literal>
			</binding>
		</result>
		<result>
			<binding name="nom">
				<literal>Paul Dupont</literal>
			</binding>
			<binding name="image">
				<uri>http://example.net/Paul_Dupont.jpg</uri>
			</binding>
			<binding name="description">
				<literal>Photo d'identité de Paul Dupont</literal>
			</binding>
		</result>
	</results>
</sparql>

Spécifications

[modifier | modifier le code]

Il y a trois recommandations (SPARQL 1.0) du W3C avec une note ainsi que dix documents en fin d'élaboration concernant la version suivante (SPARQL 1.1)[12] :

  • Langage d'interrogation SPARQL pour RDF[13]
  • Format XML des résultats d'interrogation SPARQL[14]
  • Protocole SPARQL pour RDF[15]

Et la note du W3C :

  • Format JSON des résultats d'interrogation SPARQL[16]

SPARQL est une des couches pour la mise en œuvre du Web sémantique.

Le terme « nœud SPARQL » renvoie à un fournisseur de contenu intégré dans l’architecture du Web des données. Un exemple de nœud SPARQL est DBpedia.

Notes et références

[modifier | modifier le code]
  1. SPARQL 1.1 (standard technique), .Voir et modifier les données sur Wikidata
  2. (en) Jim Rapoza, « SPARQL Will Make the Web Shine », eWeek, (consulté le )
  3. (en) Toby Segaran, Colin Evans, Jamie Taylor, Programming the Semantic Web, O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472, , 280 p. (ISBN 978-0-596-15381-6), p. 84
  4. Le W3C ouvre les données sur le Web avec SPARQL
  5. « RDF Data Access WG Charter », sur www.w3.org (consulté le )
  6. (en) « SparqlImplementations - ESW Wiki », Esw.w3.org (consulté le )
  7. « SPARQL Query Language for RDF », sur www.w3.org (consulté le )
  8. (en) « W3C Semantic Web Activity News - SPARQL is a Recommendation », W3.org, (consulté le )
  9. / SPARUL Mise à jour de SPARQL 1.0
  10. SPARQL1.1 SPARQL version 1.1
  11. SPARQL état actuel
  12. (en) « SPARQL Current Status », W3.org, (consulté le ).
  13. (en) « Langage d'interrogation SPARQL pour RDF », W3.org, (consulté le ).
  14. (en) « Format XML des résultats d'interrogation SPARQL », W3.org, (consulté le ).
  15. (en) « Protocole SPARQL pour RDF », W3.org, (consulté le ).
  16. (en) « Serializing SPARQL Query Results in JSON », W3.org, (consulté le ).

Sur les autres projets Wikimedia :

Liens externes

[modifier | modifier le code]