Download - Język zapytań SPARQL - cs.put.poznan.pl fileJęzyk zapytań SPARQL Agnieszka Ławrynowicz Instytut Informatyki Politechniki Poznańskiej Poznań, 2018

Transcript

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