Język zapytań SPARQL - cs.put.poznan.pl fileJęzyk zapytań SPARQL Agnieszka Ławrynowicz Instytut...
Transcript of Język zapytań SPARQL - cs.put.poznan.pl fileJęzyk zapytań SPARQL Agnieszka Ławrynowicz Instytut...
Język zapytań SPARQL
Agnieszka Ławrynowicz
Instytut Informatyki Politechniki Poznańskiej
Poznań, 2018
Turtle
Turtle(TerseRDFTripleLanguage):• serializacjaRDF• reprezentacja„trójkowa”„trójek”<Subject,Predicate,
Object>• przyjaznadlaczłowiekaalternatywadlaskładniRDF/XML
– częstowykorzystywanawprzykładach,tutorialach,literaturze
Turtle
Turtle(TerseRDFTripleLanguage):• serializacjaRDF• reprezentacja„trójkowa”„trójek”<Subject,Predicate,
Object>• przyjaznadlaczłowiekaalternatywadlaskładniRDF/XML
– częstowykorzystywanawprzykładach,tutorialach,literaturze
@prefixosoba:<h>p://przyklad/osoba/>.
@prefixfoaf:<h>p://xmlns.com/foaf/0.1/>.osoba:afoaf:name"Alicja".osoba:afoaf:mbox<mailto:[email protected]>.osoba:bfoaf:name"Jan".
SPARQL to…
SPARQLProtocolAndRdfQueryLanguage-językzapytańSieciSemantycznej
• Wymowa:jak„sparkle”• JęzykzapytańdladanychwformacieRDF• Protokół(HTTP,SOAP)
SPARQL pozwala na…
• Zapytaniadoźródełdanychstrukturalnychisemistrukturalnych
• Eksplorowaniedanychprzezzadawaniezapytańdotyczącychnieznanychzwiązków
• Wykonywaniezłożonychzłączeńzróżnorodnychbazdanychwpojedynczymzapytaniu
• TransformacjędanychRDFzjednegosłownikadoinnego
SPARQL – główna idea
Dopasowywaniewzorców• OpiszpodgrafytychgrafówRDF,doktórychwydawanejest
zapytanie• Podgrafy,któredasiędopasowaćdoTwojegoopisu
konstruująwynik• Wzorcegrafowe-grafyRDFzawierającezmienne
SPARQL – główna idea (przykład)
Graf,doktóregowydajemyzapytanie:
Wyniki: Wzorzeczapytania:
http://.../Eyjafjallajökull
http://.../Wezuwiusz
http://.../Wulkan
"2010”
p:ostatniaErupcja
rdf:Type
rdf:Type
?v http://.../Wulkan
rdf:Type ?vh\p://.../Eyja^allajökullh\p://.../Wezuwiusz
Końcówki SPARQL
KońcówkaSPARQL:• nawejściuprzyjmujezapytania• nawyjściuzwracawynikipoprzezHTTPRodzajekońcówek:• Ogólne–umożliwiajązadawaniezapytańdodowolnych
danychRDFdostępnychprzezsiećWWW• Dedykowane–związanezkonkretnymizbioramidanych
Dostęp do końcówki SPARQL
• końcówkaSPARQL:usługasieciowatypuREST• wydawaniezapytańSPARQLdozdalnejkońcówkijestgeneralniewydawaniemżądaniaHTTPGETdotejkońcówkizparametremquery (przesyłanytekstzapytania)
Zapytanie SPARQL składa się z…
DeklaracjiprefiksówdlaprzestrzeninazwdoskracaniaURIDefinicjizbiorudanychdowskazania,doktóregografu(grafów)
RDFbędąwydawanezapytaniaKlauzulispecyfikującejwynikdoidentyfikacji,jakąinformację
zwrócićzzapytaniaWzorcazapytaniadospecyfikacjiocopytazapytaniewydanedo
zbiorudanychModyfikatorówzapytaniadospecyfikacjioperatorównp.
sortowaniawynikówiinnychsposobówre-aranżacjiwynikówzapytania
Zapytanie SPARQL składa się z…
PREFIX foo: <http://przyklad.org/w1> … FROM … SELECT … WHERE { … } ORDER BY …
Wzorzeczapytania
Definicjazbiorudanych
Specyfikacjawyniku
Deklaracjaprefiksów
Modyfikatorzapytania
SPARQL – wzorzec trójki
@prefixosoba:<h>p://przyklad/osoba/>.@prefixfoaf:<h>p://xmlns.com/foaf/0.1/>.osoba:afoaf:name“Alicja".osoba:afoaf:mbox<mailto:[email protected]>.osoba:bfoaf:name“Jan".
"Helloworld"zapytańSPARQLSELECT?imieWHERE{?xfoaf:name?imie}
------------- | imie | ======== | “Alicja” | | ”Jan”| -------------
Wzorzectrójki=TrójkaRDFzmożliwościąwystępowaniawniej(nazwanych)zmiennych
SPARQL – podstawowy wzorzec grafu
@prefixosoba:<h>p://przyklad/osoba/>.@prefixfoaf:<h>p://xmlns.com/foaf/0.1/>.osoba:afoaf:name“Alicja".osoba:afoaf:mbox<mailto:[email protected]>.osoba:bfoaf:name“Jan".
PREFIXosoba:<h>p://przyklad/osoba/>PREFIXfoaf:<h>p://xmlns.com/foaf/0.1/>SELECT?imieWHERE{?osobafoaf:mbox<mailto:[email protected]>.?osobafoaf:name?imie.}
------------- | imie | ======== | “Alicja” | -------------
Podstawowywzorzecgrafu–zbiórwzorcówtrójek,definiujekształtgrafu
Wieloznacznik
@prefixosoba:<h>p://przyklad/osoba/>.@prefixfoaf:<h>p://xmlns.com/foaf/0.1/>.osoba:afoaf:name“Alicja".osoba:afoaf:mbox<mailto:[email protected]>.osoba:bfoaf:name“Jan".
PREFIXosoba:<h>p://przyklad/osoba/>PREFIXfoaf:<h>p://xmlns.com/foaf/0.1/>SELECT* WHERE{?osobafoaf:mbox<mailto:[email protected]>.?osobafoaf:name?imie.}
------------------------- | osoba | imie | ============== | osoba:a | “Alicja” | -------------------------
Rozdzielanie trójek w klauzuli WHERE
• zapisstandardowya:bc.d:ef.
• wspólnypodmiota:bc;:ef.
• wspólnypodmiotipredykata:bc,f.
Rozdzielanie trójek w klauzuli WHERE - przykład
PREFIXosoba:<h>p://przyklad/osoba/>PREFIXfoaf:<h>p://xmlns.com/foaf/0.1/>SELECT* WHERE{?osobafoaf:mbox<mailto:[email protected]>,foaf:name?imie.}
PREFIXosoba:<h>p://przyklad/osoba/>PREFIXfoaf:<h>p://xmlns.com/foaf/0.1/>SELECT* WHERE{?osobafoaf:mbox<mailto:[email protected]>.?osobafoaf:name?imie.}
Zmienne anonimowe
• nazwane:głównieróżniąsiętymodzminennychnieanonimowychtym,żeniesąuwzględnianewSELECT*(jednakmożliwośćodczytanianażądanie)
• nienazwaneoznaczaneprzez[]
SPARQL – modyfikatory zapytania
Procedurydopasowywaniawzorcówprodukujązbiórrozwiązań.
Zbiórrozwiązańmożebyćzmodyfikowanynawielesposobów:– projekcja– ORDERBY– LIMIT/OFFSET– DISTINCT
(c)MikołajMorzy,AgnieszkaŁawrynowicz,InstytutInformatykiPolitechnikiPoznańskiej
PREFIXdc:<h>p://purl.org/dc/elements/1.1/>PREFIXmagazyn:<h>p://example.org/magazyn#>PREFIXinw:<h>p://example.org/inwentarz#>SELECT?ksiazka?tytulWHERE{?ksiazkadc:rtle?tytul.?ksiazkainw:cena?cena.FILTER(?cena<15)?ksiazkainw:ilosc?ilosc.FILTER(?ilosc>0)}
FILTER @prefixdc:<h>p://purl.org/dc/elements/1.1/>.@prefixmagazyn:<h>p://example.org/magazyn#>.@prefixinw:<h>p://example.org/inwentarz#>.magazyn:ksiazka1dc:rtle"SPARQLQueryLanguageTutorial".magazyn:ksiazka1inw:cena10.magazyn:ksiazka1inw:ilosc3.magazyn:ksiazka2dc:rtle"SPARQLQueryLanguage(2nded)".magazyn:ksiazka2inw:cena20;inw:ilosc5.magazyn:ksiazka3dc:rtle"MovingfromSQLtoSPARQL".magazyn:ksiazka3inw:cena5;inw:ilosc0.magazyn:ksiazka4dc:rtle"ApplyingXQuery".magazyn:ksiazka4inw:cena20;inw:ilosc8.
----------------------------------------------------------------------------|ksiazka |tytul |==================================================|magazyn:ksiazka1|"SPARQLQueryLanguageTutorial"|
FILTER - wbudowane funkcje
Logiczne:!,&&,||Arytmetyczne:+,-,*,/Porównania:=,!=,>,<,...TestySPARQL:isURI,isBlank,isLiteral,boundAkcesorySPARQL:str,lang,datatypeInne:sameTerm,langMatches,regex
OPTIONAL
@prefixosoba:<h>p://przyklad/osoba/>.@prefixfoaf:<h>p://xmlns.com/foaf/0.1/>.osoba:afoaf:name"Alicja".osoba:afoaf:nick"A-online".osoba:bfoaf:name"Jan".
PREFIXfoaf:<h>p://xmlns.com/foaf/0.1/>SELECT?imie?nick{?xfoaf:name?imie.OPTIONAL{?xfoaf:nick?nick}}
------------------------|imie|nick|========================|"Alicja"|"A-online"||"Jan"||------------------------
UNION
@prefixksiazka:<h>p://przyklad/ksiazka/>.@prefixdc10:<h>p://purl.org/dc/elements/1.0/>.@prefixdc11:<h>p://purl.org/dc/elements/1.1/>.ksiazka:adc10:rtle"SPARQLQueryLanguageTutorial".ksiazka:bdc11:rtle"SPARQLQueryLanguage(2nded)".ksiazka:cdc10:rtle"SPARQL".ksiazka:cdc11:rtle"SPARQL".
PREFIXdc10:<h>p://purl.org/dc/elements/1.0/>PREFIXdc11:<h>p://purl.org/dc/elements/1.1/>SELECTDISTINCT?tytul{{?ksiazkadc10:rtle?tytul}UNION{?ksiazkadc11:rtle?tytul}}
------------------------------------|tytul|=================================|"SPARQLQueryLanguageTutorial"||"SPARQL"||"SPARQLQueryLanguage(2nded)"|------------------------------------
Źródła danych
- zapytaniaSPARQLsąwykonywanedozbiorówdanychRDF,składającychsięzgrafówRDF
- jakdotądzapytaniawydawanedodomyślnegografu- zbiorydanychRDFskładająsięzdomyślnegografuizerolub
więcejnazwanychgrafów,identyfikowanychprzezURI- Nazwanegrafy:specyfikowanepoprzezklauzuleFROM
NAMED,lubzaszytewdanejkońcówceSPARQL- GRAPH:pozwalaporcjomzapytaniadopasowaćsiędo
nazwanychgrafówwzbiorzeRDF,wszystkopozaklauzuląGRAPH–dopasowaniedodomyślnegografu
Klauzula FROM - przykład
@prefixfoaf:<h>p://xmlns.com/foaf/0.1/>._:afoaf:name"Alicja"._:afoaf:mbox<mailto:[email protected]>.
PREFIXfoaf:<h>p://xmlns.com/foaf/0.1/>SELECT?imieFROM<h>p://przyklad.org/foaf/alicjaFoaf>WHERE{?xfoaf:name?imie}
Formaty zapytań i odpowiedzi SPARQL
SELECTzwracatablicęwyników(wszystkielubpodzbiórzmiennychzwiązanychpodczasdopasowywaniawzorcazapytania)
ASKzwracawartośćlogicznąwskazującąnatoczywzorzeczapytaniaznajdujedopasowanieczynie
DESCRIBEzwracagrafRDF,któryopisujestrukturęznalezionychzasobów(wsposóbzależnyodkonfiguracjidanegoprocesora–„niespodzianka”)
CONSTRUCTzwracagrafRDFskonstruowanypoprzezpodstawieniezmiennychwzbiorzeszablonówtrójek(translacjapomiędzyróżnymigrafamiRDF)
ASK
@prefixfoaf:<h>p://xmlns.com/foaf/0.1/>._:afoaf:name“Alicja"._:afoaf:homepage<h>p://work.example.org/Alicja/>._:bfoaf:name"Jan"._:bfoaf:mbox<mailto:[email protected]>.
PREFIXfoaf:<h>p://xmlns.com/foaf/0.1/>ASK{?xfoaf:name“Alicja"}
Yes
<?xmlversion="1.0"?><sparqlxmlns="h>p://www.w3.org/2005/sparql-results#"> <head>
</head><results>
<boolean>true</boolean></results>
</sparql>
DESCRIBE PREFIXksiazki:<h>p://przyklad.org/ksiazka/>PREFIXdc:<h>p://purl.org/dc/elements/1.1/>DESCRIBE?ksiazkaWHERE{?ksiazkadc:rtle"HarryPo>eriwięzieńAzkabanu"}
<rdf:RDF><rdf:Descripronrdf:about="h>p://przyklad.org/ksiazka/ksiazka3"><dc:creatorrdf:parseType="Resource"><vcard:Nrdf:parseType="Resource"><vcard:Given>Joanna</vcard:Given><vcard:Family>Rowling</vcard:Family></vcard:N><vcard:FN>J.K.Rowling</vcard:FN></dc:creator><dc:rtle>HarryPo>eriwięzieńAzkabanu</dc:rtle></rdf:Descripron></rdf:RDF>
2008-12-10
CONSTRUCT
@prefixosoba:<h>p://przyklad/osoba/>.@prefixfoaf:<h>p://xmlns.com/foaf/0.1/>.osoba:afoaf:name"Alicja".osoba:afoaf:mbox<mailto:[email protected]>.osoba:bfoaf:name"Jan".
PREFIXosoba:<h>p://przyklad/osoba/>PREFIXfoaf:<h>p://xmlns.com/foaf/0.1/>PREFIXvcard:<h>p://www.w3.org/2001/vcard-rdf/3.0#>CONSTRUCT{?osobavcard:FN?imie}WHERE{?osobafoaf:name?imie.}
@prefixosoba:<h>p://przyklad/osoba/>.@prefixvcard:<h>p://www.w3.org/2001/vcard-rdf/3.0#>osoba:avcard:FN"Alicja".osoba:bvcard:FN"Jan".
SPARQL 1.0 a SPARQL 1.1
• SPARQL1.0–styczeń2008– SPARQL1.0językzapytań– SPARQL1.0protokół– SPARQLformatXMLwyników
• SPARQL1.1–listopad2012– ZaktualizowanewersjeSPARQLQueryiSPARQLProtocol– SPARQL1.1Update– SPARQL1.1jednolityprotokółHTTPdozarządzaniagrafamiRDF
– SPARQL1.1opisyusług– SPARQL1.1wnioskowanie– SPARQL1.1zapytaniasfederowane
SPARQL 1.1
WyrażeniawliścieSELECT-wynikizawierającewartościwyprowadzonezestałych,wywołańfunkcjilubinnychwyrażeń
Ścieżkiwłasności–zapytaniaodowolnejdługościścieżkiwgrafiepoprzezwyrażeniaregularne
Agregacja–grupowaniewynikówiobliczaniezagregowanychwartości(np.count,min,max,avg,sum,...).
Podzapytania–zapytaniawzapytaniuZapytaniasfederowane-rozdzielaniepojedynczegozapytania
dowielukońcówekSPARQLinastępniełączeniewynikówNegacja–a)filtrowaniewynikówzależneoddopasowania
wzorcagrafuwkontekścieznalezionychwynikówb)usuwaniewynikówbędącychwrelacjizinnymwzorcem
Wnioskowanie(EntailmentRegimes)–RDFS,OWL,reguły
Wyrażenia w liście SELECT
@prefixfoaf:<h>p://xmlns.com/foaf/0.1/>._:afoaf:givenName"Jan"._:afoaf:surname„Kowalski".
PREFIXfoaf:<h>p://xmlns.com/foaf/0.1/>SELECT(fn:concat(?G,"",?S)AS?imie_nazw)WHERE{?Pfoaf:givenName?G;foaf:surname?S}
------------------------|imie_nazw|========================|„JanKowalski"|------------------------
Ścieżki własności
• Dopasujjednąlubdrugąmożliwość:{:ksiazka1dc:ztle|rdfs:label?lancuch}• Znajdźimięjakiejkolwiekosoby,którąznaAlicja{?xfoaf:mbox<mailto:alicja@przyklad>.?xfoaf:knows/foaf:name?imie.}• Imionaludziwodległości2„linków”"foaf:knows"{?xfoaf:mbox<mailto:alicja@przyklad>.?xfoaf:knows/foaf:knows/
foaf:name?imie.}{?xfoaf:mbox<mailto:alicja@przyklad>.?xfoaf:knows{2}/foaf:name?imie.}• Dowolnadługośćścieżki–imionawszystkichludzi,którychURImożna
osiągnąćstartujączfoaf:knowsAlicji:{?xfoaf:mbox<mailto:alicja@przyklad>.?xfoaf:knows+/foaf:name?imie.}
Agregacja @prefix:<h>p://ksiazki.przyklad/>.:org1:afiliuje:aut1,:aut2.:aut1:piszeKsiazke:ksiazka1,:ksiazka2.:ksiazka1:cena9.:ksiazka2:cena5.:aut2:piszeKsiazke:ksiazka3.:ksiazka3:cena7.:org2:afiliuje:aut3.:aut3:piszeKsiazke:ksiazka4.:ksiazka4:cena7.
PREFIX:<h>p://ksiazki.przyklad/>SELECT(SUM(?lcena)AS?total)WHERE{?org:afiliuje?aut.?aut:piszeKsiazke?ksiazka.?ksiazka:cena?lcena.}GROUPBY?orgHAVING(SUM(?lcena)>10)
------------------------|?total|========================|21|------------------------
Podzapytania @prefix:<h>p://people.example/>.:alicja:name"Alicja","AlicjaFoo","A.Foo".:alicja:knows:jan,:karol.:jan:name„Jan",„JanBar",„J.Bar".:karol:name„Karol",„KarolBaz",„K.Baz".
PREFIX:<h>p://people.example/>SELECT?y?minImieWHERE{:alicja:knows?y.{SELECT?y(MIN(?imie)AS?minImie)WHERE{?y:name?imie.}GROUPBY?y}}
---------------------------------------|?y|?minImie|========================|:jan|„J.Bar„||:karol|„K.Baz„|---------------------------------------
Zapytania sfederowane
@prefixfoaf:<h>p://xmlns.com/foaf/0.1/>.@prefix:<h>p://example.org/>.:people15foaf:name"Alice".:people16foaf:name"Bob".:people17foaf:name"Charles".:people18foaf:name"Daisy".
PREFIXfoaf:<h>p://xmlns.com/foaf/0.1/>SELECT?nameFROM<h>p://example.org/myfoaf.rdf>WHERE{<h>p://example.org/myfoaf/I>foaf:knows?person.SERVICE<h>p://people.example.org/sparql>{?personfoaf:name?name.}}
KońcówkaSPARQL:h\p://people.example.org/sparql
LokalnyplikFOAF:h\p://example.org/myfoaf.rdf
<h>p://example.org/myfoaf/I><h>p://xmlns.com/foaf/0.1/knows><h>p://example.org/people15>.------------------------|?name|===============|„Alice”|------------------------
Wnioskowanie @prefixex:<h>p://publicarons.example/>.ex:book1rdf:typeex:Publicaron.ex:book2rdf:typeex:Arrcle.ex:Arrclerdfs:subClassOfex:Publicaron.ex:publishesrdfs:rangeex:Publicaron.ex:MITPressex:publishesex:book3.
@prefixex:<h>p://publicarons.example/>.SELECT?pubWHERE{?pubrdf:typeex:Publicaron}
----------------|?pub|==========|ex:book1|----------------
RDF-entailment
----------------|?pub|==========|ex:book1||ex:book2||ex:book3|----------------
RDFS-entailment
Repozytoria trójek
• SpecjalizowanabazadanychdoprzechowywaniatrójekRDF
• Trójkiwprowadzanewróżnychformatach• WspierajęzykzapytańdoRDF
• SPARQL(rekomendacjaW3C)• Innejęzyki(np.ARQ,RDQL)• Może,aleniemusiwykonywaćwnioskowanie
Architektury
• Implementacja: In-memory, Natywna, Nie-natywna
• Natywna: JENA TDB, Sesame Native, Virtuoso, AllegroGraph, Oracle 11g
• Nie-Natywna: Np. Używająca RDBMS jako backend
Materiały:SPARQLspecificazondocument,h\p://www.w3.org/TR/rdf-sparql-query/SPARQLByExample,ATutorial,LeeFeigenbaum,
h\p://www.cambridgesemanzcs.com/semanzc-university/sparql-by-example„Queryingsemanzcdata“:
h\p://www.linkeddatatools.com/querying-semanzc-data
Quads i Grafy Nazwane (Named Graphs)
• Wielerepozytoriówtrójekwspiera“czwórki”(quads)dlanazwanychgrafów(namedgraphs)
AnamedgraphisjustanRDFwithaURInameo�encalledthecontext
Suchatriplestoredividesitsdataadefaultgraphandzeroormoreaddizonalnamedgraphs
SPARQLhassupportfornamedgraphsDefactostandardsexistforrepresenzngquaddata,e.g.,n-quadsandTriG(aturtle/N3variant)
AllegroGraphstoresquints(S,P,O,C,ID),theIDcanbeusedtoa\achmetadatatoatriple