Strukturelle Bestandteile von XML-Dokumenten
2.2.1 Strukturelle Bestandteile von XML-Dokumenten

XML-Dokumente sind aus Elementen aufgebaut, denen man mit Attributen Eigenschaften zuordnen kann und die in der Regel Text enthalten. Außerdem können zu XML-Dokumenten Kommentare und Verarbeitungsanweisungen (engl. "Processing Instructions") für bestimmte XML-Prozessoren gehören. Meist werden XML-Dokumente von einer so genannten XML-Deklaration eingeleitet. Die Eindeutigkeit der Namen von Elementen und Attributen wird gewährleistet, indem man sie so genannten Namensräumen zuordnet.

Beispiel 2.1 zeigt ein XML-Dokument, in dem sich bis auf Namensräume alle diese Komponenten wiederfinden lassen.

Beispiel 2.1: Gedichtabschnitt

<?xml version="1.0" encoding="utf-8"?> 
<!-- Dies ist der erste Kommentar. Am Anfang des Dokuments --> 
<!-- stand die XML-Deklaration. --> 
<!-- Es folgt eine Processing Instruction -->
<!-- mit der Angabe eines Stylesheets --> 
<?xml-stylesheet href="verse.xsl"?> 
<!-- Beginn des "Dokumentelements"; --> 
<!-- das Dokumentelement hat zwei Attribute: --> 
<gedicht verfasser="Kurt Tucholsky" pseudonym="Theobald Tiger"> 
<!-- es folgen weitere, z. T. ineinander eingebettete Elemente: --> 
  <titel>An die Berlinerin</titel> 
  <strophe> 
    <vers>Mädchen, kein Casanova</vers> 
    <vers>hätte dir je imponiert</vers> 
    <vers>Glaubst du vielleicht, was ein doofer</vers> 
    <vers>Schwärmer von dir phantasiert</vers> 
   </strophe> 
</gedicht> 
<!-- Ende des Dokumentelements; 
     Ende des Dokuments; 
     (XML-Kommentare können auch mehrere Zeilen umfassen!) --> 

In diesem Dokument kommen alle für die Struktur eines Dokuments wichtigen XML-Konstrukte vor, soweit sie nicht Dokumenttyp-Definitionen voraussetzen. Mit ihnen werden wir uns nun im Einzelnen beschäftigen:

Die in <!-- und --> eingeschlossenen Kommentare erläutern die verschiedenen Komponenten. Die XML-Deklaration am Anfang ist nicht unbedingt notwendig; es wird aber empfohlen, XML-Dokumente mit einer solchen Deklaration einzuleiten. In der XML-Deklaration ist die Versionsangabe obligatorisch, d. h. zwingend erforderlich. Die Angabe eines Stylesheets, mit dem das Dokument in ein anderes Format übertragen werden kann, erfolgt in einer Processing Instruction.

Mit Elementen und Attributen haben wir uns bereits in der ersten Lerneinheit beschäftigt. Wir haben gesehen, dass sich XML-Dokumente in einigen Punkten von üblichen HTML-Dokumenten unterscheiden:

  • Bei den Namen von XML-Elementen und -Attributen spielt die Groß- oder Kleinschreibung eine Rolle.

  • Alle XML-Elemente müssen mit einem Starttag beginnen und mit einem Endtag enden. Elemente ohne Inhalt können durch ein Empty-Element-Tag dargestellt werden.

  • Attributwerte müssen zwischen Anführungszeichen stehen; Attributwerte ohne Attributnamen sind nicht erlaubt.

Mit allen diesen Komponenten werden wir uns im Folgenden im Detail beschäftigen.

XML-Elemente

XML-Elemente beginnen mit einem Starttag und enden mit einem Endtag; beide sind durch spitze Klammern als Markup gekennzeichnet. Beispiel 2.2 zeigt ein ganz einfaches XML-Dokument mit nur einem Element.

Beispiel 2.2: Hallo Welt

 <gruß>Hallo Welt!</gruß> 

Beginn und Ende des — einzigen — Elements dieses Dokuments sind durch das Starttag <gruß> und das Endtag </gruß> gekennzeichnet. Zwischen ihnen befindet sich der Elementinhalt, in unserem Fall die Zeichenkette "Hallo Welt!". Der Name des Typs des Elements ist gruß; anders ausgedrückt: Das Element ist in diesem Fall vom Typ gruß.

Den Unterschied zwischen einem Element und einem Elementtyp kann man durch den Vergleich mit einem Auto und einem Autotyp veranschaulichen. Ein Autohersteller lässt Modelle bestimmter Typen (zum Beispiel a, b und c) produzieren; in der Fabrik werden dann konkrete Exemplare dieser Typen hergestellt. Der Name eines XML-Elementtyps entspricht der Typbezeichnung, er ist also kein Name für das einzelne Element dieses Typs. So wie man ein konkretes Auto darüber hinaus mit einem Nummernschild und — wenn man möchte — auch mit einem Namen identifizieren kann, lässt sich dem einzelnen Element ein Attribut des Typs ID und ein Attribut wie name zuordnen.

Zurück zu unserem Element vom Typ gruß. Wie verarbeitet der Rechner die Zeichenfolge <gruß>Hallo Welt!</gruß> ?

Der Rechner versteht nicht die Bedeutung (Semantik) der Zeichenfolgen "gruß" oder "Hallo Welt!". Für den Rechner handelt es sich dabei einfach um irgendwelche beliebige Zeichenketten wie z. B. "abc" oder "xyz". Dass in einer Zeichenfolge <abc>xyz</abc> "xyz" der Inhalt eines Elements mit dem Namen oder vom Typ "abc" ist, bedeutet nichts anderes, als dass sich der Zeichenfolge "xyz" durch die Zeichenfolge "abc" mögliche Verarbeitungen zuordnen lassen. Diese Information entnimmt das informationsverarbeitende System der Zeichenfolge <abc>xyz</abc>. Die Zeichen <, > und / geben dem Computer diese Information und spielen dann keine Rolle mehr für ihn. Den Vorgang, bei dem der Computer einer Zeichenfolge <abc>xyz</abc> entnimmt, dass es sich bei "xyz" um ein Element vom Typ "abc" handelt, bezeichnet man als "Parsen" oder "Analysieren" der Zeichenkette (engl.: to parse; im Deutschen manchmal auch: "Parsieren"; der englische Ausdruck bedeutet ursprünglich das Zerlegen eines Satzes in seine Bestandteile und seine grammatische Analyse).

Die vom Markup bereinigten Inhalts- und Strukturinformationen bilden die "Informationsmenge" des XML-Dokuments. Wir verwenden diesen Ausdruck zunächst im umgangssprachlichen Sinn von "Menge" für alle Informationen, die ein Parser einem XML-Dokument entnimmt, so dass sie von anderen Programmkomponenten oder Anwendungen weiterverarbeitet werden können. In unserem Beispiel ließe sich die Informationsmenge also ungefähr wie folgt beschreiben: "xyz" ist der Inhalt eines Elements vom Typ abc. Im Schlussabschnitt wird darauf eingegangen, wie man diese Beschreibung im Sinne der W3C-Empfehlung XML Infoset präzisieren kann.

Das oben angeführte Beispiel hat uns einige zentrale Begriffe und Konzepte zu XML vorgeführt, die uns die ganze Qualifikationseinheit hindurch begleiten werden:

  • Markup,

  • Element,

  • Parsen,

  • Informationsmenge.

Die weiteren Auszeichnungen, die wir kennen lernen werden, vergrößern die Informationsmenge, die dem Computer zu einer Zeichenkette mitgegeben wird.

Was kann der Rechner mit dieser Information anfangen? Wozu dient diese Auszeichnung eines "Elements"? Vergleichen wir eine Folge von ausgezeichneten Zeichenketten mit einer nicht ausgezeichneten Folge:

