Beiträge

Wikidata Import in Apache Jena

Apache Jena ist ein Open Source Java Framework zur Entwicklung von Linked Data Applikationen. Teil von Apache Jena ist die Triple Store Datenbank TDB und der SPARQL Server und HTTP-Endpoint Jena Fuseki. Der folgende Beitrag dokumentiert den Wikidata Import in TDB auf einem Linux System.

Benutzte Versionen

  • Apache Jena 3.9.0
  • Wikidata (latest)
  • Ubuntu 18.04 LTS
  • Java OpenJDK 11 JRE

Systemvoraussetzungen
Für den Import wird leistungsfähige Hardware mit genügend RAM benötigt. Im Rahmen dieses Beitrags wurde ein Server mit Intel XEON CPU mit 32 Cores und 128 GB RAM eingesetzt. Nach dem Wikidata Import belegt der TDB Triple Store 699GB Festplattenplatz. Für die Sortierung des Index wird temporär wesentlich mehr Speicherplatz benötigt. Die folgenden Schritte lassen sich gut mit Docker automatisieren.

Wikidata herunterladen
Laden Sie in einem ersten Schritt die aktuelle Wikidata Version herunter.

 mkdir wikidata
 cd wikidata
 wget -c https://dumps.wikimedia.org/wikidatawiki/entities/latest-all.ttl.gz
 gunzip latest-all.ttl.gz

Apache Jena installieren
Installieren Sie Apache Jena, welche den benötigten tdbloader für den Aufbau des Index zur Verfügung stellt.

 cd ..
 wget -c http://mirror.easyname.ch/apache/jena/binaries/apache-jena-3.9.0.tar.gz
 tar -xvzf apache-jena-3.9.0.tar.gz

Import
Erzeugen Sie nun ein Verzeichnis Data für den Import von Wikidata.

 mkdir data

In einem weiteren Schritt importieren Sie mit dem tdbloader die Daten. Optional können die zwei Teilschritte data und index auch manuell nacheinander ausgeführt werden.

apache-jena-3.9.0/bin/tdbloader2 --loc data/ wikidata/latest-all.ttl > tdb1.log 2> tdb2.log &

…oder…

 apache-jena-3.9.0/bin/tdbloader2 --phase data --loc data/ wikidata/latest-all.ttl > tdb1.log 2> tdb2.log &
 apache-jena-3.9.0/bin/tdbloader2 --phase index --loc data/  > tdb1.log 2> tdb2.log &

Für die Index Erstellung wird genügend temporärer Speicherplatz benötigt. Die Standardeinstellungen des TMP-Directories können mit folgendem Befehl überschrieben werden:

export TMPDIR=/mypath/tmp/

Überprüfen Sie die Logdaten nach dem Import:

  13:58:47 INFO -- TDB Bulk Loader Start
  13:58:47 INFO Data Load Phase
  13:58:47 INFO Got 1 data files to load
  13:58:47 INFO Data file 1: /mypath/wikidata/latest-all.ttl
  12:41:35 INFO Data Load Phase Completed
  12:41:35 INFO Index Building Phase
  12:41:35 INFO Creating Index SPO
  12:41:35 INFO Sort SPO
  17:11:17 INFO Sort SPO Completed
  17:11:17 INFO Build SPO
  17:57:29 INFO Build SPO Completed
  17:58:04 INFO Creating Index POS
  17:58:04 INFO Sort POS
  04:20:54 INFO Sort POS Completed
  04:20:54 INFO Build POS
  05:08:01 INFO Build POS Completed
  05:08:39 INFO Creating Index OSP
  05:08:39 INFO Sort OSP
  10:15:12 INFO Sort OSP Completed
  10:15:13 INFO Build OSP
  11:04:06 INFO Build OSP Completed
  11:04:41 INFO Index Building Phase Completed
  11:05:19 INFO -- TDB Bulk Loader Finish
  11:05:19 INFO -- 162392 seconds

Mit tdbquery können Sie nun beliebige Abfragen auf dem Triple Store durchführen.

export PATH="$PATH:/mypath/apache-jena-3.9.0/bin"

tdbquery --loc /mypath/data "

PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?charLabel ?groupLabel
WHERE {
	?group 	wdt:P31 wd:Q14514600;  		# ist eine Gruppe fiktiver Figuren
          	wdt:P1080 wd:Q931597.  		# aus fiktivem Marvel Universum
 	?char 	wdt:P463 ?group. 			# Mitglied der Gruppe
 	?char 	rdfs:label ?charLabel.		# Label der Figur
 	?group 	rdfs:label ?groupLabel. 	# Label der Gruppe
 	FILTER (LANG(?charLabel) = 'de').
 	FILTER (LANG(?groupLabel) = 'de').
}
LIMIT 1000
"

Quellen
Foto von Judeus Samson auf Unsplash