XML-Validierung / DTD

DTD

DTD

➪ Eine DTD (document type definition) legt die zulässigen Namespaces, Elemente und Attribute eines XML-Dokuments fest und definiert so die Struktur aller XML-Dokumente, die gegen diese DTD gültig sein sollen.

Auf dieser Seite:

Eine DTD kann im XML-Dokument selber definiert werden, ebenso aber auch als externe Datei. Eine DTD ist selbst kein XML-Dokument, und es kann auch keine Datentypen für die Textinhalte (string, integer, double, dateTime, boolean, ...) definieren.

Ein Element kann als EMPTY, ANY oder mit einer Anzahl Kindknoten (#PCDATA), (child1,child2,...), (childx+), (childy*), (childz?), (child1|child2) deklariert werden. Parsed character data (PCDATA) werden geparst, im Gegensatz zu CDATA. PCDATA können Textinhalte, aber keine Kind-Elemente haben. Die Zeichen +, *, ?, | bedeuten:

? Das Element ist optional.
+ Das Element kann mehrfach (mindestens einmal) auftreten (mandantory).
* Das Element ist optional, kann aber auch mehrfach auftreten.
| Choice: Entweder dieses oder das andere Element kann auftreten.
Keine Angabe Das Element muss genau einmal auftreten.

Beispiele:


<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT Persons (Person*)>
<!ELEMENT Person (Name, Firstname+, Age?)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Firstname (#PCDATA)>
<!ELEMENT Age (#PCDATA)>

"Persons.dtd" definiert die Dokumentstruktur für das folgende Beispiel-XML-Dokument:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Persons SYSTEM "Persons.dtd">
<Persons>
  <Person>
    <Name>Ratlos</Name>
    <Firstname>Rosi</Firstname>
    <Firstname>Renate</Firstname>
    <Alter>55</Alter>
  </Person>
</Persons>

DTD im Attribute-Style

Auch Attribute können auf diese Weise definiert werden:


<!ATTLIST element-name attribute-name attribute-type default-value>

Zum Beispiel:


<!ATTLIST Buch genre (Sachbuch|Krimis) #REQUIRED> 
<!ATTLIST Buch format (Paperback|Hardcover) "Paperback"> 

wobei

#IMPLIED Das Attribut ist optional.
#REQUIRED Das Attribut ist erforderlich (mandantory).
#FIXED Der Vorgabewert ist konstant.

Beispiel:


<?xml encoding="UTF-8"?>
<!ELEMENT Persons (Person+)>
<!ELEMENT Person EMPTY>
<!ATTLIST Person
  Lastname CDATA #REQUIRED
  Firstname CDATA #IMPLIED>

DTD für Attributsstyle mit Namespaces


<?xml encoding="UTF-8"?>
<!ELEMENT ns1:Persons (wg:Person)>
<!ATTLIST ns1:Persons
  xmlns:ns1 CDATA #FIXED 'www.example.de'>
<!ELEMENT wg:Person EMPTY>
<!ATTLIST wg:Person
  xmlns:wg CDATA #FIXED 'www.wilfried-grupe.de'
  Lastname CDATA #REQUIRED
  Firstname CDATA #REQUIRED>

NOTATION

Daneben können in einer DTD ungeparste Entitäten definiert werden. Das folgende Beispiel verweist auf eine separate Binärdatei wetter.jpg, und NDATA bestimmt, dass das Format JPEG ist.


<!ENTITY weather-map SYSTEM "wetter.jpg" 
     PUBLIC "-//MEGACORP//WEATHER/" NDATA JPEG>

Da NDATA als "Nicht-XML" betrachtet werden kann, ist es erforderlich, auch JPEG in der DTD festzulegen. Diese URIs sind jedoch nicht standardisiert.


<!NOTATION JPEG SYSTEM "image/jpeg" > 
<!NOTATION GIF SYSTEM "image/gif" >

wg / 12. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/DTD.html