deskriptive generische Auszeichnungen keine Auszeichnungen

<Artikel>Getriebe</Artikel>
<Preis>50.30</Preis> 
<Gewicht>23.50</Gewicht>
<Typnummer>18273</Typnummer> 
<Bestellmenge>2500</Bestellmenge>

Getriebe,50.30,23.50,18273,2500

Unabhängig vom tatsächlichen Elementinhalt geben für einen menschlichen Leser die Elementnamen "Artikel", "Preis" usw. aber bereits wichtige Informationen, nämlich dass es sich bei den eingebetteten Zeichenfolgen voraussichtlich um einen Artikelnamen, eine Preisangabe etc. handeln soll. Was der Computer mit diesen Folgen anfängt, muss ihm eine Anweisung oder ein Programm sagen. Aus den Zeichen und Auszeichnungen allein kann der Rechner nicht entnehmen, wie er sie verarbeiten soll.

Die Verarbeitung kann darin bestehen, dass der Rechner die Informationen in einer Tabelle oder Datenbank mit Feldern für "Artikel" und "Preis" speichert. Sie kann auch darin bestehen, dass er die Informationen in bestimmter Weise auf dem Bildschirm oder im Druck darstellt, Artikelbezeichnungen z. B. kursiv und Preisangaben fett wiedergibt. Das XML-Dokument selbst lässt diese und zahlreiche andere Möglichkeiten zu, es stellt durch "generische Auszeichnungen" lediglich das Ausgangsmaterial dazu bereit.

Unabhängig davon, was der Rechner mit den Elementnamen anfängt, benötigt er aber für die Zuordnung von Elementtypen und Elementinhalten keine weiteren Informationen. Jeder XML-Prozessor kann diese Zuordnungen vollziehen bzw. einem Dokument die entsprechende Informationsmenge entnehmen. Der Vorteil von XML besteht darin, für diese (und weitere) Zuordnungen universale Regeln anzugeben, so dass völlig unterschiedliche Anwendungen mit demselben Parser arbeiten können.

Ohne die expliziten Auszeichnungen, wie etwa bei der Verwendung von Komma-getrennten Werten (CSV, vgl. Lerneinheit 01) im zweiten Teil des Beispiels oben, kann es dagegen vorkommen, dass der Rechner individuell programmiert werden muss, um mit diesen Zeichenfolgen etwas anfangen zu können. Aufgabe einer solchen Programmierung ist es z. B., den Computer dazu zu veranlassen, die Zeichenkette nach dem ersten Komma als Preisangabe zu verarbeiten. Auch in diesem Fall wird die Zeichenkette "geparst", der Parser ist aber auf einen individuellen Fall abgestimmt und versagt bei allen Zeichenketten anderer Art. Generell ist die XML-Syntax so entworfen, dass auf ihrer Basis universale Parser entwickelt werden können, die jedem beliebigen XML-Dokument eine definierte Informationsmenge entnehmen können. Lerneinheit 05 befasst sich ausführlicher mit universalen XML-Parsern.

XML-Dokumente erlauben durch die genau festgelegte Syntax für Auszeichnungen eine Strukturierung auf einem höheren Abstraktionsniveau als dem der Zeichenkette oder Komma-getrennter Werte. Diese Strukturierung kann eine sehr hohe Komplexität erreichen. Sie ist außerdem verallgemeinerbar, lässt sich also auf sehr unterschiedliche Anwendungssituationen übertragen.

Regeln für Namen

