Wikidata Query Service/Bedienungsanleitung

This page is a translated version of the page Wikidata Query Service/User Manual and the translation is 100% complete.

Der Wikidata Query Service (WDQS) ist ein Softwarepaket und öffentlicher Dienst, der einen SPARQL-Endpunkt zur Abfrage des Wikidata-Datensets bieten soll.

Ein 15-minütiges Tutorial für den Wikidata Query Service

Diese Seite oder andere relevante Dokumentationsseiten werden entsprechend aktualisiert; es wird empfohlen, dass du sie beobachtest, wenn du den Dienst nutzt.

Du kannst dir Beispiele für SPARQL-Abfragen auf der SPARQL-Beispielseite ansehen.

Datensatz

Der Wikidata Query Service arbeitet mit einem Datensatz von Wikidata.org, der, wie in der Dokumentation des RDF-Dump-Formats beschrieben, in RFD dargestellt wird.

Der Datensatz des Dienstes stimmt nicht exakt mit dem Datensatz überein, der von RDF-Dumps erzeugt wird, hauptsächlich aus Gründen der Performance; Die Dokumentation beschreibt eine kleine Reihe von Unterschieden.

Du kannst dir einen wöchentlichen Dump der gleichen Daten herunterladen:

https://dumps.wikimedia.org/wikidatawiki/entities/

Grundlagen - SPO (Subjekt, Prädikat, Objekt; auch bekannt als semantisches Tripel) verstehen

SPO oder "Subjekt, Prädikat, Objekt" ist bekannt als ein Tripel und wird in Wikidata häufig als Aussage über Daten bezeichnet.

Die Aussage "Die Hauptstadt der Vereinigten Staaten ist Washington, D.C." besteht aus dem Subjekt "Vereinigte Staaten" (Q30), dem Prädikat "Hauptstadt" (P36) und einem Objekt "Washington, D.C." (Q61). Diese Aussage kann in Form von drei URIs dargestellt werden:

<http://www.wikidata.org/entity/Q30>  <http://www.wikidata.org/prop/direct/P36>  <http://www.wikidata.org/entity/Q61> .

Dank den Präfixen (siehe unten) kann die gleiche Aussage in einer prägnanteren Form geschrieben werden. Beachte, dass der Punkt am Ende das Ende der Aussage repräsentiert.

wd:Q30  wdt:P36  wd:Q61 .

/entity/ (wd:) steht für ein Wikidata-Datenobjekt (Werte mit einer Q-Nummer). /prop/direct/ (wdt:) ist eine "wahre" Eigenschaft — ein Wert, den wir am häufigsten erwarten würden, wenn wir uns die Aussage ansehen. Die wahren Eigenschaften werden benötigt, da manche Aussagen "wahrer" sein können, als andere. Beispielsweise ist die Aussage "Die Hauptstadt der Vereinigten Staaten ist New York City" wahr — jedoch nur im historischen Kontext des Jahres 1790. WDQS nutzt Ränge, um zu bestimmen, welche Aussagen als "wahr" genutzt werden sollen.

Zusätzlich zu den wahren Aussagen speichert der WDQS alle Aussagen (wahre und unwahre), jedoch nutzen sie nicht das gleiche Präfix wdt:. Die Hauptstadt der Vereinigten Staaten hat drei Werte: Washington, D.C., Philadelphia, und New York City. Und jeder von diesen Werten hat "Qualifikatoren" - zusätzliche Informationen, wie Start- und Enddatum, was den Umfang jeder Aussage einengt. Um diese Informationen als Tripel zu speichern, hat der WDQS ein automatisches "Aussagen"-Subjekt eingefügt, was im Wesentlichen eine zufällige Zahl ist:

wd:Q30  p:P36  <random_URI_1> .         # US "indirect capital" is <X>
<random_URI_1>  ps:P36  wd:Q61 .        # The X's "real capital value" is  Washington DC
<random_URI_1>  pq:P580  "1800-11-17" . # The X's start date is 1800-11-17

Siehe SPARQL-Tutorial - Qualifikatoren für weitere Informationen.

SPO wird auch als Form eines grundlegenden Syntax-Layouts zur Abfrage von RDF-Datenstrukturen, Graph-Daten oder einem Tripelspeicher, wie dem Wikidata Query Service (WDQS), der auf Blazegraph, einer Graph-Datenbank mit hoher Performance, läuft, genutzt.

Fortgeschrittene Nutzungen eines Tripels (SPO) umfassen die Nutzung von Tripels als Objekten oder Subjekten anderer Tripel!

Grundlagen - Präfixe verstehen

Die Subjekte und Prädikate (erster und zweiter Wert des Tripels) müssen immer als URIs gespeichert werden. Wenn das Subjekt beispielsweise das Universum (Q1) ist, wird es als <https://www.wikidata.org/wiki/Q1> gespeichert. Präfixe ermöglichen es uns, diesen langen URI in einer kürzeren Form zu schreiben: wd:Q1. Im Gegensatz zu Subjekten und Prädikaten kann das Objekt (dritter Wert des Tripels) entweder ein URI oder ein Wort sein, z.B. eine Zahl oder eine Zeichenkette.

WDQS versteht viele Abkürzungen, bekannt als Präfixe. Manche sind Wikidata-intern, z.B. wd, wdt, p, ps, bd, und manche sind häufig genutzte externe Präfixe, wie rdf, skos, owl, schema.

In der folgenden Abfrage suchen wir Datenobjekte mit der Aussage "P279 = Q7725634" oder vollständiger ausgedrückt Subjekte, die ein Prädikat "Unterklasse von" mit einem Objekt = "literarisches Werk" haben.

Die Ausgabe-Variablen:

PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wds: <http://www.wikidata.org/entity/statement/>
PREFIX wdv: <http://www.wikidata.org/value/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>
PREFIX pq: <http://www.wikidata.org/prop/qualifier/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX bd: <http://www.bigdata.com/rdf#>

# The below SELECT query does the following:
# Selects all the items(?s subjects) and their descriptions(?desc)
# that have(WHERE) the statement(?s subject) has a direct property(wdt:) = P279 <subclasses of>
# with a value of entity(wd:) = Q7725634 <Literary Work>
# and optionally return the label using the Wikidata label service

SELECT ?s ?desc WHERE {
  ?s wdt:P279 wd:Q7725634 .
  OPTIONAL {
     ?s rdfs:label ?desc filter (lang(?desc) = "en").
   }
 }

Erweiterungen

Der Abfragedienst unterstützt die folgenden Erweiterungen der Standard-SPARQL-Fähigkeiten:

Bezeichnungs-Dienst

Du kannst die Bezeichnung, Alias oder Beschreibung von Einträgen unter Berücksichtigung der Sprach-Rückfallkette erhalten, indem du den spezialisierten Dienst mit dem URI <http://wikiba.se/ontology#label> nutzt. Dieser Dienst ist sehr hilfreich, wenn du Bezeichnungen abrufen möchtest, da er die Komplexität von SPARQL-Abfragen, die du sonst benötigen würdest, um das gleiche Ergebnis zu erzielen, reduziert.

Der Dienst kann in zwei unterschiedlichen Modi genutzt werden: manuell und automatisch.

Im automatischen Modus musst du nur die Vorlage des Dienstes angeben, z.B.:

PREFIX wikibase: <http://wikiba.se/ontology#>
SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
}

Der WDQS generiert dann automatisch wie folgt Bezeichnungen:

  • Wenn eine ungebundene Variable in SELECT den Namen ?NAMELabel hat, produziert WDQS die Bezeichnung (rdfs:label) für den Eintrag in der Variable ?NAME.
  • Wenn eine ungebundene Variable in SELECT den Namen ?NAMEAltLabel hat, produziert WDQS das Alias (skos:altLabel) für den Eintrag in der Variable ?NAME.
  • Wenn eine ungebundene Variable in SELECT den Namen ?NAMEDescription hat, produziert WDQS die Beschreibung (schema:description) für den Eintrag in der Variable ?NAME.

In jedem Fall sollte die Variable in ?NAME gebunden sein, da der Dienst andernfalls fehlschlägt.

Der automatische Modus prüft nur die Projektion der Abfrage – beispielsweise wird in SELECT ?aLabel (GROUP_CONCAT(?bLabel) AS ?bLabels) nur die erste Bezeichnung erkannt und SELECT * wird im automatischen Modus überhaupt nicht unterstützt. In solchen Fällen musst du den manuellen Modus nutzen (siehe unten).

Du kannst deine bevorzugte(n) Sprache(n) für die Bezeichnung mit einem oder mehreren bd:serviceParam wikibase:language "language-code"-Tripeln angeben. Jede Zeichenkette kann einen oder mehrere Sprachcodes enthalten, die durch ein Komma getrennt werden. WDQS betrachtet Sprachen in der Reihenfolge, in der du sie angegeben hast. Wenn in keiner der angegeben Sprachen eine Bezeichnung verfügbar ist, ist die Q-ID des Eintrags (ohne Präfix) seine Bezeichnung.

Die Webseite des Wikidata Query Service ersetzt automatisch [AUTO_LANGUAGE] durch den Sprachcode der aktuellen Benutzeroberfläche des Benutzers. Wenn beispielsweise die Benutzeroberfläche des Benutzers in Französisch ist, wird der SPARQL-Code bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" in bd:serviceParam wikibase:language "fr,en" umgewandelt, bevor er an den Abfragedienst gesendet wird.


Beispiel, das die Liste von US-Präsidenten und ihren Ehepartnern zeigt:

SELECT ?p ?pLabel ?w ?wLabel WHERE {
   wd:Q30 p:P6/ps:P6 ?p .
   ?p wdt:P26 ?w .
   SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
   }
 }

Probier es aus!

In diesem Beispiel erstellt WDQS automatisch die Bezeichnungen ?pLabel und ?wLabel für Eigenschaften.

Im manuellen Modus bindest du die Variablen für die Bezeichnung explizit im Anrufdienst, jedoch wird WDQS weiterhin Sprach-Auflösungen und die Sprach-Rückfallkette anbieten. Beispiel:

  SELECT *
   WHERE {
     SERVICE wikibase:label {
       bd:serviceParam wikibase:language "fr,de,en" .
       wd:Q123 rdfs:label ?q123Label .
       wd:Q123 skos:altLabel ?q123Alt .
       wd:Q123 schema:description ?q123Desc .
       wd:Q321 rdf:label ?q321Label .
    }
  }

Dabei werden Bezeichnungen und Beschreibungen in Französisch, Deutsch und Englisch berücksichtigt und sofern keine verfügbar ist, die Q-ID als Bezeichnung genutzt.

Geodaten-Suche

Der Dienst erlaubt es, nach Datenobjekten mit Koordinaten zu suchen, die sich in einem bestimmten Radius um einen Punkt oder innerhalb einer Box befinden.

Suche um einen Punkt

Beispiel:

# Airports within 100km from Berlin
#defaultView:Map
SELECT ?place ?placeLabel ?location ?dist WHERE {
  # Berlin coordinates
  wd:Q64 wdt:P625 ?berlinLoc . 
  SERVICE wikibase:around { 
      ?place wdt:P625 ?location . 
      bd:serviceParam wikibase:center ?berlinLoc . 
      bd:serviceParam wikibase:radius "100" . 
      bd:serviceParam wikibase:distance ?dist.
  } 
  # Is an airport
  FILTER EXISTS { ?place wdt:P31/wdt:P279* wd:Q1248784 }
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" . 
  }
} ORDER BY ASC(?dist)

Probier es aus!

Die erste Zeile des Anrufs an den around-Dienst muss das Format ?item predicate ?location haben, wobei das Ergebnis der Suche ?item an Datenobjekte am angegebenen Ort und ?location an deren Koordinaten bindet. Die unterstützten Parameter sind:

Prädikat Bedeutung
wikibase:center Der Punkt, um den herum gesucht wird. Muss gebunden werden, damit die Suche funktioniert.
wikibase:radius Entfernung vom Zentrum. Derzeit muss die Entfernung immer in Kilometern angegeben werden, andere Einheiten werden noch nicht unterstützt.
wikibase:globe Der Globus, auf dem gesucht wird. Optional, Standard ist Erde (wd:Q2).
wikibase:distance Die Variable, die die Entfernungsinformation erhält

Suche in einer Box

Beispiel einer Box-Suche:

# Schools between San Jose, CA and Sacramento, CA
#defaultView:Map
SELECT * WHERE {
  wd:Q16553 wdt:P625 ?SJloc .
  wd:Q18013 wdt:P625 ?SCloc .
  SERVICE wikibase:box {
      ?place wdt:P625 ?location .
      bd:serviceParam wikibase:cornerSouthWest ?SJloc .
      bd:serviceParam wikibase:cornerNorthEast ?SCloc .
  }
  FILTER EXISTS { ?place wdt:P31/wdt:P279* wd:Q3914 }
}

Probier es aus!

oder:

#Schools between San Jose, CA and San Francisco, CA
#defaultView:Map
SELECT ?place ?location WHERE {
  wd:Q62 wdt:P625 ?SFloc .
  wd:Q16553 wdt:P625 ?SJloc .
  SERVICE wikibase:box {
    ?place wdt:P625 ?location .
    bd:serviceParam wikibase:cornerWest ?SFloc .
    bd:serviceParam wikibase:cornerEast ?SJloc .
  }
  FILTER EXISTS { ?place wdt:P31/wdt:P279* wd:Q3914 }
}

Probier es aus!

Koordinaten können direkt angegeben werden:

# Schools between San Jose, CA and Sacramento, CA
#same as previous
#defaultView:Map
SELECT * WHERE {
SERVICE wikibase:box {
    ?place wdt:P625 ?location .
    bd:serviceParam wikibase:cornerWest "Point(-121.872777777 37.304166666)"^^geo:wktLiteral .
    bd:serviceParam wikibase:cornerEast "Point(-121.486111111 38.575277777)"^^geo:wktLiteral .
  }
  FILTER EXISTS { ?place wdt:P31/wdt:P279* wd:Q3914 }
}

Probier es aus!

Die erste Zeile des Anrufs an den box-Dienst muss das Format ?item predicate ?location haben, wobei das Ergebnis der Suche ?item an Datenobjekte am angegebenen Ort und ?location an deren Koordinaten bindet. Die unterstützten Parameter sind:

Prädikat Bedeutung
wikibase:cornerSouthWest Die südwestliche Ecke der Box.
wikibase:cornerNorthEast Die nordöstliche Ecke der Box.
wikibase:cornerWest Die westliche Ecke der Box.
wikibase:cornerEast Die östliche Ecke der Box.
wikibase:globe Der Globus, auf dem gesucht wird. Optional, Standard ist Erde (wd:Q2).

wikibase:cornerSouthWest und wikibase:cornerNorthEast sollten zusammen genutzt werden, ebenso wie wikibase:cornerWest und wikibase:cornerEast und können nicht gemischt werden. Wenn die Prädikate wikibase:cornerWest ist wikibase:cornerEast genutzt werden, wird angenommen, dass die Punkte die Diagonale der Box sind und die Ecken werden dementsprechend abgeleitet.

Erweiterte Funktionen

Entfernungs-Funktion

Die Funktion geof:distance gibt die Entfernung zwischen zwei Punkten auf der Erde in Kilometern aus. Nutzungsbeispiel:

# Airports within 100km from Berlin
SELECT ?place ?placeLabel ?location ?dist WHERE {

  # Berlin coordinates
  wd:Q64 wdt:P625 ?berlinLoc . 
  SERVICE wikibase:around { 
      ?place wdt:P625 ?location . 
      bd:serviceParam wikibase:center ?berlinLoc . 
      bd:serviceParam wikibase:radius "100" . 
  } 
  # Is an airport
  ?place wdt:P31/wdt:P279* wd:Q1248784 .
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" . 
  }
  BIND(geof:distance(?berlinLoc, ?location) as ?dist) 
} ORDER BY ?dist

Probier es aus!

# Places around 0°,0° 
SELECT *
{
  SERVICE wikibase:around { 
      ?place wdt:P625 ?location . 
      bd:serviceParam wikibase:center "Point(0 0)"^^geo:wktLiteral .
      bd:serviceParam wikibase:radius "250" . 
  } 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . ?place rdfs:label ?placeLabel }
  BIND(geof:distance("Point(0 0)"^^geo:wktLiteral, ?location) as ?dist) 
} 
ORDER BY ?dist

Probier es aus!

Koordinaten-Funktionen

Die Funktionen geof:globe, geof:latitude und geof:longitude geben Teile der Koordinaten aus - Globus-URI, Breitengrad und Längengrad.

URL-Entschlüsselungs-Funktionen

Die Funktion wikibase:decodeUri dekodiert (d.h. sie macht die Prozentkodierung rückgängig) eine gegebene URI-Zeichenkette. Dies kann nötig sein, wenn Wikipedia-Titel (die kodiert sind) in Zeichenketten umgewandelt werden. Diese Funktion ist ein Gegenstück zur SPARQL-Funktion encode_for_uri.

Automatische Präfixe

Die meisten Präfixe, die in üblichen Abfragen genutzt werden, werden von der Maschine genutzt, ohne dass sie explizit angegeben werden müssen.

Erweiterte Daten

Der Dienst unterstützt Datumswerte vom Typ xsd:datumZeit in einer Zeitspanne von 290 Milliarden Jahren in der Vergangenheit und der Zukunft mit einer Auflösung von einer Sekunde. WDQS speichert die Daten als 64-Bit-Zahl seit Beginn der Unixzeit.

Blazegraph-Erweiterungen

  Warnung: As Blazegraph is not actively developed, it is planned to migrate Wikidata Query Service to another triplestore. The following may be discontinued at some point.

Die Blazegraph-Plattform, auf der WDQS implementiert wurde, hat ihre eigene SPARQL-Erweiterung. Dazu gehören unterschiedliche Graph-Durchlaufalgorithmen, die im Blazegraph-Wiki dokumentiert sind, darunter BFS, shortest path, CC und PageRank-Implementierungen.

Bitte sieh dir auch die Blazegraph-Dokumentation zu Abfragehinweisen an, um Informationen darüber zu erhalten, wie man die Ausführung von Abfragen und unterschiedliche Aspekte der Maschine kontrolliert.

