# XML-Pipeline

Eine XML-Pipeline wird gebildet, wenn mehrere XML- (Extensible Markup Language)-Prozesse wie Transformationen und Validierungen miteinander verbunden werden. Zum Beispiel können zwei Transformationen, T$_1$ und T$_2$, so miteinander verbunden werden, dass das Eingangsdokument von T$_1$ transformiert wird und dann die Ausgabe von T$_1$ als Eingangsdokument von T$_2$ gilt.

## Lineare Operationen

Einfache Pipelines, wie solche, die oben beschrieben werden, werden als linear bezeichnet; ein einzelnes Eingangsdokument durchläuft immer dieselben Schritte einer Transformation, um letztendlich ein einziges Ausgangsdokument zu erstellen.
Hier sind einige Beispiele an Operationen, die in einer linearen Pipeline vorkommen können:
* Identitätstransformation – erzeugt eine identische Kopie des Inputs als Output
* Transform – führt eine Transformation des Eingangsdokuments unter Benutzung einer spezifischen XSLT-Datei durch. Version 1.0 oder 2.0 sollten spezifiziert werden.
* Rename – benennt Elemente oder Attribute um, ohne den Inhalt zu modifizieren
* Replace – ersetzt Elemente oder Attribute
* Insert – fügt ein neues Datenelement zum Ausgabe-Stream an einem bestimmten Punkt hinzu
* Delete – entfernt ein Element oder Attribut
* Split – teilt ein einziges XML-Dokument in einzelne Dokumente auf
* Wrap – hüllt Elemente in weitere Elemente ein
* Reorder – ändert die Reihenfolge von Elementen

## Nicht-linear

Nicht-lineare Operationen von Pipelines sind zum Beispiel:
* Conditionals – dabei wird eine gegebene Transformation ausgeführt, wenn eine bestimmte Bedingung erfüllt ist, ansonsten wird eine andere Transformation ausgeführt
* Schleifen – dabei wird eine Transformation an jedem Knoten einer Knotenmenge, die aus einem Dokument oder einer Transformation ausgewählt wird, solange ausgeführt, bis eine bestimmte Bedingung falsch wird.
* Tees – dabei werden mehrere Transformationen an einem Dokument ausgeführt, die potentiell parallel verlaufen
* Aggregations – dabei werden mehrere Dokumente zu einem einzigen Dokument zusammengeführt
* Exception Handling – Fehler während des Vorgangs führen dazu, dass eine alternative Pipeline ausgeführt wird
Einige Standards kategorisieren Transformationen auch als Macro- (Änderungen, die die gesamte Datei betreffen) oder Micro-Transformationen (solche, die nur ein Element oder Attribut betreffen)

## XML-Pipeline-Sprachen

XML-Pipeline-Sprachen werden dazu genutzt, Pipelines zu definieren. Ein Programm, das in einer XML-Pipeline-Sprache geschrieben ist, wird von Software implementiert, die auch unter der Bezeichnung XML Pipeline Engine bekannt ist. Diese erzeugt die Vorgänge, verbindet diese miteinander und führt schließlich die gesamte Pipeline aus. Existierende XML-Pipeline-Sprachen sind zum Beispiel:
* XProc: An XML Pipeline Language ist eine W3C-Empfehlung.
* W3C XML Pipeline Definition Language wird in einer W3C-Note spezifiziert; Sun liefert die Implementation.
* W3C XML Pipeline Language (XPL) Version 1.0 (Entwurf) wird in einer W3C-Submission spezifiziert und in einer Komponente des Orbeon Presentation Servers OPS (jetzt benannt als Orbeon Forms). Diese Spezifikation bietet eine Implementation einer früheren Version der Sprache. XPL erlaubt die Deklaration komplexer Pipelines mit Conditionals, Loops, Trees, Aggregations und Sub-Pipelines.
* Cocoon-Sitemaps bieten, neben anderen Funktionen, die Deklaration von XML-Pipelines. Cocoon-Sitemaps sind eine der früheren Implementationen des Konzeptes der XML-Pipeline.
* smallx XML Pipelines werden vom smallx-Projekt genutzt
* ServingXML definiert Vokabular zur Darstellung von flat-XML-, XML-flat-, flat-flat- und XML-XML-Transformationen in Pipelines.

## Pipe-Granularität

Unterschiedliche XML-Pipeline-Implementationen unterstützen unterschiedliche Granularitäten des Ablaufs:
* Dokument: Komplette Dokumente durchlaufen die Pipe als atomare Einheiten. Ein Dokument kann nur an einem Platz zur Zeit sein, obwohl durchaus manchmal mehrere Dokumente in einer Pipe zur gleichen Zeit sein können.
* Event: Einzelne Teile des Dokumentes können, ausgelöst durch Ereignisse (engl. events), parallel und gleichzeitig durch verschiedene Pfade laufen.