DTD

Eine DTD (Document Type Defintion) ist eine Dokumenttypdefinition, die die Struktur eines XML-Dokuments? festlegt. Alternativ kann ein XML-Dokument auch über eine XML-Schema-Datei strukturiert werden. Die DTD kann benutzt werden, um zu erzwingen, dass das XML-Dokument einer bestimmten Struktur genügt. Die Validierung prüft die Übereinstimmung des XML-Dokuments mit der schematischen Beschreibung in der DTD und entscheidet, ob das Dokument gültig ist. Anwendungen können sich dann auf die Struktur verlassen und müssen keine Vorkehrungen für abweichende Strukturen treffen, siehe dazu auch Abbildung 1. Mit Hilfe eingefügter Kommentare? können Informationen, über die Bedeutung der Struktur abgeleitet werden. Entities erlauben die gemeinsame Nutzung von Informationen zwischen verschiedenen Dokumenten.4

Anwendungsszenarien
Abb.1: Generierung von XML-Dokumenten mit Schemabeschreibung (Quelle: Klettke, 2003)

Vorteile:3

  • Leicht anwendbar.
  • Verständlich.
  • Durch Applikationen problemlos lesbar.

Nachteile:1,2

  • DTD-Syntax ist kein XML.
  • Eingeschränkte Mächtigkeit.
  • Rudimentäre Typisierung von Attributinhalten.
  • Keine Sonderzeichen in Attributdeklarationen.



Elementdeklaration:3

In der DTD können Deklarationen für Elemente festgelegt werden.

Syntax:

  • Leeres Element:
<!ELEMENT preis EMPTY>
  • Beliebiges Elemente:
<!ELEMENT zusatzinformation ANY>
  • #PCDATA (Parsed Character Data)
<!ELEMENT adresse (#PCDATA)>
Volltextinformationen oder weitere deklarierte Elemente.

Gruppierung:3

Die zuvor deklarierten Elemente können auch wahlweise gruppiert werden.

  • Sequenz:
(Auto, Bus) = Reihenfolgenabhängig
  • Alternative:
(Auto | Bus)
  • Wiederholung mit Quantifizierer:
Auto? = 0..1 Mal
Auto+ = 1..n Mal
Auto* = 0..n Mal
Achtung: Wenn kein Quantifizierer angegeben ist, bedeutet es = genau ein Mal vertreten.

Beispiel:

Gruppierung ohne Quantifizierer:

<!ELEMENT adresse (ort, plz, strasse, nummer)>
Bedeutung: Es wird ein Element adresse in der dtd deklariert, welches gruppiert aus den Elementen ort, plz, strasse und nummer besteht.

Gruppierung mit Quantifizierer:

<!ELEMENT adresse (ort, plz, strasse, nummer, fax?)>
Bedeutung: Es wird ein Element adresse in der dtd deklariert, welches gruppiert aus den Elementen ort, plz, strasse, nummer und fax besteht, wobei fax im XML-Dokument nicht zwingend vorkommen muss.

Mixed Content Type (Alternative) mit Quantifizierer:

<!ELEMENT anreisebeschreibung (#PCDATA | auto | bahn | flugzeug)*>
Bedeutung: Es wird ein Element anreisebeschreibung in der dtd deklariert, welches gruppiert aus den Elementen auto, bahn und flugzeug bestehen kann. Letztere drei Elemente dürfen beliebigen Inhalt haben, als auch mehrfach oder kein Mal im XML-Dokument vorkommen.

Attributdeklaration:3

Den Elementen eines XML-Dokuments können so genannte Attribute zugeordnet sein, in denen weitere Eigenschaften der Elemente angegeben werden. Attributnamen müssen nur innerhalb ihres Elements eindeutig sein, während Elementnamen übers ganze Dokument eindeutig sein müssen.4 Eine Gegenüberstellung zwischen Elementen und Attribute ist in Abbildung 2 zu sehen.

Unterschied_Element_Attribut
Abb.2: Unterschiede zwischen Elementen und Attributen (Quelle: Klettke, 2003)

Attribute haben:3

  1. einen Namen
  2. einen Typ
    CDATA (CHARACTER DATA) = Für beliebige Inhalte.
    ID = Für Werte die innerhalb eines Dokuments eindeutig sein müssen.
    IDREF / IDREFS = Verweis auf eine oder mehrere IDs innerhalb eines Dokuments.
    ENTITY / ENTITIES = Referenz auf eine oder mehrere Entities.
    NMTOKEN / NMTOKENS = Ein oder mehrere Strings, die die gleichen Bedingungen wie Element- oder Attributnamen erfüllen müssen.
    (wert1|wert2|…) = Aufzählung der erlaubten Werte.
  3. Angabe, ob das Attribut auftritt
    #REQUIRED = Attribut muss angegeben werden.
    #IMPLIED = Attribut ist optional.
    #FIXED = Ein Defaultwert muss in der DTD festgelegt sein.
  4. Optionaler Default-Wert

Beispiel:

Zwei einfache Deklarationen:
1) <ort bundesland=‘MV‘ land=‘Deutschland‘>Rostock</ort>
2) <preis waehrung=‘Euro‘ betrag=‘25‘></preis>