Es gibt im BlazeGraph-Wiki keine Dokumentation über die bd:sample-Erweiterung. Sie ist nur in einem Kommentar im Code dokumentiert.

Vereinigung

Wir erlauben SPARQL-Vereinigungsabfragen, eine ausgewählte Anzahl externer Datenbanken anzurufen. Siehe bitte die vollständige Liste von Vereinigungsendpunkten auf der entsprechenden Seite.

Beispiel-Vereinigungsabfrage:


SELECT ?workLabel WHERE {
  wd:Q165257 wdt:P2799 ?id 
  BIND(uri(concat("http://data.cervantesvirtual.com/person/", ?id)) as ?bvmcID)
  SERVICE <http://data.cervantesvirtual.com/openrdf-sesame/repositories/data> {
    ?bvmcID <http://rdaregistry.info/Elements/a/otherPFCManifestationOf> ?work .
    ?work rdfs:label ?workLabel        
  }
}

Try it!

Bitte beachte, dass die Datenbanken, die die Vereinigungsendpunkte bedienen, Ontologien verwenden, die sich stark von denen in Wikidata unterscheiden können. Siehe bitte die Links zu den Eigentümer-Dokumentationen, um mehr über die Ontologien und den Datenzugriff auf diese Datenbanken zu erfahren.

MediaWiki API

Siehe bitte die vollständige Beschreibung auf der Dokumentationsseite zum MediaWiki-API-Dienst.

Der MediaWiki-API-Dienst erlaubt es, aus SPARQL die MediaWiki-API anzurufen und die Ergebnisse aus der SPARQL-Abfrage zu erhalten. Beispiel (findet Kategoriemitglieder):


SELECT * WHERE {
  wd:Q6501349 wdt:P910 ?category .
  ?link schema:about ?category; schema:isPartOf <https://en.wikipedia.org/>; schema:name ?title .
  SERVICE wikibase:mwapi {
	 bd:serviceParam wikibase:api "Generator" .
     bd:serviceParam wikibase:endpoint "en.wikipedia.org" .
     bd:serviceParam mwapi:gcmtitle ?title .
     bd:serviceParam mwapi:generator "categorymembers" .
     bd:serviceParam mwapi:gcmprop "ids|title|type" .
     bd:serviceParam mwapi:gcmlimit "max" .
    # out
    ?subcat wikibase:apiOutput mwapi:title  .
    ?ns wikibase:apiOutput "@ns" .
    ?item wikibase:apiOutputItem mwapi:item .
  }
}

Try it!

Wikimedia-Dienst

Wikimedia betreibt den öffentlichen Dienst WDQS, der auf http://query.wikidata.org/ genutzt werden kann.

Die Ausführungszeit für die Abfrage über den öffentlichen Endpunkt ist auf 60 Sekunden begrenzt. Dies gilt sowohl für das GUI als auch für den öffentlichen SPARQL-Endpunkt.

GUI

Die GUI auf http://query.wikidata.org/ erlaubt es dir, SPARQL-Abfragen zu bearbeiten und an die Abfragemaschine zu übermitteln. Die Ergebnisse werden als HTML-Tabelle angezeigt. Beachte, dass jede Abfrage eine einzigartige URL hat, die als Lesezeichen zur späteren Verwendung gespeichert werden kann. Wenn du auf diese URL gehst, wird die Abfrage im Bearbeitungsfenster erscheinen, sie wird jedoch nicht ausgeführt - du musst dafür weiterhin auf "Ausführen" klicken.

Du kannst auch über einen Kurz-URL-Dienst eine Kurz-URL für die Abfrage generieren, indem du auf den Link "Kurz-URL erzeugen" auf der rechten Seite klickst - dadurch wird die verkürzte URL für die aktuelle Abfrage erzeugt.

Die Schaltfläche "Präfixe hinzufügen" generiert den Header, der Standard-Präfixe für SPARQL-Abfragen enthält. Die vollständige Liste von Präfixen, die nützlich sein kann, ist in der Dokumentation des RDF-Formats zu finden. Beachte, dass die am häufigsten verwendeten Präfixe automatisch funktionieren, da WDQS sie automatisch unterstützt.

Die GUI besitzt auch einen einfachen Eintrags-Explorer, der aktiviert werden kann, indem man auf das Symbol "🔍" neben dem Eintragsergebnis klickt. Durch Klicken auf die Q-ID des Eintrags selbst gelangt man auf die Seite des Eintrags auf wikidata.org.

Standard-Ansichten

Hauptartikel: wikidata:Special:MyLanguage/Wikidata:SPARQL query service/Wikidata Query Help/Result Views

Wenn du die Abfrage im WDQS-GUI ausführst, kannst du auswählen, in welcher Ansicht die Ergebnisse angezeigt werden, indem du einen Kommentar einfügst: #defaultView:viewName am Anfang der Abfrage.

Einen Titel anzeigen

Wenn du die Abfrage im WDQS-GUI ausführst, kannst du über den Ergebnissen einen Titel anzeigen, indem du einen Kommentar einfügst: #title: Zeichenkette, die angezeigt werden soll am Anfang der Abfrage.

SPARQL-Endpunkte

SPARQL-Abfragen können mit einer GET- oder POST-Abfrage an https://query.wikidata.org/sparql direkt an den SPARQL-Endpunkt übermittelt werden.

Bei GET-Abfragen ist die Abfrage im Format https://query.wikidata.org/sparql?query=(SPARQL_query) in der URL enthalten, z.B. https://query.wikidata.org/sparql?query=SELECT%20?dob%20WHERE%20{wd:Q42%20wdt:P569%20?dob.}.

Bei POST-Abfragen kann die Abfrage alternativ im Körper der Abfrage enthalten sein, statt in der URL, was es ermöglicht, längere Abfragen auszuführen, ohne die URL-Beschränkungen zu erreichen. (Beachte, dass der POST-Körper weiterhin das Präfix query= enthalten muss (es sollte also query=(SPARQL_query) statt (SPARQL query) sein), und die SPARQL-Abfrage URL-encodiert sein muss.)

