Zeichenreferenzen

(Auszug aus "XML in a Nutshell" von Elliotte Rusty Harold & W. Scott Means)

Unicode enthält mehr als 96.000 unterschiedliche Zeichen, die fast alle auf der Welt geschriebenen Sprachen abdecken. Das Vordefinieren von Entity-Referenzen für jedes dieser Zeichen, von denen die meisten niemals in einem Dokument benutzt werden, würde XML-Parser unnötig aufblähen und belasten. Anstatt die Zeichen auszuwählen, bei denen sich eine Kodierung als Entity lohnt, geht XML in das andere Extrem. Es definiert Entity-Referenzen nur für solche Zeichen vor, die als Markup-Zeichen in einem XML-Dokument eine besondere Bedeutung besitzen: <, >, &, " und '. All dies sind ASCII-Zeichen, die sich leicht in einem Text-Editor eingeben lassen.

Für andere Zeichen, die möglicherweise nicht über einen ASCII-Text-Editor erreichbar sind, können Sie in XML Zeichenreferenzen benutzen. Eine Zeichenreferenz gibt – entweder als Dezimal- oder als Hexadezimalwert – die Zahl an, für die ein bestimmtes Unicode-Zeichen steht. Dezimale Zeichenreferenzen sehen so aus: &#1114;. Hexadezimale Zeichenreferenzen besitzen ein zusätzliches x nach dem &#, das heißt, sie sehen so aus: &#x45A;. Beide Referenzen verweisen auf dasselbe Zeichen, Њ, den kyrillischen Kleinbuchstaben »nje«, der im Serbischen und Mazedonischen verwendet wird. Nehmen Sie zum Beispiel an, Sie wollen die griechische Maxime »σόφος έαυτóν γιγνώσκει« (»Der weise Mann kennt sich selbst«) in Ihr XML-Dokument einfügen. Ihnen steht aber nur ein ASCII-Text-Editor zur Verfügung. Sie können jeden griechischen Buchstaben durch die passende Zeichenreferenz ersetzen:

<maxim>
  &#x3C3;&#x3BF;&#x3C6;&#x3CC;&#x3C2;
  &#x3AD;&#x3B1;&#x3C5;&#x3C4;&#x3CC;&#x3BD;
  &#x3B3;&#x3B9;&#x3B3;&#x3BD;&#x3CE;&#x3C3;&#x3BA;&#x3B5;&#x3B9;
</maxim>

Für das XML-Programm ist ein Dokument, das Zeichenreferenzen verwendet, die auf Unicode-Zeichen verweisen, die in der aktuellen Kodierung nicht existieren, äquivalent mit einem Unicode-Dokument, in dem alle Zeichenreferenzen durch die eigentlichen Zeichen ersetzt werden, auf die sie verweisen. Mit anderen Worten, dieses XML-Dokument entspricht dem vorangegangenen:

<maxim>
  σόφος έαυτóν γιγνώσκει
</maxim>

Zeichenreferenzen werden nur in Elementinhalten und Attributwerten erkannt und ersetzt. Sie dürfen nicht in Element- und Attributnamen, Verarbeitungsanweisungszielen oder XML-Schlüsselwörtern wie DOCTYPE oder ELEMENT auftauchen. In Kommentaren und den Daten von Verarbeitungsanweisungen können Zeichenreferenzen vorkommen, sie werden vom Parser dort aber nicht erkannt. Sie können in der DTD in vorgegebenen Attributwerten und im Entity-Ersetzungstext auftreten. Tag- und Attributnamen dürfen in Sprachen wie Griechisch, Russisch, Arabisch oder Chinesisch geschrieben werden, Sie müssen dazu aber einen Zeichensatz nehmen, der es Ihnen erlaubt, die entsprechenden Zeichen als solche einzutragen. Sie können diese Zeichen nicht mittels Zeichenreferenzen hinzufügen. Dies ist zum Beispiel wohlgeformt:

<λογος>
  &#x3C3;&#x3BF;&#x3C6;&#x3CC;&#x3C2;
<λογος>

Dies ist nicht wohlgeformt:

<&#x3BB;&#x3BF;&#x3B3;&#x3BF;&#x3C2;>
   &#x3C3;&#x3BF;&#x3C6;&#x3CC;&#x3C2;
</&#x3BB;&#x3BF;&#x3B3;&#x3BF;&#x3C2;>

Der interessierte Leser findet den kompletten Unicode-Zeichencode unter Unicode 7.0 Character Code Charts.

Falls Sie eine bestimmte Gruppe von Zeichenreferenzen häufiger benutzen, werden Sie es möglicherweise leichter finden, sie als Entities zu definieren und anschließend auf diese Entities zu verweisen. Das folgende Code-Beispiel zeigt eine DTD, in der die Entities definiert werden, die Sie benutzen könnten, um die griechischen Wörter aus den vorangegangenen Beispielen zu definieren.

<!ENTITY sigma             "&#x3C3;">
<!ENTITY omikron_betont    "&#x3CC;">
<!ENTITY phi               "&#x3C6;">
<!ENTITY omikron           "&#x3BF;">
<!ENTITY schluss_sigma     "&#x3C2;">
<!ENTITY epsilon_betont    "&#x3AD;">
<!ENTITY alpha             "&#x3B1;">
<!ENTITY lambda            "&#x3BB;">
<!ENTITY ypsilon           "&#x3C5;">
<!ENTITY tau               "&#x3C4;">
<!ENTITY ny                "&#x3BD;">
<!ENTITY gamma             "&#x3B3;">
<!ENTITY jota              "&#x3B9;">
<!ENTITY omega_betont      "&#x3CE;">
<!ENTITY kappa             "&#x3BA;">
<!ENTITY epsilon           "&#x3B5;">

Code-Beispiel: Eine DTD, die allgemeine Entity-Referenzen für einige griechische Buchstaben definiert

Diese Entities können sogar in ungültigen Dokumenten verwendet werden, vorausgesetzt, die Deklarationen werden in der internen DTD-Teilmenge des Dokuments angegeben, die alle XML-Parser verarbeiten müssen, oder der Parser liest die externe DTD-Teilmenge. Entsprechend der Konvention haben DTD-Fragmente, die ausschließlich Entities definieren, das dreibuchstabige Suffix .ent. Diese Fragmente werden mittels externer Parameter-Entity-Referenzen in die DTD eines Dokuments importiert. Das folgende Code-Beispiel zeigt, wie die Maxime mit Hilfe dieser Entities geschrieben werden könnte. Es wird dabei angenommen, dass sich die Entities unter der relativen URL greek.ent befinden.

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE maxim [<!ENTITY % griechisches_alphabet SYSTEM "greek.ent">%griechisches_alphabet;]>
<maxim>
   &sigma;&omikron;&phi;&omikron_betont;&schluss_sigma;
   &epsilon_betont;&alpha;&ypsilon;&tau;&omikron_betont;&ny;
   &gamma;&jota;&gamma;&ny;&omega_betont;&sigma;&kappa;&epsilon;&jota;
</maxim>

Code-Beispiel: Die Maxime unter Benutzung von Entity-Referenzen anstelle von Zeichenreferenzen

Es gibt bereits einige Standard-Entity-Teilmengen. Die XHTML 1.0-DTD enthält drei nützliche Entity-Sätze, die Sie in Ihrer eigenen Arbeit benutzen können (Download als DTD Entity File):

Latin-1-Zeichen

Die Nicht-ASCII-Zeichen in ISO-8859-1 von 160 aufwärts.

Sonderzeichen

Buchstaben aus ISO-8859-2 (Latin-2), die es nicht gleichzeitig in Latin-1 gibt, wie Œ, und verschiedene Interpunktionszeichen wie das Kreuz, das Euro-Zeichen und den Geviertstrich.

Symbole

Das griechische Alphabet (allerdings fehlen die Zeichen mit Akzent) und verschiedene Interpunktionszeichen, mathematische Operatoren und andere Symbole, die in der Mathematik gebräuchlich sind.

 

Sie können die Zeichen dieser Entity-Sätze entweder direkt von ihren relativ stabilen URLs beim W3C benutzen oder sie auf Ihre eigenen Systeme kopieren. Um zum Beispiel Entities aus dem Symbolsatz in einem Dokument zu verwenden, fügen Sie Folgendes in die DTD des Dokuments ein:

<!ENTITY % HTMLsymbol PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
%HTMLsymbol;

Da es sich um standardisierte und einigermaßen anerkannte DTDs handelt, haben sie sowohl PUBLIC-Identifier als auch URLs. Andere Gruppen und Personen haben Entity-Sätze geschrieben, die Sie genauso benutzen können, obwohl es keine allgemein gültige Sammlung von Entity-Sätzen gibt, die den gesamten Unicode einschließt. SGML enthält fast 20 unterschiedliche Entity-Sätze, die Griechisch, Kyrillisch, den erweiterten Latin-Satz, mathematische Symbole, diakritische Zeichen, Kasten-Zeichen und Veröffentlichungsmarken abdecken. Sie sind eigentlich kein Bestandteil von XML, aber verschiedene Anwendungen inklusive DocBook und MathML haben sie nach XML portiert. MathML hat auch verschiedene nützliche Entity-Sätze, die weitere mathematische Symbole enthalten.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

  


Copyright © 2005 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML in a Nutshell" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de