Bedeutung: Zu 1: Es werden dem Element ort die Attribute bundesland und land hinzugefügt.

         Zu 2: Es werden dem Element preis die Attribute waehrung und betrag hinzugefügt. 

Attributdeklaration mit Pflichtangabe:
<!ATTLIST ort bundesland CDATA #REQUIRED

         land CDATA #REQUIRED ‘Deutschland‘>

Bedeutung: Es wird festgelegt, dass im Element ort die Attribute bundesland und land zwingend vorkommen müssen, wobei bei beiden beliebiger Inhalt sein kann. Letzterem wird zusätzlich noch der Vorbelegungswert Deutschland mitgegeben.

Attributdeklaration mit Pflichtangabe und optionaler Angabe:
<!ATTLIST unterkunft_id ID #REQUIRED

         url CDATA #REQUIRED
         erstellt-am CDATA #IMPLIED
         autor CDATA #IMPLIED>

Bedeutung: Es wird festgelegt, dass die unterkunft_id vom Typ id ist und eindeutig sein muss. Die unterkunft_id und url müssen zwingend vorkommen, wobei letzteres beliebiger Inhalt sein kann. Weiterhin wird festgelegt, dass erstellt-am und autor optional sind. Sollten die letzten beiden Attribute angegeben werden, so können sie beliebigen Inhalt enthalten.


Entities:3

Mehrfach wiederkehrende Teile eines Dokuments können als Entity deklariert werden. Durch einen Verweis ist es möglich Informationen nicht nur innerhalb der DTD mehrfach zu nutzen, sondern auch aus verschiedenen Speicherorten heraus.

Man unterscheidet zwischen folgenden Entities:

  • Allgemeine Entity
  • Interne Entity (in der gleichen Datei)
  • Externe Entity (in einer anderen Datei)
  • Parameter-Entity

Deklaration einer allgemeinen Entity:

<!ENTITY Entityname 'Ersetzungstext'>
<!ENTITY Entityname "Ersetzungstext">

Aufruf:

&Entityname;

Beispiel:

<!ENTITY termin “26 Juni 2012“>

<vortrag>Der Vortrag für SGDB findet am &termin statt.</vortrag>

Bedeutung: Es wird die Entity termin mit dem Inhalt "26 Juni 2012" erzeugt. Anschließend wird eine Referenz zu termin im Satz "Der Vortrag für SGDB findet am..." deklariert und somit der Inhalt von termin in den Satz hinzugefügt. Die Ausgabe zeigt dann folgendes => "Der Vortrag für SGDB findet am 26 Juni 2012 statt."

Extern:

  • Lokal:
  • URL:

Bedeutung: Dasselbe Beispiel wie oben, allerdings sind die Inhalte nicht im selben Dokument, sondern entweder lokal in der Datei vortragstermine.dtd auf der Festplatte des Rechners oder auf einem entfernten Rechner abgespeichert, der mittels der URL http://www.sgdb.de/vortragstermine.dtd abgerufen wird.

Vordefinierte Entities:3

vordefinierte_Entities
Abb.3: Vordefinierte Entities (Quelle: Klettke, 2003)

Sie dürfen nicht im Text angegeben und müssen durch spezielle Codes ersetzt werden, da sie eine besondere Bedeutung in XML-Dokumenten haben. Zum Beispiel wird "<" und ">" durch "&lt;" und "&gt;" ersetzt, denn sie grenzen die Tags der Elemente in XML ein. Weitere Sonderzeichen, die man ersetzen muss, sind in Abbildung 3 dargestellt.

Beispiel:

Umwandlung von (XML bei "Woyke" und "Bertelsmeier"):
<sgdb>

	<name>
		XML bei &quot;Woyke &quot; und &quot;Bertelsmeier &quot;	
	</name>

</sgdb>

Bedeutung: Es wird das Sonderzeichen " im Satz des XML-Dokuments mehrmals durch ein &quot; ersetzt.

Nicht geparste bzw. binäre Entities:3

  • Zum Darstellen von weiteren Daten, wie z.B: Bilddaten in XML-Dokumenten.
  • Verwendung in Attributen vom Typ ENTITY oder ENTITIES.
  • Müssen extern deklariert werden und brauchen die zusätzliche Komponente NOTATION.
    - Damit identifiziert man den Typ der Daten und mit welcher Applikation sie interpretiert bzw. ausgeführt werden sollen.

Beispiel:

DTD-Deklaration:

<!ELEMENT termin (#PCDATA)>
<!ATTLIST termin ansicht ENTITY #IMPLIED>
<!ENTITY ansicht_sgdb SYSTEM "ansicht_sgdb.gif" NDATA GIF>
<!NOTATION GIF SYSTEM 'gifviewer.exe'>

Aufruf im XML-Dokument:

<termin ansicht="ansicht_sgdb">SGDB Termin Ansicht</termin>

Bedeutung: Es wird festgelegt, dass dem Element termin die Bilddatei ansicht_sgdb.gif hinzugefügt wird und vom Typ NDATA GIF sein kann. Weiterhin wird mittels Notation festgelegt, dass das Bild mittels gifviewer.exe zu öffnen ist. Zum Schluss wird es im XML-Dokument durch ansicht="ansicht_sgdb" im Element termin aufgerufen.

Parameter-Entity:3

Wiederverwendung vordefinierter Teile aus deiner DTD zur

  • Erhöhung der Lesbarkeit
  • Vermeidung von Redundanz in der Darstellung

Damit wird die DTD:

  • Weniger fehleranfällig
  • Leichter wartbar
Achtung: Sie müssen deklariert sein, bevor sie verwendet werden können.

Beispiel:

<!ENTITY %adressdef "(ort,plz,strasse,nummer)">

<!ELEMENT adresse %adressdef;>

Bedeutung: Es wird mit dem Prozentzeichen festgelegt, dass das Element adresse, die Struktur von adressdef übernimmt, welche aus der Sequenz ort, plz, strasse und nummer besteht.


Beispiel (XML mit DTD)

 <!ELEMENT adressbuch (id, adresse)>
 <!ELEMENT id (#PCDATA)>
 <!ELEMENT adresse (#PCDATA)>

 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE adressbuch SYSTEM "adressbuch.dtd">
 <adressbuch>	
    <id>1</id>
    <adresse>Steinmülleralle 1</adresse>
 </adressbuch>

Beispiel (XML mit XML-Schema)

<xs:complexType name="adressbuch">

  <xs:sequence>
    <xs:element name="id"       type="xs:integer"/>
    <xs:element name="adresse"  type="xs:string"/>
  </xs:sequence>

</xs:complexType>

 <?xml version="1.0" encoding="utf-8"?>
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xs:noNamespaceSchemaLocation="adressbuch.xsd">
 <adressbuch>	
    <id>1</id>
    <adresse>Steinmülleralle 1</adresse>
 </adressbuch>

Nähere Einzelheiten findet man beim W3C-Konsortium oder bei Wikipedia und ein gutes Tutorial findet man hier.

Quellen:

  • [1] Goldfarb, Charles F., Das XML-Handbuch: Anwendungen, Produkte, Technologien. München: Addison-Wesley, 2000.
  • [2] Kazakos, Wassilios, Datenbanken und XML. Berlin Heidelberg: Springer, 2002.
  • [3] Klettke, Meike, XML & Datenbanken: Konzepte, Sprachen und Systeme. Heidelberg: dpunkt.verlag GmbH, 2003.
  • [4] Schöning, Harald, XML und Datenbanken: Konzepte und Systeme. München Wien: Carl Hanser, 2003.

siehe auch: gueltig, XML-Schema

Kategorie: XML, D