Hinweise zu Codebeispielen
Formeta
In der Dokumentation finden sich immer wieder Codebeispiele. Ein- und Ausgaben werden dabei im sog. Formeta-Format dargestellt. Formeta hat lediglich zwei Bausteine: Literale (Schlüssel-Wert-Paare) und Entitäten (Objekte, die Literale oder weitere Entitäten enthalten). Weiter gelten folgende Regeln:
- Jeder Datensatz ist eine Entität
- Literale werden in der Form
schlüssel: wert
geschrieben und mit Kommata (,
) voneinander getrennt - Entitäten werden in der Form
schlüssel { <objektinhalt> }
geschrieben und können optional mit Kommata voneinander getrennt werden (Achtung: Zwischenschlüssel
und{
hat es im Unterschied zu JSON keinen Doppelpunkt!) - Mit
\
können Zeichen mit spezieller Bedeutung maskiert werden: Das sind neben den Trennzeichen:
,,
,{
und}
'
(einfaches Anführungszeichen) und das Maskierungszeichen\
selbst.:
. - Anderseits haben
\n
(Zeilenumbruch) und\r
(Wagenrücklauf) spezielle Bedeutung :
,,
,{
und}
müssen in Werten nicht maskiert werden, wenn der Text in einfachen Anführungszeichen steht- Leerzeichen, Tabulatoren, Zeilenumbrüche und Wagenrückläufe können optional zur besseren Lesbarkeit eingesetzt werden
Ein Beispiel:
{
kanton1 {
name: Appenzell Ausserrhoden,
hauptort: 'Herisau, Trogen',
einwohnerzahl: 55\'000
},
kanton2 {
name: Appenzell Innerrhoden,
hauptort: 'Appenzell',
einige berge: {
hoher berg: säntis,
und: schäfler
}
}
Dasselbe Beispiel in kompakter Schreibweise ohne Leerzeichen, Zeilenumbrüche und optionalen Kommata:
{kanton{name:Appenzell Ausserrhoden,hauptort:Herisau\, Trogen,einwohnerzahl:55\'000}kanton2{name:Appenzell Innerrhoden,hauptort:Appenzell,einige berge{hoher berg:säntis,und:schäfler}}}
Metafacture Runner
Um die Beispiele selber durchspielen zu können, muss der sog. Metafacture runner (eine ausführbare Instanz von Metafacture) installiert werden. Dazu die aktuelle Metafacture-Distribution herunterladen und entpacken. Weitere Hinweise dazu finden sich auf der Website von Metafacture. Zudem ist eine sog. Flux-Datei notwendig, in der der Transformationsworkflow definiert wird. Eine minimale Flux-Datei, in der das obige Beispiel transformiert wird, ist folgendermassen aufgebaut:
FLUX_DIR + "eingabe.formeta"| // Pfad zur Eingabedatei; FLUX_DIR enthält den Pfad zur Flux-Datei
open-file| // Öffne Datei
as-formeta-records| // Prozessiere Dateitext als Formeta
decode-formeta| // Dekodiere Formeta
morph(FLUX_DIR + "morph.xml")| // Wende Transformationsregeln an (in morph.xml definiert)
encode-formeta| // Serialisiere als Formeta
write("stdout"); // Gib Resultat auf Kommandozeile aus
Nachdem Metafacture runner installiert und die Flux- sowie die Eingabedatei erstellt sind, ins Verzeichnis der Flux-Datei wechseln und auf der Kommandozeile folgendes eingeben:
/pfad/zu/metafacture/runner/flux.sh flux.datei
Docker-Image
Anstatt Metafacture runner zu installieren, kann auch das entsprechende Docker-Image verwendet werden. Dazu muss Docker lokal installiert werden. Anschliessend über Kommandozeile ins Verzeichnis wechseln, wo sich die Flux- und die Eingabedatei befinden, und eingeben:
docker run -v `pwd`:/mfwf:ro sschuepbach/metafacture-runner:latest flux.datei
Wird das Docker-Image zum ersten Mal ausgeführt, dauert der Prozess etwas länger, da zuerst das entsprechende Image heruntergeladen werden muss.