Verknüpfte Daten abfragen mit SPARQL Thomas Tikwinski, W3C.DE/AT Agenda SPARQL – Eine Anfragesprache für RDF Was ist eine SPARQL-Abfrage? Beispiel Arbeiten mit Variablen Komplexere Anfragen Filtern und sortieren Ergebnisse T. Tikwinski, W3C Tag 2008 2 SPARQL – Eine Abfragesprache für RDF Abkürzung: SPARQL Protocol And RDF Query Language SPARQL besteht aus zwei Teilen: - Abfragesprache - WSDL-Interface SPARQL kann aus einem RDF-Graph eine oder mehrere Teilmengen nach bestimmten Bedingungen suchen T. Tikwinski, W3C Tag 2008 3 SPARQL im Zusammenhang RDF: die Faktenbasis SPARQL: die Abfragesprache Triple-Store: speichert RDF-Daten SPARQL-Server: führt die SPARQLAnfragen aus HTTP-Binding: SPARQL-Anfragen aus dem Web stellen T. Tikwinski, W3C Tag 2008 4 Was ist eine SPARQL-Anfrage? Eine SPARQL-Anfrage beschreibt eine Schablone für RDF-Fakten, eine Art „Steckbrief“ für Teilgraphen aus dem semantischen Netz. Innerhalb der Anfrage können Bedingungen für Subjekt, Prädikat und Objekt spezifiziert werden. Ergebnise der Anfrage sind gebundene Variablen und deren Werte. T. Tikwinski, W3C Tag 2008 5 Beispiel „Ich suche eine Seite, die den W3C-Tag beschreibt.“ über Subjekt: x vom Typ „Seite“ Prädikat: „über“ Objekt „W3C-Tag“ SUCHE ?x WOBEI { ?x ist eine Seite . ?x über „W3C-Tag“ } Seite W3C-Tag T. Tikwinski, W3C Tag 2008 6 Beispiel (2) Ergebnis: ===================== X ===================== <http://www.w3c-tag.de/> ===================== T. Tikwinski, W3C Tag 2008 7 Beispiel – jetzt mit SPARQL „Ich suche eine Seite, die den W3C-Tag beschreibt.“ about Subjekt: x vom Typ „Page“ Prädikat: „about“ Objekt „W3C-Tag“ SELECT ?x WHERE { ?x a page . ?x about „W3C-Tag“ . } Page W3C-Tag T. Tikwinski, W3C Tag 2008 8 Beispiel – jetzt mit SPARQL (2) Result: ===================== X ===================== <http://www.w3c-tag.de/> ===================== T. Tikwinski, W3C Tag 2008 9 Arbeiten mit Variablen „Ich suche eine Seite, die den W3C-Tag beschreibt und will wissen, wann der stattfindet.“ SELECT ?x ?y WHERE { ?x a page . ?x about „W3C-Tag“ . ?x date ?y . } T. Tikwinski, W3C Tag 2008 10 Arbeiten mit Variablen Result: ===================== X ===================== <http://www.w3c-tag.de/> ===================== Y ===================== 24.09.08 ===================== T. Tikwinski, W3C Tag 2008 11 Optionale Daten „Ich suche eine Seite, die den W3C-Tag beschreibt und will wissen, wann der stattfindet. Falls bekannt ist, was das Thema war, will ich das auch wissen.“ SELECT ?x ?y ?z WHERE { ?x a page . ?x about „W3C-Tag“ . ?x date ?y . OPTIONAL ( ?x topic ?z . ) } T. Tikwinski, W3C Tag 2008 12 Abfragen mehrerer Graphen http://example.com/graph1 SELECT ?x ?y FROM http://example.com/graph1 FROM NAMED http://example.com/graph1 WHERE { GRAPH http://example.com/graph1 { ?x a Page . } ?y a Event } T. Tikwinski, W3C Tag 2008 13 Komplexe Anfragen „Ich suche deutsche Musiker, die in Berlin geboren sind.“ SELECT ?name ?birth ?description ?person WHERE { ?person dbpedia2:birthPlace <http://dbpedia.org/resource/Berlin> . ?person skos:subject <http://dbpedia.org/resource/Category:German_musicians> . ?person dbpedia2:birth ?birth . ?person foaf:name ?name . ?person rdfs:comment ?description . FILTER (LANG(?description) = 'en') . } ORDER BY ?name T. Tikwinski, W3C Tag 2008 14 Apropos komplex… Prefixes! Diese Anfrage verwendet eine Reihe von Prefixes: PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX : <http://dbpedia.org/resource/> PREFIX dbpedia2: <http://dbpedia.org/property/> PREFIX dbpedia: <http://dbpedia.org/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> T. Tikwinski, W3C Tag 2008 15 Prefixes Prefixes definieren Abkürzungen für den statischen Teil von häufig verwendeten URLs, insbesondere von Vokabularien und Schemata. Prefixes sind rein syntaktische Hilfen, um die Anfragen lesbar zu halten. Statt des Prefixes kann auch jederzeit die komplette URL geschrieben werden: PREFIX foaf: http://xmlns.com/foaf/0.1/ ?x a foaf:Person … ist äquivalent zu … ?x a http://xmlns.com/foaf/0.1/Person Eins von beiden ist auf Dauer besser lesbar T. Tikwinski, W3C Tag 2008 16 Filtern „Ich suche eine Seite, die den W3C-Tag beschreibt und will wissen, wann der in 2008 stattfindet.“ SELECT ?x ?y WHERE { ?x a page . ?x about „W3C-Tag“ . ?x date ?y . FILTER ( ?y >= 01.01.2008 && ?y < 01.01.2009 ) } T. Tikwinski, W3C Tag 2008 17 Sortieren „Ich suche alle Seiten, die einen W3C-Tag beschreiben und will sie nach Datum sortiert haben.“ SELECT ?x ?y WHERE { ?x a page . ?x about „W3C-Tag“ . ?x date ?y . } ORDER BY ?y T. Tikwinski, W3C Tag 2008 18 Sortieren (2) „Ich suche alle Seiten, die einen W3C-Tag beschreiben und will sie nach Datum absteigend sortiert haben.“ SELECT ?x ?y WHERE { ?x a page . ?x about „W3C-Tag“ . ?x date ?y . } ORDER BY DESC(?y) T. Tikwinski, W3C Tag 2008 19 Ergebnisse steuern SELECT – erzeugt ein Result Set (Liste) ASK – erzeugt ein boolsches Ergebnis (yes/no) CONSTRUCT – erzeugt RDF nach Vorlage DESCRIBE – exportiert RDF Tripel aus dem bestehenden Graph SELECT DISTINCT – beseitigt Dubletten OFFSET x – lässt die ersten X Ergebnisse weg LIMIT x – beschränkt die Liste auf X Ergebnisse T. Tikwinski, W3C Tag 2008 20 Fazit SPARQL ist eine deskriptive Anfragesprache + Protokoll für RDF-Daten Die Syntax ist SQL recht ähnlich Ergebnisse können als Liste oder in RDF ausgegeben werden Effizienter Umgang mit optionalen Daten ist möglich Mehrere Datenquellen (auch externe) können gleichzeitig abgefragt werden Filtern und Sortieren eingebaut Standard-Datentypen eingebaut Leicht zu lernen, ein paar Tücken in der Lernkurve T. Tikwinski, W3C Tag 2008 21