Metadatenworkflows mit Metafacture erstellen und verwalten

Pascal Christoph & Tobias Bülte
Offene Infrastruktur, Hochschulbibliothekszentrum NRW (hbz)


Hands-on Lab

111. BiblioCon
Hannover, 25. Mai 2023

https://slides.lobid.org/2023-05-metafacture-workshop/ : (PDF)
Creative Commons License

Kurze Vorstellungsrunde

  1. Wer (Name)
  2. Wo (an welcher Institution beschäftigt)
  3. Was (Hintergund: Technik oder Bibliothekar:in oder ...)

Agenda

  1. Einführung & Kontext
  2. Workflows
  3. Transformieren
  4. Analysieren
  5. Komplexere Beispiele
  6. Ausblick, Fragen & Diskussion

1. Kontext: Datentransformation

ETL: Extract, Transform, Load

-

Aus: culturegraph, https://github.com/culturegraph/culturegraph-workflow/blob/master/docs/src/docs/asciidoc/manual.adoc

Anwendungsszenarien

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

Wo wir Metafacture nutzen

Transformation der Daten des Verbundkatalogs für die Indexierung (lobid.org)

Metadaten aus verschiedenen Quellen im OER Suchindex aggregieren (OERSI)

Transformation der Daten der Rheinland-Pfälzischen Bibliographie

Nur ein kleiner Teil

Sehr vielseitiges Tool mit vielen Anwendungsmöglichkeiten, Formaten, Modulen

Wir nutzen davon nur einen kleinen Teil, eben für unsere Formate und Anwendungsfälle

Wir versuchen euch hier einen möglichst breiten Überblick zu geben über Konzepte und Möglichkeiten

Quasi ein Teaser was grundsätzlich geht, das würde man je nach Anwendungsfall ganz unterschiedlich vertiefen

Annahmen

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.

Das heißt:

Es gibt großes Potential, eine immer wiederkehrende Arbeit zugänglicher, kollaborativer und effizienter zu gestalten.

Übergeordnete Ziele

Ermächtigung der Fachebene zur Konfiguration von Datentransformationen

Förderung von Praktiken zum Teilen und Auffinden von Transformationsprozessen

Was ist Metafacture?

Ein vielseitiges ETL-Werkzeug zur Verarbeitung von semi-strukturierten Daten mit dem Fokus auf Bibliotheksdaten

nutzbar als Kommandozeilentool, als Java/JVM library,

für Batch-Verarbeitung oder on-the-fly

offenes Framework: Weiterentwicklung, Wiederverwendung und Austausch (von einzelnen Modulen und ganzen Workflows)

Metafacture-Historie

2011: Start der Entwicklung durch DNB im Rahmen von Culturegraph auf sourceforge; damals schon Austausch mit dem hbz

2013: Umzug auf GitHub

2019: Mit der Zeit immer weniger DNB-Ressourcen für Metafacture. hbz wird Maintainer

2019: Start von Metafacture Fix

2021: Start von Metafacture Playground

ETL

-

Aus: culturegraph, https://github.com/culturegraph/culturegraph-workflow/blob/master/docs/src/docs/asciidoc/manual.adoc

Wie Metafacture funktioniert

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

Mittels Kombination einzelner Module bauen wir einen Workflow, durch die unsere Daten fließen

Metafacture-Module


Autoren: Tobias & Pascal (2021-2023)

2. Metafacture-Workflows

Ein Workflow

Basierend auf: Christoph Böhme, http://swib.org/swib13/slides/boehme_swib13_131.pdf

"dateiName"|open-file|as-lines|decode-pica|encode-json|write("stdout");

(Beispiel-Inhalt einer "flux" Datei)

Workflows konfigurieren und ausführen

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

Der Workshop führt in die Nutzung der Flux-Workflows ein, zum Ausführen verwenden wir den Metafacture Playground

Flux-Dokumentation

Was für Module gibt es? Was machen die?

https://github.com/metafacture/metafacture-documentation/blob/master/flux-commands.md

Metafacture Playground

Webbasierte Oberfläche zum Ausprobieren und Austauschen von Workflows

Ziel: Einstiegshürde für Metafacture senken, unserer Erfahrung nach ein zentrales Problem bei der Metafacture-Nutzung

