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.
<?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-ElementeXML-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.
<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 NamenFü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 ElementeWie 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.
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 ElementenWir 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.
| 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.

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.
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.
| 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.
AttributeAuch 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.
<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.
<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.)
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.
KommentareXML-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.
<?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 InstructionsProcessing 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.
<?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".
