XML
Data Islands
DTD
Namensräume
Schema
XLink
XPath
Links
ASCII Table
ISO-8859-1
Impressum

DTD Kompaktwissen

HTML

  • DTD bereits in HTML vorhanden.
  • DTD wird vom Browser ignoriert, da dieser alle HTML Befehle fest verdrahtet hat.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN//">

XML

  • DTD zwingend zur Validierung erforderlich.
  • Intern und extern möglich.
  • Verweis auf DTD muss im Prolog stehen.
  • DTD darf Kommentare enthalten.
  • Mehrere DTDs pro Dokument möglich.
    • interne und externe können gemischt werden.
    • bei Überschneidungen gilt immer die zuerst geladene.

<!DOCTYPE documentname [
<!-- Elemente, Attribute und Entities hier einfügen -->
]>

<!DOCTYPE shop SYSTEM "shop.dtd">

  • SYSTEM bewirkt das der URI aufgelöst wird und die DTD gelesen wird

<!DOCTYPE shop PUBLIC "http://www.sonstwo.de/dtds/shop.dtd">

  • PUBLIC wird verwendet falls der Regelsatz für das Vokabular in der Anwendung fest verdrahtet ist und zur Laufzeit nicht gelesen wird (z.B. im Webbrowser).

<!DOCTYPE shop PUBLIC "universal/ecommerce/shop" "http://www.sonstwo.de/dtds/shop.dtd">

  • Kann der hinter dem Schlüsselwort PUBLIC angegebene URI nicht aufgelöst werden, so wird stattdessen auf das Dokument "shop.dtd" an der angegebenen Stelle verwiesen.

Definition von Auszeichnungen

  • beginnen mit "<!" und enden mit ">"
  • können mit folgenden Elementen durchgeführt werden:
    • <!ENTITY Name "Inhalt">
    • <!ELEMENT ElementName (Inhalt)>
    • <!ATTLIST ElementName AttributName>
    • <!NOTATION ... >

Entitities

  • müssen vor Verwendung definiert werden.
  • können Texte, Sonderzeichen oder Dateien beinhalten.
  • beginnen mit einem "&" und enden mit einem ";".

<!ENTITY MFG "Mit freundlichen Grüßen">
<!ENTITY Autor "Heinz Rudolf">

<!ENTITY copy "&#169;">
<!ENTITY regtm "&#174;">

<!ENTITY kapitel1 SYSTEM "kapitel1.xml">
<!ENTITY kapitel2 SYSTEM "kapitel2.xml">

Parameter Entities

  • müssen vor Verwendung definiert werden.
  • können in der DTD zu Ersetzungszwecken verwendet werden.
  • enthalten in der Definition ein freistehendes Prozentzeichen.
  • beginnen mit einem "%" und enden mit einem ";".

<!ENTITY % fullname "vname, nname">
<!ENTITY % location "str, plz, ort">
<!ENTITY % fulladdress "%fullname; , %location;">

