DTD
DTD
Dokumenttyp-Definition
Ein XML-Dokument kann mit einer Dokumenttyp-Definition (kurz: DTD) versehen werden, muss aber nicht.
Diese beinhaltet ein Regelwerk welches die Tags, ihre Namen, Reihenfolge, Verschachtelung usw. definiert.
Man kann zum Beispiel bestimmen ob Elemente vorhanden sein müssen oder nicht, auch bei den Attributen kann festgelegt werden welche Werte zulässig sind. Wenn ein XML-Dokument eine DTD enthält und noch dazu korrekt geschrieben ist gilt es nicht mehr well-formed sondern valid (Gültig). Wir werden jetzt für unser regal.xml eine DTD schreiben aber erstmal müssen Grundvoraussetzungen definiert werden.
- Wurzelelement ist regal
- das Wurzelelement kann mehrere Elemente (buch) enthalten
- jedes buch hat nur ein Element titel
- es können mehrere Elemente Sprache vorhanden sein
- jedes buch hat ein Element verlag
- der Tag beschreibung muss nicht gegeben sein
DTD erstellen
Schreiben wir nun die DTD für die regal.xml. Also werden wir ersteinmal einen üblichen Editor aufmachen. Dann erstellen wir ein neues Dokument und fügen folgenden Text ein:
<!ELEMENT regal (buch+)> <!ELEMENT buch (titel,autor+,verlag, beschreibung?,sprache+)> <!ELEMENT titel (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT verlag (#PCDATA)> <!ELEMENT beschreibung (#PCDATA)> <!ELEMENT sprache (#PCDATA)>
Das Ganze wird jetzt als .dtd Datentyp abgespeichert.
Bedeutung der DTD
Jede Element-Definition beginnt mit <!ELEMENT…, und zwar in Großschreibung. In der ersten Zeile wird das Wurzelelement definiert, da dies nur einmal vorkommt werden keine weiteren Besonderheiten nötig sein.
Das in runde Klammern gefasste buch+ sagt einfach nur aus, dass mehrere buch-Elemente vorhanden sein dürfen. Wenn das + hinter den Klammern steht, bedeutet das die ganze Gruppe mehrmals vorhanden sein darf. Die zweite Zeile beschreibt, dass das Element buch weitere Elemente enthält. Diese Elemente sind durch Kommas getrennt, mit den Trennzeichen , oder | legt man die Reihenfolge fest. Dies wäre einmal die UND-Verknüpfung: titelundautorundverlag … Dagegen gibtes die ODER-Verknüpfung, hier setzt man den senkrechten Strich | und hinter die Klammer wird ein + geschrieben. Kommen wir nun zu den Elementen in der Klammer. titel und verlag kommen nur einmal vor deswegen braucht man diese nicht weiter zu markieren. Der Plus-Operator, hinter autor und sprache, sagt aus dass diese Elemente mehrfach auftauchen können.
Das ? hinter beschreibung zeigt an das das Element optional ist. Zum Schluss klären wir noch was es mit dem #PCDATA auf sich hat. #PCDATA bedeutet parsed character data, also analysierte Zeichenfolge aber es dürfen keine Multimedia-Inhalte enthalten sein.
Schlüsselwörter und Indikatoren
In der nachfolgenden Tabelle kann man noch mal alle Schlüsselwörter und ihre Bedeutung nachlesen.
| Symbol | Erklärung | Beispiel |
| () | Die runden Klammern gruppieren Untertags, sie enthalten Attributwerte u. Schlüsselwörter | <!ELEMENT buch (titel,autor+,verlag)> |
| , | UND-Verknüpfung: Das Komma steht für die genaue Anordnung der Elemente in der vorgegebenen Reihenfolge | (titel,autor,verlag) |
| | | ODER-Verknüpfung: Der senkrechte Strich heißt, dass nur eines der aufgereihten Elemente verwendet werden darf! Wenn zusätzlich ein Plus hinter der Klammer steht bedeutet das das mindestens eines der aufgeführten Elemente vorhanden sein muss. | |
| ohne | Wenn keine Markierung erfolgt, dann muss das Element einmal vorhanden sein. | (titel,autor,verlag) |
| + | Das +-Zeichen bedeutet, dass das Element einmal oder mehrmals vorhanden ist. | autor+ |
| ? | Das Fragezeichen bedeutet, dass das Element optional ist und wenn es verwendet wird darf es nur einmal erscheinen. | beschreibung? |
| * | Mit dem Sternchen markiert man ein Element, welches beliebig oft verwendet werden kann bleibt aber trotzdem optional. | stichworte* |
| #PCDATA | Diese Zeichenfolge steht für parsed character data, das Element kann also beliebige Zeichenfolge enthalten, aber keine Multimediainhalte. | <!ELEMENT sprache(#PCDATA)> |
Dokumenttyp-Deklaration
Wir haben unsere DTD fertiggestellt und nun müssen wir nur noch die Verbindung zum XML-Dokument herstellen. Hierzu verwenden wir einen Verweis (Dokumenttyp-Deklaration).
Dazu öffnen wir die regal.xml mit einem Editor und suchen die Stelle zwischen Prolog und Wurzelelement. Dort fügen wir
<!DOCTYPE regal SYSTEM "buch.dtd">
ein. Jede DT-Deklaration beginnt mit <!DOCTYPE danach wird das Wurzelelement angegeben, in unseren Fall ist es regal.Das Schlüsselwort SYSTEM gibt an, dass die DTD auf unserem System gültig ist und ist nich öffentlich. Zu guter letzt erfolgt in Anführungszeichen der Pfad unserer DTD.
Auf Gültigkeit prüfen
Um die Gültigkeit unseres Skriptes zu überprüfen laden wir erst unsere Daten auf einem Webserver unserer Wahl. Wir könnten natürlich auch einen Validator aus dem Netz laden aber es würde einfach zu lange dauern.
Wenn die Daten auf dem Webserver sind, suchen wir einfach einen XML-Validator, dort geben wir nun die Url zu unserem XML-Dokument ein und lassen das Ganze validieren.