Metamorph
Innerhalb von Metafacture nimmt Metamorph die Rolle einer DSL (“Domain-specific language”) ein, mit welcher einzelne Schlüssel-Wert-Paare (sogenannte Literale) von Datensätzen transformiert oder gefiltert werden. Dafür werden Regeln (“Metamorph”- oder kurz “Morph-Definition”) festgelegt, welche anschliessend durch Metafacture auf einzelne Felder (identifiert durch Schlüssel-/Feldnamen) angewendet werden. Diese Regeln sind als XML-Elemente formuliert, und daher sind auch Metamorph-Dateien “normale” XML-Dateien.
Einen umfassenden Überblick über die erlaubten Elemente gibt das Metamorph-Schema.
XML-Struktur
Jede Morph-Definition muss innerhalb des <metamorph>
-Elementes abgelegt
werden:
<?xml version="1.0" encoding="UTF-8"?>
<metamorph xmlns="http://www.culturegraph.org/metamorph" version="1">
<!-- Hier kommen die Definitionen hin -->
</metamorph>
Direkt unterhalb des <metamorph>
-Elementes können folgende Elemente
definiert werden:
<include>
: Einbinden von externen Definitionen<macros>
: Dateiweite Funktionen<maps>
: Liste von Nachschlagetabellen<meta>
: Metadaten der Datei: Gültige Kindelemente sind<name>
und<annotation>
<rules>
: Tranformations- und Filterregeln (die den Hauptteil dieser Dokumentation ausmachen)<vars>
: Dateiweite Konstanten
Metamorph selbst hat zwei eigene Attribute:
version
: Die Version des Metamorph-SchemasentityMarker
: Trennzeichen zwischen Entität und einem Literal
Verwendung von Metamorph-Definitionen in Metafacture
In Metafacture werden Workflows mithilfe von sogenannten Flux”-Skripten festgelegt. Flux besteht aus einer Reihe von Befehlen (commands), die jeweils einen Teil des Workflows beschreiben (bspw. das Öffnen einer Datei oder das Dekodieren eines Formates).
Ein Überblick der zur Verfügung stehenden Flux-Befehle ist hier zu finden.
Um eine Morph-Definition in einem solchen Flux-Skript zu verwenden, wird
der Befehl morph('/pfad/zur/morph/datei')
benutzt.
Daneben gibt es noch einen zweiten Befehl, der ebenfalls mit
Morph-Definitionen arbeitet: filter('/pfad/zur/morph/datei')
. In einer
solchen Morph-Datei werden Regeln definiert - meistens das Vorhandensein einzelner
Felder -, welche von einem Datensatz erfüllt werden müssen, damit er im
Workflow weitergeleitet wird. Vielfach macht es Sinn, einen solchen Filter
mit einer nachfolgenden Transformation zu kombinieren, so beispielsweise
um zu vermeiden, dass Datensätze in die Transformation geschickt werden,
welche nicht “regelkonform” sind und daher zu unerwarteten Resultaten führen
können.
Ein Beispiel für einen solchen Fall ist die “baseline”, ein
Datenworkflow in linked-swissbib, wo die Existenz eines gewissen Feldes -
MARC-Feld 245*.a
- Voraussetzung dafür ist, dass weitere Felder eines
Datensatzes im
Morph-Schritt korrekt zusammengefügt werden.