[an error occurred while processing this directive]

Einführung in Zeichenreferenzen im Rahmen der Lehre der formalen Sprache XML. [] (numerische Zeichenreferenz, numerische Zeichenreferenzen, Ersatzzeichen, numerical character reference references), Lektion, Seite 721291
http://www.purl.org/stefan_ram/pub/xml_charref_de ist die kanonische URI dieser Seite.
Stefan Ram

XML -Zeichenreferenzen

Für ein XML -Dokument sollte möglichst die Kodierung UTF-8  verwendet werden, die mit einem sehr umfangreichen Zeichenvorrat viele Ausdrucksmöglichkeiten eröffnet. Doch unter Umständen stehen nur Programme zur Verfügung, um die Kodierung US-ASCII  oder die Kodierung ISO-8859-1  zu verarbeiten. Es sieht zunächst so aus, als ob es dann auch nur möglich sei, den beschränkten Zeichenvorrat dieser Kodierungen zu verwenden. Für den relevanten sogenannten „Ersatztext“ steht aber auch bei Verwendung einer eingeschränkten Kodierung stets ein umfangreicher Zeichenvorrat zur Verfügung.

Der Ersatztext ist relevant

Der Text, den ein XML -Autor mit Hilfe eines Dokument notieren (also beispielsweise speichern oder übermitteln) will, wird in XML  als Ersatztext  oder als Inhalt einer analysierten Entität  bezeichnet. Er ist zu unterscheiden von dem XML-Quelltext, der nur verwendet wird, um diesen Ersatztext  zu notieren und seine unterschiedlichen Bestandteile voneinander abzugrenzen. Die Zeichen des Ersatztextes werden hier auch Ersatzzeichen  und die Zeichen des Quelltextes auch Quellzeichen  genannt.

Der Text, den ein XHTML -Anzeigeprogramm (ein browser ) anzeigt, gehört beispielsweise zum Ersatztext  und nicht zum Quelltext des angezeigten XHTML -Dokuments. Genauso wird als Adresse eines XHTML -Links (also eines Verweises) nicht der für den Link geschriebene Quelltext, sondern ebenfalls der Ersatztext  dieses Quelltextes verwendet.

Der Ersatztext kann aus allen Zeichen bestehen, die den Zeichenvorrat der ersten 17 Flächen gemäß der Norm ISO/IEC 10646  ausmachen. Dieser Zeichenvorrat wird hier auch als Ersatzzeichenvorrat  bezeichnet. Er enthält mehrere 10000 Schriftzeichen aus der ganzen Welt und steht dem Autor unabhängig von der Kodierung  des XML -Quelltextes immer zur Verfügung.

Für den Ersatztext eines XML -Dokuments steht immer der gesamte Ersatzzeichenvorrat zur Verfügung, egal welche Kodierung für den XML -Quelltext verwendet wird.

Entstehung von Ersatztext
                        Interpretation nach XML 1.0 
Teile des Quelltextes ------------------------------> Ersatztext

Kennzahlen für Zeichen

Man kann ISO/IEC 10646  so interpretieren, daß einigen Zahlen zwischen 0 und 1114111 ein Zeichen zugeordnet wird. Solch eine Zahl wird auch als Kennzahl, Code-Punkt  oder Zeichenzahl  bezeichnet. Die Zahl 65 kennzeichnet beispielsweise das Zeichen "A" (großes lateinisches A).

Jede Zeichenzahl steht für ein bestimmtes Zeichen.

ISO/IEC-10646-Zahlendarstellung
                   ISO/IEC-10646 
Zeichenzahl -----------------------------> Zeichen 
z.B. 65 z.B. "A"

XML -Zeichenreferenzen

In XML -Quelltext kann ein Elementinhalt, Attributwert oder Entitätswert Zeichenreferenzen  enthalten, die jedes mögliche Ersatzzeichen bedeuten können.

Um eine solche Zeichenreferenz im Quelltext zu schreiben, werden nur Zeichen aus dem Zeichenvorrat der Kodierung "US-ASCII" benötigt. Ein Ersatzzeichen kann also mit Hilfe seiner Kennzahl nach ISO 10646  geschrieben werden, auch wenn dieses Zeichen mit der verwendeten Kodierung gar nicht dargestellt werden kann. Das ist der Grund dafür, daß alle Zeichen des Ersatzzeichenvorrats im Ersatztext vorkommen können, egal welche Zeichenkodierung für den Quelltext verwendet wird.

