Vous êtes sur la page 1sur 18

Chapitre 5

SPARQL

Présentation
Forme d’une requête
Requêtes plus complexes
Présentation

Présentation
Forme d’une requête
Requêtes plus complexes
Présentation

SPARQL est un langage d’interrogation de base RDF.


Langage standard d’interrogation implémenté dans plusieurs outils
utilisables en ligne, en local, depuis un langage de programmation.
Recommandation du W3C.
http://www.w3.org/TR/rdf-sparql-query/

▶ Inspiré de SQL (select-from-where)…


▶ mais adapté à la (non-)structure d’une base RDF.

110
Présentation - Données utilisées dans les exemples

Exemple (personnes.n3)
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix mv: <http://exemple.fr/mv#> .

mv:fm mv:nom "Fox Mulder" ;


mv:famille mv:Mulder ; mv:travailleavec mv:ds ;
mv:pere mv:bm ;
mv:photo <http://upload.wikimedia.org/wikipedia/en/5/5e/Xfiles-
FoxMulder-small.jpg> ;
mv:naissance "1961"^^xsd:gYear .

mv:bm mv:nom "Bill Mulder" ;


mv:famille mv:Mulder ; mv:fils mv:fm .

mv:ds mv:nom "Dana Scully" ;


mv:famille mv:Scully ; mv:travailleavec mv:fm .

mv:ws mv:nom "Walter Skinner" ;


mv:dirige mv:fm ; mv:dirige mv:ds . 111
Forme d’une requête

Présentation
Forme d’une requête
Requêtes plus complexes
Requête simple

Exemple
SELECT ?uri
FROM <personnes.n3>
WHERE {
?uri <http://exemple.fr/mv#famille> <http://exemple.fr/mv#Mulder> .
}

▶ SELECT : Ce que l’on veut obtenir.


▶ FROM : Depuis quelle base. Optionnel, peut être précisé au
moment de l’exécution de la requête.
▶ WHERE : Conditions de sélection.
Exemple
| uri |
| <http://exemple.fr/mv#bm> |
| <http://exemple.fr/mv#fm> |
112
Requête simple - Simplification de la requête

Exemple
PREFIX m: <http://exemple.fr/mv#>
SELECT ?uri
WHERE {
?uri m:famille m:Mulder .
}

Doit être exécutée en précisant l’URL de la base.


Exemple
| uri |
| m:bm |
| m:fm |

113
Requêtes plus complexes

Présentation
Forme d’une requête
Requêtes plus complexes
Graphe condition

Exemple
PREFIX m: <http://exemple.fr/mv#>
SELECT ?n ?uri
WHERE {
?uri m:nom ?n .
?uri m:pere ?uri2 .
?uri2 m:nom "Bill Mulder" .
}

Exemple
|n | uri |
| "Fox Mulder" | m:fm |

114
Conditions optionnelles

Une base RDF est non-structurée (ou semi-structurée), par opposition


à une base relationnelle. Le langage de requêtes prend en compte
cette caractéristique.
Exemple
PREFIX m: <http://exemple.fr/mv#>
SELECT ?nom ?photo
WHERE {
?uri m:nom ?nom .
?uri m:photo ?photo .
}

…ne retourne qu’un seul résultat : les personnes qui ont une photo.
Une requête peut être formulée de sorte à prendre en compte des
informations optionnelles. Exemple : la liste de toutes les personnes,
accompagnées de leurs photos (si photo il y a).
115
Conditions optionnelles OPTIONAL

Exemple
PREFIX m: <http://exemple.fr/mv#>
SELECT ?nom ?photo
WHERE { ?uri m:nom ?nom .
OPTIONAL { ?uri m:photo ?photo . } .
}

Exemple
| nom | photo |
| "Walter Skinner" | |
| "Dana Scully" | |
| "Bill Mulder" | |
| "Fox Mulder" | <http://upload.wik..-small.jpg> |

La condition d’un bloc OPTIONAL peut être plus complexe que dans
cet exemple. Il peut y avoir plusieurs blocs OPTIONAL.
116
Conditions alternatives UNION

Exemple
PREFIX m: <http://exemple.fr/mv#>
SELECT ?nom
WHERE { ?uri m:nom ?nom .
{
{ ?uri m:famille m:Mulder . } UNION
{ ?uri m:famille m:Scully . }
}
}

Exemple
| nom |
| "Dana Scully" |
| "Bill Mulder" |
| "Fox Mulder" |

117
Conditions sur les valeurs FILTER

Exemple
PREFIX m: <http://exemple.fr/mv#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?nom
WHERE {
?uri m:nom ?nom .
?uri m:naissance ?annee .
FILTER ( ?annee >= "1960"^^xsd:gYear &&
?annee < "1970"^^xsd:gYear )
}

Un bloc FILTER peut être imbriqué dans un bloc OPTIONAL (mais


pas l’ inverse).

118
Graphes nommés

Dans certains cas, on veut écrire des requêtes portant sur plusieurs
graphes (fichiers), en gardant l’origine des informations.
Si plusieurs graphes sont donnés dans FROM, l’union de tous les
triplets est faite pour former un graphe : l’origine des informations est
perdue.
Les conditions (WHERE) portent toujours sur le graphe du FROM.
D’autres graphes peuvent être introduits dans une requête par FROM
NAMED. Ils peuvent alors être utilisés dans le WHERE à l’aide d’un bloc
GRAPH.

119
Graphes nommés - Données utilisées dans les exemples

Exemple (acteurs.n3)
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix mv: <http://exemple.fr/mv#> .

mv:dd mv:nom "David Duchovny" ;


mv:role mv:fm ;
mv:naissance "1960"^^xsd:gYear .

mv:ga mv:nom "Gillian Anderson" ;


mv:role mv:ds.

120
Graphes nommés

Exemple
PREFIX m: <http://exemple.fr/mv#>
SELECT ?nompers ?nomacteur
FROM <personnes.n3>
FROM NAMED <acteurs.n3>
WHERE { ?uripers m:nom ?nompers .
GRAPH <acteurs.n3> {
?uriacteur m:role ?uripers .
?uriacteur m:nom ?nomacteur .
}
}

Exemple
| nompers | nomacteur |
| "Dana Scully" | "Gillian Anderson" |
| "Fox Mulder" | "David Duchovny" |

121
Graphe nommé variable

Chercher dans plusieurs graphes, utiliser le nom d’un graphe nommé


comme une variable.
Exemple
SELECT ?g ?nom ?date
FROM NAMED <personnes.n3>
FROM NAMED <acteurs.n3>
WHERE { GRAPH ?g {
?uri m:nom ?nom .
?uri m:naissance ?date .
}
}

Exemple
|g | nom | date |
| <personnes.n3> | "Fox Mulder" | "1961"^^<http.|
| <acteurs.n3> | "David Duchovny" | "1960"^^<http.|
122
Tri ORDER BY / LIMIT

Exemple
PREFIX m: <http://exemple.fr/mv#>
SELECT ?nom
WHERE {
?uri m:nom ?nom
}
ORDER BY ?nom LIMIT 3

ORDER BY DESC(?nom) pour un tri dans l’ordre décroissant.


Plus d’ informations ?
Le site du W3C : http://www.w3.org/TR/rdf-sparql-query/
Des exemples ? interroger Wikipedia
http://wiki.dbpedia.org/OnlineAccess
Ex : Joueurs de football qui ont joué comme gardien dans un club qui
a un stade de plus de 40000 places et qui sont nés dans un pays de
plus de 10 millions d’habitants. 123