SPARQL Sémantika Peter Vojtáš 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 8 MI POA Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
Obsah Sledujeme německou knížku SPARQL Semantik http://semantic-web-grundlagen.de P. Hitzler, M. Krötzsch, S. Rudolph, Y. Sure Semantic Web Grundlagen Springer 2008, ISBN: 978-3-540-33993-9 MI-SWE 2011 SPARQL sémantika 2 10-SPARQL-Semantik-2009.pdf
Obsah 1. Úvod a motivace 2. Transformace dotazů v SPARQL do SPARQL algebry 3. Počítání v SPARQL algebře 4. Shrnutí MI-SWE 2011 SPARQL sémantika 3
SPARQL Minulá přednáška: SPARQL jako dotazovací jazyk pro RDF PREFIX ex: <http://example.org/> SELECT?buch,?autor WHERE {?buch ex:verlegtbei <http://springer.com/verlag>.?buch ex:preis?preis.?buch ex:autor?autor FILTER (?preis < 35) } ORDER BY?preis LIMIT 10 Charakteristika SPARQL: jednoduché, nepovinné a alternativní grafové vzory Filter Výstupní formáty (SELECT, CONSTRUCT,... ) Modifikátory (ORDER BY, LIMIT,... ) Pro tuto přednášku zbylo zodpovědět otázku: Jak je přesně definovaná sémantika SPARQL? MI-SWE 2011 SPARQL sémantika 4
K čemu sémantika Zatím neformální představení SPARQL (my jsme měli článek čilanů) Použivatel: které odpovědi můžu očekávat na můj dotaz? Vývojář: Jak se bude chovat moje SPARQL implementace? Výrobce: Je můj produkt v souladu se SPARQL? Formální sémantika snad do toho vnese více světla MI-SWE 2011 SPARQL sémantika 5
Sémantika dotazovacích jazyků Sémantika formální logiky: Modelově teoretická sémantika: které interpretace splňují znalostní bázi důkazově teoretická sémantika: které důkazy (odvození) z dané znalostní báze jsou přípustné?... Sémantika programovacích jazyků: Axiomatická sémantika: která logická tvrzení jsou pravdivá pro daný program? Operační sémantika: jak vypadá běh daného programu? Denotační sémantika: jak lze daný programm reprezentovat jako funkci vstup-výstup? Co teď s dotazovacím jazykem? MI-SWE 2011 SPARQL sémantika 6
Sémantika dotazovacích jazyků Sémantika dotazovacích jazyků: Dotaz jako splňování (query entailment) dotaz jako popis přípustných výsledků databáze jako množina logických předpokladů (teorie) odpověď na dotaz jako logické odvození Např.: OWL DL a RDF(S) jako dotazovací jazyky, konjunktivní dotazy Dotazovací algebra dotaz jako popis výpočtu výsledků databáze jako vstup odpověď jako výstup Např.: relační algebra pro SQL, SPARQL-algebra MI-SWE 2011 SPARQL sémantika 7
Transformace dotazů do SPARQL algebry {?kniha ex:cena?cena. FILTER (?cena < 15) OPTIONAL {?kniha ex:nazev?nazev. } {?kniha ex:autor ex:shakespeare. } UNION {?kniha ex:autor ex:marlowe. } } Sémantika SPARQL-ovského dotazu: 1. Transformace dotazu do algebraického výrazu 2. Spočítání výsledku tohoto výrazu MI-SWE 2011 SPARQL sémantika 8
Transformace dotazů do SPARQL algebry: BGP {?kniha ex:cena?cena. FILTER (?cena < 15) OPTIONAL {?kniha ex:nazev?nazev. } {?kniha ex:autor ex:shakespeare. } UNION {?kniha ex:autor ex:marlowe. } } První krok: transformace jednoduchých grafových vzorů Operátor BGP Basic Graph Pattern Současně rozepsaní zkráceného URI MI-SWE 2011 SPARQL sémantika 9
Transformace dotazů do SPARQL algebry: BGP { BGP(?kniha <http://eg.org/cena>?cena.) FILTER (?cena < 15) OPTIONAL { BGP(?kniha <http://eg.org/nazev?nazev.) } { BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) } UNION { BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) } } První krok: transformace jednoduchých grafových vzorů Operátor BGP Basic Graph Pattern Současně rozepsaní zkráceného URI MI-SWE 2011 SPARQL sémantika 10
Transformace do SPARQL algebry: Union { BGP(?kniha <http://eg.org/cena>?cena.) FILTER (?cena < 15) OPTIONAL { BGP(?kniha <http://eg.org/nazev?nazev.) } { BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) } UNION { BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) } } Druhý krok: skládání alternativních grafových vzorů Operátor Union vztahuje se na UNION {} ohraničené grafové vzory UNION ( váže silněji než konjunkce) Uzávorkování vícero alternativ jako v minulé přednášce (zleva asociativní) MI-SWE 2011 SPARQL sémantika 11
Transformace do SPARQL algebry: Union { BGP(?kniha <http://eg.org/cena>?cena.) FILTER (?cena < 15) OPTIONAL { BGP(?kniha <http://eg.org/nazev?nazev.) } Union({ BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) }, { BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) }) } Druhý krok: skládání alternativních grafových vzorů Operátor Union vztahuje se na UNION {} ohraničené grafové vzory UNION ( váže silněji než konjunkce) Uzávorkování vícero alternativ jako v minulé přednášce (zleva asociativní) MI-SWE 2011 SPARQL sémantika 12
Transformace do SPARQL algebry Join(M1, M2) LeftJoin(M1, M2, F) Filter (F, M) Z konjunktivní spojení M1 a M2 Nepovinné spojení M1 s M2 pod podmínkou F Použití diltrovací podmínky F na M Konstanta pro prázdný výraz MI-SWE 2011 SPARQL sémantika 13
Transformace do SPARQL algebry Join(M1, M2) LeftJoin(M1, M2, F) Filter (F, M) Z konjunktivní spojení M1 a M2 Nepovinné spojení M1 s M2 pod podmínkou F Použití filtrovací podmínky F na M Konstanta pro prázdný výraz Trasformace se vykonává postupně zevnitř ven: 1. Zvol nejaký nejvnitřnější grafový vzor M; 2. Odstraň filtrovací podmínky z M; GF := konjunkce filtrovacích podmínek 3. Inicializuj G := Z, a zpracuj všechny podvýrazy UA následovně: a. pokud UA = OPTIONAL Filter(F, A): G := LeftJoin(G, A, F) b. jinak, pokud UA = OPTIONAL A: G := LeftJoin(G, A, true) c. jinak: G := Join(G,UA) 4. pokud GF je neprázdné: G := Filter(GF,G) MI-SWE 2011 SPARQL sémantika 14
Transformace SPARQL algebry:(left)join, Filter { BGP(?kniha <http://eg.org/cena>?cena.) FILTER (?cena < 15) OPTIONAL { BGP(?kniha <http://eg.org/nazev?nazev.) } Union({ BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) }, { BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) }) } MI-SWE 2011 SPARQL sémantika 15
Transformace SPARQL algebry:(left)join, Filter { BGP(?kniha <http://eg.org/cena>?cena.) FILTER (?cena < 15) OPTIONAL Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) } MI-SWE 2011 SPARQL sémantika 16
Transformace SPARQL algebry:(left)join, Filter { BGP(?kniha <http://eg.org/cena>?cena.) FILTER (?cena < 15) OPTIONAL Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) } MI-SWE 2011 SPARQL sémantika 17
Transformace SPARQL algebry:(left)join, Filter ) FILTER ((?cena < 15) Join( LeftJoin( Join(Z, BGP(?kniha <http://eg.org/cena>?cena.)), Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) true ), Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) ) MI-SWE 2011 SPARQL sémantika 18
Transformace SPARQL algebry Modifikátory G := OrderBy(G, zadaní uspořádání) G := Slice(G, o, l) ořeže výsledkovou listinu na interval délky l od pozice o, pokud bylo použito OFFSET o a LIMIT l G := Project(G, seznam proměnných) pokud to bylo v SELECT G:=Distinct(G) MI-SWE 2011 SPARQL sémantika 19
Definice operací SPARQL algebry Jak jsou definovány operace SPARQL-algebry? Výstup: tabulka výsledků (formátování nehraje roli) vstup: dotazovaná RDF-Databáze Částečné výsledky podvýrazů Rozličné parametry podle operace Prázdný výraz Z? Výsledek právě jeden (funkce s prázdným oborem hodnot) tabulka s jedním řádkem ale žádnými sloupci Více předminulá přednáška MI-SWE 2011 SPARQL sémantika 20
Příklad @prefix ex: <http://example.org/>. @prefix xsd: <http://www.w3.org/2001/xmlschema#>. ex:hamlet ex:autor ex:shakespeare ; ex:preis "10.50"^^xsd:decimal. ex:macbeth ex:autor ex:shakespeare. ex:tamburlaine ex:autor ex:marlowe ; ex:preis "17"^^xsd:integer. ex:doctorfaustus ex:autor ex:marlowe ; ex:preis "12"^^xsd:integer ; ex:titel "The Tragical History of Doctor Faustus". ex:romeojulia ex:autor ex:brooke ; ex:preis "9"^^xsd:integer. {?kniha ex:cena?cena. FILTER (?cena < 15) OPTIONAL {?kniha ex:nazev?nazev. } {?kniha ex:autor ex:shakespeare. } UNION {?kniha ex:autor ex:marlowe. } } MI-SWE 2011 SPARQL sémantika 21
Příklad FILTER ((?cena < 15) Join( LeftJoin( Join(Z, BGP(?kniha <http://eg.org/cena>?cena.)), Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) true ), Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) ) ) kniha ex:tamburlaine ex:doctorfaustu s MI-SWE 2011 SPARQL sémantika 22
Příklad FILTER ((?cena < 15) Join( LeftJoin( Join(Z, BGP(?kniha <http://eg.org/cena>?cena.)), Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) true ), Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) ) ) kniha ex:macbeth ex:hamlet MI-SWE 2011 SPARQL sémantika 23
Příklad FILTER ((?cena < 15) Join( LeftJoin( Join(Z, BGP(?kniha <http://eg.org/cena>?cena.)), Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) true ), Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) ) ) kniha ex:hamlet ex:macbeth ex:tamburlaine ex:doctorfaustu s MI-SWE 2011 SPARQL sémantika 24
Příklad FILTER ((?cena < 15) Join( LeftJoin( Join(Z, BGP(?kniha <http://eg.org/cena>?cena.)), Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) true ), Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) ) ) kniha cena ex:hamlet ex:tamburlaine ex:doctorfaustus ex:romeojulia "10.50"ˆˆxsd:decimal "17"ˆˆxsd:integer "12"ˆˆxsd:integer "9"ˆˆxsd:integer MI-SWE 2011 SPARQL sémantika 25
Příklad FILTER ((?cena < 15) Join( LeftJoin( Join(Z, BGP(?kniha <http://eg.org/cena>?cena.)), Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) true ), Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) ) ) kniha ex:doctorfaustus nazev "The Tragical History of Doctor Faustus" MI-SWE 2011 SPARQL sémantika 26
Příklad FILTER ((?cena < 15) Join( LeftJoin( Join(Z, BGP(?kniha <http://eg.org/cena>?cena.)), Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) true ), Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) ) ) ex:hamlet kniha cena nazev "10.50"ˆˆxsd:decimal ex:tamburlaine "17"ˆˆxsd:integer ex:doctorfaustus "12"ˆˆxsd:integer "The Tragical History..." ex:romeojulia "9"ˆˆxsd:integer MI-SWE 2011 SPARQL sémantika 27
Příklad FILTER ((?cena < 15) Join( LeftJoin( Join(Z, BGP(?kniha <http://eg.org/cena>?cena.)), Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) true ), Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) ) ) ex:hamlet kniha cena nazev "10.50"ˆˆxsd:decimal ex:tamburlaine "17"ˆˆxsd:integer ex:doctorfaustus "12"ˆˆxsd:integer "The Tragical History..." ex:romeojulia "9"ˆˆxsd:integer MI-SWE 2011 SPARQL sémantika 28
Příklad FILTER ((?cena < 15) Join( LeftJoin( Join(Z, BGP(?kniha <http://eg.org/cena>?cena.)), Join(Z, BGP(?kniha <http://eg.org/nazev?nazev.) ) true ), Union(Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/shakespeare>.) ), Join(Z, BGP(?kniha <http://eg.org/autor> <http://eg.org/marlowe>.) )) ) ) ex:hamlet kniha cena nazev "10.50"ˆˆxsd:decimal ex:tamburlaine "17"ˆˆxsd:integer ex:doctorfaustus "12"ˆˆxsd:integer "The Tragical History..." ex:romeojulia "9"ˆˆxsd:integer MI-SWE 2011 SPARQL sémantika 29