Um ein Ersatzzeichen mit Hilfe einer Zeichenreferenz zu schreiben, wird die Kennzahl des Zeichens direkt nach der lexikalischen Einheit (dem token ) "&#" geschrieben und mit einem Semikolon ";" abgeschlossen. So kann beispielsweise anstelle des Zeichens "A" auch die Zeichenreferenz "A" verwendet werden. (Die folgende BNF -Produktion ist vereinfacht. Sie sagt sinngemäß, daß eine Zeichenreferenz CharRef  gebildet wird, indem nach der lexikalischen Einheit "&#" eine Ziffer oder mehrere Ziffern geschrieben werden, der bzw. denen die lexikalische Einheit ";" folgt.)

CharRef 〉 ::=
'&#' 〈decimal digit 〉 {〈decimal digit 〉} ';'.
decimal digit 〉 ::=
'0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'.

Durch den Quelltext "A" und durch den Quelltext "A" wird innerhalb eines Elementinhalts, Attributwerts oder Entitätswerts jeweils das gleiche Ersatzzeichen "A" notiert. Es ist also dort für den Ersatztext ganz egal, ob dort an einer Stelle der Text "A" oder der Text "A" steht.

Verschiedene XML-Quelltexte fuer das gleiche Ersatzzeichen
.---------------------. 
| Quelltext "A" |-------. 
'---------------------' | .-------------------. 
+-------->| Ersatztext "A" | 
.---------------------. | '-------------------' 
| Quelltext "A" |-------' 
'---------------------'

Es spielt also keine Rolle, ob ein bestimmtes Ersatzzeichen im Quelltext eines Elementinhaltes, Attributwerts oder Entitätswerts durch Oktette mit der verwendeten Oktettkodierung oder durch eine Zeichenreferenz geschrieben wird. Diese Unterscheidung ist nicht Bestandteil der Information, die man mit einem XML -Ersatztext übermittelt, sondern nur eine Frage der technischen Realisierung eines bestimmten Zeichens des Ersatztextes.

Zeichen der XML -Syntax

Wenn ein Zeichen durch eine Zeichenreferenz geschrieben wird, dann steht es immer  für ein Ersatzzeichen. Wenn ein Zeichen direkt in der Kodierung geschrieben wird, dann kann es auch eine Sonderbedeutung  haben.

Solch eine Sonderbedeutung haben Zeichen, die eine lexikalische Einheit ausmachen, die in der XML-Syntax eine besondere Funktion erfüllt. Im Ersatztext eines Elementinhaltes leitet das Zeichen Kleiner "<" und das Zeichen kaufmännisches Und "&" spezielle Notationen ein und bezeichnet nicht etwas das Ersatzzeichen "<" und das Ersatzzeichen "&". Um die öffnende spitze Klammer "<" (Zeichenzahl 60) und das kaufmännische Und-Zeichen "&" (Zeichenzahl 38) zu notieren, muß also eine Zeichenreferenz verwendet werden, nämlich die Zeichenreferenz "&#60;" bzw. die Zeichenreferenz "&#38;".

Das Zeichen "<" an Stellen, an denen eine Marke begonnen werden kann
.---------------------.                 .-------------------. 
| Quelltext "<" |---------------->| Sonderbedeutung | 
'---------------------' '-------------------' 
 
.---------------------. .-------------------. 
| Quelltext "&#60;" |---------------->| Ersatztext "<" | 
'---------------------' '-------------------'

Wenn ein Zeichen zur Notation einer lexikalischen Einheit, die so wörtlich in der XML -Syntax vorkommt, verwendet werden soll, dann darf es nicht durch eine Zeichenreferenz dargestellt werden, das kaufmännische Und "&", das Doppelkreuz "#" und das Semikolon ";" in der Zeichenreferenz "&#38;" dürfen beispielsweise nicht selber durch eine Zeichenreferenz notiert werden, sondern müssen mit der Kodierung des Quelltextes geschrieben werden.

Mit dem folgenden Quelltext soll der Ersatztext "Hallo, "<" und "&"!" notiert werden. Dabei müssen einige Ersatzzeichen (nämlich das Zeichen "<" und das Zeichen "&") mit Zeichenreferenzen notiert werden. Das Zeichen "a" wird als weiteres Beispiel mit der Zeichenreferenz "&97;" notiert, obwohl es auch direkt geschrieben werden könnte. Das Zeichen "<" nach dem Ausrufezeichen "!" beendet den sogenannten Elementinhalt und muß  in der Kodierung des Quelltextes geschrieben werden, es darf nicht als Zeichenreferenz "&#60;" geschrieben werden, wenn es diese Sonderfunktion haben soll.

charref.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head> 
<title>Beispielseite</title> 
</head>
<body> 
<p>H&#97;llo, "&#60;" und "&#38;"!</p> 
</body>
</html>

Beispielseite
Hallo, "<" und "&"!

Auch in Attributwerten kann das Ersatzzeichen "&" nicht durch das Quellzeichen "&" notiert werden, weil dieses Quellzeichen auch hier eine besondere Bedeutung hat. Der Ersatztext "http://example.com/p?a=1&b=2" kann aber mit der Zeichenreferenz "&#38;" notiert werden. (Das kaufmännische Und "&" in einer URI  kann auch nicht mit der Schreibweise "%26" dargestellt werden, die in URI s verwendet wird, um Zeichen zu kodieren, weil es dann seine Sonderbedeutung in Zusammenhang mit CGI  verlieren würde.)

Verweis auf "http://example.com/p?a=1&b=2" mit XHTML
<a href="http://example.com/p?a=1&#38;b=2">Beispiel</a>

In einem mit Anführungszeichen begrenzten Attributwert kann ein Anführungszeichen auch nicht vorkommen, es kann aber ebenfalls durch eine Zeichenreferenz dargestellt werden.

Durch Verwendung seiner Zeichenzahl 10 kann auch ein Neuzeilenzeichen in den Ersatztext eines Attributwerts geschrieben werden, obwohl ein Attributwert im Quelltext kein Neuzeilenzeichen enthalten kann.

Ein Literal mit zwei Zeilen
<foo bar="Zeile Eins&#10;Zeile Zwei">Beispiel</a>

Ersatztext mit XML -Sonderzeichen
Ersetzen Sie in der obigen Beispieldatei "charref.html" den Text zwischen der Marke "<p>" und der Marke "</p>", um den Text dieser Übungsaufgabe als Ersatztext zu notieren. Achten Sie dabei darauf, das Zeichen "<" und das Zeichen "&" durch die Zeichenreferenz "&#60;" bzw. die Zeichenreferenz "&#38;" zu ersetzen. Die erstellte Datei soll validiert und angezeigt werden. In der Anzeige muß dann der gesamte Text dieser Übungsaufgabe vom Zeichen "E" bis zum Zeichen ".", so wie er hier geschrieben steht, erscheinen.

Zeichen außerhalb von US-ASCII

Zeichenreferenzen können auch verwendet werden, um ein Ersatzzeichen einzugeben, wenn es mit der verwendeten Oktettkodierung nicht dargestellt werden kann. Es ist auch möglich, daß eine bestimmte Tastatur oder ein bestimmter Editor, die Eingabe eines Zeichens in den Quelltext nicht erlaubt oder der Typist nicht weiß, wie ein bestimmtes Zeichen eingegeben wird. Anhand einer Liste der Zeichen von ISO 10646  zusammen mit ihren Zeichenzahlen kann dann aber eine Zeichenzahl des gewünschten Zeichens ermittelt und das Zeichen als Zeichenreferenz  eingegeben werden.

Diese Vorgehensweise soll anhand des Zeichens "ə" der Lautschrift veranschaulicht werden. Dieses Zeichen sieht aus wie ein um 180 Grad in der Schreibfläche um seinen Mittelpunkt gedrehtes kleines E und wird im Englischen auch “schwa ” genannt.

Das Zeichen "schwa"
   ###
# #
# #
#
#######
# #
# #
# #
###

