Entitäten stellen einen Mechanismus dar, mit dem einzelnen Dokumententeilen ein Name zugewiesen werden kann. Findet ein SGML-Parser während des Parsens eine Entität, ersetzt er diese durch den ihr zugewiesenen Inhalt.
Dadurch steht eine einfache Möglichkeit zur Verfügung, mit der variabler Inhalt in SGML-Dokumenten eingebunden werden kann. Zusätzlich sind Entitäten der einzige Weg, über den eine Datei in eine andere Datei mit SGML-Mitteln eingebunden werden kann.
Es werden zwei Arten von Entitäten unterschieden: Allgemeine Entitäten und Parameterentitäten.
Allgemeine Entitäten können nur in Dokumenten benutzt werden. Sie können zwar im SGML-Kontext definiert aber dort nicht benutzt werden. Vergleichen Sie dies mit Im Parameterentitäten.
Jede allgemeine Entität hat einen Namen, über
den sie angesprochen werden kann, um den von ihr
referenzierten Inhalt in ein Dokument einzubinden. Dafür
muss an der betreffenden Stelle der Namen der
Entität per
&
einfügt werden. Eine Entität
entitaetenname
;current.version
könnte beispielsweise
durch die aktuelle Versionsnummer eines Programms ersetzt
werden. Man könnte also schreiben:
Wenn sich die Versionsnummer ändert, muss nur die Entität angepasst und anschließend das Dokument neu erzeugt werden.
Eine weitere Einsatzmöglichkeit für Allgemeine
Entitäten ist das Einbinden von Zeichen, die auf andere
Weise nicht in ein SGML-Dokument eingefügt werden
könnten. Ein Beispiel für solche Zeichen sind
<
und &
, die
normalerweise nicht direkt in
SGML-Dokumenten erlaubt sind. Stößt ein SGML-Parser
bei seiner Arbeit auf das Symbol <
,
nimmt er an, dass der Anfang eines Start- oder Endtags
gefunden wurde. Bei einem &
wird er
annehmen, den Anfang einer Entität gefunden zu haben.
Wenn eines der beiden Zeichen benötigt wird, werden
daher die allgemeinen Entitäten <
und &
verwendet.
Allgemeine Entitäten können nur in einem SGML-Kontext definiert werden. Üblich ist es, dies direkt nach der DOCTYPE-Deklaration zu tun:
Wichtig ist an dieser Stelle, dass die DOCTYPE-Deklaration durch eine eckige Klammer am Ende der ersten Zeile erweitert wurde. Die beiden Entitäten selber werden in den folgenden zwei Zeilen definiert, bevor in der letzten Zeile die eckige Klammer und die DOCTYPE-Deklaration wieder geschlossen werden.
Die eckigen Klammern sind notwendig um festzulegen, dass man die über DOCTYPE genannte DTD erweitern möchte.
Genau wie Allgemeine Entitäten werden Parameterentitäten eingesetzt um wiederverwendbare Inhaltsteile mit Namen zu versehen. Im Gegensatz zu Allgemeinen Entitäten können sie aber nur innerhalb eines SGML-Kontextes genutzt werden.
Die Definition von Parameterentitäten erfolgt
ähnlich zu der Allgemeiner Entitäten. Sie werden
lediglich mit
%
anstelle von
entitaetenname
;&
referenziert[6]. Wichtig ist, dass das
entitaetenname
;%
-Zeichen zwischen
ENTITY
und dem Entitätennamen ein Teil
der Definition ist.
Fügen Sie in beispiel.xml
eine Allgemeine Entität ein.
Validieren Sie diese Datei mit
onsgmls
Öffnen Sie nun beispiel.xml
mit Ihrem Webbrowser. Es kann notwendig sein, dass
Sie die Datei vorher in beispiel.html
umbenennen müssen, damit die Datei auch als
HTML-Dokument erkannt wird.
Nur wenn Sie einen sehr modernen Browser haben, werden
Sie sehen können, dass
&version;
durch die Versionsnummer
ersetzt wurde. Leider haben die meisten Webbrowser
sehr einfache SGML-Parser, die nicht richtig mit SGML
umgehen können[7].
Die Lösung hierfür ist, das Dokument zu normalisieren. Zu diesem Zweck liest ein Normer das Dokument ein und gibt anschließend semantisch gleichwertiges SGML wieder aus, dass auf verschiedene Arten transformiert worden sein kann. Eine dieser möglichen Transformationen ist das Ersetzen der Referenzen auf Entitäten mit dem von ihnen präsentierten Inhalt.
Versuchen Sie, die Beispieldatei mittels
osgmlnorm
zu normalisieren:
%
osgmlnorm beispiel.xml > beispiel.html
Anschließend sollten Sie eine normalisierte
Version, dass heißt eine, bei der die
Entitäten gegen ihren Inhalt ersetzt wurden, in der
Datei beispiel.html
finden. Diese
Datei können Sie sich nun mit Ihrem Browser
ansehen.
Wenn Sie sich die Ausgaben von osgmlnorm
ansehen, werden Sie feststellen, dass
die DOCTYPE-Deklaration am Anfang der Datei nicht mehr
enthalten ist. Möchten Sie die Deklaration behalten,
muss osgmlnorm
mit der Option
-d
aufrufen werden:
%
osgmlnorm -d beispiel.xml > beispiel.html
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>.