SPARQL
Leitfaden für vernetzte offene CORDIS-Daten
Was sind vernetzte offene Daten?
Bei vernetzten offenen Daten handelt es sich um eine Kombination aus vernetzten und offenen Daten. Vernetzte Daten bezieht sich auf maschinenlesbare Daten, die im Web gemeinsam genutzt werden, während offene Daten die freie Nutzung und Verbreitung von Daten gestattet.
Vernetzte offene Daten bieten eine Methode, um auf das dezentralisierte Web zentral zuzugreifen. Es stellt den Nutzenden die Mittel und Dienste zur Verfügung, um relevante und genaue Informationen zu finden. Durch die Kombination der Gestaltungsprinzipien vernetzter Daten mit maschinenlesbaren strukturierten Daten können vernetzte offene Daten mehr nützliche Informationen bereitstellen, die mit anderen Daten zur weiteren Auswertung verknüpft sind.
Die FAIR-Prinzipien (englische Abkürzung für auffindbar, zugänglich, interoperabel, wiederverwendbar) und das von Tim Berners-Lee beschriebene 5-Sterne-Modell für offene Daten sorgen dafür, dass Daten im Web frei geteilt und verbreitet werden können.
Als Teil der Initiative für vernetzte offene Daten ist das Resource Description Format (RDF) die wichtigste Sprache und Technologie, um Informationen über Daten auszudrücken sowie zu veröffentlichen und sie im Web miteinander zu verknüpfen. RDF gestattet die Strukturierung der Daten in Form der Dreiergruppe Subjekt-Prädikat-Objekt
EURIO-Wissensgraph
Ein Wissensgraph stellt reale Einheiten (z. B. Projekte, Organisationen, Projektergebnisse wie Projektleistungen) zusammen mit ihren Beziehungen (z. B. die Beteiligung einer Organisation an einem Projekt) und Attributen (z. B. das Startdatum eines Projekts oder die Umsatzsteuernummer einer Organisation) als ein miteinander verbundenes Netzwerk aus Knoten und Kanten dar.
Durch Wissensgraphen wird eine strukturierte, maschinenlesbare Darstellung von Daten zur Verfügung gestellt und die Integration, Verknüpfung und Wiederverwendung von Wissen gefördert. Der EURIO-Wissensgraph nutzt das Paradigma der Darstellung von Wissensgraphen, um die CORDIS-Daten in maschinenlesbare, miteinander verknüpfte Daten umzuwandeln.
Die Daten werden in Form von Dreiergruppen im Resource Description Format (RDF) veröffentlicht, die den Prinzipien vernetzter offener Daten entsprechen. Die Bedeutung der beschriebenen Einheiten ist formal durch die EUropean Information Research Ontology (EURIO) definiert. Der daraus resultierende EURIO-Wissensgraph ist ein Netzwerk miteinander verbundener RDF-Dreiergruppen, die die ursprünglichen CORDIS-Daten kodieren, und kann mit SPARQL abgefragt werden, der standardisierten Sprache für den Abruf und die Bearbeitung von Daten im RDF-Format.
Die EURIO-Ontologie
Um die Sichtbarkeit, Wiederverwendbarkeit und Zugänglichkeit von CORDIS-Inhalten zu verbessern und ihre semantische Interoperabilität zu erhöhen, hat das Amt für Veröffentlichungen der Europäischen Kommission die EUropean Research Information Ontology (EURIO) eingerichtet. EURIO ist ein konzeptionelles Datenmodell, das sich auf ein Netz bestehender Ontologien (z. B. schema.org, DINGO) und Referenzdaten (z. B. die EuroSciVoc-Taxonomie oder die NUTS-Code-Liste) stützt. Es bietet die Mittel zur Beschreibung von u. a. Verwaltungsinformationen im Zusammenhang mit Forschungsprojekten und deren Finanzhilfen, wie Beginn und Ende, Gesamtkosten und erhaltene Finanzmittel, Informationen über die beteiligten Organisationen und Personen sowie die Projektergebnisse, wie z. B. die Liste der Autorinnen und Autoren, Titel und Journalinformationen zu einer Veröffentlichung.
EURIO verwendet die OWL 2 Web Ontology Language zur formalen Definition der Bedeutung der Domänenbegriffe, die zur Beschreibung der CORDIS-Einheiten (z. B. Projekte, Organisationen), ihrer Attribute (z. B. Titel, Akronym, rechtlicher Name) und ihrer Beziehungen untereinander (z. B. die Beziehung zwischen einem Projekt und den beteiligten Organisationen) verwendet werden.
Die EURIO-Ontologie und ihre Dokumentation sind auf der Website EU Vocabularies zu finden.
SPARQL zur Abfrage des EURIO-Wissensgraph verwenden
SPARQL ist eine Standardabfragesprache zum Abrufen und zur Bearbeitung von Daten, die im RDF-Format gespeichert sind. Die Entwicklung und Weiterentwicklung wird von der SPARQL-Arbeitsgruppe innerhalb des W3C beaufsichtigt und ist vollständig dokumentiert und öffentlich zugänglich.
SPARQL-Abfragen basieren auf dem Abgleich von Graphmustern, d. h. dem Abgleich von Sätzen aus Dreiergruppenmustern, die konjunktive (UND) oder disjunktive (ODER) Bedingungen bilden. Dreiergruppenmuster sind wie RDF-Dreiergruppen, mit dem Unterschied, dass jedes Subjekt, Prädikat und Objekt eine Variable sein kann. Ein gegebenes SPARQL-Abfrage-Graphmuster passt zu einem Teilgraphen der abgefragten RDF-Daten, wenn RDF-Begriffe aus diesem Teilgraphen für die Variablen ersetzt werden können.
Zum Beispiel würde die SPARQL-Abfrage, um das Startdatum des H2020-Projekts „Knowledge-Based Information Agent with Social Competence and Human Interaction Capabilities“ zu finden, im EURIO-Wissensgraph wie folgt lauten:
PREFIX eurio:<http://data.europa.eu/s66#>
SELECT DISTINCT ?startDate
WHERE
{
?project a eurio:Project.
?project eurio:title "Knowledge-Based Information Agent with Social Competence and Human Interaction Capabilities" .
?project eurio:startDate ?startDate .
}
Wie gezeigt, erhalten wir bei der Ausführung dieser Abfrage, die in unserem Beispiel die Virtuoso SPARQL-Schnittstelle verwendet, das Startdatum des betreffenden Projekts, d. h. den 1. März 2015.
Das Schlüsselwort PREFIX wird verwendet, um ein Präfix-Label (d. h. eine Abkürzung) für einen IRI anzugeben, der den Namensraum der in der Abfrage verwendeten Begriffe bezeichnet; im laufenden Beispiel haben wir die Begriffe „Project“, „title“ und „startDate“ verwendet, die alle in der EURIO-Ontologie definiert sind, deren IRI http://data.europa.eu/s66# lautet.
Die Abfrage besteht aus zwei Teilen:
- Die SELECT-Klausel, die die Variablen ermittelt, die in den Abfrageergebnissen erscheinen sollen, und bei der es sich in unserem Beispiel um die Variable (?startDate) handelt, die für den angeforderten Wert des Startdatums steht.
- die WHERE-Klausel, die das mit dem EURIO-Wissensgraph abzugleichende Graphmuster liefert, das in unserem Beispiel aus drei konjunktiven Dreifachmustern besteht, d. h. drei Mustern, die alle abgeglichen werden müssen, nämlich:
- ein Dreifachmuster mit der Variablen (?project), die das referenzierte Projekt ausdrückt,
- ein Dreifachmuster, das die Titelinformationen des referenzierten Projekts angibt,
- ein Dreifachmuster mit der Variablen (?startDate) in der Objektposition.
Neben dem Ausdruck von Dreifachmustern bietet SPARQL mehrere Operatoren und Konstrukte, mit denen unter anderem optionale Muster ausgedrückt, die übereinstimmenden Dreifachmuster nach einer Bedingung gefiltert und die abgerufenen Ergebnisse aggregiert oder geordnet werden können.
Betrachten wir eine weitere einfache Abfrage, bei der wir diesmal alle im EURIO-Wissensgraph enthaltenen Projekte zusammen mit ihren Titeln abfragen wollen. Unter Verwendung der SELECT-Klausel wird dies folgendermaßen ausgedrückt: „SELECT ?project ?title“, und wir werden die WHERE-Klausel verwenden, um die Bedingungen zu spezifizieren, die erfüllt werden müssen, nämlich dass die Variable (?project), die verwendet wird, um die angeforderten Projekteinheiten zu bezeichnen, zur Klasse eurio:Project gehören und dass die Variable (?title) den Titelwert dieser Projekteinheiten bezeichnen muss. Die entsprechende Abfrage würde lauten:
PREFIX eurio:<http://data.europa.eu/s66#>
SELECT ?project ?title
WHERE
{
?project a eurio:Project.
?project eurio:title ?title.
}
ORDER BY ?title
LIMIT 100
Die Verwendung der Klausel ORDER BY hilft uns, die abgerufenen Ergebnisse zusätzlich nach der alphabetischen Reihenfolge ihrer Titel zu ordnen.
Eine aufsteigende Reihenfolge kann mit dem Modifikator ASC() oder ohne Modifikator, während eine absteigende Reihenfolge mit dem Modifikator DESC() angegeben werden kann.
Die Beispielabfrage zeigt auch die Verwendung der Klausel LIMIT, mit der wir eine Obergrenze für die Anzahl der bereitgestellten Ergebnisse festlegen können; in diesem Fall werden nur die 100 Projektpaare und ihre jeweiligen Titel angezeigt.
Um die Verwendung eines anderen gängigen Operators, nämlich FILTER, zu demonstrieren, fahren wir mit dem Beispiel fort und nehmen an, dass wir nur die Projekte abrufen möchten, deren Startdatum zwischen 2021 und 2022 liegt, zusammen mit ihren jeweiligen Titeln. Die SELECT-Klausel bleibt dieselbe wie zuvor, da wir immer noch dieselben Informationen abfragen, nämlich Projekte und ihre Titel, aber die WHERE-Klausel muss mit weiteren Dreifachmustern aktualisiert werden, die die Bedingung des Startdatums widerspiegeln. Die erweiterte Abfrage würde folgendermaßen lauten.
PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>
<br />
SELECT ?project ?title ?startDate
WHERE
{
?project a eurio:Project.
?project eurio:title ?title.
?project eurio:startDate ?startDate .
FILTER ((?startDate >= "2021-01-01"^^xsd:date) && (?startDate<="2023-12-31"^^xsd:date))
}
Wie dargestellt, können wir mit dem FILTER-Operator die Bedingung ausdrücken, die die Variable (?startDate) erfüllen muss, nämlich dass sie nach dem „01.01.2021“ und vor dem „31.12.2023“ liegen muss, wobei die beiden Grenzwerte eingeschlossen sind.
Die oben beschriebenen SELECT-Abfragen sind eine der von SPARQL definierten Abfrageformen, die dazu verhelfen, die Lösungen aus dem Mustervergleich zu spezifizieren und zu verwenden, um Ergebnismengen oder RDF-Graphen zu bilden. Diese sind:
- SELECT, das, wie oben dargestellt, alle oder eine Teilmenge der Variablen zurückgibt, die in einem Abfragemuster übereinstimmen.
- CONSTRUCT, bei der ein RDF-Graph angezeigt wird, der durch Ersetzen von Variablen in einer Reihe von Dreifachvorlagen konstruiert wurde.
- ASK, das einen booleschen Wert zurückgibt, der angibt, ob ein Abfragemuster übereinstimmt oder nicht.
- DESCRIBE, das einen RDF-Graphen zurückgibt, der die gefundenen Ressourcen beschreibt.
Weitere Informationen zur Verwendung der verschiedenen Abfrageformen sowie eine umfassende Beschreibung der allgemeinen Eigenschaften der SPARQL-Abfragesprache finden Sie in der offiziellen Dokumentation zur SPARQL 1.1 Query Language.
Wie löst man gebündelte Abfragen aus?
In allen vorgestellten Beispielen wurden die Abfragen über die im EURIO-Wissensgraph enthaltenen Daten ausgeführt.
Mit der wachsenden Anzahl von SPARQL-Abfragediensten (SPARQL-Endpunkte) verschiedener Datenanbieter durch die Veröffentlichung ihrer Daten als vernetzte offene Daten ergibt sich jedoch die Möglichkeit, diese verteilten Datensätze gemeinsam abzufragen.
Dazu verwendet SPARQL die Erweiterung SERVICE. Mit dieser Erweiterung ist es möglich, einen Teil einer Abfrage an einen bestimmten SPARQL-Endpunkt zu richten und die zurückgegebenen Ergebnisse mit den Ergebnissen der restlichen Abfrage zu kombinieren.
Die folgende Abfrage zeigt ein Beispiel für die gebündelte SPARQL-Abfragesyntax, in der wir nach dem Index der menschlichen Entwicklung des Landes (Human Developing Index, HDI) suchen, in dem die Organisation „UNIVERSIDAD POMPEU FABRA“, eine der Organisationen, die an den EU-finanzierten Projekten des EURIO-Wissensgraph teilnehmen, ansässig ist. Um diese Informationen zu erhalten, müssen wir sowohl den EURIO-Wissensgraph abfragen, der Informationen über das Land enthält, in dem sich die betreffende Organisation befindet, als auch den externen Wissensgraph von DBpedia, der unter anderem Informationen über den Index menschlicher Entwicklung eines Landes enthält.
PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
<br />
SELECT ?country ?name ?hdi
WHERE {
?org a eurio:Organisation .
?org eurio:legalName "UNIVERSIDAD POMPEU FABRA" .
?org eurio:hasSite ?site .
?site eurio:hasGeographicalLocation ?location .
?location a eurio:Country .
?location eurio:name ?name .
SERVICE <http://dbpedia.org/sparql> {
?dbpedia_country a dbo:Country .
?dbpedia_country dbp:commonName ?dbname .
?dbpedia_country dbp:hdi ?hdi.
FILTER (lang(?dbname) = "en")
FILTER (STR(?name) = STR(?dbname))
}
}
Wie dargestellt, müssen wir zur Ausführung dieser Abfrage eine SERVICE-Klausel in die WHERE-Klausel unserer Abfrage einfügen, gefolgt von der IRI des externen Endpunkts (d. h. http://dbpedia.org/sparql), und dann die anwendbaren Dreifachmuster angeben, d. h., dass wir nach einem Land im Wissensgraph DBpedia (die Variable ?dbpedia_country) suchen, das denselben Namen hat wie das Land der Organisation „UNIVERSIDAD POMPEU FABRA“ des EURIO-Wissensgraphs (d. h., dass die Variablen ?name und ?dbname denselben Wert haben), und für welches Land wir seinen Wert im Index der menschlichen Entwicklung unter Verwendung der entsprechenden DBpedia-Eigenschaft (d. h. dbp:hdi) abfragen.
Es ist zu beachten, dass gebündelte Abfragen mit Vorsicht eingesetzt werden müssen, um exzessive Abfragen an entfernte SPARQL-Endpunkte sowie ineffiziente Abfragemuster zu vermeiden, da beides die Ausführungszeit der Abfrage stark beeinträchtigen kann, was oft zu Abfragezeitüberschreitungen und der Unfähigkeit, überhaupt ein Ergebnis abzurufen, führt. In Anbetracht dieser Situation und da außerdem keine Garantie für die Stabilität, Verfügbarkeit und Leistung externer SPARQL-Endpunkte gegeben werden kann, wird dringend empfohlen, sich stattdessen für lokale Datenabzüge des Wissensgraphs (oder seiner Teilgraphen) von Interesse zu entscheiden und sich auf lokale gebündelte Abfragen zu verlassen.
Für einen umfassenden Überblick über die Funktionen und Spezifikationen, die für die Unterstützung von gebündelten Abfragen durch SPARQL relevant sind, sollte die Dokumentation zur SPARQL 1.1 Federated Query konsultiert werden.
Datenspeicherauszug
Der neueste Auszug des EURIO-Wissensgraphs kann vom europäischen Datenportal heruntergeladen werden, wo Sie auch Teilgraphen des EURIO-Wissensgraphs finden können. Diese Teilgraphen enthalten eine äußerst relevante, in sich geschlossene Momentaufnahme der Beziehungen und Attribute, die für jeden der Haupttypen von Einheiten des EURIO-Wissensgraphs relevant sind, und ermöglichen einen feineren Zugang zu den Inhalten des EURIO-Wissensgraphs. Die Teilgraphen werden als eigenständige benannte Graphen veröffentlicht, d. h. als Teilmengen der Graphen des EURIO-Wissensgraphs, die jeweils ein eigenes Label haben.