[Aufbauend auf den vorherigen Guide]
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.
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
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+))>
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.
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">
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>
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">
Elemente können bestimmte Attribute enthalten. Welches Element, welches Attribut enthält wird in der DTD festgehalten.
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>
Mittels Vorgaben kann man Attribute vorbelegen oder sagen, ob das Attribut zwingend vorhanden sein muss oder nicht.
Beispiel: <!ATTLIST wohnort plz CDATA #REQUIRED strasse CDATA #REQUIRED hausnr CDATA #IMPLIED land CDATA #FIXED "germany" >
Beispiel: <?xml version=”1.0” standalone=”yes”?> <!DOCTYPE lala SYSTEM "lala.dtd”> <lala>Dumdidum</lala>
Beispiel: <?xml version=”1.0” standalone=”yes”?> <!DOCTYPE lala [ <!ELEMENT (#PCDATA) >] > <lala>Dumdidum</lala>
Der Name muss dem des Wurzelelementes entsprechen!