next up previous contents
Next: Attributdeklaration Up: DTD-Syntax Previous: DTD-Syntax   Contents

Elementdeklaration

Die Syntax der Elementdeklaration sieht für ein konkretes Beispiel so aus:
<!ELEMENT		autor		(#PCDATA)>
Diese Definition sagt aus, dass ein Element vom Typ autor als Inhaltsmodell Daten vom Typ PCDATA enthalten kann. Das Zeichen # zeigt lediglich an, dass es sich bei PCDATA um ein vordefiniertes Schlüsselwort handelt. Durch den Namen ist es nun möglich verschiedene Elementtypen zu definieren.
Der Datentyp kann noch andere Werte außer PCDATA7 annehmen, zum anderen auch EMPTY, das würde bedeuten, dass es sich um ein leeres Element handelt. Weiters gibt es den Typ ANY, der beliebig viele Elemente jeglicher Art in einer nicht weiter spezifizierten Reihenfolge und Anzahl beinhalten kann. CDATA würde bedeuten, dass der Inhalt des Elements nicht geparst würde.
XML hätte nicht die Möglichkeit einer direkten Strukturmodellierung, wäre nicht die Organisation der Reihenfolge von Elementen durch die DTD gegeben. Im Prinzip legt das Inhaltsmodell fest, in welcher Weise im Container-Element andere Elemente zueinander in Beziehung gesetzt werden und welchen Status die einzelnen Elementtypen besitzen. Hierzu gibt es angelehnt an Reguläre Ausdrücke (engl.: regular expressions) drei Operatoren:

A 		A muss genau einmal auftreten (obligatorisch).

A? A kann einmal auftreten, oder aber auch ausgelassen werden (fakultativ).
A+ A muss mindestens einmal, kann aber beliebig oft auftreten.
A* A kann einmal oder beliebig oft auftreten, kann aber auch
ausgelassen werden.
	<!ELEMENT		titel		(#PCDATA)>
						<!ELEMENT		stadt		(#PCDATA)>
						<!ELEMENT		verlag		(#PCDATA)>
						<!ELEMENT		jahr		(#PCDATA)>
Hier wären nun vier Elemente mit bibliographischen Namen definiert, die jedoch keinerlei Strukturdefinition beinhalten, das geschieht jedoch mittels Container-Element:
<!ELEMENT		buch		(autor+, titel, verlag?, jahr?)>
Durch diese Deklaration kombiniert mit den Opertatoren ist es nun möglich, mehrere Autoren für ein Buch anzugeben, der Titel ist obligatorisch und die Verlags- und Jahresangabe ist nicht zwingend, kann also auch ausgelassen werden.
Für Beziehungen unter Elementen in Container-Elementen stehen zwei Konnektoren zur Verfügung:

A, B folgt auf A

A | B A oder B
Eingesetzt können komplexere Strukturen erzeugt werden, wie z.Bsp.:
<!ELEMENT buch 	(autor+,  titel, 
										(verlag? , jahr?) | (jahr?, verlag?))>
Diese Deklaration würde bedeueten das Container-Element buch müsste um der DTD zu genügen ihre Daten-Elemente folgend anordnen; Zuerst kommen mehrere oder nur ein Autor, dann der obligatorische Titel, weiter, dass die fakultativen Elemente Verlag und Jahr in beliebiger Reihenfolge auftreten können, also entweder Jahr auf Verlag oder Verlag auf Jahr.

next up previous contents
Next: Attributdeklaration Up: DTD-Syntax Previous: DTD-Syntax   Contents
Nikolai Jursic 2004-03-05