Základy syntaxe SPARQL SELECT ?a ?b ?c WHERE { x y ?a. m n ?b. ?b f ?c. } jako například SELECT ?budova WHERE { ?budova konstrukce pernikova. ?budova pocetPodlazi 1. } kde ?budova konstrukce pernikova. vyjadřuje sémantickou vazbu subjekt, predikát, objekt (tzv. triple). Tento (nebo jakýkoli jiný dotaz) se pak zadává v tzv. SPARQL endpoint jako například https://www.foodie-cloud.org/sparql. Jedná se o URL adresu místa, kde klient může komunikovat (dotazovat se) na server. Základní rozhraní pro dotazy z DBpedia.org http://dbpedia.org/snorql/ Úkol #1 Zkuste přepsat níže uvedený příklad do formy, která vám umožní zeptat se na významné rodáky vašeho města od roku 1900. Následně zkuste filtrovat podle data narození. SELECT ?name ?birth ?death ?person WHERE { ?person dbo:birthPlace ?birthPlace . ?person dbo:birthDate ?birth . ?person foaf:name ?name . ?person dbo:deathDate ?death . FILTER (?birth < "1900-01-01"^^xsd:date) . } ORDER BY ?name Nápovědy: 1) Stávající syntaxe vám vypíše všechny rodáky všech měst v celém světě až po toho, kde dojde limit na délku odpovědi. Proto to chvíli trvá. 2) V syntaxi výše je nezbytné nahradit objekt místa narození konkrétní hodnotou. Konkrétní hodnoty se zapisují dvojtečkou a hodnotou. 3) Název města skládající se z více slov pojí podtržítko. Nepoužívejte diakritiku. Následující příklad umožní ukázat pouze hudební skladatele z Brna. SELECT ?name ?birth ?description ?person WHERE { ?person a dbo:MusicalArtist . ?person dbo:birthPlace :Brno . ?person foaf:name ?name . ?person rdfs:comment ?description . FILTER (LANG(?description) = 'en') . } ORDER BY ?name Úkol #2 Zkuste přepsat výše uvedený příklad do formy, která vám umožní získat v odpovědi i datum narození hudebních skladatelů. Sémantických databází je dnes neuvěřitelné množství, pro připomenutí informací z přednášky se podívejte na http://lod-cloud.net/. V rámci těchto databází existuje také SPARQL endpoint http://linkedgeodata.org/sparql Základní rozhraní pro prostorové dotazy http://linkedgeodata.org/sparql Syntaxe níže ukazuje dotaz na data z OpenStreetMap ve vzdálenosti 0,1 km od stanoveného místa (se souřadnicemi 16.597, 49.204). Prefix lgdo: Prefix geom: Prefix ogc: Select * From { ?s a lgdo:Amenity ; rdfs:label ?l ; geom:geometry [ ogc:asWKT ?g ] . Filter(bif:st_intersects (?g, bif:st_point (16.597, 49.204), 0.1)) . } Úkol #3 Zkuste přepsat výše uvedený příklad do formy, která vám umožní získat pekařství v místě vašeho zájmu. Nápověda: Amenity je univerzální název pro jakýkoli bod zájmu v OpenStreetMap. Tzv. Linked Geodata Ontology (http://linkedgeodata.org/ontology)odkazuje na tagy OpenStreetMap, viz http://learnosm.org/en/hot-tips/tagging/.