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: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 äusseren “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>