Das Ergebnis wird standardmäßig als XML ausgegeben oder als JSON, wenn entweder der Parameter format=json in der URL enthalten ist oder der Header Accept: application/sparql-results+json mit der Abfrage übergeben wird.

Das JSON-Format ist standardmäßig das SPARQL-1.1-Abfrageergebnis-JSON-Format.

Es wird empfohlen, GET für kleinere Abfragen zu nutzen und POST für größere Abfragen, da POST-Abfragen nicht zwischengespeichert werden.

Unterstützte Formate

Die folgenden Ausgabeformate werden derzeit vom SPARQL-Endpunkt unterstützt:

Format HTTP-Header Abfrageparameter Beschreibung
XML Accept: application/sparql-results+xml format=xml XML-Ergebnisformat, wird standardmäßig ausgegeben. Wie beschrieben in https://www.w3.org/TR/rdf-sparql-XMLres/
JSON Accept: application/sparql-results+json format=json JSON-Ergebnisformat, wie in: https://www.w3.org/TR/sparql11-results-json/
TSV Accept: text/tab-separated-values Wie beschrieben in https://www.w3.org/TR/sparql11-results-csv-tsv/
CSV Accept: text/csv Wie beschrieben in https://www.w3.org/TR/sparql11-results-csv-tsv/
Binäres RDF Accept: application/x-binary-rdf-results-table

Abfragelimits

Es ist ein hartes Abfragelimit konfiguriert, das bei 60 Sekunden liegt. Es gibt auch die folgenden Limits:

  • Ein Klient (User Agent + IP) darf alle 60 Sekunden 60 Sekunden Verarbeitungszeit nutzen
  • Ein Klient darf 30 fehlerhafte Abfragen je Minute stellen

Klienten, die die obigen Limits überschreiten, werden mit dem HTTP-Code 429 gedrosselt. Nutze Retry-After-Header, um zu sehen, wann die Abfrage wiederholt werden kann. Wenn der Klient 429 Antworten ignoriert und damit fortfährt, Abfragen zu stellen, die die Limits überschreiten, kann er temporär von dem Dienst ausgeschlossen werden. Klienten, die nicht die User-Agent-Richtlinie beachten, können vollständig gesperrt werden – stelle sicher, einen guten User-Agent-Header abzusenden.

Jede Abfrage wird ein Timeout erzeugen, wenn ihre Ausführung länger dauert als das konfigurierte Abfragelimit. Möglicherweise möchtest du die Abfrage optimieren oder eine problematische Abfrage hier melden.

Beachte auch, dass der Zugang auf den Dienst derzeit auf 5 parallele Abfragen je IP beschränkt ist. Die obigen Limits können sich abhängig von Ressourcen und Nutzungsmustern ändern.

Abfrageerklärung

Blazegraph erlaubt es, Abfrageanalysen anzuzeigen, die erklären, wie die Abfrage geparst wurde und welche Optimierungen angewendet wurden. Um diese Information zu sehen, füge explain=details-Parameter zur Abfragezeichenkette hinzu, zum Beispiel: https://query.wikidata.org/sparql?query=SELECT%20?dob%20WHERE%20{wd:Q42%20wdt:P569%20?dob.}&explain=details.

Namensräume

Die Daten im Wikidata Query Service umfassen den Hauptnamensraum wdq, an den Abfragen an den Haupt-SPARQL-Endpunkt geleitet werden, sowie andere Hilfsnamensräume, die unten aufgeführt sind. Um Daten aus einem anderen Namensraum abzufragen, nutze die Endpunkt-URL https://query.wikidata.org/bigdata/namespace/NAMESPACENAME/sparql.

Kategorien

Siehe bitte die vollständige Beschreibung auf der Kategorien-Dokumentationsseite.

Der Wikidata Query Service bietet auch Zugriff auf den Kategorien-Graph ausgewählter Wikis. Die Liste der Wikis kann hier eingesehen werden: https://noc.wikimedia.org/conf/dblists/categories-rdf.dblist

Der Name des Kategorienamensraums ist categories. Der SPARQL-Endpunkt für den Zugriff darauf ist https://query.wikidata.org/bigdata/namespace/categories/sparql.

Siehe bitte die Kategorienseite für eine detailliertere Dokumentation.

DCAT-AP

Die DCAT-AP-Daten für Wikidata sind als SPARQL über den Endpunkt https://query.wikidata.org/bigdata/namespace/dcatap/sparql verfügbar.

Die Quelle für die Daten ist: https://dumps.wikimedia.org/wikidatawiki/entities/dcatap.rdf

Beispiel-Abfrage um Daten abzurufen:

PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX dct: <http://purl.org/dc/terms/>

SELECT ?url ?date ?size WHERE {
  <https://www.wikidata.org/about#catalog> dcat:dataset ?dump .
  ?dump dcat:distribution [
    dct:format "application/json" ;
    dcat:downloadURL ?url ;
    dct:issued ?date ;
    dcat:byteSize ?size 
  ] .
}

Linked-Data-Fragments-Endpunkt

Wir unterstützen auch die Abfrage der Datenbank über die Triple-Pattern-Fragments-Oberfläche. Dies ermöglicht es, einfach und effizient Tripel-Daten zu finden, bei denen ein oder zwei Teile des Tripels bekannt sind, wenn du alle Tripel abrufen musst, die dieser Vorlage entsprechen. Siehe die weiteren Informationen auf der Seite von Linked Data Fragments.

Auf die Oberfläche kann über folgende URL zugegriffen werden: https://query.wikidata.org/bigdata/ldf. Dieser Dienst ist auf der Blazegraph-Datenbank implementiert, sodass er die gleiche Verzögerung wie der Query Service hat. Beispielabfragen:

Beachte, dass derzeit nur vollständige URLs für die Parameter subject, predicate und object unterstützt werden.

Standardmäßig wird die HTML-Oberfläche angezeigt, es sind jedoch viele Datenformate verfügbar, die über den Accept-HTTP-Header definiert werden.

Verfügbare Datenformate
Accept Format
text/html Standard-HTML-Browser-Oberfläche
text/turtle Turtle-Format
application/ld+json JSON-LD-Format
application/n-triples N-Triples-Format
application/rdf+xml RDF/XML-Format

