Adrian Pohl &
Fabian Steeg
Offene Infrastruktur,
Hochschulbibliothekszentrum NRW (hbz)
KIM Workshop,
WWW, 2. Mai 2022
Datenanalyse, z.B. Feldabdeckung im Katalog
Datenaufbereitung, z.B. zur Visualisierung mit Kibana
Datenanreicherung, z.B. Ergänzung von Daten aus Wikidata
Datenaggregation aus unterschiedlichen Quellen, z.B. OERSI
Systemmigration, z.B. nach Alma oder Folio
Transformationen von Metadaten gehören zum täglichen Geschäft wissenschaftlicher Bibliotheken.
Es gibt viele unterschiedliche Methoden, die meist Programmierkenntnisse voraussetzen.
Datentransformationen werden meist im Zusammenspiel von Fachabteilungen & IT umgesetzt, verbunden mit größerem Kommunikationsaufwand.
Bereits existierende, von anderen entwickelte Transformationsprozesse können nur bedingt entdeckt und nachgenutzt werden.
Es gibt großes Potential, eine immer wiederkehrende Arbeit zugänglicher, kollaborativer und effizienter zu gestalten.
Ermächtigung der Fachebene zur Konfiguration von Datentransformationen
Förderung von Praktiken zum Teilen und Auffinden von Transformationsprozessen
[...] zur Verarbeitung von semi-strukturierten Daten mit dem Fokus auf Bibliotheksdaten
Ein vielseitiges Werkzeug: nutzbar als Kommandozeilentool, als Java/JVM library, für Batch-Verarbeitung oder on-the-fly
Ein offenes Framework: Wiederverwendung und Austausch (von einzelnen Modulen und ganzen Workflows)
2011: Start der Entwicklung durch DNB im Rahmen von Culturegraph; damals schon Austausch mit dem hbz
2013: Umzug auf GitHub, Open-Source-Projekt geworden
2019: Mit der Zeit immer weniger DNB-Ressourcen für Metafacture, hbz wird Maintainer
Grundidee: Daten fließen durch mehrere Module:
→ read → decode
→ transform → encode → write →
Jedes Modul erwartet Input eines bestimmten Typs und erzeugt Output eines bestimmten Typs
Verschiedene Formate werden unterstützt (z.B. PICA, MARC), erweiterbares Framework für eigene Formate
Durch Kombination einzelner Module, durch die unsere Daten fließen, bauen wir den Workflow
Aus: Christoph Böhme, http://swib.org/swib13/slides/boehme_swib13_131.pdf
Workflows können in Flux (einer speziellen Konfigurationssprache) oder mit Java (typsicher über Java Generics) bearbeitet werden
Flux-Workflows können in einem Texteditor editiert und auf der Kommandozeile ausgeführt werden, Java-Workflows funktionieren wie andere Java-Komponenten
Ausgabe des Inhalts von bib-data.pica.gz
als Formeta
$ gedit sample1.flux &
"bib-data.pica.gz"
|open-file|as-lines|decode-pica|encode-formeta|write("stdout");
$ flux.sh sample1.flux
https://github.com/hbz/metafacture-flux-examples/tree/master/sample1
Ausgabe des Inhalts von bib-data.pica.gz
als Formeta
$ gedit sample1.flux &
"bib-data.pica.gz"
|open-file
|as-lines
|decode-pica
|encode-formeta(style="multiline")
|write("stdout");
$ flux.sh sample1.flux
https://github.com/hbz/metafacture-flux-examples/tree/master/sample1
'482147350' {
'001@' {
'a': '5',
'0': '1-2'
},
'001A' {
'0': '1100:15-10-94'
},
'001B' {
'0': '9999:12-06-06',
't': '16:10:17.000'
},
'001D' {
'0': '9999:99-99-99'
},
'001U' {
'0': 'utf8'
},
'001X' {
'0': '0'
},
'002@' {
'0': 'Aag'
},
'003@' {
'0': '482147350'
},
'006U' {
'0': '94,P05'
},
'007E' {
'0': 'U 70.16407'
},
'007I' {
'S': 'o',
'0': '74057548'
},
'011@' {
'a': '1970'
},
'017A' {
'a': 'rh'
},
'021A' {
'a': 'Die @Berufsfreiheit der Arbeitnehmer und ihre Ausgestaltung in völkerrechtlichen Verträgen',
'd': 'Eine Grundrechtsbetrachtg'
},
'028A' {
'9': '106884905',
'7': 'Tn3',
'A': 'gnd',
'0': '106884905',
'a': 'Projahn',
'd': 'Horst D.'
},
'033A' {
'p': 'Würzburg'
},
'034D' {
'a': 'XXXVIII, 165 S.'
},
'034I' {
'a': '8'
},
'037C' {
'a': 'Würzburg, Jur. F., Diss. v. 7. Aug. 1970'
}
}
'958090564' {
'001@' {
'0': '1',
'a': '5'
},
'001A' {
'0': '1140:08-12-99'
},
'001B' {
'0': '9999:05-01-08',
't': '22:57:29.000'
},
'001D' {
'0': '9999:99-99-99'
},
'001U' {
'0': 'utf8'
},
'001X' {
'0': '0'
},
'002@' {
'0': 'Aa'
},
'003@' {
'0': '958090564'
},
'004A' {
'f': 'kart. : DM 9.70, EUR 4.94, sfr 8.00, S 68.00'
},
'006U' {
'0': '00,B05,0285'
},
'007I' {
'S': 'o',
'0': '76088278'
},
'011@' {
'a': '1999'
},
'017A' {
'a': 'rb',
'a': 'si'
},
'019@' {
'a': 'XA-AT'
},
'021A' {
'a': 'Zukunft Bildung',
'h': 'Politische Akademie. [Hrsg. von Günther R. Burkert-Dottolo und Bernhard Moser]'
},
'028C' {
'9': '130681849',
'7': 'Tp1',
'V': 'piz',
'A': 'gnd',
'0': '130681849',
'E': '1952',
'a': 'Burkert',
'd': 'Günther R.',
'B': 'Hrsg.'
},
'033A' {
'p': 'Wien',
'n': 'Polit. Akad.'
},
'034D' {
'a': '79 S.'
},
'034I' {
'a': '24 cm'
},
'036F' {
'x': '299 12',
'9': '551720077',
'g': 'Adn',
'7': 'Tb1',
'A': 'gnd',
'0': '1040469-7',
'a': 'Politische Akademie',
'g': 'Wien',
'Y': 'PA-Information',
'h': 'Politische Akademie, WB',
'p': 'Wien',
'J': 'Politische Akad., WB',
'l': '99,2'
},
'036F/01' {
'x': '12',
'9': '025841467',
'g': 'Advz',
'i': '2142105-5',
'Y': 'Aktuelle Fragen der Politik',
'h': 'Politische Akademie',
'p': 'Wien',
'J': 'Politische Akad. der ÖVP',
'l': 'Bd. 2'
},
'045E' {
'a': '22',
'd': '18',
'm': '370'
},
'047A' {
'S': 'FE',
'a': 'ta'
}
}
https://github.com/hbz/metafacture-flux-examples/tree/master/sample1
Manipulation von Feldnamen und -werten; filtern, kombinieren, normalisieren etc.
Feldwerte aus Lookup-Tabellen in externen Dateien (z.B. Freitextfelder -> kontrollierte Vokabulare)
Morph: XML-basiert, Feld- / Metadaten-Event-Ebene
Fix: eigene, Catmandu-Fix-artige Sprache, Record-basiert
1{a: Faust, b {n: Goethe, v: JW}, c: Weimar}
2{a: Räuber, b {n: Schiller, v: F}, c: Weimar}
<?xml version="1.0" encoding="UTF-8"?>
<metamorph xmlns="http://www.culturegraph.org/metamorph" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1">
<rules>
<data source="_id" name="id"/>
<data source="a" name="title"/>
<combine value="${first} ${last} aus ${place}" name="author">
<data source="b.v" name="first" />
<data source="b.n" name="last" />
<data source="c" name="place" />
</combine>
</rules>
</metamorph>
{"id":"1", "title":"Faust", "author":"JW Goethe aus Weimar"}
{"id":"2", "title":"Räuber", "author":"F Schiller aus Weimar"}
Erfahrung hat gezeigt: Metafacture ist durch seine Modularität und Erweiterbarkeit sehr vielseitig einsetzbar, aber die Transformation mit Morph ist sehr komplex
Kernproblem: Transformationsregeln beziehen sich konzeptuell auf ganze Records (z.B. wenn in Feld x das und das steht, dann mach mit Feld y das und das)
Grundsätzlich bahandelt man in Morph aber wie vorhin beschrieben quasi Feld-Events, wird sehr schnell unintuitiv
Wechsel von einem Feld-basierten zu einem Record-basierten Verarbeitungsansatz bei der Transformation
Anknüpfung an existierende Konfigurationssprache aus Catmandu (mittelfristiges Ziel: Standardisierung, s. https://github.com/elag/FIG)
Erleichterung der Transformationskonfiguration
Vergrößerung der Zielgruppe um Bibliothekar:innen und andere Metadatenfachleute (bei uns z.B. in OERSI, erster Anwendungsfall und Entwicklungsbegleitung zu Fix)
1{a: Faust, b {n: Goethe, v: JW}, c: Weimar}
2{a: Räuber, b {n: Schiller, v: F}, c: Weimar}
move_field(_id, id)
move_field(a, title)
paste(author, b.v, b.n, '~aus', c)
retain(id, title, author)
{"id":"1", "title":"Faust", "author":"JW Goethe aus Weimar"}
{"id":"2", "title":"Räuber", "author":"F Schiller aus Weimar"}
Beispiele: produktiv in OERSI (diverse Web-Quellen → JSON), im Aufbau für hbz-Verbundkatalog (MARC → JSON) und Rheinland-Pfälzische Bibliographie (Allegro → JSON)
Tests: unit (Simulation von Input-Output-Events und Fix auf Code-Ebene; aktuell 436 pass / 26 skip), integration (Input, Flux, Fix, Output als Dateien wie bei Real-World-Setup; aktuell 161 pass / 67 skip, d.h. aktuell 70% "conformance")
d.h. vieles geht schon, aber es gibt auch noch einiges zu tun
Webbasierte Oberfläche zum Ausprobieren und Austauschen von Workflows
Ziel: Einstiegshürde für Metafacture senken, neben Morph-Komplexität unserer Erfahrung nach ein weiteres zentrales Problem bei der Metafacture-Nutzung
Für Entwicklung, Dokumentation, Tutorials, Workshops
Metafacture hbz-intern als zentrales Tool etablieren
Weitere Nutzer:innen und Mitentwickler:innen innerhalb und außerhalb des hbz-Verbunds gewinnen
SKOS Lookups (zum Andocken an SkoHub Vocabs)
Entity Reconciliation mit OpenRefine-kompatiblen Diensten
Fix-Standardisierung, s. https://github.com/elag/FIG
ETL: Extract, Transform, Load
mehr Kollaboration, Teilen & Auffinden von Workflows ermöglichen (nicht nur für Metafacture)
Entwicklung von Best Practices zur Paketierung und Beschreibung von ETL-Konfigurationen
Aufbau eines ETL Hubs zum Entdecken existierender ETL-Prozesse für die einfache Nachnutzung und Anpassung