Internet Semantyczny Podstawy SPARQL
Co to jest SPARQL? Skrót SPARQL to akronim od SPARQL Protocol and RDF Query Language. Jest to język zapytań dla formatu RDF nie ogranicza się jednak do RDF wiele innego rodzaju danych może być traktowanych jak RDF. SPARQL Informacja http://www.w3.org/tr/rdf-sparql-query/
Co to jest SPARQL? Zapytania w języku SPARQL mają zwykle standardową postać: I want these pieces of information from the subset of the data that meets these conditions Warunki o których mowa opisywane są za pomocą tzw. triple patterns. Triple patterns przypominają zwykłe stwierdzenia RDF z tą różnicą, że mogą w nich występować zmienne (rozpoczyjące się od?).
Szablon zapytania: SELECT co FROM skąd warunek Warunek ma zwykle postać: s1 p1 o1. s2 p2 o2. s3 p3 o3.... triple patterns W miejsce elementów stwierdzeń mogą pojawiać się zmienne np.?s1,?p3 itd,
Za pomocą pobieramy dane. Za pomocą SELECT decydujemy co chcemy mieć pokazane.
Endpoint Źródło danych RDF określone po FROM może być podane wprost w zapytaniu: FROM <data.ttl> bądź ustawione domyślnie. Każdy zbiór danych RDF dostępny online posiada zwykle tzw. endpoint czyli serwis akceptujący zapytania SPARQL i zwracający wyniki.
Endpoint http://www.w3.org/wiki/sparqlendpoints
Endpoint http://dbpedia.org/sparql
Endpoint http://labs.mondeca.com/endpoint/lov
Dane RDF
Dane RDF @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. @prefix uco: <http://makolab.com/uconto#>. <http://moto.pl/uzywane/012345/> rdf:type uco:osobowy; uco:przebieg "120000"; uco:rocznik "2005"^^<http://www.w3.org/2001/XMLSchema#gYear>; uco:silnik [uco:pojemnosc <http://makolab.com/uconto/eng/1600>; uco:paliwo <http://makolab.com/uconto/pet/diesel>; uco:moc "95 KM".]; uco:extra "czujnik deszczu"; uco:extra "kontrola trakcji"; (3 samochody) uco:kontakt "556789890".
SPARQL online? http://librdf.org/query
SPARQL lokalnie np. z wykorzystaniem RDF PHP API (ograniczenia)
SPARQL lokalnie Skrypt PHP: <?php if($_get['query']!="") $querystring = $_GET['query']; define("rdfapi_include_dir","d:/xampp/rdfapi-php/api/"); include(rdfapi_include_dir. "RDFAPI.php"); $data = ModelFactory::getDefaultModel(); $data->load('data.rdf'); $result = $data->sparqlquery($querystring); echo $data->sparqlquery($querystring,'html');?>
Interesują nas wszystkie stwierdzenia z bazy. SELECT?s?p?o?s?p?o. SELECT *?s?p?o.
Wynik (fragment):
Interesują nas orzeczenia stwierdzeń z bazy. SELECT?p?s?p?o.
Wynik (fragment):
Interesują nas (różne) orzeczenia stwierdzeń z bazy. SELECT DISTINCT?p?s?p?o.
Interesują nas samochody z rocznika 2005. SELECT?car?car uco:rocznik "2005".
Interesują nas samochody osobowe. PREFIX rdf: <http://www.w3.org/1999/02/22-rdfsyntax-ns#>. SELECT?car?car rdf:type uco:osobowy.
Interesuje nas możliwe wyposażenie dodatkowe. SELECT?extra?car uco:extra?extra.
Interesuje nas możliwe wyposażenie dodatkowe w samochodach z rocznika 2006. SELECT?extra?car uco:extra?extra.?car uco:rocznik "2006".
Interesują nas samochody z rocznika 2006 posiadające kontrolę trakcji. SELECT?car?car uco:extra "kontrola trakcji".?car uco:rocznik "2006".
Interesuje nas przebieg samochodów z rocznika 2006 posiadających kontrolę trakcji. SELECT?przebieg?car uco:extra "kontrola trakcji".?car uco:rocznik "2006".?car uco:przebieg?przebieg.
Interesują nas samochody (ich przebieg i moc) z rocznika 2006 posiadające kontrolę trakcji. SELECT?car?przebieg?moc?car uco:extra "kontrola trakcji".?car uco:rocznik "2006".?car uco:przebieg?przebieg.?car uco:silnik?silnik.?silnik uco:moc?moc.
Interesują nas samochody (ich przebieg i moc) posiadające kontrolę trakcji. SELECT?car?przebieg?moc?car uco:extra "kontrola trakcji".?car uco:przebieg?przebieg.?car uco:silnik?silnik.?silnik uco:moc?moc.
Interesuje nas moc silnika samochodu o podanym URI. SELECT?moc <http://moto.pl/uzywane/012345/> uco:silnik?s.?s uco:moc?moc.
Interesuje nas przebiegi samochodów z rocznika 2005. SELECT?przebieg?s uco:rocznik "2005".?s uco:przebieg?przebieg.
Interesuje nas przebiegi samochodów z rocznika 2011. SELECT?przebieg?s uco:rocznik "2011".?s uco:przebieg?przebieg.
Interesują nas wszystkie samochody (ich przebieg i moc). SELECT?car?przebieg?moc?car uco:przebieg?przebieg.?car uco:silnik?silnik.?silnik uco:moc?moc.
Przykład - Turtle @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. @prefix uco: <http://makolab.com/uconto#>. <http://moto.pl/uzywane/012345/> rdf:type uco:osobowy; uco:przebieg "120000"; ( usuwamy dla jednego samochodu) uco:rocznik "2005"^^<http://www.w3.org/2001/XMLSchema#gYear>; uco:silnik [uco:pojemnosc <http://makolab.com/uconto/eng/1600>; uco:paliwo <http://makolab.com/uconto/pet/diesel>; uco:moc "95 KM".]; uco:extra "czujnik deszczu"; uco:extra "kontrola trakcji"; (3 samochody) uco:kontakt "556789890".
Ponownie interesują nas wszystkie samochody (ich przebieg i moc). SELECT?car?przebieg?moc?car uco:przebieg?przebieg.?car uco:silnik?silnik.?silnik uco:moc?moc.
Ponownie interesują nas wszystkie samochody (ich przebieg i moc). SELECT?car?przebieg?moc?car uco:silnik?silnik.?silnik uco:moc?moc. OPTIONAL?car uco:przebieg?przebieg.
Interesują nas samochody z rocznika co najwyżej 2006. SELECT?car?rok?car uco:rocznik?rok. FILTER (?rok > 2005)
Interesuje nas możliwe (różne) wyposażenie dodatkowe (z pominięciem 3 pierwszych) SELECT DISTINCT?extra?car uco:extra?extra. OFFSET 3
Interesuje nas możliwe wyposażenie dodatkowe (z ograniczeniem do 3) SELECT?extra?car uco:extra?extra. LIMIT 3
Interesują nas wszystkie samochody (ich przebieg i moc). SELECT?car?przebieg?moc?car uco:przebieg?przebieg.?car uco:silnik?silnik.?silnik uco:moc?moc. ORDER BY ASC(?moc)
Interesują nas wszystkie samochody (ich przebieg i moc). SELECT?car?przebieg?moc?car uco:przebieg?przebieg.?car uco:silnik?silnik.?silnik uco:moc?moc. ORDER BY DESC(?moc)
Interesują nas wszystkie samochody (ich przebieg i moc). SELECT?car?przebieg?moc?car uco:przebieg?przebieg.?car uco:silnik?silnik.?silnik uco:moc?moc. ORDER BY DESC(?moc) LIMIT 2
Interesuje nas maksymalna moc. SELECT (MAX(?moc) as?maxmoc)?silnik uco:moc?moc.
Interesuje nas średnia moc. SELECT (AVG(?moc) as?avgmoc)?silnik uco:moc?moc.
Interesuje nas ilość samochodów z rocznika 2006. SELECT (COUNT(?car) as?ctotal)?car uco:rocznik "2006".
SPARQL i nasza ontologia
SPARQL i nasza ontologia
SPARQL i nasza ontologia Interesują nas klasy ontologii z których jedna zwiera się w drugiej. SELECT?subject?object?subject rdfs:subclassof?object
SPARQL i nasza ontologia Interesują nas klasy ontologii będące podklasą klasy DlaDzieci. SELECT?subject?subject rdfs:subclassof ksiazki:dladzieci
SPARQL i nasza ontologia Interesują nas książki należące do klasy Polityka. SELECT?subject?subject rdf:type ksiazki:polityka
SPARQL i nasza ontologia Interesują nas wydawcy książek z kategorii (klasy) Polityka. SELECT?subject?wydawca?subject rdf:type ksiazki:polityka.?subject ksiazki:mawydawcę?wydawca.
SPARQL i nasza ontologia Interesują nas autorzy książek z kategorii (klasy) Polityka wydanych przez ksiazki:almapres. SELECT?subject?autor?subject rdf:type ksiazki:polityka.?subject ksiazki:mawydawcę ksiazki:almapress.?subject ksiazki:maautora?autor.