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     "&#60;">
<!ENTITY gt     ">">
<!ENTITY amp    "&#38;">
<!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 ] ...