Ein Imexporter-Plan ist eine Reihe von Handlungsanweisungen, Schritte oder Steps genannt, sowie einigen wenigen Zusatzinformationen. Ein Plan wird in einer XML-Datei definiert. Bei der Ausführung eines Plans wird eine Liste mit Eingabedateien sowie eine Liste an Variablen verwendet. Beide Listen können auch leer sein.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: | <plan name="einfacher Beispiel-Plan" right="EXPORT" context="bilder" xmlns="http://schema.programmfabrik.de/imexporter-plan/0.1"> <build-steps> <step type="databaseexport"> <description-file>exportdef.xml</description-file> </step> <step type="xslt"> <xsl-file>xml2html.xsl</xsl-file> </step> <step type="rename"> <pattern>index.html</pattern> </step> </build-steps> </plan> |
Mit Hilfe der folgenden Attribute können Export-Definitionen im easydb-Frontend integriert werden. Sie sind anschließend über das Selektions-/Auswahl-Menü aufrufbar.
name
) Ein frei wählbarer Name, der nach Möglichkeit aber eindeutig sein sollte, da man die Exporter im Frontend sonst nicht unterscheiden kann.
right
) Ein frei wählbarer Bezeichner, in der easydb wird für Exporter dafür ein Systemrecht nach dem Schema IMEXPORTER_<right>
angelegt, das standardmäßig nicht gewährt ist.
Eine anwendungsabhängige Beschreibung der Verwendungsmöglichkeiten. Die easydb verwendet für Exporter folgendes Schema: <table>:<column>:<callers>:<cardinality>
. Die einzelnen, durch Doppelpunkt getrennten Felder können leer gelassen werden, Doppelpunkte am Ende können weggelassen werden. Zu den einzelnen Feldern:
table
: Name der Tabelle, auf die der Exporter anwendbar ist. Wenn nicht gesetzt, für alle Tabellen.column
: Name der Spalte. Wenn leer, wird id
angenommen.callers
: Komma-getrennte Liste der möglichen Verwender, sollte leergelassen werden.cardinality
: Ist der Exporter für den Export einzelner oder mehrerer Datensätze ausgelegt. Dabei steht 1
für Einzeldatensätze und n
für mehrere Datensätze (was auch die Vorgabe ist).Beispiele für gültige Kontext-Definitionen:
item:item_id::1
bilder:::n
test
Jeder Schritt legt fest, ob er als Eingabe keine (0), eine (1) oder mehrere (n) Dateien akzeptiert. Diese Eingabekardinalität wird in der folgenden Aufstellung mit I
angegeben. Außerdem hat jeder Schritt keine (0), eine (1) oder mehrere (m) Ausgabedateien, in der Liste mit O
angegeben.
Die Eingabekardinalität eines Schritts muss zu der Ausgabekardinalität des vorherigen Schritts passen, ein Schritt darf nicht eine Datei (1) erwarten, wenn der vorherige Schritt keine (0) ausgibt. Schritte, die I=1 und O=1 haben, können jedoch hinter einen Schritt gehängt werden, der die Ausgabe O=m gesetzt hat. Der entsprechende Schritt wird dann mehrfach, für jede Eingabedatei ein Mal, ausgeführt und die Ergebnisse werden wieder zusammengeführt. Ein Schritt mit der Eingabe I=n kann natürlich auch hinter einem Schritt mit O=1 folgen.
Jeder Schritt hat, sofern anwendbar, auch eine Definition der möglichen Ein- und Ausgabedateitypen. Diese werden allerdings noch nicht überprüft, die Verantwortung liegt daher momentan beim Ersteller des Plans.
splitxml
(I=1, O=m) Zerlegt eine XML-Datei in mehrere kleine XML-Dateien. Auf welcher Hierarchieebene die Trennung stattfindet, muss festgelegt werden. Dieser Schritt macht nur bei in ihrer Struktur regelmäßigen Daten Sinn, dabei kann er aber helfen, den Speicherbedarf anderer Schritte, z.B. der XSLT-Transformation zu reduzieren.
Parameter:
num-tuples
: nach wievielen Elementen (auf einer Ebene) eine neue Datei angefangen wird.split-level
: Ebene, auf der die Trennung vorgenommen werden soll.Beispiel:
1: 2: 3: 4: | <step type="splitxml"> <split-level>2</split-level> <num-tuples>10000</num-tuples> </step> |
xslt
(I=1, O=1) Eine XSLT-Transformation der Eingabedatei wird vorgenommen.
Parameter:
xsl-file
: XSLT-StylesheetBeispiel:
1: 2: 3: | <step type="xslt"> <xsl-file>add-eas-annotation.xsl</xsl-file> </step> |
xml2csv
(I=1, O=1) Eine XML-Datei im Imexporter-Datenformat wird in eine CSV-Datei umgewandelt.
Beispiel:
1: 2: | <step type="xml2csv"> </step> |
csv2xml
(I=1, O=1) Eine CSV-Datei wird in eine XML-Datei im Imexporter-Datenformat umgewandelt.
Parameter:
result-table-name
(optional, Vorgabe csv
): Name der Ausgabe-Tabelle (<table>
-Tag im XML)separator
(optional, Vorgabe ,
): CSV-Feldtrennerquote
(optional, Vorgabe "
): Textbegrenzungszeichenfirst-skip
(optional, Vorgabe 0
): Einstellung, ob die erste Zeile übersprungen wird (hier können Spaltennamen stehen)first-as-column-names
(optional, Vorgabe 0
): Einstellung, ob die Spaltennamen aus der ersten Zeile extrahiert werden sollenskip-unnamed-columns
(optional, Vorgabe 0
): Einstellung, ob Spalten ohne Namen ignoriert werden sollencolumn-names
(optional, Vorgabe leer): Liste (einzelne Einträge als Attribut name
in <column>
-Tags) der SpaltennamenBeispiel:
1: 2: 3: 4: 5: 6: 7: 8: 9: | <step type="csv2xml"> <result-table-name>bilder</result-table-name> <separator>;</separator> <first-skip>1</first-skip> <column-names> <column name="id"/> <column name="description"/> </column-names> </step> |
pdflatex
(I=1, O=1) Erstellt eine PDF-Datei aus der als LaTeX-Quelle vorliegenden Eingabedatei.
Beispiel:
1: 2: | <step type="pdflatex"> </step> |
databaseimport
(I=n, O=0) Importiert die XML-Dateien im Imexporter-Datenformat in die Datenbank.
Parameter:
description-file
: ImportdefinitionBeispiel:
1: 2: 3: | <step type="databaseimport"> <description-file>importdef.xml</description-file> </step> |
databaseexport
(I=0, O=1) Exportiert aus der Datenbank in eine XML-Datei im Imexporter-Datenformat.
Parameter:
description-file
: ExportdefinitionBeispiel:
1: 2: 3: | <step type="databaseexport"> <description-file>exportdef.xml</description-file> </step> |
fetchassets
(I=1, O=1) Holt Assets aus dem EAS. Die Eingabe-XML-Datei muss dazu vorher mit EAS-Annotationen versehen werden.
Beispiel:
1: 2: | <step type="fetchassets"> </step> |
archive
(I=n, O=1) Verpackt die Dateien in einem Archiv.
Parameter:
cleanup
: Wenn gesetzt, werden die verpackten Dateien gelöscht, andernfalls werden sie neben dem Archiv an den nächsten Schritt weitergeleitet.format
: Ausgabeformat, mögliche Werte sind zip
, tar.gz
, tar.bz2
, tar.xz
und tar.lzma
.files
: Liste der zu verpackenden Dateien:
input
(optional): die Eingabedateienmatch
(optional, kann mehrfach verwendet werden): weitere Dateien, die auf das angegebene Pattern passenbase-pattern
(optional, ab Version 5.0.2): Name des im Archiv verwendeten Verzeichnisses. Wenn nicht angegeben, wird der temporäre Verzeichnisname verwendet. Durch Setzen eines leeren Wertes kann aber auch explizit auf das Verzeichnis im Archiv verzichtet werden.Beispiel:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: | <step type="archive"> <cleanup/> <format>zip</format> --> <files> <input/> <match>asset-*</match> </files> <!-- "base-pattern" requires easydb-server >= 5.0.2 --> <base-pattern>export-%{basename}</base-pattern> </step> |
rename
(I=n, O=m) Benennt die Eingabedateien um.
Parameter:
pattern
: Ausgabedateiname, dabei werden folgende Platzhalter ersetzt:
%i
: fortlaufende Nummer, mit 0
beginnend%n
: fortlaufende Nummer, mit 1
beginnend%e
: Dateierweiterung der Eingabedatei, ohne Punkt%{<variable>}
: Eingabe-Variable, z.B. %{id}
oder %{basename}
Gibt es mehr als eine Eingabedatei, muss eine fortlaufende Nummer verwendet werden. Die einzelnen Platzhalter können jeweils noch mit Modifikatoren erweitert werden:
%4n
: gibt die Nummer mit einer Breite von 4 Zeichen rechtsbündig aus, der zusätzliche Platz wird mit Leerzeichen gefüllt.%02n
: gibt die Nummer mit einer Breite von 2 Zeichen rechtsbündig aus, der Platz wird mit Nullen (0
) aufgefüllt.Beispiel:
1: 2: 3: | <step type="rename"> <pattern>export-%{basename}-%04n.%e</pattern> </step> |