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-schematron

<p:declare-step type="p:validate-with-schematron">
   <p:input port="parameters" kind="parameter"/>
   <p:input port="source" primary="true"/>
   <p:input port="schema"/>
   <p:output port="result" primary="true"/>
   <p:output port="report" sequence="true"/>
   <p:option name="phase" select="'#ALL'"/> <!-- string -->
   <p:option name="assert-valid" select="'true'"/> <!-- boolean -->
</p:declare-step>

Der Step <p:validate-with-schematron> ermöglicht die Validierung des Eingangsdokuments gegen ein Schematron-Dokument. Er verfügt über drei Input-Ports. In “source“ wird das zu validierende XML-Dokument angegeben. Im Input-Port “schema“ wird das Schematron-Dokument angegeben. Der Port mit der Bezeichnung “parameters“ bezieht sich auf externe Schematron-Variablen.

Der Output-Port “result“ liefert eine Kopie des Input-Ports und der Port “report“ Schematron-bezogene Informationsausgaben.

Die Option “phase“ ermöglicht den Benutzer festzulegen, mit welcher Schematron-Phase begonnen werden soll. Ist “assert-valid“ auf “true“ gesetzt, wird eine Fehlerausgabe erzeugt, falls ein Validierungsfehler auftritt und der Prozess beendet. Wenn der Wert auf “false“ gesetzt ist, wird auch bei einem Validierungsfehler das Ursprungsdokument komplett ausgegeben und Schematronmeldungen auf den “report“-Port (sofern er angelegt wurde) geschickt.

Beispiel

Im folgenden Beispiel wird das bekannte Eingangsdokument mit einem Schematron-Schema validiert. Zunächst das (sehr triviale) Schematron-Dokument:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern>
   <rule context="Film">
      <assert test="Titel">Kein Titel vorhanden</assert>
      <assert test="Genre">Kein Genre vorhanden</assert>
      <assert test="Regisseur">Kein Regisseur vorhanden</assert>
      <assert test="Produzent">Kein Produzent vorhanden</assert>
      <assert test="Cast">Kein Cast vorhanden</assert>
      <assert test="Laenge">Keine Länge vorhanden</assert>
      <assert test="Autor">Kein Autor vorhanden</assert>
   </rule>
</pattern>
</schema>

Das vorliegende Schematron-Schema überprüft jedes im Dokument vorkommende “Film“-Element auf das Vorhandensein diverser Kind-Elemente. Falls eins der Elemente nicht vorhanden sein sollte, wird eine entsprechende Meldung ausgegeben (z.B. Kein Titel vorhanden). Diese Meldungen sollen nach der XProc-Prozedur auf den “report“-Kanal geschrieben 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" name="Schematron">
   <p:input port="source">
      <p:document href="filmsammlung.xml"/>
   </p:input>
   <p:output port="result" primary="true"/>
   <p:group>
      <p:validate-with-schematron assert-valid="false" name="SchematronBeispiel">
         <p:log port="report" href="log.log"/>
         <p:input port="schema">
            <p:document href="beispiel_8_schematron.sch"/>
         </p:input>
         <p:input port="parameters">
            <p:empty/>
         </p:input>
      </p:validate-with-schematron>
   </p:group>
</p:declare-step>

Die Option “assert-valid“ sollte auf “false“ gesetzt werden, da bei “true“ der XProc-Prozessor im Falle eines Schematron-Validierungsfehlers mit einem dynamischen Fehler abbrechen würde. Dies würde dazu führen, dass keine “report“-Ausgabe aus dem Schematron-Schema auf den “report“-Port geschrieben werden würde. Im <p:input>-Port wird das Schematron-Dokument angegeben. Der zweite Input-Port “parameters“ benötigt eine Angabe. Im Beispiel werden keine Parameter-Angaben benötigt, also wird hier <p:empty> eingetragen. Ein Durchführen dieses Stylesheets würde im Fehlerfall zunächst das eigentliche Eingangsdokument auf dem “result“-Port ausgeben und die jeweiligen Meldungen aus dem Schematron-Dokument auf dem “report“-Port. Letztere werden durch <p:log> abgefangen und in eine Datei namens “log.log“ geschrieben.

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