Die Daten werden auf Seiten ausgegeben, wobei eine Seite 100 Tripel umfasst. Die Seiten sind nummeriert, beginnend mit 1 und die Seitenzahl wird über den Parameter page definiert.

Eigenständiger Dienst

Da es sich bei dem Dienst um eine Open-Source-Software handelt, ist es auch möglich, den Dienst auf einem Server eines anderen Benutzers zu betreiben, indem man die unten aufgeführten Anweisungen befolgt.

Die Hardware-Anforderungen finden sich in der Blazegraph-Dokumentation.

Wenn du planst, den Dienst für eine andere Wikibase-Instanz als Wikidata zu verwenden, siehe bitte die weiterführenden Anweisungen.

Installieren

Um den Dienst zu installieren, wird empfohlen, das vollständige Servicepaket als ZIP-Datei herunterzuladen, z.B. von Maven Central mit Gruppen-ID org.wikidata.query.rdf und Artifakt-ID "service" oder die Quelldistribution von https://github.com/wikimedia/wikidata-query-rdf/ zu klonen und mit "mvn package" aufzubauen. Das ZIP-Paket wird sich im Verzeichnis dist/target unter service-VERSION-dist.zip befinden.

Das Paket enthält den Blazegraph-Server als .war-Anwendung, die nötigen Bibliotheken, um den Aktualisierungsdienst zum Erhalt neuer Daten von der Wikidata-Seite auszuführen, Skripte, um unterschiedliche Aufgaben zu vereinfachen und das GUI im Unterverzeichnis gui. Wenn du das GUI nutzen möchtest, musst du deinen HTTP-Server konfigurieren, damit er dieses bedient.

Standardmäßig ist der SPARQL-Endpunkt auf http://localhost:9999/bigdata/namespace/wdq/sparql konfiguriert und das Standard-Blazegraph-GUI ist auf http://localhost:9999/bigdata/ verfügbar. Beachte, dass in der Standardkonfiguration auf beide nur über localhost zugegriffen werden kann. Du musst externe Endpunkte und eine angemessene Zugriffskontrolle anbieten, wenn du von Außerhalb auf sie zugreifen möchtest.

Nutzung von Snapshot-Versionen

Wenn du eine unveröffentlichte Snapshot-Version installieren möchtest (normalerweise ist dies erforderlich, wenn die veröffentlichte Version einen Fehler enthält, der behoben wurde, wobei die neue Veröffentlichung noch nicht verfügbar ist) und du nicht deine eigenen Binärdateien kompilieren möchtest, kannst du eines von folgendem nutzen:

Daten laden

  Warnung: Stand 2020 dauert es auf Wikimedia-Servern etwa 12 Tage, um alle Daten im Dump zu importieren und weitere 12 Tage, damit der Abfragedienst die Verzögerung aufholt.

Der weitere Installationsprozess ist detailliert in der Start-Dokumentation beschrieben, die Teil der Distribution ist und die folgenden Schritte beinhaltet:

  1. Den letzten RDF von https://dumps.wikimedia.org/wikidatawiki/entities/ herunterladen (das RDF ist die Datei mit der Endung .ttl.gz).
  2. Die Daten mit dem Skript munge.sh vorverarbeiten. Dadurch wird eine Reihe von TTL-Dateien mit vorverarbeiteten Daten mit Namen wie wikidump-000000001.ttl.gz, etc erstellt. Siehe die Optionen für das Skript unten.
  3. Starte den Blazegraph-Dienst, indem du das Skript runBlazegraph.sh ausführst.
  4. Lade die Daten in den Dienst, indem du loadData.sh nutzt. Beachte, dass das Laden der Daten normalerweise wesentlich langsamer ist, als die Vorberarbeitung, sodass du mit dem Laden beginnen kannst, sobald mehrere vorverarbeitete Dateien bereitstehen. Das Laden kann von jeder Datei aus neu gestartet werden, wenn man die unten beschriebenen Optionen nutzt.
  5. Starte den Aktualisierungsdienst, indem du runUpdate.sh nutzt, nachdem alle Daten geladen wurden.

Kategorien laden

Wenn du auch Kategoriedaten laden möchtest, tue bitte folgendes:

  1. Erstelle einen Namensraum, z.B. categories: createNamespace.sh categories
  2. Lade die Daten hinein: forAllCategoryWikis.sh loadCategoryDump.sh categories

Beachte, dass diese Skripte nur Daten aus Wikimedia-Wikis gemäß den Wikimedia-Einstellungen laden. Wenn du mit einem anderen Wiki arbeiten musst, musst du möglicherweise manche Variablen in den Skripten ändern.

Skripte

Die folgenden hilfreichen Skripte sind Teil der Distribution:

munge.sh

Daten aus dem RDF-Dump zum Laden vorverarbeiten.

Option Notwendig? Erklärung
-f filename Ja Dateiname des RDF-Dumps
-d directory Nein Verzeichnis, in das die verarbeiteten Dateien geschrieben werden, Standard ist das aktuelle Verzeichnis
-l language Nein Wenn dieser Wert angegeben ist, werden nur Bezeichnungen für die angegebene Sprache beibehalten. Nutze diese Option, wenn du nur eine Sprache benötigst, da es die Performance verbessern, die Datenbankgröße reduzieren und Abfragen vereinfachen kann.
-s Nein Wenn dieser Wert angegeben ist, werden die Daten über Seitenlinks ausgeschlossen. Nutze diese Option, wenn du Seitenlinks nicht abfragen musst, da dies die Performance verbessern und die Datenbankgröße reduzieren kann.
-c size Nein Nutze diese Option, um die Standardgröße der Chunks zu überschreiben. Bei zu großen Chunks kann es beim Import zu Zeitüberschreitungen kommen.

Beispiel:

./munge.sh -c 50000 -f data/wikidata-20150427-all-BETA.ttl.gz -d data -l en -s

loadData.sh

Verarbeitete Daten in Blazegraph laden. curl muss installiert sein.

Option Notwendig? Erklärung
-n namespace Ja Definiert den Graph-Namensraum, in den die Daten geladen werden, wobei für WDQS-Daten wdq verwendet werden sollte
-d directory Nein Verzeichnis, in dem die verarbeiteten Dateien gespeichert sind, Standard ist das aktuelle Verzeichnis
-h host Nein Hostname des SPARQL-Endpunktes, Standard ist localhost
-c context Nein Kontext-URL des SPARQL-Endpunktes, Standard ist bigdata - muss für WDQS normalerweise nicht geändert werden
-s start Nein Nummer der verarbeiteten Datei, mit der begonnen wird, Standard ist 1
-e end Nein Nummer der verarbeiteten Datei, mit der geendet wird

Beispiel:

./loadData.sh -n wdq -d `pwd`/data

runBlazegraph.sh

Den Blazegraph-Dienst ausführen.

Option Notwendig? Erklärung
-d directory Nein Heim-Verzeichnis der Blazegraph-Installation, Standard ist das Verzeichnis, in dem sich auch das Skript befindet
-c context Nein Kontext-URL des SPARQL-Endpunktes, Standard ist bigdata - muss für WDQS normalerweise nicht geändert werden
-p port Nein Port-Nummer des SPARQL-Dienstes, Standard ist 9999
-o options Nein Fügt Optionen zur Kommandozeile hinzu

Beispiel:

./runBlazegraph.sh

Innerhalb des Skripts gibt es zwei Variablen, die man möglicherweise bearbeiten möchte:

# Q-id of the default globe
DEFAULT_GLOBE=2
# Blazegraph HTTP User Agent for federation
USER_AGENT="Wikidata Query Service; https://query.wikidata.org/";

Auch die folgenden Umgebungsvariablen werden vom Skript überprüft (alle sind optional):

Variable Standard Erklärung
HOST localhost Hostname, um den Blazegraph-Dienst anzubinden
PORT 9999 Port, um den Blazegraph-Dienst anzubinden
DIR Verzeichnis, in dem sich das Skript befindet Verzeichnis, indem Konfigurationsdateien gespeichert werden
HEAP_SIZE 16g Java-Heap-Größe für Blazegraph
MEMORY -Xms${HEAP_SIZE} -Xmx${HEAP_SIZE} Vollständige Java-Speicher-Einstellungen für Blazegraph
GC_LOGS siehe die Quelle GC-Protokoll-Einstellungen
CONFIG_FILE RWStore.properties Ort der Blazegraph-Konfigurationsdatei
BLAZEGRAPH_OPTS leer Zusätzliche Optionen werden so wie sie sind an die Java-Kommandozeile übergeben

runUpdate.sh

Den Aktualisierungsdienst ausführen.

Option Notwendig? Erklärung
-n namespace Nein Definiert den Graph-Namensraum, in den die Daten geladen werden, wobei für WDQS-Daten wdq verwendet werden sollte. Standard: wdq
-h host Nein Hostname des SPARQL-Endpunktes, Standard ist localhost
-c context Nein Kontext-URL des SPARQL-Endpunktes, Standard ist bigdata - muss für WDQS normalerweise nicht geändert werden
-l language Nein Wenn dieser Wert angegeben ist, werden nur Bezeichnungen für die angegebene Sprache beibehalten. Nutze diese Option, wenn du nur eine Sprache benötigst, da es die Performance verbessern, die Datenbankgröße reduzieren und Abfragen vereinfachen kann.
-s Nein Wenn dieser Wert angegeben ist, werden die Daten über Seitenlinks ausgeschlossen. Nutze diese Option, wenn du Seitenlinks nicht abfragen musst, da dies die Performance verbessern und die Datenbankgröße reduzieren kann.
-t secs Nein Zeitüberschreitung bei der Kommunikation mit Blazegraph, in Sekunden.
-N Nein Diese Option bewirkt, dass das Skript Optionen ignoriert, die Probleme verursachen können, wenn eine zweite Aktualisierung läuft, während die erste noch läuft. Nutze dies, wenn du eine zweite Aktualisierung laufen lässt, z.B. um ein bestimmtes Datenobjekt mit --ids aufzunehmen (siehe unten).
-S Nein Auf der Konsole speichern, statt in Dateien. Nützlich für Wartungsaufgaben, wenn das Skript aus der Kommandozeile ausgeführt wird.

Es wird empfohlen, für die Optionen -l und -s (oder deren Abwesenheit) für munge.sh und runUpdate.sh die gleichen Einstellungen zu verwenden, da Daten andernfalls möglicherweise nicht korrekt aktualisiert werden.

Beispiel:

./runUpdate.sh

Auch die folgenden Umgebungsvariablen werden vom Skript überprüft (alle sind optional):

Variable Standard Erklärung
UPDATER_OPTS leer Zusätzliche Optionen werden so wie sie sind an die Java-Kommandozeile übergeben

Aktualisierungsoptionen

Die folgenden Optionen funktionieren mit der Aktualisierungsanwendung.

Sie sollten als zusätzliche Optionen nach -- an das Skript runUpdate.sh übergeben werden, z.B.: runUpdate.sh -- -v.

