Die Wohlgeformtheit von Dokumenten überprüfen

(Auszug aus "XML in a Nutshell" von Elliotte Rusty Harold & W. Scott Means)

Ausnahmslos alle XML-Dokumente müssen wohlgeformt sein. Das bedeutet, dass sie eine Reihe von Regeln befolgen müssen, darunter auch diese:

  1. Jedes Start-Tag muss ein dazugehörendes End-Tag haben.
  2. Elemente dürfen geschachtelt sein, sich aber nicht überlappen.
  3. Es muss genau ein Wurzelelement geben.
  4. Attributwerte müssen in Anführungszeichen stehen.
  5. Ein Element darf nicht zwei Attribute mit dem gleichen Namen besitzen.
  6. Kommentare und Verarbeitungsanweisungen dürfen nicht innerhalb von Tags stehen.
  7. In den Zeichendaten eines Elements oder Attributs dürfen keine ungeschützten <- oder &-Zeichen stehen.

Diese Liste ist bei weitem nicht vollständig. Ein Dokument kann auf vieler-, vielerlei Weise gegen irgendwelche Wohlgeformtheitsregeln verstoßen. Unter der XML-Referenz finden Sie eine vollständige Liste. Manche Probleme betreffen Konstrukte, die wir noch nicht behandelt haben, wie etwa DTDs. Bei anderen ist es extrem unwahrscheinlich, dass sie auftreten, wenn Sie den Beispielen auf dieser Seite folgen (zum Beispiel das Einfügen von Whitespace zwischen dem öffnenden < und dem Elementnamen in einem Tag).

Unabhängig davon, ob ein leichter oder ein schwerwiegender Fehler aufgetreten ist oder ob er wahrscheinlich oder unwahrscheinlich ist: Ein XML-Parser, der ein Dokument liest, muss ihn melden. Er kann auch mehrere Verletzungen der Wohlgeformtheit melden, die er in einem Dokument bemerkt hat. Der Parser darf jedoch niemals versuchen, das Dokument zu reparieren, und in bestem Glauben irgendetwas einsetzen, von dem er annimmt, dass der Autor es gemeint haben könnte. Er kann nicht einfach fehlende Anführungszeichen um Attributwerte ergänzen, fehlende End-Tags einsetzen oder den Kommentar innerhalb eines Start-Tags ignorieren. Der Parser muss eine Fehlermeldung zurückgeben. Das Ziel besteht darin, die Kompatibilitätskriege zu vermeiden, die zwischen frühen Webbrowsern tobten und bis heute nicht beendet sind. Deshalb sollten Sie immer die Wohlgeformtheit eines XML-Dokuments überprüfen, bevor Sie es veröffentlichen, unabhängig davon, ob es eine Webseite, eine Datenbankeingabe oder etwas anderes ist.

Die einfachste Methode hierzu besteht darin, das Dokument in einen Webbrowser zu laden, der XML-Dokumente versteht, wie Mozilla beispielsweise. Wenn das Dokument wohlgeformt ist, zeigt der Browser es an. Ist es nicht wohlgeformt, erscheint eine Fehlermeldung.

Anstatt das Dokument in einen Webbrowser zu laden, können Sie einen XML-Parser auch direkt benutzen. Die meisten XML-Parser sind nicht für Endanwender gedacht. Es handelt sich um Klassenbibliotheken, die in ein benutzerfreundlicheres Programm wie Mozilla eingebettet werden sollen. Falls überhaupt, stellen sie nur eine minimale Kommandozeilen-Schnittstelle bereit; diese Schnittstelle ist meist nicht besonders gut dokumentiert. Trotzdem geht es oftmals schneller, mehrere Dateien durch eine Kommandozeilen-Schnittstelle zu schicken, als jede einzelne in einen Webbrowser zu laden. Wenn Sie außerdem erst einmal über DTDs und Schemas Bescheid wissen, können Sie die gleichen Werkzeuge benutzen, um Dokumente zu validieren – was die wenigsten Webbrowser leisten.

Es gibt viele XML-Parser in einer Vielzahl von Sprachen. Hier werden wir vorführen, wie man die libxml des Gnome-Projekts einsetzt, um die Wohlgeformtheit zu prüfen. Dieses Open Source-Paket ist in recht portablem C geschrieben und läuft auf den meisten wichtigeren Plattformen, unter anderem Windows, Linux und Mac OS X. (Bei vielen Linux-Distributionen ist es vorinstalliert.) Bei anderen Parsern sollte die Vorgehensweise ähnlich sein, auch wenn es im Detail Unterschiede gibt.

Eigentlich ist libxml eine Bibliothek. Aber das Paket schließt ein Programm namens xmllint ein, das diese Bibliothek verwendet, um Dateien auf Wohlgeformtheit zu prüfen. xmllint wird wie alle Kommandozeilenprogramme in einer Unix-Shell oder einer DOS-Box ausgeführt. Die Argumente sind die URLs zu den oder die Dateinamen der Dateien, die Sie prüfen wollen. Hier sehen Sie das Ergebnis, das xmllint bei der Überprüfung einer frühen Version! des Code-Beispiels Ein narratives XML-Dokument, das Attribute verwendet hervorbrachte. Die allererste Zeile der Ausgabe sagt Ihnen, an welcher Stelle der Datei das erste Problem liegt:

% xmllint 2-5.xml
2-5.xml:5: error: Unescaped '<' not allowed in attributes values
   <person geboren='1912/06/23'
   ^
2-5.xml:5: error: attributes construct error
   <person geboren='1912/06/23'
   ^
2-5.xml:5: error: error parsing attribute name
   <person geboren='1912/06/23'
   ^
2-5.xml:5: error: attributes construct error
   <person geboren='1912/06/23'
   ^
2-5.xml:5: error: xmlParseStartTag: problem parsing attributes
   <person geboren='1912/06/23'
   ^
2-5.xml:5: error: Couldn't find end of Start Tag image line 3
   <person geboren='1912/06/23'
   ^

Wie Sie sehen können, wurde ein Fehler gefunden. In diesem Fall war die Fehlermeldung nicht besonders hilfreich. Das eigentliche Problem war nicht, dass ein Attributwert ein <-Zeichen enthielt, sondern dass bei dem Attributwert height das schließende Anführungszeichen fehlte. Aber das gab uns trotzdem noch genug Informationen, um das Problem aufzuspüren und zu beheben. Trotz der langen Liste der Ausgaben gibt xmllint nur den ersten Fehler im Dokument aus. Sie müssen das Programm deshalb möglicherweise mehrere Male ausführen, bis alle Fehler gefunden und behoben worden sind. Wenn wir das Code-Beispiel so repariert haben, dass es wohlgeformt ist, gibt xmllint einfach das Dokument aus, das eingelesen wurde:

% xmllint 2-5.xml
<biographie xmlns:xlink="http://www.w3.org/1999/xlink/">

   <bild src="http://www.turing.org.uk/turing/pi1/busgroup.jpg" width="152" height="345"/>

   <absatz><person geboren='1912-06-23' gestorben='1954-06-07'><vorname>Alan</vorname>
...

Jetzt, da das Dokument nachweislich wohlgeformt ist, kann es an einen Webbrowser, eine Datenbank oder ein anderes Programm übergeben werden. Nahezu jedes nicht-triviale Dokument, das von Hand erstellt wurde, wird Verletzungen der Wohlgeformtheit enthalten. Deshalb ist es so wichtig, Ihre Arbeit zu überprüfen, bevor Sie sie veröffentlichen.

  

<< zurück vor >>

 

 

 

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

  


Copyright © 2005 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML in a Nutshell" 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.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de