Co to jest SPARQL i do czego służy?

- autor: tsissput

W niedalekiej przeszłości każda baza RDF implementowała swój własny język zapytań na grafie RDF. W takiej sytuacji przeniesienie się z jednego repozytorium do drugiego było bardzo trudne. Ponadto, mimo tego, że niewiele serwisów udostępniało publicznie swoje dane, to bez jednego standardu zapytań, konieczne było tworzenie agentów semantycznych, które potrafiły zadawać pytania w różnych językach. I tak oto powstał wspólny język zapytań stworzony przez konsorcjum W3C. Język SPARQL stał się na tyle popularny, że udostępnienie tzw. końcówki SPARQL (ang. SPARQL endpoint) jest jednym ze standardów funkcjonowania serwisów semantycznych zgodnych z Linked Open Data.

SPARQL (ang. Simple Protocol And RDF Query Language) – jest to język zapytań i protokół dla plików RDF. Dzięki SPARQL można z plików RDF wyciągać zawężone dane według kryteriów określonych poprzez predykat RDF. W styczniu 2008 SPARQL został uznany jako standard W3C. Jest to jeden z kluczowych standardów w technologii sieci semantycznych. Język ten swoją składnią przypomina język SQL, dlatego programiści obeznani z relacyjnymi bazami danych w prosty sposób będą mogli przerzucić się na technologie semantyczne. Ponadto zapytania mogą być zadawane w postaci grafów RDF uwzględniających zawartą w danych wiedzę. Wzorce występujące w zapytaniach mają formę trójek RDF wraz ze słowami kluczowymi języka. Zapytanie SPARQL składa się z trzech części:

  • część prefiksów, w której definiowane są adresy URI danych oraz ontologii lub innych dokumentów
  • część opisująca rodzaj zapytania (SELECT, CONSTRUCT, ASK, DESCRIBE),
  • część składająca się ze wzorca w postaci trójek RDF wraz z dodatkowymi elementami (FILTER, ORDER BY, OPTIONAL itd.).

Oprócz tego, że SPARQL to język zapytań, jest to również protokół przesyłu danych typu RDF poprzez technologie Web Service: WSDL 2.0 i SOAP 1.2. Ponadto rozwijany jest również SPARQL Query Results XML – Format będący specyfikacją standardu dokumentów opisujących rezultaty zapytań typu SELECT i ASK. SPARQL endpoint – jest to zgodny protokół serwisowy, opisany w specyfikacji SPROT. Protokół ten pozwala użytkownikom końcowym (ludziom lub maszynom) na sprawdzenie.

W języku SPARQL są wyspecyfikowane cztery różne warianty zapytania w zależności od potrzeb:

  • Zapytanie SELECT:
    • używane do wyciągnięcia surowych danych z SPARQL endpoint, wyniki są zwracane w formie tabeli.
  • Zapytanie CONSTRUCT
    • służy do pobierania informacji z SPARQL endpoint, transformuje wyniki na graf RDF.
  • Zapytanie ASK
    • służy do sprawdzenia czy podane zapytanie zwróci jakiś wynik – wyrażenie zwraca wynik w postaci Prawda / Fałsz.
  • Zapytanie DESCRIBE
    • używane do wyodrębnienia grafu RDF z SPARQL endpoint, wynikiem będzie najmniejszy możliwy graf opisujący dany zasób.

Każde z wyżej wymienionych rodzajów zapytań musi posiadać blok WHERE który może ograniczać zapytanie. Tylko w przypadku zapytania DESCRIBE zapytanie WHERE jest opcjonalne. Na kilku przykładach zaprezentuje jak wykonywać zapytania w SPARQL.

 

Weźmy pod uwagę prosty graf RDF:

<http://www.przykladgrafurdf.com/>
<http://purl.org/dc/elements/1.1/title> "SPARQL – język zapytań grafów RDF".
<http:// www.przykladgrafurdf.com/>
<http://purl.org/dc/elements/1.1/creator> "Andrzej Klops".

Jeśli chcemy zapytać się o nazwę artykułu który znajduje się pod adresem <http://www.przykladgrafurdf.com/&gt;  możemy to zrobić tworząc zapytanie:

SELECT ?tytul
WHERE
{
< http://www.przykladgrafurdf.com/>
<http://purl.org/dc/elements/1.1/title> ?tytul.
}

Zapytanie w języku SPARQL rozpoczynamy od klauzuli SELECT, po której podajemy listę zmiennych, o które pytamy. Natomiast w sekcji WHERE pomiędzy nawiasami sześciennymi wpisujemy szablon grafu RDF, gdzie pewne elementy grafu są zastępowane zmiennymi rozpoczynającymi się od znaku zapytania. Oczywiście nie musimy za każdym razem wpisywać pełnych URI, aby tego uniknąć możemy skorzystać z prefiksów. Wcześniejsze zapytanie uzupełnione o prefiksy wyglądałoby następująco:

PREFIX dc: <http://purl.org/dc/elements/1.1/> .
SELECT ?tytul
WHERE
{
<http://www.przykladgrafurdf.com/> dc:title ?tytul.
}

A co w przypadku, kiedy chcemy zapytać o więcej informacji o danym zasobie? Poniższy przykład pokazuje, jak w prosty sposób można to zrobić:

