Sowohl Allgemeine als auch Parameterentitäten sind nützliche Helfer, wenn es darum geht, eine Datei in eine andere einzubinden.
Angenommen man hat ein Buch geschrieben, dessen Inhalt
auf mehrere Dateien aufgeteilt und mittels SGML
ausgezeichnet. Jedes Kapitel wurde dazu in einer eigenen Datei
(kapitel1.xml
,
kapitel2.xml
usw.) abgelegt und
über eine Datei buch.xml
sollen
alle physischen Dateien wieder mit der Hilfe von
Entitäten zu einem logischen Dokument
zusammengeführt werden.
Damit der Inhalt der Dateien mit Entitäten
eingebunden werden kann, muss die Deklaration der
Entitäten das Schlüsselwort
SYSTEM
enthalten. SGML-Parser werden so
angewiesen, den Inhalt der referenzierten Datei als Wert
für die jeweilige Entität zu nehmen.
Wenn man Allgemeine Entitäten benutzt, um andere
Dateien einzubinden, dürfen diese Dateien
(kapitel1.xml
,
kapitel2.xml
, ...)
keine eigene DOCTYPE-Deklaration
haben.
Wie bereits festgestellt, können Parameterentitäten nur innerhalb eines SGML-Kontexts genutzt werden. Warum möchte man aber Dateien innerhalb eines SGML-Kontexts einbinden? Der Vorteil liegt in der Möglichkeit, die Deklaration von Entitäten in eine andere Datei auslagern zu können, wodurch diese leichter wiederverwendbar sind.
Angenommen das Buch aus dem vorherigen Kapitel besteht aus sehr vielen Kapiteln und diese sollen auch in einem anderen Buch, aber in einer anderen Reihenfolge, verwendet werden. Eine Möglichkeit wäre es, die dafür notwendigen Entitäten am Anfang jedes Buches einzeln festzulegen – was allerdings mit der Zeit unhandlich und fehlerträchtig wird.
Alternativ bietet sich dazu an, die Deklarationen in eine separate Datei auszulagern und deren Inhalt anschließend in beide Bücher über Parameterentitäten einzubinden.
Zuerst werden die Entitäten in einer separaten
Datei namens kapitel.ent
deklariert.
kapitel.ent
enthält für
dieses Beispiel die folgenden Zeilen:
Im zweiten Schritt fügt man in beide Bücher
eine Parameterentität ein, die den Inhalt von
kapitel.ent
referenziert, und lädt
über diese dann die Deklarationen. Anschließend
können die so geladenen Entitäten wie gewohnt
genutzt werden.
Legen Sie drei Dateien (absatz1.xml
,
absatz2.xml
und absatz3.xml
)
mit jeweils einer Zeile wie
an.
Ändern Sie beispiel.xml
so
ab, dass sie wie folgt aussieht:
Erzeugen Sie nun die Datei
beispiel.html
, indem Sie
beispiel.xml
normalisieren:
%
osgmlnorm -d beispiel.xml > beispiel.html
Öffnen Sie beispiel.html
nun mit einem Webbrowser und vergewissern Sie sich,
dass der Inhalt der Dateien
absatz
in N
.xmlbeispiel.html
übernommen
wurde.
Hierfür müssen Sie die vorherige Fingerübung gemacht haben.
Ändern Sie beispiel.xml
so
ab, dass es wie folgt aussieht:
Legen Sie eine weitere Datei entitaeten.xml
an,
die folgenden Inhalt hat:
Erzeugen Sie die Datei
beispiel.html
, indem Sie
beispiel.xml
normalisieren:
%
osgmlnorm -d beispiel.xml > beispiel.html
Öffnen Sie beispiel.html
nun mit einem Webbrowser und vergewissern Sie sich,
dass der Inhalt der Dateien
absatz
in N
.xmlbeispiel.html
übernommen
wurde.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.