Vous êtes sur la page 1sur 21

SPARQL

Hicham BEHJA
Intro

Requête de triplets

Tout est triplet

W3C, T Berners-Lee, Ivan Herman

2
Intro
 SPARQL = SPARQL Protocol and RDF Query
Language
 SPARQL est composé de 3 parties :
1. Langage de requêtes avec syntaxe triplets
simplifiée
SPARQL QUERY LANGUAGE FOR RDF W3C REC 15 JAN. 2008

1. Langage de présentation des résultats


SPARQL QUERY RESULTS XML FORMAT W3C REC 15 JAN. 2008
1. Protocole d’accès comme un service Web (SOAP)
SPARQL PROTOCOL FOR RDF W3C REC 15 JAN. 2008

3
Requête de triplets
 Langage de requête sur des données RDF
– Appariements de graphes / projection
– Principe imitant SQL (clauses):
 Select: clause sélectionnant les valeurs à retourner
 From : identifie la source de données
 Where: un pattern de triplets à matcher
 Filter: des contraintes exprimées avec des fonctions
de tests.

4
Requête de triplets
 Deux formes possibles pour présentation
résultats:
– le binding i.e. la liste des valeurs sélectionnées
pour chaque réponse rencontrée;
(format XML stable ; bien avec XSLT)
– les sous graphes des réponses rencontrées en
RDF
(format RDF/XML ; bien pour applications
utilisant RDF)

5
Requête de triplets
 Requête SPARQL
– PREFIX
SELECT
FROM
WHERE {
FILTER, OPTIONAL, UNION
}
ORDER BY
LIMIT
OFFSET

6
WHERE
 La clause where est une conjonction de
triplets :

{ ?x rdf:type ex:Person
?x ex:name ?name }

7
PREFIX
 PREFIX
– permet de déclarer le schéma à utiliser dans la
requête.

8
Exemple
 Exemples : sélectionner les personne et leur
nom

– PREFIX ex: <http://inria.fr/schema#>


SELECT ?person ?name
WHERE {
?person rdf:type ex:Person
?person ex:name ?name .
}

9
Exemple
 Exemple : résultat en XML
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#" >
<head>
<variable name="person"/>
<variable name="name"/>
</head>
<results ordered="false" distinct="false">
<result>
<binding name="person">
<uri>http://inria.fr/schema#fg</uri>
</binding>
<binding name="name">
<literal>gandon</literal>
</binding>
</result>
<result> ...

10
FILTER
 La clause FILTER permet d’ajouter des
contraintes sur le graphe de patterns (motifs) à
matcher .
 Exemple : personne âgé de plus de 17 ans
– PREFIX ex: <http://inria.fr/schema#>
SELECT ?person ?name
WHERE {
?person rdf:type ex:Person
?person ex:name ?name .
?person ex:age ?age .
FILTER (xsd:integer(?age) > 17)
}
Noter le cast de age.

11
FILTER
 Opérateurs de FILTER:
– Comparateurs: <, >, =, <=, >=, !=
– Opérateurs: + * - /
– Tests sur les binding des variables:
isURI(?x), isBlank(?x), isLiteral(?x), bound(?x)
– Filtres à base d'expressions régulières regex(?x, "A.*")
– Accès aux attributs/valeur lang(), datatype(), str()
– Fonctions de (re-)typage (casting) xsd:integer(?x)
– Fonctions externes / extensions
– Combinaisons &&, ||, !

12
OPTIONAL
 La clause OPTIONAL permet d’indiquer
une partie optionnelle dans le graphe de
patterns à matcher.
 Exemple : sélectionner l’âge si disponible
– PREFIX ex: <http://inria.fr/schema#>
SELECT ?person ?name ?age
WHERE {
?person rdf:type ex:Person
?person ex:name ?name .
OPTIONAL { ?person ex:age ?age }
}

13
UNION
 La clause UNION permet de définir des
patterns alternatifs dans une requête.
 Exemple :
– PREFIX ex: <http://inria.fr/schema#>
SELECT ?name
WHERE {
?person ex:name ?name .
{
{ ?person rdf:type ex:Adult }
UNION
{ ?person ex:age ?age
FILTER (?age > “17”) }
}
}

14
ORDER BY, LIMIT, OFFSET
 ORDER BY : permet de trier le résultat
 LIMIT : pour limiter le nombre
 OFFSET : le rang du premier résultat
 Exemple : résultats de 21 à 40 par ordre de nom :
– PREFIX ex: <http://inria.fr/schema#>
SELECT ?person ?name
WHERE {
?person rdf:type ex:Person
?person ex:name ?name .
}
ORDER BY ?name
LIMIT 20
OFFSET 20

15
UNBOUND
 BOUND est utilisé pour tester si une variable
n'est pas lié (surtout pour la négation).
 Exemple : Personnes qui ne connaissent pas
Java
– PREFIX ex: <http://inria.fr/schema#>
SELECT ?name
WHERE {
?person ex:name ?name .
?person ex:knows ?x
FILTER ( ?x != "Java" )
}

16
UNBOUND
 fabien ex:knows "Java”
fabien ex:knows "C++”
 Personnes qui ne connaissent pas Java
– PREFIX ex: <http://inria.fr/schema#>
SELECT ?name
WHERE {
?person ex:name ?name .
OPTIONAL { ?person ex:knows ?x
FILTER ( ?x = "Java" ) }
FILTER ( ! bound(?x) )
}

17
ASK
 La clause ASK permet de vérifier si il y’a au
moins un résultat. Réponse « true » ou
« false ».
 Exemple : y’a-t-il une personne âgé de plus de
17 ans
– PREFIX ex: <http://inria.fr/schema#>
ASK
{
?person ex:age ?age
FILTER (?age > “17”)
}

18
CONSTRUCT
 La clause CONSTRUCT permet de retourner
un graphe RDF pour chaque résultat.
 Exemple :
– PREFIX ex: <http://inria.fr/schema#>
CONSTRUCT
{
?person rdf:type ex:Adult
}
WHERE
{
?person ex:age ?age
FILTER (?age > 17)
}

19
Syntaxe simplifiée
 Les triplets ayant une racine commune
peuvent être simplifiés ainsi que la relation
de typage:
SELECT ?nom ?prenom
SELECT ?nom ?prenom
WHERE {
WHERE {
?x a Person; ?x rdf:type Person .
nom ?nom ; ?x nom ?nom .
prenom ?prenom ;
auteur ?y . }
?x prenom ?prenom .
?x auteur ?y .
}
20
Syntaxe simplifiée
 Plusieurs valeurs
?x prenom "Fabien", "Lucien" .
 Resource anonyme dans pattern requête
[prenom "Fabien"] ou [] prenom "Fabien"
 Exemple :
– ?x a Document; auteur [nom "Lo"] .

  les documents ?x écrits par un auteur ayant


pour nom "Lo"

21

Vous aimerez peut-être aussi