w3c sparql (simple protocol and rdf query language) bali ahmed [email protected] master...

48
W3C SPARQL ( Simple Protocol And RDF Query Language) BALI Ahmed [email protected] Master informatique 2012/2013 ----------- Basé sur le cours de olivier corby (INRIA)

Upload: hamon-vallee

Post on 04-Apr-2015

112 views

Category:

Documents


2 download

TRANSCRIPT

W3C SPARQL (Simple Protocol And RDF

Query Language)BALI Ahmed

[email protected] 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

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.

• C’est au serveur de triplets (e,g dbpedia) de faire les inférences et de délivrer les bons triplets

4

A partir d’une base RDF :• Extraire de l’information : URI, literal, datatype

literal• Extraire un sous graphe RDF• Construire un graphe résultat

5

SPARQL: exemple

PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?mbox WHERE{ ?x foaf:name "Johnny Lee Outlaw" .?x foaf:mbox ?mbox }

6

Syntaxe SPARQL : Triple

URI: <http://www.inria.fr/ocorby>Qname: rdf:type foaf:nameVariable: ?x ?nameBlank Node (variable anonyme): _:b1 _:b2Literal: “Literal” 3.14 true “12”^^xsd:integer

7

Syntaxe SPARQL : Triple

• subject property object• <http://www.inria.fr/ocorby> foaf:name ?name• ?x foaf:name 'Omar'• ?x ?p 'Omar'• _:b1 foaf:age 49

8

Syntaxe SPARQL

• ?x c:firstName ?y .• ?x c:lastName ?z • ⇔• ?x c:firstName ?y ; c:lastName ?z

9

Syntaxe SPARQL

• ?x c:name “Omar” .• ?x c:name “Zaid” .• ⇔• ?x c:name “Omar” , “Zaid” .

10

Blank Node

_:b []_:b c:speed ?v ?x c:speed []Blank: comme une variable non retournée en résultat

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'

12

Blank Node

?x c:speed [ rdf:value ?val ; c:unit 'km/h' ]Interroger le design pattern des relations n-aires:<c:Car><c:speed rdf:parseType=‘Resource’><rdf:value>100</rdf:value><c:unit>km/h</c:unit></c:speed></c:Car>

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

14

Test : Filtre

Test : FiltreFILTER (?age >= 7 && ?age <= 77)Comparaison : < <= = >= > != Opération : + * / -Booléen : && (and) || (or) ! (not)Fonction : isBlank(?x) my:fun(?y)

15

Syntaxe Abstraite Filtre

EXP ::= TERM | EXP OPER EXP | (EXP)TERM ::= VAR | CST | FUNCST ::= URI | LiteralOPER ::= < <= = >= > + - * / && || !FUN ::= NAME( EXP* )

16

Tests et datatypes

1 = 1.0‘1’^^xsd:integer = ‘1.0’^^xsd:decimal?x + ?y < 0.1 * ?z

17

Tests

regex(?string, ‘.*master.*’)“engineer” != “engineer”@en“engineer” = str(“engineer”@en)

18

Tests: fonctions

isURI(?x)isLiteral(?y)isBlank(?z)bound(?t)

19

Tests

lang(?x) = ‘en’engineer@en -> trueingénieur@fr -> falsedatatype(?y)= xsd:string! (?x || ?y && ?z)

20

Exercice

1. Trouver l’age des ressources dont le nom est ‘Salim’2. Trouver le nom des ressources dont l’age est inférieur à 50,3. Trouver les valeurs des propriétés des ressources dont le nom est ‘Salim’ et l’age inférieur à 504. 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 valeur6. Trouver les ressources qui ont deux fois la même propriété avec des valeurs différentes

21

Exercice

1. Trouver l’age des ressources dont le nom est ‘Salim’select ?age where { ?x name ‘Salim’ . ?x age ?age }2. Trouver le nom des ressources dont l’age est inférieurà 50select ?name where { ?x name ?name . ?x age ?age filter(?age < 50) }3. Trouver les valeurs des propriétés des ressources dontle nom est ‘Salim’ et l’age inférieur à 50select ?p ?y where { ?x name ‘Salim’ . ?x age ?age filter(?age < 50) ?x ?p ?y }

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 valeurselect * 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érentesselect * where { ?x ?p ?y . ?x ?p ?z filter(?y != ?z)}

23

