Eigene Steps entwickeln

Um in XProc eigene Steps zu entwickeln, existieren verschiedene Ansätze. Mit Hilfe von <p:declare-step> können Pipelines entwickelt werden. Pipelines selbst werden in XProc als Steps betrachtet.

Eine Pipeline als Step

Die folgende Pipeline liest einen Ordner ein und gibt am Ende die darin enthaltenen Dateinamen aus. Als Eingabewert wird der Name des Ordners benötigt.

<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step type="bsp:filenames" xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" xmlns:bsp="http://www.beispiel.de" version="1.0">
  <p:input port="Path"/>
  <p:output port="result" sequence="true"/>
  <p:directory-list include-filter=".*xml">
    <p:with-option name="path" select="/path"/>
  </p:directory-list>
  <p:filter select="//c:file"/>
</p:declare-step>

Der Step <p:directory-list> verwendet als Ordnername den Rückgabewert des XPath-Ausdrucks “/path“. Das bedeutet, dass der Step die Angabe des Ordners im folgenden Format erwartet:

<path>Ordnername</path>

Diese Angabe ist am Input-Port “Path“ zu machen. Abschließend wird durch <p:filter> die Ausgabe von <p:direcory-list> auf die Angabe der Dateinamen beschränkt.

Damit die Pipeline als Step verwendet werden kann, benötigt sie einen Namen und einen eigenen Namensraum (eigene Steps dürfen nicht im XProc-Namensraum sein). Dies wird im Attribut “type“ von <p:declare-step> definiert. Der Name des Steps ist “filenames“ mit dem Namensraumpräfix “bsp“. Der Namensraum wird mittels “xmlns:bsp="http://www.beispiel.de"“ angegeben. Im folgenden Code-Beispiel wird die Pipeline innerhalb einer anderen Pipeline als Step eingesetzt:

<?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" xmlns:bsp="http://www.beispiel.de" version="1.0">
  <p:output port="result" sequence="true"/>
  <p:import href="filenames.xpl"/>
  <bsp:filenames>
    <p:input port="Path">
      <p:inline>
        <path>input</path>
      </p:inline>
    </p:input>
  </bsp:filenames>
  <p:identity/>
</p:declare-step>

Um den neuen Step einsetzen zu können, muss zunächst der Namensraum “beispiel“ angegeben werden. Weiterhin wird die Datei, die den Step beinhaltet (“filenames.xml“) via <p:import> geladen.

Jetzt kann der Step durch das Voranstellen seines Namensraumpräfixes “bsp“ bedient werden. Seinem Input-Port “Path“ wird durch die Angabe eines <path>-Elements in einem <p:inline>-Element eine entsprechende Ordnerangabe (“input“) gegeben. Der Output (also die Dateinamen) wird an <p:identity> weiter- und ausgegeben.

Steps selbst programmieren

Möchte man einen Step implementieren, der sich nicht durch XProc-Mittel realisieren lässt, so besteht die Option, ihn selbst zu programmieren. Da der Calabash-Quellcode (in Java geschrieben) offen im Netz steht, sind eigene Erweiterungen möglich.

Calabash selbst stellt eine Reihe eigener Step-Entwicklungen bereits zur Verfügung. Diese befinden sich im sogenannten “Calabash extension namespace“. Diese Steps lassen sich nur mit dem Calabash-Prozessor verwenden, da sie von anderen Implementierungen nicht unterstützt werden.

Ob eigene Entwicklungen Teil einer offiziellen Veröffentlichung eines Prozessors werden, lässt sich nicht abschätzen und ist von der jeweiligen Qualität und dem Nutzen des Steps abhängig. Eine weitere Möglichkeit wäre einen Vorschlag direkt an das W3C zu senden .

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XProc bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: