[Aufbauend auf den vorherigen Guide]

4. Documenttype Definitions

Die Documenttype Definitionen beschreiben die Struktur von XML- und SGML Dokumenten. Es bestimmt die Struktur von Dokumenten. In einer DTD werden Attribute, Elemente usw. definiert.

Da die DTD ist ein Bestandteil der XML Spezifikation, was allerdings später von vielen kritisiert wurde, da der DTD Syntax kein XML Syntax ist. Für XML Dokumente wurde ein eigene Spezifikation, das XML Schema (oder in kurz: XSD) geschaffen.

Diese XSD verfolgt dasselbe Ziel wie die DTD, ist jedoch etwas komplexer und ist komplett im XML Syntax verfasst.

Da die DTD jedoch trotzdem noch eine Rolle spielt, wird sie hier trotzdem noch behandelt.  

4.1 "Documenttyp-Definition" (DTD) und Instanzen

Die wenigsten die HTML Dokumente verfassen, werden sich mit der DTD beschäftigt haben, da die DTD für HTML fest in den Händen des W3Cs liegt, allerdings gibt es nun mit XML die Möglichkeit eigene Elemente zu schaffen, welche z.B. aber nur bestimmte Attribute bekommen dürfen.

Einige Beispiele entstammen der XHTML DTD vom W3C, welche sich hier einsehbar ist:

http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd  

4.1.1 Elementtypen

Die wichtigsten Komponenten einer DTD sind die Element-Deklarationen.

Die Elementtypen weisen einem Element und sein möglicher Inhalt definiert.

Folgende Elementtypen gibt es in einer DTD:

Syntax: <!ELEMENT elementname elementtyp>

Beispiel: <!ELEMENT img EMPTY> <!ELEMENT table      (caption?, (col|colgroup), thead?, tfoot?, (tbody+|tr+))>

4.1.2 Entities

Wie bereits schon vorhin kurz erwähnt, dienen Entities der Wiederverwendbarkeit. Dabei wird eine bestimmte Zeichenkette festgelegt, welche beim Aufrufen dieser durch eine vorher festgelegte andere Zeichenkette oder ein anderes Dokument ersetzt wird.

4.1.2.1 Interne Entities

Ein internes Entity besteht nur aus dem Namen und der Zeichenkette, welche später eingesetzt werden soll.

Syntax: <!ENTITY name “zeichenkette“>

Aufgerufen wird dieses Entity mit einem & und dem namen sowie einem Semikolon.

Syntax: &name;

Beispiel: 

<!ENTITY dtag "Deutsche Telekom AG">

Anwenden würden wir dieses Entity mit "&dtag;"

Die Zeichenkette kann im Prinzip alles enthalten: Normale Texte, neue Entitys oder XML.

Beispiel: 

<!ENTITY dtag "Deutsche Telekom AG"> 

<!ENTITY tt_link "<a href=”™training.telekom.de”™>Telekom Training</a>” > 

<!ENTITY division "&dtag; - Telekom Training">

4.1.2.2 Externe Entities

Externe Entities verweisen auf den Inhalt von den angegebenen Dateien. Nach dem Namen wird noch notiert, ob dieses Entity öffentlich ("PUBLIC"), d.h. es wird nicht nur auf der Website sondern im ganzen Intranet oder ist vom W3C standardisiert oder es ist nur systemweit ("SYSTEM"). Allerdings spielen diese beiden Sachen keine große Rolle.

Syntax: <!ENTITY name SYSTEM/PUBLIC "datei">

Beispiel: 

<!ENTITY kapitel1 SYSTEM "kapitel1.xml">

Bei Externen Entities kann man zusätzlich angeben, wenn es um ein nicht analysiertes Entity handelt, d.h. der Inhalt besteht aus beliebigen Daten. In diesem Fall muss eine Notation angegeben werden:

Beispiel: 

<!ENTITY BMP_Bildchen SYSTEM "bild.bmp" NDATA bmp>

4.1.3 Parameter-Entities

Normale Entities werden verwendet, wenn man auf der Website bestimmte Abkürzungen nutzen will. Da sich auch in einer DTD häufig Deklarationen doppeln, wird hier mit sog. Parameter-Entities gearbeitet. Dadurch lassen sich auch externe Daten in die DTD einbinden.

Syntax: <!ENTITY % name “zeichenkette“>

Beispiel: 

<!ENTITY % headlines "H1|H2|H3|H4|H5|H6|H7">

4.1.4 Attribute

Elemente können bestimmte Attribute enthalten. Welches Element, welches Attribut enthält wird in der DTD festgehalten.

4.1.4.1 Attributtypen

Beispiel in der DTD: 

<!ATTLIST IrgendEinElement 

Sprache CDATA 

> 

Beispiel in der XML Datei: 

<IrgendEinElement Sprache="deutsch123">Dies hier ist ein Text.</IrgendEinElement>
 
Beispiel in DTD: 

<!ATTLIST IrgendEinElement 

Sprache_id ID 

>Beispiel in der XML Datei: 

<IrgendEinElement Sprache_id="123">Dies hier ist ein Text.</IrgendEinElement>
Beispiel in DTD: 

<!ATTLIST Produkt 

Hersteller_id IDREF 

>Beispiel in der XML Datei: 

<Produkt Herstellter_id="123">Hammer</Produkt>
 
Beispiel in DTD: 

<!ATTLIST IrgendEinElement 

Sprache NMTOKEN 

>Beispiel in der XML Datei: 

< IrgendEinElement Sprache="de DE">Testtext</ IrgendEinElement >
 
Beispiel in der DTD: 

<!ATTLIST IrgendEinElement 

Sprache (deutsch|englisch|spanisch) 

>Beispiel in der XML Datei: 

<IrgendEinElement Sprache="deutsch">Dies hier ist ein Text.</IrgendEinElement> 

<IrgendEinElement Sprache="englisch">Nice work!</IrgendEinElement>

4.1.4.2 Attributvorgaben

Mittels Vorgaben kann man Attribute vorbelegen oder sagen, ob das Attribut zwingend vorhanden sein muss oder nicht.

4.1.4.3 Attributlisten

In den Listen erfolgt die Zuordnung. Syntax: <!ATTLIST elementname Name typ Vorgabewert ... > 
Beispiel: 

<!ATTLIST wohnort 

plz   CDATA #REQUIRED 

strasse    CDATA #REQUIRED 

hausnr   CDATA #IMPLIED 

land   CDATA #FIXED "germany" 

>

4.1.5. Einbindung der DTD in XML

4.1.5.1 Externe Verweise

Beispiel: 

<?xml version=”1.0” standalone=”yes”?> 

<!DOCTYPE lala SYSTEM "lala.dtd”> 

<lala>Dumdidum</lala>

4.1.5.2 Interne Verweise

Beispiel: 

<?xml version=”1.0” standalone=”yes”?> 

<!DOCTYPE lala [ <!ELEMENT (#PCDATA) >] > 

<lala>Dumdidum</lala>

Der Name muss dem des Wurzelelementes entsprechen!