Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parHamon Vallee Modifié depuis plus de 10 années
1
W3C SPARQL (Simple Protocol And RDF Query Language) BALI Ahmed Bali.ahmed@gmail.com Master informatique 2012/2013 ----------- Basé sur le cours de olivier corby (INRIA)
2
Notion est un langage de requête et un protocole qui permettra de rechercher, d'ajouter, de modifier ou de supprimer des données RDF disponibles à travers Internet. Comme le SQL aux données des bases de données, avec SPARQL, on accède aux données du Web des données. « SPARQL fera une énorme différence», selon Tim Berners-Lee dès mai 2006 2
3
Que fait SPARQL? Pour interroger une base de triplets RDF sous forme de graphe SPARQL est neutre par rapport aux inférences RDF/RDFS/OWL. Cest au serveur de triplets (e,g dbpedia) de faire les inférences et de délivrer les bons triplets 3
4
A partir dune base RDF : Extraire de linformation : URI, literal, datatype literal Extraire un sous graphe RDF Construire un graphe résultat 4
5
SPARQL: exemple PREFIX foaf: SELECT ?mbox WHERE { ?x foaf:name "Johnny Lee Outlaw". ?x foaf:mbox ?mbox } 5
6
Syntaxe SPARQL : Triple URI: Qname: rdf:type foaf:name Variable: ?x ?name Blank Node (variable anonyme): _:b1 _:b2 Literal: Literal 3.14 true 12^^xsd:integer 6
7
Syntaxe SPARQL : Triple subject property object foaf:name ?name ?x foaf:name 'Omar' ?x ?p 'Omar' _:b1 foaf:age 49 7
8
Syntaxe SPARQL ?x c:firstName ?y. ?x c:lastName ?z ?x c:firstName ?y ; c:lastName ?z 8
9
Syntaxe SPARQL ?x c:name Omar. ?x c:name Zaid. ?x c:name Omar, Zaid. 9
10
Blank Node _:b [] _:b c:speed ?v ?x c:speed [] Blank: comme une variable non retournée en résultat 10
11
Blank Node ?x c:speed [ rdf:value ?val ; c:unit 'km/h' ] Equivalent à : ?x c:speed _:b _:b rdf:value ?val _:b c:unit 'km/h' 11
12
Blank Node ?x c:speed [ rdf:value ?val ; c:unit 'km/h' ] Interroger le design pattern des relations n-aires: 100 km/h 12
13
Liste (1 ?x v) _:a rdf:first 1. _:a rdf:rest _:b. _:b rdf:first ?x. _:b rdf:rest _:c. _:c rdf:first v. _:c rdf:rest rdf:nil 13
14
Test : Filtre FILTER (?age >= 7 && ?age <= 77) Comparaison : = > != Opération : + * / - Booléen : && (and) || (or) ! (not) Fonction : isBlank(?x) my:fun(?y) 14
15
Syntaxe Abstraite Filtre EXP ::= TERM | EXP OPER EXP | (EXP) TERM ::= VAR | CST | FUN CST ::= URI | Literal OPER ::= = > + - * / && || ! FUN ::= NAME( EXP* ) 15
16
Tests et datatypes 1 = 1.0 1^^xsd:integer = 1.0^^xsd:decimal ?x + ?y < 0.1 * ?z 16
17
Tests regex(?string,.*master.*) engineer != engineer@en engineer = str(engineer@en) 17
18
Tests: fonctions isURI(?x) isLiteral(?y) isBlank(?z) bound(?t) 18
19
Tests lang(?x) = en engineer@en -> true ingénieur@fr -> false datatype(?y)= xsd:string ! (?x || ?y && ?z) 19
20
Exercice 1. Trouver lage des ressources dont le nom est Salim 2. Trouver le nom des ressources dont lage est inférieur à 50, 3. Trouver les valeurs des propriétés des ressources dont le nom est Salim et lage inférieur à 50 4. Trouver les autres noms des ressources dont le nom est Salim 5. Trouver les ressources qui ont deux propriétés différentes avec la même valeur 6. Trouver les ressources qui ont deux fois la même propriété avec des valeurs différentes 20
21
Exercice 1. Trouver lage des ressources dont le nom est Salim select ?age where { ?x name Salim. ?x age ?age } 2. Trouver le nom des ressources dont lage est inférieur à 50 select ?name where { ?x name ?name. ?x age ?age filter(?age < 50) } 3. Trouver les valeurs des propriétés des ressources dont le nom est Salim et lage inférieur à 50 select ?p ?y where { ?x name Salim. ?x age ?age filter(?age < 50) ?x ?p ?y } 21
22
Exercice 4. Trouver les autres noms des ressources dont le nom est Salim select ?name where { ?x name Salim. ?x name ?name } 5. Trouver les ressources qui ont deux propriétés différentes avec la même valeur select * where { ?x ?p ?y. ?x ?q ?y filter(?p != ?q)} 6. Trouver les ressources qui ont deux fois la même propriété avec des valeurs différentes select * where { ?x ?p ?y. ?x ?p ?z filter(?y != ?z)} 22
23
Pattern optionnel SELECT * WHERE { ?x :hasCreated ?doc. OPTIONAL { ?x :isMemberOf ?org } hasCreated est obligatoire isMemberOf est optionnel 23
24
Pattern optionnel SELECT * WHERE { :John :hasCreated :d1 ?x :hasCreated ?doc :John :hasCreated :d2 OPTIONAL { :Jack :hasCreated :d3 ?x :isMemberOf ?org :Jack :isMemberOf :club } Résultats: (1) x = :John ; doc = :d1 ; org = unbound (2) x = :John ; doc = :d2 ; org = unbound (3) x = :Jack ; doc = :d3 ; org = :club 24
25
Pattern optionnel SELECT * WHERE { ?x :hasCreated ?doc. OPTIONAL { ?x :age ?age. ?x :isMemberOf ?org } age et isMemberOf doivent être présents pour que optional réussisse 25
26
Pattern optionnel SELECT * WHERE { :John :hasCreated :d1 ?x :hasCreated ?doc. :John :hasCreated :d2 OPTIONAL { :Jack :hasCreated :d3 ?x :age ?age. :Jack :isMemberOf :club ?x :isMemberOf ?org :Jim :hasCreated :d4 } :Jim :isMemberOf :assoc } :Jim :age 45 Résultats (1) x = :John ; doc = :d1 ; org = unbound ; age = unbound (2) x = :John ; doc = :d2 ; org = unbound ; age = unbound (3) x = :Jack ; doc = :d3 ; org = unbound ; age = unbound (4) x = :Jim ; doc = :d4 ; org = :assoc ; age = 45 26
27
Pattern optionnel SELECT * WHERE { :John :hasCreated :d1 ?x :hasCreated ?doc. :John :hasCreated :d2 OPTIONAL {?x :age ?age} :Jack :hasCreated :d3 OPTIONAL {?x :isMemberOf ?org} :Jack :isMemberOf :club } :Jim :hasCreated :d4 :Jim :isMemberOf :assoc :Jim :age 45 Résultats (1) x = :John ; doc = :d1 ; org = unbound ; age = unbound (2) x = :John ; doc = :d2 ; org = unbound ; age = unbound (3) x = :Jack ; doc = :d3 ; org = :club ; age = unbound (4) x = :Jim ; doc = :d4 ; org = :assoc ; age = 45 27
28
Pattern optionnel avec test SELECT * WHERE { ?x :hasCreated ?doc. OPTIONAL { ?x :age ?age FILTER (?age < 45). ?x :isMemberOf ?org. } 28
29
Pattern UNION SELECT * WHERE { :Barack :apply :Presidency {?x :apply ?job} :Barack :play :BasketBall UNION :John :apply :Presidency {?x :play ?act} } Résultats (1) x = :Barack ; job = :Presidency ; act = unbound (2) x = :Barack ; job = unbound ; act = :BasketBall (3) x = :John ; job = :Presidency ; act = unbound 29
30
RDF Dataset Interroger une base de plusieurs graphes Des graphes nommés avec des URI Un graphe par défaut Identifier les graphes interrogés 30
31
Résultat SELECT * WHERE SELECT DISTINCT ?x ?y WHERE ORDER BY ?x DESC(?y) LIMIT 10 OFFSET 10 31
32
Distinct select distinct ?x ?z where { ?x :friend ?y ?y :friend ?z } Ne retourne pas deux fois les mêmes valeurs de x et z 32
33
Distinct select distinct ?x ?z :Jules :friend :Jim where { :Jim :friend :Jack ?x :friend ?y :Jules :friend :James ?y :friend ?z :James :friend :Jack } Résultat (1) x = :Jules ; z = :Jack 33
34
Distinct select ?x ?z :Jules :friend :Jim where { :Jim :friend :Jack ?x :friend ?y :Jules :friend :James ?y :friend ?z :James :friend :Jack } Résultat (1) x = :Jules ; z = :Jack (2) x = :Jules ; z = :Jack 34
35
Order by select ?pers ?date :Jim :author :d2 where { :Jack :author :d1 ?pers :author ?doc :d2 :date 2008-01-01 ?doc :date ?date :d1 :date 2007-12-31 } order by ?date Résultat (1) pers = :Jim ; date = 2007-12-31 (2) pers = :Jack ; date = 2008-01-01 35
36
Order by select ?doc ?date :Jim :author :d2 where { :Jack :author :d1 ?pers :author ?doc :Jack :author :d3 ?doc :date ?date :d2 :date 2008-01-01 } :d1 :date 2007-12-31 order by ?date :d3 :date 2007-12-31 desc(?doc) Résultat (1) doc = :d3 ; date = 2007-12-31 (2) doc = :d1 ; date = 2007-12-31 (3) doc = :d2 ; date = 2008-01-01 36
37
Limit/Offset select * where { PATTERN } LIMIT 20 20 résultats au plus 37
38
Limit/Offset select * where { PATTERN } LIMIT 20 OFFSET 10 20 résultats (au plus), après le 10ème i.e. de 11 à 30 38
39
Construct construct { ?girl :brother ?boy } where { ?boy :sister ?girl } 39
40
Construct construct { :Jules :sister :Jil ?girl :brother ?boy } where { ?boy :sister ?girl } Résultat :Jil :brother :Jules 40
41
Discribe describe ?x where { ?x rdf:type :HotTopic ?x :date ?date filter (?date >= 2007-12-31^^xsd:date) } Retourne une description des ?x, dépend de lapplication (du serveur) 41
42
Ask ask {:Olivier :teach :ensi} yes/no answer 42
43
Négation Trouver les personnes qui sont membre dune organisation et qui nont pas créé de doc 43
44
Negation as failure Les personnes qui sont membre dune organisation et qui nont pas créé de doc : SELECT * WHERE { ?x c:isMemberOf ?org. OPTIONAL { ?x c:hasCreated ?doc } FILTER (! bound(?doc)) } 44
45
Fonction externe (user defined) PREFIX fun: SELECT * WHERE { ?x c:age ?age. FILTER fun:prime(?age) } 45
46
Format Résultat XML <sparql xmlns="http://www.w3.org/2005/sparql-results#">... 46
47
Format Résultat XML <sparql xmlns="http://www.w3.org/2005/sparql-results#">......... 47
48
Format Résultat XML r2 http://example.org Bob 30 48
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.