XML Validierung - wozu? / 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.

Eine DTD kann im XML-Dokument selber definiert werden, ebenso aber auch als externe Datei. Das Konzept ist ziemlich alt. 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,...), (childy+), (childy*), (childy?), (child1|child2) deklariert werden. Parsed character data (PCDATA) werden geparst, im Gegensatz zu CDATA. PCDATA können Textinhalte, aber eine Kindelemente 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 muß 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 Beispiels- 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>, z.B.:


<!ATTLIST BOOK genre (Science|Fiction) #REQUIRED> 
<!ATTLIST BOOK 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 daß 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 URI's sind jedoch nicht standardidiert.


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

wg / 22. September 2017



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







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