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:try

<p:try name? = NCName>
   (p:variable*,
    p:group,
    p:catch)
</p:try>

Innerhalb eines <p:try>-Steps ist sichergestellt, dass eventuell auftretende dynamische Fehler vor einem Abbruch abgefangen werden. Die gewünschte Subpipeline wird innerhalb eines <p:group>-Steps zusammengefasst und ausgeführt. Tritt nun ein Fehler auf, wird dieser von einem sogenannten <p:catch>-Step aufgefangen.

<p:catch name? = NCName>
   ((p:output |
    p:log)*,
    subpipeline) 
</p:catch>

Anstatt eines Abbruchs wird nun die Subpipeline innerhalb des <p:catch>-Steps ausgeführt. Dies kann je nach Situation eine entsprechend formulierte Fehlerausgabe sein oder auch ein alternativer Weg mit weiteren Steps.

Beispiel

Im folgenden Beispiel wird bewusst ein Fehler produziert, um somit in die Subpipeline von <p:catch> zu gelangen.

<?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">
      <p:document href="filmsammlung.xml"/>
   </p:input>
   <p:output port="result"/>
   <p:try>
      <p:group>
         <p:validate-with-xml-schema assert-valid="true" mode="strict">
            <p:input port="schema">
               <p:document href="beispiel_5_xmlschema.xsd"/>
            </p:input>
         </p:validate-with-xml-schema>
      </p:group>
      <p:catch>
         <p:identity>
            <p:input port="source">
               <p:inline>
                  <c:result>Das Dokument ist leider nicht valide.</c:result>
               </p:inline>
            </p:input>
         </p:identity>
      </p:catch>
   </p:try>
</p:declare-step>

Die Subpipeline im <p:group>-Element entspricht dem vorherigen Beispiel von <p:validate-with-xml-schema>. Falls der Step einen Fehler produziert, das ursprüngliche Dokument also nicht valide gegen die zugrundeliegende Schemadatei ist, wird der <p:catch>-Step aufgerufen und seine Subpipeline ausgegeben. Im Beispiel eine <p:inline>-Ausgabe mit einem erklärenden Text. Sollte das Dokument also nicht “valide“ sein, wird folgende Ausgabe erzeugt:

<c:result xmlns:c="http://www.w3.org/ns/xproc-step">Das Dokument ist leider nicht valide.</c:result>
Tipp der data2type-Redaktion:
Zum Thema XProc bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: