XML-Know How

Entities als Platzhalter für XML-Begrenzungszeichen

Eine ganz zentrale Rolle spielen Entities als Ersatz für XML-Begrenzungszeichen (delimiter) im Text. Die Zeichen »<« und »>« dienen ja als Kennzeichen für Beginn und Ende von Markup wie Elementen, Kommentaren, Processing Instructions, CDATA-Sections usw. Daher können diese Zeichen nicht im normalen Text verwendet werden. Stattdessen werden die festgelegten Entities &gt; für »>« und &lt; für »<« verwendet. (»gt« steht für greater than, »lt« für less than, die englischen Namen für diese Zeichen). Innerhalb von Markup können diese Zeichen im Inhalt von CDATA-Attributen auftreten, die wiederum eindeutig mit »"« oder »'« begrenzt sind, so dass Zweideutigkeiten ausgeschlossen sind.

Der Text »Hier gilt a < b ...« als PCDATA-Elementinhalt muss also so kodiert werden:

<absatz>Hier gilt a &lt; b ...</absatz>

Streng genommen muss im Text nur das Zeichen »<« durch &lt; ersetzt werden, da »>« solange nicht mit einem Begrenzungszeichen verwechselt werden kann, wie kein »<« im Text steht. Ein »>« wird nämlich nur als Markup-Ende interpretiert, wenn zuvor ein »<« gefunden wurde.

Erst innerhalb des Markup wird durch weitere Zeichen (»?«, »!«, siehe oben) unterschieden, ob es sich um Element, Kommentar, Processing Instruction oder eine CDATA-Section handelt. Da diese Zeichen unmittelbar nach der öffnenden oder vor der schließenden spitzen Klammer stehen, müssen sie nicht durch Entities ersetzt werden. In einem Kommentar können also beliebige »!« stehen und in einer Processing Instruction beliebige »?« oder in einer CDATA-Section beliebige »[« oder »]«. Ausnahme: In einem Kommentar darf kein -- vorkommen, außer als Teil der Endekennung -->.

Auch die Begrenzungszeichen der Entities &« und »;«) müssen im Text von den eigentlichen Zeichen unterschieden werden. Dazu reicht es aus, das »&« durch &amp; (ampersand, Englisch für »Kaufmannsund«) zu ersetzen. Ein »;« wird nur dann als Ende eines Entities interpretiert, wenn direkt vor ihm die für Entities erlaubten Zeichen, begonnen mit »&« zu finden sind.

Der Text »Die ehrwürdige Firma Schmitt & Maier ...« als PCDATA-Elementinhalt muss also so kodiert werden:

<absatz>Die ehrwürdige Firma Schmitt &amp; Maier...</absatz>

Schließlich müssen auch die Begrenzungszeichen von Attributen, also einfache oder doppelte Anführungszeichen, durch Entities ersetzt werden, aber nur dann, wenn sie in einem Attributwert zu stehen kommen, der eben durch das betreffende Zeichen begrenzt wirdsonst würde ja der Attributwert vorzeitig beendet. Die Entity für einfache Anführungszeichen ist &apos;, für doppelte &quot;.

Der Text »Peter ‚Spezi‘ Maier« muss also zwischen einfachen Anführungszeichen als Begrenzungszeichen von Attributen so kodiert werden:

<absatz autor='Peter &apos;Spezi&apos; Maier'>Die ehrwürdige Firma Schmitt &amp; Maier...</absatz>

Um Fehlern vorzubeugen, sollten die fünf Zeichen »<«, »>«, »&«, »"« und »'« in PCDATA-Content und CDATA-Attributen immer durch ihre Entities kodiert werden, außer wenn sie als Begrenzungszeichen für Markup, Attributwerte oder Entities verwendet werden.