SPARQL
SPARQL () ist eine graphenbasierte Abfragesprache für Abfragen von Inhalten aus dem Beschreibungssystem Resource Description Framework (RDF), das in Datenbanken zur Formulierung logischer Aussagen über beliebige Dinge genutzt wird. Der Name ist ein rekursives Akronym für SPARQL Protocol And RDF Query Language.
Die RDF Data Access Working Group (DAWG) des World Wide Web Consortiums (W3C) trieb die Entwicklung und Standardisierung von SPARQL voran. Im April 2006 wurde SPARQL als Candidate Recommendation anerkannt, im Oktober 2006 ist es jedoch wieder zum Working Draft zurückgestuft worden. Seit Juni 2007 lag SPARQL erneut als Candidate Recommendation des W3C vor. Am 15. Januar 2008 wurde SPARQL endgültig vom W3C als Recommendation freigegeben.[1] Seit dem 21. März 2013 ist die W3C Recommendation für SPARQL 1.1 veröffentlicht worden[2]. SPARQL ist der Nachfolger mehrerer Abfragesprachen, z. B. RDF Query Language, RDQL, die ebenfalls auf RDF-Daten zugreifen.
Der Wikidata Query Service ist eine Web Application, die einen SPARQL-Endpunkt mit einer leistungsstarken Benutzeroberfläche zur Verfügung stellt.[3] Damit kann auf alle Datenobjekte zugegriffen werden, die in Wikidata gespeichert sind.[4][5] Dort sind viele SPARQL-Abfragen als Beispiele angegeben.[6]
Eigenschaften
Das Resource Description Framework (RDF) ist eine Modellierungssprache für beschriftete gerichtete Graphen zur Darstellung von Informationen im World Wide Web. Diese Spezifikation definiert die Syntax und Semantik der Abfragesprache SPARQL für RDF. SPARQL kann verwendet werden, um Abfragen über verschiedene Datenquellen hinweg auszudrücken, unabhängig davon, ob die Daten nativ als RDF gespeichert oder über Middleware als RDF angezeigt werden. SPARQL enthält Funktionen zum Abfragen erforderlicher und optionaler Graphenmuster sowie deren Konjunktionen und Disjunktionen. SPARQL unterstützt auch das Testen erweiterbarer Werte und das Einschränken von Abfragen. Die Ergebnisse von SPARQL-Abfragen können Ergebnismengen oder RDF-Diagramme sein.[7]
Beispiele
Die folgende Abfrage gibt alle in München geborenen Menschen zurück, die in der Datenbank gespeichert sind.
SELECT ?human ?humanLabel ?humanDescription
WHERE
{
?human wdt:instanceOf wd:human;
wdt:placeOfBirth wd:Munich.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
}
Die Variable ?human
speichert das Objekt, die Variable ?humanLabel
den Namen und die Variable ?humanDescription
die Beschreibung der gefundenen Personen.
Die folgende Abfrage findet die Namen aller Hauptstädte in Europa und das Land, in dem sich die jeweilige Hauptstadt befindet und sortiert das Ergebnis alphabetisch nach Ländern.
PREFIX abc: <http://example.com/exampleOntology#>
SELECT ?capital ?country
WHERE
{
?x abc:cityname ?capital;
abc:isCapitalOf ?y.
?y abc:countryname ?country;
abc:isInContinent abc:Europe.
}
ORDER BY ?country
Variablen werden mit vorangestelltem ?
gekennzeichnet. Als Ergebnis der Abfrage im obigen Beispiel werden alle Variablenbelegungen für ?capital
und ?country
zurückgegeben, welche die vier definierten Tripel des Resource Description Framework erfüllen. Endet ein Tripel mit einem ;
, so vervollständigt dessen Subjekt das folgende Paar zu einem Tripel. In diesem Beispiel ist abc:isCapitalOf ?y
die Kurzform für ?x abc:isCapitalOf ?y
.
Weil das Ausschreiben der URIs die Lesbarkeit einer Abfrage mindert, können Präfixe verwendet werden. Hier steht ein „abc:“ für „http://example.com/exampleOntology#“
Die folgende Abfrage findet die Namen aller Regierungschefs, die Väter sind, und die Anzahl ihrer Kinder. Die Regierungschefs werden absteigend sortiert nach der Anzahl der Kinder ausgegeben.
SELECT ?father ?fatherLabel (COUNT(*) AS ?children)
WHERE
{
?child wdt:isFather ?father.
?father wdt:instanceOf wd:human;
wdt:positionHeld wd:headOfGovernment.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
}
GROUP BY ?father ?fatherLabel
ORDER BY DESC(?children)
Das Ergebnis wird nach den Vätern (Regierungschefs) gruppiert. In der Variablen ?child
werden die Kinder gespeichert. Diese werden nicht ausgegeben, sondern nur die Väter und die Anzahl der Kinder.
Anfrage-Engines
- ARQ – Anfrage-Engine innerhalb des Jena Semantic Web Framework
- Joseki – Erweitert ARQ um einen SPARQL-Endpoint für den Remote-Zugriff
- D2R Server – Wrapper für relationale Datenbanken und stellt die darin enthaltenen Daten über einen SPARQL-Endpoint zur Verfügung
- Ontop – Ebenfalls ein Wrapper für relationale Datenbanken, welcher die darin enthaltenen Daten über einen SPARQL-Endpoint zur Verfügung stellt
- ARC – Anfrage-Engine für PHP
- DARQ – Erweitert ARQ und unterstützt verteilte Anfragen an verschiedene Datenquellen
- Erfurt – Anfrage-Engine für PHP (wird innerhalb von OntoWiki genutzt)
- Tracker – RDF-Datenbank für Desktopanwendungen und mobile Geräte
- DB2 – Ab Version 10 unterstützt IBM DB2 SPARQL sowie die effiziente Speicherung von RDF Graphen[8]
- LuposDate – Open Source (Java) Anfrage-Engine für SPARQL und RIF erhältlich bei Github[9] und Als Web-Applet,[10] entwickelt an der Universität zu Lübeck.
- Virtuoso Universal Server – Hybrid-Datenbanksystem, wird bspw. bei DBpedia eingesetzt
Literatur
- Bob DuCharme: Learning SPARQL. Querying and Updating with SPARQL 1.1. O’Reilly Media, 2. Auflage 2013, ISBN 978-1-4493-7143-2
- Sanja Jahnke: SPARQLuS: DR - Konzeption und Implementierung eines DESCRIBE-Operators für RDF. GRIN Verlag, 2008, ISBN 978-3-638-95239-2
Weblinks
- SPARQL – Syntax und Intuition, M. Krötzsch, S. Rudolph, 16. Dezember 2009 (PDF, deutsch)
- SPARQL 1.1 Overview W3C Recommendation 21 March 2013 (englisch)
- W3C RDF Data Access Working Group (englisch)
- SPARQL By Example, Lee Feigenbaum (englisch)
- SPARQL-Tutorial (englisch)
- SPARQL RDF Query Language Reference., Dave Beckett, Kurzreferenz (zwei A4-Seiten; englisch)
- ARQ Abfrage-Engine (englisch)
- Wikidata Abfrage – Open SPARQL Web Dienst
Einzelnachweise
- SPARQL Query Language for RDF. World Wide Web Consortium (W3C). 15. Januar 2008. Abgerufen am 29. März 2014.
- SPARQL 1.1 Overview. World Wide Web Consortium (W3C). 21. März 2013. Abgerufen am 29. März 2014.
- Wikidata Query Service
- Wikidata:SPARQL query service/Wikidata Query Help
- Wikidata:SPARQL tutorial
- Wikidata:SPARQL query service/queries/examples
- W3C: SPARQL Query Language for RDF
- NoSQL Graph Store (PDF; 585 kB) 27. April 2012
- LuposDate Github, 11. Juli 2012
- LuposDate Demo-Applet 11. Juli 2012