Für die Namen von Elementen gelten bestimmte Regeln, die auch für alle anderen Namen bei XML (insbesondere Attributnamen) bestehen:

  • Namen müssen mit einem Buchstaben (aus dem Zeichenvorrat von Unicode) oder einem Unterstrich (engl. "underscore", also "_") beginnen.

  • In ihnen sind beliebig viele Buchstaben (aus dem Zeichenvorrat von Unicode), Ziffern, Bindestriche, Punkte oder Unterstriche erlaubt, nicht aber Leer- und Sonderzeichen.

  • Groß- oder Kleinschreibung von Buchstaben sind bedeutungsunterscheidend.

  • Namen dürfen nur dann mit der Zeichenfolge "xml" (unabhängig von der Groß- oder Kleinschreibung einzelner Buchstaben) beginnen, wenn sie vom W3C definiert worden sind.

  • Doppelpunkte in Elementnamen sind nur in Verbindung mit XML-Namensräumen erlaubt (siehe unten).

Es ist also durchaus möglich, Umlaute, Buchstaben mit Akzenten oder asiatische ideografische Zeichen in Elementnamen zu verwenden. Leerzeichen sind in Elementnamen nicht erlaubt, da im Starttag Leerzeichen als Trennzeichen zwischen Elementnamen und Attributnamen dienen.

Leere Elemente

Wie wir bereits mehrfach gesehen haben, müssen Elemente nicht unbedingt einen Inhalt haben. Es ist auch möglich, dass Elemente leer sind. Ein leeres Element kann als Starttag unmittelbar gefolgt vom zugehörigen Endtag notiert werden, also z. B. <Artikel></Artikel>. Zu beachten ist, dass sich weder Leerzeichen noch Zeilenumbrüche zwischen den beiden Tags befinden dürfen, da diese Textdaten darstellen und das Element folglich nicht leer ist.

Alternativ zu dieser Schreibweise kann auch ein spezielles Empty-Element-Tag — ein Tag für leere Elemente — verwendet werden. Es wird gebildet wie ein Starttag für das entsprechende Element, mit der Besonderheit, dass es nicht mit einer einfachen spitzen Klammer beendet wird, sondern mit der Zeichenkette "/>" (zum Beispiel: <Artikel/>). Die unterschiedlichen Schreibweisen für leere Elemente haben auf die Informationsmenge keinerlei Einfluss, die Ausgabe des Parsers ist identisch.

Welchen Sinn hat es, Elemente ohne Inhalt zu verwenden? Zwei Verwendungen sind häufig: Leere Elemente können Inhalte in Attributen speichern (siehe unten), oder sie dienen zur Unterscheidung zweier unterschiedlicher Zustände, repräsentiert durch die Anwesenheit oder Abwesenheit des jeweiligen Elements. Letzteres erinnert bereits stark an prozedurales Markup und findet sich daher auch häufig im Layout-orientierten (Teil-)Vokabular von Auszeichnungssprachen wie XHTML. Dort dient beispielsweise der Elementtyp hr zum Einfügen einer horizontalen Linie in den Layout-Strom.

Die Element-Hierarchie

Ein XML-Element kann — außer oder statt Textzeichen — weitere XML-Elemente enthalten. Neben dem Elementnamen gehört die Position in der Hierarchie zu den wichtigsten Informationen, die ein Parser einem Dokument über ein Element entnehmen kann.

Einbettung von Elementen

Wir haben bereits in der ersten Lerneinheit gesehen, dass Elemente strikt hierarchisch ineinander eingebettet sein müssen. Die erste der beiden Konstruktionen in Beispiel 2.3 ist erlaubt, die zweite hingegen nicht.

Beispiel 2.3: Überlappung von Elementen

erlaubt nicht erlaubt

<mitarbeiter> 
  <name>Peter Müller</name>
  <beruf>Programmierer</beruf>
</mitarbeiter> 

<mitarbeiter>
  <name>Peter Müller
    <beruf>IBM</name>-Programmierer</beruf>
</mitarbeiter>

Im zweiten Fall überlappen sich die Elemente beruf und name, und die Zeichenkette "IBM" kann nicht eindeutig einem, sondern allenfalls beiden Elementen zugeordnet werden. Man kann sich leicht vorstellen, dass es wesentlich schwieriger ist, einen XML-Prozessor zu entwickeln, der solche Konstruktionen interpretiert, als einen XML-Prozessor, der mit einer Hierarchie ineinander eingebetteter Elemente arbeitet. Um XML einfach zu halten, sind solche Konstrukte in XML von vornherein ausgeschlossen.

Durch die strikte Hierarchie der ineinander eingebetteten Elemente in einem XML-Dokument kann von jeder Zeichenfolge eindeutig gesagt werden, zu welchem Element sie unmittelbar gehört. Das gleiche gilt für Elemente, die zum Inhalt eines anderen Elements gehören. Man spricht davon, dass die Elemente bzw. Texte ein eindeutiges "parent"- oder Elternelement haben; umgekehrt liegt bei jedem Element eindeutig fest, welche Elemente seine "children" oder "Kinder" sind.

Zur Illustration dieses Sachverhalts geben wir in Abbildung 2.1 noch einmal die bereits aus Lerneinheit 01 bekannte Baumdarstellung eines XML-Dokuments wieder.

Grafik 2.1

Abbildung 2.1: Hierarchische Schachtelung von Elementen in einem XML-Dokument

Die Position eines Elements in einer Element-Hierarchie gehört wie der Name des Elementtyps zu den Informationen, die ein Parser einem wohlgeformten XML-Dokument entnimmt. Das einzelne Element bzw. der Elementinhalt kann damit zu unterschiedlichen Kontexten gehören. Entsprechend diesen unterschiedlichen Kontexten kann es unterschiedlich verarbeitet werden. In unserem Beispiel oben kann der Name "Peter Müller" innerhalb des Elements mitarbeiter z. B. in bestimmter Weise für einen Adressaufdruck verwendet werden. Würde er zu einem Element liste gehören, könnte er vielleicht bei einer Zählung von Namen eine Rolle spielen. Je nach Kontext könnten Anwendungen verschieden mit dem Element verfahren.

Das Dokumentelement

Um den Kontext eines Elements eindeutig bestimmen zu können, muss es bei ineinander eingebetteten Elementen ein oberstes Element geben. Die Elemente sind wie in einer Baumstruktur hierarchisch ineinander geschachtelt; dabei hat das Dokumentelement die Funktion der Wurzel des Baums der Elemente. Mit der Ausnahme des obersten Elements ist jedes Element in einem XML-Dokument ein Kind oder ein direkter Nachfahre genau eines Elements, so dass sich seine Position in der Hierarchie sehr einfach bestimmen lässt. Wir werden später noch sehen, wie sich Baummodelle für alle Bestandteile von XML-Dokumenten verwenden lassen.

Vergleichen wir einmal die bereits bekannten Dokumentfragmente in Beispiel 2.4 miteinander.

Beispiel 2.4: Eindeutigkeit des Dokumentelements

eindeutig (wohlgeformtes XML) mehrdeutig (kein wohlgeformtes XML)

<mitarbeiter> 
  <name>Peter Müller</name>
  <beruf>Programmierer</beruf>
</mitarbeiter> 

<name>Peter Müller</name>
<beruf>Programmierer</beruf>

Im ersten Fall gehört die Zeichenkette "Peter Müller" zu dem Element name und dieses wiederum zu einem Element mitarbeiter. Wenn das Element mitarbeiter nicht seinerseits zu einem anderen Element gehört, ist damit die Position des Elements name und seines Inhalts eindeutig bestimmt. Im zweiten Fall ist nicht klar, ob und wie die beiden Elemente zusammengehören. Es gibt kein Element, zu dem die Elemente name und beruf gehören.

Man nennt das hierarchisch oberste Element Dokumentelement (engl. "document element"), mit Rücksicht auf die Baumstruktur gelegentlich auch Wurzelelement (engl. "root element"). Im ersten Fall ist mitarbeiter das Dokumentelement; in zweiten Fall gibt es kein Dokumentelement. Das Dokument wäre in diesem Fall unvollständig bzw. kein wohlgeformtes XML-Dokument.

Jedes XML-Dokument, das aus mehreren Elementen besteht, besitzt eine Struktur aus ineinander eingebetteten Elementen und hat ein Dokumentelement, zu dem alle weiteren Elemente gehören. Wir haben damit folgende Bestandteile der Informationsmenge kennen gelernt, die ein Parser einem XML-Dokument entnimmt:

  • Welches Dokumentelement hat das Dokument?

  • Welche Kinder hat jedes der Elemente des Dokuments?

  • Welches Elternelement hat jedes der Elemente des Dokuments?

  • Welche Zeichenkette bildet den Inhalt jedes Elements des Dokuments?

Im Falle des ersten Beispiels ist mitarbeiter sowohl das Dokumentelement als auch das Elternelement von name und beruf.

Ein XML-Parser geht davon aus, dass ein Element eines Dokuments, das nicht von weiteren Elementen eingeschlossen ist, das Dokumentelement ist. Es darf also auch nur ein solches Element geben; sonst liefert der Parser eine Fehlermeldung. Ausnahmen von dieser Regel gibt es nur, wenn der Parser XML-Fragmente verarbeitet, die er eindeutig einem (logischen) XML-Dokument zuordnen kann. Auf solche Fälle werden wir in späteren Lerneinheiten eingehen.

Da ein Parser ein Dokument in der Regel als Folge von Zeichen, also sequentiell, verarbeitet, interpretiert er das erste Starttag, auf das er stößt, als Beginn des Dokumentelements.

Attribute

Auch Attribute sind uns bereits mehrfach begegnet, z. B. in einem XHTML-Element wie <a href="http://www.news.com">CNET</a>. Ein Attribut wird im Starttag eines Elements angegeben und besteht aus einem Attributnamen und einem Attributwert, zwischen denen ein Gleichheitszeichen steht. In unserem Beispiel hat das Element a ein Attribut mit dem Attributnamen href und dem Attributwert "http://www.news.com". XML-Attributwerte müssen in Anführungszeichen stehen; es sind einfache und doppelte Anführungsstriche möglich. Man kann also auch schreiben: <a href='http://www.news.com'>CNET</a>. Sollen innerhalb eines Attributwerts doppelte Anführungszeichen vorkommen, kann man sie in einfache Anführungszeichen einschließen, z. B. in <zitat original='"to be or not to be"'>Sein oder Nichtsein</zitat>. Sollen innerhalb eines Attributwerts einfache Anführungszeichen vorkommen, kann man sie in doppelte Anführungszeichen einschließen, z. B. in <zitat original="'to be or not to be'">Sein oder Nichtsein</zitat>. (Benötigt man sowohl einfache wie doppelte Anführungszeichen innerhalb des Attributwerts, muss man sogenannte "generelle Entities" verwenden, mit denen wir uns noch beschäftigen werden.)

Auch leere Elemente können Attribute haben. Möglich ist z. B.:

<mitarbeiter name="Peter Müller"/>

Ein Element kann beliebig viele Attribute besitzen, wie in Beispiel 2.5 gezeigt. Hier ist auch zu erkennen, wie Zeilenumbrüche in Starttags eingefügt werden können, um eine übersichtlichere Darstellung in einem XML-Dokument zu erzielen. Grundsätzlich gilt, dass Leerzeichen und Zeilenumbrüche an beliebigen Stellen innerhalb von Start- und Endtags erlaubt sind; lediglich zwischen dem öffnenden Begrenzer eines Tags (bei einem Starttag also "<", bei einem Endtag "</") und dem Elementnamen dürfen keine weiteren Zeichen auftreten. Auf die Informationsmenge haben diese zusätzlichen Zeichen keinen Einfluss.

Beispiel 2.5: Verwendung mehrerer Attribute


<mitarbeiter name="Peter Müller" beruf="Programmierer" 
             Firma="IBM" personal-nr="73-4623-84" 
