Schematron: XML mit Präzision

Die Realisierung technischer Schnittstellen auf Basis der XML hat sich einen festen Platz erobert. Mithilfe aktueller Werkzeuge und Frameworks sind hervorragende Möglichkeiten geschaffen, Geschäftspartnern die Anbindung an die eigene IT-Infrastruktur zu ermöglichen. Die automatisierte Abwicklung von Geschäftsprozessen erfolgt dabei nicht selten auf der Basis vertraglicher Vereinbarungen. Die Messlatte für die Qualität der betroffenen Schnittstellen liegt damit entsprechend hoch. Im Folgenden soll der Frage nachgegangen werden, wie Integritätsbedingungen einer XML-Schnittstelle zielführend erfasst und überprüft werden können.

Im allgemein akzeptierten Kontext der Webservice-Technologien bilden WSDL und SOAP sowie XML-Schema die Eckpfeiler einer jeden XML-Schnittstelle. Bei WSDL und SOAP weist ein entsprechendes Verständnis der Spezifikationen und die Kenntnis angrenzender Standards des WS-*Universums den Weg hin zum sauber gearbeiteten Korsett der Schnittstelle. Der eigentliche Knackpunkt liegt jedoch im Entwurf der auszutauschenden XML-Nachrichten. Mit ihnen wird die fachlich motivierte Anbindung an die eigene Prozesslandschaft realisiert. Ein häufig auftretender Stolperstein ist dabei oft schon der Wiederstreit zwischen Flexibilität und strukturell verankerter Präzision. Die Frage, ob wegen jedem neu über die Lieferkette abgewickelten Geschäftsfall auch die Schnittstelle angepasst werden soll, lässt sich eben nicht so einfach beantworten.

Egal wie man es dreht und wendet, die Beschreibung der Datenstrukturen in XML-Schema wird in jedem Fall eine Restmenge an gewollten oder ungewollten Grauzonen zurücklassen. Eine häufig ins Feld geführte Waffe hiergegen ist die Produktion einiger Kilogramm beschriebenen Papiers. Mit ihm soll den externen Schnittstellenpartnern die Integritätsbedingungen der Schnittstelle nahegebracht werden. Die unterschiedlichen Standpunkte, Sprach- und Prozesswelten sorgen jedoch nicht selten für ein breit gefächertes Spektrum an Missverständnissen. Abhilfe kann hier die Flankierung der grammatikbasierten XML-Schemabeschreibungen mit einer kontextabhängigen Validierung schaffen. Möglichst nah an der technischen Schnittstellenbeschreibung kann so das umfangreiche Regelwerk der Integritätsbedingungen erfasst und später auch überprüft werden.

Versionsübersicht Schematron
Schematron 1.0 Erste Version entwickelt am Academia Sinica Computing Centre, Taiwan
Schematron 1.3 Schematron 1.5 Schematron 1.6 Weiterentwicklungen der Spezifikation; Umsetzung in zahlreichen Implementierungen für unterschiedliche Plattformen
ISO Schematron Aufbauend auf Version 1.6 offizieller ISO/IEC-Standard (19757-3); Enthält das standardisierte SVRL Ausgabenformat

Tabelle 1: Schematron-Versionen

Gestatten: Schematron

Die Sprache Schematron bietet die Möglichkeit XML-Dokumente regelbasiert zu validieren. Basis eines Schematrons ist, anders als bei XML-Schema, nicht eine formale Grammatik. Die Beschreibung beruht vielmehr auf der Definition von Regeln, in denen Bezug auf einen bestimmten Kontext innerhalb des XML-Baums genommen wird.

Werfen wir einen Blick auf ein erstes Schematron:

<s:schema  xmlns:s="http://purl.oclc.org/dsdl/schematron"> 
   <s:title>Issue managment service interface V1.00.0 integrity constraints</s:title> 
   <s:ns prefix="t" uri="http://example.com/IssueMngtService/1.0"/>
   <s:pattern> 
      <s:rule context="/t:CreateIssueRequest/t:ServiceLevel"> 
         <s:assert test="(t:ServiceLevel='EXPRESS') and (count(t:Issue) = 1)" > 
        	Only one issue per request is permitted for service level EXPRESS.
         </s:assert>
      </s:rule>>
      <s:rule context="/t:CreateIssueRequest/t:Issue/t:Detail"> 
         <s:report test="contains(t:Key, 'SysERR05') and not(contains(t:Key, 'SysERR05-1'))"> 
            To avoid futher enquiries about your issue, please provide subcode 'SysERR05-1' for main error code 'SysERR05'.
         </s:report>
      </s:rule>
   </s:pattern>
