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