XML/Regeln/Tags, Attribute, Wertzuweisungen und Kommentare

Aus SELFHTML-Wiki
< XML‎ | Regeln
Wechseln zu: Navigation, Suche

Grundelemente eines XML Dokuments

Elemente und Knoten

Illustration eines Wurzelbaums
Illustration eines Wurzelbaums

Wie bereits erwähnt, hat jedes Dokument genau ein „Element“. Ein Element ist ein Datenpäckchen, das wie folgt charakterisiert ist: - Es hat einen Namen - Es hat einen Namensraum - ein Namensraum legt fest, welche Bedeutung ein bestimmter Name haben soll - Es hat Attribute, das ist eine Liste von Pärchen aus Name und Wert, die Informationen zum Element darstellen. - Es hat einen Inhalt. Dieser Inhalt besteht aus einer Liste, die Elemente, aber auch andere Typen von Datenpäckchen enthalten kann. Der Oberbegriff für diese Datenpäcken ist Knoten. Die untergeordneten Knoten eines Elements nennt man Kind-Knoten, das Element, dem sie zugeordnet sind, demzufolge das Elternelement.

Der Begriff Knoten stammt daher, dass die Eltern-Kind Struktur, die durch die Inhaltslisten entsteht, eine Struktur erzeugt, die in der Informatik Baum genannt wird. Die Stellen, wo der Baum sich verzweigt, nennt der Informatiker Knoten (engl. Node).

Außer Elementknoten gibt es auch Textknoten (für einfachen Text) und Kommentarknoten (Text, den der Autor des Dokuments als Erläuterung hinzugefügt hat). Attribute werden in XML ebenfalls als Knoten behandelt, aber sie werden in ihrem Element in einer eigenen Liste geführt.

Die Möglichkeit, eine Liste von Kind-Knoten zu besitzen, ist ausschließlich bei Elementknoten gegeben.

Tags

XML legt das Verfahren fest, wie man einen solchen Elementbaum in Textform aufschreibt. Das funktioniert so, dass man den Inhalt eines Elements aufschreibt. Vor und hinter diesen Inhalt setzt man zwei bestimmte Zeichenfolgen: die Tags. Der englische Begriff tag steht für Etikett oder eben Markierung.

Das Tag vor dem Elementinhalt – das Start-Tag – besteht aus dem Namen des Elements, der in spitze Klammern gesetzt wird. Hinter dem Elementinhalt folgt das Ende-Tag, bei dem vor dem Namen noch ein Schrägstrich hinzugefügt wird.

Ein Element namens source hätte demnach das Start-Tag <source> und das Ende-Tag </source<<>.

Ein Element mit dem Namen Kunde, das als Inhalt einen einfachen Text besitzt, würde so aufgeschrieben:

Beispiel
<Kunde>Müller, Maximilian</Kunde>

Der Inhaltstext wird dem Element in Form eines Textknotens als Kind-Knoten zugeordnet.

Für Tags ohne Inhalt existiert eine Sonderschreibweise in XML. Man verschiebt dafür den Schrägstrich aus dem Ende-Tag ans Ende des Start-Tags und lässt das Ende-Tag weg:

Beispiel
<Kunde />

Erlaubte Namen

Die Namen für Attribute und Elemente müssen bestimmten Regeln folgen. Für das erste Zeichen eines Namens gelten dabei strengere Regeln als für den Rest.

Das erste Zeichen kann sein:

  • Ein ASCII-Klein- oder Großbuchstabe (a-z, A-Z)
  • Ein Unterstrich
  • Die meisten Unicode-Zeichen ab Codepunkt #xC0. Die Details finden sich in der XML Spezifikation[1], als Daumenregel gilt: Erlaubt sind Buchstaben aus allen Sprachen mit und ohne Akzent, chinesische Ideogramme und alles in Unicode-Ebene 1 bis 14.

Der Doppelpunkt ist prinzipiell ebenfalls als Teil eines Namens erlaubt, hat aber eine Sonderbedeutung für Namensräume und soll darum in Namen vermieden werden.

Ab dem zweiten Zeichen können zusätzlich verwendet werden:

  • Das Bindestrichminus '-', der Punkt '.', die ASCII-Ziffern 0-9, das Zeichen #xb7 ('·'), die kombinierenden diakritischen Zeichen 0x300-0x6F und die Bindebögen #x203F und #x2040.

Erlaubte Zeichen und Entitäten

Wie Sie gesehen haben, wird das Zeichen < dazu verwendet, zwischen dem Kontext Tag und dem Kontext Inhalt umzuschalten. Deshalb darf dieses Zeichen nicht direkt in XML-Dokumenten verwendet werden. Um das < und auch andere, per Tastatur schlecht erreichbare Zeichen als Text nutzen zu können, kennt XML den Begriff der Entität. Dabei handelt es sich um eine Art vordefinierter Konstante, die überall dort verwendet werden kann, wo Textinhalte erlaubt sind.