/>

Jedes Attribut eines Elements muss einen eigenen Namen haben; die Konstruktion aus Beispiel 2.6 ist also nicht erlaubt.

Beispiel 2.6: Falsche Attributbenennung


<mitarbeiter wert="Peter Müller" wert="Programmierer" wert="IBM"/>

Zur Informationsmenge, die ein XML-Parser einem XML-Dokument entnehmen kann, gehört bei den Kindern von Elementen auch ihre Position innerhalb der Dokumentordnung, bei Attributen hingegen nicht. Die Attribute eines Elements werden lediglich über ihren Namen identifiziert. Die Reihenfolge spielt bei Attributen keine Rolle. Es gibt also — jedenfalls für einen XML-Parser — das Attribut name für das Element mitarbeiter, aber nicht "das Attribut an erster Position" oder "das Attribut an zweiter Position". Für die Namen von Attributen gelten dieselben Regeln wie für Elementnamen. Werte von Attributen können prinzipiell beliebige Zeichenketten sein, sie dürfen aber kein Markup enthalten.

Zu der Informationsmenge, die ein XML-Parser aus einem XML-Dokument entnimmt, gehören für jedes Element die Attributnamen und Attributwerte. Deshalb stellt sich häufig die Frage, wozu man Attribute benötigt und wann man Informationen besser in Attributen als in Elementinhalten unterbringt. Prinzipiell lässt sich jede Zeichenkette, die den Inhalt eines Attributs bildet, auch als Inhalt eines Elements wiedergeben. Statt


<zitat original='"to be or not to be"'>Sein oder Nichtsein</zitat>

könnte man auch schreiben:


<zitat><original>"to be or not to be"</original>Sein oder Nichtsein</zitat>

Da Attributwerte kein Markup enthalten, kann man allerdings nicht alle Elementinhalte durch Attributwerte ersetzen.

(In Lerneinheit 04 werden wir sehen, dass man in einer Dokumenttyp-Definition den Typ von Attributen in einer Weise bestimmen kann, die bei Elementen nicht möglich ist — sieht man von neueren Techniken wie XML-Schema ab. Es gibt z. B. den Attributtyp ID, mit dem man einem Element in einem Dokument einen eindeutigen Bezeichner zuordnen kann.)

Hinweise für Menschen und Maschinen: Kommentare und Processing Instructions

Kommentare und Processing Instructions gehören zum Markup eines Dokuments. Der XML-Parser entnimmt ihren Inhalt und stellt ihn für die weitere Verarbeitung zur Verfügung. Anders als bei den bisher kennen gelernten Dokumentauszeichnungen richten sich diese Informationen aber an menschliche Leser, oder sie sind für die Steuerung weiterer Verarbeitungsschritte bestimmt.

Kommentare

XML-Kommentare sind grundsätzlich genauso aufgebaut wie nicht-leere Kommentare in HTML. Sie beginnen immer mit der Zeichenfolge <!-- und enden mit der Zeichenfolge --> (das heißt insbesondere, der aus HTML bekannte leere Kommentar <!> ist nicht erlaubt). In Kommentare lassen sich beliebige Informationen einschließen, die für die Verarbeitung des Dokuments durch einen Parser oder eine Anwendung in der Regel keine Rolle spielen. (Dabei ist nicht ausgeschlossen, dass eine Software in Kommentare eingebettet Informationen zur Verarbeitung eines Dokuments verwendet, so wie es sich beim Einbetten von JavaScript-Code in HTML-Kommentare vielfach eingebürgert hat. Es handelt sich dabei um eine nicht empfehlenswerte und bei XML auch überflüssige Praxis.)

Beispiel 2.7 zeigt ein einfaches XHTML-Dokument mit Kommentaren.

