# XProc

XProc (von englisch XML Processing) ist eine vom W3C standardisierte XML-Sprache zur Definition von Verarbeitungsketten für XML-Dokumente (sogenannter XML-Pipelines). Sie ist seit Mai 2010 W3C-Empfehlung und dient dem vermehrten Bedarf der Massenverarbeitung von Formaten, die auf XML basieren, wie beispielsweise docx.

## Nutzen

Bei der Verarbeitung von XML-Dokumenten folgen typischerweise verschiedene Schritte aufeinander. Beispielsweise könnte bei der Veröffentlichung einer Bedienungsanleitung das DocBook-Quelldokument zuerst gegen ein RelaxNG-Schema validiert und anschließend mit XSLT in eine HTML- und eine PDF-Version umgewandelt werden. Solche Verarbeitungsketten können mit XProc – unabhängig von der verwendeten Software und plattformneutral – als XML-Dokumente beschrieben werden. XProc-Prozessoren können auf der Basis von XProc-Dokumenten die beschriebenen Verarbeitungsketten abarbeiten.
Dies ist auch nützlich, wenn auf eine große Menge an identischen XML-Dokumenten eine oder weitere Operation(en), wie zum Beispiel die Umbenennung eines XML-Elementes, vorgenommen werden sollen.

## Aufbau einer XProc-Pipeline

Der Code einer XProc-Pipeline wird in XML-Syntax beschrieben, welche dann von einem Interpreter eingelesen und verarbeitet wird. Ausgehend vom Konzept eines wohlgeformten XML-Dokumentes besitzt eine XProc-Pipeline immer ein Wurzelelement. Innerhalb von diesem Wurzelelement ist dem Dokument mindestens einem der drei XProc-Namensräume zugeordnet. Zentrale Elemente der Pipeline sind die Schritte, welche, vom Wurzelelement umschlossen, beschrieben und sequentiell verarbeitet werden. Eine Pipeline kann 0 oder mehr XML-Dokumente einlesen und 0 oder mehr XML-Dokumente ausgeben.

### Schritte (Steps)

Schritte oder auch Steps sind Zentrale Elemente einer durch XProc beschriebenen XML-Pipeline. Es gibt drei Arten von Schritten:
* Atomare Schritte (Atomic Steps)
    Diese führen genau eine Verarbeitung bzw. Operation aus, wie zum Beispiel das Umbenennen oder Löschen eines Elementes innerhalb des XML-Dokumentes.
* Zusammengesetzter Schritt (Compound Step)
    Schritte können auch zusammengefügt werden, was dann als Zusammengesetzter Schritt (Compound Step) bezeichnet wird. Eine Pipeline, die ja auch nur auf einer bestimmten Anzahl von Schritten basiert, wird demzufolge in eine andere integriert, was auch als Subpipeline bezeichnet wird.
    Mithilfe von diesem Schritt lassen sich komplexere Strukturen wie unter anderem Schleifen konzipieren.
* Mehrfachschritte (Multi-Container Steps)
    Mithilfe dieser Schritte ist die Erstellung parallel definierter Subpipelines möglich, wodurch unter anderem Konstrukte zur Fehlerkontrolle beschrieben werden können.

### Ports

Eingaben und Ausgaben der Schritte einer XProc-Pipeline werden mithilfe von Ports realisiert. Primary Ports dienen zur automatisierten Verbindung der einzelnen Schritte untereinander oder dieser mit der Pipeline (beim ersten oder letzten Schritt) und müssen nicht unbedingt benannt werden. Es wird von einer impliziten Angabe der Primary Ports gesprochen, wenn diese automatisiert verwendet werden. Demzufolge handelt es sich bei dem gegenteiligen Fall um eine explizite Benennung, d. h. der Primary Port wird angegeben. Die Ports haben dabei eindeutige Namen, wie zum Beispiel source als primären Eingabeport (input port) oder result als primären Ausgabeport (output port). Ein weiterer Port wäre unter anderem schema für XML-Schema-Dateien.

### Namensräume

XProc verwendet intern drei Namensräume. Der Namensraum http://www.w3.org/ns/xproc (per Konvention mit dem Präfix p:) beschreibt das XML-Vokabular von XProc. Der Namensraum http://www.w3.org/ns/xproc-step (per Konvention mit dem Präfix c:) wird für Dokumente verwendet, die innerhalb einer Verarbeitungskette als definierte Ein- oder Ausgabe einzelner Schritte erzeugt werden – unabhängig von den Namensräumen der verarbeiteten externen Dokumente. Schließlich dient der Namensraum http://www.w3.org/ns/xproc-error (per Konvention mit dem Präfix err:) der Verarbeitung von Fehlern.

## Beispiel

Dies ist eine Pipeline, die aus zwei Teilen bzw. atomaren Schritten besteht, XInclude und Validate. Die Pipeline selbst hat zwei Eingaben, source (ein Quelldokument) und schema (eine Liste von W3C XML-Schemas). Der XInclude-Schritt liest den Pipeline-Input source aus und produziert ein Ergebnisdokument. Der Validate-Schritt liest die Pipeline-Eingabe schemas und das Ergebnis des XInclude-Verarbeitungsschrittes und produziert ein Ergebnisdokument. Das Ergebnis der Validierung, result, ist das Ergebnis der Verarbeitungskette.
Dieselbe Pipeline kann verkürzt formuliert werden, wenn deren Primary Ports implizit angegeben sind:

## Implementierungen

* Calabash von Norman Walsh
* MorganaXProc
* EMC Documentum XProc Engine
* QuiXProc von Innovimax
* yax - eine XProc (XML Pipeline) Implementierung. Noch basierend auf einem XProc- Arbeitsentwurf
* antillesXML kostenlose XML-Toolbox mit GUI und eingebautem Calabash