<http://www.przykladgrafurdf.com/>
<http://purl.org/dc/elements/1.1/title> "SPARQL – język zapytań grafów RDF".
<http://www.przykladgrafurdf.com/>
<http://purl.org/dc/elements/1.1/creator> "Andrzej Klops".
<http://www.przykladgrafurdf.com/>
<http://purl.org/dc/elements/1.1/title> „Zastosowanie ontologii w grafach RDF".
<http://www.przykladgrafurdfdwa.com/>
<http://purl.org/dc/elements/1.1/creator>"Andrzej Kobyła".

Zmienione zapytanie wyciągające więcej informacji o danym zasobie:

PREFIX dc: <http://purl.org/dc/elements/1.1/> .
SELECT ?url, ?tytul, ?autor
WHERE
{
?url dc:title ?tytul.
?url dc:creator ?autor.
}

w wyniku zwróci:

url

tytul

autor

http://www.przykladgrafurdf.com

SPARQL – język zapytań grafów RDF

Andrzej Klops

http://www.przykladgrafurdfdwa.com

Zastosowanie ontologii w grafach RDF

Andrzej Kobyła

 

W zapytaniu możemy również wybierać trójki na podstawie literałów w zdaniu. Na przykład dla grafu:

@prefix dc: <http://purl.org/dc/elements/1.1/> .
<http://www.semanticschool.com/> dc:lang "Polski".
<http://semdl.info/> dc:lang "English".
<http://semdl.info/> dc:type "Site"@en.
<http://www.semanticschool.com/> dc:type "Strona"@pl.
<http://www.semanticschool.com/> <http://example.com/articleCount> 43.
<http://blog.knowledgehives.com/> <http://example.com/articleCount> 9.
<http://semdl.info/> dc:date "02/01/2010"^^xsd:date.
<http://www.semanticschool.com/> dc:date "09/19/2009"^^xsd:date.
<http://semdl.info/> <http://example.com/inPolish> "false"^^xsd:boolean.
<http://www.semanticschool.com/> <http://example.com/inPolish> "true"^^xsd:boolean.

Wykonanie poniższego zapytania na powyższym grafie zwróci stronę napisaną po angielsku.

PREFIX dc: <http://purl.org/dc/elements/1.1/> .
SELECT ?url WHERE { ?url dc:lang "English". }

Oczywiście SELECT z klauzulą WHERE to nie jedyna możliwość tworzenia zapytań. Na poniższym grafie zostanie zaprezentowany przykład działania innych klauzuli takich jak:

– CONSTRUCT

– ASK

– DESCRIBE

Na początku zaczniemy od prostego zapytania SELECT, w którym to poszukamy te podgrafy w, których istnieją zasoby będące obiektami w zdaniach, gdzie podmiotem jest :B a predykatem jest :e, oraz są oddalone od zasobu :A o dwa stopnie.

SELECT ?V ?V1 ?e1 ?e2
WHERE
{
:B :e ?V.
:A ?e1 ?V1.
?V1 ?e2 ?V.
}

W wyniku otrzymamy tabelę zawierającą podgrafy spełniający nasz warunek:

 

W kolejnym kroku zostanie przedstawione działanie klauzuli CONSTRUCT. W tym przypadku zadaniem jest stworzenie grafu zawierającego ścieżki prowadzące od zasobu :A i :B do zasobów będących wynikami poprzedniego zapytania, przy czym predykaty na ścieżce od zasobu :A do znalezionego zasobu zostaną zastąpione przez predykat :p.

CONSTRUCT
{
:B :e ?V.
:A :p ?V1.
?V1 :p ?V.
}
WHERE
{
:B :e ?V.
:A ?e1 ?V1.
?V1 ?e2 ?V.
}

To zapytanie zwróci nam następujący wynik w postaci grafu RDF. Poniżej podane rozwiązanie w języku Turtle.

:B :e :F, :E, :G .
:A :p :B .
:B :p :E , :F , :G .
:A :p _:c .
_:c :p :F .
:A :p :D .
:D :p :E .

Za pomocą zapytania ASK możemy sprawdzić np. czy :F znajduje się na ścieżce o długości 2 z :A do :E.

ASK
{
:A ?p1 :F.
:F ?p2 :E.
}

To zapytanie zwróci w wyniku wartość ”FALSE

W ostatnim jest zaprezentowane działanie klauzuli DESCRIBE dla zapytania o zmienną ?a

DESCRIBE ?a
WHERE
{
?a :b :B.
}

Wynikiem tego zapytania jest opis zasobu który został dopasowany pod zmienna a:

:A :a :D ;
:b :B ,
_:c .

Jak widać, język SPARQL jest dostosowany do odpytywania repozytoriów danych zapisanych w formacie RDF i tym różni się od znanego już nam języka SQL. Inspiruje się nim jednak, jeśli chodzi o składnię: podobnie jak on posiada takie klauzule jak SELECT, WHERE itd. Każda osoba zajmująca się na poważnie technologią Semantic Web powinna poznać składnię tego języka.

 

Źródła:

http://www.ploug.org.pl/konf_09/materialy/pdf/17_Semantic_Web_-_technologie.pdf

http://www.w3.org/TR/rdf-sparql-query/

http://www.semanticschool.com/

http://en.wikipedia.org/wiki/SPARQL

Autor: 103890

Advertisements

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: