Pipelines sind als das primäre Grundkonzept von XProc zu sehen. Eine Pipeline hat immer einen Eingang und am Ende einen Ausgang aus welchem das Ausgabedokument produziert wird. Die Pipeline an sich baut sich aus einzelnen Steps, Schritten zusammen welche als Teilverarbeitungsschritte zu sehen sind.

Abb. Pipeline
Eine Pipeline kann sehr lang und komplex werden. Es existieren zwei Möglichkeiten sie zu erstellen. Entweder durch den Einsatz von <p:declare-step> oder <p:pipeline>.
Mit Hilfe von <p:declare-step> werden Pipelines (oder Steps) angelegt.
<p:declare-step name? = NCName type? = QName psvi-required? = boolean xpath-version? = string exclude-inline-prefixes? = prefix list version? = string> (p:input | p:output | p:option | p:log | p:serialization)*, ((p:declare-step | p:pipeline | p:import)*, subpipeline)? </p:declare-step
Wie in der Abbildung zu sehen ist, kann ein <p:declare-step> mit etlichen Einstellungen versehen werden. Das Element <p:declare-step> wird später nochmals aufgegriffen und die einzelnen Attribute näher erläutert. Relevant ist zunächst das durch das Attribut “name“ der gesamten Pipeline ein Name zugewiesen werden kann (dieser Aspekt ist wichtig für das Verknüpfen von Steps).
Im Attribut “version“ wird die aktuell eingesetzte Version von XProc eingetragen. Dies ist für den verwendeten Prozessor (z.b. Calumet) von Bedeutung.
Eine Pipeline wird in XProc wie ein Step behandelt, da sie z.B. in einer anderen Pipeline ebenfalls als Step in Erscheinung treten kann.
Beispiel
Im folgenden Beispiel wird eine triviale Pipeline mit Hilfe von <p:declare-step> angelegt.
<?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" sequence="true"/> <p:output port="result" sequence="true"/> <p:identity/> </p:declare-step
Zunächst werden die beiden XProc Namensräume mit ihren Prefixen “p:“ und “c:“ angelegt. Im Attribut “version“ wird der Wert “1.0“ angegeben. Es wird also XProc mit der Versionsnummer 1.0 verwendet. Abschliessend wird der Pipeline ein Name “TestPipeline“ zugewiesen. Nach der Angabe eines Input- und Output-Ports jeweils mit dem Attribut “sequence=true“.
Ist Sequence nicht “true“, würde ein Fehler in der in der Abbildung gezeigten Pipeline entstehen. Eine Sequence bedeutet das mehrere Dokumente (oder auch keine) am jeweiligen Input bzw. Output Port geladen werden können. Steht der Wert auf “false“ wird genau ein Dokument erwartet. Im Beispiel wird nichts geladen, so würde bei “sequence=false“ ein Fehler entstehen. Per Default steht dieser Wert auf “false“, muss also explizit auf “true“ geschaltet werden.
Danach wird ein <p:identity> Step ausgeführt. Somit ist eine Pipeline erfolgreich beschrieben worden. Als Resultat wird lediglich der Inhalt vom Input-Port (Im Beispiel also nichts) ausgegeben. In der vorliegenden Arbeit wurden fast alle Pipelines ausschliesslich mit <p:declare-step> definiert.
Durch <p:pipeline> können Pipelines in XProc angelegt werden.
<p:pipeline name? = NCName type? = QName psvi-required? = boolean xpath-version? = string exclude-inline-prefixes? = prefix list version? = string> (p:input | p:output | p:option | p:log | p:serialization)*, (p:declare-step | p:pipeline | p:import)*, subpipeline </p:pipeline>
Auf den ersten Blick wirkt <p:pipeline> baugleich zu <p:declare-step>, da es die gleichen Attribute und Angaben besitzt. Der Unterschied zu <p:declare-step> ist, das <p:pipeline> automatisch einen primären Input-Port namens “source“, einen Parameter-Port namens “parameter“ und einen primären Output-Port namens “result“ mitbringt. Diese müssen also nicht mehr manuell angegeben werden. Da diese Ports von den meisten Steps benötigt werden, ist es also eine Erleichterung (da weniger Schreibarbeit zu tätigen ist).
Beispiel
Im folgenden Beispiel wird dieselbe triviale Pipeline aus dem vorherigen Beispiel (siehe <p:declare-step>) mit Hilfe von <p:pipeline> angelegt.
<?xml version="1.0" encoding="UTF-8"?> <p:pipeline xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0" name="TrivialePipeline"> <p:identity/> </p:pipeline>
Da es bei <p:pipeline> nicht notwendig ist, die Standard Ports zu definieren, reicht die Angabe des gewünschten Steps (<p:identity>) aus. Allerdings benötigt diese Variante einen Input (also ein Dokument z.B.), da die vordefinierten Ports von <p:pipeline> den Wert Sequence auf “false“ stehen haben. Dies würde bei einigen Prozessoren ansonsten zu einem Fehler führen (Bei “Sequence=False“ wird genau ein Dokument erwartet).
| << zurück | vor >> |