Optionen für die Aktualisierung
Option Lange Option Bedeutung
-v --verbose Ausführlicher Modus
-s TIMESTAMP --start TIMESTAMP Datensammlung an einem bestimmten Zeitstempel beginnen, im Format 2015-02-11T17:11:08Z oder 20150211170100.
--keepTypes Alle Typen-Aussagen beibehalten
--ids ID1,ID2,... Bestimmte IDs aktualisieren und verlassen
--idrange ID1-ID2 ID-Bereich aktualisieren und verlassen
-d SECONDS --pollDelay SECONDS Wie lange gewartet werden soll, wenn keine neuen Daten verfügbar sind
-t NUMBER --threadCount NUMBER Wie viele Fäden genutzt werden sollen, wenn Wikibase-Daten erhalten werden
-b NUMBER --batchSize NUMBER Wie viele Änderungen von der LetzteÄnderungen-API erhalten werden sollen
-V --verify Daten nach dem Laden verifizieren (LANGSAM! Nur zur Fehlerbehebung)
-T SECONDS --tailPollerOffset SECONDS Einen zweiten Trailing-Poller mit festgelegter Verzögerung nach dem Haupt-Poller nutzen
--entityNamespaces NUMBER,NUMBER,... Liste von Wikibase-Namensräumen, die auf Änderungen überprüft werden
-W --wikibaseUrl URL URL, die bei der Kommunikation mit Wikibase genutzt werden soll, z.B.https://www.wikidata.org. Muss gesetzt werden, wenn Aktualisierungen nicht von Wikidata kommen.
-U --conceptUri URL URL-Basis der URLs, die genutzt werden, um Wikibase-Einträge in RDF zu repräsentieren, z.B. http://www.wikidata.org. Muss gesetzt werden, wenn die Wikibase-Instanz keine Präfixe nutzt, die auf Wikidata basieren.
--commonsUri URL Commons-URI für die Unterstützung von SDC. Sowohl --conceptUri als auch --commonsUri sollten gesetzt werden, damit dies funktioniert.
--wikibaseScheme SCHEME URL-Schema (http, https), das bei der Kommunikation mit Wikibase genutzt werden soll. (veraltet) Nutze oben stattdessen wikibaseUrl.
--wikibaseHost HOSTNAME Hostname, der bei der Kommunikation mit Wikibase genutzt werden soll. (veraltet) Nutze oben stattdessen wikibaseUrl.
-I --init Wenn dies zusammen mit einer Startzeit angegeben ist, wird diese Zeit in der Datenbank als Zeitpunkt der letzten Änderung markiert und zukünftige Abfragen würden sie als Startpunkt nutzen, auch wenn keine neueren Daten gefunden wurden.
--constraints Lädt Einschränkungsverletzungen für aktualisierte Datenobjekte über die constraintsrdf-API.
-K SERVERS --kafka SERVERS Wenn dies angegeben ist, wird die Aktualisierung Kafka als Aktualisierungsquelle nutzen und die angegebenen Server als Broker, z.B. kafka1001.eqiad.wmnet:9092,kafka1002.eqiad.wmnet:9092,kafka1003.eqiad.wmnet:9092
-C NAME --consumer NAME Kafka-Kosumentenname. Es ist eine gute Idee, dafür den Hostnamen oder etwas, das auf diesem basiert, zu verwenden.
-c NAME1,NAME2 --cluster NAME1,NAME2 Kafka-Clusternamen. Wenn dies angegeben ist, werden Kafka-Themennamen als Präfix Clusternamen erhalten, so wäre es statt thema1 NAME1.thema1 und NAME2.thema2.
--resetKafka Kafka-Offsets zurücksetzen
--apiPath Pfad zur API, z.B. /w/api.php (Standard) oder /api.php. Eingeführt in I78c222fe8b.
--entityDataPath Pfad zu den Einträgen, z.B. /wiki/Special:EntityData/ (Standard) oder /Special:EntityData/. Eingeführt in I78c222fe8b.

Konfigurierbare Eigenschaften

Die folgenden Eigenschaften können konfiguriert werden, indem sie in den Skripten oben zu dem Ausführungsbefehl des Skriptes hinzugefügt werden:

Name Bedeutung Standard
wikibaseServiceWhitelist Dateiname der Remote-Service-Whiteliste. Gilt für Blazegraph. whitelist.txt
org.wikidata.query.rdf.blazegraph.mwapi.MWApiServiceFactory.config Konfigurationsdatei für die MWAPI-Integration mwservices.json
com.bigdata.rdf.sail.sparql.PrefixDeclProcessor.additionalDeclsFile Dateiname, der zusätzliche Präfix-Definitionen enthält. Die Syntax ist wie in der SPARQL-Abfrage. Diese Definitionen werden von Blazegraph geladen und sind für alle Abfragen verfügbar.
wikibaseConceptUri URL-Präfix für Wikibase-Daten, welches bei der RDF-Repräsentation der Einträge genutzt wird. Muss gesetzt werden, wenn der Datensatz nicht Wikidata-Präfixe nutzt. http://www.wikidata.org
commonsConceptUri URL-Präfix für die Unterstützung von Structured Data on Commons. Sowohl wikibaseConceptUri als auch commonsConceptUri sollten gesetzt werden, damit dies funktioniert.
wikibaseHost Hostname der Wikibase-Instanz. Gilt für Blazegraph und den Aktualisierer. (veraltet) Nutze oben wikibaseConceptUri. www.wikidata.org
org.wikidata.query.rdf.blazegraph.inline.literal.WKTSerializer.noGlobe Standard-Globus-Wert für Koordinaten, bei denen kein Globus angegeben ist. "2" würde bedeuten, dass der Eintrag Q2 der Standard-Globus ist. "0" bedeutet, dass es keinen Standard-Globus gibt. Gilt für Blazegraph. 0
org.wikidata.query.rdf.tool.rdf.RdfRepository.timeout Zeitüberschreitung bei der Kommunikation mit dem RDF-Repositorium, in Sekunden. Gilt für den Aktualisierer. -1
org.wikidata.query.rdf.tool.wikibase.WikibaseRepository.timeout Zeitüberschreitung bei der Kommunikation mit dem Wikibase-Repositorium, in Millisekunden. Gilt für den Aktualisierer. 5000
http.userAgent User-Agent, den der Dienst beim Anruf anderer Dienste nutzen würde
http.proxyHost http.proxyPort

https.proxyHost https.proxyPort

Proxy-Einstellungen, die beim Anrufen anderer Dienste genutzt werden
wikibaseMaxDaysBack Wie viele Tage zurück wir die Daten der letzten Änderungen vom Aktualisierer abfragen können. Wenn die Datenbank älter als die angegebene Anzahl von Tagen ist, sollte sie aus einem aktuelleren Dump neu geladen werden. 30

Fehlende Funktionen

Unten finden sich Funktionen, die derzeit noch nicht unterstützt werden:

  • Weiterleitungen werden nur als owl:sameAs-Tripel repräsentiert, drücken jedoch keine Äquivalenz in den Daten aus und haben keine spezielle Unterstützung.

Kontakt

Wenn du bemerkst, dass etwas mit dem Dienst nicht stimmt, kannst du das Discovery-Team per Email an die Liste discovery@lists.wikimedia.org oder über den IRC-Kanal #wikimedia-discovery kontaktieren.

Fehler können auch im Phabricator gemeldet und über das Discovery-Phabricator-Board verfolgt werden.

Siehe auch