| home | suche | kontakt/johner | institut | hinweise studierende | tech-docs | blog | 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 '&' 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!">