Beispiel 2.7: Kommentare

 
<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:xyz="http://www.w3.org/2000/svg"> 
  <head> 
    <title>Rechteck</title>
  </head> 
  <body> 
    <p>Rechteck als Beispiel für Namensräume:</p> 
    <!-- Hier folgt ein SVG-Abschnitt, um zu zeigen, 
         wie XML-Namensräume funktionieren --> 
    <xyz:svg> 
    <!-- <xyz:rect....> steht für ein Rechteck. --> 
    <!-- stroke="black" fill="none" bedeutet: 
         mit schwarzem Rand und ohne Füllung" --> 
    <xyz:rect stroke="black" fill="none"  
              hyper:href="http://www.boringsquares.de" 
              xmlns:hyper="http://www.w3.org/1999/xlink"/> 
    </xyz:svg> 
    <p>Ende des Beispiels</p> 
  </body> 
</html> 

Mit Ausnahme der schließenden Zeichenfolge (-->) dürfen doppelte Bindestriche (--) zwischen den Begrenzungen eines Kommentars nicht vorkommen. Unmittelbar vor der schließenden Zeichenfolge darf kein Bindestrich stehen, d. h. drei Bindestriche vor der schließenden spitzen Klammer (--->) sind nicht erlaubt. Untersagt sind ebenfalls Kommentare innerhalb von Kommentaren. Kommentare können an jeder Stelle in einem Dokument vorkommen, auch vor oder nach dem Dokumentelement, da sie selbst ja keine Elemente sind. Nicht möglich sind aber Kommentare innerhalb von Markup — mit Ausnahme der Dokumenttyp-Deklaration (DTD), worauf wir in der Lerneinheit 04 gesondert eingehen werden.

Kommentare sind eine optionale Komponente. Es wird aber dringend empfohlen, beim manuellen Erstellen von XML-Dokumenten von mehr als minimaler Komplexität Kommentare zu verwenden. Wie für Quellcode in einer Programmiersprache gilt für XML-Dokumente, dass sie vielfach nicht intuitiv verständlich sind, meist leider schon nach kurzer Zeit nicht einmal für die Verfasserin oder den Verfasser. Im Sinne des Wunsches "be the source with you" sollten komplexere XML-Dokumente daher durch Kommentare leichter lesbar gemacht werden.

Processing Instructions

Processing Instructions (deutsch: Verarbeitungsanweisungen, kurz "PIs" genannt) sind ein Gegenstück zu Kommentaren. Wie diese gehören sie zum Markup, sind aber keine Elemente und können deshalb auch vor oder nach dem Dokumentelement stehen. Anders als Kommentare richten sie sich an ein "nichtmenschliches Publikum", nämlich an ein Anwendungsprogramm, das das XML-Dokument ganz oder teilweise verarbeiten soll.

Processing Instructions werden zwischen "<?" und "?>" eingeschlossen. Auf das erste Fragezeichen folgt das Ziel oder "target" der PI, oftmals der Name der Anwendung, die das Dokument verarbeiten soll. Der Rest der Processing Instruction stellt eine Anweisung für diese Anwendung dar, die nur von dieser verstanden bzw. ausgeführt werden muss, so dass hier keine weiteren XML-Regeln nötig sind.

Eine der häufigsten Verwendungen von Processing Instructions ist die Angabe eines XSLT-Stylesheets zur Transformation eines XML-Dokuments in HTML. Mit einer solchen PI ausgestattete XML-Dokumente werden beispielsweise von den Webbrowsern Mozilla oder dem Internet Explorer von Microsoft in HTML konvertiert. Die Processing Instruction zur Konvertierung der vorliegenden Lerneinheit auf dem Rechner des Verfassers zeigt Beispiel 2.8.

Beispiel 2.8: Processing Instruction

<?xml-stylesheet
  href="file:/styles/docbook/html/docbook.xsl" 
  type="text/xsl"?> 

Hier ist "xml-stylesheet" das "target" der Processing Instruction. Dabei handelt es sich um einen der für die Verwendung durch das W3C reservierten Bezeichner mit dem Präfix "xml".