ENTITY Deklaration
... [ Seminar XML (DTD) ] ... [ Einleitung ] ... [ Fallbeispiel ] ...
ENTITY: Platzhalter für Text
Generelles
Ein XML-Dokument kann aus einer oder mehreren Speicherungseinheiten bestehen.
Diese werden Entities genannt. Sie haben alle Inhalt und sind alle (abgesehen vom Dokument-Entity,
s.u., und der externen Teilmenge der DTD) durch einen Namen identifiziert.
Jedes XML-Dokument besitzt ein Entity namens Dokument-Entity, welches als Ausgangspunkt
für den XML-Prozessor dient und das gesamte Dokument enthalten darf.
Entities dürfen entweder analysiert (parsed) oder nicht-analysiert (unparsed) sein.
Der Inhalt eines analysierten Entity wird als sein Ersetzungstext bezeichnet.
Dieser Text gilt als integraler Bestandteil des Dokuments.
Ein nicht-analysiertes Entity ist eine Ressource, deren Inhalt Text sein kann oder auch nicht,
und falls es sich um Text handelt, nicht XML sein muß. Jedes nicht-analysierte Entity hat eine
zugeordnete Notation, die durch ihren Namen identifiziert wird. XML erlegt dem Inhalt
eines nicht-analysierten Entity keine Beschränkungen auf, es muß lediglich gewährleistet sein,
daß der XML-Prozessor der Anwendung die Bezeichner für das Entity und für die Notation zur Verfügung stellt.
Analysierte Entities werden mit ihrem Namen durch Entity-Referenzen aufgerufen.
Nicht-analysierte Entities werden mit ihrem Namen, der als Wert von ENTITY oder ENTITIES angegeben ist, aufgerufen.
Allgemeine Entities dienen der Verwendung innerhalb des Dokumentinhalts.
In dieser Spezifikation werden allgemeine Entities oft unpräzise Entities genannt,
sofern dies nicht zu Mehrdeutigkeit führt. Parameter-Entities sind analysierte Entities
für die Benutzung innerhalb der DTD. Diese beiden Arten von Entities verwenden verschiedene
Formen der Referenzierung und werden in unterschiedlichen Kontexten erkannt. Darüber hinaus
belegen sie verschiedene Namensräume, d.h. ein Parameter-Entity und ein allgemeines Entity mit
demselben Namen sind zwei verschiedenen Entities.
Beispiel mit Kommentar
Bei der Diskussion der Behandlung von internen Entities ist es nützlich,
zwei Formen von Entity-Werten zu unterscheiden:
Der literale Entity-Wert ist die in Anführungszeichen eingeschlossene Zeichenkette
in der Entity-Deklaration, entsprechend zu dem Nicht-Terminal EntityValue.
Der Ersetzungstext ist der Inhalt des Entity nach Ersetzen von Zeichen- und Parameter-Entity-Referenzen.
Der literale Entity-Wert, wie er in einer internen Entity-Deklaration (EntityValue)
angegeben ist, darf Zeichen-, Parameter-Entity- und allgemeine Entity-Referenzen enthalten.
Solche Referenzen müssen vollständig innerhalb des literalen Entity-Werts enthalten sein.
Der tatsächliche Ersetzungstext, der wie oben beschrieben ersetzt wird, muß den
Ersetzungstext von jedem Parameter-Entity, das referenziert wird, enthalten. Im Falle
von Zeichenreferenzen muß er das referenzierte Zeichen im literalen Entity-Wert enthalten.
Allgemeine Entity-Referenzen müssen jedoch bleiben wie sie sind, nicht expandiert.
Gegeben sei beispielsweise folgende Deklaration:
<!ENTITY % verlag "Verlag Müller">
<!ENTITY rechte "All rights reserved">
<!ENTITY buch "das WWW, Max Meier,
© 1995 %verlag;. &rechte;">
Dann ist der Ersetzungstext für das Entity »buch« folgendes:
das WWW, Max Meier,
erlag Müller. &rechte;
Die allgemeine Entity-Referenz »&rechte;« würde expandiert, wenn die Referenz »&buch;« im Inhalt des
Dokuments oder in einem Attributwert stehen würde.
Diese einfachen Regeln können komplexe Wechselwirkungen haben. Insbesondere zyklische Verknüpfungen
sind hier sehr zu nennen, da sie unzulässig sind und beim unversichtigen Planen der Entities
regelmäßig vorkommen.
Vordefinierte Entities
Entity- und Zeichenreferenzen können beide benutzt werden, um die öffnende spitze Klammer,
das et-Zeichen und andere Begrenzungen zu schützen. Zu diesem Zweck ist eine Menge von
allgemeinen Entities (amp, lt, gt, apos, quot) spezifiert worden. Außerdem können
numerische Zeichenreferenzen verwendet werden. Diese werden unmittelbar expandiert,
sobald sie erkannt werden, und müssen als Zeichendaten behandelt werden.
So können die numerischen Zeichenreferenzen »<« und »&« verwendet werden, um die
Zeichen < und & innerhalb von Zeichendaten zu schützen.
Alle XML-Prozessoren müssen diese Entities erkennen, unabhängig davon, ob sie deklariert sind oder nicht.
Zwecks Zusammenarbeit sollten gültige XML-Dokumente diese Entities vor der Benutzung wie andere deklarieren.
Wenn die fraglichen Entities deklariert sind, müssen sie als interne Entities deklariert werden, deren
Ersetzungstext das einzelne zu schützende Zeichen oder eine Zeichenreferenz darauf ist, wie unten gezeigt.
<!ENTITY lt "<">
<!ENTITY gt ">">
<!ENTITY amp "&">
<!ENTITY apos "'">
<!ENTITY quot """>
Beachten Sie, daß die Zeichen < und & in der Deklaration von »lt« und »amp« doppelt geschützt sind,
um die Anforderung zu erfüllen, daß Entity-Ersetzungen wohlgeformt sind.
... [ Seminar XML (DTD) ] ... [ Einleitung ] ... [ Fallbeispiel ] ...