Factgrid Federated: How to retrieve data from Wikidata and DBpedia from the Factgrid SPARQL endpoint

Unfortunately becoming an official source for federated {something missing} from Wikidata is not as easy as one writing Factgrid on a waiting list. More over the time perspective seems in unclear. {Gib mir den Absatz auf Deutsch…}

{Auch der nächste Satz, sags mir auf Deutsch und ich sags auf Englisch…} But: Becoming Factgrid becoming a starting point for federated queries to Wikidata and DBpedia is much easier. Thanks to Lucas Werkmeister from Wikimedia Deutschland the Factgrid SPARQL endpoint is now able to request data from Wikidata as well as DBpedia, the linked open data generated from Wikipedia articles.

So Factgrid is now not an isolated database anymore, but integrated in the linked open data universe. An easy example: Every Factgrid item that has a Wikidata QID can be queried for property-value statements from the both Wikidata and DBpedia.

How does it work? Let me explaint it quickly:

Use Prefixes as a gateway to other data sources

The main difference {between what and what?} is that you have to take into consideration the data sources with prefixes at the top of your query. A prefix is basically a signpost or gateway to other ontologies and data sources and must be included at the top of queries.

Since Factgrid uses the same software as Wikidata, the default it to use the prefix wd for items and wdt for properties in Factgrid, which is the default for Wikidata, hence the wd. This works fine if only one data source is used.

