[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:

  • Empty - kein Inhalt
  • Any - für beliebigen Inhalt
  • , - Reihenfolge
  • | - Alternative
  • Runde Klammern zum Gruppieren
  • Stern für keinmal oder mehrmals
  • Plus für einmal oder mehrmals
  • Fragezeichen für einmal oder keinmal
  • Wird weder Stern, Plus oder Fragezeichen verwendet, muss das Element min. einmal vorkommen
  • Texte, welche den Elementen angehören, werden als PCDATA (Parsed Character Data) deklariert.

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 namezeichenkette“>

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: <pre class="csharpcode">Beispiel:

<!ENTITY BMP_Bildchen SYSTEM “bild.bmp” NDATA bmp></pre>

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 % namezeichenkette“> <pre class="csharpcode">Beispiel:

<!ENTITY % headlines “H1|H2|H3|H4|H5|H6|H7”></pre>

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

  • CDATA - steht für beliebigen Inhalt
    • PCDATA und CDATA sind vom Prinzip her gleich
    • In ihnen werden beliebige Texte gespeichert
    • Unterschied liegt daran, dass PCDATA vom Parser durchsucht wird und kann zum Beispiel Entities oder XML Daten parsen ("Parsed Character Data").
    • In CDATA werden keine Markupzeichen, wie z.B. spitze Klammern erkannt.
Beispiel in der DTD: 

<!ATTLIST IrgendEinElement 

Sprache CDATA 

> 

Beispiel in der XML Datei: 

<IrgendEinElement Sprache="deutsch123">Dies hier ist ein Text.</IrgendEinElement>
 
  • ID
    • steht für einen eindeutigen Bezeichner
    • darf aus Buchstaben und Zahlen und Kombinationen dessen bestehen
Beispiel in DTD: 

<!ATTLIST IrgendEinElement 

Sprache_id ID 

>Beispiel in der XML Datei: 

<IrgendEinElement Sprache_id="123">Dies hier ist ein Text.</IrgendEinElement>
  • IDREF
    • steht für eine Referenz auf einen Bezeichner
    • dient dazu, dass eine ID nicht zweimal vergeben wird, wenn ein Element die augenscheinliche selbe ID vergeben will
Beispiel in DTD: 

<!ATTLIST Produkt 

Hersteller_id IDREF 

>Beispiel in der XML Datei: 

<Produkt Herstellter_id="123">Hammer</Produkt>
 
  • NMTOKEN
    • ähnelt dem CDATA, hat allerdings ein paar Einschränkungen
    • steht für Name Token
Beispiel in DTD: 

<!ATTLIST IrgendEinElement 

Sprache NMTOKEN 

>Beispiel in der XML Datei: 

< IrgendEinElement Sprache="de DE">Testtext</ IrgendEinElement >
 
  • Aufzählungen
    • Nur angegebene Werte dürfen im Attribut vorkommen
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.

  • #REQUIRED - Attribut muss angegeben werden
  • #IMPLIED - Attribut kann angegeben werden
  • #FIXED "..." - Attribut hat immer einen Standardwert
  • "..." - Attribut hat bei Nichtzuweisung diesen Standardwert

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!

Edit