<!ELEMENT daten (adresse*)>
<!ELEMENT adresse (%fulladdress;)>
<!ELEMENT vname (#PCDATA)>
<!ELEMENT nname (#PCDATA)>
<!ELEMENT str (#PCDATA)>
<!ELEMENT plz (#PCDATA)>
<!ELEMENT ort (#PCDATA)>

Elemente

  • können Text enthalten (#PCDATA) = Parsed Character DATA.
  • können leer sein EMPTY.
  • können Elemente enthalten (Element1, Element2, ...).
  • können beliebigen Inhalt enthalten ANY

Textelemente

  • werden bei der Definition mit (#PCDATA) gekennzeichnet.
  • dürfen eine beliebige Zeichenkette enthalten, jedoch keine weiteren Elemente.
  • sind zur Speicherung von Binärdaten ungeeignet.

<!ELEMENT vname (#PCDATA)>
<!ELEMENT nname (#PCDATA)>
<!ELEMENT str (#PCDATA)>
<!ELEMENT plz (#PCDATA)>
<!ELEMENT ort (#PCDATA)>

Leere Elemente

  • werden mit dem Schlüsselwort EMPTY gekennzeichnet.
  • werden im Body mit einem Slash vor dem hinteren Delimiter gekennzeichnet.
  • dürfen keinen Inhalt enthalten (weder Elemente noch Text).
  • Attribute sind erlaubt.

<!ELEMENT bild EMPTY>

<!-- Beispiel für die Anwendung im Body des Dokumentes: -->
<bild src="/images/foto001.png"/>

Elemente mit Elementinhalt

  • definieren die Anzahl und Reihenfolge der enthaltenen Elemente.
  • Die Anzahl der Elemente (Kardinalität) kann über Indikatoren (?, +, *) gesteuert werden.
    • Ist kein Indikator vorhanden, so muss das Element genau einmal vorkommen.
    • ? Element darf höchstens 1x vorkommen, kann jedoch auch entfallen.
    • + Element muss mindestens 1x vorkommen.
    • * Element kann fehlen oder beliebig oft vorkommen.
  • ein Komma "," zwischen Elementen bedeutet das die Elemente in dieser Reihenfolge vorkommen müssen.
  • ein Pipe-Zeichen "|" zwischen den Elementen bedeutet das nur eines der durch Pipe getrennten Elemente vorkommen darf. Es entspricht einem logischen Oder.
  • Mit Hilfe von Klammern können Elemente gruppiert werden. Elementgruppen können auch mit Indikatoren versehen werden, sowie mit Komma oder Pipe getrennt werden.

<!ELEMENT adressliste (adresse*)>
<!ELEMENT adresse (vname+, nname, str, plz, ort)>

<!ELEMENT parent (child1|child2|child3)*>
<!-- dies erlaubt Elemente in beliebiger Reihenfolge -->

Elemente mit beliebigem Inhalt

  • dürfen beliebige andere Elemente enthalten.
  • dürfen beliebige Zeichenketten enthalten.

<!ELEMENT daten ANY>

Element-Auswahl (Oder)

  • Einzelwerte werden durch das Pipe-Zeichen getrennt.
  • Es gilt entweder oder, nur eines der Elemente darf verwendet werden.
  • kann auch mit Klammern eingesetzt werden um UND und ODER zu mischen.
  • kann auch mit Text eingesetzt werden, allerdings ist dann in jedem Fall der Indikator "*" zu verwenden.

<!ELEMENT Maschine (Bezeichnung | Arbeitsbezeichnung)>

<!ELEMENT Maschine ((Bezeichnung | Arbeitsbezeichnung), Preis)>

<!ELEMENT Artikelkategorie (#PCDATA|nonfood|food)*>

Wurzelelement

  • darf nur einmal pro Dokument vorhanden sein.
  • kann beliebig viele weitere Elemente enthalten.

<!DOCTYPE document [
  <!ELEMENT daten (adresse*)>
  <!-- hier folgen weitere Definitionen -->
]>

Attribute

Attributvorgaben

  • Angabe optional #IMPLIED
  • Angabe verpflichtend #REQUIRED
  • Unveränderbar #FIXED
  • "Defaultwert", wird automatisch angenommen falls keine Angabe erfolgt

<!ATTLIST Element Attribute #IMPLIED>
<!ATTLIST Album Erscheinungsjahr #REQUIRED>
<!ATTLIST Preis Währung #FIXED "EUR">
<!ATTLIST Album Lieferbar "ja">

Attributtypen

  • CDATA = Character DATA (wird nicht geparst)
  • enum (Aufzählung)
  • ENTITY Einzelne Entität die in der DTD deklariert wird.
  • ENTITIES Liste von Entitäten die in der DTD deklariert werden.
  • ID eindeutiger Identifikator (Primärschlüssel)
  • IDREF einzelner Identifikator 1:1
  • IDREFS mehrere Identifikatoren 1:n
  • NMTOKEN / NMTOKENS XML-name token or list of these
  • NOTATION Notation which is defined in the DTD

CDATA-Attribute

  • enthalten Inhalt aus beliebigen erlaubten Zeichen, dazu gehören auch Interpunktions und Sonderzeichen.
  • dürfen kein Markup enthalten

<!ATTLIST element attribut CDATA #IMPLIED>

Aufzählungsattribute (enum)

Um nur bestimmte Vorgaben für die Attributwerte zu erlauben verwendet man das Aufzählungsattribut. Die Einzelwerte werden mit einem Pipezeichen getrennt.

<!ATTLIST element attribut (wert1|wert2|wert3) #IMPLIED>

ENTITY-Attribute

Bei diesem Attribut-Typ handelt es sich um eine einzelne Entität die in der DTD deklariert wird.

  • Sonderzeichen
  • Abkürzungen
  • Verweis auf Grafik oder sonstige Objekte

<!ATTLIST bild ziel ENTITY>

ENTITIES Liste von Entitäten die in der DTD deklariert werden.

ID-Attribute

Mit ID-Attributen können Sie Elementen eindeutige Namen zuweisen, über die Sie später auf eben diese Elemente verweisen können. Dieser eindeutige Name ist vergleichbar mit dem Primärschlüssel einer Datenbank.

<!ATTLIST element attribut ID>

<!ATTLIST cd id ID>

<cd id="cd0001"></cd>

IDREF-Attribute

IDREF-Attribute bilden das Gegenstück zu ID-Attributen, mit ihnen kann auf ID-Attribute verwiesen werden.

<?xml version="1.0"?>
...
<!ATTLIST kunde KuNr ID>
<!ATTLIST rechnung KuRef IDREF>
...
<daten>
   <kunden>
      <kunde KuNr="K4711"></kunde>
   </kunden>
   <rechnungen>
       <rechnung KuRef="K4711"></rechnung>
   </rechnungen>
</daten>

IDREFS-Attribute

Mit IDREFS können Sie auf mehr als ein Element verweisen. Dies ist z.B. sinnvoll wenn sie eine Bestellung haben, die mehrere Artikel umfasst. Die einzelnen Werte befinden sich innerhalb desselben Strings und werden mit einer Leertaste getrennt.

<!ATTLIST artikel artnr ID>
<!ATTLIST reposten anr IDREFS>
...
<daten>
   <artikelliste>
      <artikel artnr="a01"></artikel>
      <artikel artnr="a02"></artikel>
   </artikelliste>  
   <rechnungen>
      <rechnung>
         <reposten anr="a01 a02"></reposten
      </rechnung>
   </rechnungen>
</daten>

NMTOKEN-Attribute

Namenstoken-Attribute sind im wesentlichen CDATA-Attribute mit Einschränkungen was die möglichen Zeichen angeht. Es können Ziffern, Buchstaben, Punkt, Doppelpunkt und Unterstrich verwendet werden.

<!ATTLIST rechnung
   datum NMTOKEN #IMPLIED>

NMTOKENS

NOTATION-Attribute

Notationen werden benötigt um auf externe Informationen zugreifen zu können, zu deren Anzeige u.U. ein Fremdprogramm benötigt wird. In der DTD wird die Zuordnung eines Programms zu einem Namen vorgenommen.

<!NOTATION name SYSTEM "URI">

<!NOTATION pdf SYSTEM "c:\programme\adobe\acrobat\acrord32.exe">

Um diese Notationsdeklaration später einsetzen zu können, muss ein Attribut definiert werden, das auf den deklarierten Namen Bezug nimmt.

<!ATTLIST element typ NOTATION

Mit Hilfe dieser beiden Deklarationen ist es später im Body möglich ein entsprechendes externes Dokument mit dem Fremdprogramm anzeigen zu lassen. Im Beispiel fehlt allerdings noch ein Attribut das den URI und Dateinamen zu dem entsprechenden Dokument angibt.

<element typ="pdf"></element>