Integrating Wikidata in Factgrid queries, it makes sense to change the prefixes in such a way the data source is visible at first glance. I decided to use fg_ for Factgrid, wd_ for Wikidata and db_ for DBpedia. Of course, you can use any other prefix as signpost, like factgrid_item as long as you declare it as a prefix at the top, e.g. `PREFIX fgfactgrid_item: <https://database.factgrid.de/entity/>.

Possible prefixes:

# Factgrid
PREFIX fg: <https://database.factgrid.de/entity/>
PREFIX fgt: <https://database.factgrid.de/prop/direct/>
# DBPedia Categories
PREFIX dbc: <http://dbpedia.org/resource/Category:>
# dbpedia ontology
PREFIX dbo: <http://dbpedia.org/ontology/>
# dbpedia resource
PREFIX dbr: <http://dbpedia.org/resource/>
# Wikidata Prefixes
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wd: <http://www.wikidata.org/entity/>
# standard prefixes
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dct: <http://purl.org/dc/terms/>

Structure of federated queries

There are many to Rome and to federated queries. The ones I generated so far have the follwing basic structure:

  • set the prefixes
  • look up a specific item in Factgrid named fg_item
  • look for the Wikidata QID of the Factgrid item and convert this string it to an IRI called wd_item in order to use it for quering Wikidata or DBpedia
  • get the item in DBpedia using the OWL ontology with that specific Wikidata QID ?db_item owl:sameAs ?wd_item
  • define properties that are of interested as [VALUES](https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial#VALUES) and give them a name, e.g. relations_db
  • get the resulting value

Examples for federated queries

Magnus Hirscheld partners

Time for an example. Let’s search for unmarried partners of the famous German sexologist Magnus Hirschfeld in Factgrid, Wikidata and DBpedia. The query behind this link looks up the specific properties for unmarried partners in all three sources and delivers the name as well as an image. The technical parts included as comments.

As you can see, there are three lines. One is empty, it’s the first data source, Factgrid, that has nothing to offer for that request. The second row is from DBpedia, because the _db columns are filled, the first is from Wikidata (_wd) .

So there are two partners in those three data sources: Karl Giese in DBpedia and Li Shiu Tong in Wikidata. Both are correct, but neither Wikidata nor DBpedia have all information. Just by combining the sources we get the full picture.

A note on property Labels: I don’t know yet how to include both property labels from two sources (Factgrid and Wikidata), because both rely on the PREFIX wikibase: <http://wikiba.se/ontology#>.

Get all persons that are mentioned in a Factgrid item’s Wikipedia article and show their image

Like before, the example is Magnus Hirschfeld.

Link to the query

A tool to make mass comparisons

Relying on these query mechanisms I built a tool to compare Factgrid and Wikipedia statements in bulk. I make use of Factgrids P343, that offer the translation between Factgrid and Wikidata properties. In the first iteration of the app, it only works for properties relating to people.

The goal is to find missing relations on both Factgrid and Wikidata and create triples automatically that can be imported to Wikidata or Factgrid, including a source and timestamp.

For example, Factgrid’s Property for unmarried Partner is P117 and it’s corresponding Wikidata property P451 is entered on Factgrid. This let’s us search for all Factgrid Items that have a Wikidata QID and compare the partners on Factgrid with the partners on Wikidata.

As of today, June 27, 2022, there are six relations that are both in Factgrid as well as Wikidata. For example, that Lida Gustava Heymann was Anita Augspurg’s partner can be found on Factgrid and Wikidata.

Seven statements are only in Factgrid, but not in Wikidata, e.g. that Amalie Zephyrine von Salm-Kyrburg’s partner was Alexandre François Marie de Beauharnais. Since both, Salm-Kyrburg and de Beauharnais have a Wikidata QID in Factgrid, we can automatically build the import statements for Wikidata Quickstatements Tool. You get those import statements when you click “Download data for Wikidata import”. Copy the content of the downloaded file and paste it into the Quickstatement Tool. Besides the statement, it includes a source and timestamp.

It works the other way, too. There are three unmarried partnerships of Factgrid items in Wikidata, that Factgrid has not covered. One might want to have those statements in Factgrid as well and with downloading the file and importing it with Factgrids Quickstatements Tool it can be easily included in Factgrid’s data.

But this only works for items that already exist in Factgrid. You can detect them, when the column value looks like Factgrid, Wikidata. If there’s only value = Wikidata then it cannot be imported straightahead, because it only exists so far only in Wikidata. This is the case for Anne Louise Germaine de Staël’s partner Louis Marie de Narbonne-Lara in row 1. So even we the tool detects three partnerships in Wikidata missing in Factgrid, only two can be imported quickly.

In contrast to the tables showing the statements in both data sources and the statements only in Factgrid, there are no labels, just links for the values. It would be possible to fetch them from Wikidata, but it would take quite a time load them. In favor of loading time this information is missing.

It might be the case that you are only interesed in a certain subset of Factgrid items. Then you can add a filter in the text field on the left sidebar.

Try it yourself

The link to the app is apps.katharinabrunner.de/compare-factgrid-wikidata/. Try it yourself, I am looking forward to your feedback!

Soon, I want to extend the app such that it works on all other properties as well that allow a comparison between Factgrid and Wikidata.

Want to know more about federated queries?

The technical documentation of Wikidata is excellent and offers many, many examples. A starting point for federated queries can be found here.

In einer Graphdatenbank müsste man eigentlich auch graphisch suchen können

[Link for English translation]

Das FactGrid ist eine Graphdatenbank. Das heißt, dass man sich die Datenlage in einer solchen Ressource besser nicht in Form von fünf oder zehn großen, aufeinander verweisenden Tabellen (zu Personen, Orten, Organisationen und Dokumenten etwa) vorstellt.

Das Wissen besteht in einer solchen Datenbank aus Wissensgegenständen – in Wikibase-Instanzen heißen sie „Items“ – und den Beziehungen zwischen ihnen, den „Properties“, sprich Eigenschaften, die diese Gegenstände an andere (oder auch an historische Daten, Links, Bild-Dateien oder Geokoordinaten binden).

Eine solche räumlich vernetzte Beziehung zwischen zwei Gegenständen kann man mit jedem Molekülbaukasten basteln. Hier ein Objekt mit Beziehungen zu zwei anderen. Das kann eine Person (die rote Kugel) sein mit Verbindung zu ihren Eltern (den beiden blauen Kugeln). Strukturell sieht das Gefüge aber nicht anders aus, wenn zu einer Person deren zwei Kindern erfasst sind, oder zwei Universitäten, an denen sie studierte.

Das Molekülmodell trägt nicht besonders gut. In einer Datenbank wie dem FactGrid sind alle Objekte vollkommen gleichartig. Sie alle sind monotone „Items“, die unter Q-Nummern hochgezählt werden. Erst die Aussagen zu ihnen bringen Unterschiede ins Spiel. Ein Vater ist jemand im FactGrid, wenn auf ihn von wo anders eine P141 „Vater“-Property verweist, auf „Mütter“ verweisen dagegen P142-Verbindungen.

In einer Tripel basierten Datenbank (die alles Wissen in dreigliedrige Aussagen zergliedert) genügen zwei Sorten von Bausteinen, etwa Kugeln für die Wissensgegenstände und, weil hier eben Bezugsrichtungen wichtig werden, Pfeile für die Verbindungen zwischen ihnen.

Alle Personen, die an der Universität Jena studierten, findet man, wenn man danach fragt, von welchen Items aus eine Aussage zur „ausbildenden Institution“ (P160) – auf das Item der „Universität Jena“ (Q21880) verweist. So (ausführbares Link) sieht die SPARQL-Suchanfrage aus, und die kann nun niemand so einfach „skripten“:

SELECT ?item ?itemLabel WHERE {
   SERVICE wikibase:label { bd:serviceParam wikibase:language “[AUTO_LANGUAGE],en”. }
   ?item wdt:P160 wd:Q21880.}

Wieso dies alles genau so zu schreiben ist, kann man ohne Handbuch nicht wissen, und man kann ohne Kenntnis der Datenbank auch nicht wissen, welche Q-Nummer man für die Jenaer Universität und welche P-Nummer man für die Aussage „hat hier studiert“ braucht.

Der Wikimedia Abfragehelfer (ist da bereits ein massiver Gewinn. Wenn einem klar ist, was man erreichen kann, wenn man zuerst „filtert“ und dann bestimmt, was einen an einzelnen Aussagen zu den herausgefilterten Objekten interessiert, kommt man mit dem Abfragehelfer erheblich viel weiter. In das Filterfeld kann man etwa „Uni Jena“ eingeben, ohne die Q-Nummer zu kennen. Der Autocomplete lenkt einen beim Eintippen komfortabel. Der Abfragehelfer ahnt bereits, dass einem interessiert, wer hier studierte – das ist die Property, die am häufigsten auf die Uni Jena verweist, sie kommt als erster Property-Vorschlag.

Wenn man nun mehr zu den herausgefilterten Studenten wissen will, kann man von deren jeweiligen Items Aussagen beziehen – etwa die Geburtsdaten, die Geburtsorte, die Sterbedaten und Sterbeorte, Väter und Mütter:

Es ist dies aber auch schon der Punkt, an der Abfragehelfer die Waffen streckt. Wenn man wissen will, wo die Orte liegen (um sie auf eine Landkarte zu spiegeln), muss man durch die Orte hindurch fragen, denn auf deren Items liegen die Geokoordinaten und hier hilft einem der Abfragehelfer nicht mehr weiter.

Es ist ebenso wenig möglich, im Abfragehelfer einen Qualifier hinzuzusetzen, um etwa den Studienbeginn mit abzufragen. Auch die einfache Umkehr der Fragen ist nicht vorgesehen: Ich kenne eine bestimmte Person und will wissen, wo sie von wann bis wann studierte.

Eigentlich sollte zur Graphdatenbank ein Visual Editor gehören…

Man müsste Graphdatenbank mit Skizzen der Beziehungen zwischen den Objekten befragen können. Hier die banalste Frage nach Allen, die überhaupt irgendeine Ausbildungseinrichtung besuchten. Wer waren sie, und welche Einrichtungen waren das?

Wenn uns nur Studenten der Uni Jena interessieren, sollten wir das für die zweite Kugel notieren können. Man tippt in den Kreis oder stellt es mit dem Werkzeugkasten klar: der zweite Gegenstand in diesem Spiel soll die Uni Jena sein:

Man kann jede solche Anfrage nun beliebig erweitern etwa, indem man von den Studenten aus die Frage nach deren Vätern (P141) stellt, sie sollen hier in Tabellenspalte 3 gelistet werden:

Und man könnte nun sehr einfach den Schritt tun, der mit dem aktuellen Abfragehelfer so leicht nicht mehr zu machen ist: die nächste Frage an die Väter ansetzen. Von welchen (wieder P160) Institutionen wurden diese Väter eigentlich ausgebildet?

Man könnte die Frage auch kurzschließen, um zu erfassen, welche Studenten genau wie ihre Väter in Jena studierten:

Ich gab den Dreiecken verschiedene Farben, um sichtbar zu machen, wenn im Gefüge dieselben Fragen an verschiedenen Stellen gestellt werden (und damit strukturell ähnliche Gegenstände anspielen).

Optional / Verpflichtend

Vielleicht würde man in den Property-Dreiecken mit einem Ausrufezeichen notieren, wenn eine Aussage nicht optional, sondern verpflichtend für alle Funde gelten soll.

Qualifier

Qualifier müssten in der Visualisierung gar nicht viel komplexer sein. Hier wird jeweils ein einzelnes Statement zum Gegenstand neuer Statements. Wenn wir das graphische Repertoire schlank halten wollen, könnten wir die hinzukommenden Aussagen einfach an die vermittelnde Property binden – etwa, um bei den Studenten in zwei eigenen Spalten zu notieren, was die Qualifier P49 und P50 zu deren jeweiligem Studienbeginn und -Ende an dieser Uni notieren:

Filter und gezielte Darstellungen

Ich ließ in den letzten Suchen bereits den aufgeklappten Werkzeugkasten mitlaufen. Der nun sehr viel schlanker Befunde weiterverarbeiten. Eine Suche könnte etwa bei den Mitgliedern (P91) des Illuminatenordens (Q10677) erfassen, welchen religiösen Hintergründen (P172) sie entstammten. Bei einer Statistik, etwa einer Bubble Chart, würden wir die Zahl der einzelnen Treffer wissen wollen:

Denkbar nicht minder, dass man bei Zeitangaben Zeitfenster notieren kann, Werte die größer oder kleiner als angegeben sein müssen, um Befunde ins zeitspezifische Bild zu bringen. Spätestens bei solchen Suchen wird allen, die da schon einmal mit SPARQL hantierten und Aussagen verschachtelten klarer, dass der visuelle Query Editor sehr viel intuitiver und auch sehr viel viel schlanker erfassen würde, was einen bei einer Suche interessiert. Man würde damit spielen können, sich an Befunde herantasten können. Man würde es lernen, in den Datenstrukturen zu denken.

Mal so zum Nachdenken…

PS. Rechte und linke Maustaste – wie man im Visual Editor arbeitet

Wie würde man im Visual Editor seine Suchanfragen schreiben? Vielleicht ganz einfach: Mit der linken Maustaste setzt man einen Kreis mit Fragezeichen darinnen.

Klicke ich mit der linken Maustaste in diesen Kreis, kann ich dort etwas hineinschreiben und das Fragezeichen durch Text ersetzen.

Klicke ich mit der rechten Maustaste in den Kreis, scheinen grau vier Erweiterungsoptionen auf: Zwei Pfeile gehen von meinem Kreis weg, zwei Pfeile führen zu ihm hin. Jedes Mal gibt es zwei offene Angebote mit lediglich einem Fragezeichen darin, und zwei Angebote (zur Erklärung, was hier geschieht), bei denen Muster-Text gegeben ist:

Mit der linken Maustaste kann ich die Richtung meiner Wahl anklicken, diese erscheint jetzt farbig, die anderen drei bislang grauen Pfeile werden damit unsichtbar. Ich kann nun fortfahren und Fragezeichen (von Properties oder Items) durch Text ersetzen, oder auf einen Pfeil oder Kreis klicken und mir mögliche Erweiterungen von hier aus anzeigen lassen.

Wie im aktuellen Abfragehelfer erhalte ich immer eine Vorschau von 20 Zeilen Tabelle, mit der ich sehe, was ich hier soeben getan habe.

How to use QuickStatements to get data into the FactGrid

The video shows how easy it is to get data from regular spreadsheets via QuickStatements into the database.

You will find a handy cheat sheet of spreadsheet commands, to format your data here: https://docs.google.com/spreadsheets/d/1ov0BL_ob2rFhIl24G4BQhnVAdWeUYOAzlRphEgzOtAE/edit?usp=sharing

Our instance, https://database.factgrid.de/ hosted at the University of Erfurt has its own QuickStatements tool to manage the import of data: Access the tool under https://database.factgrid.de/quickstatements/.

If you do not have an account contact olaf.simons@pierre-marteau.com to get one.