Guide: XML (DocumentType Definitions DTDs)

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

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

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

  • 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!

Letzte Posts

  • image.png
    Wieviel Speicher belegt meine RavenDB? Und welchen Plan benötige ich bei CloudBird oder RavenHQ?

    Wer RavenDB nicht auf seinem eigenen Server betreiben möchte oder einfach wissen möchte wieviel Speicherplatz die eigentlichen Daten benötigen gibt es zwei Möglichkeiten: Falls es noch einen anderen Weg gibt: Immer her damit – aktuell hab ich nur die beiden Methoden gefunden und sie scheinen mehr oder weniger zu passen. RavenDB Storage per JSON über ...

  • image_thumb.png
    Powershell – Output “formatieren” und Details anzeigen

    Die Powershell ist ein prima Werkzeug und immer mehr System-Tools und Dienste stellen Powershell Module zur Verfügung. Da ich aber nur “am Rande” mit Powershell zutun habe bin ich auf ein nettes Detail gestossen, welches vermutlich bei den erfahreneren Powershell Usern maximal ein müdes Lächeln hervorruft: Ps-Cmd | Format-List etc. Um den Text-Output zu formatieren ...

  • clip_image002.jpg
    Rabatt-Code & Freiticket für die Developer Week 2013

    Nach langer Zeit haben wir mal wieder ein kleines Angebot für euch: Wir sind Medienpartner der Developer Week 2013 und über uns könnt ihr günstiger an Tickets herankommen. Mit dem Code DWX13coi könnt ihr von Sonderkonditionen profitieren (= Ticketpreise werden niedriger & keine bösen Überraschungen). Die Developer Week (DWX) bündelt vom 24.-27. Juni 2013 in ...

  • image.png
    IIS & Windows Authentication – Troubleshooting mit Negotiate & NTLM

    Windows Authentifizierung ist eine einfache (und naheliegende) Authentifizierungs-Option für “Haus-interne” Webapplikationen. Setup Im IIS selbst kann man die Windows Authentifzierung sehr leicht anschalten: Natürlich kann man dies auch über die web.config steuern: <system.web> ... <authentication mode="Windows"/> ... </system.web> ... Fehlermeldung “HTTP Error 401.2 – Unauthorized”: Dies kann (wie fast immer) viele Gründe haben, z.B. weil ...

  • image.png
    Json-Online-Tools: Viewer & Json2Csharp Generator

    Wo APIs im Spiel sind, ist das JSON Format nicht weit. Da ich immer mal wieder zwei Tools benutze, möchte ich diese hier auch mal kurz würdigen. JSON Viewer Wer nur den JSON-Text vor sich hat sieht meist die Struktur nicht. Über JSON Viewer kann man sich recht einfach einen Überblick verschaffen: [URL] JSON2CSharp Der ...

Support us!