9 Catmandu
Catmandu ist ein digitaler Werkzeugkasten für die Verarbeitung von Metadaten. Im Gegensatz zu ähnlichen ETL-Tools unterstützt Catmandu gängige Datenformate und Schnittstellen von Bibliothekssoftware, darunter auch PICA. Die PICA-Unterstützung in Catmandu basiert auf [picadata] und geht darüber hinaus, vor allem was Möglichkeiten des Zugriffs auf Schnittstellen (Kapitel 7) und der Konvertierung zwischen PICA und anderen Formaten betrifft.
Catmandu-Einführung (in Englisch)
9.1 Installation
Für Debian-basierte Betriebsysteme kann Catmandu mit Unterstützung von PICA und SRU folgendermaßen installiert werden:
sudo apt-get install libcatmandu-perl libcatmandu-sru-perl cpanminus
sudo cpanm Catmandu::PICA9.2 Konfiguration
In der Konfigurationsdatei catmandu.yaml lassen sich häufig benötigte Einstellungen angeben, so dass sie nicht bei jedem Aufruf von catmandu mit angegeben werden müssen. Für die Verarbeitung von PICA-Daten, insbesondere aus dem K10plus-Katalog empfiehlt sich folgende YAML-Datei, die in den folgenden Beispielen vorausgesetzt wird:
Die folgenden beiden Kommandos zur Konvertierung von PICA/XML nach PICA Plain sind damit gleich; die Konfiguration ermöglicht eine kürzere Schreibweise:
catmandu convert PICA --type XML to PICA --type plain example.pica
catmandu convert picaxml to pp example.pica9.3 PICA in Catmandu
Intern werden PICA-Daten in Catmandu als ein Datensätze mit je zwei Feldern verarbeitet:
_identhält die PPN (falls vorhanden, ansonstennull)_recordenthält die PICA-Daten in PICA/JSON-Struktur
Hier der Beispieldatensatz so wie er von Catmandu gelesen wird (da in der Regel mehrere Datensätze verarbeitet werden, ist die JSON-Ausgabe standardmäßig ein Array aller Datensätze). Vorausgesetzt wird wieder die Beispieldatei example.pica:
catmandu convert pp to JSON < example.pica[{"record":[["003@","","0","12345X"],["021A","","a","Ein Buch","h","zum Lesen"],["045B","02","a","Spo 1025","a","BID 200"]],"_id":"12345X"}]Funktionen zur Verarbeitung von PICA in Catmandu werden erst durch das Paket Catmandu-PICA bereitgestellt (siehe Installation):
- Lesen und Schreiben verschiedener PICA-Serialisierungen
- Auswerten und Verändern der Inhalte von PICA-Datensätzen
- Abruf von PICA-Daten über SRU-Schnittstellen
- Validierung von PICA-Daten mit Avram-Schemas
9.4 Fix-Skripte
Eine Besonderheit von Catmandu sind die so genannten Fix-Skripe zur Auswertung und Veränderung von Daten. Hier ein Beispiel zur Konvertierung von PICA in eine CSV-Tabelle:
catmandu convert pp to CSV --fix 'pica_map(021A$ah,titel,join:" ") remove_field(record)' < example.pica_id,titel
12345X,Ein Buch zum Lesen
Dieses Fix-Skript besteht aus zwei Befehlen (bei längeren Fix-Skripten empfiehlt sich das Auslagern in eine eigene Datei):
pica_map(021A$ah,titel,join:" ")fügt ein neues Feldtitelmit dem Inhalt der Unterfelder$aund$hdes PICA-Feld021Ahinzu, wobei mehrere Inhalte durch Leerzeichen verbunden werden. Der Zugriff auf die Unterfelder erfolgt mittels PICA Path Expression.remove_field(record)entfernt den PICA-Datensatz, so dass nur noch_idundtitelübrig bleiben.
Umgekehrt lassen sich mit Catmandu auch PICA-Daten erzeugen oder verändern. Hier ein Beispiel zur Änderung des Unterfelds 021A$a:
catmandu convert pp to pp --fix 'set_field(titel,"Ein gutes Buch");pica_set(titel,021A$a)' < example.pica003@ $012345X
021A $aEin gutes Buch$hzum Lesen
045B/02 $aSpo 1025$aBID 200
Weitere Beispiele für Fix-Skripte gibt es in Kapitel 6.
9.5 Schnittstellen
Seine Stärken spielt Catmandu bei der Unterstützung einer Vielzahl von Schnittstellen und Datenbanksystemen aus um Daten aus verschiedenen Quellen aus- und in andere Systeme einzuspielen. Hier ein kurzes Beispiel mit der SRU-Schnittstelle des K10Plus-Katalogs. Folgender Aufruf beantwortet die Frage welche Datensätze mit einer bestimmtender DDC-Sachgruppe der Deutschen Nationalbibliothek aber nicht mit der Basisklassifikation erschlossen sind:
catmandu convert kxp --query pica.sgd=590 --fix 'reject pica_match(045Q) remove_field(record)' to CSV --header 0Im einzelnen besteht der Aufruf aus:
Abfrage aller Titel mit Sachgruppe 590 (Zoologie) im K10Plus
catmandu convert kxp --query pica.sgd=590Herausfiltern von Datensätzen mit vorhandener Basisklassifikation (Feld
045Q) und Reduzierung der verbleibenden Datensätze auf die PPN in Feld_id
--fix 'reject pica_match(045Q) remove_field(record)Ausgabe der PPNs als CSV ohne Header (also nur je eine PPN pro Zeile):
to CSV --header 0
Weitere Beispiele für die PICA-Datenverarbeitung mit Catmandu gibt es im Abschnitt zur SRU-Schnittstelle. Eine vollständige Einführung in Catmandu würde jedoch den Umfang dieses Handbuchs übersteigen.