01
📖 Introduction à SPARQL
SPARQL (prononcé "sparkle") est le langage de requête standard du W3C pour interroger des graphes RDF. C'est l'équivalent du SQL pour les bases de données relationnelles, mais spécialisé pour les graphes de connaissances.
💡 À retenir : SPARQL permet d'extraire des informations d'un graphe RDF en utilisant des motifs de triplets.
📝 Dans ce tutoriel :
Nous utiliserons une base RDF sur les orateurs et discours pour illustrer les requêtes.
02
📝 Syntaxe de base
Une requête SPARQL se compose de :
- Des déclarations PREFIX pour raccourcir les IRIs
- D'une clause SELECT pour spécifier les variables à retourner
- D'une clause WHERE contenant les motifs de triplets
PREFIX schema:
PREFIX foaf:
SELECT ?nom ?dateNaissance
WHERE {
?orateur a foaf:Person ;
foaf:name ?nom ;
schema:birthDate ?dateNaissance .
}
LIMIT 10
💡 Notation :
- ?variable : variable qui sera liée à des valeurs
- a : raccourci pour
rdf:type
- ; : permet d'enchaîner les propriétés du même sujet
03
🔍 Requêtes SELECT
La requête SELECT est la plus utilisée. Elle retourne un tableau de résultats.
Exemple 1 : Tous les discours
PREFIX schema:
SELECT ?titre ?date
WHERE {
?discours a schema:Speech ;
schema:title ?titre ;
schema:date ?date .
}
ORDER BY ?date
Résultat :
| titre | date |
| "Appel du 18 juin" | "1940-06-18" |
| "Appel du 22 juin" | "1940-06-22" |
| "Discours de Bayeux" | "1946-06-16" |
Exemple 2 : Discours d'un orateur spécifique
PREFIX schema:
SELECT ?titre ?date
WHERE {
schema:author ?discours .
?discours schema:title ?titre ;
schema:date ?date .
}
ORDER BY ?date
04
🎯 Filtres (FILTER)
La clause FILTER permet de restreindre les résultats selon des conditions.
Exemple 1 : Discours après 1940
PREFIX schema:
PREFIX xsd:
SELECT ?titre ?date
WHERE {
?discours a schema:Speech ;
schema:title ?titre ;
schema:date ?date .
FILTER(?date > "1940-01-01"^^xsd:date)
}
ORDER BY ?date
Exemple 2 : Discours contenant un mot-clé
PREFIX schema:
SELECT ?titre ?contenu
WHERE {
?discours schema:title ?titre ;
schema:content ?contenu .
FILTER(CONTAINS(?contenu, "résistance"))
}
Exemple 3 : Conditions combinées
SELECT ?nom ?date
WHERE {
?orateur foaf:name ?nom ;
schema:birthDate ?date .
FILTER(?date > "1800-01-01"^^xsd:date && ?date < "1900-01-01"^^xsd:date)
}
# Orateurs nés au XIXe siècle
06
🔀 Requêtes OPTIONAL
OPTIONAL permet d'inclure des données qui peuvent ne pas exister.
PREFIX schema:
PREFIX foaf:
SELECT ?nom ?discours
WHERE {
?orateur foaf:name ?nom .
OPTIONAL {
?orateur schema:author ?discours .
?discours schema:title ?titre
}
}
# Retourne tous les orateurs, même ceux sans discours
07
📈 Agrégations (GROUP BY, COUNT)
Compter les discours par orateur
PREFIX schema:
PREFIX foaf:
SELECT ?nom (COUNT(?discours) AS ?nbDiscours)
WHERE {
?orateur foaf:name ?nom ;
schema:author ?discours .
}
GROUP BY ?nom ?orateur
ORDER BY DESC(?nbDiscours)
Résultat :
| nom | nbDiscours |
| "Victor Hugo" | 15 |
| "Charles de Gaulle" | 12 |
| "Emmanuel Macron" | 8 |
08
🏋️ Exercices pratiques
Exercice 1
Trouvez tous les discours de Victor Hugo.
Voir la solution
PREFIX schema:
PREFIX foaf:
SELECT ?titre ?date
WHERE {
?orateur foaf:name "Victor Hugo" ;
schema:author ?discours .
?discours schema:title ?titre ;
schema:date ?date .
}
ORDER BY ?date
Exercice 2
Trouvez les orateurs nés au XXe siècle (après 1900).
Voir la solution
PREFIX schema:
PREFIX foaf:
PREFIX xsd:
SELECT ?nom ?dateNaissance
WHERE {
?orateur foaf:name ?nom ;
schema:birthDate ?dateNaissance .
FILTER(?dateNaissance > "1900-01-01"^^xsd:date)
}
ORDER BY ?dateNaissance
Exercice 3
Comptez le nombre total de discours par année.
Voir la solution
PREFIX schema:
SELECT ?annee (COUNT(?discours) AS ?nbDiscours)
WHERE {
?discours a schema:Speech ;
schema:date ?date .
BIND(YEAR(?date) AS ?annee)
}
GROUP BY ?annee
ORDER BY ?annee