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, das 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. Solte 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>