Hinweise dynamisch generieren

(Auszug aus "Schematron - Effiziente Business Rules für XML-Dokumente", Kapitel 6)

Bei rein Parser-generierten Fehlermeldungen hat man auch als Spezialist häufig seine Schwierigkeiten, die allgemeine Formulierung einer Fehlermeldung auf den konkreten Fehlerfall zu übertragen. Diese Fehlermeldungen sind oft sehr allgemein gehalten, da ein identischer Fehler aus verschiedenen Gründen auftreten kann. Schematron hat den Vorteil, eine dem Kontext angepasste Fehlermeldung erzeugen zu können.

Mit dem <value-of>-Element kann eine Fehlermeldung durch Inhalte aus der Instanz ergänzt werden. Mit einem einfachen Beispiel wird dies deutlich:

<rule context="arc:tier">                       (1) 
  <report test="count(//arc:tier[arc:art=current()/arc:art]) &gt; 2">In der Arche gibt es mehr als zwei Tiere der Art <value-of select="arc:art"/>.</report>  (2) 
</rule> 

(1) Als Vorlage dient uns eine Regel aus dem Arche-Schema. Hier wird überprüft, ob in der Arche mehr als zwei Tiere der gleichen Art vorkommen.

(2) Anstatt der bisher verwendeten allgemeinen Schreibweise »In dieser Unterkunft gibt es mehr als zwei Tiere dieser Art« wurde die Regel nun um das <value-of>-Element ergänzt. Mit dem im select-Attribut angegebenen XPath-Ausdruck wird der einzufügende Inhalt ermittelt. Wie bei allen XPath-Ausdrücken innerhalb einer Regel geht ein relativer Ausdruck vom Kontextknoten aus. Ausgegeben wird also das Kindelement <art>.

Ausgabe:

In dieser Unterkunft gibt es mehr als 2 Tiere der Art Zebra.
In dieser Unterkunft gibt es mehr als 2 Tiere der Art Löwe.

Mit diesem einfachen Konstrukt ist die Fehlermeldung wesentlich ansprechender, da der Wiedererkennungswert größer ist. Doch das <value-of>-Element eröffnet dem Entwickler noch weit mehr Möglichkeiten, wie das folgende Beispiel zeigt:

<rule context="arc:nutzlast">       (1) 
  <report test="number(//arc:nutzlast) &lt;  sum(//arc:gewicht)">Noah, du hast zu viele Tiere an Bord. Die Ladung  von <value-of select="sum(//arc:gewicht)"/> Kilogramm  überschreitet die Nutzlast deiner Arche.</report>  (2) 
</rule>   

(1) Auch hier verwenden wir eine schon bekannte Regel, die überprüft, ob das Gesamtgewicht aller Tiere die Nutzlast überschreitet.

(2) Das <value-of>-Element analysiert hier alle Tiere und gibt deren Gesamtgewicht aus.

Ausgabe:

Noah, du hast zu viele Tiere an Bord. Die Ladung von 11187 Kilogramm überschreitet die Nutzlast deiner Arche.

Eine Fehlermeldung kann natürlich auch beliebig viele <value-of>-Elemente enthalten:

<rule context="arc:nutzlast"> 
  <report test="number(//arc:nutzlast) &lt;  sum(//arc:gewicht)">Noah, du hast zu viele Tiere an Bord. Die Ladung  von <value-of select="sum(//arc:gewicht)"/> kg überschreitet die  Nutzlast deiner Arche von <value-of select="//arc:nutzlast"/> kg.  Reduziere deine Last um <value-of select="sum(//arc:gewicht) -  number(//arc:nutzlast)"/> kg oder baue deine Arche  aus.</report> 
</rule> 

Ausgabe:

Noah, du hast zu viele Tiere an Bord. Deine Ladung von 11187 kg überschreitet die Nutzlast deiner Arche von 10000 kg. Reduziere deine Last um 1187 kg oder baue deine Arche aus.

Aber auch hier gibt es Grenzen. Beispielsweise bei grammatikalischen Regeln. Es ist nicht ratsam, zu versuchen, folgende Fehlermeldung zu generieren:

Noah, der Elefant ist zu schwer für seine Zimmergenossen! Er könnte einen zertrampeln.

Denn: Ist das zu schwere Tier eine Giraffe, müsste die Fehlermeldung mit »Noah, die Giraffe ist zu schwer« beginnen. Der unterschiedliche Artikel macht eine solche Konstruktion so gut wie unmöglich.

Anmerkung für XPath-Profis:
Die einzige Möglichkeit wäre, wenn die Instanz eine Metainformation enthielte, die Aufschluss über den Genus der Tierart gibt. Notwendig wäre dann eine XPath2-Abfrage mit if-then-else. Die Verankerung einer solchen Metainformation in der Instanz ist jedoch sehr selten vorhanden und sollte auf keinen Fall einzig zur Optimierung des Schematron-Schemas eingefügt werden.

   

<< zurück vor >>

 

 

 

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

Copyright © dpunkt.verlag GmbH 2011
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken. Ansonsten unterliegt dieses Kapitel aus dem Buch "Schematron - Effiziente Business Rules für XML-Dokumente" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, fon 06221-14830, fax 06221-148399, hallo(at)dpunkt.de