Einführung in DTD-Design Teil I

DTD - Ein erstes Beispiel

XML ist, wie auch SGML eine Metasprache zur Generierung neuer Auszeichnungssprachen. Beim genauen Betrachten des HTML-Codes, kann man - jedenfalls in einigermaßen "sauberen" HTML-Dateien folgenden Eintrag finden:

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

Dieser Eintrag besagt, daß dieses HTML-File einer DTD, nämlich der DTD für HTML 4.0 gehorcht. Die Internetbrowser sind so konzipiert, daß sie so gut wie gar keine Validierung von HTML-Seiten gegen die DTDs vornehmen (sonst könnte man wahrscheinlich 50% aller Websites gar nicht öffnen..:-)).
HTML wurde aus dem Metasprachstandard SGML definiert, inzwischen gibt es aber auch eine Portierung der DTD auf die Regeln von XML, die unter dem Namen XHTML langsam aber stetig bekannter wird.

Wie aber sieht nun eigentlich so eine DTD aus:

<!ELEMENT PLAYLIST (PLAYLISTITEM)+>
<!ELEMENT PLAYLISTITEM (ARTIST, SONG, ALBUM)>
<!ELEMENT ARTIST   (#PCDATA)>
<!ELEMENT SONG     (#PCDATA)>
<!ELEMENT ALBUM    (#PCDATA)>

Hier werden insgesamt fünf Elemente in der DTD definiert.

Das Element PLAYLIST ist das Root-Element, folglich muß auch die DTD PLAYLIST heißen. Sie enthält mindestens ein Kindelement PLAYLISTITEM, welches wiederum aus den Elementen ARTIST, SONG und ALBUM besteht.
Dabei gilt: diese Elemente müssen aufeinander folgen und dürfen hier nur einmal erscheinen.
Die Elemente ARTIST, SONG, ALBUM bestehen aus #PCDATA, d.h. - der Einfachheit halber - aus Text oder auch aus "parseable character data", also Text der vom Parser erfaßt und ausgewertet wird. Dies wird im Zusammenhang mit sog. Entities interessant, aber dazu später mehr.

Eine entsprechende XML-Instanz zu dieser DTD sähe wie folgt aus:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE PLAYLIST SYSTEM "PLAYLIST.dtd">
<PLAYLIST>
    <PLAYLISTITEM>
         <ARTIST>Pixies</ARTIST> 
         <SONG>Monkey gone to heaven</SONG>
         <ALBUM>Doolittle</ALBUM>
    </PLAYLISTITEM>
</PLAYLIST>

Die Document Type Declaration

Um die DTD einzubinden, wird die Document Type Deklaration benötigt. In diesem Fall:


<!DOCTYPE PLAYLIST SYSTEM "PLAYLIST.dtd">

Hier wird auf die DTD PLAYLIST referenziert, die lokal auf dem jeweiligen Server liegt, hier direkt dort, wo auch die obige XML-Instanz zu finden ist.
Allerdings könnte hier auch ein Pfad in einem Dateisystem angegeben sein oder ein URL. Beim URL allerdings lautet die Deklaration ein wenig anders, hier wird der Bezeichner PUBLIC verwendet:


<!DOCTYPE PLAYLIST PUBLIC "http://www.jcpohl.de/tr/PLAYLIST.dtd">

Empty und Any-Elemente

Empty-Elemente, also leere Elemente, werden mit dem Schlüsselwort EMPTY deklariert:

<!ELEMENT STATION EMPTY>

in der XML-Instanz:

<STATION />

Diese Elemente bekommen oftmals erst durch das Hinzufügen von Attributen einen etwas tieferen Sinn, aber darüber mehr im nächsten Teil.

Ein Element mit dem Bezeichner ANY, dürfte überall und an jeder Stelle in der XML-Instanz vorkommen:


<!ELEMENT ICHGEHÖREÜBERALLUNDNIRGENDSHIN ANY>

 

Copyright & Kontakt
jcpohl@gmx.de
© www.jcpohl.de 1999/2000