SPARQL Query Language for RDF Motivace Syntax Peter Vojtáš, Jan Dědek Department of Software Engineering Faculty of Information Technology Czech Technical University in Prague Peter Vojtáš, Jan Dědek, Ivo Lašek Semantic Web MI SWE 2011 Lecture 7 MI POA Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
Obsah 1. Úvod a motivace 2. Jednoduché SPARQL-dotazy 3. Složitější grafové vzory ve SPARQL 4. Filter ve SPARQL 5. Výstupní formáty ve SPARQL 6. Modifikátory ve SPARQL 7. Shrnutí a výhled MI-SWE 2011 2
Dotazovací jazyky pro Sémantický web Jak se dostanu k informacím specifikovaným v RDF nebo OWL? Dotazování na informace v RDF(S) - jednoduché splňování -RDF-splňování -RDFS-splňování Vyplývá nějaký RDF-Graph z daného grafu? Dotazování na informace v OWL, logické odvození, Vyplývá Subclass-vztah z dané OWL-Ontologie? Které instance dané třídy plynou z OWL-Ontologie? MI-SWE 2011 3
Stačí RDF nebo OWL dotazování, nebo ne? Samotné OWL je jako dotazovací jazyk často slabé Které řetězce v českém jazyce obsahuje ontologie? Které vlastnosti spojují dvě dané individua? Které dvojice osob mají společného rodiče? se nedá vyjádřit ani v RDF ani v OWL. Požadavek: Veliká vyjadřovací síla na popis hledaných informací Formátování, ohraničení a manipulace s výsledky Pozn. opouštíme DL bez proměnných MI-SWE 2011 4
SPARQL SPARQL (vyslov angl. sparkle) je zkratka za SPARQL Protocol And RDF Query Language W3C-Specifikace (od 15. ledna 2008) Dotazovací jazyk pro nalezení instancí v RDF-datech Veliký praktický význam Části SPARQL-Specifikace: Dotazovací jazyk Formát výsledků: prezentace výsledků v XML Dotazovací protokol: přeposílání dotazů a výsledků MI-SWE 2011 5
Jednoduché SPARQL dotazy Příklad jednoduchého dotazu: PREFIX ex: <http://example.org/> SELECT?název?autor WHERE {?kniha ex:vydanáu <http://springer.com/verlag>.?kniha ex:název?název.?kniha ex:autor?autor. } MI-SWE 2011 6
Jednoduché SPARQL dotazy - příklad PREFIX ex: <http://example.org/> SELECT?název?autor WHERE {?kniha ex:vydanáu <http://springer.com/verlag>.?kniha ex:název?název.?kniha ex:autor?autor. } WHERE - dotazovací vzorek v Turtle-rdf-Syntaxi Vzorek může obsahovat proměnné (?variable) Zkratky pro URI jsou možné (PREFIX) Výsledek určíme výběrem proměnných v (SELECT) MI-SWE 2011 7
Výsledek příkladu Příklad RDF Dokumentu (dat): @prefix ex: <http://example.org/>. ex:semanticweb ex:vydanáu <http://springer.com/verlag> ; ex:název "Semantic Web - Grundlagen" ; ex:autor ex:hitzler, ex:krötzsch, ex:rudolph, ex:sure. Výsledek dotazu: Tabulka kde každý řádek je jeden výsledek název "Semantic Web - Grundlagen" "Semantic Web - Grundlagen" "Semantic Web - Grundlagen" "Semantic Web - Grundlagen" Autor http://example.org/hitzler http://example.org/krötzsch http://example.org/rudolph http://example.org/sure MI-SWE 2011 8
Jednoduché grafové vzory Základní dotazovací vzory jsou jednoduché grafové vzory = množiny RDF-Trojic v Turtle-Syntaxi Turtle-zkratky (s použitím, a ;) jsou přípustné Proměnné budou označené? nebo $ (?variable má rovnaký význam jako $variable) Proměnné jsou přípustné jako Subjekt, Predicate nebo Objekt Přípustné nemusí znamenat čitelné PREFIX ex: <http://example.org/> SELECT $rf456df?_aifb WHERE {?ef3a_3 ex:vydanáu <http://springer.com/verlag>.?ef3a_3 ex:název?rf456df. $ef3a_3 ex:autor?_aifb. } (je sémanticky ekvivalentní předešlému dotazu) MI-SWE 2011 9
Prázdné uzly Co znamenají prázdné uzly v SPARQL? Prázdné uzly v dotazovacích vzorech: Jsou přípustné jako Subject nebo Object ID libovolné, ale nikdy stejné ID vícekrát v dotazu Chovají se jako proměnné, které není možné vybrat do SELECT MI-SWE 2011 10
Prázdné uzly Co znamenají prázdné uzly v SPARQL? Prázdné uzly v dotazovacích vzorech: Jsou přípustné jako Subject nebo Object ID libovolné, ale nikdy stejné ID vícekrát v dotazu Chovají se jako proměnné, které není možné vybrat do SELECT Prázdné uzly ve výsledcích: zkratka pro neznámý prvek ID libovolné, může tvořit vazbu na jiné části dotazu subj hodnota subj hodnota subj hodnota _:a na" _:y na" _:z na" _:b příklad" _:g příklad" _:z příklad" MI-SWE 2011 11
Datové typy @prefix xsd: <http://www.w3.org/2001/xmlschema#>. @prefix ex: <http://example.org/>. ex:bsp1 ex:p "test". ex:bsp2 ex:p "test"^^xsd:string. ex:bsp3 ex:p "test"@de. ex:bsp4 ex:p "42"^^xsd:integer. Co dává dotaz s následujícím vzorem? {?subject <http://example.org/p> "test". } ex:bsp1 jako jediný výsledek Přesná shoda nad datovými typy je požadovaná, ale zkratky číselných hodnot jsou možné {?subject <http://example.org/p> 42. } Datový typ se určí ze syntaktického tvaru buď xsd:integer, xsd:decimal, nebo xsd:double MI-SWE 2011 12
Seskupování grafových vzorů Jednoduché grafové vzory můžou být seskupovány použitím {... }. například: PREFIX ex: <http://example.org/> SELECT?název?autor WHERE { {?kniha ex:vydanáu <http://springer.com/verlag>?kniha ex:název?název. } { }?kniha ex:autor?autor. } Má smysl až při použití složitějších konstrukcí, zde jen vizuálně odděluje. Tento dotaz je ekvivalentní předešlému dotazu z příkladu MI-SWE 2011 13
Volitelné (nepovinné) vzory Klíčové slovo OPTIONAL dovoluje zadávat nepovinné části vzoru Příklad : {?buch ex:verlegtbei <http://springer.com/verlag>. OPTIONAL {?buch ex:titel?titel. } OPTIONAL {?buch ex:autor?autor. } } Část výsledku nemusí být vázana Kniha název autor http://example.org/kniha1 název1" http://example.org/autor1 http://example.org/kniha2 název2" http://example.org/kniha3 název3" _:a http://example.org/kniha4 _:a http://example.org/kniha5 MI-SWE 2011 14
Vzory s alternativou Klíčové slovo UNION dovoluje zadat alternativní části vzoru Příklad: {?kniha ex:vydanáu <http://springer.com/verlag>. {?kniha ex:autor?autor. } UNION {?kniha ex:editor?autor. } UNION {?kniha ex:sestavovatel?autor. } } Výsledek odpovídá sjednocení výsledků splňujících jednu z možností Pozn.: stejné proměnné v částech union se neovlyvňují MI-SWE 2011 15
Kombinace volitelnosti s alternativou Jak rozumět kombinaci OPTIONAL a UNION? {?kniha ex:vydanáu <http://springer.com/verlag>. {? kniha ex:autor?autor. } UNION {? kniha ex:editor?autor. } OPTIONAL {?autor ex:příjmení?name. } } Sjednocení dvou vzorů s přidaným nepovinným vzorem nebo Sjednocení dvou vzorů, kde ten druhý má nepovinnou část Ptá se na distribuci UNION a OPTIONAL MI-SWE 2011 16
Kombinace volitelnosti s alternativou Jak rozumět kombinaci OPTIONAL a UNION? {?buch ex:verlegtbei <http://springer.com/verlag>. {?buch ex:autor?autor. } UNION {?buch ex:verfasser?autor. } OPTIONAL {?autor ex:nachname?name. } } Sjednocení dvou vzorů s přidaným nepovinným vzorem nebo Sjednocení dvou vzorů, kde ten druhý má nepovinnou část První interpretace je správná {?buch ex:verlegtbei <http://springer.com/verlag>. { {?buch ex:autor?autor. } UNION {?buch ex:verfasser?autor. } } OPTIONAL {?autor ex:nachname?name. } } Teda defaultní závorkování zleva, nebo UNION má přednost? MI-SWE 2011 17
Kombinace volitelnosti s alternativou Obecné pravidlo OPTIONAL se vztahuje vždy na právě jeden (seskupený) vzor vpravo od něj OPTIONAL a UNION mají stejnou prioritu a vztahují se na všechny nalevo stojící výrazy (jsou zleva asociativní) příklad: { {s1 p1 o1} OPTIONAL {s2 p2 o2} UNION {s3 p3 o3} OPTIONAL {s4 p4 o4} OPTIONAL {s5 p5 o5} } MI-SWE 2011 18
Kombinace volitelnosti s alternativou Obecné pravidlo: OPTIONAL se vztahuje vždy na právě jeden (seskupený) vzor vpravo o něj OPTIONAL a UNION mají stejnou prioritu a vztahují se na všechny nalevo stojící výrazy (jsou zleva asociativní) Příklad: { {s1 p1 o1} OPTIONAL {s2 p2 o2} UNION {s3 p3 o3} OPTIONAL {s4 p4 o4} OPTIONAL {s5 p5 o5} } Znamená { { { { {s1 p1 o1} OPTIONAL {s2 p2 o2} } UNION {s3 p3 o3} } OPTIONAL {s4 p4 o4} } OPTIONAL {s5 p5 o5} } MI-SWE 2011 19
Filtrování výsledků Filtrování výsledků Viz německé slidy, více méně se to shoduje s minulou přednáškou SPARQL Syntax und Intuition http://semantic-web-grundlagen.de MI-SWE 2011 20
Formatování výsledků - SELECT prozatím byly všechny výsledky tabulky se sloupci jako Proměnné v SELECT Syntax: SELECT <seznam proměnných> nebo SELECT * Výhoda Jednoduché sekvenčbí zpracování výsledků Nevýhoda Struktura/vztahy mezi Objekty není ve výsledku zřejmá MI-SWE 2011 21
Formatování výsledků - CONSTRUCT Kódování výsledků ve tvaru RDF-Grafů: výstupní formát CONSTRUCT Syntax: CONSTRUCT <RDF-šablóna v Turtle> PREFIX ex: <http://example.org/> CONSTRUCT {?person ex:mailbox?email.?person ex:telefon?telefon. } WHERE {?person ex:email?email.?person ex:tel?telefon. } Výhoda Strukturovaný výsledek se vztahy mezi prvky nevýhoda Sekvenční zpracování je ztíženo Schází podpora pro volné proměnné MI-SWE 2011 22
Formatování výsledků - CONSTRUCT PREFIX ex: <http://example.org/> CONSTRUCT {_id1 ex:email?email. _id1 ex:telefon?telefon _id1 ex:person?person.} WHERE {?person ex:email?email.?person ex:tel?telefon.} @prefix ex: <http://example.org/> ex:gabi ex:email gabi@example.org. ex:gabi ex:email "g.mueller@example.org". ex: Gabi ex:tel "123456789. ex: Gabi ex:tel "987654321". _e ex:email "gabi@example.org"; ex:telefon "123456789" ; ex:person ex:gabi. _g ex:email "gabi@example.org"; ex:telefon "987654321" ; ex:person ex:gabi. _a ex:email "g.mueller@example.org"; ex:telefon "123456789" ; ex:person ex:gabi. _l ex:emai1 "g.mueller@example.org"; ex:telefon "987654321" ; ex:person ex:gabi. MI-SWE 2011 23
Další výstupní formáty SPARQL SPARQL podpořuje další dva výstupní formáty ASK jenom testuje, zda nějaké výsledky existují, žádné parametry DESCRIBE (informativní) ke každému nalezenému URI dává na výstupu RDF-popis (závislé na aplikaci) MI-SWE 2011 24
Modifikátory uspořádání výsledků SELECT?kniha,?cena WHERE {?kniha <http://example.org/cena>?cena. } ORDER BY?cena Uspořádání jako při srovnávacích operátorech FILTER, Uspořádání URI abecedně jako řetězce znaků Pořadí mezi různými druhy prvků: Nevázané proměnné < prázdné uzly < URI < RDF-Literály Ne každá možnost je v specifikaci definovaná Další možné upřesnění: ORDER BY DESC(?cena) ORDER BY ASC(?cena) default ORDER BY DESC(?cena),?název: hierarchické kriteria uspořádání MI-SWE 2011 25
LIMIT, OFFSET und DISTINCT Omezení velikosti výstupu: LIMIT: maximální počet výsledků (řádků tabulky) OFFSET: poloha/pozice prvního výsledku SELECT DISTINCT: SELECT DISTINCT?kniha,?cena WHERE {?kniha <http://example.org/cena>?cena. } ORDER BY?cena LIMIT 5 OFFSET 25 LIMIT a OFFSET mají smysl jen s ORDER BY MI-SWE 2011 26
Kombinace modifikátorů Pořadí zpracování vícero modifikátorů: 1 nejdřív uspořádání podle ORDER BY 2 Odstranění nevybraných proměnných 3 Odstranění vícenásobných výsledků (DISTINCT) 4 Odstranění prvního OFFSET výsledku 5 Odstranění všech výsledků nad LIMIT Uspořádat se dá i podle nevybraných proměnných ORDER BY není relevantní jen pro SELECT MI-SWE 2011 27
Otevřené otázky Jak je přesně definovaná sémantika SPARQL? Jak těžká je úplná implementace SPARQL? Jak se můžeme dotazovat nad RDF Schema nebo OWL? Jak jinak to vše navrhnout? MI-SWE 2011 28
Dodatky SPARQL vocabulary SPARQL negace Jena rozšíření MI-SWE 2011 29
SPARQL Vocabulary - Keywords Header Query type Modifiers Dataset spec. Graph patterns Constraints Operators BASE SELECT ORDER BY FROM GRAPH STR isuri PREFIX CONSTRUCT LIMIT FROM NAMED OPTIONAL LANG isiri DESCRIBE OFFSET WHERE UNION LANGMATCHES isliteral ASK DISTINCT FILTER DATATYPE REGEX REDUCED a BOUND true { } sameterm false MI-SWE 2011 30
SPARQL Vocabulary - Operators SPARQL operators XPath operators bound isiri isblank isliteral str lang datatype (logical-or) && (logical-and) = (RDFterm-equal) sameterm langmatches regex! A (not) A < B (less-than) A > B (greater-than) A <= B A >= B A * B (multiply) A / B (divide) A + B (add) A - B (subtract) MI-SWE 2011 31
SPARQL Vocabulary type casting From \ To str flt dbl dec int dt bool str Y M M M M M M flt Y Y Y M M N Y dbl Y Y Y M M N Y dec Y Y Y Y Y N Y int Y Y Y Y Y N Y dt Y N N N N Y N bool Y Y Y Y Y N Y IRI Y N N N N N N ltrl Y M M M M M M bool = xsd:boolean dbl = xsd:double flt = xsd:float dec = xsd:decimal int = xsd:integer dt = xsd:datetime str = xsd:string ltrl = simple literal Y = Yes N = No M = dependent on the lexical value... FILTER ( xsd:datetime(?date) < xsd:datetime("2005-01-01t00:00:00z") )... MI-SWE 2011 32
SPARQL Vocabulary Extensions Jena ARQ Function Library http://jena.sourceforge.net/arq/documentation.html Mathematical Functions afn:min afn:max fn:round fn:abs fn:floor fn:ceiling afn:pi afn:e Boolean Functions fn:boolean fn:not RDF Graph Functions afn:bnode afn:localname afn:namespace Miscellaneous Functions afn:now afn:sha1sum String Functions fn:contains fn:starts-with fn:ends-with fn:string-length fn:lower-case fn:upper-case fn:matches fn:concat fn:substring afn:substr afn:substring afn:strjoin fn: <http://www.w3.org/2005/xpath-functions#> apf: <http://jena.hpl.hp.com/arq/property#> MI-SWE 2011 33
SPARQL Vocabulary Extensions Jena Property Function Library http://jena.sourceforge.net/arq/documentation.html list list:member member list list:index (index member) list list:length length container rdfs:member member apf:textmatch LARQ - Free Text Indexing for SPARQL bag apf:bag member seq apf:seq member member bound to each element in the container seq apf:alt member varorterm apf:assign varorterm iri apf:splitiri (namespace localname) subject apf:str object subject apf:blanknode label subject apf:bnode label subject apf:versionarq version var apf:concat (arg arg...) apf: <http://jena.hpl.hp.com/arq/property#>. list: <http://jena.hpl.hp.com/arq/list#. MI-SWE 2011 34
SPARQL negation -! bound predicate PREFIX rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# PREFIX rdfs: http://www.w3.org/2000/01/rdf-schema# PREFIX xsd: http://www.w3.org/2001/xmlschema# PREFIX owl: http://www.w3.org/2002/07/owl# PREFIX owl2xml: http://www.w3.org/2006/12/owl2-xml# PREFIX stud: http://www.semanticweb.org/ontologies/nswi140/study.owl# SELECT?name?student?year?subject WHERE {?student a stud:student; stud:hasname?name; stud:hasstudyyear?year. OPTIONAL {?student stud:hassubject?subject.?subject a stud:databasesubject. } FILTER (?year > 1 ) FILTER (! bound(?subject) ) } ORDER BY?name MI-SWE 2011 35
Jena ARQ Function Library PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX meex:<http://swa.cefriel.it/meex#> PREFIX gd: <http://maps.google.com/> PREFIX evdb: <http://eventful.com/> PREFIX fn: <http://www.w3.org/2005/xpath-functions#> PREFIX afn: <http://jena.hpl.hp.com/arq/function#> PREFIX apf: <http://jena.hpl.hp.com/arq/property#> CONSTRUCT {?event a meex:event; rdfs:label?event_label; meex:haswhere?where_address; gd:latlon?fn_concat. } WHERE {?event a meex:event; rdfs:label?event_label; meex:haswhere?where.?where gd:postaladdress?where_address; gd:hasgeopt?geopt.?geopt evdb:lat?where_lat; evdb:lon?where_lon. } LET (?fn_concat := afn:strjoin(' ',?where_lat, ',',?where_lon)) MI-SWE 2011 36
Jena ARQ Function Library PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX meex:<http://swa.cefriel.it/meex#> PREFIX gd: <http://maps.google.com/> PREFIX evdb: <http://eventful.com/> PREFIX fn: <http://www.w3.org/2005/xpath-functions#> PREFIX afn: <http://jena.hpl.hp.com/arq/function#> PREFIX apf: <http://jena.hpl.hp.com/arq/property#> A další možnosti, např.:?apf_concat apf:concat('apf_concat: '?label). LET (?fn_concat := fn:concat('fn_concat: ',?label)) LET (?afn_concat := afn:strjoin(' ', 'afn_concat:',?label)) LET (?labelup := fn:upper-case(?label)) MI-SWE 2011 37