</s:schema>

Abbildung 1: IssueManagementServiceConstraints.sch

Die Notation beruht, wie auch bei XML-Schema, auf der XML. Weiterhin ist eine Abfragesprache zur Ermittlung der Kontexte und zur Formulierung der Zusicherungen und Tests erforderlich. In der Regel kommt an dieser Stelle XPath zum Einsatz. In Abhängigkeit der eingesetzten Schematron-Implementierung kann jedoch auch auf die Mächtigkeit von XPath 2.0 oder XQuery zurückgegriffen werden.

Jede Schematron-Beschreibung wird mit dem Wurzelelement <schema> eingeleitet. Durch Angabe von <title> kann optional eine verbale Beschreibung ergänzt werden. Die in den XPath-Ausdrücken verwendeten Namespaces und deren Präfixe müssen zunächst mit Hilfe von <ns>-Elementen definiert werden. Nun folgen die innerhalb von <pattern>-Elementen gruppierten Regeln <rule>. Das Context-Attribut jedes Rule-Elements definiert den Bezugspunkt für die eingebetteten Zusicherungen. Diese zu formulieren ist Aufgabe der beiden Elemente <assert> und <report>.

Ein Assert beschreibt eine Zusicherung, die innerhalb des zuvor bestimmten Kontexts durch ein XML-Dokument erfüllt sein muss. Validiert der XPath-Ausdruck zu false, wird die angegebene Fehlermeldung ausgegeben. Bei Report-Elementen ist hingegen der Erfolg der gemachten Zusicherung für die Ausgabe des Textes entscheidend. Die Spezifikation schreibt ihnen daher auch einen informellen Charakter zu.

Asserts und Reports ermöglichen über die Prüfung einer technisch korrekten Umsetzung der XML-Datenformate hinaus auch einen Bezug zu den dahinter liegenden, fachlich motivierten Aspekten. Einzige Voraussetzung: Die Fehlermeldungen und Hinweise sind fachlich korrekt formuliert. Ganz nebenbei sorgt dieser Umstand dafür, dass komplexe Details auch schon in der Analysephase in verständlicher Form vorliegen.

Schematron-Prüfung

Das Anwenden eines Schematrons auf konkrete XML-Dokumente erfordert eine entsprechende Implementierung dieses Standards. Gleich welchen technologischen Kontext das eigene Projekt in diesem Punkt vorgibt, die Einstiegshürde ist gering. Die Prozessierung wird durch die meisten Frameworks als eine Reihe von Transformationsschritten durchgeführt. Die Umsetzung mit einer „neutralen“ Technologie wie XSLT liegt nicht nur auf der Hand, sondern wurde mit der Referenzimplementierung auch genauso realisiert.

Abbildung 2: Ablauf der Schematron-Prüfung

Werfen wir also einen Blick auf den in Abbildung 2 dargestellten Ablauf der Prüfung. Die erstellte Schematron-Beschreibung der abzusichernden Integritätsbedingungen wird in der ersten Phase mithilfe generischer XSLT-Skripte der Schematron-Implementierung transformiert. Das Ergebnis dieser Transformation ist ein weiteres XSLT-Skript. Dieses wird zur Überprüfung und Erstellung eines Testreports in Phase 2 auf die zu validierenden XML-Daten angewendet. Das Ergebnis der Prüfung ist eine XML-Datei im SVRL-Format. Sie bildet die Ausgangsbasis für eine mögliche dritte Phase, in der sie entsprechend bestehender Reporting-Anforderungen in ein besser lesbares Format überführt wird. SVRL ist als Standard-Ausgabeformat für ISO-Schematron fester Bestandteil der Spezifikation.

Abhängig vom Funktionsumfang der Implementierung ist jedoch die Möglichkeit gegeben, in Phase 2 das Prüfergebnis bereits in einem anderen Format ausgeben zu lassen.

Wendet man das Schematron aus Abbildung 1 auf die XMLDatei aus Abbildung 3 an, entspricht das in SVRL formulierte Ergebnis dem aus Abbildung 4. Neben den bei der Prüfung angewandten Regeln finden wir auch eine fehlgeschlagene Zusicherung und die dazu gehörende verbale Beschreibung.

<?xml  version="1.0" encoding="UTF-8"?>
<t:CreateIssueRequest
   xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
   xmlns:t='http://example.com/IssueMngtService/1.0'
   xsi:schemaLocation='http://example.com/IssueMngtService/1.0 IssueManagementService.xsd'>
   <t:CustomerID>200000003003401</t:CustomerID>
   <t:ServiceLevel>EXPRESS</t:ServiceLevel>
   <t:Issue>
      <t:Detail>
         <t:Key>SysERR01</t:Key>
         <t:Value>12AXU3B</t:Value>
      </t:Detail>
   </t:Issue>
   <t:Issue>
      <t:Detail>
         <t:Key>SysERR02</t:Key>
         <t:Value>34A45H8E</t:Value>
      </t:Detail>
   </t:Issue>
</t:CreateIssueRequest>

Abbildung 3: IssueManagementService.xml

<?xml version="1.0" encoding="utf-8" ?>
<fileset date="2010/11/08">
   <file  name="IssueManagementService.xml">
      <svrl:schematron-output
          xmlns:iso="http://purl.oclc.org/dsdl/schematron"
          xmlns:sch="http://www.ascc.net/xml/schematron"
          xmlns:svrl="http://purl.oclc.org/dsdl/svrl"
          xmlns:schold="http://www.ascc.net/xml/schematron"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          xmlns:t="http://example.com/IssueMngtService/1.0"
          title="Issue managment service interface V1.00.0 integrity constraints"
          schemaVersion="">
         <svrl:ns-prefix-in-attribute-values uri="http://example.com/IssueMngtService/1.0" prefix="t"/>
         <svrl:active-pattern/>
         <svrl:fired-rule context="/t:CreateIssueRequest/t:ServiceLevel"/>
         <svrl:failed-assert test="(t:ServiceLevel='EXPRESS') and (count(t:Issue) = 1)"
                             location="/*&#91;local-name()='CreateIssueRequest' 
                               and namespace-uri()='http://example.com/IssueMngtService/1.0'&#93;/*&#91;local-name()='ServiceLevel' 
                               and namespace-uri()='http://example.com/IssueMngtService/1.0'&#93;">
            <svrl:text> Only one issue per request is permitted for service level EXPRESS.
            </svrl:text>
         </svrl:failed-assert>
         <svrl:fired-rule context="/t:CreateIssueRequest/t:Issue/t:Detail"/>
         <svrl:fired-rule context="/t:CreateIssueRequest/t:Issue/t:Detail"/>
      </svrl:schematron-output>
   </file>
</fileset>

Abbildung 4: result.xml

Fazit

Obwohl dieser Artikel nur einen Teil der Mächtigkeit von Schematron beleuchtet, kann die vorgestellte Teilmenge schon in vielen Situationen ein hilfreicher Begleiter bei der Erstellung und Umsetzung XML-basierter Schnittstellen sein. Der zunächst entstehende Mehraufwand bei Erstellung und Pflege des zusätzlichen Dokuments ist sicher nicht zu leugnen. Er wird sich in den allermeisten Projekten jedoch sehr schnell bezahlt machen – gerade wenn es darum geht, eigene Systeme für eine Vielzahl unterschiedlicher Partner zu öffnen.

Quellen

http://xml.ascc.net/schematron/
http://www.schematron.com/
http://standards.iso.org/​ittf/PubliclyAvailableStandards/index.html

Diesen Artikel können Sie sich auch als PDF herunterladen:
Download Schematron: XML mit Präzision
Download Sonderdruck Java aktuell 02/2011: Schematron: XML mit Präzision

Kommentare sind abgeschaltet.