Document Type Definition


... [ Seminar WWW und JAVA ] ... [ Thema SGML ] ... [ SGML-Dokumente ] ...

Übersicht: Document Type Definition


Allgemeine Beschreibung

In der Document Type Definition erfolgt die Festlegung einer bestimmten Art von Dokumenten bezüglich ihrer Struktur. Somit werden für unterschiedliche Informationen (z.B. Buch, Artikel) auch entsprechend differenzierte DTDs benötigt. Bei der Erstellung der Instanzen muß nur sichergestellt werden, daß diese den Regeln der zugehörigen DTD gehorchen.

Eine DTD stellt also für die Verfasser von Dokumenten Tags bereit, mit denen diese ihre Texte strukturieren dürfen bzw. müssen.


SGML-Syntax

Basis der SGML-Deklarationen ist der 7-Bit-ASCII Zeichensatz der im ISO-Standard 646 definiert ist. Dieser ist auch als International Reference Version (IRV) bekannt, bei dem jedem darstellbaren Zeichen ein Code im Bereich 32..126 zugeordnet ist und die Codes 0..31 und 127 von Kontrollfunktionen belegt sind (z.B. 13 entspricht Carriage Return).

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:

Weitere syntaktische Festlegungen werden im folgenden Abschnitt bei der Erläuterung ausgewählter Schlüsselwörter behandelt.


Elemente

Zwingend notwendiges Element einer DTD ist das Schlüsselwort ELEMENT. Erstmals angewendet legt es den Namen des Dokumententyps, die notwendigen Elemente die eine Instanz enthalten muß, sowie die eventuelle Notwendigkeit der Verwendung der zugehörigen Tags fest.

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:

Die Häufigkeit des Auftretens von (Gruppen-) Elementen kann durch folgende Symbole ( occurence indicator) festgesetzt werden: Die Deklaration von rumpf könnte wie folgt aussehen:

<!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.


Attribute

Jedes Element eines Dokumentes kann mit selbstdefinierten Attributen versehen werden. Mit dem Schlüsselwort ATTLIST wird bekannt gegeben, welchen Namen das/die Attribut(e) besitzt/-en, wie mögliche Ausprägungen auszusehen haben und welches der Standardwert ist.

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> <elem>Punkt 1 <elem >Punkt2 </liste>

<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>

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:

  1. Punkt 1
  2. Punkt 2

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:


Entities

Die Verwendung von Entities entspricht den Makros in C/C++ d.h. der Name des Entitys wird durch den angegebenen Text etc. ersetzt. In SGML exisitieren zwei Arten von Entities:


... [ Seminar WWW und JAVA ] ... [ Thema SGML ] ... [ Document Type Definition ] ... [ SGML-Dokumente ] ...