SPARQL für Anfänger. Ein Versuch.
SPARQL ist wie SQL, nur mit mehr Kontext. SPARQL ist eine Datenbanksprache, die es erlaubt, das Semantic Web zu befragen. Eine Sprache, die nicht nur Daten liefert. Sie ergründet auch das logische Verhältnis zwischen diesen Daten. Zumindest in der Theorie. In der Praxis ist es schwieriger. Ein Selbstversuch mit SPARQL, Wikidata und Schwimmbädern.
Es nieselregnet. Auf dem „Street Food Market“ am Tempelhofer Hafen versucht Schlagermusik die Trostlosigkeit zu vertreiben. Hinter DJ Hüpfburg und mir steht der „Irish Pub“-Wagen, ein Fleischer-Wagen und Curry Paule. Streetfood is coming home.
Street Food kam zurück von den Hipstern, die nach dem Thailandurlaub ihre Liebe zu Street Food entdeckt haben, zu den Leuten, die schon seit Jahrzehnten Essen an Deutschlands Straßen zubereiten. Die einzigen Gäste bei Curry Paule sind die Mitarbeiter vom Irish Pub. Am Irish Pub Wagen steht niemand. Ein eisiger Herbstwind verleidet den Aufenthalt draußen. Curry Paule bietet als große Attraktion vegane Wurst. Das hätte es 1985 nicht gegeben.
DJ Hüpfburg heuchelt Interesse gegenüber meinen Rede. Wir sitzen auf den Stufen am Hafen, betrachten die wöchentlich kleiner werdende Gruppe der Freizeitboote dort. Ich erzähle die letzten Züge einer Anekdote. Es geht um Mund-Nasen-Masken und Kommunikation:
„Ich stehe also mit Madame im IKEA. Wir hoffen auf die letzten Karlhugo-Stühle. Die sind quasi immer ausverkauft. Schaust du auf die Website bei unserem Laden, siehst Du einen oder zwei. Dann wieder null. Dann einen halben Tag lang acht Stühle, dann wieder null. Wir fürchten, bald gibt es sie gar nicht mehr. Wir fürchten, IKEA nimmt sie aus dem Programm. Also online geschaut, ob sie im IKEA Schöneberg vorhanden sind. Schnell die Gelegenheit ergriffen. Wir fuhren zum Bestellschalter, natürlich brav mit Maske, wie die Dame hinter der Plexiglasscheibe auch. Die Sprache wird durch die Masken vernuschelt.
Madame: Wir würden gerne einen Karlhugo abholen.
Verkäuferin schaut skeptisch: Karlhugo? Nie gehört. Sicher, dass es Karlhugo ist?
Madame: Doch, sicher: Karlhugo.
Verkäuferin tippt zweifelnd in ihren Rechner: „Ne, nichts.“
Madame: „Sicher, im Internet stand hier sind noch wir.“
Verkäuferin tippt weiter, kopfschüttelnd: „Kein. Karlhugo. Gar nicht.“
Madame hat mittlerweile die Website aufgerufen, zeigt sie der Dame in Blau-Gelb: „Hier. Acht Exemplare Karlhugo im IKEA Schöneberg.“
Verkäuferin: „Ach, Karlhugo! Gar nicht Karlhugo!“ Sie tippt energisch.
„Hätten sie doch gleich Karlhugo gesagt!“
Sie druckt den Zettel für die Kasse aus. Madame fragt mich: Hast du verstanden, was sie gesagt hat? Ich: „Karlhugo“.
DJ Hüpfburg ist beeindruckt. Ich bilde mir ein, einen Mundwinkel zucken zu sehen. „Du solltest Stand-Up-Comedy machen. Am besten mit Maske. Dann verstehen die Leute Dich schlechter.“
Ihre Gedanken werden düsterer: Weißt Du, wo man schnell einen Corona-Test herbekommt? Eine Freundin, Schneiderin, hatte einen Kunden, der jetzt positiv getestet ist. Das war ein schöner Auftrag: Dark Academia meets Southern Gothic, dunkle Mäntel, Cardigans, Wollpullover und künstliche Spinnenweben. Sie hatten vier Treffen in der letzten Woche zur Absprache. Mich hat sie gefragt, ob ich eine Quelle für schicke Brillen dazu habe. Hat Spaß gemacht. Also schön, bis der Kunde anrief mit dem Testergebnis. Nun ist alles Grütze.
Sie will gar nicht den Laden zumachen und schnell einen negativen Test. Aber dafür muss sie überhaupt an einen Test kommen. Und jeder geschlossene Tag schmerzt. Ich überlege: „Ich glaube, ich kenne eine Ärztin mit Corona-Sprechstunde. Müsste ich zu Hause suchen.“
Wir schweigen. Nieselregen und Herbststurm werden durch Gedanken an überfüllte Intensivstationen ergänzt. Eine Lachmöwe mit einem Pommes im Schnabel fliegt vorbei. Dj Hüpfburg steht wortlos auf, vegane Currywurst kaufen.
Sie kommt mit einer Wurst und einem Prospekt zurück. Große gelbe Buchstaben fordern mich auf: „Curryspargel! Freu Dich auf den Sommer!“
„Dirk, du hast mir Unsinn erzählt. Sparkel spricht sich gar nicht Spargel aus.“ Ich: „???“ Diese Datenbanksprache: SPARQL. Die wird „Sparkel“ ausgesprochen, wie im Englischen to sparcle leuchtend/blinkend. Sterne sparclen. Nicht wie im deutschen „Spargel.“
„Okay. Aber wie kommst du darauf?“
Ich spielte im Internet herum. Mir war langweilig. Hochzeiten im Oktober bei Corona ist kein Business. Also dachte ich, ich nutze die Zeit und beschreite innovative Recherchewege nach Eventlocations. Schlösser, Burgen, Industrieruinen. Als du mir wieder mit Wikipedia auf die Nerven gegangen bist, hast du von Wikidata erzählt. Ich dachte, Zahlen kann ich. Ich schaue wie das geht. Jetzt schaue ich Videos und ich teste.
Wikidata
Wikidata ist eine offene Datenbank. Das heißt: eine große Datenbank, in der Daten über alles stehen. Von der vagen Grundidee her so wie Wikipedia, aber mit weniger Gelaber. Wobei die Inhalte nicht einfach in der Datenbank stehen. Sie sind logisch verknüpft.
Es stehen nicht nur A, B und C in der Datenbank, sondern ihre Beziehung. Wenn dort steht „A ist Kind von B“. Und dort steht: „B ist Kind von C“. Dann kann man Abfragen, dass A das Enkelkind von C ist, ohne dass dies so explizit vorher eingegeben werden muss. Steht dort auch noch „D ist Kind von B“, kann man Abfragen, dass A und D Geschwister sind, ohne dass dies explizit in der Datenbank steht.
Bei Wikidata kann jede auf die Daten zugreifen, und etwas mit ihnen machen. So als einfache Idee: in Wikidata stehen immer die aktuellen Einwohnerzahlen jeder Stadt. Dann muss Wikipedia diese nicht mehr in jeder Sprachversion nachtragen, sondern kann diese aus Wikidata ziehen. Aber auch externe Anbieter.
Es ist möglich, Wikidata, direkt als Mensch aus quasi ocioell per Auge zu lesen. Hier zum Beispiel der Eintrag für das Stadtbad Mitte in Berlin: Aber das ist ehrlich gesagt, hässlich, unübersichtlich und keinerlei Gewinn gegenüber Wikipedia. Da gefällt mir die Quartettkarte besser:
Besser für Wikidata ist eine Abfrage, die die gesuchten Daten hübsch arrangiert. Man befrage die Datenbank. Da man mit einem Computer Computersprech reden muss, gibt es SPARQL.
SPARQL
SPARQL ist eine Sprache zum Abfragen solcher semantischer Datenbanken. Sie existiert als offizielle Empfehlung des W3C-Konsortiums seit 2008. Inspiriert wurde sie durch SQL, hat aber Features, die ihr das logische Denken ermöglichen.
Wikidata hat eine Schnittstelle, in der man SPARQL-Abfragen einstellen kann: https://query.wikidata.org/
Alle Schwimmbäder
Schau mal, Du kannst Dir alle Schwimmbäder anzeigen lassen.
SELECT ?item ?itemLabel
WHERE
{
?item wdt:P31 wd:Q357380.
SERVICE wikibase:label { bd:serviceParam wikibase:language „[AUTO_LANGUAGE],de“. }
}
Ich: Aha?
Hüpfburg: Also von Anfang an.
SELECT – sagt, zeige mir Folgendes an: ?item und ?itemlabel
?item – ist jeder Gegenstand mit seiner Nummer in der Datenbank. SELECT ?item sagt „Zeige mir Gegenstände an, wie sie in der Datenbank stehen.“ Also zum Beispiel Q1292740.
SELECT ?itemlabel sagt „Zeige mir Gegenstände an, mit dem Namen, mit dem Menschen sie benennen.“ Also zum Beispiel „Stadtbad Mitte“.
Okay. Aber noch zeigt SELECT ?item ?itemLabel ja ALLE Gegenstände an. Nicht nur die Schwimmbäder.
Genau. Deshalb kommt ein Filter. Der wird gesetzt mit WHERE { }. Also zeige mir alle Gegenstände und ihre Bezeichnung, die folgende Bedingung erfüllen:
?item wdt:P31 wd:Q357380.
Total klar.
Okay: ?item – heißt für jeden Gegenstand muss eine Bedingung gelten.
wdt:P31 – jeder der Gegenstand muss zu einer bestimmten Klasse gehören, die im nächsten Wert steht.
wd:Q357380 – Das ist die Klasse, zu der der Gegenstand gehören muss. Hier: Hallenbad.
In Worten steht dort: Zeige mir alle Gegenstände, wenn diese Gegenstände zur Klasse Hallenbad gehören.
Die letzte Zeile – SERVICE wikibase:label… – sagt nur, dass wir nur die deutsche Bezeichnung haben wollen, nicht auch die englische, finnische und japanische
Hier we go!
Ich „109 Bäder. Weltweit. Ich bin nicht beeindruckt. Das sind weniger Bäder als Berlin und Brandenburg haben.“
Alle Schwimmbäder mit Bild
Hüpfburg: Aber es geht noch mehr. Die kannst dir jedes Bad mit einem Bild anzeigen lassen.
SELECT ?item ?itemLabel ?pic
WHERE
{
?item wdt:P31 wd:Q357380.
?item wdt:P18 ?pic
SERVICE wikibase:label { bd:serviceParam wikibase:language „[AUTO_LANGUAGE],de“. }
}
SELECT kennst du ja schon. Diesmal soll ein Bild angezeigt werden. Also „?pic“ – zeige neben dem Gegenstand und dessen Namen auch das Bild.
Im Filter, also WHERE steht auch, dass ein Bild vorhanden sein muss.
Ich: „Okay, nur 79 Bäder. Und immer noch keine Bilder zu sehen. Nur ein Link“
Dann setzt Du #defaultview:imagegrid davor, dann hast du eine schöne Ansicht.
Okay, nun 79 mehr oder weniger schöne Bilder von 79, Bädern, die random sind. Die Idee überzeugt mich mehr als das Ergebnis.
Alle Schwimmbäder auf Karte
#defaultView:Map
SELECT *
WHERE {
?item wdt:P31/wdt:P279* wd:Q357380;
wdt:P625 ?geo .
}
SELECT: Wie vorher auch, nur dass du dieses Mal nichts angeben musst oder kannst, was gezeigt wird. Das macht #defaultView:Map
Der Filter, also WHERE hat nun noch wdt:P625 ?geo – es zeigt die nur Gegenstände an, die auch einen Platz auf der Karte haben.
Okay. Und wenn ich darauf gehe, sehe ich, dass es in den USA wd:Q15263936 gibt. Erstaunlich! Ich weise Hüpfburg darauf hin: Aber du kennst schon den Bäderatlas? Da gibt es alle deutschen Bäder – mehrere tausend, nicht einige Dutzend. Auf einer Karte. Mit allen wichtigen Infos. Und ich muss vorher nicht rumspargeln, um an die Infos zu kommen. Da reicht es, auf die Seite zu gehen.
So viele Möglichkeiten
Und wo sind die logischen Verknüpfungen in diesen Wikidata-Abfragen? – Die müssen erst in der Datenbank stehen. Wenn bei den Bädern der Architekt stünde, könntest du eine Abfrage bauen: „Zeige mir alle Gebäude von Schwimmbadarchitekten, die vor 1900 geboren wurden.“
Oder zeige mir alle verschollenen Filme, die als Handlungsort ein Schwimmbad haben. Oder zeige mir Schwimmbäder in Deutschland, die nach 1970 eröffneten und schon wieder außer Funktion genommen wurden. Nur fehlen dafür die Daten in der Datenbank. Daten, die nicht vorhanden sind, kannst Du nicht abfragen.
Ich stelle fest: „Als Schwimmbadsuchmaschine bin ich enttäuscht.“
„Ja“, wendet DJ Hüpfburg ein. „Aber ich suche keine Bäder. Ich suche Schlösser, Burgen und Industrieruinen. Für die gibt es keinen Atlas. Und Dirk, wie immer. Du denkst zu kurzfristig. Irgendwann stehen in Wikidata die Bahnlängen und die Gastro und die Beckentiefe und der Architekt und alles in der Nähe. Dann kannst du alle Bäder in der Nähe eines Bahnhofs suchen. Oder Hallenbäder mit 50-Meter-Bahnen. Oder alle historischen Bäder Italiens.“
„Okay, und wann? Bei dem Tempo dauert das bis 2050 oder so.“
Kann es sein, dass eine Datenbank da wirklich anders funktioniert als ein Lexikon? Wikidate andere Bedingungen erfüllen muss, um zu funktionieren als Wikipedia? Wenn das Lexikon große Lücken hat, freut man sich halt, über die Teile, die da sind. Da hat jeder Eintrag für den Leser einen Wert an sich. Wenn eine Datenbank große Lücken hat, ist sie nicht nutzbar, weil die Ergebnisse zufällig wirken. Dort bekommen die Einträge ihren Wert erst durch ihre Menge.
Sie gibt sie nicht geschlagen: „Denke an die Möglichkeiten. Du kannst es in deine Website integrieren. Stell dir vor du hast exklusive Schwimmbadvideos. Oder machst eine Seite über den Architekten Ludwig Hoffmann. Oder über Bahnhöfe in der Nähe von Sportstätten. Dann musst du dafür keine eigene Datenbank pflegen, sondern kannst ganz einfach die Daten aus Wikidata importieren.“
„Ganz einfach“, klar, lästere ich.„Einfacher als selber pflegen. Wenn ihr drei Leute findet, die das für ihre eigene Website machen, ist das Ergebnis besser, als wenn jeder seine eigene Datenbank hat.“
Da sage ich „das kenne ich“. Am Ende greifen Google und Facebook die ganzen Daten ab, bauen die in ihre Oberfläche ein – und das war es dann mit meinem Schwimmbadblog. Aber ich bin versucht. Mag die Hoffnung nicht fahren lassen.
„Okay. Ich trage jetzt ein, dass das Stadtbad Mitte eine 50-Meter-Bahn hat!“ Aber wie mache ich das? „Bahnlänge“ finde ich nicht als Kategorie. Muss ich die jetzt erfinden. Sinnvollerweise ja beim Oberbegriff „Hallenbad“? Aber wie lege ich das da an? Und was passiert mit Bädern, die mehrere Becken mit verschiedenen Bahnlängen haben? Es gibt auf jeden Fall noch viel zu tun.
Oder ich stelle Wohnzimmerstühle ein. Vielleicht sind die weniger komplex. Aber gibt es Kriterien für Relevanz in Wikidata? Fragen über Fragen.
Weiterlesen
Wo Wikidata sinnvoll wäre: Biographien von Sportlern
Die schönen Schwimmbadvideos gibt es bereits. Zum Beispiel vom Stadtbad Charlottenburg.