Das Konzept von XProc

XProc ist eine in XML verfasste Sprache, welche einen Satz an Befehlen für eine Ablaufsteuerung zur Erzeugung von XML-orientierten Workflows bereitstellt. Ein XProc-Dokument wird von einem Prozessor gelesen, der diese Befehle dann sequentiell abarbeitet. Die Sprache bedient sich mehrerer Techniken, welche dann innerhalb einer Pipeline der Reihe nach (als sogenannte Steps, also Schritte) ausgeführt werden.

 

Abb. Einfaches Beispiel einer XProc-Pipeline

Abb. Einfaches Beispiel einer XProc-Pipeline

So verfügt XProc zum einen über eine gewisse interne Menge an Möglichkeiten, XML zu manipulieren bzw. zu verarbeiten, zum anderen aber auch über die Möglichkeit, externe Technologien (z.B. eine XSLT-Transformation oder Schematron-Validierungen) als einzelne Verarbeitungsschritte einzugliedern.

Aufbau eines XProc-Dokuments

<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
   <p:input port="source">
      <p:inline>
         <doc>Hallo Welt!</doc>
      </p:inline>
   </p:input>
   <p:output port="result"/>
   <p:identity/>
</p:declare-step>

Der Code-Ausschnitt zeigt den typischen Aufbau eines XProc-Dokuments. Die verwendeten Funktionen sind hier noch zu vernachlässigen und werden in den späteren Kapiteln erläutert.

Das Wurzelelement eines XProc-Dokuments kann entweder <p:declare-step> oder <p:pipeline> sein. Wobei letzteres eine vereinfachte Variante ist, da hier weniger Angaben gemacht werden müssen. Auf die genauen Unterschiede der beiden Wurzelelemente wird ebenfalls später Bezug genommen. Jedoch sei an dieser Stelle schon gesagt, dass <p:declare-step> den Vorzug bekommt, da der Benutzer hierbei größere Kontrollmöglichkeiten hat.

<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">

Beim Anlegen des Wurzelelements <p:declare-step> werden die entsprechenden XProc-Namensräume deklariert und die Versionsnummer von XProc wird angegeben.

<p:input port="source">
   <p:inline>
      <doc>Hallo Welt!</doc>
   </p:inline>
</p:input>

Mit <p:input> wird ein Eingangsport definiert. Dem Attribut “port“ muss ein Wert übergeben werden, denn dieser beschreibt den Namen des <p:input>-Ports, welcher bei weiteren Verarbeitungsschritten relevant sein kann. Per Konvention wird hier “source“ verwendet. Mittels <p:inline> können eigene Dokumente im XProc-Stylesheet direkt geschrieben werden. Im aktuellen Beispiel wird ein <doc>-Element geöffnet, welches den klassischen “Hallo Welt“-Spruch beinhaltet.

<p:output port="result"/>
<p:identity/>    

Durch <p:output> wird der Ausgangsport angelegt. Hier wird das Ende der Pipeline definiert. Dem Attribut “port“ wird, wie bei Input, ein Name zugewiesen. Der per Konvention vorgegebene Wert “result“ wird eingetragen. <p:identity> sorgt dafür, dass der Inhalt vom Input-Port kopiert und direkt ausgegeben wird. Ein Ausführen dieses XProc-Skripts ergibt folgendes Resultat:

<doc xmlns:c="http://www.w3.org/ns/xproc-step">Hallo Welt!</doc>
Tipp der data2type-Redaktion:
Zum Thema XProc bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: