next up previous contents
Nächste Seite: Das XML Dokument Aufwärts: eXtensible Markup Language Vorherige Seite: eXtensible Markup Language   Inhalt

Dokumenttypdefinition

Ein XML-Dokument ist durch Elemente und deren Attribute aufgebaut. Ein Element besteht in der Regel aus einem Start-Tag < ... > und einem End-Tag < /... >. Der eigentliche Inhalt wird zwischen beiden Tags abgelegt. Elemente, die keinen Inhalt besitzen, lönnen auch durch < .../ > abgekürzt werden. Des Weiteren kann ein Element durch im Start-Tag enthaltene Attribute genauer beschrieben werden. Welche Elemente in einem bestimmten Dokument benutzt werden dürfen, ist in der Dokumenttypdefinition (DTD) vereinbart. Dies ist in der Regel eine separate Datei, in der jedes Element oder Attribut zuvor definiert wird. Die Definition der verschiedenen Elemente wird mit einer speziellen Syntax realisiert. Dabei ist insbesondere auf die Groß- und Kleinschreibung zu achten. Ein Element Text unterscheidet sich von den Elementen TEXT oder text. Die Deklaration eines Elementes sieht folgendermaßen aus:
<!ELEMENT element_name  Inhaltsspezifikation >
Jede Elementdeklaration beginnt mit dem String <!ELEMENT und endet mit >. Dazwischen wird der Name des Elements und der mögliche Inhalt angegeben. Bei der Spezifikation des Inhaltes sind mehrere Varianten, die in Tabelle 3.1 aufgelistet sind, denkbar.

Tabelle 3.1: Inhaltsmöglichkeiten eines Elementes
Inhaltsangabe Beschreibung
EMPTY Das Element darf keinen Inhalt haben.
ANY Kann beliebigen Inhalt haben
  Hier werden die Elemente aufgelistet, die man später als
Elementinhalt untergeordnete Elemente verwendet darf. Zeichendaten
  oder andere Elemente dürfen nicht benutzt werden.
  In der Spezifikation muß der String #PCDATA
kombinierter Inhalt angegeben sein, welcher bestimmte Zeichendaten definiert.
  Dieser Typ kann auch mit Elementen kombiniert werden.


Die Inhaltsangaben bei den beiden Varianten EMPTY und ANY sind klar definiert. Bei der einzelnen Auflistung der Elemente sind jedoch verschiedene Ansätze möglich. Die untergeordneten Elemente werden grundsätzlich in einer Klammer aufgezählt. Werden sie durch Kommata getrennt, muß jedes Element in der angegebenen Reihenfolge erscheinen.
<!ELEMENT element_name  (elem_A, elem_B) >
In diesem Fall muß also element_A vor element_B innerhalb des Elementes angegeben sein. Ersetzt man das Komma durch einen vertikalen Balken, kann man zwischen den aufgezählten Elementen wählen. Es kann aber nur ein Element aus der Liste verwendet werden.
Zusätzlich hat man die Möglichkeit durch Indikatoren die Anzahl der Elemente zu steuern. In der Tabelle 3.2 sind die verschiedenen Indikatoren aufgeführt.

Tabelle 3.2: Indikatoren für Elementdeklarationen
Indikator Beschreibung
? optional, null- oder einmal
* optional, nullmal oder beliebig oft
+ zwingend erforderlich und wiederholbar, einmal oder beliebig oft


Diese Grundkonzepte kann man nun beliebig miteinander kombinieren.
<!ELEMENT element_name  ((elem_A | elem_B), elem_C+)* >
In diesem Fall kann das Element entweder elem_A oder elem_B gefolgt von einem oder mehreren elem_C-Elementen beinhalten. Da der ganze Inhalt mit Indikator * gekennzeichnet ist, kann der Inhalt des Elements leer sein oder mehrmals wiederholt werden. Ähnlich wie Elemente müssen auch deren Attribute in der DTD deklariert werden. Attribute werden durch die folgende Zeile definiert:
<!ATTLIST element_name attribut_name Typ [Vorgabewert]>
Eine Zeile wird durch <!ATTLIST eingeleitet. Danach muß der Name des Elements angegeben werden, für den das Attribut definiert wird, gefolgt vom Namen des Attributs. Anschließend wird der Typ des Attributs festgelegt, wobei man wieder zwischen mehreren Typen unterscheiden kann.

Tabelle 3.3: Attributtypen
Typ Beschreibung
CDATA beliebige Zeichenkette
NMTOKEN Zeichenkette, die nur bestimmte Buchstaben zuläßt
NMTOKENS Aufzählung von NMTOKEN-Werten
Aufzählung Liste aller erlaubten Werte
ID eindeutiger Name im Dokument
IDREF Name einer zuvor definierten ID
IDREFS Aufzählung von ID-Werten
NOTATION Name einer Notationsdeklaration
ENTITY Name einer Entitydeklaration
ENTITIES Aufzählung von ENTITY-Werten


Notationen und Entities müssen ebenfalls in der DTD deklariert werden, worauf hier jedoch nicht weiter eingegangen werden soll.
Zusätzlich kann man einem Attribut einen bestimmten Wert vorgeben. Dieser wird dann direkt nach der Typangabe angegeben. Insgesamt unterscheidet man hier zwischen vier verschiedenen Fällen [Beck2002]: Eine andere Form um den Sprachumfang eines Dokumententyps festzulegen, ist XML-Schema. Es stellt eine Weiterentwicklung der DTD dar. Da im weiteren Verlauf der Diplomarbeit keine Schemata genutzt werden, wird nicht näher auf dieses Thema eingegangen. Im Quellcode 3.1 ist eine DTD zu sehen, in der beispielhaft eine Literaturliste definiert wird. Diese kann entweder leer sein oder es lassen sich damit beliebig viele Daten von Büchern bzw. Zeitschriften verwalten.

Die DTD einer einfachen Literaturliste
<!-- DTD einer Literturliste -->

<!ELEMENT Literaturliste (Buch | Zeitschrift)*>

<!ELEMENT Buch            (Titel, Autor+)>
<!ATTLIST Buch
    ISBN       CDATA    #REQUIRED
    language   CDATA    "DE"
    preis      CDATA    #IMPLIED
>

<!ELEMENT Zeitschrift     (Titel, Autor+)>
<!ATTLIST Zeitschrift
    language   CDATA    "DE" 
    preis      CDATA    #IMPLIED
>

<!ELEMENT Titel     #PCDATA>
<!ELEMENT Autor    (Name, EMail?)>
<!ELEMENT Name      #PCDATA>
<!ELEMENT EMail     #PCDATA>


next up previous contents
Nächste Seite: Das XML Dokument Aufwärts: eXtensible Markup Language Vorherige Seite: eXtensible Markup Language   Inhalt
Oliver Krone 2003-04-28