Pipelines
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. XProc-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 durch <p:pipeline>.
p:declare-step
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 dem Code-Beispiel 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 werden näher erläutert. Relevant ist zunächst, dass 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 gezeigten Pipeline entstehen. Eine Sequence bedeutet, dass 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 ausschließlich mit <p:declare-step> definiert.
p:pipeline
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, dass <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 z.B. ein Dokument), 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 >> |
Tipp der data2type-Redaktion: Zum Thema XProc bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |