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.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY kapitel.1 SYSTEM "kapitel1.xml"> <!ENTITY kapitel.2 SYSTEM "kapitel2.xml"> <!ENTITY kapitel.3 SYSTEM "kapitel3.xml"> ]> <html> &kapitel.1; &kapitel.2; &kapitel.3; </html>
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:
<!ENTITY kapitel.1 SYSTEM "kapitel1.xml"> <!ENTITY kapitel.2 SYSTEM "kapitel2.xml"> <!ENTITY kapitel.3 SYSTEM "kapitel3.xml">
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.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % kapitel SYSTEM "kapitel.ent"> %kapitel; ]> <html> &kapitel.1; &kapitel.2; &kapitel.3; </html>
Legen Sie drei Dateien (absatz1.xml
,
absatz2.xml
und absatz3.xml
)
mit jeweils einer Zeile wie
<p>Erster Absatz.</p>
an.
Ändern Sie beispiel.xml
so
ab, dass sie wie folgt aussieht:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY version "1.1"> <!ENTITY absatz1 SYSTEM "absatz1.xml"> <!ENTITY absatz2 SYSTEM "absatz2.xml"> <!ENTITY absatz3 SYSTEM "absatz3.xml"> ]> <html> <head> <title>Eine HTML-Beispieldatei</title> </head> <body> <p>Die aktuelle Version dieses Dokuments ist &version;</p> &absatz1; &absatz2; &absatz3; </body> </html>
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
absatzN.xml
in beispiel.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:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % entitaeten SYSTEM "entitaeten.xml"> %entitaeten; ]> <html> <head> <title>Eine HTML-Beispieldatei</title> </head> <body> <p>Die aktuelle Version dieses Dokuments ist &version;</p> &absatz1; &absatz2; &absatz3; </body> </html>
Legen Sie eine weitere Datei entitaeten.xml
an,
die folgenden Inhalt hat:
<!ENTITY version "1.1"> <!ENTITY absatz1 SYSTEM "absatz1.xml"> <!ENTITY absatz2 SYSTEM "absatz2.xml"> <!ENTITY absatz3 SYSTEM "absatz3.xml">
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
absatzN.xml
in beispiel.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>.