# Schematron

Schematron ist eine Schemasprache zur Validierung von Inhalt und Struktur von XML-Dokumenten. Die Implementierung der Sprache ist über XSL-Transformationen realisiert, bedarf also keiner speziellen Implementierung, wie es bei den meisten anderen Dokumentstruktur-Definitionssprachen der Fall ist.
Schematron wurde 1999 von Rick Jelliffe am Academia Sinica Computing Centre in Taipeh, Taiwan entwickelt. Seit Mai 2006 ist Schematron 1.6 als offizieller ISO/IEC-Standard unter der Nummer 19757-3:2006 registriert (genannt ISO Schematron).
Anders als beispielsweise DTD oder XML Schema dient Schematron nicht zur Definition, sondern zur Validierung von Inhalten in XML-Dokumenten. Es verwendet keine formale Grammatik, sondern findet Muster in der Dokumentstruktur. Dadurch ist es möglich, Regeln zu definieren, die mit herkömmlichen Schemasprachen, die auf Grammatiken basieren, nicht möglich wären. Dennoch sollte Schematron in erster Linie als Ergänzung, nicht als Konkurrenz zu anderen Schemasprachen verstanden werden.
Zu den möglichen Einsatzgebieten zählen komplexe Regelwerke, die Abhängigkeiten zwischen verschiedenen Teilen des Dokumentbaums ausdrücken oder dynamische Berechnungen erfordern.

## Konzept und Syntax

Ein Schematron-Schema besteht im Wesentlichen aus einem XML-Dokument mit verschiedenen Validierungsregeln, in denen jeweils ein Kontextknoten bestimmt wird, auf welchen Zusicherungen und Reports formuliert werden, die später geprüft werden sollen.
Das folgende Beispiel zeigt ein Schematron-1.5-Schema:
Dieses Mini-Schema, welches eine rudimentäre Prüfung eines Schematron-1.5-Schemas ermöglicht, besteht aus folgenden Elementen:
* <schema xmlns="http://www.ascc.net/xml/schematron" > als Wurzelelement des Dokuments,
* einem optionalen Element <title>, welches das Schema beschreibt,
* beliebig vielen <ns prefix="?*?*?" uri="?*?*?" />-Elementen, in denen Namensräume (uri) und ihre Präfixe (prefix) zur Verwendung in XPath-Ausdrücken deklariert werden,
* <pattern name="?*?*?"> als Container mit Beschreibung (name) für mehrere
* <rule context="?*?*?">-Elemente, wobei context ein XPath-Ausdruck ist, der verwendet wird, um die Umgebung festzulegen, in der die folgenden beiden Elemente ausgeführt werden:
* <assert test="?*?*?">, um eine Zusicherung zu formulieren, zusammen mit einem Fehlertext für den Fall, dass der in test mittels XPath formulierte Test fehlschlägt, oder
* (im Beispiel nicht verwendet) <report test="?*?*?">, um eine Zusicherung zu formulieren, zusammen mit einem Meldungstext für den Fall, dass der Test erfolgreich ist.
Grundsätzlich legt man bei Schematron die Fehler- oder Erfolgsmeldungen selbst fest, die am Ende als Ergebnis der Validierung angezeigt werden.

## Funktionsweise

Zur Ausführung der im Schema formulierten Tests ist es notwendig, eine Schematron-Implementierung zu verwenden. Eine mögliche Implementierung ist ein XSL-Stylesheet, welches aus dem gegebenen Schema wiederum ein XSL-Stylesheet erzeugt, mit welchem dann das zu prüfende Dokument transformiert wird:
* MeinSchema.sch ist die Schematron-Datei, mit der das Dokument EinDokument.xml geprüft werden soll;
* MeinSchema.sch wird mittels SchematronImplementation.xsl in MeinSchemaValidator.xsl umgewandelt, ein XSL-Stylesheet, welches die nötigen Transformationen enthält, um aus den Tests im Schema einen Bericht der Validierung zu erzeugen;
* MeinSchemaValidator.xsl wird verwendet, um EinDokument.xml zu validieren, indem die zuvor erzeugten Transformationen die erfolgreichen <report>-Tests und die fehlgeschlagenen <assert>-Tests ausgeben.
Am Ende steht, je nach Art der verwendeten Schematron-Implementierung, ein Text- oder XML-Dokument, das die Ergebnisse des Tests (Meldungen von erfolgreichen <report>-Tests und fehlgeschlagenen <assert>-Tests) enthält. Dieses Ergebnis kann z. B. in einem Validator-Programm dem Benutzer angezeigt werden.
Die Referenz-Implementierung ist dabei gezielt modular entworfen, so dass man z. B. eines der Standard-Text-Stylesheets verwenden kann, um eine einfache Textausgabe zu erzeugen. Der Schematron-„Kern“ ist nur darauf ausgelegt, Fehler- und Erfolgsmeldungen zu sammeln. Ein eigenes erweitertes Stylesheet könnte dann beispielsweise ein selbst definiertes XML-Format mit Fehlermeldungen erzeugen, welches von einer Software zunächst verarbeitet wird, um festzustellen, ob Fehler bei der Validierung überhaupt aufgetreten sind, bevor sie automatisch aufgezeichnet und dem Benutzer angezeigt werden.