Einführung in XML, DTD und XSL
Michael Näf, naef@acm.orgWas ist XML?
Erstes Beispiel:
Die Abbildung zeigt ein XML-Dokument, das die Kontaktinformationen von zwei Personen enthält. Folgende Dinge fallen an diesem Beispiel auf:
- Bei den ersten beiden Zeilen handelt es sich um eine Versionsangabe, die Angabe eines Zeichensatzes sowie die Definition eines Dokumenttyps. Darum kümmern wir uns später.
- Die Informationen in einem XML-Dokument werden durch einleitende und abschliessende Textelemente eingegrenzt. So steht im Beispiel der Name der jeweiligen Person zwischen <NAME> und </NAME>. Diese Textelemente heissen Tags. Ein einleitendes Tag muss immer auch abgeschlossen werden. Das abschliessende Tag erkennt man am Schrägstrich (/), der als erstes Zeichen auftaucht. Tags sind immer in eckige Klammern (<...>) eingeschlossen.
- Ein Tag kann mit Attributen versehen werden. Im Beispiel besitzt das Tag PHONE ein Attribut. Das Attribut besitzt den Namen type und kann Werte wie mobile oder office annehmen.
- Ausnahmslos alle XML-Dokumente sind hierarchisch -- oder baumartig -- aufgebaut. Im Beispiel macht sich das dadurch bemerkbar, dass ein äusserstes Tag CONTACTLIST existiert, das alle inneren Tags umschliesst. Innerhalb von CONTACTLIST dürfen im Beispiel beliebig viele CONTACT Tags auftauchen. Die CONTACT Tags wiederum enthalten die eigentlichen Kontaktangaben. Es handelt sich dabei um den Namen, die Adresse, Telefonnummern mit unterschiedlichem Typ sowie die E-Mail-Adresse einer Person.
Zur Terminologie: Elemente sind die grundlegenden Bausteine von XML. Beispiele für XML-Elemente sind CONTACTLIST, CONTACT oder MAIL. Ein Element kann einfachen Text oder andere XML-Elemente enthalten. Ein Element kann auch leer sein. Tags werden zur Kennzeichnung sowie zur Abgrenzung von Elementen in einem XML-Dokument benutzt. Ein Start-Tag wie <ELEMENTNAME> markiert den Beginn eines Elements. Das zugehörige End-Tag </ELEMENTNAME> kennzeichnet das Ende eines Elements. Attribute stellen Zusatzinformationen zu einem Element zur Verfügung. Attribute erscheinen immer im Start-Tag eines Elements. Sie haben einen Namen und einen Wert. Im Beispiel besitzt das Element PHONE ein Attribut mit dem Namen type<, das unterschiedliche Werte annehmen kann.
Nebenbei: Die unterschiedlichen Farben in der Abbildung haben mit XML nichts zu tun, sie wurden durch den verwendeten Editor hinzugefügt.
Was ist XML? Jetzt aber wirklich...
XML ist eine Möglichkeit, Daten zu strukturieren. Wie im Beispiel gezeigt, lassen sich mittels XML Daten strukturiert darstellen. Jede Information in einem Dokument ist mit Hilfe der umschliessenden Tags eindeutig gekennzeichnet. Diese Eigenschaft alleine rechtfertigt die Bedeutung von XML jedoch keineswegs. Es gibt beliebig viele alternative Möglichkeiten, Daten zu strukturieren. Die Kontaktinformationen aus dem ersten Abschnitt könnte man beispielsweise auch wie folgt strukturieren:
Name: Michael Naef Adresse: Rosenstrasse 28, 8001 Zuerich Phone mobile: 079 123 4567 Phone private: 01 123 4567 Mail: naef@acm.org Name: Werner Hartmann Phone office: 01 987 6543 Phone fax: 01 222 2222 Mail: hartmann@inf.ethz.ch |
Diese Art der Strukturierung würde ebenso gut funktionieren wie die Variante mit XML und ist wohl erst noch übersichtlicher und lesbarer. Wenn da nicht weitere entscheidende Vorteile von XML existierten...
XML ist ein Standard. XML wurde und wird vom World Wide Web Consortium (kurz: W3C) entwickelt. Das W3C ist die Organisation, die sich um die Weiterentwicklung des WWW sowie der zugehörigen Standards kümmert. Dazu gehören so wichtige Standards wie HTML, HTTP, CSS und viele andere. Weil es sich beim W3C um ein sehr gewichtiges Gremium handelt, ist davon auszugehen, dass auch XML in Zukunft ein bedeutende Rolle im Internet spielen wird. Ausserdem: Aufgrund der Tatsache, dass es sich bei XML um einen offiziellen und akzeptierten Standard handelt, werden zahlreiche begleitende Tools oder Werkzeuge angeboten. Diese Tools erleichtern das Erstellen und die Verarbeitung von XML-Dokumenten. Viele dieser Tools sind kostenlos erhältlich.
XML ist textbasiert. Ein XML-Dokument ist nichts anderes als ein einfaches Textdokument, das auf eine definierte Art und Weise aufgebaut ist. Dadurch können XML-Dokumente problemlos und unabhängig vom benutzten Computer oder Betriebssystem gelesen und mit einem beliebigen Texteditor bearbeitet werden. Mit nicht textbasierten Datenformaten (zum Beispiel Word- oder Excel-Dateien) ist dies nicht uneingeschränkt möglich.
XML ist nicht nur XML. XML bildet die Basis einer ganzen Reihe von Techniken, Standards und Konventionen. XML definiert, wie strukturierte Daten in einem Textdokument dargestellt werden. Neben XML gibt es zum Beispiel den wichtigen Standard XSL (Extensible Stylesheet Language). Mit Hilfe von XSL kann festgelegt werden, wie ein XML-Dokument für unterschiedliche Ausgabemedien dargestellt werden soll. Ein Bestandteil von XSL ist XSLT. XSLT steht für XSL Transformations und bestimmt, wie ein XML-Dokument in ein anderes (ebenfalls textbasiertes) Dokument umgewandelt werden kann. Eine so genannte Document Type Definition oder kurz DTD legt fest, wie XML-Dokumente eines bestimmten Typs auszusehen haben. Zu XSL, XSLT und DTD folgen unten weitere Erläuterungen. Verschiedene andere Standards beschreiben beispielsweise, wie von einem XML-Dokument auf ein anderes (oder Teile davon) verwiesen werden kann oder wie mathematische Formeln mit Hilfe von XML spezifiziert werden können.
XML ist gratis. Der Einsatz von XML sowie den begleitenden Standards ist frei von jeglichen Lizenzgebühren möglich.
XML ist erweiterbar. XML steht ausgeschrieben für Extensible Markup Language. "Extensible" ist Englisch für "erweiterbar" -- die Erweiterbarkeit ist also schon im Namen der Technologie verankert. In XML sind keine Tags vordefiniert. Die Autorin von XML-Dokumenten kann und muss alle nötigen Tags selber definieren. Das ist ein Vorteil, denn auf diese Weise können für beliebige Informationen die passenden Tags oder Attribute sowie eine geeignete Dokumentstruktur festgelegt werden. Zum Beispiel könnte eine einfache Briefmarkensammlung in XML wie folgt aussehen:
Eine DTD schafft Verbindlichkeit
XML-Dokumente sind erweiterbar. Es lassen sich beliebig komplexe Strukturen mit beliebigen Tag- und Attributnamen erstellen. Eine DTD (Document Type Definition) hilft dabei, die Struktur und den genauen Aufbau von XML-Dokumenten verbindlich festzulegen. Die folgende Abbildung zeigt die DTD des einführenden XML-Beispiels mit den Kontaktinformationen:
Einige Erklärungen zur DTD:
- Die zweite Zeile definiert das Element CONTACTLIST als eine Folge von beliebig vielen CONTACT-Elementen. Das "beliebig viele" wird durch den Stern (*) festgelegt und erlaubt auch eine leere Liste mit keinem einzigen CONTACT-Element.
- Das CONTACT-Element in der zweiten Zeile ist als eine Folge von NAME-, ADDRESS-, PHONE- und MAIL-Elementen festgelegt. Die Reihenfolge der Elemente ist verbindlich und muss in einem gültigen XML-Dokument genau eingehalten sein. Das Fragezeichen (?) im Anschluss an das ADDRESS-Element besagt, dass dieses Element optional ist und folglich wahlweise auftauchen oder weggelassen werden kann. Der Stern hinter dem PHONE-Element ermöglicht wie oben zwischen Null und beliebig vielen Wiederholungen des Elements.
- Die nachfolgenden Zeilen definieren die Elemente NAME, ADDRESS, PHONE und MAIL als einfache Textelemente. Die Bezeichnung #PCDATA bedeutet, dass diese Elemente bloss Text und keine weiteren Elemente enthalten dürfen. PCDATA steht für "Parsed Character Data".
- Die letzten drei Zeilen definieren das Attribut type, das zum Element PHONE gehört. Gemäss der Definition kann das Attribut type einen der Werte mobile, private, office oder fax annehmen. Ausserdem wird durch den Zusatz #REQUIRED festgelegt, dass das Attribut zwingend anzugeben ist, falls das Element PHONE benutzt wird.
Damit unser XML-Dokument aus der ersten Abbildung "weiss", welche DTD dafür gültig ist, wird wie im Beispiel auf die passende DTD verwiesen mit einer Zeile wie: <!DOCTYPE CONTACTLIST SYSTEM "contacts.dtd">. Die Zeile besagt, dass das XML-Dokument vom Typ CONTACTLIST ist und sich die zugehörige DTD in der Datei "contacts.dtd" befindet.
Was bringt eine DTD?
Mit Hilfe einer DTD wird die Struktur von XML-Dokumenten verbindlich und zentral festgelegt. Alle XML-Dokumente desselben Typs können anhand derselben DTD bezüglich ihrer Struktur geprüft werden. Das ist hilfreich, weil viele XML-Editoren und andere XML-verarbeitende Tools eine solche Prüfung nach Wunsch automatisch vornehmen können. Auf diese Weise werden Sie als Autorin oder Benutzerin von XML-basierten Informationen sofort auf allfällige Strukturverletzungen aufmerksam gemacht.
Die automatisierte Prüfung ist insbesondere dann nützlich, wenn Informationen von anderen Personen empfangen werden und vor der Weiterverarbeitung im Hinblick auf die strukturelle Gültigkeit geprüft werden sollen. Ausserdem sind DTDs ein hilfreiches Werkzeug, wenn sich mehrere Personen oder Organisationen über ein gemeinsam unterstütztes Format zum Datenaustausch einigen wollen. In solchen Fällen legt die DTD das gemeinsame Format eindeutig und formalisiert fest.
Trotz der erwähnten Vorteile ist die Benutzung von DTDs nicht obligatorisch. XML-Dokumente lassen sich auch ohne zugehörige DTD erstellen und verarbeiten. DTDs kann man insofern als eine optionale aber nutzbringende Zusatztechnik betrachten. Übrigens gibt es unter dem Namen XML Schema einen modernen Standard des W3C, der dieselbe Funktion wie die DTDs erfüllt.
XML kontra HTML
XML- und HTML-Dokumente sehen sich sehr ähnlich. Doch es besteht ein bedeutender Unterschied: XML ist erweiterbar, HTML nicht. XML wurde entwickelt, um Daten zu beschreiben. HTML dagegen wurde entwickelt, um Daten darzustellen. HTML ist bekanntlich die Auszeichnungssprache, mit deren Hilfe Web-Seiten beschrieben werden. Jeder Web-Browser "versteht" HTML-Dokumente und kann sie entsprechend darstellen. Das heisst, der Browser kennt alle HTML-Tags und deren Bedeutung. Zum Beispiel bedeutet <b>...</b>, dass eine Zeichenkette in fetter Schrift dargestellt wird, und mittels <TABLE> wird eine Tabelle eingeleitet. Unser Beispiel mit den Kontaktinformationen könnte in HTML auszugsweise wie folgt geschrieben werden:
<HTML> <BODY> <TABLE> <TR> <TD>Michael Naef</TD> <TD>Rosenstrasse 28, 8001 Zuerich</TD> <TD>naef@acm.org</TD> </TR> <TR> <TD>Werner Hartmann</TD> <TD></TD> <TD>hartmann@inf.ethz.ch</TD> </TR> </TABLE> </BODY> </HTML> |
Das Problem: In HTML ist zwar sofort klar, wie die Informationen dargestellt werden sollen, dafür geht die Beschreibung der verschiedenen Informationen in der Datei verloren. So ist beispielsweise nur noch implizit durch das charakteristische "@"-Zeichen erkennbar, welches die E-Mail-Adressen sind.
Ganz anders bei XML: Tags und Attribute lassen sich beliebig benennen und einsetzen. Es existieren keine Tags mit fest vorgegebener Bedeutung. Ein Tag wie <b> in XML kann für "Bold", "Briefmarke", "Bemerkung" oder irgendetwas anderes stehen -- es muss auch nichts mit dem Buchstaben "B" zu tun haben. XML benutzt Tags zur Abgrenzung von Daten und überlässt die Interpretation der Daten vollkommen der Anwendung, die sie verarbeitet. Ein Web-Browser oder ein anderes Werkzeug kann nicht "wissen", was diese frei definierten Tags bedeuten und wie die dadurch beschriebenen Informationen dargestellt werden sollen. Deshalb braucht es eine Möglichkeit zu beschreiben, wie ein XML-Dokument eines bestimmten Typs dargestellt werden soll...
XSL(T) zur Darstellung von XML
Um ein XML-Dokument darzustellen braucht es zwei Dinge:
- Eine Vorschrift, die beschreibt, wie die Informationen im XML-Dokument darzustellen sind. Diese Vorschrift wird typischerweise mit Hilfe von XSL beziehungsweise XSLT verfasst. Die Vorschrift heisst im Fachjargon XSL Stylesheet. Stylesheet ist Englisch für "Druckformatvorlage", "Layout-Datei" oder "Stilvorlage".
- Ein Werkzeug, welches das XML-Dokument aufgrund der Vorschrift darstellen oder in ein anderes Dokument umwandeln kann. Moderne Web-Browser können XML-Dokumente direkt darstellen. Daneben gibt es diverse Werkzeuge, die ein XML-Dokument aufgrund einer XSL(T)-Vorschrift in ein anderes Format umwandeln können.
Einige Erklärungen dazu:
- Die ersten beiden Zeilen enthalten Angaben zur Version, zum Zeichensatz und zum verwendeten Standard, auf dem das XSL Stylesheet basiert. Aus der ersten Zeile ist zudem ersichtlich, dass ein XSL Stylesheet ebenfalls nichts anderes als ein XML-Dokument ist.
- Ein XSL Stylesheet besteht aus einer Reihe von Templates. Diese Templates beschreiben die Darstellung der verschiedenen Elemente in einem XML-Dokument. Das match-Attribut in jedem Template verbindet das Template mit dem entsprechenden XML-Element oder mit einem ganzen Teilbereich aus dem XML-Dokument.
- Im gezeigten Beispiel-Stylesheet wird der Einfachheit halber nur ein Template benutzt. Als match-Attribut ist "/" angegeben. Dies bedeutet, dass sich das Template auf das gesamte XML-Dokument bezieht.
- Innerhalb des Templates wird ein HTML-Dokument aufgebaut. Es beginnt mit dem typischen html-Tag, einer Titelangabe innerhalb der title-Tags sowie dem einleitenden body-Tag und dem Beginn einer Tabelle durch die Angabe von <table ...>.
- Es folgt das XSL-Element for-each. Das for-each-Element findet alle Elemente eines bestimmten Typs im XML-Dokument und wendet einen Bereich des Templates darauf an. Im Beispiel wird für jedes CONTACT-Element innerhalb der CONTACTLIST eine neue Zeile in der Tabelle (<tr>...</tr>) angelegt. Innerhalb der Tabellenzeile werden die Kontaktinformationen der entsprechenden Person dargestellt.
- Das XSL-Element value-of dient dazu, ein Element aus dem XML-Dokument auszuwählen und dessen Inhalt auszugeben. Zunächst wird der Name der Person ausgegeben, indem mit Hilfe des select-Attributs das Element NAME identifiziert wird. Durch das umschliessende HTML-Tag <b>...</b> wird der Name fett dargestellt. Der Inhalt der Elemente ADDRESS und MAIL wird analog ausgegeben.
- Das PHONE-Element darf im XML-Dokument mehrmals mit unterschiedlichen type-Attributen auftauchen. Um alle Telefonnummern auszugeben wird nochmals das for-each-Element von XSL bemüht. Dadurch wird jedes PHONE-Element im XML-Dokument gefunden. Die Ausgabe erfolgt mit Hilfe des bekannten value-of-Elements. Durch die Angabe von "." im select-Attribut wird der jeweils aktuelle Wert ausgegeben. Ausserdem wird zu jeder Telefonnummer der Typ vorangestellt. Das geschieht mit Hilfe des value-of-Elements und der Angabe select="@type".
[ XSL und XSLT beim W3C ]
Das Resultat
Das oben besprochene XSL Stylesheet sorgt für die folgende Darstellung des ursprünglichen XML-Dokuments in einem Web-Browser:
Flexibilität ist alles: Alternative Darstellungen
In den vorhergehenden Abschnitten haben wir ein XML-Dokument verfasst, eine passende DTD dazu betrachtet und ein XSL Stylesheet definiert, das die Darstellung der XML-Daten beschreibt. Das ist ein erheblicher Aufwand für die Darstellung einer simplen Web-Seite wie die oben gezeigte. Hätten wir uns gleich zu Beginn für einfaches HTML für die Darstellung entschieden, hätten wir viel Zeit sparen können.
Trotzdem hat XML einen entscheidenden Vorteil. Sind alle Kontaktinformationen einmal in XML erfasst, lässt sich mit den XSL Stylesheets "spielen". Ohne auch nur einen Buchstaben an der XML-Datei zu ändern, können beliebige Ausgabeformate mit Hilfe von einfachen XSL Stylesheets definiert werden. Die folgende Tabelle zeigt einige Möglichkeiten. Beachten Sie: Die XML-Datei ist zwar bei jedem Beispiel angegeben, es handelt sich aber immer um die gleiche Datei.
XML-Dokument | XSL Stylesheet | Resultat in HTML | Bemerkung | |
1. | XML | XSL | HTML | Einfache Liste aller Kontakte (wie oben) |
2. | XML | XSL | HTML | Dasselbe, aber mit Mail-Adressen als Links |
3. | XML | XSL | HTML | Etwas anders dargestellte Liste |
4. | XML | XSL | HTML | Dieselbe Liste, nach NAME aufsteigend geordnet |
5. | XML | XSL | HTML | Liste mit allen E-Mail-Adressen |
6. | XML | XSL | HTML |
Liste mit allen Telefonnummern vom Typ "mobile" (Angabe von "N/A", falls keine Mobiltelefonnr. vorhanden) |
Entscheidend: Die Ausgabeform ist nicht auf Web-Seiten beschränkt. XML-Dokumente lassen sich auf ähnliche Weise und mit entsprechenden Tools auch in Textdokumente, PDF-Dateien oder irgendein anderes Format umwandeln. Es wäre sogar möglich, ein Programm zu schreiben, das aufgrund einer Namensangabe die zugehörige Faxnummer aus der Liste sucht und automatisch über das am Computer angeschlossene Modem ein Fax an diese Nummer schickt. Diese Flexibilität ist bei HTML nicht vorhanden. Um alle in der Tabelle gezeigten Ausgabeformen zu erhalten, müsste grundsätzlich eine separate HTML-Datei für jede einzelne Ausgabeform verfasst werden.
Konzeptionelles: Struktur, Inhalt und Format
Ein fundamentaler Vorteil von XML liegt in der rigorosen Trennung von Struktur, Inhalten und Format. Diese Trennung vereinfacht das effiziente und flexible Arbeiten mit Informationen. XML und die begleitenden Standards unterstützen diese Trennung -- teilweise erzwingen sie sie sogar. Die folgende Abbildung zeigt eine schematische Übersicht:
Im Mittelpunkt stehen die DTD (oder ein XML-Schema), die XML-Dokumente sowie die XSL Stylesheets. Die DTD gibt die Struktur der zu verarbeitenden Informationen vor. Die XML-Dokumente enthalten die eigentlichen Informationen. Die XSL Stylesheets legen fest, wie die Informationen pro Ausgabeform dargestellt werden sollen.
Ein XML-befähigter (Web) Browser kann mit Hilfe von XSL Stylesheet und XML-Dokument die Informationen direkt auf dem Bildschirm darstellen. Als Alternative kann ein so genannter XSL(T)-Prozessor benutzt werden. Beim XSL(T)-Prozessor handelt es sich um ein Werkzeug, das ebenfalls ein XSL Stylesheet und ein XML-Dokument entgegennimmt und daraus -- basierend auf den Anweisungen im Stylesheet -- ein neues Dokument erzeugt. Das neu erzeugte Dokument kann beispielsweise ein HTML-Dokument sein. Daneben sind beliebige andere Ausgabeformate denkbar: zum Beispiel ein XML-Dokument mit einer anderen Struktur, eine reine Textdatei, ein PDF-Dokument, eine Grafikdatei oder sogar eine Audiodatei.
Informationsstrukturierung ist kein Kinderspiel
Die geeignete Strukturierung von Informationen stellt oft eine gewisse Herausforderung dar. Es lohnt sich, die gewählte Strukturierung zu hinterfragen und allfällige Varianten bezüglich ihrer Konsequenzen zu analysieren. Die im einführenden Beispiel gezeigte DTD zum Beispiel weist einige Eigenschaften auf, die sich in der Praxis als grosse Nachteile erweisen können:
- Die beiden Elemente NAME und ADDRESS sind nicht weiter strukturiert. Dieser Umstand macht es schwierig, nur den Familiennamen einer Person zu bestimmen oder die ganze Liste nach Familiennamen zu sortieren. Dasselbe Problem stellt sich bei der Adresse: Eine einzelne Postleitzahl oder Strassennummer lässt sich nicht einfach bestimmen. Dabei könnte es durchaus Sinn machen, alle Kontaktinformationen von Personen aus einer bestimmten Stadt auszugeben.
- Die Definition des Elements CONTACT schreibt genau ein obligatorisches MAIL-Element vor. Eine solche Definition ist vermutlich zu starr, denn es gibt Personen mit mehreren E-Mail-Adressen und solche, die über gar keine E-Mail-Adresse verfügen. Diese Fälle werden durch die Definition nicht abgedeckt.
Epilog
Dieser Artikel gibt eine Einführung in XML. Einige Grundbegriffe von XML, DTD und XSL wurden vorgestellt. Ausserdem wurde versucht, einen Überblick über die verwirrend vielen Fachbegriffe und Standards zu bieten. Viele wichtige Aspekte von XML sind unerwähnt geblieben. Wer sich für weitergehende Informationen interessiert und sich in diesen Themen vertiefen möchte, sei einerseits auf die Fachliteratur und andererseits auf die in diesem Artikel zitierten Quellen im WWW verwiesen.
Abschliessend lässt sich sagen, dass es sich bei XML um ein ausgereiftes Modell zur Informationsbeschreibung und -darstellung handelt. XML ist nicht immer die beste Lösung, aber es lohnt sich immer, XML in Erwägung zu ziehen".