Mehr Qualität in XML

(Montero Pineda, Manuel: Mehr Qualität in XML, in: technische kommunikation, Heft 1, 2018).

Nicht alle Probleme bei der Qualitätssicherung von XML-Dokumenten lassen sich mit Grammatiken wie XML Schema oder einer DTD prüfen. Unterstützung bietet zum Beispiel der ISO-Standard Schematron.

Schematron ist eine Schemasprache, mit der sich Inhalte und Strukturen von XML-Dokumenten validieren lassen und die somit zur Qualitätssicherung von XML-Dokumenten beiträgt. Die Sprache ergänzt Grammatiken wie XML Schema oder DTD. Ihr Nutzen liegt darin, Probleme in der Qualitätssicherung zu lösen, die mit den genannten Grammatiken nicht abgeprüft werden können. Dafür werden mit Schematron einschränkende Anwendungsregeln formuliert. Rick Jelliffe hat Schematron 1999 in Taiwan entwickelt. Seit Mai 2006 ist Schematron ein offizieller ISO-Standard, der "ISO Schematron" genannt wird.

Welche Probleme lassen sich lösen?

XML Schema oder DTDs können keine Abhängigkeiten von Attributen oder auch Attributwerten abprüfen. Wozu dies führen kann, verdeutlicht das folgende Beispiel der Arche Noah (Code-Beispiel 1).

<arche>
  <zimmer>
    <tier fleischfresser="nein">
      <art>Zebra</art>
    </tier>
    <tier fleischfresser="ja">
      <art>Gepard</art>
    </tier>
  </zimmer>
</arche>

Code-Beispiel 1: Ausschnitt aus der XML-Datei, mit der Noah die Arche befüllen möchte.

Zu sehen ist ein Ausschnitt aus einer XML-Datei. Inhaltlich geht es darum, dass Noah die Arche (<arche>) befüllen möchte. Die Arche besteht aus Zimmern (<zimmer>), in denen sich Tiere (<tier>) befinden. In jedem Zimmer soll es zwei Tiere geben. Im vorliegenden Fall sind ungeschickterweise ein Zebra und ein Gepard zusammen in ein Zimmer geraten. Mit der Regel, dass Fleischfresser und Nicht-Fleischfresser möglichst nicht gemeinsam in einem Zimmer eingesperrt werden sollen, hätte dies verhindert werden können. Code-Beispiel 2 zeigt das Schema und das eigentliche Problem.

<xs:element name="zimmer">
  <xs:complexType>
    <xs:sequence>
      <xs:element minOccurs="2" maxOccurs="unbounded" ref="tier"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Code-Beispiel 2: Ausschnitt aus dem Schema; es zeigt, dass bestimmte Abhängigkeiten nicht geprüft werden können.

Die Arche hat zwar Zimmer und jedes muss mindestens zwei Tiere aufnehmen, aber Abhängigkeiten von den Attributwerten können mit Hilfe von XML Schema oder einer DTD nicht abgeprüft werden. So lässt sich auch nicht verhindern, dass ein Fleischfresser und ein Nicht-Fleischfresser zusammen in einem Zimmer landen.

Wie funktioniert die Prüfung?

Um die Inhalte und Strukturen zu prüfen, benutzt Schematron den W3C XPath-Standard. XPath ist ein Hilfsstandard, mit dem man in XML-Dokumenten navigieren und selektieren kann. Mit Hilfe von XPath können die Attribute von Elementen mit unterschiedlichen Werten spezifiziert werden.

Im Code-Beispiel 3 ist die Abfrage für die Konstellation zweier tier-Elemente in der XPath-Schreibweise zu sehen.

tier[@fleischfresser='ja'] and tier[@fleischfresser='nein']

Code-Beispiel 3: Die Arche-Noah-Business-Rule.

Die zwei tier-Elemente mit dem Attribut fleischfresser erhalten nun den Wert ja und den Wert nein.

Was lässt sich sonst prüfen?

  • Schematron kann eingesetzt werden, um Abhängigkeiten von Elementen zu anderen Elementen zu prüfen.
  • Zudem können bei der Verwendung von rekursiven Strukturen Einschränkungen gemacht werden. So lässt sich zum Beispiel ausschließen, dass eine Fußnote in einer anderen Fußnote enthalten ist oder ein fett-Element in einem anderen vorkommt.
  • Auch Texte können abgefragt werden und mit Hilfe von sogenannten Regulären Ausdrücken (Regular Expressions) ist dies sogar in sehr mächtigem Maß möglich.
  • Schematron kann außerdem genutzt werden, um Tabellen zu prüfen. Zum Beispiel sollte es in einer Tabelle mit sechs Spalten keine Zeile geben, die sieben Zellen enthält. Um dies auszuschließen, lässt sich Schematron einsetzen.
  • Schematron kann ebenfalls in verschiedenen Werkzeugen eingesetzt werden. Wie genau, soll das Beispiel im oxygen XML Editor zeigen. In der folgenden Abbildung ist ein Schematron-Schema zu sehen. Es besteht aus Regeln und den dazugehörigen Fehlermeldungen. Die Regeln sind wieder mit XPath verfasst.

Schematron im Oxygen Editor

Abbildung: Schematron im Oxygen Editor.

Eine Regel lautet beispielsweise, dass keine drei Punkte im Text hintereinander vorkommen sollen. Das sieht folgendermaßen aus:

<assert test="(not(contains(.‚'...')))"

Stattdessen soll ein entsprechendes Zeichen benutzt werden. Der dazugehörige Warnhinweis lautet:

>Bitte das entsprechende Zeichen benutzen!!!</assert>

Soll diese Regel in einem ganzen Verzeichnis ausgeführt werden, dann bietet Oxygen dafür das Menü "Validieren". Dort muss der Anwender angeben, welches Schematron-Schema zu verwenden ist und um welchen Schematyp es sich handelt – hier Schematron. Nachdem die Validierung gestartet ist, werden innerhalb weniger Sekunden alle Fehlermeldungen angezeigt. Besonders praktisch ist, dass die angezeigten Fehlermeldungen direkt mit dem Dokument verbunden sind. Klickt man einen Fehler an, öffnet sich das Dokument an der Stelle, an der der Fehler aufgetreten ist.

Auf diese Weise ist eine leichte Bearbeitung möglich. Dieselben Fehlermeldungen lassen sich aber auch zur Laufzeit generieren und werden seitlich angezeigt. Darauf bezieht sich der letzte Abschnitt des Beitrags aber genauer. Neben Oxygen Editor unterstützen weitere Editoren Schematron, zum Beispiel der XMLmind Editor und der Abortext Editor.

Wie lassen sich Standards reduzieren?

Mit einem einfachen Trick kann der Anwender große XML-Standards wie DITA oder DocBook einschränken. Schematron lässt sich zum einen ordnerweise verwenden, zum anderen erlaubt Oxygen auch die Verwendung zur Laufzeit. Das heißt, während der Anwender den Text im Editor bearbeitet und zum Beispiel drei Punkte hintereinander eingibt, was die Schematron-Regel nicht erlaubt, erfolgt gleichzeitig die Prüfung und eine Fehlermeldung erscheint. Wird der Fehler korrigiert, verschwindet auch die Fehlermeldung.

Wie sich Schematron genau nutzen lässt, um große XML-Standards zu reduzieren, zeigt die folgende Abbildung. Zu sehen ist ein Topic, das aus einer Überschrift und zwei Absätzen besteht. Das Element <apiname> ist laut Schematron-Regel verboten.

Mit Schematron unerwünschte Elemente ausschließen

Abbildung: Mit Schematron können unerwünschte Elemente ausgeschlossen werden.

Wird apiname trotzdem verwendet, schlägt Schematron bei der Prüfung an und teilt dem Anwender mit, dass das Element an dieser Stelle nicht vorkommen darf. Es ist also möglich, große Standards ohne Programmieraufwand für seine jeweiligen Zwecke einzuschränken. Das passiert, indem mit Hilfe von Schematron im Vorfeld die Verwendung von Elementen ausgeschlossen wird.

   

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

Copyright © 2018 tcworld GmbH
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieser Artikel aus der Fachzeitschrift "technische kommunikation" (Heft 1, 2018) 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.

tcworld GmbH, Rotebühlstraße 64, 70178 Stuttgart, info@tekom.de, www.tekom.de