Fehlermeldungen im Detail

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

Der Anspruch einer guten Fehlermeldung lautet, dass selbst der in Programmiererkreisen bekannte DAU ("dümmster anzunehmende User") den Fehler versteht und auch beheben kann. Zudem muss eine Fehlermeldung kurz und bündig formuliert sein, damit ein Benutzer, bei dem häufig verschiedene Fehler auftreten, den Überblick behalten kann und sofort weiß, um welchen Fehler es sich handelt.

Weiterführende Links

Schematron bietet zwei Möglichkeiten, um diesen Spagat zu bewältigen. Zum einen kann Elementen (u.a. <Pattern>, <rule>, <assert> oder <report>) ein see-Attribut hinzugefügt werden. Als Wert muss man dann ein URI angeben, der in einen weiterführenden Link gewandelt wird. Das Konzept dabei ist, dass der angegebene Fehler so beschrieben wird, dass der Benutzer ihn wiedererkennt und beheben kann. Sollten diese Informationen für den Benutzer nicht ausreichen, kann man zu einer ausführlichen Fehlerreferenz oder z.B. an eine entsprechende Stelle in einer Schema-Dokumentation verlinken.

Zu beachten ist, dass ein Link nur auf allgemeine Informationen führen kann, die unabhängig von der Instanz verfasst wurden. Variable Informationen müssen daher mit der ursprünglichen Fehlermeldung geliefert werden.

<rule context="arc:nutzlast">
  <report test="number(//arc:nutzlast) &lt; sum(//arc:gewicht)" see="http://www.schematron.info/error42">Fehler 42: Überschreitung der Nutzlast (<value-of select="sum(//arc:gewicht)"/> kg): Gesamtgewicht: <value-of select="//arc:nutzlast"/> kg; Überschuss: <value-of select="sum(//arc:gewicht) - number(//arc:nutzlast)"/> kg.</report>
</rule>

Ausgabe der oxygen-Statusleiste:

Schematron-Fehlermeldung in oXygen

Abbildung: Schematron-Fehlermeldung in oXygen

Inhalt der Website, auf die der Link verweist:

Schematron-Fehlermeldung auf einer Webseite

Abbildung: Schematron-Fehlermeldung auf einer Webseite

Die Fehlermeldung ist hier auf die wesentlichen kontextabhängigen Informationen beschränkt, während die Referenz eine ausführliche (kontextunabhängige) Beschreibung liefert.

Lösungsvorschläge

Eine andere Möglichkeit, die Fehlermeldung von der Fehlerbeschreibung zu trennen, ist der Einsatz des <diagnostic>-Elements. Auch hier nimmt Schematron die Trennung – wie auch bei den Elementen <report> und <assert> – rein semantisch vor. Jeder Fehlermeldung – also jedem <report>- bzw. <assert>-Element – kann durch ein diagnostics-Attribut ein Lösungsvorschlag mitgegeben werden. Die semantische Trennung erfolgt dabei zwischen der reinen Beschreibung des Fehlers und einer Beschreibung zu seiner Behebung. Doch wie wird ein solcher Lösungsvorschlag nun erzeugt? Zur Demonstration modifizieren wir wieder Teile unseres Arche-Schemas:

<schema xmlns="http://purl.oclc.org/dsdl/schematron"> 
  […] 
  <pattern> 
    <rule context="arc:tier"> 
      <report diagnostics="Anzahl" test="count(//arc:tier[arc:art=current()/arc:art]) &gt; 2">In der  Arche gibt es mehr als zwei Tiere dieser Art.</report> 
    </rule> 
  </pattern> 
  <diagnostics> 
    <diagnostic id="Anzahl">Noah, du hast  <value-of select="count(//arc:tier[arc:art=current()/arc:art])"/>  Tiere von der Gattung <value-of select="arc:art"/> in diesem  Zimmer beherbergt. Es müssen jedoch immer 2 Tiere einer Art in einem  Zimmer untergebracht sein. Du musst also  <value-of select="count(//arc:tier[arc:art=current()/arc:art]) -  2"/> Tier(e) dieser Art entfernen.</diagnostic> 
  </diagnostics> 
</schema> 

Soll ein Lösungsvorschlag erzeugt werden, muss als Top-Level-Element (Kindelement des Wurzelelements) ein <diagnostics>-Element eingerichtet werden. Dieses kann auch als Container für mehrere Lösungen dienen. Eine Lösung wird durch ein <diagnostic>-Element (ohne s am Ende!) und einem dazugehörigen id-Attribut erzeugt. Wie bei den Fehlermeldungen wird die Lösung durch den Inhalt des <diagnostic>-Elementes bestimmt. Soll nun ein Lösungsvorschlag einer Fehlermeldung zugewiesen werden, muss dem <report>- bzw. <assert>-Element ein diagnostics-Attribut mit der passenden ID zugefügt werden. Im Beispiel ist die ID des Lösungsvorschlags »Anzahl«. Das <report>-Element hat deshalb auch für das diagnostics-Attribut den IDREF-Wert »Anzahl«.

So kann eine kurze Fehlermeldung um eine längere Beschreibung zur Behebung des Fehlers ergänzt werden. Im Gegensatz zum bereits vorgestellten Modell kann ein Lösungsvorschlag auch variable Informationen enthalten. Der Kontextknoten wird von der Regel auf die verwendete Lösung übertragen. Wie im Beispiel zu sehen ist, kann auch ein <diagnostic>-Element ein <value-of>-Element enthalten.

Link oder Lösungsvorschlag?

In der Praxis wird diese Frage sicher von der verwendeten Implementierung abhängen. Je nach dem, ob und in welcher Art und Weise eine der beiden Funktionsweisen unterstützt wird (keine von beiden ist Voraussetzung für eine Schematron-Implementierung), kann eine Entscheidung für eines der beiden Modelle fallen. Sollte die Umsetzung oder Art der Darstellung kein Entscheidungsfaktor sein, können auch beide Varianten gleichzeitig eingesetzt werden. Der Lösungsvorschlag hat den Vorteil, dass dieser auch variable Texte enthalten kann. Dagegen verfügt ein weiterführender Link nur über textuellen Inhalt und überlässt die Darstellung des Lösungsvorschlags der verwendeten Implementierung. Die gestalterischen Möglichkeiten einer Website dagegen, die mit Grafiken oder einem Link-Netzwerk ausgestattet sein kann, bieten wesentlich mehr Potenzial für eine ansprechende Beschreibung.

   

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