Falls das Zeichens "ə" in diesem Absatz nicht als das Zeichen der Abbildung lesbar ist, dann kann dies an einer Einschränkung des Darstellungssystems oder Übertragungssystems liegen, mit dem diese Lektion angezeigt wird.

Einige Typisten wissen nicht, wie sie dieses Zeichen mithilfe der Tastatur eingeben können, andere benutzen Editoren oder andere Programme, die das direkte Einfügen dieses Zeichens in den Quellcode nicht gestatten. Das Zeichen kann auch nicht mit der Oktettkodierung US-ASCII  oder der Oktettkodierung ISO-8859-1  dargestellt werden.

Der Quelltext "&#601;" kann aber mit jeder in Frage kommenden Oktettkodierung dargestellt werden und auch von den meisten Typisten eingegeben werden. Er bedeutet den Ersatztext "ə" der Lautschrift genau so, wie wenn das Zeichen "ə" an dieser Stelle selber im Quelltext stehen würde und kann daher an dessen Stelle verwendet werden. So kann also dieses Zeichen der Lautschrift unter allen Umständen im Ersatztext verwendet werden.

Eine vollständige Auflistung aller Zeichen aus dem XML -Zeichenvorrat zusammen mit ihren Kennzahlen würde den Rahmen dieser Lektion sprengen. Hinweise dazu, wo Informationen zu ISO 10646  erhältlich sind, und eine Tabelle mit einigen Zeichen sollen einmal im Lehrgang zur Bitkodierung erscheinen, der aber zur Zeit der Niederschrift dieses Textes noch nicht fertiggestellt ist.

<721305 Lehrgang zu Bitcodes

Die folgende Ressource bietet aber beispielsweise Informationen zu Unicode, dessen Zeichenzahlen für die hier beschriebenen Zwecke mit denen von ISO 10646  übereinstimmen.

http://www.unicode.org/charts/
Die Codetafeln dieser Ressource können verwendet werden, um die Kennzahl eines Zeichens aus ISO 10646  in Erfahrung zu bringen.

Übungsaufgaben

Anzeige des Schwas
Verwenden Sie ein XHTML-Anzeigeprogramm zur Darstellung des Dokuments "charref.html". Fügen Sie dann direkt hinter die Marke "<p>" noch eine Zeichenreferenz für das Schwa ein und lassen Sie das Dokument erneut anzeigen. Falls das Schwa nicht erkennbar ist, versuchen Sie ein Unicode-Font zu beschaffen und das Anzeigeprogramm so zu konfiguriereren, daß es dieses Font verwendet. Dann sollte bei einem zeitgemäßen Anzeigeprogramm das Schwa als Ersatztext sichtbar werden.
Ersatztext mit verschiedenen Zeichen
Ersetzen Sie in der obigen Beispieldatei "charref.html" den Text zwischen der Marke "<p>" und der Marke "</p>", um den folgenden Text mit den speziellen Anführungszeichen und dem kleinen griechischen Pi sowie dem mathematischen Operator Kleiner-Gleich als Ersatztext zu notieren. Die erstellte Datei soll validiert und angezeigt werden. In der Anzeige muß dann der gesamte folgende Text mit 17 Zeichen vom „E“ bis zum Punkt „.“ erscheinen:
Es gilt: „π ≤ 4“.
Es kann sein, daß der obige Ersatztext nicht lesbar ist, wenn ein unzureichendes Darstellungssystem verwendet wird. Deswegen wird der darzustellende Text hier noch einmal zeichenweise umschrieben: Großes E, kleines S, Leerzeichen, kleines G, kleines I, kleines L, kleines T, Doppelpunkt, Leerzeichen, Anführungszeichen unten, kleines griechisches Pi, Leerzeichen, Kleiner-Gleich-Zeichen, Leerzeichen, Vier, Anführungszeichen oben, Punkt.
Oder mit Nennung der Sonderzeichen in eckigen Klammern: Es gilt: [Anführungszeichen unten][pi] [Kleiner-Gleich] 4[Anführungszeichen oben].
Zur Bearbeitung dieser Übungsaufgabe ist es hilfreich eine Unicode -Tabelle oder ein entsprechendes Nachschlagewerk zu verwenden. Die erstellte Datei soll angezeigt und validiert werden.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz