home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Validierung mit DTD

DTD steht für Document Type Definition und definiert die Grammatik eines XML Dokuments. Eine DTD kann innerhalb eines XML-Dokuments oder außerhalb definiert werden:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Evaluierung SYSTEM "http://www.johner.org/Evaluierung.dtd">
<Evaluierung>
<Dozent nummer="007">Johner</Dozent>
<Semester>SS05</Semester>
<Noten>
<Bewertung Frage="F1">Na also!</Bewertung>
<Bewertung Frage="F2">Spitze!</Bewertung>
<!-- Weitere Noten einfügen-->
<Kommentar/>
</Noten>
</Evaluierung>

 

Die DTD beschreibt die Bestandteile ("Information Items") des XML Dokuments:

     

  • Elemente
  • Attribute
  • Entities

ELEMENT

Jedes Element muss in der DTD definiert werden. Beispielsweise:

 

<!ELEMENT Bewertung (#PCDATA)>
<!ELEMENT Noten (Bewertung+, Kommentar)>

 

Bewertung entspricht dem Namen des Elements, in Klammer wird der Datentyp beschrieben

     

  • #PCDATA: Zeichenketten
  • EMPTY: Kein Inhalt
  • ANY: Beliebiger Inhalt
  • Kindelemente

Die Anzahl der Kindelemente kann ebenfalls spezifiziert werden:

     

  • *: 0 oder mehr Kindelemente
  • +: 1 oder mehr Kindelemente
  • ?: 0 oder 1 Kindelement

ATTRIBUTE

Für jedes Element, welches über Attribute verfügen soll, müssen diese Attribute definiert werden. Z.B.:

 

<ATTLIST Dozent
  nummer CDATA #REQUIRED
>

 

"Dozent" beschreibt hier das Element und "nummer" das (einzige) Attribut, welches das Element "Dozent" haben darf. Es wird spezifiziert:

     

  • Der Name der Attributs (hier "nummer")
  • Der Datentyp; man unterscheidet

       

    • CDATA: Characterdata (Zeichenkette)
    • Wertelisten: in Klammer gesetzten und durch | getrennte Optionen z.B.

      Frage (F1 | F2) #REQUIRED

    • Standardtypen ID bzw. IREF, z.B

      Matrikelnummer ID REQUIRED

      (erzwingt Einmaligkeit des Werts)

  • Auftretenshäufigkeit
    #IMPLIED: Attribut ist optional
    #REQUIRED: Attribut ist zwingend erforderlich

    ENTITY

    Entities können definiert und dann an verschiedenen Stellen des XML-Dokuments referenziert werden. Beispiel:

     

    <!ENTITY Hello "Dieser Text sagt Hallo">

     

    Referenziert man im XML Dokument diese Entity durch "&Hello;" ersetzt der Browser diese Referenz durch den definierten Text.

    Es gibt bereits vordefinierte Entities wie '&amp;' für das Kaufmannsund.

    Beispiel

    Die DTD für obiges XML-Dokument könnte wie folgt aussehen:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT Bewertung (#PCDATA)>
    <!ATTLIST Bewertung
     Frage (F1 | F2) #REQUIRED
    >
    <!ELEMENT Dozent (#PCDATA)>
    <!ATTLIST Dozent
     nummer CDATA #REQUIRED
    >
    <!ELEMENT Evaluierung (Dozent, Semester, Noten)>
    <!ELEMENT Kommentar EMPTY>
    <!ELEMENT Noten (Bewertung+, Kommentar)>
    <!ELEMENT Semester (#PCDATA)>
    <!ENTITY Hello "Nur ein kurzes Hallo!">