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:validate-with-xml-schema

<p:declare-step type="p:validate-with-xml-schema">
   <p:input port="source" primary="true"/>
   <p:input port="schema" sequence="true"/>
   <p:output port="result"/>
   <p:option name="use-location-hints" select="'false'"/> <!-- boolean -->
   <p:option name="try-namespaces" select="'false'"/> <!-- boolean -->
   <p:option name="assert-valid" select="'true'"/> <!-- boolean -->
   <p:option name="mode" select="'strict'"/> <!-- "strict" | "lax" -->
</p:declare-step>

Wie der Name dieses Steps schon andeutet, wird hier ein XML-Dokument gegen ein XML Schema-Dokument validiert. Er benötigt einen Input-Port “source“, welcher das zu validierende XML-Dokument liefert, sowie einen weiteren Input-Port mit der Bezeichnung “schema“ mit Angabe der XML Schema-Daten. Als Ausgabe-Port dient der per Konvention übliche Output-Port mit dem Namen “result“.

Die boolschen Optionen “try-namespace-hints“ und “use-location-hints“ teilen dem Schema-Prozessor mit, wie er sich in Bezug auf das Auffinden von weiteren Schema-Daten, die nicht im “schema“-Port angegeben wurden, verhalten soll. Ist “use-location-hints“ auf “true“ gesetzt, so wird der Prozessor versuchen, sämtlichen Hinweisen zu weiteren Schema-Dokumenten, die in den Schemas im “source“-Port angegeben wurden, nachzugehen. Ist “try-namespace-hints“ auf “true“, also wahr, gesetzt, wird der Prozessor auch hier versuchen, angegebene Namensräume aufzulösen, um weitere Schema-Dokumente ausfindig machen zu können. Sind die Optionen auf “false“, also falsch, gesetzt wird der Prozessor nichts tun, um weitere Schema-Dokumente zu finden.

Die Option “assert-valid“ legt fest, wie XProc sich im Bezug zur Fehlerbehandlung verhalten soll. Steht der Wert auf “true“, so wird bei einem Validierungsfehler ein entsprechender Bericht erzeugt und durch den Output-Port ausgegeben. Wenn “assert-valid“ auf “false“ gesetzt ist, so wird bei einem Fehler keine Fehlerausgabe erstellt. In diesem Moment ist das Verhalten von XProc abhängig von der jeweils zugrundeliegenden Implementierung des verwendeten Prozessors. Unterstützt dieser PSVI (Post-Schema-Validation-Infoset), so wird eine Ausgabe mit zusätzlichen Informationen erstellt, die Rückschlüsse auf die Validierungsfehler geben. Wird PSVI nicht unterstützt, so wird das eingelesene Dokument ohne Zusätze ausgegeben.

Die “mode“-Option gibt an, wie sich der Prozessor bei der Validierung gegen das Schema-Dokument verhalten soll. Bei “strict“ müssen sämtliche Elemente im XML-Dokument definiert sein und Namensräume korrekt angegeben werden. Eine Validierung, die auf “relaxed“ (“lax“) gesetzt ist, ist weniger streng, da das Fehlen einer Dokument-Angabe nicht überprüft wird. In beiden Fällen jedoch muss das Dokument “valide“ sein.

Beispiel

Im folgenden Beispiel soll die bekannte “filmsammlung.xml“ mit einem entsprechenden XML Schema-Dokument validiert werden.

<?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:document>
   </p:input>
   <p:output port="result"/>
   <p:validate-with-xml-schema assert-valid="true" mode="strict">
      <p:input port="schema">
         <p:document href="xmlschema.xsd"></p:document>
      </p:input>
   </p:validate-with-xml-schema>
</p:declare-step>

Im Beispiel wird eine strikte Validierung durchgeführt, die, wenn ein Fehler auftritt, eine entsprechende Fehlerausgabe erzeugt. Das XML Schema-Dokument (“xmlschema.xsd“) wird innerhalb des <p:validate-with-schema> im <p:input>-Port angegeben. Das Resultat wird in den “result“-Port geschrieben.

Tipp der data2type-Redaktion:
Zum Thema XProc bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: