Język zapytań SPARQL - cs.put.poznan.pl fileJęzyk zapytań SPARQL Agnieszka Ławrynowicz Instytut...

42
Język zapytań SPARQL Agnieszka Ławrynowicz Instytut Informatyki Politechniki Poznańskiej Poznań, 2018

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

Stos języków Sieci Semantycznej

Język zapytań SPARQL

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

Silniki zapytań/repozytoria trójek

•  Jena•  AllegroGraph•  Sesame•  OpenLinkVirtuoso•  Blazegraph

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