Pattern optionnel

SELECT * WHERE {?x :hasCreated ?doc .OPTIONAL {?x :isMemberOf ?org}}hasCreated est obligatoireisMemberOf est optionnel

24

Pattern optionnel

SELECT * WHERE { :John :hasCreated :d1?x :hasCreated ?doc :John :hasCreated :d2OPTIONAL { :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

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

26

Pattern optionnelSELECT * WHERE { :John :hasCreated :d1?x :hasCreated ?doc . :John :hasCreated :d2OPTIONAL { :Jack :hasCreated :d3?x :age ?age . :Jack :isMemberOf :club?x :isMemberOf ?org :Jim :hasCreated :d4} :Jim :isMemberOf :assoc} :Jim :age 45Ré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

27

Pattern optionnel

SELECT * WHERE { :John :hasCreated :d1?x :hasCreated ?doc . :John :hasCreated :d2OPTIONAL {?x :age ?age} :Jack :hasCreated :d3OPTIONAL {?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

28

Pattern optionnel avec test

SELECT * WHERE {?x :hasCreated ?doc .OPTIONAL {?x :age ?age FILTER (?age < 45) .?x :isMemberOf ?org .}}

29

Pattern UNION

SELECT * WHERE {:Barack :apply :Presidency

{?x :apply ?job} :Barack :play :BasketBallUNION :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

30

RDF Dataset

Interroger une base de plusieurs graphesDes graphes nommés avec des URIUn graphe par défautIdentifier les graphes interrogés

31

Résultat

SELECT * WHERE SELECT DISTINCT ?x ?y WHERE ORDER BY ?x DESC(?y) LIMIT 10 OFFSET 10

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

33

Distinct

select distinct ?x ?z :Jules :friend :Jimwhere { :Jim :friend :Jack?x :friend ?y :Jules :friend :James?y :friend ?z :James :friend :Jack}Résultat(1) x = :Jules ; z = :Jack

34

Distinct

select ?x ?z :Jules :friend :Jimwhere { :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

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 ?dateRésultat(1) pers = :Jim ; date = 2007-12-31(2) pers = :Jack ; date = 2008-01-01

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-31order by ?date :d3 :date 2007-12-31desc(?doc)Résultat(1) doc = :d3 ; date = 2007-12-31(2) doc = :d1 ; date = 2007-12-31(3) doc = :d2 ; date = 2008-01-01

37

Limit/Offset

select * where {PATTERN}LIMIT 2020 résultats au plus

38

Limit/Offset

select * where {PATTERN}LIMIT 20OFFSET 1020 résultats (au plus), après le 10èmei.e. de 11 à 30

39

Construct

construct {?girl :brother ?boy}where {?boy :sister ?girl}

40

Construct

construct { :Jules :sister :Jil?girl :brother ?boy}where {?boy :sister ?girl}Résultat:Jil :brother :Jules

41

Discribe

describe ?x where {?x rdf:type :HotTopic?x :date ?datefilter (?date >= ‘2007-12-31’^^xsd:date)}Retourne une description des ?x, dépend de l’application (du serveur)

42

Ask

ask {:Olivier :teach :ensi}

yes/no answer

43

Négation

Trouver les personnes qui sont membre d’une

organisation et qui n’ont pas créé de doc

44

Negation as failure

Les personnes qui sont membre d’une organisation et qui n’ont pas créé de doc :SELECT * WHERE {?x c:isMemberOf ?org .OPTIONAL {?x c:hasCreated ?doc}FILTER (! bound(?doc))}

45

Fonction externe (user defined)

PREFIX fun: <function://fr.inria.package>SELECT * WHERE {?x c:age ?age .FILTER fun:prime(?age)}

46

Format Résultat XML

<?xml version="1.0"?><sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head>

<variable name="x"/><variable name="hpage"/><variable name="name"/><variable name="age"/><variable name="blurb"/>

</head>...</sparql>

47

Format Résultat XML

<?xml version="1.0"?><sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head> ... </head> <results> <result>... </result> <result>... </result> </results></sparql>

48

Format Résultat XML

<result> <binding name="x"><bnode>r2</bnode></binding><binding name="hpage"><uri>http://example.org</uri></binding><binding name="name"> <literal xml:lang="en">Bob</literal></binding><binding name="age"> <literal datatype=“&rdfs;integer">30</literal></binding></result>