<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Semantic Web | FDMLab@LABW</title><link>https://fdmlab.landesarchiv-bw.de/tag/semantic-web/</link><atom:link href="https://fdmlab.landesarchiv-bw.de/tag/semantic-web/index.xml" rel="self" type="application/rss+xml"/><description>Semantic Web</description><generator>Wowchemy (https://wowchemy.com)</generator><language>de-de</language><lastBuildDate>Tue, 13 Dec 2022 00:00:00 +0000</lastBuildDate><image><url>https://fdmlab.landesarchiv-bw.de/media/sharing.jpg</url><title>Semantic Web</title><link>https://fdmlab.landesarchiv-bw.de/tag/semantic-web/</link></image><item><title>GND in lokale Datenbank laden (reloaded)</title><link>https://fdmlab.landesarchiv-bw.de/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/</link><pubDate>Tue, 13 Dec 2022 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/</guid><description>&lt;p>Wir setzen unser lokales Testsystem für Experimente mit der Linked Open Data Version der Gemeinsamen Normdatei mit &lt;strong>Oxigraph&lt;/strong> neu auf.&lt;/p>
&lt;p>Wir hatten vor über einem Jahr schon einen ausführlichen Artikel zum &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/">Laden der GND in einen Apache Jena Triplestore&lt;/a> verfasst. Das beschriebene Setup ist nach wie vor im Einsatz und wir sind auch (meistens) zufrieden damit. Jedoch dauert das Einlesen von Daten doch recht lange, was das Aufsetzen von Ad-Hoc Experimenten erschwert.&lt;/p>
&lt;p>Daher haben wir als Alternative das relativ neue Projekt Oxigraph getestet.&lt;/p>
&lt;h2 id="datenbank-oxigraph">Datenbank: Oxigraph&lt;/h2>
&lt;figure class="float-right" id="figure-oxigraphhttpsgithubcomoxigraphoxigraph-logo">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="[Oxigraph](https://github.com/oxigraph/oxigraph) Logo." srcset="
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph_hu63b9f0ab308a14bda665a5c76457113b_25957_f2299a627e7fb33ac96514090804a724.webp 400w,
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph_hu63b9f0ab308a14bda665a5c76457113b_25957_1d6ee86304e49f7ccba2ffbaf645acd7.webp 760w,
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph_hu63b9f0ab308a14bda665a5c76457113b_25957_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph_hu63b9f0ab308a14bda665a5c76457113b_25957_f2299a627e7fb33ac96514090804a724.webp"
width="200"
height="450"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
&lt;a href="https://github.com/oxigraph/oxigraph" target="_blank" rel="noopener">Oxigraph&lt;/a> Logo.
&lt;/figcaption>&lt;/figure>
&lt;p>Das Projekt &lt;a href="https://github.com/oxigraph/oxigraph" target="_blank" rel="noopener">Oxigraph&lt;/a> ermöglicht uns ein ähnliches Setup, wie wir es mit &lt;a href="https://jena.apache.org/" target="_blank" rel="noopener">Apache Jena&lt;/a> aufgebaut haben.
Anders als Apache Jena basiert Oxigraph auf der Programmiersprache &lt;a href="https://www.rust-lang.org/" target="_blank" rel="noopener">Rust&lt;/a> und verwendet &lt;a href="https://rocksdb.org/" target="_blank" rel="noopener">RocksDB&lt;/a> als Datenbank im Hintergrund.
Das ist für den Endanwender jedoch nicht sichtbar, so dass diese technischen Details sich hauptsächlich in einer schnelleren Verarbeitungsgeschwindigkeit bemerkbar machen.&lt;/p>
&lt;h2 id="einlesen-der-daten">Einlesen der Daten&lt;/h2>
&lt;p>Zum Einlesen haben wir uns die Datei &lt;code>authorities-gnd_lds.nt.gz&lt;/code> aus dem &lt;a href="https://data.dnb.de/opendata/" target="_blank" rel="noopener">DNB Data Dump&lt;/a> heruntergeladen.
Anders als in unserem Apache Jena Projekt, müssen wir die Komprimierung der Daten vor dem Einlesen mit &lt;code>gzip -d authorities-gnd_lds.nt.gz&lt;/code> auflösen. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;p>Wir arbeiten mit der folgenden Ordnerstruktur:&lt;/p>
&lt;div class="mermaid">---
title: Ordnerstruktur
config:
look: handDrawn
theme: neutral
---
flowchart TD
subgraph data[far:fa-folder-open data]
fuseki[far:fa-folder oxigraph]
gnd_triples[far:fa-folder gnd_triples]
end
root[far:fa-folder-open oxigraph_test] --> data
root --> README[far:fa-file README.md]
&lt;/div>
&lt;ul>
&lt;li>&lt;strong>README.md&lt;/strong>: Überblick über das Projekt und die Daten geben!&lt;/li>
&lt;li>&lt;strong>oxigraph&lt;/strong>: Ordner zum Persistieren der Datenbank von Oxigraph.&lt;/li>
&lt;li>&lt;strong>gnd_triples&lt;/strong>: Speicherort der &lt;code>.nt&lt;/code> Datei.&lt;/li>
&lt;/ul>
&lt;h3 id="einlese-variante-1">Einlese-Variante 1&lt;/h3>
&lt;p>In dieser Variante lassen wir zuerst die Daten in einem Container einlesen und dann in einem neuen Container anzeigen.
Der folgende Befehl startet einen Docker Container mit dem Verzeichnis der Daten zum Einlesen und einem Verzeichnis zum Speichern der Datenbank.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -it --rm --name&lt;span class="o">=&lt;/span>gnd-oxigraph -v &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">PWD&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/data/gnd_triples:/gnd_triples&amp;#34;&lt;/span> -v &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">PWD&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/data/oxigraph:/data&amp;#34;&lt;/span> oxigraph/oxigraph --location /data load --file /gnd_triples/authorities-gnd_lds.nt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Sobald der Einleseprozess beendet wurde und der Container sich schließt, können wir einen neuen Container zum Arbeiten mit den Daten starten.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -d --rm --name&lt;span class="o">=&lt;/span>gnd-oxigraph -p 8080:7878 -v &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">PWD&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/data/oxigraph:/data&amp;#34;&lt;/span> oxigraph/oxigraph --location /data serve --bind&lt;span class="o">=&lt;/span>0.0.0.0:7878
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Anschließend können wir die Benutzeroberfläche in einem Webbrowser über &lt;code>http://localhost:8080&lt;/code> aufrufen.
Der Port &lt;code>8080&lt;/code> wurde hierbei von uns im &lt;code>docker run&lt;/code> Befehl gesetzt und kann angepasst werden.&lt;/p>
&lt;h3 id="einlese-variante-2">Einlese-Variante 2&lt;/h3>
&lt;p>Wir können die Daten auch direkt &lt;strong>in&lt;/strong> dem Arbeitscontainer einlesen lassen.
Beim Starten des Containers müssen wir dabei zusätzlich den Pfad zu den GND Daten einbinden.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -d --rm --name&lt;span class="o">=&lt;/span>gnd-oxigraph -p 8080:7878 -v &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">PWD&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/data/gnd_triples:/gnd_triples&amp;#34;&lt;/span> -v &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">PWD&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/data/oxigraph:/data&amp;#34;&lt;/span> oxigraph/oxigraph --location /data serve --bind&lt;span class="o">=&lt;/span>0.0.0.0:7878
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Anschließend starten wir den Einleseprozess, indem wir den Befehl &lt;code>oxigraph_server load&lt;/code> in dem laufenden Container ausführen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> -it gnd-oxigraph /usr/local/bin/oxigraph load --location /data --file /gnd_triples/authorities-gnd_lds.nt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-anzeigen-der-daten">3. Anzeigen der Daten&lt;/h3>
&lt;p>Abschließend testen wir exemplarisch, ob die Daten nutzbar sind.
Hierfür verwenden wir eine SPARQL Abfrage mit einem Standardbeispiel aus der &lt;a href="https://d-nb.info/standards/elementset/gnd" target="_blank" rel="noopener">GND Ontology&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/118514091&amp;gt;&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="zusammenfassung-und-ausblick">Zusammenfassung und Ausblick&lt;/h2>
&lt;p>Oxigraph ist im Vergleich zu Apache Jena noch etwas grob an manchen Stellen und befindet sich noch in der aktiven Entwicklung.
Es ist also gut möglich, dass die hier verwendeten Befehle in einer späteren Version nicht mehr so funktioniert oder Schritte wie das Auflösen der &lt;code>.gz&lt;/code>-Komprimierung nicht mehr notwendig sind. &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-weboberfläche-von-oxigraph">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der Weboberfläche von Oxigraph." srcset="
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph-screenshot_hu46c0a90aff7302944c5b3bc96ca6bf21_89821_9a012596cf5469f100ebbf1a0ff06c8a.webp 400w,
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph-screenshot_hu46c0a90aff7302944c5b3bc96ca6bf21_89821_eca82f98e844b81442eb250a334bbf3e.webp 760w,
/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph-screenshot_hu46c0a90aff7302944c5b3bc96ca6bf21_89821_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2022-12-gnd-in-lokale-datenbank-laden-reloaded/oxigraph-screenshot_hu46c0a90aff7302944c5b3bc96ca6bf21_89821_9a012596cf5469f100ebbf1a0ff06c8a.webp"
width="760"
height="485"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Bildschirmfoto der Weboberfläche von Oxigraph.
&lt;/figcaption>&lt;/figure>
&lt;p>Überrascht waren wir von der Geschwindigkeit, mit der die Daten der GND eingelesen und Abfragen ausgeführt werden können.
In der folgenden Tabelle ist ein direkter Vergleich mit unserem Apache Jena Setup für das Einlesens der GND und das Durchführens der Abfrage aus &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-erste-experimente-mit-der-gnd/">Erste Experimente mit der GND&lt;/a> gelistet.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th style="text-align:right">GND laden&lt;/th>
&lt;th style="text-align:right">Testabfrage&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Apache Jena&lt;/td>
&lt;td style="text-align:right">5.329,1s&lt;/td>
&lt;td style="text-align:right">17,5s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Oxigraph&lt;/td>
&lt;td style="text-align:right">391,0s&lt;/td>
&lt;td style="text-align:right">3,6s&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Das ist natürlich kein ausführlicher oder repräsentativer Benchmark, zeigt aber direkt den Geschwindigkeitsunterschied mit den Daten mit denen wir aktuell arbeiten. Das ermöglichst uns zukünftig Umgebungen für Ad-Hoc Experimente mit der GND zu erstellen.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Wir haben für diesen Blogbeitrag Oxigraph in Version v0.3.8 und den GND Dump vom 13. Oktober 2022 verwendet.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>&lt;a href="https://github.com/oxigraph/oxigraph/tree/main/server#using-a-docker-image" target="_blank" rel="noopener">Dokumentation zur Verwendung des Oxigraph Docker Image&lt;/a>&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Experiment zur Identifikation von doppelten Orten in der GND</title><link>https://fdmlab.landesarchiv-bw.de/post/2022-06-doppelte-orte-in-gnd/</link><pubDate>Tue, 21 Jun 2022 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2022-06-doppelte-orte-in-gnd/</guid><description>&lt;p>Bei unserer Arbeit mit Orten in der &lt;em>Gemeinsamen Normdatei&lt;/em> (GND) stolperten wir hin und wieder über Dubletten.
Also Orte, die in der GND mehrfach vorhanden waren.
Dieser Beitrag beschreibt, wie wir in einem praktischen Experiment versuchten diese Dubletten innerhalb des Bundeslandes Baden-Württemberg zu identifizieren.&lt;/p>
&lt;blockquote>
&lt;p>Bildnachweis&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;/blockquote>
&lt;h2 id="hintergrund">Hintergrund&lt;/h2>
&lt;p>In der GND sind nicht nur aktuelle Orte mit einer eindeutigen GND-Nummer verzeichnet, sondern auch historische Orte.
Beispielsweise wurde &lt;a href="https://d-nb.info/gnd/4069840-3" target="_blank" rel="noopener">Cannstatt&lt;/a> mit Stuttgart vereinigt und ist seit dem 1. April 1905 als &lt;a href="https://d-nb.info/gnd/4077993-2" target="_blank" rel="noopener">Stuttgart-Cannstatt&lt;/a> und später &lt;a href="https://d-nb.info/gnd/4077993-2" target="_blank" rel="noopener">Bad Cannstatt&lt;/a> ein Stadtteil von &lt;a href="https://d-nb.info/gnd/4058282-6" target="_blank" rel="noopener">Stuttgart&lt;/a>.&lt;/p>
&lt;p>Auch wurden Gemeinden und Städte im Zuge von Kreis- und Gemeindereformen eingemeindet oder neu gebildet.
Beispielsweise wurden &lt;a href="https://d-nb.info/gnd/4088388-7" target="_blank" rel="noopener">Bissingen&lt;/a> und &lt;a href="https://d-nb.info/gnd/4088300-0" target="_blank" rel="noopener">Bietigheim&lt;/a> im Jahre 1975 zu &lt;a href="https://d-nb.info/gnd/4006554-6" target="_blank" rel="noopener">Bietigheim-Bissingen&lt;/a> zusammengelegt.&lt;/p>
&lt;p>Diese Form von Mehrfachnennung meinen wir &lt;strong>nicht&lt;/strong>.
Wir sind darüber gestolpert, dass es speziell zu historischen Orten in Baden-Württemberg mehrere Einträge gab.&lt;/p>
&lt;h2 id="idee">Idee&lt;/h2>
&lt;p>Wir wollen basierend auf der &lt;em>Ortsnamensdatenbank Baden-Württemberg&lt;/em> (ONDB) mögliche Dubletten von Orten in Baden-Württemberg in der GND identifizieren. Die ONDB wurde in einem anderen Projekt in Form einer Datenspende in die GND eingespielt, so dass wir davon ausgehen, dass wir sie als &amp;ldquo;Referenz&amp;rdquo; verwenden können. Dafür identifizieren wir alle mit Baden-Württemberg verknüpften Orte in der GND, markieren die Orte, die in der ONDB vorliegen und betrachten anschließend die Restmenge.&lt;/p>
&lt;h2 id="vorgehen">Vorgehen&lt;/h2>
&lt;h4 id="1-ondb-aufbereitung">1. ONDB Aufbereitung&lt;/h4>
&lt;p>Ein Abzug der ONDB wurde im Kontext eines anderen Projektes mit &lt;a href="https://openrefine.org/" target="_blank" rel="noopener">OpenRefine&lt;/a> aufgearbeitet, so dass ein Mapping von GND-ID auf ONDB-ID möglich ist.
Wie so ein Mapping funktioniert, ist unter &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-fortgeschrittene/12-daten-zwischen-projekten-abgleichen/">Daten zwischen Projekten in OpenRefine abgleichen&lt;/a> beschrieben.&lt;/p>
&lt;h4 id="2-gnd-in-triple-store-laden">2. GND in Triple-Store laden&lt;/h4>
&lt;p>Wie unter &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-erste-experimente-mit-der-gnd/">Erste Experimente mit der GND&lt;/a> beschrieben, wurde die GND in ihrer LOD-Form in einen &lt;a href="https://jena.apache.org/" target="_blank" rel="noopener">Apache Jena&lt;/a> Docker Container geladen. &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;h4 id="3-daten-aus-triple-store-laden">3. Daten aus Triple-Store laden&lt;/h4>
&lt;p>Mit &lt;a href="https://www.w3.org/TR/sparql11-overview/" target="_blank" rel="noopener">SPARQL-Abfragen&lt;/a> werden die Daten aus dem Apache Jena Triple-Store extrahiert.&lt;/p>
&lt;h4 id="4-dubletten-identifizieren">4. Dubletten identifizieren&lt;/h4>
&lt;p>Mit Hilfe der ODNB, &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-einsteiger/05-clustering/">Clustering Methoden in OpenRefine&lt;/a> und externen Skripten mögliche Dubletten identifizieren und manuell prüfen.&lt;/p>
&lt;h2 id="sparql-abfragen">SPARQL Abfrage(n)&lt;/h2>
&lt;p>wir haben verschiedene Methoden getestet, verworfen und kombiniert, um die für uns relevanten Orte in der GND zu identifizieren und via SPARQL aus dem Apache Jena Triple-Store laden zu können.&lt;/p>
&lt;h3 id="angaben-zur-quelle">Angaben zur Quelle&lt;/h3>
&lt;p>In der GND ist auch die Quelle einer Dateninformation erfasst, also zum Beispiel die ONDB oder das Landesarchiv Baden-Württemberg als Datenquelle genannt. Diese Information ist in der LOD-Form der GND leider nicht enthalten.
Daher konnten wir diese Information nicht als zusätzliche Informationsquelle für unsere Filter nutzen.&lt;/p>
&lt;h3 id="verknüpfung-über-hierarchie">Verknüpfung über Hierarchie&lt;/h3>
&lt;p>Theoretisch sollten wir über den Property-Path &lt;a href="https://d-nb.info/standards/elementset/gnd#hierarchicalSuperiorOfPlaceOrGeographicName" target="_blank" rel="noopener">Hierarchical superior of place or geographic name&lt;/a> alle untergeordneten Orte von &lt;a href="https://d-nb.info/gnd/4004176-1" target="_blank" rel="noopener">Baden-Württemberg&lt;/a> finden können.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?place&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">hierarchicalSuperiorOfPlaceOrGeographicName&lt;/span>&lt;span class="o">+&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">4004176-1&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Diese Eigenschaft ist jedoch nicht konsequent und speziell für historische Orte gar nicht erfasst.
Daher haben wir diesen Ansatz verworfen.&lt;/p>
&lt;h3 id="verknüpfung-über-ländercode">Verknüpfung über Ländercode&lt;/h3>
&lt;p>Theoretisch sollten wir über die Verknüpfung mit dem Ländercode (&lt;a href="https://d-nb.info/standards/elementset/gnd#geographicAreaCode" target="_blank" rel="noopener">Geographic Area Code&lt;/a>) alle mit Baden-Württemberg (&lt;a href="https://d-nb.info/standards/vocab/gnd/geographic-area-code.html#XA-DE-BW" target="_blank" rel="noopener">XA-DE-BW&lt;/a>) verknüpften Orte erfassen können.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/geographic-area-code#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdfs&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/2000/01/rdf-schema#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?place&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?type&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?type&lt;/span> &lt;span class="nn">rdfs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">subClassOf&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">PlaceOrGeographicName&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hier sind uns zwei Probleme aufgefallen:&lt;/p>
&lt;ol>
&lt;li>die Property-Path-Extension &lt;code>rdfs:subclassOf*&lt;/code> funktioniert nicht, wir konnten jedoch nicht klären ob das ein Problem mit Apache Jena oder mit den GND-Daten ist.&lt;/li>
&lt;li>Nicht alle Orte in Baden-Württemberg sind mit dem Ländercode &lt;code>XA-DE-BW&lt;/code> angelegt, sondern einige auch ausschließlich mit dem Ländercode für Deutschland &lt;code>XA-DE&lt;/code>.&lt;/li>
&lt;/ol>
&lt;h3 id="verknüpfung-über-ländercode-mit-aufzählung-aller-sub-klassen">Verknüpfung über Ländercode mit Aufzählung aller (Sub-)Klassen&lt;/h3>
&lt;p>Da die Property-Path Extension auf &lt;code>rdfs:subClassOf&lt;/code> nicht funktioniert hat, listen wir die für uns relevanten (Sub-)Klassen alle einzeln auf.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/geographic-area-code#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?place&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">VALUES&lt;/span> &lt;span class="nv">?geographicType&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">PlaceOrGeographicName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">AdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">BuildingOrMemorial&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NaturalGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">ReligiousTerritory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">TerritorialCorporateBodyOrAdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="anzahl-pro-sub-klasse">Anzahl pro (Sub-)Klasse&lt;/h3>
&lt;p>Die folgende Abfrage zählt, wie häufig die entsprechenden Typen für Orte in Baden-Württemberg in der GND vorkommen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/geographic-area-code#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?geographicType&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">?count&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">VALUES&lt;/span> &lt;span class="nv">?geographicType&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">PlaceOrGeographicName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">AdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">BuildingOrMemorial&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NaturalGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">ReligiousTerritory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">TerritorialCorporateBodyOrAdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span> &lt;span class="k">GROUP BY&lt;/span> &lt;span class="nv">?geographicType&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In der folgenden Tabelle ist das Ergebnis für die obige SPARQL-Abfrage dargestellt:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>geographicType&lt;/th>
&lt;th>count&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#AdministrativeUnit" target="_blank" rel="noopener">AdministrativeUnit&lt;/a>&lt;/td>
&lt;td>423&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#NaturalGeographicUnit" target="_blank" rel="noopener">NaturalGeographicUnit&lt;/a>&lt;/td>
&lt;td>537&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#PlaceOrGeographicName" target="_blank" rel="noopener">PlaceOrGeographicName&lt;/a>&lt;/td>
&lt;td>4205&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#ReligiousTerritory" target="_blank" rel="noopener">ReligiousTerritory&lt;/a>&lt;/td>
&lt;td>68&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#TerritorialCorporateBodyOrAdministrativeUnit" target="_blank" rel="noopener">TerritorialCorporateBodyOrAdministrativeUnit&lt;/a>&lt;/td>
&lt;td>23685&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#BuildingOrMemorial" target="_blank" rel="noopener">BuildingOrMemorial&lt;/a>&lt;/td>
&lt;td>3711&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://d-nb.info/standards/elementset/gnd#NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit" target="_blank" rel="noopener">NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit&lt;/a>&lt;/td>
&lt;td>99&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="de-ländercode-mit-nachfolger-oder-vorgänger-in-bw">DE-Ländercode mit Nachfolger (oder Vorgänger) in BW&lt;/h3>
&lt;p>Bei den Orten, die mit dem Ländercode &lt;code>XA-DE&lt;/code> für Deutschland angelegt wurden, ergab sich ein Muster.
Diese hatten häufig einen &lt;a href="https://d-nb.info/standards/elementset/gnd#precedingPlaceOrGeographicName" target="_blank" rel="noopener">Vorgänger&lt;/a> oder &lt;a href="https://d-nb.info/standards/elementset/gnd#succeedingPlaceOrGeographicName" target="_blank" rel="noopener">Nachfolger&lt;/a>, der mit dem Ländercode &lt;code>XA-DE-BW&lt;/code> für Baden-Württemberg verknüpft war.&lt;/p>
&lt;p>Die folgende SPARQL-Abfrage zeigt, wie diese Orte abgefragt werden können.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/geographic-area-code#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdfs&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/2000/01/rdf-schema#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?place&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">VALUES&lt;/span> &lt;span class="nv">?geographicType&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">PlaceOrGeographicName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">AdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">BuildingOrMemorial&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NaturalGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">ReligiousTerritory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">TerritorialCorporateBodyOrAdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">precedingPlaceOrGeographicName&lt;/span>&lt;span class="o">+&lt;/span> &lt;span class="err">|&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">succeedingPlaceOrGeographicName&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nv">?relatedPlace&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?relatedPlace&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="finale-sparql-abfrage">Finale SPARQL-Abfrage&lt;/h3>
&lt;p>Die folgende SPARQL-Abfrage kombiniert die Orte, die mit dem &lt;code>XA-DE-BW&lt;/code> für Baden-Württemberg angelegt wurden mit denen, die einen mit dem Ländercode &lt;code>XA-DE-BW&lt;/code> für Baden-Württemberg verknüpften Vorgänger oder Nachfolger haben.&lt;/p>
&lt;p>Zusätzlich werden noch die Eigenschaften &lt;a href="https://d-nb.info/standards/elementset/gnd#preferredNameForThePlaceOrGeographicName" target="_blank" rel="noopener">Bevorzugter Name des Geographikums&lt;/a> und die &lt;a href="https://d-nb.info/standards/elementset/gnd#definition" target="_blank" rel="noopener">Definition&lt;/a> abgefragt.
Da diese nicht zuverlässig gesetzt wurden, sind sie als &lt;code>OPTIONAL&lt;/code> gekennzeichnet.&lt;/p>
&lt;p>Da wir die GND-ID eindeutig halten wollen, diese aber gegebenenfalls mit mehreren geographischen Typen verknüpft sein kann, nutzen wir eine Gruppierung via &lt;code>GROUP BY&lt;/code> um doppelte GND-IDs zu filtern.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/vocab/gnd/geographic-area-code#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nv">?place&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">SAMPLE&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?geographicType&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">?GeographicType&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">SAMPLE&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?preferredName&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">?PreferredName&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">SAMPLE&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?definition&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">?Definition&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">VALUES&lt;/span> &lt;span class="nv">?geographicType&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">PlaceOrGeographicName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">AdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">BuildingOrMemorial&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NameOfSmallGeographicUnitLyingWithinAnotherGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">NaturalGeographicUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">ReligiousTerritory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">TerritorialCorporateBodyOrAdministrativeUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForThePlaceOrGeographicName&lt;/span> &lt;span class="nv">?preferredName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">definition&lt;/span> &lt;span class="nv">?definition&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">UNION&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">rdf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">type&lt;/span> &lt;span class="nv">?geographicType&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">precedingPlaceOrGeographicName&lt;/span>&lt;span class="o">+&lt;/span> &lt;span class="err">|&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">succeedingPlaceOrGeographicName&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nv">?relatedPlace&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?relatedPlace&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">geographicAreaCode&lt;/span> &lt;span class="nn">gnd-area-code&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">XA-DE-BW&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForThePlaceOrGeographicName&lt;/span> &lt;span class="nv">?preferredName&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?place&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">definition&lt;/span> &lt;span class="nv">?definition&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span> &lt;span class="k">GROUP BY&lt;/span> &lt;span class="nv">?place&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="ergebnisse">Ergebnisse&lt;/h2>
&lt;p>Mit der oben beschriebenen SPARQL-Abfrage konnten etwa 33.000 zu Baden-Württemberg zuordenbare Orte aus der GND in unserem Apache Jena Triple-Store extrahiert werden.&lt;/p>
&lt;p>Innerhalb dieser Daten konnten etwa 600 eindeutige Dubletten und deren Ursprung identifiziert und der GND Fachstelle zur Korrektur vorgelegt werden. Das entspricht etwa zwei Prozent der gefunden Daten.&lt;/p>
&lt;p>Bei der Analyse der Dubletten ist aufgefallen, dass nach wie vor die historische Vorbelastung der GND durch die Verschmelzung der &lt;a href="https://de.wikipedia.org/wiki/Gemeinsame_K%C3%B6rperschaftsdatei" target="_blank" rel="noopener">Gemeinsamen Körperschaftsdatei&lt;/a> (GKD) mit der &lt;a href="https://de.wikipedia.org/wiki/Schlagwortnormdatei" target="_blank" rel="noopener">Schlagwortnormdatei&lt;/a> (SWD) für einen Großteil der Dubletten verantwortlich war.
Zusätzlich gab es einzelne Datenlieferungen, die ebenfalls für Dubletten geführt haben.&lt;/p>
&lt;p>Beim Identifikationsprozess für Dubletten ist aufgefallen, dass besonders das unterschiedliche Vorgehen bei der &amp;ldquo;Vorzugsbenennung&amp;rdquo; eines Ortes zu den vielen nicht offensichtlichen Dubletten geführt hat. Beispielsweise lässt sich &lt;a href="https://d-nb.info/gnd/4077993-2" target="_blank" rel="noopener">Bad Cannstatt&lt;/a> auch als &lt;em>Stuttgart-Cannstatt&lt;/em> benennen, was weder bei einer alphabetischen Sortierung, noch bei den meisten Standardverfahren zum algorithmischen Abgleich von Dubletten auffällt.&lt;/p>
&lt;p>Insgesamt haben wir vermutlich auch nur einen Teil der Dubletten für Orte in Baden-Württemberg in der GND identifiziert.
Unter anderem fallen alle Orte durch unsere Suchfilter, die Baden-Württemberg nicht als &lt;em>Geographic Area Code&lt;/em> definiert haben und auch keine mit Baden-Württemberg verknüpften Vorgänger oder Nachfolger haben.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Das Bild &amp;ldquo;Doppelte Orte in der GND identifizieren&amp;rdquo; wurde erstellt mit Bildern von &lt;a href="https://pixabay.com/de/users/peggy_marco-1553824/" target="_blank" rel="noopener">Peggy und Marco Lachmann-Anke&lt;/a> und &lt;a href="https://pixabay.com/de/users/geralt-9301/" target="_blank" rel="noopener">Gerd Altmann&lt;/a> auf &lt;a href="https://pixabay.com/" target="_blank" rel="noopener">Pixabay&lt;/a> und dem &lt;a href="https://commons.wikimedia.org/wiki/File:Logo_Gemeinsame_Normdatei_%28GND%29.svg" target="_blank" rel="noopener">&amp;ldquo;Logo Gemeinsame Normdatei (GND)&amp;rdquo;&lt;/a> von &lt;a href="https://www.dnb.de/" target="_blank" rel="noopener">Deutsche Nationalbibliothek (DNB)&lt;/a>, welches lizenziert ist unter einer &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de" target="_blank" rel="noopener">CC BY-SA 4.0&lt;/a> Lizenz. Das Bild &amp;ldquo;Doppelte Orte in der GND identifizieren&amp;rdquo; ist ebenfalls lizenziert unter einer &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de" target="_blank" rel="noopener">CC BY-SA 4.0&lt;/a> Lizenz.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Der für dieses Experiment verwendete Abzug ist &lt;a href="https://data.dnb.de/opendata/authorities_lds_20211013.nt.gz" target="_blank" rel="noopener">authorities_lds_20211013.nt.gz&lt;/a>.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Experimente mit Visualisierungen für Sachbegriffe in der GND</title><link>https://fdmlab.landesarchiv-bw.de/post/2022-05-experiment-mit-gnd-visualisierungen/</link><pubDate>Tue, 24 May 2022 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2022-05-experiment-mit-gnd-visualisierungen/</guid><description>&lt;p>Die &lt;em>Gemeinsame Normdatei&lt;/em> (GND) enthält unter anderem semantische Daten zu Sachbegriffen.
In diesem Beitrag experimentieren wir mit Visualisierungen für &lt;strong>Sachbegriffe&lt;/strong> in der GND, um die Daten und die Ontologie dahinter besser kennen zu lernen.&lt;/p>
&lt;p>Wie im obigen Bild&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup> thematisiert, beinhaltet die als &lt;em>Linked Open Data&lt;/em> (LOD) zur Verfügung gestellte GND einen komplexen Graphen mit verlinkten Daten, deren Verlinkung und Struktur sich auf Grund ihrer Komplexität für Außenstehende nicht auf Anhieb verständlich gestaltet.&lt;/p>
&lt;p>Im Bereich der Sachbegriffe (&lt;a href="https://d-nb.info/standards/elementset/gnd#SubjectHeading" target="_blank" rel="noopener">Subject Heading&lt;/a>) gibt es mehrere Konzepte zur Gruppierung. Es gibt die &lt;a href="https://d-nb.info/standards/vocab/gnd/gnd-sc.html" target="_blank" rel="noopener">GND-Sachgruppen&lt;/a> und verschiedene Arten von Oberbegriffen&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>.&lt;/p>
&lt;div class="alert alert-note">
&lt;div>
Um die Daten und deren Verknüpfungen besser zugänglich zu machen, gibt es auch das am 31. Mai von der DNB als beta freigegebene Projekt &lt;a href="https://explore.gnd.network/" target="_blank" rel="noopener">GND-Explorer&lt;/a>.
&lt;/div>
&lt;/div>
&lt;p>In Kooperation mit Katharina Hardt von dem Projekt &lt;a href="https://landesarchiv-bw.de/de/landesarchiv/projekte/provenienzforschung-im-landesarchiv/provenienzforschung-hauptstaatsarchiv-stuttgart/73186" target="_blank" rel="noopener">Provenienzforschung am Hauptstaatsarchivs Stuttgart&lt;/a> hatten wir im FDMLab ein konkretes Problem, wofür wir eine visuelle Unterstützung benötigten. Dafür haben wir ein &lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/">Experiment zur Visualisierung von GND Sachbegriffen&lt;/a> umgesetzt, über welches wir im Folgenden berichten. &lt;sup id="fnref:3">&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref">3&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="alert alert-warning">
&lt;div>
Es handelt sich bei der &lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/">GND Hierarchie Visualisierung&lt;/a> um ein prototypisch umgesetztes Experiment und &lt;strong>nicht&lt;/strong> um eine produktive Anwendung!
&lt;/div>
&lt;/div>
&lt;h2 id="die-ludwigsburger-porzellantasse">Die Ludwigsburger Porzellantasse&lt;/h2>
&lt;p>Eine Frage, die wir uns im Kontext der Provenienzforschung gestellt hatten, ist die mögliche Verschlagwortung mit Normdatenverknüpfung für den Begriff &lt;em>Ludwigsburger Porzellantasse&lt;/em>.&lt;/p>
&lt;p>Die &lt;em>Ludwigsburger Porzellantasse&lt;/em> gibt es nicht als Sachbegriff in der GND.
Die aus unserer Sicht passenden Begriffe in der GND sind &lt;a href="https://d-nb.info/gnd/4168206-3" target="_blank" rel="noopener">Ludwigsburger Porzellan&lt;/a> und &lt;a href="https://d-nb.info/gnd/4175414-1" target="_blank" rel="noopener">Porzellantasse&lt;/a>.&lt;/p>
&lt;p>Dabei stellten wir uns die folgenden Fragen:&lt;/p>
&lt;ol>
&lt;li>Haben die beiden Begriffe einen gemeinsamen Oberbegriff?&lt;/li>
&lt;li>Gehören die beiden Begriffe zu einer gemeinsamen Sachgruppe?&lt;/li>
&lt;li>Ist &lt;a href="https://d-nb.info/gnd/4046851-3" target="_blank" rel="noopener">Porzellan&lt;/a> ein gemeinsamer Oberbegriff?&lt;/li>
&lt;li>Ist &lt;a href="https://d-nb.info/gnd/4140542-0" target="_blank" rel="noopener">Geschirr&lt;/a> ein Oberbegriff von Porzellantasse?&lt;/li>
&lt;li>Wie verhält sich der Begriff &lt;a href="https://d-nb.info/gnd/4175411-6" target="_blank" rel="noopener">Porzellanfigur&lt;/a> &lt;sup id="fnref:4">&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref">4&lt;/a>&lt;/sup> im Kontext der beiden Begriffe?&lt;/li>
&lt;/ol>
&lt;p>Diese Antworten auf diese Fragen lassen sich im Einzelnen auch via der Weboberflächen von der &lt;a href="https://d-nb.info/gnd/4168206-3" target="_blank" rel="noopener">DNB&lt;/a>, &lt;a href="https://lobid.org/gnd/4168206-3" target="_blank" rel="noopener">lobid&lt;/a>, &lt;a href="https://swb.bsz-bw.de/DB=2.104/PPNSET?PPN=105419311&amp;amp;INDEXSET=21" target="_blank" rel="noopener">OGND&lt;/a> oder in &lt;a href="https://openrefine.org/" target="_blank" rel="noopener">OpenRefine&lt;/a> manuell recherchieren.
Bei mehreren Begriffen, ist dieses Vorgehen jedoch langwierig.&lt;/p>
&lt;p>Daher haben wir basierend auf dem &lt;a href="https://lobid.org/gnd/api" target="_blank" rel="noopener">lobid GND API&lt;/a>, dem &lt;a href="https://getbootstrap.com/" target="_blank" rel="noopener">Frontend-CSS-Framework Bootstrap&lt;/a> und dem &lt;a href="https://mermaid-js.github.io/" target="_blank" rel="noopener">JavaScript Framework Mermaid&lt;/a> prototypisch eine &lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/">Webanwendung zur GND Hierarchie Visualisierung von Sachbegriffen&lt;/a> umgesetzt, die es uns ermöglicht die oben genannten Antworten zu den obigen Fragen zu visualisieren und zu beantworten.&lt;/p>
&lt;p>Das nächste Diagramm zeigt ein bearbeitetes Beispiel zu der Hierarchie der Oberbegriffe von &lt;em>Ludwigsburger Porzellan&lt;/em>, &lt;em>Porzellantasse&lt;/em> und &lt;em>Porzellanfigur&lt;/em>.&lt;/p>
&lt;div class="mermaid">flowchart LR
4175414-1(["Porzellantasse"]):::initial
4184488-9["Tasse"]
4175411-6(["Porzellanfigur"]):::initial
4046277-8["Plastik"]
4046851-3["Porzellan"]
4168206-3(["Ludwigsburger Porzellan"]):::initial
4124863-6["Essgeschirr"]
4186181-4["Trinkgefäß"]
4181363-7["Silicatkeramik"]
4153870-5["Feinkeramik"]
4140542-0["Geschirr"]
4128003-9["Gefäß"]
4030282-9["Keramischer Werkstoff"]
4030271-4["Keramik"]
4132060-8["Hausrat"]
4020299-9["Gerät"]
4065579-9["Werkstoff"]
4169078-3["Material"]
4037940-1["Materie"]
4175414-1-->4184488-9
4175411-6-->4046277-8
4175411-6-->4046851-3
4168206-3-->4046851-3
4184488-9-->4124863-6
4184488-9-->4186181-4
4046851-3-->4181363-7
4046851-3-->4153870-5
4124863-6-->4140542-0
4186181-4-->4128003-9
4181363-7-->4030282-9
4153870-5-->4030271-4
4140542-0-->4132060-8
4128003-9-->4020299-9
4030282-9-->4065579-9
4065579-9-->4169078-3
4169078-3-->4037940-1
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;p>Laut unserem Diagramm ist der Begriff &lt;em>Geschirr&lt;/em> ein Oberbegriff zur &lt;em>Porzellantasse&lt;/em>.
Die &lt;em>Porzellanfigur&lt;/em> und das &lt;em>Ludwigsburger Porzellan&lt;/em> haben &lt;em>Porzellan&lt;/em> als gemeinsamen Oberbegriff, die &lt;em>Porzellantasse&lt;/em> jedoch nicht.
Es gibt keinen gemeinsamen Oberbegriff für alle Begriffe, sie gehören jedoch, zur GND-Sachgruppe &lt;em>Kunsthandwerk&lt;/em> (siehe nächstes Diagramm).&lt;/p>
&lt;div class="mermaid">flowchart LR
4175414-1(["Porzellantasse"]):::initial
cat0[["Kunsthandwerk"]]:::category
4175411-6(["Porzellanfigur"]):::initial
cat1[["Plastik"]]:::category
4168206-3(["Ludwigsburger Porzellan"]):::initial
4175414-1-->cat0
4175411-6-->cat1
4175411-6-->cat0
4168206-3-->cat0
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;h2 id="gemeinsamer-oberbegriff-für-bilder">Gemeinsamer Oberbegriff für Bilder?&lt;/h2>
&lt;p>Bei den GND Sachbegriffen für &lt;a href="https://d-nb.info/gnd/4132048-7" target="_blank" rel="noopener">Acrylbild&lt;/a>, &lt;a href="https://d-nb.info/gnd/4002511-1" target="_blank" rel="noopener">Aquarell&lt;/a>, &lt;a href="https://d-nb.info/gnd/4036042-8" target="_blank" rel="noopener">Lithografie&lt;/a>, &lt;a href="https://d-nb.info/gnd/4043238-5" target="_blank" rel="noopener">Ölgemälde&lt;/a>, &lt;a href="https://d-nb.info/gnd/4048166-9" target="_blank" rel="noopener">Radierung&lt;/a> und &lt;a href="https://d-nb.info/gnd/4075923-4" target="_blank" rel="noopener">Pastellzeichnung&lt;/a> fragten wir uns, ob diese einen gemeinsamen Oberbegriff wie &lt;a href="https://d-nb.info/gnd/4006568-6" target="_blank" rel="noopener">Bild&lt;/a> oder &lt;a href="https://d-nb.info/gnd/4145419-4" target="_blank" rel="noopener">Bildliche Darstellung&lt;/a> haben. &lt;sup id="fnref:5">&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref">5&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="mermaid">flowchart LR
4132048-7(["Acrylbild"]):::initial
4037220-0["Malerei"]
4002511-1(["Aquarell"]):::initial
4036042-8(["Lithografie"]):::initial
4154503-5["Flachdruck"]
4043238-5(["Ölgemälde"]):::initial
4048166-9(["Radierung"]):::initial
4113357-2["Druckgrafik"]
4075923-4(["Pastellzeichnung"]):::initial
4124801-6["Drucktechnik"]
4021845-4["Grafik"]
4021850-8["Graphische Technik"]
4794555-2["Medientechnik"]
4145419-4["Bildliche Darstellung"]
4132048-7-->4037220-0
4002511-1-->4037220-0
4036042-8-->4154503-5
4043238-5-->4037220-0
4048166-9-->4113357-2
4075923-4-->4037220-0
4154503-5-->4124801-6
4113357-2-->4021845-4
4124801-6-->4021850-8
4124801-6-->4794555-2
4021845-4-->4145419-4
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;p>Wie im obigen Diagramm abzulesen, ist das nicht der Fall.
Interessant ist hier, dass die &lt;em>Pastellzeichnung&lt;/em> mit &lt;em>Acrylbild&lt;/em>, &lt;em>Aquarell&lt;/em> und &lt;em>Ölgemälde&lt;/em> als gemeinsamen Oberbegriff in die &lt;em>Malerei&lt;/em> verortet wurde, die &lt;em>Pastellzeichnung&lt;/em> im nächsten Diagramm aber mit der &lt;em>Radierung&lt;/em> und der &lt;em>Lithografie&lt;/em> in die GND-Sachgruppe &lt;em>Zeichnung, Grafik&lt;/em> eingeordnet wird.&lt;/p>
&lt;div class="mermaid">flowchart LR
4132048-7(["Acrylbild"]):::initial
cat0[["Malerei"]]:::category
4002511-1(["Aquarell"]):::initial
4036042-8(["Lithografie"]):::initial
cat1[["Zeichnung, Grafik"]]:::category
cat2[["Papierherstellung, Grafische Technik"]]:::category
4043238-5(["Ölgemälde"]):::initial
4048166-9(["Radierung"]):::initial
4075923-4(["Pastellzeichnung"]):::initial
4132048-7-->cat0
4002511-1-->cat0
4036042-8-->cat1
4036042-8-->cat2
4043238-5-->cat0
4048166-9-->cat1
4075923-4-->cat1
classDef default fill:#FFF,stroke:#0088c9,stroke-width:3px,color:#000;
classDef category fill:#FFF,stroke:#1fbeb8,stroke-width:3px,color:#000;
classDef initial fill:#FFF,stroke:#4dbd05,stroke-width:3px,color:#000;
&lt;/div>
&lt;h2 id="fazit">Fazit&lt;/h2>
&lt;p>Mit wenig Aufwand, auch Dank dem &lt;a href="https://lobid.org/gnd/api" target="_blank" rel="noopener">GND API von lobid&lt;/a>, konnten wir eine Webanwendung umsetzen, mit der wir die Sachbegriffe in der GND besser kennen lernen können.
Die nachträglich bearbeitbaren Visualisierungen helfen uns bei der Projektdokumentation und bei der Kommunikation mit unseren Fachkollegen.&lt;/p>
&lt;ul class="cta-group">
&lt;li>
&lt;a href="https://fdmlab.landesarchiv-bw.de/experiment/gnd-hierarchy-vis/" class="btn btn-primary px-3 py-3">GND Hierarchie Visualisierung selbst ausprobieren&lt;/a>
&lt;/li>
&lt;/ul>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Das Bild &amp;ldquo;GND Sachbegriffe visualisieren&amp;rdquo; wurde erstellt mit Bildern von &lt;a href="https://pixabay.com/de/users/peggy_marco-1553824/" target="_blank" rel="noopener">Peggy und Marco Lachmann-Anke&lt;/a> und &lt;a href="https://pixabay.com/de/users/geralt-9301/" target="_blank" rel="noopener">Gerd Altmann&lt;/a> auf &lt;a href="https://pixabay.com/" target="_blank" rel="noopener">Pixabay&lt;/a> und dem &lt;a href="https://commons.wikimedia.org/wiki/File:Logo_Gemeinsame_Normdatei_%28GND%29.svg" target="_blank" rel="noopener">&amp;ldquo;Logo Gemeinsame Normdatei (GND)&amp;rdquo;&lt;/a> von &lt;a href="https://www.dnb.de/" target="_blank" rel="noopener">Deutsche Nationalbibliothek (DNB)&lt;/a>, welches lizenziert ist unter einer &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de" target="_blank" rel="noopener">CC BY-SA 4.0&lt;/a> Lizenz. Das Bild &amp;ldquo;GND Sachbegriffe visualisieren&amp;rdquo; ist ebenfalls lizenziert unter einer &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de" target="_blank" rel="noopener">CC BY-SA 4.0&lt;/a> Lizenz.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>&lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTerm" target="_blank" rel="noopener">Broader term&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermGeneral" target="_blank" rel="noopener">Broader term (general)&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermGeneric" target="_blank" rel="noopener">Broader term (generic)&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermInstantial" target="_blank" rel="noopener">Broader term (instantial)&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermPartitive" target="_blank" rel="noopener">Broader term (partitive)&lt;/a>, &lt;a href="https://d-nb.info/standards/elementset/gnd#broaderTermWithMoreThanOneElement" target="_blank" rel="noopener">Broader term (with more than one element)&lt;/a>&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:3">
&lt;p>Danke hier auch an die &lt;a href="https://www.leo-bw.de/gnd-agentur" target="_blank" rel="noopener">GND-Agentur LEO-BW-Regional&lt;/a> für ein erstes Feedback!&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:4">
&lt;p>Die Vorzugsbenennung für &lt;em>Porzellan&lt;strong>figur&lt;/strong>&lt;/em> in der GND ist &lt;em>Porzellan&lt;strong>plastik&lt;/strong>&lt;/em>. Wir verwenden hier im Artikel teilweise offiziell in der GND gelistete Synonyme für Sachbegriffe, wenn sie besser in unsere Erzählstruktur passen.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:5">
&lt;p>In der GND ist teilweise die Bildart und teilweise die entsprechende Maltechnik die Vorzugsbenennung.
Also &lt;em>Aquarellmalerei&lt;/em> ist ein Synonym für den Vorzugsbegriff &lt;em>Aquarell&lt;/em> und &lt;em>Ölgemälde&lt;/em> ist ein Synonym für den Vorzugsbegriff &lt;em>Ölmalerei&lt;/em>. Für eine einheitliche Erzählstruktur, haben wir uns daher teilweise für die Verwendung der Synonyme in unserem Text und den Diagrammen entschieden.&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Erfahrungsbericht - Extraktion und Abgleich von Prokuratoren mit OpenRefine</title><link>https://fdmlab.landesarchiv-bw.de/post/2021-09-erfahrungsbericht-extraktion-und-abgleich-von-prokuratoren-mit-openrefine/</link><pubDate>Tue, 21 Sep 2021 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2021-09-erfahrungsbericht-extraktion-und-abgleich-von-prokuratoren-mit-openrefine/</guid><description>&lt;p>In diesem Beitrag beschreiben wir unsere Erfahrungen bei der Textextraktion, der Deduplikation und dem Abgleich mit der GND von Indizes aus zehn Findbüchern.&lt;/p>
&lt;p>Wir haben bisher in Tutorials gezeigt, wie wir einen
&lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/">Findbuch Index mit OpenRefine aufbereiten&lt;/a>
und wie wir diese &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/">Findbuch Daten mit OpenRefine wiederverwenden&lt;/a> können.&lt;/p>
&lt;p>Die dabei gesammelten Erfahrungen haben wir anschließend praktisch angewendet und
die Indizes der Prokuratoren aus den Findbüchern zu den Akten des Reichskammergerichts
in den Staatsarchiven Wertheim und Sigmaringen, sowie die Bände 1 - 8 im Hauptstaatsarchiv Stuttgart mit OpenRefine aufgearbeitet und mit der GND abgeglichen.&lt;/p>
&lt;h2 id="generelle-daten">Generelle Daten&lt;/h2>
&lt;p>&lt;strong>Text&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>10 Bände&lt;/li>
&lt;li>10.339 Textzeilen&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>CSV&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>2.912 Indexeinträge&lt;/li>
&lt;li>Davon 100 Aliase&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Deduplikation&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>472 Prokuratoren&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Abgleich mit GND&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>275 ohne GND Eintrag&lt;/li>
&lt;li>197 mit GND Eintrag (ca. 42 Prozent)&lt;/li>
&lt;/ul>
&lt;h2 id="anwenden-mehrerer-teilschritte">Anwenden mehrerer Teilschritte&lt;/h2>
&lt;div class="mermaid">---
title: Extraktionsprozess
config:
look: handDrawn
theme: neutral
---
flowchart LR
subgraph books[fas:fa-book Bände]
band1[Band 46/1.txt]
bandn[Band 46/...]
band8[Band 46/8.txt]
band9[Band 46/57.txt]
band10[Band 57/Wertheim.txt]
end
subgraph csvs[fas:fa-file-csv CSV]
csv1[CSV Band 46/1.csv]
csvn[CSV Band 46/...]
csv8[CSV Band 46/8.csv]
csv9[CSV Band 57.csv]
csv10[CSV Band 57/Wertheim.csv]
end
db[fas:fa-file-csv Prokuratoren.csv]
gnd[fas:fa-database GND]
result[fas:fa-project-diagram Prokuratoren]
band1 --fas:fa-gem--> csv1 --fas:fa-magic--> db
bandn --fas:fa-gem--> csvn --fas:fa-magic--> db
band8 --fas:fa-gem--> csv8 --fas:fa-magic--> db
band9 --fas:fa-gem--> csv9 --fas:fa-magic--> db
band10 --fas:fa-gem--> csv10 --fas:fa-magic--> db
db &amp; gnd --fas:fa-gem--> result
&lt;/div>
&lt;p>Wir haben uns dazu entschieden, aus jeder Findbuch(text)datei mit OpenRefine eine CSV Datei mit den Informationen zu den Prokuratoren zu extrahieren und die zehn CSV Dateien anschließend zusammenzufassen.&lt;/p>
&lt;div class="mermaid">---
title: Extraktionsprozess
config:
look: handDrawn
theme: neutral
---
flowchart LR
subgraph books[fas:fa-book Bände]
band1[Band 46/1.txt]
bandn[Band 46/...]
band8[Band 46/8.txt]
band9[Band 46/57.txt]
band10[Band 57/Wertheim.txt]
end
txt[fas:fa-file-txt Bände.txt]
db[fas:fa-file-csv Prokuratoren.csv]
gnd[fas:fa-database GND]
result[fas:fa-project-diagram Prokuratoren]
band1 &amp; bandn &amp; band9 &amp; band10 --fas:fa-magic--> txt --fas:fa-gem--> db
db &amp; gnd --fas:fa-gem--> result
&lt;/div>
&lt;p>Es wäre auch denkbar gewesen, die zehn Textdateien in einer Textdatei zusammenzufassen und daraus mit OpenRefine in einem Projekt eine CSV Datei zu erstellen.
Das Layout der einzelnen Findbücher unterschied sich jedoch so, dass wir uns anders entschieden.
Im Nachhinein wäre die Lösung mit einer Textdatei als Grundlage einfacher zu handhaben gewesen,
da wir bei unserem Vorgehen systematische Fehler in allen zehn Projekten nachzukorrigieren hatten.&lt;/p>
&lt;p>Um die einzelnen Operationen zwischen den Projekten besser austauschen zu können, haben wir die groben Schritte, wie zum Beispiel &amp;ldquo;zweispaltiges Layout in einspaltiges Layout umwandeln&amp;rdquo;, als Sammlung von mehreren Operationen in separaten &lt;code>.json&lt;/code> Dateien vorgehalten. Diese haben wir dann über die &amp;ldquo;History&amp;rdquo; Funktion von OpenRefine auf das aktuelle Projekt angewendet.
Darüber haben wir auch schon in &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/">Findbuch Daten mit OpenRefine wiederverwenden&lt;/a> geschrieben.&lt;/p>
&lt;p>So konnten wir iterativ mehrere Operationen gleichzeitig anwenden, das Ergebnis überprüfen
und bei Bedarf die Operationen wieder rückgängig machen, sie anpassen und neu anwenden.
Hierbei wäre es praktisch gewesen, wenn man sich einzelne Versionen in der History von OpenRefine hätte markieren können, um einfacher dorthin zurückspringen zu können.&lt;/p>
&lt;p>Nachdem wir die CSV Dateien zusammengefasst hatten und in einem neuen Projekt die Deduplikation mit OpenRefine begannen, stellten wir fest,
dass es trotz sorgfältiger manueller Prüfung nach wie vor Extraktionsfehler in den Einzelprojekten gab.&lt;/p>
&lt;p>Daher geben wir hier als Tipp weiter, die Projekte und Zwischenschritte automatisch zu validieren.
Dafür kann zum Beispiel in OpenRefine mit Textfiltern und regulären Ausdrücken überprüft werden,
ob es noch Zahlen oder andere unerwartete Zeichen in den Namen gibt, die Jahreszahlen und Verweise richtig formatiert sind, &amp;hellip;&lt;/p>
&lt;h2 id="deduplikation-mit-clusterverfahren">Deduplikation mit Clusterverfahren&lt;/h2>
&lt;p>Zur Deduplikation verwendeten wir die in &lt;a href="https://docs.openrefine.org/manual/cellediting#cluster-and-edit" target="_blank" rel="noopener">OpenRefine integrierten Cluster Verfahren&lt;/a>.
Da wir unterschiedliche Arten von Duplizierungen hatten, verwendeten wir mehrere der angebotenen Verfahren nacheinander, bis wir keine Cluster mehr automatisiert finden konnten.&lt;/p>
&lt;p>Probleme machten hierbei alternative Schreibweisen, die in unseren Findbüchern durch Klammerung kompakt zusammengefasst wurden.
Beispielsweise gab es für &lt;a href="http://d-nb.info/gnd/1019755717" target="_blank" rel="noopener">Re(c)hlinger, Johann&lt;/a>
in den Findbüchern auch die Schreibweise &lt;em>Rehlinger, Johann&lt;/em> und &lt;em>Re&lt;strong>c&lt;/strong>hlinger Johann&lt;/em>.&lt;/p>
&lt;p>Dies konnte durch die Clusterverfahren gut erkannt und zusammengeführt werden.&lt;/p>
&lt;p>Schwieriger wurde es bei der automatischen Zusammenführung von &lt;a href="http://d-nb.info/gnd/104263172" target="_blank" rel="noopener">Brandt, (Johann) Ferdinand Wilhelm von&lt;/a>,
mit &lt;em>Brandt, Ferdinand Wilhelm&lt;/em>, da hier der geklammerte Ausdruck relativ zum Namen recht lang ist.&lt;/p>
&lt;p>Wenn der Anteil des geklammerten Namens zu groß wird, dann finden die verfügbaren automatischen Clustermethoden keine (sinnvolle) Ähnlichkeit mehr.
Dies war beispielsweise bei &lt;a href="http://d-nb.info/gnd/1161753699" target="_blank" rel="noopener">Müller (Mulher), Christoph&lt;/a> und &lt;em>Müller, Christoph&lt;/em> der Fall.&lt;/p>
&lt;h2 id="abgleich-mit-der-gnd">Abgleich mit der GND&lt;/h2>
&lt;p>Der Abgleich der Daten mit der &lt;a href="https://lobid.org/gnd/reconcile" target="_blank" rel="noopener">GND via lobid&lt;/a> nahm die meiste Zeit in Anspruch.
Um die Sortierung der Suchtreffer zu verbessern, haben wir eine zusätzliche Spalte &amp;ldquo;Beruf&amp;rdquo; mit dem Wert &amp;ldquo;Jurist&amp;rdquo; eingefügt und mit der Eigenschaft &lt;a href="https://d-nb.info/standards/elementset/gnd#professionOrOccupation" target="_blank" rel="noopener">professionOrOccupation&lt;/a> abgeglichen.&lt;/p>
&lt;p>Probleme gab es mit den schon erwähnten Namen mit Alternativen in Klammern,
da &lt;a href="https://github.com/hbz/lobid-gnd/issues/287" target="_blank" rel="noopener">geklammerte Ausdrücke Probleme bei der Verarbeitung durch die lobid API&lt;/a> haben.&lt;/p>
&lt;p>Ein wesentlicher Aufwandsfaktor war die fehlende Möglichkeit zur Einschränkung der Lebens- und Wirkungsdaten.
Hier hatte lobid schon auf unseren letzten Blogpost reagiert und das Feature im März 2022 umgesetzt. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;h2 id="fazit">Fazit&lt;/h2>
&lt;p>Die Umwandlung der 10.339 Textzeilen zu 472 Prokuratoren ließ sich mit OpenRefine relativ problemlos bewältigen.
Durch den Abgleich der Prokuratoren über mehrere Findbücher konnten einige OCR-Fehler korrigiert oder alternative Schreibweisen aufgelöst werden.
Die anschließende Zuordnung zu GND-Nummern war hingegen langwierig.&lt;/p>
&lt;p>Mit 472 Juristen, die alle aus der gleichen Berufsgruppe kommen und auch an anderen Orten schriftliche Spuren (Doktorarbeiten, &amp;hellip;) hinterlassen haben,
war dieser Datensatz vergleichsweise einfach aufzuarbeiten.&lt;/p>
&lt;p>In den Findbüchern zu den Akten des Reichskammergerichts gibt es noch einen gemischten Orts- und Personenindex.
Dieser ist etwa 50mal so groß, wie der Index der Prokuratoren,
enthält unterschiedlichste Typen von Einträgen (Adel, Berufe, Familien, Orte, &amp;hellip;),
und enthält vermutlich deutlich weniger Treffer in der GND. &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;p>Hier werden wir gegebenenfalls zusätzliche externe Werkzeuge bemühen,
wie wir es für den Artikel &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-08-ner-mit-openrefine-und-spacy/">Named Entity Recognition mit OpenRefine und spaCy&lt;/a>
getestet haben.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>&lt;strong>Update April 2022&lt;/strong>: Durch ein Update in dem lobid GND API für OpenRefine kann nun eine zeitliche Einschränkung beim Reconciliation vorgenommen werden. Details dazu finden sich unter &lt;a href="https://github.com/hbz/lobid-gnd/issues/304" target="_blank" rel="noopener">Using range query parameter via OpenRefine Reconciliation&lt;/a> auf GitHub und unter &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-fortgeschrittene/15-erweiterter-gnd-abgleich-mit-lobid/">Erweiterter GND Abgleich mit lobid&lt;/a> auf unserem Blog.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Es kostet mehr Aufwand zu überprüfen, wenn etwas nicht da ist, als wenn es sofort ein eindeutiges Ergebnis gibt.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Findbuchdaten mit OpenRefine wiederverwenden</title><link>https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/</link><pubDate>Tue, 24 Aug 2021 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/</guid><description>&lt;p>In diesem Artikel behandeln wir die Frage, wie wir schon aufbereitete Daten mit OpenRefine wiederverwenden können.&lt;/p>
&lt;p>Wir haben schon einen &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/">Findbuch Index mit OpenRefine aufbereitet&lt;/a>.
wenn wir nun den Prokuratoren Index von &amp;ldquo;&lt;em>Band 57: Akten des Reichskammergerichts im Staatsarchiv Sigmaringen - Inventar des Bestands R 7. Bearb. von Raimund J. Weber. Kohlhammer 2004&lt;/em>&amp;rdquo; bearbeiten wollen, dann wäre zu erwarten, dass wir das Projekt nachnutzen können.&lt;/p>
&lt;p>Dies ist bedingt möglich. Zum einen können wir die Operationen aus der letzten Findbuchaufbereitung wiederverwenden.
Zum anderen können wir die Prokuratoren mit den Prokuratoren aus dem letzten Projekt abgleichen.&lt;/p>
&lt;p>Um es vorweg zu nehmen: es hat sich gezeigt, dass wir nur einen Teil der Operationen und Prokuratoren übernehmen können.
Aber gerade bei den Operationen ist das eine ziemliche Zeitersparnis.&lt;/p>
&lt;blockquote>
&lt;p>💾 Wir benötigen drei Dateien (Rechtsklick und &amp;ldquo;Ziel speichern unter&amp;hellip;&amp;rdquo;):&lt;/p>
&lt;/blockquote>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/rkg-57/akten-rkg-band-57-prokuratoren.txt" target="_blank">
&lt;i class="fas fa-file-alt pr-1 fa-fw">&lt;/i>Index Prokuratoren Akten RKG Band 57&lt;/a>
&lt;blockquote>
&lt;/blockquote>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/rkg-57/akten-rkg-band-57-openrefine-prokuratoren.json" target="_blank">
&lt;i class="fas fa-file-archive pr-1 fa-fw">&lt;/i>Index Prokuratoren Akten RKG Band 57 als OpenRefine Arbeitsschritte&lt;/a>
&lt;blockquote>
&lt;/blockquote>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/rkg-57/akten-rkg-band-57-wertheim-prokuratoren.csv" target="_blank">
&lt;i class="fas fa-file-csv pr-1 fa-fw">&lt;/i>Prokuratoren Akten RKG Band 57 - Wertheim als CSV&lt;/a>
&lt;p>Wir möchten explizit dazu einladen diese Dateien zu nutzen, um die einzelnen Schritte in OpenRefine selbst auszuprobieren und damit zu experimentieren.&lt;/p>
&lt;h2 id="operationen-übertragen">Operationen übertragen&lt;/h2>
&lt;p>Mit OpenRefine ist es möglich, die durchgeführten Operationen eines Projektes zu exportieren und in einem anderen Projekt zu importieren.
Beschrieben ist das im &lt;a href="https://docs.openrefine.org/manual/running#reusing-operations" target="_blank" rel="noopener">OpenRefine Manual&lt;/a>.&lt;/p>
&lt;p>Zuerst erstellen wir das Projekt in OpenRefine mit der Datei &lt;code>akten-rkg-band-57-prokuratoren.txt&lt;/code> als Grundlage.
Die Einstellungen sind in Abbildung 1 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-ansicht-zum-erstellen-neuer-projekte-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der Ansicht zum Erstellen neuer Projekte in OpenRefine." srcset="
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-create-project_huffa3598330b71b2bc1ce4a2c5104db49_82035_a379f7001843141103fbf5d108508dcc.webp 400w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-create-project_huffa3598330b71b2bc1ce4a2c5104db49_82035_98558c818e5edd40a414a8f0f169fb3d.webp 760w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-create-project_huffa3598330b71b2bc1ce4a2c5104db49_82035_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-create-project_huffa3598330b71b2bc1ce4a2c5104db49_82035_a379f7001843141103fbf5d108508dcc.webp"
width="760"
height="335"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der Ansicht zum Erstellen neuer Projekte in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Mit der Schaltfläche &amp;ldquo;Extract&amp;hellip;&amp;rdquo; bei &amp;ldquo;Undo/Redo&amp;rdquo; (siehe Abbildung 2) können wir die Operationen aus einem Projekt exportieren und mit der Schaltfläche &amp;ldquo;Apply..&amp;rdquo; anwenden.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-schaltfläche-zum-anwenden-von-exportieren-operationen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der Schaltfläche zum Anwenden von exportieren Operationen in OpenRefine." srcset="
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-apply-history_hu97e08a0ed45663f2db56bc6d326fe481_11384_b26bc7192540f6fb481f61bd203cc177.webp 400w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-apply-history_hu97e08a0ed45663f2db56bc6d326fe481_11384_fb0e24d71b56a427a414088450873dde.webp 760w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-apply-history_hu97e08a0ed45663f2db56bc6d326fe481_11384_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-apply-history_hu97e08a0ed45663f2db56bc6d326fe481_11384_b26bc7192540f6fb481f61bd203cc177.webp"
width="404"
height="124"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der Schaltfläche zum Anwenden von exportieren Operationen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Nach Klicken der Schaltfläche &amp;ldquo;Apply..&amp;rdquo; können wir die exportierten Operationen aus &lt;code>akten-rkg-band-57-openrefine-prokuratoren.json&lt;/code> wie in Abbildung 3 gezeigt einfügen und mit &amp;ldquo;Perform Operations&amp;rdquo; die Operationen auf dem aktuellen Projekt anwenden.&lt;/p>
&lt;figure id="figure-dialog-zum-anwenden-von-exportieren-operationen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Anwenden von exportieren Operationen in OpenRefine." srcset="
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-dialog-history_hufea20d8a60dc05561e0381ca4d811726_30143_4372b6b75c032c3ab06937c00f8f67e0.webp 400w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-dialog-history_hufea20d8a60dc05561e0381ca4d811726_30143_8fa74f20ca26e887000648417dff0f7b.webp 760w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-dialog-history_hufea20d8a60dc05561e0381ca4d811726_30143_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-dialog-history_hufea20d8a60dc05561e0381ca4d811726_30143_4372b6b75c032c3ab06937c00f8f67e0.webp"
width="760"
height="572"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Anwenden von exportieren Operationen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Bei unserem ersten Versuch haben wir festgestellt, dass die Operationen von unserem &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/">letzten Artikel&lt;/a> nicht direkt auf diesen Index anwendbar sind.
Beim Anwenden von Operationen aus einem anderen Projekt sind einige Dinge zu beachten.&lt;/p>
&lt;ol>
&lt;li>Die &lt;code>.json&lt;/code> Datei sollte mit einem Quelltexteditor wie (unter Windows) der Editor App, &lt;a href="https://notepad-plus-plus.org/" target="_blank" rel="noopener">Notepad++&lt;/a> oder &lt;a href="https://code.visualstudio.com/" target="_blank" rel="noopener">Visual Studio Code&lt;/a> geöffnet (und bearbeitet) werden.&lt;/li>
&lt;li>Die Spaltennamen in den beiden Projekten müssen die gleichen Namen haben.&lt;/li>
&lt;li>Manuelle Editieroperationen und Filteroperationen werden nicht mit übertragen.&lt;/li>
&lt;/ol>
&lt;p>In unserem konkreten Fall gab es zusätzlich die folgenden Probleme&lt;/p>
&lt;ul>
&lt;li>Die Extraktion der Seitenzahlen funktioniert nicht, da die Kopfzeilen sich unterscheiden.&lt;/li>
&lt;li>Das zweispaltige Layout hat statt 4 einen Minimalabstand von 3 Leerzeichen.&lt;/li>
&lt;li>Es gibt Zeilenumbrüche bei dem Namen der Prokuratoren und bei den Verweisen.&lt;/li>
&lt;li>Die Anpassungen für das &amp;ldquo;reconciling&amp;rdquo; lassen sich nicht übertragen.&lt;/li>
&lt;/ul>
&lt;p>In der Datei &lt;code>akten-rkg-band-57-openrefine-prokuratoren.json&lt;/code> haben wir die Operationen entsprechend bereinigt und angepasst, so dass sie direkt angewendet werden können. In Abbildung 4 ist das Ergebnis der Anwendung zu sehen.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-daten-nach-der-anwendung-der-operationen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der Daten nach der Anwendung der Operationen in OpenRefine." srcset="
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-view-after-history_hub588ecfdf40463365e3d01a1e0691329_166566_6814b68d0eb6f679068063d0552ada2f.webp 400w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-view-after-history_hub588ecfdf40463365e3d01a1e0691329_166566_3a263ad6ace05aa5eea1c05c25d690aa.webp 760w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-view-after-history_hub588ecfdf40463365e3d01a1e0691329_166566_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-view-after-history_hub588ecfdf40463365e3d01a1e0691329_166566_6814b68d0eb6f679068063d0552ada2f.webp"
width="760"
height="369"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der Daten nach der Anwendung der Operationen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Bei &amp;ldquo;Albrecht von Lauterbach&amp;rdquo; ist eine andere Formatierung verwendet worden, die wir manuell nachkorrigiert haben.
Dafür sind wir in der &amp;ldquo;History&amp;rdquo; der Operationen zurück zu Schritt 33 gegangen.
Dann haben wir die fehlerhaften Einträge manuell via &amp;ldquo;inline editing&amp;rdquo; korrigiert.
Anschließend haben wir die (ehemaligen) Operationen 34 und 35 erneut via &amp;ldquo;Apply&amp;hellip;&amp;rdquo; angewendet.
Die (ehemaligen) Operationen 34 und 35 haben wir hier direkt zum Kopieren in den Artikel eingefügt:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;op&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;core/column-addition&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;engineConfig&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;facets&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;mode&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;row-based&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;baseColumnName&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Nachname&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;expression&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;join ([coalesce(cells[&amp;#39;Nachname&amp;#39;].value,&amp;#39;&amp;#39;),coalesce(cells[&amp;#39;Vorname&amp;#39;].value,&amp;#39;&amp;#39;)],&amp;#39;, &amp;#39;)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;onError&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;keep-original&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;newColumnName&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;columnInsertIndex&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Create column Name at index 1 based on column Nachname using expression join ([coalesce(cells[&amp;#39;Nachname&amp;#39;].value,&amp;#39;&amp;#39;),coalesce(cells[&amp;#39;Vorname&amp;#39;].value,&amp;#39;&amp;#39;)],&amp;#39;, &amp;#39;)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;op&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;core/column-move&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;columnName&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;index&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Move column Name to position 0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="zwischenfazit">Zwischenfazit&lt;/h3>
&lt;p>Die Übertragung von Verkettungen von Operationen, wie zum Beispiel das Auflösen eines zweispaltigen Layouts, ist praktisch und spart dem versierten Benutzer einiges an Zeit. Durch die automatisch generierten Beschreibungstexte für die Operationen ist es jedoch nicht leicht, die entsprechenden Blöcke von Operationen auch zu identifizieren.&lt;/p>
&lt;h2 id="abgleich-mit-lokaler-csv-datei">Abgleich mit lokaler CSV Datei&lt;/h2>
&lt;p>Mit der Datei &lt;code>akten-rkg-band-57-wertheim-prokuratoren.csv&lt;/code> besitzen wir eine (kleine) lokale Datenbank mit bereits aufbereiteten Prokuratoren.
Diese können wir zum Abgleich mit unseren aufbereiteten Daten in OpenRefine verwenden.
Dafür gibt es Werkzeuge, die eine CSV Datei als &amp;ldquo;Reconciliation Service&amp;rdquo; zur Verfügung stellen.&lt;/p>
&lt;h3 id="abgleich-mit-reconcile-csv-clojure">Abgleich mit reconcile-csv (Clojure)&lt;/h3>
&lt;p>Das Projekt &lt;a href="http://okfnlabs.org/reconcile-csv/" target="_blank" rel="noopener">reconcile-csv&lt;/a> basiert auf &lt;a href="https://clojure.org/" target="_blank" rel="noopener">Clojure&lt;/a> und lässt sich daher direkt mit der gleichen Java Version ausführen, mit der wir auch OpenRefine verwenden.
Dafür erstellen wir im Ordner mit der &lt;code>openrefine.exe&lt;/code> einen Ordner &lt;code>services&lt;/code> und kopieren die heruntergeladene &lt;code>reconcile-csv-0.1.2.jar&lt;/code> hinein.&lt;/p>
&lt;p>In dem Ordner öffnen wir anschließend eine PowerShell und führen mit der Java Version von OpenRefine die &lt;code>.jar&lt;/code> Datei aus.
Das CSV Reconciliation Service benötigt drei Parameter:&lt;/p>
&lt;ol>
&lt;li>Der Pfad zu der CSV Datei.&lt;/li>
&lt;li>Der Name der Spalte mit der abgeglichen werden soll.&lt;/li>
&lt;li>Der Name der Spalte mit einem eindeutigen Wert (ID) für jede Zeile. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="p">.\&lt;/span>&lt;span class="n">server&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">target&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">jre&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">java&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">exe&lt;/span> &lt;span class="n">-jar&lt;/span> &lt;span class="p">.\&lt;/span>&lt;span class="n">services&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="nb">reconcile-csv&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">0.1&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">jar&lt;/span> &lt;span class="p">.\&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="nb">akten-rkg&lt;/span>&lt;span class="o">-band&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">57&lt;/span>&lt;span class="n">-wertheim-prokuratoren&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">csv&lt;/span> &lt;span class="n">Name&lt;/span> &lt;span class="n">Nr&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Mit &amp;ldquo;Name&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Reconcile&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Start reconciling&amp;rdquo; können wir auf der Spalte Name den &amp;ldquo;Reconciliation&amp;rdquo; Vorgang starten und dort die Adresse &lt;code>http://localhost:8000/reconcile&lt;/code> als &amp;ldquo;Reconciliation Service&amp;rdquo; hinzufügen.&lt;/p>
&lt;p>Wie in Abbildung 5 gezeigt, gibt es für die einzelnen Ergebnisvorschläge auch eine Vorschau Funktion, in der die Inhalte der Tabellenzeile zum besseren Abgleich angezeigt werden.&lt;/p>
&lt;figure id="figure-bildschirmfoto-vom-abgleich-mit-reconcile-csv-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto vom Abgleich mit &amp;#39;reconcile-csv&amp;#39; in OpenRefine." srcset="
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-reconcile-dialog_hu34d6fa633cf59b7f58586ffcb0989db1_81588_5dabc4222d5b07f8bd9ce3745efb82f9.webp 400w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-reconcile-dialog_hu34d6fa633cf59b7f58586ffcb0989db1_81588_9bb9395b3167fcab6b0f8776402bed8c.webp 760w,
/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-reconcile-dialog_hu34d6fa633cf59b7f58586ffcb0989db1_81588_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-08-findbuch-daten-mit-openrefine-wiederverwenden/openrefine-reconcile-dialog_hu34d6fa633cf59b7f58586ffcb0989db1_81588_5dabc4222d5b07f8bd9ce3745efb82f9.webp"
width="760"
height="334"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto vom Abgleich mit &amp;lsquo;reconcile-csv&amp;rsquo; in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Wir konnten mit dem lokalen Abgleich 28 Prokuratoren aus unserer Liste finden.&lt;/p>
&lt;p>An dieser Stelle würden wir gerne weitere Daten aus der CSV Datei laden, wie es von dem von &lt;a href="https://docs.openrefine.org/manual/reconciling#fetching-more-data" target="_blank" rel="noopener">OpenRefine unterstützen Data Extension API&lt;/a> angeboten wird.
Leider wird diese Funktionalität in diesem Service nicht unterstützt.
Da das Projekt Stand August 2021 seit 2015 nicht mehr weiterentwickelt wurde, ist damit auch nicht zu rechnen.&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;h3 id="abgleich-mit-csv-reconcile-python">Abgleich mit csv-reconcile (Python)&lt;/h3>
&lt;p>Ein neueres Projekt zum Abgleich mit lokalen CSV Dateien ist &lt;a href="https://github.com/gitonthescene/csv-reconcile" target="_blank" rel="noopener">csv-reconcile&lt;/a>, welches auf &lt;a href="https://www.python.org/" target="_blank" rel="noopener">Python&lt;/a> basiert und sich aktiv in der Entwicklung befindet.&lt;/p>
&lt;p>Wie wir schon im Artikel &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-08-ner-mit-openrefine-und-spacy/">Named Entity Recognition mit OpenRefine und spaCy&lt;/a> festgestellt haben, ist die Verwendung von Python Frameworks mit OpenRefine aufwendiger, da wir dafür zusätzlich eine aktuelle Python Installation benötigen.&lt;/p>
&lt;p>Haben wir lokal Python installiert, dann können wir mit PowerShell im gleichen &lt;code>services&lt;/code> Ordner wie im letzten Abschnitt
eine virtuelle Python Umgebung anlegen (1),
diese virtuelle Umgebung aktivieren (2),
das Paket &lt;code>csv-reconcile&lt;/code> mit pip installieren (3),
und den &amp;ldquo;CSV Reconciliation Service&amp;rdquo; starten (4).&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">python&lt;/span> &lt;span class="n">-m&lt;/span> &lt;span class="n">venv&lt;/span> &lt;span class="n">venv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.\&lt;/span>&lt;span class="n">venv&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">Scripts&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">activate&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pip&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="nb">csv-reconcile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">csv-reconcile&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-init-db&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-config&lt;/span> &lt;span class="n">config&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">py&lt;/span> &lt;span class="p">..\&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="nb">akten-rkg&lt;/span>&lt;span class="o">-band&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">57&lt;/span>&lt;span class="n">-wertheim-prokuratoren&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">csv&lt;/span> &lt;span class="n">Nr&lt;/span> &lt;span class="n">Name&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Leider konnte unsere CSV Datei auf Grund ihres Formates und Kodierung nicht auf Anhieb richtig geladen werden, so dass wir zusätzlich eine Konfigurationsdatei &lt;code>config.py&lt;/code> mit dem folgenden Inhalt im Ordner &lt;code>services&lt;/code> hinterlegt haben.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">CSVKWARGS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;delimiter&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;,&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;quotechar&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;&amp;#34;&amp;#39;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">CSVENCODING&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;UTF-8&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Der &amp;ldquo;CSV Reconciliation Service&amp;rdquo; ist anschließend unter &lt;code>http://localhost:5000/reconcile&lt;/code> erreichbar.&lt;/p>
&lt;p>Das Python Projekt ist deutlich flexibler und ausführlicher zu konfigurieren, als das ältere Clojure Projekt.
Es unterstützt auch die &amp;ldquo;Data Extension API&amp;rdquo;, so dass wir nach dem Abgleich weitere Spalten aus der CSV Datei nachladen können.
&lt;del>Leider fehlt noch eine Vorschau, so dass kein visueller Abgleich zum Beispiel mit den Wirkdaten der Prokuratoren möglich ist.&lt;/del>
Ab &lt;a href="https://github.com/gitonthescene/csv-reconcile/releases/tag/v0.3.0" target="_blank" rel="noopener">Version 0.3.0&lt;/a> gibt es eine optionale Vorschau Funktion.&lt;/p>
&lt;h2 id="abgleich-mit-der-gnd">Abgleich mit der GND&lt;/h2>
&lt;p>Nachdem wir etwa 10 Prozent der Prokuratoren mit unseren lokalen Daten abgleichen konnten, können wir nun den Rest direkt mit der Gemeinsamen Normdatei (GND) abgleichen.
Darauf sind wir in &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/">Findbuch Index mit OpenRefine aufbereiten&lt;/a> genauer eingegangen und werden das daher hier nicht weiter vertiefen.&lt;/p>
&lt;h2 id="fazit">Fazit&lt;/h2>
&lt;div class="mermaid">---
title: Prozess
config:
look: handDrawn
theme: neutral
---
flowchart LR
text[fas:fa-file-alt Text]
code[fas:fa-code Code]
index[fas:fa-file-csv Index]
data[fas:fa-table Table]
partially[fas:fa-tasks Parts]
gnd[fas:fa-database GND]
semantic[fas:fa-project-diagram Graph]
text --> data --> partially --> semantic
code --> data
index --> partially
gnd --> semantic
&lt;/div>
&lt;p>Die Möglichkeit &lt;code>json&lt;/code> Schnippsel mit Verkettungen von Operationen für komplexe Aufgaben zu importieren gefällt uns, und wir werden diese Methode gegebenenfalls öfter verwenden.&lt;/p>
&lt;p>Für den komfortablen Abgleich mit einer lokalen CSV Datei fehlte den beiden getesteten Bibliotheken noch Funktionalität.&lt;/p>
&lt;p>Das auf Clojure basierende reconcile-csv lässt sich ohne großen Mehraufwand verwenden und bietet eine hilfreiche Vorschau Funktion.
Ohne eine Unterstützung der &amp;ldquo;Data Extension API&amp;rdquo; ist es für unsere Anwendungsfälle aber nur beschränkt nutzbar.&lt;/p>
&lt;p>Das auf Python basierende csv-reconcile benötigt eine lokale Python Installation und bietet noch keine Vorschau Funktion, ohne die sich der Datenabgleich teilweise mühsam gestaltet.&lt;/p>
&lt;p>Die Möglichkeit eigene Datenbanken in Form von CSV Dateien zu nutzen, oder wie im Falle der Indizes zu den Akten des Reichskammergerichts schrittweise aufzubauen, ist jedoch vorhanden und hat das Potential von großer Arbeitserleichterung.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Da wir bei der Bearbeitung des Prokuratoren Index der Akten in Wertheim nicht alle Prokuratoren mit einer GND-ID verknüpfen konnten,
haben wir den Daten eine Spalte Nr mit der &amp;ldquo;GREL expression&amp;rdquo; &lt;code>row.index + 1&lt;/code> hinzugefügt.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Eine Möglichkeit das &amp;ldquo;Data Extension Problem&amp;rdquo; zu umgehen, ist aus den abgeglichenen Daten eine neue Spalte mit der &amp;ldquo;GREL expression&amp;rdquo; &lt;code>cell.recon.match.id&lt;/code> zu erzeugen und die beiden Dateien anschließend mit einem anderen Werkzeug zusammenzuführen. Eine weitere Möglichkeit besteht darin, die andere CSV Datei in OpenRefine als Projekt zu laden und den Abgleich mit der Funktion &lt;a href="https://docs.openrefine.org/manual/grelfunctions#crosscell-s-projectname-s-columnname" target="_blank" rel="noopener">cross&lt;/a> durchzuführen.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Findbuch Index mit OpenRefine aufbereiten</title><link>https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/</link><pubDate>Tue, 27 Jul 2021 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/</guid><description>&lt;p>In diesem Tutorial arbeiten wir mit OpenRefine und der Gemeinsamen Normdatei (GND) den Prokuratoren Index eines Findbuchs zu Akten des Reichskammergerichts auf.&lt;/p>
&lt;p>Wir haben bereits beschrieben, wie wir die &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuecher-mit-openrefine-in-datenbank-uebernehmen/">Einträge eines Findbuchs mit OpenRefine für den Datenbankimport aufbereiten&lt;/a>.
In diesem Beitrag geht es um die Aufarbeitung eines Indices von Findbüchern.
Wir beginnen mit dem Index der Prokuratoren.
Andere Indices folgen gegebenenfalls in weiteren Artikeln.&lt;/p>
&lt;h2 id="generelles-vorgehen">Generelles Vorgehen&lt;/h2>
&lt;p>Zur Übersichtlichkeit verwenden wir wieder das Findbuch &amp;ldquo;&lt;em>Akten des Reichskammergerichts im Staatsarchiv Wertheim - Inventar des Bestands R J 10&lt;/em>&amp;rdquo; aus dem Anhang von &amp;ldquo;&lt;em>Band 57: Akten des Reichskammergerichts im Staatsarchiv Sigmaringen - Inventar des Bestands R 7. Bearb. von Raimund J. Weber. Kohlhammer 2004&lt;/em>&amp;rdquo; mit 20 verzeichneten Archivalien.&lt;/p>
&lt;p>Die Findbücher zu den Akten des Reichskammergerichts enthalten verschiedene Indices.
Wir behandeln in diesem Tutorial den Index der Prokuratoren.&lt;/p>
&lt;figure id="figure-erste-seite-des-index-der-prokuratoren-im-findbuch-zu-bestand-r-j-10">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Erste Seite des Index der Prokuratoren im Findbuch zu Bestand R J 10." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/akten-rkg-band-57-wertheim-prokuratoren_hu597bc5995f23edb684e3f54eb4fc75ac_48878_65e2d36b450100349ac92bbb15a17fad.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/akten-rkg-band-57-wertheim-prokuratoren_hu597bc5995f23edb684e3f54eb4fc75ac_48878_5b1a2859b02cf3bae777fdfe54e40e26.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/akten-rkg-band-57-wertheim-prokuratoren_hu597bc5995f23edb684e3f54eb4fc75ac_48878_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/akten-rkg-band-57-wertheim-prokuratoren_hu597bc5995f23edb684e3f54eb4fc75ac_48878_65e2d36b450100349ac92bbb15a17fad.webp"
width="491"
height="760"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Erste Seite des Index der Prokuratoren im Findbuch zu Bestand R J 10.
&lt;/figcaption>&lt;/figure>
&lt;p>Wie in Abbildung 1 zu sehen, handelt es sich bei dem Index um ein mehrspaltiges Layout, was das Einlesen in OpenRefine verkompliziert.
Zu den einzelnen Prokuratoren finden wir eine Zuordnung von Jahren auf die Findbuchnummer(n) der verzeichneten Archivalie(n).&lt;/p>
&lt;p>Zur Aufarbeitung des Index gehen wir wie folgt vor:&lt;/p>
&lt;ol>
&lt;li>Index aus Findbuch extrahieren&lt;/li>
&lt;li>Spalten zusammenführen&lt;/li>
&lt;li>Informationen zu Prokuratoren zusammenführen&lt;/li>
&lt;li>Abgleich mit der Gemeinsamen Normdatei (GND)&lt;/li>
&lt;li>Umwandlung in internes Deskriptorenformat&lt;/li>
&lt;/ol>
&lt;p>Dabei werden wir die einzelnen Schritte in OpenRefine nicht so detailliert beschrieben,
wie in unserem &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuecher-mit-openrefine-in-datenbank-uebernehmen/">letzten Tutorial&lt;/a>.
Bei Bedarf, können Details zu einzelnen Schritten dort noch einmal nachgelesen werden.&lt;/p>
&lt;h2 id="1-index-aus-findbuch-extrahieren">1. Index aus Findbuch extrahieren&lt;/h2>
&lt;p>Auch bei den Indices empfiehlt es sich schon diverse Vorarbeiten im Text selbst durchzuführen.&lt;/p>
&lt;blockquote>
&lt;p>💾 Wir stellen die aufgeräumte Datei zur Verfügung (Rechtsklick und &amp;ldquo;Ziel speichern unter&amp;hellip;&amp;rdquo;):&lt;/p>
&lt;/blockquote>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/rkg-57/akten-rkg-band-57-wertheim-prokuratoren.txt" target="_blank">
&lt;i class="fas fa-file-alt pr-1 fa-fw">&lt;/i>Index Prokuratoren Akten RKG Band 57 - Wertheim&lt;/a>
.
&lt;p>Wir möchten explizit dazu einladen diese Datei zu nutzen, um die einzelnen Schritte in OpenRefine selbst auszuprobieren und damit zu experimentieren.&lt;/p>
&lt;h2 id="2-spalten-zusammenführen">2. Spalten zusammenführen&lt;/h2>
&lt;p>Wie in unserem &lt;a href="%28/post/2021-07-findbuecher-mit-openrefine-in-datenbank-uebernehmen/%29">letzten Tutorial&lt;/a> erstellen wir mit OpenRefine ein neues Projekt mit &amp;ldquo;Create Project&amp;rdquo; und laden die heruntergeladene Datei als Text.&lt;/p>
&lt;p>Um das zweispaltige Layout in ein einspaltiges Layout zu überführen, gehen wir wie in Abbildung 2 schematisch dargestellt vor:&lt;/p>
&lt;ol>
&lt;li>Die Spalte &amp;ldquo;Column 1&amp;rdquo; benennen wir in Original um.&lt;/li>
&lt;li>Wir erstellen &amp;ldquo;records&amp;rdquo; aus den einzelnen Seiten.&lt;/li>
&lt;li>Wir trennen die Spalten zeilenweise auf.&lt;/li>
&lt;li>Wir fassen die &amp;ldquo;records&amp;rdquo; in einer Zeile zusammen.&lt;/li>
&lt;li>Wir fügen die Spalten wieder zusammen.&lt;/li>
&lt;li>Wir trennen die einzelnen Zeilen wieder auf.&lt;/li>
&lt;/ol>
&lt;figure id="figure-strategie-zur-zusammenführung-der-zwei-spalten-in-mehreren-schritten">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Strategie zur Zusammenführung der zwei Spalten in mehreren Schritten." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/spalten-strategie_huac24e46954a78881c0c12bf53bbc59f8_128861_b0ab3ae4678151f8adfbd700719ae521.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/spalten-strategie_huac24e46954a78881c0c12bf53bbc59f8_128861_8ee95a4ca4c044075125a283d62d3ae2.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/spalten-strategie_huac24e46954a78881c0c12bf53bbc59f8_128861_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/spalten-strategie_huac24e46954a78881c0c12bf53bbc59f8_128861_b0ab3ae4678151f8adfbd700719ae521.webp"
width="760"
height="698"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Strategie zur Zusammenführung der zwei Spalten in mehreren Schritten.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="1-spalte-in-original-umbennen">1 Spalte in Original umbennen&lt;/h3>
&lt;p>Die Umbenennung der Spalte Column 1 in Original funktioniert über &amp;ldquo;Column 1&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit column&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Rename this column&amp;rdquo;.&lt;/p>
&lt;p>Der geladene Datensatz sieht ansclhießend wie in Abbildung 3 aus.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-geladenen-daten-ohne-bearbeitung-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der geladenen Daten ohne Bearbeitung in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-original_hu2ba9a6aa0a914fbc6b8a73a50f93f70b_45924_6c4a32aeb7c334f22b91c1fcf1f42b9a.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-original_hu2ba9a6aa0a914fbc6b8a73a50f93f70b_45924_de0729515253ae4be322eb4ed4792921.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-original_hu2ba9a6aa0a914fbc6b8a73a50f93f70b_45924_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-original_hu2ba9a6aa0a914fbc6b8a73a50f93f70b_45924_6c4a32aeb7c334f22b91c1fcf1f42b9a.webp"
width="417"
height="623"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der geladenen Daten ohne Bearbeitung in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="2-seiten-als-records">2 Seiten als records&lt;/h3>
&lt;p>Um die einzelnen Seiten als &amp;ldquo;records&amp;rdquo; zu markieren, erstellen wir eine neue Spalte Seite via
&amp;ldquo;Original&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit column&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Add column based on this column&amp;hellip;&amp;rdquo;
und verwenden die folgende &amp;ldquo;expression&amp;rdquo; um die Seitennummer auszulesen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/.(\d+)\s+Anhang/&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Die Seite 519 tragen wir bei der Indexüberschrift &amp;ldquo;4. Prokuratoren&amp;rdquo; von Hand ein.
Die leeren Zeilen löschen wir über das &amp;ldquo;Blank row Facet&amp;rdquo;, das wir über &amp;ldquo;All&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Facet&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Facet by blank (null or empty string)&amp;rdquo; aktivieren.&lt;/p>
&lt;p>Die Spalte Seite verschieben wir anschließend an die erste Position, um pro Seite ein &amp;ldquo;record&amp;rdquo; zu haben.
Die nach Seiten organisierten &amp;ldquo;records&amp;rdquo; sehen anschließend wie in Abbildung 4 aus.&lt;/p>
&lt;figure id="figure-bildschirmfoto-von-seiten-als-records-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto von Seiten als &amp;#39;records&amp;#39; in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-page_huae02a450bdafa3ae6103af45075ec205_47396_a0e501f0defa4c3b63fa4ef57baafdf9.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-page_huae02a450bdafa3ae6103af45075ec205_47396_f4d30a2c3d656941e59915e614587b54.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-page_huae02a450bdafa3ae6103af45075ec205_47396_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-page_huae02a450bdafa3ae6103af45075ec205_47396_a0e501f0defa4c3b63fa4ef57baafdf9.webp"
width="485"
height="626"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto von Seiten als &amp;lsquo;records&amp;rsquo; in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="3-spalten-zeilenweise-auftrennen">3 Spalten zeilenweise auftrennen&lt;/h3>
&lt;p>Um die Spalten aufzuteilen, gibt es wie in Abbildung 5 gezeigt mehrere Möglichkeiten.
Es ist möglich ein Trennzeichen anzugeben, einen regulären Ausdruck zum Trennen zu verwenden, oder eine feste Spaltenbreite zu definieren.&lt;/p>
&lt;figure id="figure-dialog-zum-aufteilen-von-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Aufteilen von Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-columns_huc8717d9a9e80e4438e3151322f96bd62_16428_56099391c518f4ce8d97477bc0e48391.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-columns_huc8717d9a9e80e4438e3151322f96bd62_16428_a73d8e04cd2f9402b81e8bdc964c54f3.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-columns_huc8717d9a9e80e4438e3151322f96bd62_16428_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-columns_huc8717d9a9e80e4438e3151322f96bd62_16428_56099391c518f4ce8d97477bc0e48391.webp"
width="602"
height="320"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Aufteilen von Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Bei diesem Findbuch funktioniert die Auftrennung nach einer festen Spaltenbreite nicht, da zum Beispiel die linke Spalte auf Seite 519 größer ist als die linke Spalte auf Seite 520.
Also trennen wir an einer Folge von vier oder mehr Leerzeichen auf &lt;code>\s{4,}&lt;/code>.
Das hat den Nachteil, dass wir die Einrückungen in der zweiten Spalte verlieren.
Dies stört uns bei diesem Index nicht.&lt;/p>
&lt;p>Das Ergebnis ist in Abbildung 6 gezeigt.
Anschließend können wir mit &amp;ldquo;All&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Trim leading and trailing whitespace&amp;rdquo; alle unnötigen Leerzeichen in den Spalten entfernen.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-aufgeteilten-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der aufgeteilten Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-columns-separated_hu94e444ee27a95ea2c3b9fb9bbc095f17_48267_09d0753ef4861260c093db9e5ddc5513.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-columns-separated_hu94e444ee27a95ea2c3b9fb9bbc095f17_48267_64d5fbb0a824c839fdaac5d2597662f2.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-columns-separated_hu94e444ee27a95ea2c3b9fb9bbc095f17_48267_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-columns-separated_hu94e444ee27a95ea2c3b9fb9bbc095f17_48267_09d0753ef4861260c093db9e5ddc5513.webp"
width="486"
height="622"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der aufgeteilten Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="4-records-in-einer-zeile-zusammenfassen">4 Records in einer Zeile zusammenfassen&lt;/h3>
&lt;p>Um die Zeilen pro &amp;ldquo;record&amp;rdquo; zusammenzufassen, verwenden wir &amp;ldquo;Original 1&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit Cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Join multi-valued cells&amp;hellip;&amp;rdquo; mit der Trennsequzent &lt;code>-:::-&lt;/code> und verfahren bei Spalte Original 2 ebenso.
Das Ergebnis ist in Abbildung 7 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-zusammengeführen-zeilen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der zusammengeführen Zeilen in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-rows_hue6af434e59adde981e531e3241be8714_37739_b13f5ce68eceddf748a276ad7ffc55a2.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-rows_hue6af434e59adde981e531e3241be8714_37739_aec968ad586e71d4b98229f933159e7d.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-rows_hue6af434e59adde981e531e3241be8714_37739_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-rows_hue6af434e59adde981e531e3241be8714_37739_b13f5ce68eceddf748a276ad7ffc55a2.webp"
width="760"
height="90"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der zusammengeführen Zeilen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="5-spalten-zusammenführen">5 Spalten zusammenführen&lt;/h3>
&lt;p>Die Spalten Original 1 und 2 werden über &amp;ldquo;Original 1&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit column&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Join columns&amp;hellip;&amp;rdquo; wieder in der Spalte Original zusammengeführt.
Die Einstellungen sind in Abbildung 8 abgebildet.&lt;/p>
&lt;figure id="figure-dialog-zum-zusammenführen-der-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Zusammenführen der Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-join-columns_hueaf9c441b3f82f5fb28bfb42466915b2_23310_d29e3bf56b195ba43e412deec5f7f2d1.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-join-columns_hueaf9c441b3f82f5fb28bfb42466915b2_23310_e03b2e749eff89a53ef193a801bcca97.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-join-columns_hueaf9c441b3f82f5fb28bfb42466915b2_23310_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-join-columns_hueaf9c441b3f82f5fb28bfb42466915b2_23310_d29e3bf56b195ba43e412deec5f7f2d1.webp"
width="760"
height="436"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Zusammenführen der Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Das Ergebnis ist in Abbildung 9 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-zusammengeführten-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der zusammengeführten Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-columns_hue77fcfc52bdf2921ba6d7c053e933957_36587_1001698c14e2e14fada1b5b3c271f4b6.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-columns_hue77fcfc52bdf2921ba6d7c053e933957_36587_50c3b83504ad23b774cd54e7d7f03bd0.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-columns_hue77fcfc52bdf2921ba6d7c053e933957_36587_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-combine-columns_hue77fcfc52bdf2921ba6d7c053e933957_36587_1001698c14e2e14fada1b5b3c271f4b6.webp"
width="760"
height="91"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der zusammengeführten Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h3 id="6-zeilen-auftrennen">6 Zeilen auftrennen&lt;/h3>
&lt;p>Um die einzelnen Zeilen wieder aufzutrennen, verwenden wir &amp;ldquo;Original&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit Cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Split multi-valued cells&amp;hellip;&amp;rdquo; mit der Trennsequenz &lt;code>-:::-&lt;/code>, wie im Dialog in Abbildung 10 abgebildet.&lt;/p>
&lt;figure id="figure-dialog-zum-auftrennen-der-zeilen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Auftrennen der Zeilen in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-rows_hufacaa21fef3d1c9115f4f306f0dce00d_16327_572a5f30105cee4a0447a486521408d1.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-rows_hufacaa21fef3d1c9115f4f306f0dce00d_16327_833623c8faed1a45a74b834d3ed65749.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-rows_hufacaa21fef3d1c9115f4f306f0dce00d_16327_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-rows_hufacaa21fef3d1c9115f4f306f0dce00d_16327_572a5f30105cee4a0447a486521408d1.webp"
width="603"
height="387"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Auftrennen der Zeilen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Das Ergebnis ist in Abbildung 11 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-aufgetrennten-zeilen-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der aufgetrennten Zeilen in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-split-rows_hu8c6958d10e75822edc14971c48ff1f9b_34445_524485a2c51fbcfcfc5fd9d7fd9e8a40.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-split-rows_hu8c6958d10e75822edc14971c48ff1f9b_34445_6c30b673755eb4143cb36dd9b7467139.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-split-rows_hu8c6958d10e75822edc14971c48ff1f9b_34445_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-split-rows_hu8c6958d10e75822edc14971c48ff1f9b_34445_524485a2c51fbcfcfc5fd9d7fd9e8a40.webp"
width="328"
height="624"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der aufgetrennten Zeilen in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Anschließend können wir alle Zeilen mit Seitennummern entfernen und die Spalte Seite löschen.
Dafür ein &amp;ldquo;Text Facet&amp;rdquo; auf der Spalte Seite erstellen und die entsprechenden Zeilen auswählen und löschen.&lt;/p>
&lt;h2 id="3-informationen-zu-prokuratoren-zusammenführen">3. Informationen zu Prokuratoren zusammenführen&lt;/h2>
&lt;p>Wir haben in den vorangegangenen Schritten das zweispaltige Layout in ein einspaltiges Layout überführt und wollen nun für jeden Prokurator ein &amp;ldquo;record&amp;rdquo; erzeugen.
Dafür trennen wir die Zeilen in einzelne Spalten für Name, (Wirkungs-)Jahre und Verweise auf.
Anschließend transformieren wir die einzelnen Spalten, um zum Beispiel die Jahre und Verweise zusammenzufassen.&lt;/p>
&lt;h3 id="informationen-auftrennen">Informationen auftrennen&lt;/h3>
&lt;h4 id="spalte-name">Spalte Name&lt;/h4>
&lt;p>Wir erzeugen von der Spalte Original aus eine neue Spalte Name mit einer &amp;ldquo;expression&amp;rdquo;.
Dafür suchen wir mit dem regulären Ausdruck &lt;code>[A-Z].+&lt;/code> nach Zeilen, die mit einem Großbuchstaben beginnen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/([A-Z].+)/&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="spalte-jahre">Spalte Jahre&lt;/h4>
&lt;p>Wir erzeugen von der Spalte Original aus eine neue Spalte Jahre mit einer &amp;ldquo;expression&amp;rdquo;.
Dafür suchen wir mit dem regulären Ausdruck &lt;code>(\d{4}):.+&lt;/code> nach Zeilen, die mit vier Zahlen gefolgt von einem Doppelpunkt beginnen.
Davon extrahieren wir die vier Zahlen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/(\d{4}):.+/&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="spalte-verweise">Spalte Verweise&lt;/h4>
&lt;p>Wir erzeugen von der Spalte Original aus eine neue Spalte Verweise mit einer &amp;ldquo;expression&amp;rdquo;.
Dafür suchen wir mit dem regulären Ausdruck &lt;code>\d{4}:(.+)&lt;/code> nach Zeilen, die mit vier Zahlen gefolgt von einem Doppelpunkt beginnen.
Davon extrahieren wir alles nach dem Doppelpunkt.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/\d{4}:(.+)/&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="spalten-umformatieren">Spalten umformatieren&lt;/h3>
&lt;p>Die Spalte Original benötigen wir nicht mehr und können sie löschen.
Wir verschieben anschließend die Spalte Name an den Anfang, da sie die &amp;ldquo;records&amp;rdquo; definiert.&lt;/p>
&lt;p>Das Ergebnis ist in Abbildung 12 gezeigt.
Anschließend formatieren wir die einzelnen Spalten.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-extrahierten-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der extrahierten Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-extracted_huf24f13b4eaa5b1b44d55a59148a18e6d_42704_e8c9f8d35d276175f17893548835d6f2.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-extracted_huf24f13b4eaa5b1b44d55a59148a18e6d_42704_01db1bb85ab1b6387ea6edd89738a44b.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-extracted_huf24f13b4eaa5b1b44d55a59148a18e6d_42704_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-extracted_huf24f13b4eaa5b1b44d55a59148a18e6d_42704_e8c9f8d35d276175f17893548835d6f2.webp"
width="410"
height="623"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der extrahierten Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h4 id="spalte-jahre-1">Spalte Jahre&lt;/h4>
&lt;p>Die Jahre im Beispiel &lt;code>1797, 1767, 1770, 1801&lt;/code> wollen wir als Zeitraum im Format &lt;code>1767 - 1801&lt;/code> zusammenfassen.
Dafür führen wir die Zeilen der Spalte Jahre via &amp;ldquo;Jahre&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit Cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Join multi-valued cells&amp;hellip;&amp;rdquo; mit der Trennsequenz &lt;code>,\s+&lt;/code> zusammen.&lt;/p>
&lt;p>Die Spalte Jahre transfomieren wir anschließend via &amp;ldquo;Jahre&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Transform&amp;hellip;&amp;rdquo;.
Dafür bestimmen wir das Minimum und das Maximum in der Liste der Zahlen.
Leider gibt es in GREL keine Funktion, die das auf einer Liste (technisch &lt;a href="https://docs.openrefine.org/manual/grelfunctions#array-functions" target="_blank" rel="noopener">Array&lt;/a>) für uns übernehmen kann. Daher gehen wir wie folgt vor:&lt;/p>
&lt;ol>
&lt;li>Wir erzeugen eine Liste &lt;code>years&lt;/code>, indem wir mit &lt;code>split()&lt;/code> an der Sequenz &lt;code>,\s+&lt;/code> trennen.&lt;/li>
&lt;li>Die einzelnen Jahre &lt;code>year&lt;/code> wandeln wir in einer &lt;code>forEach&lt;/code> Schleife mit &lt;code>toNumber()&lt;/code> in Zahlen um, da sie sonst &amp;ldquo;fehlerhaft&amp;rdquo; sortiert werden (&lt;code>&amp;quot;1, 10, 11, 2, 20, ...&amp;quot;&lt;/code>).&lt;/li>
&lt;li>Wir sortieren die Liste &lt;code>years&lt;/code> mit &lt;code>sort()&lt;/code>.&lt;/li>
&lt;li>Hat die Liste &lt;code>years&lt;/code> nur ein Jahr, dann wandeln wir es mit &lt;code>toString()&lt;/code> in Text um.&lt;/li>
&lt;li>Hat die Liste &lt;code>years&lt;/code> mehrere Elemente, nehmen wir das erste (Minimum) und das letzte Element (Maximum). Durch die Verbindung über &lt;code>-&lt;/code> wird automatisch ein Text erzeugt.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">with&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">forEach&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/,\s+/&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">year&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">year&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">toNumber&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">sort&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">years&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">years&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">years&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">toString&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">years&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34; - &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">years&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="spalte-verweise-1">Spalte Verweise&lt;/h4>
&lt;p>Die Verweise führen wir ebenfalls via &amp;ldquo;Verweise&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit Cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Join multi-valued cells&amp;hellip;&amp;rdquo; mit der Trennsequenz &lt;code>,\s+&lt;/code> zusammen.&lt;/p>
&lt;p>Die Spalte Verweise transfomieren wir anschließend via &amp;ldquo;Verweise&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Transform&amp;hellip;&amp;rdquo;.
Bei den Verweisen haben wir mehrere Probleme:&lt;/p>
&lt;ol>
&lt;li>Teilweise werden sie als Bereiche &lt;code>8-10&lt;/code> angegeben, die wir in &lt;code>8, 9, 10&lt;/code> überführen wollen.&lt;/li>
&lt;li>Es werden zwei verschiedene Bindestriche verwendet, die optisch gleich aussehen.&lt;/li>
&lt;li>Wir können Duplikate bei den Verweisen haben.&lt;/li>
&lt;li>Die Reihenfolge kann durcheinander sein.&lt;/li>
&lt;/ol>
&lt;p>Die &amp;ldquo;expression&amp;rdquo; um diese Probleme zu behandeln, ist daher komplex.
Hier eine Erklärung des Vorgehens:&lt;/p>
&lt;ol>
&lt;li>Wir trennen die Verweise mit dem regulären Ausdruck &lt;code>,\s+&lt;/code> in eine Liste (technisch Array).&lt;/li>
&lt;li>Jeden der Verweise &lt;code>v&lt;/code> in der Liste trennen wir anschließend mit dem regulären Ausdruck &lt;code>–|\-&lt;/code> (unterschiedliche Bindestriche) und nennen das Ergebnis &lt;code>v2&lt;/code>.&lt;/li>
&lt;li>Wenn der Verweis &lt;code>v2&lt;/code> mehrere Elemente hat (es also ein Bereich mit Bindestrich war), dann erzeugen wir mit &lt;a href="https://docs.openrefine.org/manual/grel#forrangen-from-n-to-n-step-v-e" target="_blank" rel="noopener">forRange&lt;/a> eine Zahlenliste über diesem Bereich, und verbinden die Zahlen mit &lt;code>join(&amp;quot;,&amp;quot;)&lt;/code> zu einem Text.&lt;/li>
&lt;li>Jetzt haben die Bereiche und die einzelnen Verweise das gleiche Format. Also verbinden wir sie ebenfalls mit &lt;code>join(&amp;quot;,&amp;quot;)&lt;/code>.&lt;/li>
&lt;li>Den verbundenen Text trennen wir anschließend wieder mit &lt;code>,&lt;/code> in eine Liste mit einzelnen Verweisen und wandeln die einzelnen Verweise &lt;code>v&lt;/code> mit &lt;code>toNumber()&lt;/code> in Zahlen um.&lt;/li>
&lt;li>Da wir nun eine Liste mit Zahlen haben, können wir mit &lt;code>uniques()&lt;/code> die doppelten Verweise entfernen und sie mit &lt;code>sort()&lt;/code> sortieren.&lt;/li>
&lt;li>Die bereinigte Liste wandeln wir mit &lt;code>join(&amp;quot;, &amp;quot;)&lt;/code> anschließend wieder in einen Text um.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">forEach&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">forEach&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">trim&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/,\s+/&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">with&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/–|\-/&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v2&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">forRange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">v2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">toNumber&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="nx">v2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">toNumber&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">i&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;,&amp;#34;&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;,&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/,/&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">toNumber&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nx">uniques&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nx">sort&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nx">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;, &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="spalte-name-1">Spalte Name&lt;/h4>
&lt;p>Diese Spalte bearbeiten wir als letzte, da wir ansonsten die &amp;ldquo;record&amp;rdquo; Struktur verloren hätten.
Die &amp;ldquo;record&amp;rdquo; Struktur haben wir in den vorherigen Schritten benötigt, um die Jahre und Verweise in einer Zeile zusammenzufassen.&lt;/p>
&lt;p>Wir wollen die Spalte Name in Vorname, Nachname und Titel trennen.
Das erleichtert uns das Überführen in andere Formate zum Beispiel für den Abgleich mit der GND oder das Umwandeln in ein Deskriptorenformat.
Dafür trennen wir die Spalte Name via &amp;ldquo;Name&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit Cells&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Split into several columns&amp;hellip;&amp;rdquo; in drei Spalten am Trennzeichen &lt;code>,&lt;/code> auf und lassen sie auch gleich entfernen.
Die entsprechenden Einstellungen sind in Abbildung 13 gezeigt.&lt;/p>
&lt;figure id="figure-dialog-zum-aufsplitten-von-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Aufsplitten von Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-column-name_hu894663371f90b460a688eefaf20992fa_15393_a6180ff96d4f3374acfdc708b3abc96e.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-column-name_hu894663371f90b460a688eefaf20992fa_15393_d3017a1ee830c862c8bab71926fc3b92.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-column-name_hu894663371f90b460a688eefaf20992fa_15393_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-split-column-name_hu894663371f90b460a688eefaf20992fa_15393_a6180ff96d4f3374acfdc708b3abc96e.webp"
width="593"
height="317"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Aufsplitten von Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Die Daten sind nun sauber aufgetrennt und können zur weiteren Verarbeitung verwendet werden.
Das Ergebnis ist in Abbildung 14 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-aufgeräumten-spalten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der aufgeräumten Spalten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-cleaned_hu463aff085d4174e8170a431698eacc5c_83868_4ff6b55f5b5ba19b5d9bfd1f305bb17a.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-cleaned_hu463aff085d4174e8170a431698eacc5c_83868_f8a707d7346a0e0e0f872a9ae41b7d2f.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-cleaned_hu463aff085d4174e8170a431698eacc5c_83868_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-cleaned_hu463aff085d4174e8170a431698eacc5c_83868_4ff6b55f5b5ba19b5d9bfd1f305bb17a.webp"
width="433"
height="760"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der aufgeräumten Spalten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h2 id="4-abgleich-mit-der-gemeinsamen-normdatei">4. Abgleich mit der Gemeinsamen Normdatei&lt;/h2>
&lt;div class="mermaid">---
title: Abgleich mit GND
config:
look: handDrawn
theme: neutral
---
flowchart LR
text[fas:fa-file-alt Text]
data[fas:fa-table Table]
gnd[fas:fa-database GND]
semantic[fas:fa-project-diagram Graph]
text --> data --> semantic
gnd --> semantic
&lt;/div>
&lt;p>Als Bonus gleichen wir die Prokuratoren mit der Gemeinsamen Normdatei (GND) ab.
Der Vorgang wird in OpenRefine &lt;a href="https://docs.openrefine.org/manual/reconciling" target="_blank" rel="noopener">Reconciling&lt;/a> genannt.
Dafür verwenden wir den &lt;a href="https://lobid.org/gnd/reconcile" target="_blank" rel="noopener">GND Reconciliation Service von lobid&lt;/a>.
Die Verwendung ist in einem &lt;a href="https://blog.lobid.org/2018/08/27/openrefine.html" target="_blank" rel="noopener">lobid Blogeintrag&lt;/a> ausführlich erklärt.&lt;/p>
&lt;p>Bei uns hat sich das folgende Vorgehen bewährt.&lt;/p>
&lt;p>Zuerst erzeugen wir via &amp;ldquo;Nachname&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit column&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Join columns&amp;hellip;&amp;rdquo; eine neue Spalte Name, wo wir die Namensstruktur &amp;ldquo;Nachname, Vorname&amp;rdquo; der GND übernehmen. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>
Anschließend können wir via &amp;ldquo;Name&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Reconcile&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Start reconciling&amp;rdquo; den Vorgang starten.&lt;/p>
&lt;p>Falls noch nicht geschehen, den &amp;ldquo;lobid gnd service&amp;rdquo; via &amp;ldquo;Add Standard Service&amp;hellip;&amp;rdquo; mit der URL &lt;code>https://lobid.org/gnd/reconcile&lt;/code> hinzufügen und auswählen.&lt;/p>
&lt;p>Die entsprechenden Einstellungen für den Abgleichvorgang sind in Abbildung 15 abgebildet.
Wir fügen den Titel als separate Spalte hinzu, da wir dadurch bessere Ergebnisse erzielen konnten.
Leider können wir die (Wirkungs-)Jahre nicht berücksichtigen, da es keine kleiner/größer Operation für den &amp;ldquo;Reconciliation Service&amp;rdquo; gibt.&lt;/p>
&lt;figure id="figure-dialog-zum-abgleich-der-daten-mit-dem-lobid-gnd-service">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Abgleich der Daten mit dem &amp;#39;lobid gnd service&amp;#39;." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-reconciling_hu65f1cead5469c2f390a184a0aa06890a_31389_6fe0942761dbfe137f3afb91b3b90f91.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-reconciling_hu65f1cead5469c2f390a184a0aa06890a_31389_52b33c06393eb5fcc169f76fb4bcee6f.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-reconciling_hu65f1cead5469c2f390a184a0aa06890a_31389_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-reconciling_hu65f1cead5469c2f390a184a0aa06890a_31389_6fe0942761dbfe137f3afb91b3b90f91.webp"
width="760"
height="508"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Abgleich der Daten mit dem &amp;rsquo;lobid gnd service'.
&lt;/figcaption>&lt;/figure>
&lt;div class="alert alert-warning">
&lt;div>
Beim &amp;ldquo;reconciling&amp;rdquo; werden die Inhalte der ausgewählten Spalten an einen Webservice übertragen!
Sollte das nicht gewünscht sein, ist es auch möglich einen &lt;a href="https://docs.openrefine.org/manual/reconciling#sources" target="_blank" rel="noopener">lokalen &amp;ldquo;reconciliation services&amp;rdquo; einzurichten&lt;/a>.
&lt;/div>
&lt;/div>
&lt;p>Das Ergebnis ist in Abbildung 16 gezeigt.
Jetzt können mit einer Mischung aus Heuristik (zum Beispiel alle Treffer mit Übereinstimmung von mehr als 95 % automatisch übernehmen) und manueller Prüfung die einzelnen Personen verknüpft werden.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-abzugleichenden-daten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der abzugleichenden Daten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling_hu793d3893f9916509064db87505e42eac_60998_2d92aa2f705b1d471c46593b3451f1cb.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling_hu793d3893f9916509064db87505e42eac_60998_906788d58e206443d83af025a5b42261.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling_hu793d3893f9916509064db87505e42eac_60998_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling_hu793d3893f9916509064db87505e42eac_60998_2d92aa2f705b1d471c46593b3451f1cb.webp"
width="760"
height="674"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der abzugleichenden Daten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;p>Anschließend wollen wir die GND-ID als zusätzliche Spalte in unserem Datensatz haben.
Das funktioniert über &amp;ldquo;Name&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Edit columns&amp;quot;
&lt;i class="fas fa-caret-right pr-1 fa-fw">&lt;/i>&amp;quot;Add columns from reconciled values&amp;hellip;&amp;rdquo;, wo wir die GND-ID wie in dem in Abbildung 17 dargestellten Dialog auswählen können.&lt;/p>
&lt;figure id="figure-dialog-zum-auswählen-zusätzlicher-spalten-von-abgeglichenen-daten">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Dialog zum Auswählen zusätzlicher Spalten von abgeglichenen Daten." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-add-reconciled-values_hud22c0c49ded872e458cd53d27161c8bc_42820_d83127f15f475b64d5e1f8fbf97918bf.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-add-reconciled-values_hud22c0c49ded872e458cd53d27161c8bc_42820_338758e2eb8cc7252e2400a01c6ffc57.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-add-reconciled-values_hud22c0c49ded872e458cd53d27161c8bc_42820_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-dialog-add-reconciled-values_hud22c0c49ded872e458cd53d27161c8bc_42820_d83127f15f475b64d5e1f8fbf97918bf.webp"
width="760"
height="562"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Dialog zum Auswählen zusätzlicher Spalten von abgeglichenen Daten.
&lt;/figcaption>&lt;/figure>
&lt;p>Wir konnten 18 der 37 Prokuratoren aus unserem Datensatz in der GND identifizieren und verknüpfen.
Das Ergebnis ist in Abbildung 18 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-abgeglichenen-daten-in-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der abgeglichenen Daten in OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling-finished_hu69702fd179a6954bc1dbe11caa8f1ddd_84094_fe3a14533460e500c4e185162eede35b.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling-finished_hu69702fd179a6954bc1dbe11caa8f1ddd_84094_7576ed1a9417270918eb1447b1e3f13d.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling-finished_hu69702fd179a6954bc1dbe11caa8f1ddd_84094_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-reconciling-finished_hu69702fd179a6954bc1dbe11caa8f1ddd_84094_fe3a14533460e500c4e185162eede35b.webp"
width="760"
height="527"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der abgeglichenen Daten in OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;h2 id="5-umwandlung-in-deskriptorenformat">5. Umwandlung in Deskriptorenformat&lt;/h2>
&lt;p>Aus den einzelnen Datenbestandteilen können wir nun einen Deskriptor für unser AFIS zusammensetzen.
Dafür gehen wir zu einer beliebigen Spalte, um von dort aus mit einer &amp;ldquo;expression&amp;rdquo; eine neue Spalte Deskriptor im Format &lt;code>Nachname, Vorname Titel; Prokurator am Reichskammergericht {Wirkungsjahre} | {Optionale GND-ID}&lt;/code> zu erzeugen. &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Nachname&amp;#34;&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">trim&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;, &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Vorname&amp;#34;&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">trim&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34; &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Titel&amp;#34;&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">trim&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;; Prokurator am Reichskammergericht &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Jahre&amp;#34;&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">trim&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">+&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">isNonBlank&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;GND-Nummer&amp;#34;&lt;/span>&lt;span class="p">]),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34; | &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">cells&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;GND-Nummer&amp;#34;&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Das Endergebnis ist in Abbildung 19 gezeigt.&lt;/p>
&lt;figure id="figure-bildschirmfoto-der-umgewandelten-und-abgeglichenen-daten-mit-openrefine">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bildschirmfoto der umgewandelten und abgeglichenen Daten mit OpenRefine." srcset="
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-finished_hu29bcaf6f7a4df5698297eae91e3ec768_92027_5450e0a3e5e5dbca8bc688f9c2d566d4.webp 400w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-finished_hu29bcaf6f7a4df5698297eae91e3ec768_92027_de83b705a2b7158d2ffab4062fb2ed45.webp 760w,
/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-finished_hu29bcaf6f7a4df5698297eae91e3ec768_92027_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-07-findbuch-index-mit-openrefine-aufbereiten/openrefine-view-finished_hu29bcaf6f7a4df5698297eae91e3ec768_92027_5450e0a3e5e5dbca8bc688f9c2d566d4.webp"
width="760"
height="452"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Bildschirmfoto der umgewandelten und abgeglichenen Daten mit OpenRefine.
&lt;/figcaption>&lt;/figure>
&lt;blockquote>
&lt;p>💾 Die einzelnen Arbeitsschritte im OpenRefine Format:&lt;/p>
&lt;/blockquote>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/rkg-57/akten-rkg-band-57-wertheim-openrefine-prokuratoren.json" target="_blank">
&lt;i class="fas fa-file-archive pr-1 fa-fw">&lt;/i>Index Prokuratoren Akten RKG Band 57 - Wertheim als OpenRefine Arbeitsschritte&lt;/a>
.
&lt;h2 id="fazit">Fazit&lt;/h2>
&lt;p>Wir haben mit OpenRefine den Prokuratoren Index eines Findbuchs zu Akten des Reichskammergerichts aus einem zweispaltigen Layout in ein einspaltiges Layout überführt, den Datensatz aufbereitet und die einzelnen Prokuratoren mit der GND abgeglichen.&lt;/p>
&lt;p>Die Operationen zum Aufräumen der Daten (Jahre und Verweise) waren diesmal komplex, lassen sich jedoch auf ähnliche Probleme übertragen.&lt;/p>
&lt;p>Es bleibt die Erkenntnis, dass der Abgleich von Personen mit dem &amp;ldquo;Reconciliation Service&amp;rdquo; von lobid deutlich komfortabler wäre, wenn es möglich wäre eine zeitliche Einschränkung der Lebens- und Wirkungsdaten vorzunehmen. &lt;sup id="fnref:3">&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref">3&lt;/a>&lt;/sup>&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Die Zuordnung der Daten erfolgt über den &amp;ldquo;Reconciliation Service&amp;rdquo;. Manche verwenden Verfahren, bei denen eine Übereinstimmung im Format relevant ist und zu besseren Ergebnissen führt. Andere verwenden Verfahren, bei denen die Reihenfolge der Suchbegriffe komplett ignoriert wird.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Uns ist gegen Ende aufgefallen, dass wir noch überflüssige Leerzeichen in den einzelnen Spalten haben. Anstatt sie im Deskriptor mit &lt;code>trim()&lt;/code> zu entfernen, wäre es sinnvoller gewesen sie vorher mit &amp;ldquo;All&amp;quot;
&lt;i class="far fa-caret-square-down pr-1 fa-fw">&lt;/i>&amp;quot;Trim leading and trailing whitespace&amp;rdquo; zu entfernen.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:3">
&lt;p>&lt;strong>Update April 2022&lt;/strong>: Durch ein Update in dem lobid GND API für OpenRefine kann nun eine zeitliche Einschränkung beim Reconciliation vorgenommen werden. Details dazu finden sich unter &lt;a href="https://github.com/hbz/lobid-gnd/issues/304" target="_blank" rel="noopener">Using range query parameter via OpenRefine Reconciliation&lt;/a> auf GitHub und unter &lt;a href="https://fdmlab.landesarchiv-bw.de/workshop/openrefine-fortgeschrittene/15-erweiterter-gnd-abgleich-mit-lobid/">Erweiterter GND Abgleich mit lobid&lt;/a> auf unserem Blog.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Erste Experimente mit der GND</title><link>https://fdmlab.landesarchiv-bw.de/post/2021-06-erste-experimente-mit-der-gnd/</link><pubDate>Tue, 29 Jun 2021 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2021-06-erste-experimente-mit-der-gnd/</guid><description>&lt;p>Die &lt;em>Gemeinsame Normdatei&lt;/em> (GND) enthält unter anderem semantische Daten zu Personen und Orten.
In diesem Beitrag verwenden wir &lt;em>SPARQL&lt;/em> um die Daten und die Ontologie dahinter besser kennen zu lernen.&lt;/p>
&lt;p>Wir versuchen mit der GND die folgende Frage zu beantworten:&lt;/p>
&lt;blockquote>
&lt;p>Welche Berufe gab es Nürnberg im 17. Jahrhundert.&lt;/p>
&lt;/blockquote>
&lt;p>Zur Beantwortung dieser Frage verwenden wir &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/">unseren lokalen Apache Jena Server&lt;/a>.
Die SPARQL-Anfragen können entweder in der Web GUI von Apache Jena ausgeführt werden, oder mit einer der vielen SPARQL-Clients&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>.&lt;/p>
&lt;h2 id="lade-beispielperson">Lade Beispielperson&lt;/h2>
&lt;p>In der &lt;a href="https://d-nb.info/standards/elementset/gnd" target="_blank" rel="noopener">GND Ontology&lt;/a> sind einige Beispiel &lt;em>Entities&lt;/em> genannt.
Wir laden hier das Beispiel für eine &lt;em>Individualisierte Person&lt;/em> der &lt;em>GND ID&lt;/em> &lt;code>118514091&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">118514091&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>p&lt;/th>
&lt;th>o&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="http://www.w3.org/1999/02/22-rdf-syntax-ns#type" target="_blank" rel="noopener">http://www.w3.org/1999/02/22-rdf-syntax-ns#type&lt;/a>&lt;/td>
&lt;td>gndo:DifferentiatedPerson&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="http://www.w3.org/2002/07/owl#sameAs" target="_blank" rel="noopener">http://www.w3.org/2002/07/owl#sameAs&lt;/a>&lt;/td>
&lt;td>&lt;a href="http://www.wikidata.org/entity/Q5383" target="_blank" rel="noopener">http://www.wikidata.org/entity/Q5383&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:gndIdentifier&lt;/td>
&lt;td>118514091&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:preferredNameForThePerson&lt;/td>
&lt;td>Bowie, David&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:biographicalOrHistoricalInformation&lt;/td>
&lt;td>spielt zahlreiche Instrumente&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:homepage&lt;/td>
&lt;td>&lt;a href="http://www.davidbowie.com" target="_blank" rel="noopener">http://www.davidbowie.com&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:placeOfBirth&lt;/td>
&lt;td>gnd:4074335-4&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:placeOfDeath&lt;/td>
&lt;td>gnd:4042011-5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:dateOfBirth&lt;/td>
&lt;td>1947-01-08&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:dateOfDeath&lt;/td>
&lt;td>2016-01-10&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:4040841-3&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:4032009-1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:4052154-0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:4124099-6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:4167564-2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gndo:professionOrOccupation&lt;/td>
&lt;td>gnd:7628944-8&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&amp;hellip;&lt;/td>
&lt;td>&amp;hellip;&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Die Anzahl der Trippel wurde aus Darstellungsgründen gekürzt.
Bei der Person handelt es sich um &lt;em>David Bowie&lt;/em>.
Wir erhalten unter anderem weitere Verweise auf andere Graphen mit Informationen über &lt;em>David Bowie&lt;/em>, persönliche Daten über ihn, sowie eine Liste in der &lt;em>GND&lt;/em> definierter &lt;em>Berufe&lt;/em> und &lt;em>Tätigkeiten&lt;/em>, die er ausgeübt hat.&lt;/p>
&lt;h2 id="berufe-und-tätigkeiten-von-david-bowie">Berufe und Tätigkeiten von David Bowie&lt;/h2>
&lt;p>Als Nächstes suchen wir die Berufe und Tätigkeiten von &lt;em>David Bowie&lt;/em> und berücksichtigen dabei auch alternativen Schreibweisen und Bezeichnungen der Berufe.
Dafür verwenden wir die Verbindung &lt;a href="https://d-nb.info/standards/elementset/gnd#professionOrOccupation" target="_blank" rel="noopener">professionOrOccupation&lt;/a>.
Alternativ gibt es die Verbindung &lt;a href="https://d-nb.info/standards/elementset/gnd#professionOrOccupationAsLiteral" target="_blank" rel="noopener">professionOrOccupationAsLiteral&lt;/a>, die in unseren Tests aber einige fehlerhaft geparste Daten beinhaltete (Zahlen, Buchstaben, &amp;hellip;) oder Zusatzinformationen lieferte (z.B. Zeitraum in der eine Tätigkeit ausgeübt wurde).
Der Beruf ist in der &lt;em>GND&lt;/em> als &lt;a href="https://d-nb.info/standards/elementset/gnd#SubjectHeading" target="_blank" rel="noopener">Schlagwort&lt;/a> (engl. &lt;em>subject heading&lt;/em>) hinterlegt.
Daher holen wir uns für das Schlagwort die bevorzugte Bezeichnung und alternative Bezeichnungen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?job&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">118514091&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">professionOrOccupation&lt;/span> &lt;span class="nv">?jobId&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?jobId&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Musiker, Musikschaffender, Komponist, Tonsetzer, Schauspieler, Darsteller (Schauspieler), Sänger, Konzertsänger, Librettist, Textdichter (Librettist), Bandleader, ld&lt;/p>
&lt;/blockquote>
&lt;p>Zur Übersichtlichkeit haben wir an dieser Stelle eine Listendarstellung für die Ergebnisse gewählt.&lt;/p>
&lt;h2 id="berufe-und-tätigkeiten-in-nürnberg-fixiert">Berufe und Tätigkeiten in Nürnberg (fixiert)&lt;/h2>
&lt;p>Nachdem wir herausgefunden haben, wie wir die Berufe und Tätigkeiten einer Person aus der GND auslesen können,
verknüpfen wir diese Information mit einem Ort. Konkret mit dem Ort Nürnberg, welches die &lt;em>GND ID&lt;/em> &lt;code>4042742-0&lt;/code> hat.
Hierfür suchen wir zuerst nach Personen, die über eine Auswahl von Eigenschaften (z.B. Geburtsort) mit Nürnberg verknüpft sind
und suchen dann nach deren Berufsbezeichnungen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?job&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?person&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">placeOfBirth&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">placeOfDeath&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">placeOfActivity&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">placeOfExile&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">characteristicPlace&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">4042742-0&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">professionOrOccupation&lt;/span> &lt;span class="nv">?jobId&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?jobId&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">LIMIT&lt;/span> &lt;span class="mi">20&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Künstler, Bildender Künstler, Künstlertum, Kunstschaffender, Grafiker, Graphiker, Kupferstecher, Maler, Mathematiker, Diplommathematiker, Zeichner, Musiker, Musikschaffender, Dirigent, Orchesterleiter, Chorleiter, Chorregent, Chordirektor, Chormeister, Chordirigent&lt;/p>
&lt;/blockquote>
&lt;p>Um eine übersichtliche Ergebnismenge zu erhalten, haben wir die Anzahl der Ergebnisse auf 20 limitiert.&lt;/p>
&lt;h2 id="berufe-und-tätigkeiten-in-nürnberg-frei">Berufe und Tätigkeiten in Nürnberg (frei)&lt;/h2>
&lt;p>In der letzten Anfrage haben wir die Art der Verknüpfung von Personen mit dem Ort Nürnberg fixiert.
Dazu gehört ein intensives Studieren der GND Ontoloy.&lt;/p>
&lt;p>Es geht auch einfacher. In der folgenden Anfrage suchen wir nach Personen,
die in irgendeiner Beziehung zu Nürnberg stehen (&lt;code>?person ?p gnd:4042742-0&lt;/code>)
und suchen dann die Berufsbezeichnungen.&lt;/p>
&lt;p>Theoretisch erhöhen wir dadurch die Trefferquote, verringern aber die Genauigkeit.
Praktisch spielte das in unseren Experimenten keine Rolle.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?job&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?person&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">4042742-0&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">professionOrOccupation&lt;/span> &lt;span class="nv">?jobId&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?jobId&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">LIMIT&lt;/span> &lt;span class="mi">20&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Künstler, Bildender Künstler, Künstlertum, Kunstschaffender, Grafiker, Graphiker, Kupferstecher, Maler, Mathematiker, Diplommathematiker, Zeichner, Physiker, Astronom, Astronomen, Kartograf, Kartograph, Pfarrer, Pastor, Evangelischer Theologe, Theologe / Evangelische Kirche&lt;/p>
&lt;/blockquote>
&lt;p>Die Ergebnisse dieser Vorschau unterscheiden sich von der letzten Abfrage, da der Graph in einer anderen Reihenfolge traversiert wird.
Vergleicht man die Gesamtmenge der Ergebnisse, dann unterscheiden sie sich nur in der Reihenfolge der Elemente.&lt;/p>
&lt;h2 id="berufe-und-tätigkeiten-in-nürnberg-im-17-jahrhundert">Berufe und Tätigkeiten in Nürnberg im 17. Jahrhundert&lt;/h2>
&lt;p>Um die Anfrage aus dem letzten Beispiel auf das 17. Jahrhundert einzuschränken,
fügen wir einen Filter für das Geburtsdatum und das Sterbedatum der Personen hinzu.&lt;/p>
&lt;p>Der Vollständigkeit halber, haben wir &lt;code>gndo:dateOfBirth&lt;/code> und &lt;code>gndo:dateOfDeath&lt;/code> optional gesetzt.
Das verhindert, dass wir ungewollt Personen filtern, bei denen eines der beiden Daten fehlt.
Daher brauchen wir noch ein extra Filterkriterium, welches das Geburtsdatum nach unten und das Todesdatum nach oben beschränkt&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/2001/XMLSchema#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?job&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?person&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">4042742-0&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">professionOrOccupation&lt;/span> &lt;span class="nv">?jobId&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?jobId&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span>&lt;span class="err">|&lt;/span>&lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">?person&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">dateOfBirth&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="p">.&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">?person&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">dateOfDeath&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="p">.&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?birthDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?deathDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?birthDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="s">&amp;#34;1501-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;1701-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?deathDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="s">&amp;#34;1601-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;1801-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">LIMIT&lt;/span> &lt;span class="mi">20&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Kupferstecher, Zeichner, Künstler, Bildender Künstler, Künstlertum, Kunstschaffender, Maler, Radierer, Buchhändler, Buchführer, Drucker, Buchdrucker, Verleger, Verlagsbuchhändler, Verlagsleiter, Musikverleger, Pfarrer, Pastor, Jurist, Rechtswissenschaftler&lt;/p>
&lt;/blockquote>
&lt;h2 id="methodische-probleme">Methodische Probleme&lt;/h2>
&lt;p>Bevor wir mit diesen Ergebnissen versuchen spezifische Aussagen zu treffen, sollten wir zuerst einige methodische Probleme betrachten.&lt;/p>
&lt;h3 id="-beruf-und--ort">💼 Beruf und 🏠 Ort&lt;/h3>
&lt;p>Die Verknüpfung von Beruf und Ort lässt sich in der GND nur über eine 👤 Person herstellen.
Mit den vorliegenden Daten kann jedoch nicht festgestellt werden, ob die 👤 Person den Beruf (oder die Tätigkeit) auch an diesem Ort ausgeübt hat.
Zum Beispiel wurde Albert Einstein in Ulm geboren, hat den Beruf des Physikers dort jedoch nie ausgeübt.&lt;/p>
&lt;h3 id="-zeit-und--ort">📅 Zeit und 🏠 Ort&lt;/h3>
&lt;p>Mit dem Filter auf Geburtsdatum und Sterbedatum haben wir zwar eine grobe Einschränkung getroffen.
Es ist jedoch nicht zu bestimmen, ob eine 👤 Person mit Sterbedatum 1601 ihren Beruf im 17. Jahrhundert noch ausgeübt hat.
Es ist sicherlich auszuschließen, dass die meisten 👥 Personen mit einem Geburtsdatum von 1699 ihren Beruf im 17. Jahrhundert schon ausgeübt haben.&lt;/p>
&lt;h3 id="-datengrundlage">📜 Datengrundlage&lt;/h3>
&lt;p>Die GND beinhaltet (noch) keinen repräsentative Darstellung der Gesamtbevölkerung.
Es gibt einen starken Bias in Richtung 👥 Personen, die schriftliche Erzeugnisse produzierten, oder künstlerisch tätig waren.
Das wird im folgenden Beispiel deutlich.&lt;/p>
&lt;h2 id="berufe-und-tätigkeiten-in-nürnberg-im-17-jahrhundert-mit-häufigkeit">Berufe und Tätigkeiten in Nürnberg im 17. Jahrhundert mit Häufigkeit&lt;/h2>
&lt;p>Anstatt wie zuvor alle Berufe und Tätigkeiten mit alternativen Bezeichnungen zu sammeln, schreiben wir hier eine Auswertung, die die Häufigkeit der einzelnen Berufe und Tätigkeiten bestimmt. Die alternativen Bezeichnungen, werden in einer separaten Spalte der Ausgabetabelle gesammelt.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;https://d-nb.info/standards/elementset/gnd#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">PREFIX&lt;/span> &lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nl">&amp;lt;http://www.w3.org/2001/XMLSchema#&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">COUNT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?job&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">AS&lt;/span> &lt;span class="nv">?count&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nf">GROUP_CONCAT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">DISTINCT&lt;/span> &lt;span class="nv">?jobAlternative&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nf">SEPARATOR&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;, &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">AS&lt;/span> &lt;span class="nv">?alternatives&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?person&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nn">gnd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">4042742-0&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">professionOrOccupation&lt;/span> &lt;span class="nv">?jobId&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?jobId&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">preferredNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?job&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">variantNameForTheSubjectHeading&lt;/span> &lt;span class="nv">?jobAlternative&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">?person&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">dateOfBirth&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="p">.&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">OPTIONAL&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">?person&lt;/span> &lt;span class="nn">gndo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">dateOfDeath&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="p">.&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?birthDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?deathDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?birthDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="s">&amp;#34;1501-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?birthDay&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;1701-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">FILTER&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="nf">bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?deathDay&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="s">&amp;#34;1601-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">?deathDay&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;1801-01-01&amp;#34;&lt;/span>&lt;span class="o">^^&lt;/span>&lt;span class="nn">xsd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nt">date&lt;/span> &lt;span class="p">)&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">GROUP BY&lt;/span> &lt;span class="nv">?job&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">ORDER BY&lt;/span> &lt;span class="k">DESC&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">?count&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>job&lt;/th>
&lt;th>count&lt;/th>
&lt;th>alternatives&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Kaufmann&lt;/td>
&lt;td>270&lt;/td>
&lt;td>Kaufleute, Fernkaufmann, Fernhandelskaufmann, Großkaufmann, Handelsmann&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Jurist&lt;/td>
&lt;td>270&lt;/td>
&lt;td>Rechtswissenschaftler, Juristischer Beruf, Juristen&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Patriziat&lt;/td>
&lt;td>164&lt;/td>
&lt;td>Patrizier, Stadtadel&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Schriftsteller&lt;/td>
&lt;td>156&lt;/td>
&lt;td>Dichter, Literaturproduzent, Literat, Homme de lettres&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hochschullehrer&lt;/td>
&lt;td>120&lt;/td>
&lt;td>Professor (Hochschule), Lehrkörper / Hochschule, Lehrpersonal / Hochschule, Universitätsprofessor, Hochschulprofessor&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Verleger&lt;/td>
&lt;td>104&lt;/td>
&lt;td>Verlagsbuchhändler, Verlagsleiter&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Pfarrer&lt;/td>
&lt;td>94&lt;/td>
&lt;td>Pastor&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Arzt&lt;/td>
&lt;td>76&lt;/td>
&lt;td>Mediziner, Ärzte&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Künstler&lt;/td>
&lt;td>72&lt;/td>
&lt;td>Bildender Künstler, Künstlertum, Kunstschaffender&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Unternehmer&lt;/td>
&lt;td>57&lt;/td>
&lt;td>Industrieller, Fabrikant, Entrepreneur&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&amp;hellip;&lt;/td>
&lt;td>&amp;hellip;&lt;/td>
&lt;td>&amp;hellip;&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Zur Übersichtlichkeit haben wir die Tabelle auf 10 Einträge reduziert, sie kann als&lt;/p>
&lt;a href="https://fdmlab.landesarchiv-bw.de/data/nuernberg-jobs-1700.csv">
&lt;i class="fas fa-file-csv pr-1 fa-fw">&lt;/i>CSV komplett&lt;/a>
heruntergeladen werden.
&lt;figure id="figure-silhouette-der-kaiserburg-in-nürnberg-mit-nach-häufigkeit-gewichteter-wortwolke-der-in-der-gnd-gelisteten-berufe-und-tätigkeiten-im-17-jahrhundert-mit-einer-verbindung-zu-nürnberg">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Silhouette der Kaiserburg in Nürnberg, mit nach Häufigkeit gewichteter Wortwolke, der in der GND gelisteten Berufe und Tätigkeiten im 17. Jahrhundert, mit einer Verbindung zu Nürnberg." srcset="
/post/2021-06-erste-experimente-mit-der-gnd/featured_hu9de53fc8c4372273836a8ef7220996a7_256456_ab851dcc72f12f70d2a42e79273a6701.webp 400w,
/post/2021-06-erste-experimente-mit-der-gnd/featured_hu9de53fc8c4372273836a8ef7220996a7_256456_657d5e2dc1cc3c72e35f578ecc54008b.webp 760w,
/post/2021-06-erste-experimente-mit-der-gnd/featured_hu9de53fc8c4372273836a8ef7220996a7_256456_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-erste-experimente-mit-der-gnd/featured_hu9de53fc8c4372273836a8ef7220996a7_256456_ab851dcc72f12f70d2a42e79273a6701.webp"
width="760"
height="505"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Silhouette der Kaiserburg in Nürnberg, mit nach Häufigkeit gewichteter Wortwolke, der in der GND gelisteten Berufe und Tätigkeiten im 17. Jahrhundert, mit einer Verbindung zu Nürnberg.
&lt;/figcaption>&lt;/figure>
&lt;p>Wenn man einen Blick auf diese Auswertung wirft, wird schnell klar, dass dies weder eine repräsentative, noch eine vollständige Darstellung der Berufe und Tätigkeiten im 17. Jahrhundert in Nürnberg darstellt.
Für unseren Streifzug durch die Daten der GND war die Fragestellung jedoch sehr hilfreich.
Und auch im Archivalltag haben wir immer wieder Rechercheaufgaben, in denen konkret nach Personen mit einem bestimmten Beruf gesucht werden, die in einem bestimmten Zeitraum in einer Stadt gelebt haben.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Wir verwenden &lt;a href="https://pypi.org/project/sparql-dataframe/" target="_blank" rel="noopener">sparql_dataframe&lt;/a>.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Die 100 Jahre sind etwas großzügig, wir erhöhen damit die Trefferquote und verringern die Genauigkeit.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>GND in lokale Datenbank laden</title><link>https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/</link><pubDate>Tue, 22 Jun 2021 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/</guid><description>&lt;p>Normdaten sind hilfreiche und notwendige Datenquellen zum Aufbereiten, Erschließen und Finden von Archivmaterial.
In diesem Beitrag laden wir die &lt;em>Gemeinsame Normdatei&lt;/em> (GND) zur Weiterverarbeitung in einen lokalen &lt;em>Triple Store&lt;/em> von &lt;em>Apache Jena&lt;/em>.&lt;/p>
&lt;figure class="float-right" id="figure-gnd-logohttpswwwdnbdegnd-von-derdnb-unter-cc-by-sa-lizenzhttpscreativecommonsorglicensesby-sa40">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="[GND Logo](https://www.dnb.de/gnd) von der
DNB unter [CC BY-SA Lizenz](https://creativecommons.org/licenses/by-sa/4.0/)." srcset="
/post/2021-06-gnd-in-lokale-datenbank-laden/gnd_hubf082f7bbdaac622ea39cd2aed6726e1_38178_89e8517eb08384fb4e1deb9cb8ec3e07.webp 400w,
/post/2021-06-gnd-in-lokale-datenbank-laden/gnd_hubf082f7bbdaac622ea39cd2aed6726e1_38178_1b5aa3fd08c0facd7faebc94c2e45e69.webp 760w,
/post/2021-06-gnd-in-lokale-datenbank-laden/gnd_hubf082f7bbdaac622ea39cd2aed6726e1_38178_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/gnd_hubf082f7bbdaac622ea39cd2aed6726e1_38178_89e8517eb08384fb4e1deb9cb8ec3e07.webp"
width="200"
height="760"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
&lt;a href="https://www.dnb.de/gnd" target="_blank" rel="noopener">GND Logo&lt;/a> von der&lt;br>DNB unter &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank" rel="noopener">CC BY-SA Lizenz&lt;/a>.
&lt;/figcaption>&lt;/figure>
&lt;h2 id="über-die-gemeinsame-normdatei">Über die Gemeinsame Normdatei&lt;/h2>
&lt;p>Die &lt;a href="https://www.dnb.de/gnd" target="_blank" rel="noopener">GND&lt;/a> ist ein von der Deutschen National Bibliothek (DNB) betreuter Dienst zur kooperativen Nutzung von Normdaten.
Im Archivbereich interessieren wir uns insbesondere für eindeutig zu identifizierende Personen, Orte und Dinge.&lt;/p>
&lt;p>Die GND liegt im Format &lt;a href="https://www.loc.gov/marc/" target="_blank" rel="noopener">MARC 21&lt;/a> und in &lt;a href="https://www.w3.org/RDF/" target="_blank" rel="noopener">RDF&lt;/a> vor und kann über unterschiedliche Schnittstellen abgerufen werden.
Wir konzentrieren uns hier auf die &lt;a href="https://www.dnb.de/DE/Professionell/Metadatendienste/Datenbezug/LDS/lds_node.html" target="_blank" rel="noopener">GND Daten im RDF Format&lt;/a>, da wir diese effektiver durchsuchen können.
Zum heutigen Stand gibt es von Seiten der DNB keinen SPARQL Endpoint für den Zugriff auf die Daten&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>.
Daher spielen wir einen Daten Dump in eine lokale Datenbank ein.
Die Verwendung der Daten in einem Memory basierten Graphen z.B. mit &lt;a href="https://rdflib.readthedocs.io" target="_blank" rel="noopener">RDFlib&lt;/a> funktioniert auf Grund der Größe des Graphen nicht.&lt;/p>
&lt;h2 id="datenbank-apache-jena-fuseki">Datenbank: Apache Jena Fuseki&lt;/h2>
&lt;figure class="float-right" id="figure-apache-jena-logohttpsjenaapacheorg-von-derapache-software-foundation">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="[Apache Jena Logo](https://jena.apache.org/) von der
Apache® Software Foundation." srcset="
/post/2021-06-gnd-in-lokale-datenbank-laden/jena_hu2356985c631d3f3d54e2729962d749aa_49736_9d3ca77f0e108edf462976f508cce2a0.webp 400w,
/post/2021-06-gnd-in-lokale-datenbank-laden/jena_hu2356985c631d3f3d54e2729962d749aa_49736_097e5ee1d49ca7c0cf8db86174ba32cd.webp 760w,
/post/2021-06-gnd-in-lokale-datenbank-laden/jena_hu2356985c631d3f3d54e2729962d749aa_49736_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/jena_hu2356985c631d3f3d54e2729962d749aa_49736_9d3ca77f0e108edf462976f508cce2a0.webp"
width="200"
height="525"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
&lt;a href="https://jena.apache.org/" target="_blank" rel="noopener">Apache Jena Logo&lt;/a> von der&lt;br>Apache&lt;sup>®&lt;/sup> Software Foundation.
&lt;/figcaption>&lt;/figure>
&lt;p>Als lokale Datenbank für unser Experiment haben wir uns für &lt;a href="https://jena.apache.org/" target="_blank" rel="noopener">Apache Jena&lt;/a> entschieden.
Das Projekt vereint einen Triple Store (TDB) zum Speichern und Verwalten der RDF Triple der GND,
eine Implementierung von &lt;a href="https://www.w3.org/TR/sparql11-overview/" target="_blank" rel="noopener">SPARQL&lt;/a> namens ARQ, sowie einen SPARQL Endpoint mit Fuseki.
Zusätzlich gib es auch noch Tools zum Arbeiten mit RDF und &lt;a href="https://www.w3.org/OWL/" target="_blank" rel="noopener">OWL&lt;/a>, die wir erstmal nicht nutzen werden.
Da wir &lt;a href="https://fdmlab.landesarchiv-bw.de/post/2021-06-wie-wir-docker-einsetzen/">gerne mit Docker arbeiten&lt;/a>,
es aber kein offizielles Docker Image des Apache Projektes gibt,
verwenden wir das Docker Image &lt;a href="https://hub.docker.com/r/stain/jena-fuseki" target="_blank" rel="noopener">stain/jena-fuseki&lt;/a> aus dem Docker Hub&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>.&lt;/p>
&lt;h2 id="einlesen-der-daten">Einlesen der Daten&lt;/h2>
&lt;div class="alert alert-note">
&lt;div>
Da das Einlesen der Daten mehrere Stunden dauern kann, empfehlen wir den Workflow zuerst mit einem kleineren Testdatensatz auszuführen.
&lt;/div>
&lt;/div>
&lt;p>Zum Einlesen haben wir uns die Datei &lt;code>authorities_lds.nt.gz&lt;/code> aus dem &lt;a href="https://data.dnb.de/opendata/" target="_blank" rel="noopener">DNB Data Dump&lt;/a> heruntergeladen&lt;sup id="fnref:3">&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref">3&lt;/a>&lt;/sup>.&lt;/p>
&lt;p>Wir arbeiten mit der folgenden Ordnerstruktur:&lt;/p>
&lt;div class="mermaid">---
title: Ordnerstruktur
config:
look: handDrawn
theme: neutral
---
flowchart TD
subgraph data[far:fa-folder-open data]
fuseki[far:fa-folder fuseki]
fuseki_test[far:fa-folder fuseki_test]
gnd_triples[far:fa-folder gnd_triples]
test_triples[far:fa-folder test_triples]
end
root[far:fa-folder-open gnd_test] --> data
root --> README[far:fa-file README.md]
&lt;/div>
&lt;ul>
&lt;li>&lt;strong>README.md&lt;/strong>: Überblick über das Projekt und die Daten geben!&lt;/li>
&lt;li>&lt;strong>fuseki&lt;/strong>: Ordner zum Persistieren der Datenbank von Apache Jena.&lt;/li>
&lt;li>&lt;strong>fuseki_test&lt;/strong>: Ordner für den Test mit Apache Jena.&lt;/li>
&lt;li>&lt;strong>gnd_triples&lt;/strong>: Speicherort der &lt;code>.nt.gz&lt;/code> Datei.&lt;/li>
&lt;li>&lt;strong>test_triples&lt;/strong>: Speicherort von Testdateien im &lt;code>.ttl&lt;/code> Format.&lt;/li>
&lt;/ul>
&lt;h3 id="testdaten-einlesen">Testdaten einlesen&lt;/h3>
&lt;p>Als erstes starten wir einen Docker Container mit dem Namen &lt;code>fuseki&lt;/code>,
machen die Web GUI verfügbar über &lt;a href="http://localhost:8080" target="_blank" rel="noopener">http://localhost:8080&lt;/a>, setzen
das Administrator Passwort auf &lt;code>123123&lt;/code> und &lt;em>mounten&lt;/em> unsere Testordner in den Container&lt;sup id="fnref:4">&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref">4&lt;/a>&lt;/sup>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-rm&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-name&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="n">fuseki&lt;/span> &lt;span class="n">-p&lt;/span> &lt;span class="mf">8080&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="mf">3030&lt;/span> &lt;span class="n">-e&lt;/span> &lt;span class="n">ADMIN_PASSWORD&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="mf">123123&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">\data\test_triples:/staging&amp;#34;&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">\data\fuseki_test:/fuseki&amp;#34;&lt;/span> &lt;span class="n">stain&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="nb">jena-fuseki&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Den Docker Container lassen wir laufen und öffnen ein zweites Terminal (Shell, PowerShell, &amp;hellip;).
Von diesem aus können wir uns mit dem Container verbinden und den Einlesevorgang starten.
Hierfür gibt es zwei Varianten. In der ersten wird das bereitgestellte &lt;code>load.sh&lt;/code> Skript verwendet, welches auf &lt;code>tdbloader&lt;/code> verweist.
Wir verzichten darauf dem &lt;code>load.sh&lt;/code> Skript spezifische Dateien vorzugeben, sondern lesen alle kompatiblen Formate im &lt;code>fuseki_test&lt;/code> Ordner in die &lt;code>test&lt;/code> Datenbank ein.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">exec&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="n">fuseki&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">bash&lt;/span> &lt;span class="n">-c&lt;/span> &lt;span class="s1">&amp;#39;./load.sh test&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Abschließend wird der geladene Datensatz in der Web GUI angelegt. In dem folgenden Bildschirmfoto in Abbildung 1 wird ein &lt;code>TDB&lt;/code> Datensatz mit dem Namen &lt;code>test&lt;/code> angelegt. Hier ist der gleiche Bezeichner zu wählen, wie er auch beim Laden verwendet wurde.&lt;/p>
&lt;figure id="figure-hinzufügen-des-test-datensatzes-in-der-web-gui">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Hinzufügen des Test Datensatzes in der Web GUI." srcset="
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-test-dataset_hu7de0ec55cdf555c075315fa09a7828f7_31568_3ebcb8e78b5e65817acfcaa7832ab045.webp 400w,
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-test-dataset_hu7de0ec55cdf555c075315fa09a7828f7_31568_44ec608008c18bf6afac67dd2ee66eec.webp 760w,
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-test-dataset_hu7de0ec55cdf555c075315fa09a7828f7_31568_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-test-dataset_hu7de0ec55cdf555c075315fa09a7828f7_31568_3ebcb8e78b5e65817acfcaa7832ab045.webp"
width="760"
height="249"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Hinzufügen des Test Datensatzes in der Web GUI.
&lt;/figcaption>&lt;/figure>
&lt;p>Anschließend kann entweder in der Web GUI im Tab &lt;em>info&lt;/em> oder mit dem folgenden SPARQL-Befehl die Anzahl der eingelesenen Trippel bestimmt werden.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nf">COUNT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">?s&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="alternative-mit-tdb2">Alternative mit TDB2&lt;/h4>
&lt;p>Alternativ kann auch der &lt;a href="https://jena.apache.org/documentation/tdb2/" target="_blank" rel="noopener">tdbloader2&lt;/a> verwendet werden. Hier werden explizit nur Dateien im &lt;code>*.ttl&lt;/code> Format eingelesen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">exec&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="n">fuseki&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">bash&lt;/span> &lt;span class="n">-c&lt;/span> &lt;span class="s1">&amp;#39;./tdbloader2 --loc=/fuseki/databases/test /staging/*.ttl&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In der Web GUI darauf achten, den Datensatz als &lt;code>TDB2&lt;/code> anzulegen.&lt;/p>
&lt;h3 id="gnd-einlesen">GND einlesen&lt;/h3>
&lt;p>Nach einem erfolgreichen Test lesen wir nun die komplette GND ein.
Wir haben uns für &lt;code>TDB2&lt;/code> entschieden, da wir planen den Datensatz länger zu verwenden. Das Einlesen benötigt mit 6 Stunden und 15 Minuten etwa eine Viertelstunde länger als mit der Vorgängerversion &lt;code>TDB&lt;/code>.&lt;/p>
&lt;h4 id="1-starten-des-containers-mit-daten-zum-einlesen">1. Starten des Containers mit Daten zum Einlesen&lt;/h4>
&lt;p>Der folgende Befehl startet einen Docker Container mit dem Verzeichnis der Daten zum Einlesen und einem Verzeichnis zum Speichern der Datenbank von Apache Jena.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-rm&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-name&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="n">fuseki&lt;/span> &lt;span class="n">-p&lt;/span> &lt;span class="mf">8080&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="mf">3030&lt;/span> &lt;span class="n">-e&lt;/span> &lt;span class="n">ADMIN_PASSWORD&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="mf">123123&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">\data\gnd_triples:/staging&amp;#34;&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">\data\fuseki:/fuseki&amp;#34;&lt;/span> &lt;span class="n">stain&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="nb">jena-fuseki&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="2-einlesen-der-daten-im-tdb2-format">2. Einlesen der Daten im &lt;code>TDB2&lt;/code> Format&lt;/h4>
&lt;p>In einem separaten Terminal starten wir den Einlesevorgang der GND Daten mit dem &lt;code>tdbloader2&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">exec&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="n">fuseki&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">bash&lt;/span> &lt;span class="n">-c&lt;/span> &lt;span class="s1">&amp;#39;./tdbloader2 --loc=/fuseki/databases/gnd /staging/*.nt.gz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="3-anlegen-des-datensatzes-in-der-web-gui">3. Anlegen des Datensatzes in der Web GUI&lt;/h4>
&lt;p>Nach dem erfolgreichen Einlesen legen wir den Datensatz in der Weg GUI an.
Hierbei achten wir darauf, den gleichen Bezeichner zu verwenden, wie beim Einlesen und als Format &lt;code>TDB2&lt;/code> zu wählen.&lt;/p>
&lt;figure id="figure-hinzufügen-des-gnd-datensatzes-in-der-web-gui">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Hinzufügen des GND Datensatzes in der Web GUI." srcset="
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-gnd-dataset_hu5d67e5c0519dade124681b5a02d949f1_31074_e44833b33d84e25ec3294609e448e6a8.webp 400w,
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-gnd-dataset_hu5d67e5c0519dade124681b5a02d949f1_31074_cc005c6d4dc61bb81a6064c541a09cb3.webp 760w,
/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-gnd-dataset_hu5d67e5c0519dade124681b5a02d949f1_31074_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-gnd-in-lokale-datenbank-laden/apache-jena-add-gnd-dataset_hu5d67e5c0519dade124681b5a02d949f1_31074_e44833b33d84e25ec3294609e448e6a8.webp"
width="760"
height="249"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption data-pre="Abbildung&amp;nbsp;" data-post=":&amp;nbsp;" class="numbered">
Hinzufügen des GND Datensatzes in der Web GUI.
&lt;/figcaption>&lt;/figure>
&lt;h4 id="4-exemplarisches-testen-der-eingelesenen-daten">4. Exemplarisches Testen der eingelesenen Daten&lt;/h4>
&lt;p>Anschließend testen wir exemplarisch, ob die Daten nutzbar sind.
Hierfür verwenden wir eine SPARQL Abfrage mit einem Standardbeispiel aus der &lt;a href="https://d-nb.info/standards/elementset/gnd" target="_blank" rel="noopener">GND Ontology&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sparql" data-lang="sparql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">WHERE&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nl">&amp;lt;https://d-nb.info/gnd/118514091&amp;gt;&lt;/span> &lt;span class="nv">?p&lt;/span> &lt;span class="nv">?o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Falls zu diesem Zeitpunkt noch keine Ergebnisse angezeigt werden, den Container beenden und wie in Schritt 5 starten.&lt;/p>
&lt;h4 id="5-wiederverwendung-des-containers">5. Wiederverwendung des Containers&lt;/h4>
&lt;p>Um einen neuen Apache Jena Docker Container zu starten und die eingelesenen Daten wiederzuverwenden, kann der folgende Befehl verwendet werden.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-rm&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-name&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="n">fuseki&lt;/span> &lt;span class="n">-p&lt;/span> &lt;span class="mf">8080&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="mf">3030&lt;/span> &lt;span class="n">-e&lt;/span> &lt;span class="n">ADMIN_PASSWORD&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="mf">123123&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">\data\fuseki:/fuseki&amp;#34;&lt;/span> &lt;span class="n">stain&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="nb">jena-fuseki&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="zusammenfassung-und-ausblick">Zusammenfassung und Ausblick&lt;/h2>
&lt;p>Zu Beginn war es etwas frustrierend, einen funktionierenden Workflow zum Einlesen der Daten in den Docker Container von Apache Jena aufzubauen.
Kleine Abweichungen der obigen Beschreibung oder der Reihenfolge sorgen dafür, dass der komplette Einlesevorgang neu gestartet werden muss.&lt;/p>
&lt;p>Die Einlesezeit wird sich auf anderen Systemen drastisch unterscheiden.
Das liegt unter anderem daran, dass wir bei unseren Tests die Dateien von einem Windows Dateisystem in ein Linux-Dateisystem im Docker Container eingelesen und dann wieder auf das Windows Dateisystem herausgeschrieben haben.&lt;/p>
&lt;p>Mit der Kombination aus Apache Jena, Docker und GND haben wir jetzt eine lokale Testdatenbank, mit der wir intensiv mit den Daten arbeiten können,
ohne durch Bandbreiten- oder API-Beschränkungen ausgebremst zu werden.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Alternativ gibt es den Dienst &lt;a href="https://lobid.org/gnd" target="_blank" rel="noopener">lobid&lt;/a> des hbz NRW.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Zum Zeitpunkt unseres Tests gab es mehrere Probleme, die mit &lt;a href="https://github.com/stain/jena-docker/pull/50" target="_blank" rel="noopener">stain/jena-docker#50&lt;/a> gefixt werden sollten.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:3">
&lt;p>Die Daten werden auch im für die Kompression optimierten &lt;a href="https://www.rdfhdt.org/" target="_blank" rel="noopener">HDT&lt;/a> Format angeboten, jedoch hätten wir dafür &lt;a href="https://www.rdfhdt.org/manual-of-hdt-integration-with-jena/" target="_blank" rel="noopener">Apache Jena für HDT anpassen&lt;/a> müssen.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:4">
&lt;p>Die Sicherheit des Passworts ist hier nicht relevant, da wir die Anwendung lokal auf unserem Rechner testen.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item></channel></rss>