Eine DTD stellt also für die Verfasser von Dokumenten Tags bereit, mit denen diese ihre Texte strukturieren dürfen bzw. müssen.
SGML-Deklarationen in der DTD werden von spitzen Klammern ('kleiner-als' und 'größer-als') eingeschlossen. Der öffnenden Klammer folgt ein Ausrufungszeichen ('!') und ein Schlüsselwort. Die (Variablen-) Namen (im Beispiel hw) müssen mit einem Buchstaben beginnen und dürfen nicht länger als 8 Zeichen sein.
Bsp.:
<!ENTITY hw "hello world">
Eine Ausnahme stellen die Kommentare dar. Diese werden von zwei Minuszeichen eingeschlossen, wobei es dabei zwei Varianten gibt:
<!ENTITY hw "hello world" -- hw durch hello world ersetzen -- >
Diese sind an allen Stellen erlaubt, an denen auch Leerzeichen zulässig sind.
<!-- Makrodefinitionen -->
Diese sind generell zulässig, dem Ausrufungszeichen darf aber kein Leerzeichen folgen.
Dem Schlüsselwort ELEMENT folgt - durch mindestens ein Leerzeichen getrennt - der Name der DTD, die anschließend definiert wird. Durch die folgenden, ebenfalls durch Leerzeichen (oder einen anderen Separator wie z.B. Tabulator) getrennten Zeichen wird festgelegt in welcher Art die Start- und End-Tags verwendet werden dürfen. Diese Zeichen können entweder das Minuszeichen '-' oder aber der Buchstabe 'O' sein. Bei einem 'O' (omitted) darf das entsprechende Tag fehlen - sofern der Kontext eine eindeutige (automatische) Zuordnung zuläßt. Abschließend folgt in runden Klammern die Angabe der Elemente, die eine zugehörige Instanz notwendigerweise in der angegebenen Reihenfolge enthalten muß. Deren Aufzählung erfolgt durch Kommata getrennt.
Bsp.:
<!ELEMENT buch O - (autor, titel, rumpf)>
In diesem Beispiel wird festgelegt, daß die DTD den Namen buch erhält. Das einleitende
Start-Tag <buch>
darf weggelassen, das End-Tag </buch>
muß aber angegeben werden. Eine Instanz des Typs buch muß die Elemente autor,
titel und rumpf und auch in dieser Reihenfolge enthalten.
Die Elemente selbst werden anschließend mit demselben Schlüsselwort z.B. wie folgt deklariert:
<!ELEMENT autor O O (#PCDATA)>
Die Deklaration für autor legt mit dem reservierten Wort #PCDATA fest, daß an der betreffenden Stelle Textinformationen stehen. Innerhalb der runden Klammern (group delimiter) der Elementdeklaration kann durch spezielle Symbole (group connector) das Verhältnis von Gruppenelementen zueinander bestimmt werden:
,
&
|
*
+
?
<!ELEMENT rumpf - - (#PCDATA|kapitel)+>
<!ELEMENT kapitel - - (#PCDATA)>
Das Element rumpf könnte also aus Textinformation oder dem Element kapitel bestehen und müßte mindestens einmal, dürfte aber auch mehrfach vorkommen. Diese Deklaration mag zunächst unsinnig erscheinen, aber durch die Trennung von Rumpf und Kapitel können diese bei der Weiterverarbeitung des Textes auch separat behandelt werden.
Die Deklaration einer Liste, deren Unterpunkte entweder nummeriert oder aber unnummeriert (mit einem Grafikzeichen versehen) aufgeführt werden, könnte folgende Gestalt annehmen:
<!ELEMENT liste - - (elem+)>
<!ATTLIST liste num (ja|nein) ja>
<!ELEMENT elem - O (#PCDATA)>
In der Instanz könnte das liste-Tag nunmehr optional mit dem Attribut num versehen werden; die Ausprägung kann in einfachen oder doppelten Anführungszeichen ( ' oder " ) angegeben werden:
Beispiele:
<liste num="ja"> <elem>Punkt 1 <elem>Punkt2 </liste>
<liste num='nein'> <elem>Punkt 1 <elem>Punkt2 </liste>
<liste alpha> <elem>Punkt 1 <elem>Punkt2 </liste>
<liste> <elem>Punkt 1 <elem >Punkt2 </liste>
In den beiden ersten Fällen wird der Standardwert verwendet, wobei dieser in der zweiten
Zeile explizit angegeben wird. Die Ausgabe würde hierbei wie folgt aussehen:
Die beiden letzten Zeilen der obigen Listen-Verwendung geben explizit die Nutzung einer unnummerierten Liste an. Hierbei wird auch deutlich, daß bei der Anwendung der Attribute im Dokument der Attributname nicht angegeben werden muß. Dieses gilt auch bei Deklaration mehrerer Attribute für ein Element; es gilt allerdings die Bedingung, daß die Attributwerte disjunkt sein müssen, um bei Angabe eines Wertes eine eindeutige Zuordnung treffen zu können. Eine weitere Einschränkung bei mehrfacher Attributierung ist, daß bei Angabe eines Wertes für das zweite oder ein späteres Attribut ebenfalls Werte für die vorangestellten Attribute angegeben werden müssen. Es gilt dabei die Reihenfolge der Deklaration in der DTD.
Die Listenausgabe würde in diesen beiden Fällen folgende Gestalt annehmen:
Bsp.:
<!ENTITY ouml "ö">
Der Aufruf eines Entities in der Instanz wird durch '&' eingeleitet, gefolgt von dem
Namen des Entities und sofern ohne Separator ein Text etc. folgt muß noch abschließend
ein Semikolon ';' angegeben werden. Durch Angabe von ö wird somit im
Dokument der Buchstabe 'ö' erzeugt. Dieses entspricht der SGML-DTD, die für HTML
festgelegt ist.
Mit den reservierten Wörtern STARTTAG und ENDTAG können automatisch Start- bzw. End-Tags
im Dokument erzeugt werden. Im Unterschied zur Angabe des Ersetzungstextes
"<titel>"
kann bei Verwendung dieser Methode in der Weiterbearbeitung
des Dokumentes vom Programm erkannt werden, daß es sich um ein Tag und nicht nur um einen
Text handelt. Die Deklaration von
<!ENTITY titel STARTTAG "titel">
erzeugt durch Angabe von &titel;
in der Instanz das Start-Tag
<titel>
und durch
<!ENTITY endtitel ENDTAG "titel">
wird dementsprechend mittels &endtitel;
das End-Tag
</titel>
erzeugt.
General Entities dienen auch der Einbindung externer Dokumentteile (external entities), wobei das reservierte Wort SYSTEM der Referenzierung dient. Ein Subdokument könnte wie folgt eingebunden werden:
<!ENTITY kap1 SYSTEM "c:\SGML\doku\kapitel1.doc">
Bsp.:
<!ENTITY % ueber "<h1>|<h3>|<h5>">
<!ELEMENT titel - - (%ueber;,#PCDATA)*>
In diesem Beispiel kann das optionale Element titel
auch mehrfach auftreten
(durch '*' gekennzeichnet!). Wird es angegeben, so muß es aus dem Start-Tag für die
Überschrift sowie dem Text der Überschrift selbst bestehen.
Wichtig hierbei ist, daß bei der Entity-Deklaration zwischen dem Prozentzeichen '%'
und dem Entity-Namen ein Leerzeichen stehen muß, nicht aber bei der Verwendung des
Entities in der Element-Deklaration. Zusätzlich muß die Entity-Deklaration ihrer
Verwendung vorausgehen.
... [ Seminar WWW und JAVA ] ... [ Thema SGML ] ... [ Document Type Definition ] ... [ SGML-Dokumente ] ...