# SPARQL

SPARQL (prononcé sparkle, en anglais : « étincelle ») 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.
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 ».
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.

## Histoire

Ce standard a été créé par le groupe de travail DAWG (RDF Data Access Working Group) du W3C (Consortium World Wide Web). Les implémentations de SPARQL au sein de triplestores se multiplient. Le premier brouillon a été publié le 12 octobre 2004 et le 15 janvier 2008, la version 1.0 est devenue une recommandation officielle du W3C.
SPARUL, ou SPARQL / Update, est un ajout ultérieur au langage de recherche SPARQL, également appelé SPARQL / Update 1.0 à partir de juillet 2008 afin de pouvoir enregistrer des données via ce langage.
La version SPARQL 1.1 a été proposée en 2009 puis recommandée officiellement pour remplacer la version 1.0 en 2013. 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

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

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 :
* La requête SPARQL :
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 :

### Spécifications

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) :
* Langage d'interrogation SPARQL pour RDF
* Format XML des résultats d'interrogation SPARQL
* Protocole SPARQL pour RDF
Et la note du W3C :
* Format JSON des résultats d'interrogation SPARQL
SPARQL est une des couches pour la mise en œuvre du Web sémantique.

## Glossaire

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.