Für Entwicklung, Dokumentation, Tutorials, Workshops

https://metafacture.org/playground

Wie funktioniert das in der Praxis? Lasst uns das gemeinsam ausprobieren.

(die folgenden Screenshots verlinken die Beispiele zum Ausprobieren im Playground)

Ändere den Input in eine Variable. Ändere das Resultat zu "Hello World, I am". Lasst uns das gemeinsam ausprobieren.

(die folgenden Screenshots verlinken die Beispiele zum Ausprobieren im Playground)

Verschiebe den Input in den Playground

Nutze die Variable PG_DATA und dem Data-Fenster

(die folgenden Screenshots verlinken die Beispiele zum Ausprobieren im Playground)

Dann lasst uns doch mal PICA-Daten zu JSON verarbeiten

(die folgenden Screenshots verlinken die Beispiele zum Ausprobieren im Playground)

Übung: Formatierung & Optionen

Playground-Beispiel anpassen:


PG_DATA
| as-lines
| decode-pica
| encode-json(prettyPrinting = "true")
| print
;
				
sample1_PICA_to_JSON

Übung:

Marc21-Daten aus dem Web öffnen und zu YAML transformieren


"https://raw.githubusercontent.com/metafacture/metafacture-core/master/metafacture-runner/src/main/dist/examples/read/marc21/10.marc21"
| open-http

...

;
				

`open-http` ruft Daten aus dem Web ab.

Schaut in die Doku, wie ihr MARC21 decodiert und YAML encodiert

sample1_Marc21_to_YAML
... das gleiche, aber als CSV ausgegeben

3. Transformieren

ETL: Transformation

Transformieren

Manipulation von Feldnamen und -werten; filtern, kombinieren, trennen, normalisieren etc.

Änderung der Struktur und Hierarchie eines Records etc.

Feldwerte aus Lookup-Tabellen in externen Dateien (z.B. Freitextfelder -> kontrollierte Vokabulare)

Transformationsmodule

Fix: eigene, Catmandu-Fix-artige Sprache, Record-basiert

Morph: XML-basiert, Feld- / Metadaten-Event-Ebene

Fix Doku und Konzepte

Funktionen ("Simple Fixes")


add_field("hello","world")
remove_field("my.deep.nested.junk")
replace_all("creator","Dr.","")
					

Conditionals(Bedingungen)


if exists("id")
  set_field("is_valid", "yes")
else
  set_field("is_valid", "no")
end
					

Binds/Loops


do list(path:"arrayPath[]", "var":"$i")
  add_field("$i.foo","bar")
end
					

Metafacture Fix: Ziele

Erleichterung der Transformationskonfiguration

Anknüpfung an existierende Konfigurationssprache aus Catmandu (mittelfristiges Ziel: Standardisierung, s. https://github.com/elag/FIG)

Vergrößerung der Zielgruppe um Bibliothekar:innen und andere Metadatenfachleute (bei uns z.B. in OERSI, erster Anwendungsfall und Entwicklungsbegleitung zu Fix)

Kurzer Exkurs: Metadatenstrukturen


title: Ordinary Vices
author: Judith Shklar
publisher: Belknap Press
date: 1984
					

Wir sehen...

...Metadaten für ein Buch

...einen Record/Datensatz eine Sammlung von Metadaten zu einen Gegenstand (z.B. Buch)

...Elemente/Felder(/Properties/Attribute/Keys)

...Werte/Values

Kurzer Exkurs: Metadatenstrukturen-Besonderheiten

Unterfeld/Unterelement und Objekte


author:
firstName: Judith
lastName: Shklar
				

Attribute (im Kontext XML)


Judith Shklar
										

Array/Liste (von einfachen Werten oder Objekten)


keywords:
- Politische Theorie
- Philosophie
- Grausamkeit
				

Felder anwählen: Pfade


id: 978-3-518-10639-6
title:
  mainTitle: Öffentlichkeit und Erfahrung
  subTitle: Zur Organisationsanalyse von bürgerlicher und proletarischer Öffentlichkeit
creator:
  firstName: Alexander
  lastName: Kluge
creator:
  firstName: Oskar
  lastName: Negt
						

Um die verschiedenen Elemente und Felder für die Transformation anzuwählen, muss man ihre Pfade angeben

Einfache Elemente der obersten Ebene / Felder: z.B. `id`

Elemente auf einer unteren Ebene / Unterfelder: z.B. `title.mainTitle`

Wiederholte Felder/Arrays werden als Listen mit Index-Nummer angegeben: z.B. `creator.2.firstName`

Felder anwählen: Besonderheiten

JSON-Arrays bekommen in der FIX am Ende des Namens einen Arraymarker: "array[]"

Pfad-Wildcards: u.a. ? und * für Feldnamen

Array-Wildcards: u.a. * (alle), $append (neues anhängen), $last (nur letzter)

Feld-Pfad-Übersicht

Bevor man anfängt mit Feldern zu arbeiten ist es nützlich eine Übersicht zu bekommen

Dazu wollen wir die verfügbaren Feld-Pfade und ihre Werte ausgeben

Dabei hilft uns das neue Flux-Commando `list-fix-paths`

Feld auswählen

Auf Basis dieser Übersicht ein Feld auswählen, z.B. 021A (Titel)

alles andere weglassen: retain, s. Dokumentation

sample4-PICA-FIX-retain-021A_JSON

move_field, paste, retain


{"a": "Faust", "b": {"n": "Goethe", "v": "JW"}, "c": "Weimar"}
{"a": "Räuber", "b": {"n": "Schiller", "v": "F"}, "c": "Weimar"}
					

move_field(a, title)
					

paste(author, b.v, b.n, '~aus', c)
					

retain(title, author)
					

Beispiel im Playground

Übung

Aufgaben für MARC-Transformation in kleinen Schritten

sample5-PICA-MOVE-title-year-publisher-JSON

Lookup

"Feldwerte aus Lookup-Tabellen in externen Dateien (z.B. Freitextfelder -> kontrollierte Vokabulare)"

Übung

Feld 002@.0 → dcterms:format

In 002@.0, Position 1, A: print, B: audiovisual, O: online

z.B. mit copy_field, substring, lookup, retain, s. Dokumentation

sample3x_Lookup_fields
Lasst uns noch ein Beispiel für Wildcards anschauen.

Analysieren

Beispiel: Feldwerte zählen

Anzahl unterschiedlicher Werte im Edition-Feld (032@.a)


PG_DATA
| as-lines
| decode-pica
| list-fix-values("032@.a")
| print
;
					
sample7_Count_values
Lasst uns jetzt mal PICA-Daten aus dem Web aubrufen und ansonsten den Workflow übernehmen. Von der Quelle: https://github.com/hbz/metafacture-flux-examples/blob/master/sample4/bib-data-1k.pica?raw=true

6. Komplexere Beispiele

Was u.a. nicht vorkam

komplexe Transformation

Komplexere Analyse, z.B. Muster zählen

Daten aus verschiedenen Quellen sammeln und zu Records zusammensetzen: `collect-triples`

Fix: Beispiele & Dokumentation

Beispiele: produktiv in OERSI (diverse Web-Quellen → JSON), für ALMA hbz-Verbundkatalog (ALMA MARC → JSON) und Rheinland-Pfälzische Bibliographie (Allegro → JSON)

Integration-Tests: Input, Flux, Fix, Output als Dateien wie bei Real-World-Setup

Aktuelle Dokumentation, GitHub-Repo, Playground

7. Ausblick, Fragen & Diskussion

Ausblick

Fix & Playground weiterentwickeln

Fix-Funktionalität erweitern, Fehler beheben, Catmandu-Kompatibilität erhöhen

Playground weiter verbessern, z.B. mehr Hinweise im Editor, integrierte Dokumentation (was gibt es für Module, wie kann ich sie kombinieren)

Standards nutzen und aufbauen

SKOS Lookups (zum Andocken an SkoHub Vocabs)

Entity Reconciliation mit OpenRefine-kompatiblen Diensten

Fix-Standardisierung, s. https://github.com/elag/FIG

ETL Hub

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

Fragen und Diskussion

... gerne auch gleich am Stand der Verbünde (14:00 - 15:00)

https://metafacture.org