XML-Know How

Entities als Platzhalter für Sonderzeichen

Der Standardzeichensatz für XML ist UNICODE im Encoding (d. h. der softwaremäßigen Kodierung) UTF-8 oder UTF-16. In UNICODE ist jedes Zeichen mit einer vierstelligen Hexadezimalzahl kodiert. So können mehrere zehntausend Zeichen kodiert werden. Diese Technologie ist aber nur auf neueren Computer-Systemen verfügbar. Werden andere Zeichenkodierungen mit weniger Zeichen wie z. B. ASCII oder ANSI verwendet, können Sonderzeichen, die nicht Teil dieser Zeichensätze sind, als Entities kodiert werden. Das heißt vom Prinzip her nichts anderes, als dass auch diese Sonderzeichen in der Weise als Entities kodiert werden wie die fünf Begrenzungszeichen »<«, »>«, »&«, »"« und »'«. Entities für Sonderzeichen nennt man auch Character References.

Bei der Nutzung von Character References haben sich in XML die in SGML festgelegten Sonderzeichenkürzel durchgesetzt, die wegen ihrer Standardisierung als ISO-Standard auch ISO-Entities genannt werden. Der Umlaut »ä« ist in diesem Standard als Character Reference &auml; festgelegt (für a-umlaut, »Umlaut« heißt auf Englisch schlicht umlaut).

Der Satz »Käse ist nicht süß« mit Sonderzeichen als ISO-Entities sieht in XML so aus:

<absatz>K&auml;se ist nicht s&uuml;&szlig;</absatz>.

Die Nutzung von Character References ist aber nicht auf ISO-Entities eingeschränkt. Gerade im wissenschaftlichen Bereich kommen oft Sonderzeichen vor, für die weder ISO-Entities noch UNICODE-Zeichen existieren. In solchen Fällen kann man zu selbstdefinierten Character References greifen, die auf selbsterstellte Sonderzeichen verweisen. UNICODE sieht vor, dass man auch selbsterstellte Zeichen mit UNICODE-Mitteln und somit XML-kompatibel kodieren kann. Man kann also mit selbstdefinierten Character References selbsterstellte UNICODE-Zeichen aufrufen. Details zu Unicode und ISO-Entities finden Sie in unserem Beitrag Einheitliche Zeichenkodierung – Grundlage der Systemunabhängigkeit.

Alle Character References müssen in der DTD deklariert werden (Ausnahme: die fünf Begrenzungszeichen). Dies geschieht gemäß dem XML-Standard durch die Angabe des UNICODE-Hexadezimalcodes für das entsprechende Zeichen.

Als Beispiel mag das Yen-Zeichen dienen, das als Entity &yen; kodiert wird und das in Unicode die Nummer »00A5« hat:

<!ENTITY yen "&#x00A5;">

An diesem Beispiel wird klar, dass hier eine Entity durch eine andere Entity ersetzt wird. An die Stelle der ISO-Kürzelentity &yen; wird die nummerische Entity &#x00A5; gesetzt. Die nummerische Entity besteht innerhalb der Begrenzungszeichen »&« und »;« aus der Raute »#« als Kennzeichen, dass eine nummerische Entity vorliegt, dem »x«, aus dem hervorgeht, dass die nachstehende Zahl eine Hexadezimalzahl ist, und eben der vierstelligen Hexadezimalzahl selbst.

Es ist möglich, die nummerische Entity, die in XML immer als Code für ein UNICODE-Zeichen interpretiert wird, auch direkt in das XML-Dokument zu schreiben.

Ein Beispiel: Die Kodierung des Zeichens »¥« als ISO-Entity:

<absatz>In Japan kostet das Handy 10000 &yen;.</absatz>

Die Kodierung desselben Zeichens als nummerische Character Reference:

<absatz>In Japan kostet das Handy 10000 &#x00A5;.</absatz>

Die beiden Beispiele machen deutlich, dass der Quellcode mit ISO-Entities leichter verständlich ist. Das liegt daran, dass alle ISO-Entities Abkürzungen des englischen Zeichennamens und damit sprechend sind und so vom menschlichen Leser leichter interpretiert werden können.

Für die Zuweisung von ISO-Entities zu nummerischen UNICODE-Character-References auf der DTD-Ebene gibt es aus verschiedenen Quellen, z. B. den Web-Sites der Branchen-DTDs, entsprechende Deklarationslisten. Allerdings sind diese Listen kein Teil des XML-Standards und sollten vor dem Einsatz in Produktionsumgebungen überprüft werden.