XProc-Steps
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
p:compare
<p:declare-step type="p:compare">
<p:input port="source" primary="true"/>
<p:input port="alternate"/>
<p:output port="result" primary="false"/>
<p:option name="fail-if-not-equal" select="'false'"/> <!-- boolean -->
</p:declare-step>
Der <p:compare>-Step vergleicht zwei Dokumente auf ihre “Gleichheit“. Sind beide Dokumente identisch, wird der boolsche Wert “true“ als Rückgabewert ausgegeben, ansonsten “false“.
Beispiel
Im Beispiel werden zwei Dokumente miteinander verglichen.
<?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" name="Pipeline">
<p:input port="source">
<p:document href="filmsammlung.xml"/>
</p:input>
<p:input port="alternate">
<p:document href="filmsammlung_2.xml"/>
</p:input>
<p:output port="result"/>
<p:compare name="Vergleiche" fail-if-not-equal="false">
<p:input port="source">
<p:pipe port="source" step="Pipeline"/>
</p:input>
<p:input port="alternate">
<p:pipe port="alternate" step="Pipeline"/>
</p:input>
</p:compare>
<p:identity>
<p:input port="source">
<p:pipe port="result" step="Vergleiche"/>
</p:input>
</p:identity>
</p:declare-step>
Im vorliegenden Beispiel werden die Dokumente “filmsammlung.xml“ und “filmsammlung_2.xml“ miteinander verglichen. Der Pipeline wird im Wurzelelement <p:declare-step> ein Name übergeben (“Pipeline“), um sie später mit den entsprechenden Ports im <p:compare>-Step verbinden zu können. Der <p:compare>-Step bekommt den String “Vergleiche“ als Namen zugewiesen und “fail-if-not-equal“ auf “false“ gesetzt. Dies hat zur Folge, dass als Resultat entweder “true“ oder “false“ ausgegeben wird. Ansonsten würde ein dynamischer Fehler (bei ungleichen Dokumenten) vom XProc-Prozessor ausgegeben werden.
Die beiden Input-Ports innerhalb von <p:compare> werden, wie eingangs schon erläutert, mit den äußeren Input-Ports via <p:pipe> verbunden. Um dies zu realisieren benötigt das Attribut “step“ den Namen des zu verknüpfenden Steps (im Beispiel also “Pipeline“). Da <p:compare> nun mit den entsprechenden Dokumenten versorgt wird, kann der Prozess durchgeführt werden. Das Ergebnis wird von <p:identity> gelesen und ausgegeben.
Im Falle eines Unterschieds unter den Dokumenten würde das Resultat folgendermaßen aussehen:
<c:result>false</c:result>
Tipp der data2type-Redaktion: Zum Thema XProc bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |