Einführung in XML

Was man über XML wissen sollte, um mit DocBook zu arbeiten

Ein Student sollte in der Lage sein, innerhalb von einer Woche einen XML-Parser zu schreiben.

XML-Dokumente sind einfache Text-Dateien, die nach einem bestimmten Schema geschrieben sind. Sie sind für Menschen und Maschinen leicht lesbar und editierbar.

XML-Wohlgeformtheit

Elemente, Attribute und Inhalte

Achtung

Ein XML-Parser darf nie versuchen, invalide Dokumente zu interpretieren.

In der XML-Spezifikation sind die grundlegenden Regeln für die Erstellung von XML-Dokumenten festgelegt. Ein Dokument, welches die dort beschriebenen Regeln erfüllt, bezeichnet man als wohlgeformt oder auch well-formed. Wohlgeformtheit ist die Voraussetzung, dass eine Maschine die Datei verarbeiten kann, in der XML-Spezifikation ist sogar festgehalten, dass ein XML-Parser auf keinen Fall versuchen darf, ein nicht wohlgeformtes Dokument zu reparieren oder die Fehler zu ignorieren.

Ein XML-Dokument besteht im wesentlichen aus Elementen, die Attribute haben können und textuelle Inhalte sowie wiederum Elemente enthalten können.

Elemente

XML-Elemente bestehen aus einem öffnenden um einem schließenden Tag. Alles was innerhalb dieser Tags steht, wird als der Inhalt des Tags betrachtet. Öffnende Tags bestehen aus dem kleiner-als-Zeichen „<“, dem Namen des Elements und dem größer-als-Zeichen „>“. Schließende Tags bestehen aus dem kleiner-als-Zeichen „<“, einem Schrägstrich „/“, dem Namen des Elements und dem größer-als-Zeichen „>“.

Anmerkung

Elemente bestehen aus ein oder zwei Tags

Beispiel 1.1. Ein XML-Element

<element>Hallo Welt</element>

Kurzschreibweise leerer Elemente

Die Schreibweise von leeren XML-Elementen, also Elementen, die weder Text noch andere Elemente enthalten kann abgekürzt werden, indem man statt öffnendem und schließendem Tag ein leeres Tag in folgenden Art und Weise schreibt: ein kleiner-als-Zeichen „<“, der Name des Elements, ein Schrägstrich „/“ und ein größer-als-Zeichen „>“.

Beispiel 1.2. Ein leeres XML-Element

<element/>

Das Root-Element. 

Jedes XML-Dokument hat genau ein Root-Element

Jedes XML-Element hat ein Root- oder Wurzel-Element. Innerhalb dieses Root-Elements steht der gesamte Inhalt des Dokuments. Dokumente mit mehr als einem Root-Element sind nicht wohlgeformt.

Beispiel 1.3. Hallo Welt als XML-Dokument

<?xml version="1.0"?>
(1)

<gruss>
(2)

    Hallo Welt
(3)

</gruss>
(4)

Dieses minimale XML-Dokument enthält außer den schon besprochenen Elementen und deren Inhalt in der ersten Zeile eine Verarbeitungsanweisung.

1

Dies ist die Processing Instruction. Sie teilt dem XML-Parser mit, dass es sich um ein XML-Dokument handelt und es gemäß der XML-Spezifikation 1.0 geparst werden soll.

2

Der Beginn des Root-Elements. Alles bis zum Ende dieses Elements wird als Inhalt des Elements betrachtet.

3

Textueller Inhalt des Elements root

4

Das ist das Ende des Root-Elements und damit auch das Ende des Dokuments. Hiernach dürfen keine weiteren Elemente folgen.

Elemente dürfen einander nicht überschneiden.

Im Gegensatz zu SGML müssen alle Elemente geschlossen werden und es ist nicht zulässig, dass zwei Elemente sich überlappen.

Beispiel 1.4. Unzulässige Überlappung von Elementen

<dokument> 
 <wichtig>
  wichtig, aber nicht interessant 
  <interessant>
   interessant und wichtig
  </wichtig> 
  interessant, aber nicht wichtig
 </interessant> 
</dokument>

Im Gegensatz dazu ist eine Schachtelung von Elementen zulässig und zerstört nicht die Wohlgeformtheit des Dokuments.

Beispiel 1.5. Zulässige Schachtelung von Elementen

<dokument>
 <wichtig>
  wichtig, aber nicht interessant
  <interessant>
   wichtig und interessant
  </interessant>
 </wichtig>
 <interessant>
  interessant, aber nicht wichtig
 </interessant>
</dokument>

XML-Attribute

Elemente können Attribute haben.

Attribute können Elementen zugeordnet werden. Ein Attribut hat einen Namen und einen Wert. Attribute werden in den Start-Tag eines Elements, nach dem Elementnamen und vor dem eventuellem Schrägstrich oder größer-als-Zeichen eingetragen. Sie bestehen aus dem Namen des Attributs einem Gleichheitszeichen „=“ und dem Wert des Attributs in Anführungszeichen. Attribute sind durch Leerzeichen, Tabstopps oder Zeilenumbrüche getrennt.

Beispiel 1.6. Elemente mit Attributen

<dokument>
 <element attribute="value" /> 
 <element number="2">
 <otherelement attribute1="one" attribute2="two"/>
 </element>
</dokument>

Attributnamen dürfen nur alphanumerische Zeichen, den Bindestrich und den Unterstrich enthalten.

Erweiterte XML-Bestandteile

Entitäten und Verarbeitungsinstruktionen

Notwendigkeit erweiterter Bestandteile

Im Beispiel Hallo Welt als XML-Dokument wurde bereits eine Verarbeitungsinstruktion in der ersten Zeile verwendet und die Frage „Wie kann ich <, > oder " in XML darstellen, wenn diese Zeichen für Elemente und Attribute reserviert sind?“ führen und zur Erklärung erweiterter XML-Bestandteile.

Verarbeitungsinstruktionen

Processing Instructions

Processing Instructions sind Anweisungen an den XML-Parser.

Verarbeitungsinstruktionen, englisch Processing Instructions werden genutzt, um direkt an den XML-Parser Anweisungen zu geben. Sie fügen dem Dokument keinen Inhalt im eigentlichen Sinne, sondern eher Anweisungen, wie mit dem Dokument umgegangen werden soll. Allgemein üblich sind Processing Instructions, um XML-Version[2] und Zeichenkodierung festzulegen sowie um CSS-Stylesheets zu verlinken.

Es gibt keine schließenden Processing Instructions

Verarbeitungsanweisungen funktionieren ähnlich wie beginnende Tags, nur dass nach dem kleiner-als-Zeichen und vor dem größer-als-Zeichen Fragezeichen stehen. Es gibt keine schließenden Verarbeitungsinstruktionen und sie beziehen sich auf den gesamten folgenden Inhalt.

Beispiel 1.7. XML-Dokumentenkopf mit Verarbeitungsanweisungen

<?xml version="1.0" encoding="iso8859-1"?>
<?xml-stylesheet href="mystyle.css" type="text/css"?> <html> ... </html>

In diesem Beispiel wird in der ersten Zeile festgelegt, dass das folgende Dokument gemäß der XML-Spezifikation 1.0 behandelt werden soll und dass der verwendete Zeichensatz iso-8859-1 ist. Wenn für ein Dokument kein encoding angegeben ist, so ist für XML UTF-8 der Standard.

In der zweiten Zeile wird das Dokument mit einem Cascading Stylesheet, welches in der Datei mystyle.css liegt verknüpft. Eine Software, die in der Lage ist, das XML-Dokument anzuzeigen, sollte die in dieser Datei festgelegten Formatierungsregeln anwenden.

Entitäten

Entities

Entities sind Umschreibungen von Inhalten.

Entities kann man als Makros oder Shortcuts für Inhalte in einem XML-Dokument sehen. Diese etwas abstrakte Erklärung können wir an einem einfachen Beispiel mit Leben füllen: Wie bereits angesprochen kann man die Zeichen <,>und " nicht ohne weiteres in XML-Dokumenten verwenden, da sie für Elemente und Attribute reserviert sind. Aus diesem Grunde wurden in der XML-Spezifikation Umschreibungen für das kleiner-als-Zeichen, das größer-als-Zeichen und einige andere Zeichen eingeführt. Wenn man diese Umschreibungen in seinem Dokument verwendet, behandelt der Parser sie nicht, als ob ein Element beginnen oder enden würde, sondern als ob dort ein echtes, wirkliches kleiner-als-Zeichen stünde.

Tabelle 1.1. Übersicht über grundlegende XML-Entitäten

ZeichenUmschreibung
Größer-als „>“
&gt;
Kleiner-als „<“
&lt;
Anführungszeichen „"“
&quot;
Apostroph „'“
&apos;
Ampersand „&“
&amp;

Mit Enititäten kann man Dokumente modularisieren.

Weiterhin erlauben Entities auch den Zugriff auf externe Dokumentteile. Wenn ein Fragment ein XML-Dokuments in einer anderen Datei ausgelagert ist, und in dem ursprünglichen Dokument eine Entität als Verweis auf diese Datei definiert ist und verwendet wird, so behandelt der XML-Parser das Dokument, als ob die betreffenden Zeichen wirklich in der Ursprungsdatei stünden.

Beispiel 1.8. Externe Entities

Wir haben eine Datei index.xml, in der definiert ist, dass die Entität &xml; eine Umschreibung für den Inhalt der Datei content.xml ist. Die Datei index.xml sieht folgendermaßen aus:

<?xml version="1.0"?>
<dokument>
 &xml;
 <gruss>
  Hallo Welt
 </gruss>
 &xml;
</dokument>

Die Datei content.xml enthält folgenden Text:

<gruss> 
 Hallo mit XML
</gruss>

Der XML-Parser betrachtet das Dokument, welches in der Datei content.xml liegt als folgende textuelle Repräsentation:

<?xml version="1.0"?>
<dokument>
 <gruss>
 Hallo mit XML 
<gruss> 
<gruss>
  Hallo Welt
 </gruss> 
 <gruss> 
 Hallo mit XML 
</gruss>
</dokument> 

Es besteht noch die Möglichkeit, dass externe Entitäten vom XML-Parser nicht geparst werden, doch das spielt in diesem Tutorium erst einmal keine Rolle.

Die deutschen Umlaute können über Entities verwendet werden.

Außerdem können in DTDs auch Entities für beliebige Zeichen definiert werden, was sich anbietet für Zeichen, die unter Umständen nicht auf jeder Tastatur getippt werden können, wie Umlaute oder Kyrillische Buchstaben oder Griechische Buchstaben. In der DocBook-DTD sind hunderte dieser Zeichen als Entities definiert. Dies ist insbesondere dann wichtig, wenn die Zeichenkodierung des Dokuments dieses Zeichen nicht unterstützt.

Tabelle 1.2. Umlaute in der DocBook-DTD

UmlautEntität
ä
&auml;
Ä
&Auml;
ö
&ouml;
Ö
&Ouml;
ü
&uuml;
Ü
&Uuml;
ß
&szlig;

Kommentare

Kommentare werden vom XML-Parser ignoriert.

Kommentare werden in XML in der folgenden Art und Weise eingegeben: Vor dem Kommentar erscheint ein kleiner-als-Zeichen, ein Ausrufezeichen, dann zwei Bindestriche[3], dann der Inhalt des Kommentars, der sich auch über mehrere Zeilen erstrecken kann. Zum Abschluss des Kommentars erneut zwei Bindestriche und ein größer-als-Zeichen.

Beispiel 1.9. Kommentare in XML

<!-- Den XML-Parser interessiert das nicht -->


Zum Zeitpunkt der Erstellung dieses Dokuments war erst XML-Version 1.0 spezifiziert, aber Version 1.1 wurde bereits entwickelt.

aber nicht mehr als zwei