XML-Know How

Kennzeichnung der Struktur mit XML-Elementen

Die Vereinbarung für die Kennzeichnung von Strukturelementen in XML lautet: Ein Element wird immer durch eine Start- und eine Endekodierung begrenzt. Der Wortlaut dieser »Elementbezeichner« ist frei wählbar, er muss von spitzen Klammern umschlossen sein.

Diese Elementbezeichner werden Tags (engl. tag = Markierung) genannt und in Starttag und Endetag unterschieden. Dabei entspricht die Ende-Markierung (das Endetag) der Anfangsmarkierung (dem Anfangstag), erweitert um einen zusätzlichen Schrägstrich »/« (slash) unmittelbar hinter der öffnenden Klammer.

Außerdem gelten folgende Regeln:
Elementnamen

  • ... müssen mit Buchstaben oder »_« beginnen
  • ... dürfen Buchstaben, Ziffern, »-«, ».«, und »_« enthalten
  • ... dürfen nicht mit »xml« beginnen
  • ... sind case-sensitive (Groß-Kleinschreibung wird ausgewertet:
    <Tagname> und <tagname> werden unterschieden).

Ein Beispiel:

<autor>Umberto Eco</autor>

Dabei ist <autor> das Start-Tag, </autor> das Endetag und Umberto Eco der Inhalt des Elements »autor«.

In der XML-Terminologie umfasst der Begriff Element also je ein zusammengehöriges Start- und Endetag-Paar mit allem, was dieses Tagpaar umschließt. Der von dem Tagpaar umschlossene Inhalt wird meist Content genannt.

Ein Element kann als Content direkt Text enthalten. In XML nennt man solchen Textcontent PCDATA-Content. In »PCDATA« steht »CDATA« für englisch character data, Zeichendaten. Das »P« steht für parsed, was meint, dass ein Parser diesen Text nach weiteren Tags durchsucht. Ist nur Text ohne weitere Elemente erlaubt, gibt es eine Fehlermeldung, wenn der Parser dennoch welche findet. Wenn der Text mit weiteren Elementen angereichert ist (mixed content, dazu unten mehr), müssen freilich die entsprechenden Tags ausgewertet werden. Außerdem können im Text spezielle Kürzel z. B. für Sonderzeichen auftreten (entity references, auch dazu unten mehr), die der Parser ebenfalls auswerten muss.

Typisches Beispiel für reinen PCDATA-Content ist ein in XML kodierter Absatz:

<absatz>Text des Absatzes</absatz>

Ein Absatz wiederum wird oft Textteile enthalten, die gesondert gekennzeichnet werden müssen. Ein Beispiel: In einem Text sollen die Namen von Wissenschaftlern recherchierbar sein. In XML wird nun zur Kennzeichnung dieser Textelemente jeder Name eines Wissenschaftlers als eigenes Element in Tags gesetzt.

<absatz>Hier ist <wissenschaftler>Meier</wissenschaftler> anderer Aufassung als <wissenschaftler>Schulze
</wissenschaftler>.</absatz>

XML-Elemente können also eine Mischung aus PCDATA-Content und weiteren Elementen enthalten. Solchen gemischen Content nennt man in der englisch geprägten XML-Terminologie Mixed Content.

Eine Reihe von Strukturelementen enthält nicht direkt inhaltlichen Text, sondern ausschließlich weitere Elemente. Ein Kapitel enthält beispielsweise in aller Regel nicht unmittelbar Text, sondern Text in Überschriften und Text in Absätzen. Daher wird ein XML-Element für ein Kapitel zuerst Elemente für Überschrift und Absätze enthalten, in denen wiederum der inhaltliche Text zu stehen kommt.

Ein Element, das keinen direkten PCDATA-Content aufweist, sondern nur andere Elemente enthält, nennt man Container Element. Im folgenden Beispiel ist das Element <kapitel> ein Container Element:

<kapitel>
<überschrift>Text der Überschrift</überschrift>
<absatz>Text des 1. Absatzes.</absatz>
<absatz>Text des 2. Absatzes.</absatz>
<absatz>Hier ist <wissenschaftler>Meier</wissenschaftler> ganz anderer Aufassung.</absatz>

</kapitel>

Die einzelnen Elemente können je nach Bedarf und gewünschter Auszeichnungstiefe auch noch weiter untergliedert werden und dabei hierarchisch beliebig tief geschachtelt sein.

Eine zentrale Regel in XML ist, dass sich Elemente nicht überlappen dürfen. Andernfalls könnte keine eindeutige Hierarchie aus den Daten erschlossen werden. Ein Element, das in einem anderen enthalten ist, muss also abgeschlossen sein, bevor das es umgebende Element (Container) abgeschlossen wird.

Korrekt wäre also folgende Auszeichnung:

<autor>
<vorname>
Umberto</vorname>
<nachname>
Eco</nachname>
</autor>

Falsch hingegen, weil das Endtag </autor> vor dem Endtag </nachname> steht, wäre:

<autor>
<vorname>
Umberto</vorname>
<nachname>
Eco</autor></nachname>

Das Verhältnis von ineinander geschachtelten Elementen wird mit Verwandtschaftsmetaphern beschrieben. Ein Element, das in einem anderen Element steckt, nennt man das Kind-Element (child), jenes, in dem es steckt, das Eltern-Element (parent). Liegt mehr als eine Ebene zwischen den Elementen, spricht man dementsprechend von Vorfahren (ancestors) und Nachfahren (descendants). Elemente einer Ebene heißen Geschwister (sibling).

Schließlich gibt es noch leere Elemente (empty elements). Leere Elemente enthalten weder PCDATA noch sind sie Container für andere Elemente. Sie dienen überwiegend als Platzhalter für Nichttext-Daten, also für Grafiken, Ton- oder Videodaten. Solche Daten können in der Regel nicht in XML-Form abgespeichert werden, so dass an ihrer Stelle ein Platzhalter benötigt wird, der bei der Ausgabe am Bildschirm oder im Print durch den eigentlichen Inhalt ersetzt wird.

Ein leeres Element benötigt kein Endetag. Um das verbleibende »Start«-Tag als leeres Element eindeutig zu kennzeichnen, wird es mit einem »/« abgeschlossen:

<grafik/>

Eine letzte formale Regel hinsichtlich der Elemente, die für alle XML-Dokumente gilt: es muss immer ein einziges oberstes Element geben, das alle anderen umschließt. Ein XML-Dokument, das aus mehreren Kapiteln besteht, muss also ein weiteres Element haben, das in der Hierarchie ganz oben steht. Ein solches Element nennt man Root-Element. Im Beispiel wäre <buch> das Root-Element:

<buch>
   <kapitel>
    ...
    </kapitel>
    <kapitel>
    ...
    </kapitel>

</buch>