Um den Inhalt einer Entität abzurufen, verwendet man eine Entitätsreferenz. Diese besteht aus dem Zeichen &, dem Namen der Entität und einem Semikolon. Einige Entitäten sind vordefiniert, die Entität für < lautet lt. Da das Zeichen & dadurch auch eine Sonderbedeutung bekommen hat, darf es ebenfalls nicht direkt verwendet werden und wird durch die vordefinierte Entität amp abgebildet.

Verwenden von Entitäten
<Kunde>Müller &amp; Co</Kunde>
<formel>a + b &lt; 10</formel>

Es ist auch möglich, eigene Entitäten zu definieren. Darauf gehen wir in den Artikeln zu DTDs ein.

Attribute

Attribute sind neben dem Inhalt weitere Eigenschaften von Elementen. Im Gegensatz zu Elementen stellt ihr Inhalt lediglich eine einfache Zeichenkette dar. Um sie im XML-Dokument zu notieren, fügt man sie im Start-Tag des Elements zwischen dem Namen und der schließenden spitzen Klammer ein. Dazu schreibt man den Attributnamen, ein Gleichheitszeichen und dann den Wert. Der Wert muss in einfache oder doppelte Anführungszeichen gesetzt werden:

Element mit Attribut
<Kunde kundennummer="1983784" kategorie="geschäftskunde">Müller, Maximilian</Kunde>

In diesem Beispiel wurden die Attribute kundennummer und kategorie eingefügt. Die Namen und Werte sind frei wählbar, bis auf folgende Einschränkungen:

  • Ein Attributname darf nur einmal in einem Start-Tag oder Leerelement auftauchen
  • Der Attributstyp muss für die Gültigkeit des Elements deklariert sein. Sein Wert muss in dieser Deklaration als möglicher Wert in den Dokumententyp-Definitionen (DTD) auftauchen.
  • Ein Attribut darf weder direkt noch indirekt auf externe Entitäten verweisen.
  • In einem Attributwert darf keine Entität referenziert werden, deren Wert das Zeichen < enthält. Die Ausnahme davon ist die Entitätsreferenz &lt;.

Darüber hinaus dürfen beliebig viele Attribute in einem Starttag oder Leerelement verwendet werden. Beispiele sind in XHTML viele vorhanden, etwa:

Attribute im Leerelement
<img src="/gfx/bild.jpg" alt="Ein Bild" />
Attribute in einem Starttag
<table cellpadding="5" cellspacing="1">
	<tr>
		<td>Eine Zelle</td>
	</tr>
</table>


Wie schon im Abschnitt Elemente erwähnt, können die durch Tags gebildeten Elemente ineinander verschachtelt werden. Ein Beispiels ist diese XML-Datei zum Speichern von Daten über einen Kaufmannsladen.

Illustration des XML-Baums
Illustration des XML-Baumes des Beispiels

Beachten Sie bitte, dass die im Bild angedeutete Darstellung von „Lolli“ und „Zuckerstange“ als eigene Elementtypen ungünstig ist. Tut man das, müsste für jede neue Artikelart die DTD angepasst werden, damit das XML-Dokument überprüfbar bleibt. Es ist daher sinnvoller, einen Elementtyp <Artikel> zu definieren und darin über ein name-Attribut die Artikelbezeichnung festzuhalten.

Auch die Wahl des Elementtyps <Suesswaren> kann man diskutieren. Ein Elementtyp <Gruppe> oder <Warengruppe> würde die DTD deutlich vereinfachen und mehr Flexibilität bieten.

Beispiel
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Kaufmannsladen>
	<Waren>
		<Suesswaren>
			<Artikel id="47" name="Lolli" preis="5,00" />
			<Artikel id="13" name="Zuckerstange" preis="2,00" />
		</Suesswaren>
	</Waren>
	<Personal>
		<Mitarbeiter id="2">
			<Name>Dobermann</Name>
			<Anschrift>Beispielweg</Anschrift>
			<Telefon>515248</Telefon>
		</Mitarbeiter>
		<Mitarbeiter id="3">
			<Name>Meier</Name>
			<Anschrift>Knutallee</Anschrift>
			<Telefon>22222</Telefon>
		</Mitarbeiter>
	</Personal>
</Kaufmannsladen>

Regeln für Tags, Attribute, Wertzuweisungen und Kommentare

Für Tags, Attribute und ihre Wertzuweisungen gibt es in XML bestimmte Regeln, die Sie kennen müssen.

Groß-/Kleinschreibung von Element- und Attributnamen

XML unterscheidet im Gegensatz zu klassischem HTML strikt zwischen Groß- und Kleinschreibung. Die beiden folgenden Notationen sind beide XML-gerecht, aber aus Sicht von XML nicht das Gleiche:

Groß- und Kleinschreibung
<tier art="fisch">...</tier>
<Tier Art="Fisch">...</Tier>

Wenn Sie in einer DTD Tags und Attribute für eine XML-basierte Sprache definieren, sollten Sie also gleich auf die gewünschte Schreibweise achten. Wenn Sie im DTD-Bereich beispielsweise notieren:

Auf Schreibweise achten!
<!ELEMENT Platinentyp (#PCDATA)>
Dann müssen Sie im Datenbereich notieren:
<Platinentyp>...</Platinentyp>.
Falsch sind dagegen Notierungen wie:
<platinentyp>...</platinentyp> oder
<PLATINENTYP>...</PLATINENTYP>.

Auch bei Wertzuweisungen gilt die Unterscheidung zwischen Groß- und Kleinschreibung. Das ist besonders dann von Bedeutung, wenn Sie in einer DTD nur bestimmte Wertzuweisungen für ein Attribut erlauben, z. B. links, rechts oder zentriert.

Anführungszeichen bei Wertzuweisungen

Bei XML gilt ohne Ausnahme: alle Wertzuweisungen an Attribute müssen in Anführungszeichen stehen.

Baumstruktur
<bereich sprache=deutsch dialekt=bayerisch>     <!-- falsch -->
<bereich sprache="deutsch" dialekt="bayerisch"> <!-- richtig -->

Innerhalb von Wertzuweisungen an Attribute können Sie auch das Apostroph-Zeichen ' und das Anführungszeichen " verwenden. Diese beiden Zeichen müssen Sie dann aber unbedingt maskieren:

Apostroph und Anführungszeichen im Attributtext
<restaurant name="Susi&apos;s &quot;Imbiss&quot;"> <!-- Susi's "Imbiss" -->

Elemente bestehen aus Tags und End-Tags

In XML gibt es keine alleinstehenden Tags wie in HTML beispielsweise <br>, <img> oder <hr> – jedes Element muss aus Anfangs- und End-Tag bestehen. Es gibt in XML auch keine optionalen End-Tags, wie es in HTML etwa bei </li> oder </option> der Fall ist.

Ausnahme: Leere Elemente

Ausnahmen sind so genannte leere Elemente, also Elemente ohne Inhalt. Solche Elemente können ohne zugehöriges End-Tag notiert werden, müssen jedoch als leer gekennzeichnet werden.

Baumstruktur
<linie>         <!-- falsch -->
<linie/>        <!-- richtig -->
<linie />       <!-- richtig -->

Um ein Element als leer zu kennzeichnen, muss am Ende vor der schließenden spitzen Klammer ein Schrägstrich notiert werden. Das Leerzeichen davor ist optional, aber zu empfehlen. Denn <linie/> könnte ein unausgereifter XML-Parser auch fälschlich als unerlaubtes Zeichen des Elementnamens linie interpretieren.

Alternativ zu dieser Notation können Sie leere Elemente auch in der Form <linie></linie> notieren. Der Grund ist, dass XML eigentlich für jedes Element einen Inhalt vorsieht, und dass ein leeres Element einfach ein Element ohne Inhalt ist. Wichtig ist dabei jedoch, dass Anfangs- und End-Tag unmittelbar in Folge notiert werden, ohne irgendwelche Zeichen dazwischen!

Elementnamen

Elementnamen müssen ein paar Regeln einhalten:

Elementnamen
<xml-datei>         <!-- falsch -->
<datei-xml>         <!-- richtig -->
<1a>                <!-- falsch -->
<a1>                <!-- richtig -->
<gleich=gleich>     <!-- falsch -->
<gleich-gleich>     <!-- richtig -->
<mein element>      <!-- falsch -->
<mein-element>      <!-- richtig -->

Elementnamen dürfen nicht mit der Zeichenfolge xml und nicht mit Ziffern beginnen, und sie dürfen keine Gleichheitszeichen und keine Leerzeichen enthalten. Weitere Einzelheiten dazu im Abschnitt Regeln für Namen.

Kommentare

Innerhalb von XML-Dateien – auch innerhalb von DTD-Dateien oder DTD-Bereichen innerhalb einer XML-Datei – können Sie Ihre Daten oder Definitionen zur allgemeinen Verständlichkeit kommentieren. Dabei gelten die gleichen Regeln wie in HTML.

Kommentare
<lagertemp></lagertemp>
<!-- empfohlene Aufbewahrungstemperatur -->

Ein Kommentar beginnt mit der Zeichenfolge <!-- und endet mit -->. Er kann sich über mehrere Zeilen erstrecken. Was innerhalb des Kommentars steht, wird nicht interpretiert. Für Kompatibilität darf der String -- (doppeltes Minus) nicht in Kommentaren vorkommen.[2]

Referenzen

  1. XML Syntax
  2. W3C: Kommentarregeln in der XML Spezifikation