# SPARQL

SPARQL (Aussprache) ist eine graphenbasierte Abfragesprache für Abfragen von Inhalten aus dem Beschreibungssystem Resource Description Framework (RDF), die 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. Seit dem 21. März 2013 ist die W3C Recommendation für SPARQL 1.1 veröffentlicht worden. 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 Benutzeroberfläche zur Verfügung stellt. Damit kann auf alle Datenobjekte zugegriffen werden, die in Wikidata gespeichert sind. Dort sind viele SPARQL-Abfragen als Beispiele angegeben.

## 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 Und-Verknüpfungen (Konjunktion) und Oder-Verknüpfungen (Disjunktion). 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.

## Beispiele

Die folgende Abfrage gibt alle in München geborenen Menschen zurück, die in der Datenbank gespeichert sind.
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.
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.
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 Apache Jena frameworks
* Fuseki – SPARQL-Server, basierend auf Apache Jena
* 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
* LuposDate – Open Source (Java) Anfrage-Engine für SPARQL und RIF erhältlich bei Github und Als Web-Applet, entwickelt an der Universität zu Lübeck.
* Virtuoso Universal Server – Hybrid-Datenbanksystem, wird bspw. bei DBpedia eingesetzt
* QLever, Universität Freiburg