World Wide Web - Grundlagen und Technologie

Aufgabe 4 (XML Basics)

Erstellung einer DTD und entsprechender XML Dokumente

Abgabe bis 21.5.2001


Ziel dieser Aufgabe ist es, XML auf der grundlegendsten Ebene kennenzulernen. Das Design einer XML Document Type Definition (DTD) bestimmt massgeblich den Erfolg eines XML-basierten Projektes, so wie das Datenbankdesign auch der Kernpunkt jeder Datenbank-basierten Anwendung ist. Um die Theorie einer DTD (die ein Dokumenten-Schema beschreibt) in der Praxis umzusetzen (also Dokumente gemäss eines solchen Schemas zu erzeugen), müssen in dieser Aufgabe ausserdem mindestens zwei XML Dokumente geschrieben werden, die der selbstgeschriebenen DTD entsprechen.

Aufgabe Tips
1. Im ersten Teil der Aufgabe soll eine DTD für die eigenen Web-Seiten geschrieben werden. Diese DTD soll so flexibel sein, dass sie nicht nur dazu dienen kann, die in Aufgabe 1 geschriebene eigene Homepage in XML zu codieren, sondern zudem entweder
  • weiteren eigenen Seiten als DTD dienen kann,
  • als DTD für die Homepages anderer Studenten dienen kann (die ja durchaus anders gelagerte Interessen haben können, die sie aber auch mit Eurer DTD abdecken können müssen), oder
  • so grosse "Seiten" aufnehmen kann, dass aus der XML-basierten "Seite" nicht eine HTML-Seite, sondern eine komplette Web-Site generiert werden kann mit untereinander verlinkten HTML-Seiten.
Ziel des DTD-Designs muss also immer sein, eine DTD zu schreiben, die nicht nur für genau ein Dokument verwendet werden kann.
DTD-Design setzt (wie auch Datenbankdesign) voraus, dass man sich zuerst einmal Gedanken über die zu strukturierenden Daten macht. Ihr solltet also zuerst einmal entscheiden, welche der drei Möglichkeiten Ihr implementieren wollt. Danach solltet Ihr Euch überlegen, was allgemeine und wiederkehrende Strukturierungsmerkmale der Dokumente sind, für die Ihr die DTD schreibt. Danach müsst Ihr entscheiden, welche Elemente es geben soll, wie diese kombiniert werden dürfen, und welche Attribute welchen Typs diese Elemente tragen können, Als letzten Schritt müsst Ihr diese Design-Entscheidungen in XML DTD-Syntax bringen und damit weiterverarbeitbar für ein XML-System machen.

WICHTIG: Achtet besonders darauf, dass die XML DTD an inhaltlichen Kriterien orientiert ist, also nicht einfach eine Beschreibung der Präsentation eines Dokuments darstellt!

2. Damit Ihr nicht nur extrem simple DTDs erzeugt, muss Eure DTD mindestens den folgenden Anforderungen genügen:
  • Jeder der XML Occurrence Indicators (?, + und *) muss mindestens einmal (sinnvoll!) verwendet werden.
  • Es muss #REQUIRED und #IMPLIED Attribute geben.
  • Mindestens ein Element muss in verschiedenen Kontexten wiederverwendet werden (also im Content Model verschiedener Elemente verwendet werden).
  • In der DTD muss mindestens ein Parameter Entity (der "Makro-Mechanismus") verwendet werden.
Es gibt für alle diese Bedingungen sehr sinnvolle Anwendungen, und Ihr solltet darauf achten, diese auch zu finden in Eurer DTD. Die Occurrence Indicators kann man gut für komplexe Content Models verwenden, Attribute sind oftmals einfach zu unterscheiden zwischen #REQUIRED und #IMPLIED, wiederverwendete Elemente sind ein wichtiges Zeichen für gute Datenmodellierung, und Parameter Entities kann man gut verwenden, um redundante Definitionen bei Content Models oder Attributlisten zu vermeiden (generell solltet Ihr vermeiden, irgendwelche Teile deiner DTD mit Copy/Paste zu erzeugen, das ist fast nie eine gute Art der Modellierung).
3. Im dritten Schritt der Aufgabe geht es darum, zwei XML Dokumente (jeweils eine Instanz der DTD) zu schreiben. Dazu könnt Ihr z.B. Eure Homepage aus Aufgabe 1 nehmen, und den Inhalt dieser Seite von HTML nach XML transformieren, und zwar so, dass es XML gemäss der von Euch in Schritt 1 erzeugten DTD ist. In diesem Schritt wird (so ist zumindest die Idee...) klar, dass das automatische Erzeugen von XML aus HTML schwierig, oder in den meisten Fällen sogar unmöglich ist. Dies liegt daran, dass die XML DTD inhaltliche Aspekte beschreibt, die im HTML gar nicht repräsentiert werden konnten. Natürlich könnte man auch eine XML DTD schreiben, die kaum inhaltliche Aspekte transportieren kann (ein Beispiel dafür ist die XHTML DTD), aber in den meisten Fällen ist das nicht das Ziel einer XML DTD.

Die Abgabe der Übung besteht darin, die URI einer Seite, auf der eine kurze Erklärung der DTD steht, an den Betreuer (www-vl@dret.net) zu mailen. Die Seite muss zusätzlich Links auf die DTD und die beiden XML Dokumente (also z.B. Eure XML Homepage in zwei Varianten gemäss der DTD) enthalten. Die Überprüfung der Übung durch den Betreuer besteht darin, nachzuschauen, ob die Aufgabe korrekt gelöst wurde, d.h. DTD und XML syntaktisch korrekt sind, die DTD eine sinnvolle Gliederung ermöglicht und allgemein wiederverwendbar ist, und ob die XML Dokumente valide Instanzen der DTD sind.


Schritt 1 (Erstellen einer DTD)

Eine XML DTD ist ein normales ASCII-File, das meistens die Extension .dtd trägt. Im Unterschied zu XML Dokumenten, die die bekannte HTML-ähnliche Syntax haben, verwendet XML für die Beschreibung einer DTD jedoch eine andere Syntax. Diese Syntax ist als Grammatik im XML Standard definiert, dieser ist jedoch nicht besonders einfach les- oder als Referenz benutzbar. Das beste ist, mit einer einfachen Beispiel-DTD zu beginnen, die einige wenige Elemente enthält, und sich auf diese Weise mit der DTD-Syntax anzufreunden.

Wer interessiert daran ist, XML genau kennenzulernen, der sollte natürlich mal einen Blick in den Standard werfen, der auf der Web-Seite des World Wide Web Consortium zu finden ist. Und wem das auf Englisch zu mühsam ist, der kann sich die deutsche Übersetzung des Standards ansehen (aber Achtung: Die englische Version gibt es bereits in der "Second Edition", in der einige Fehler korrigiert wurden, die deutsche Übersetzung ist jedoch noch die erste Version des Standards).

Um zu Überprüfen, ob die DTD tatsächlich korrekt ist, empfiehlt es sich, die DTD zu validieren, also auf Korrektheit zu überprüfen. Dies kann entweder mit einem lokal zu installierenden Programm (auf dem Netz schwirren zahllose herum), oder mit einem über das Netz verfügbaren Validator-Tool geschehen. Welche Variante Ihr wählt, bleibt Eurem Geschmack überlassen, auf jeden Fall werden invalide DTDs von uns mehr oder minder kommentarlos abgelehnt werden.

In den meisten Fällen könnt Ihr dann übrigens das Validator-Tool, sei es nun lokal installiert oder über das Netz verfügbar, auch zum Validieren der XML Dokumente gegen die DTD verwenden, so dass Ihr bei Verwendung eines solchen Tools zwei Fliegen mit einer Klappe schlagen könnt. Ihr solltet Euch von solchen Tools aber auch nicht das Denken abnehmen lassen (zumindest nicht bei dieser Aufgabe), sondern selber ein bisschen Mühe darin investieren, sozusagen im Kopf zu validieren...


Schritt 2 (Erstellen einer komplexeren DTD)

Im ersten Schritt habt Ihr vielleicht eine DTD erzeugt, die sehr einfach ist, und nur eine grobe Strukturierung der von Euch gewählten Informationen ermöglicht. Das ist als Beginn des DTD-Schreibens auch gut so und sinnvoll im Sinne eines Top-Down Ansatzes.

Im zweiten Schritt ist es am einfachsten, wenn Ihr die DTD inkrementell verfeinert (so z.B. aus einem Name Element mit einem (#PCDATA) Content Model ein Name Element mit einem (Titel?, Vorname+, Nachname) Content Model macht, die Ihrerseits als Elemente definiert werden), und auf diese Weise einen feineren Zugriff auf die verschiedenen Inhalte der später zu erzeugenden Instanzen ermöglicht. Eine weitere Art der Verfeinerung könnte das Hinzufügen von Attributen sein (so könnte das Titel Element mit einem Attribut ergänzt werden, das angibt, ob der Titel beim Erzeugen von Inhalten verwendet werden soll).

Es ist oftmals eine Designentscheidung und keine Frage von objektiv "richtig" oder "falsch", in welcher Weise man Daten modelliert bzw. strukturiert. Ihr solltet beim Design Eurer DTD allerdings bedenken, dass Ihr in Aufgabe 7 die Inhalte Eurer XML Dokumente (oder zumindest wichtige Teile davon) nach XHTML transformieren sollt, und je besser und logischer Ihr Eure Daten jetzt strukturiert, desto einfacher wird Euch diese Aufgabe dann fallen.


Schritt 3 (Erstellen eines XML Dokuments gemäss DTD)

In diesem Schritt soll nun ein XML Dokument erstellt werden, das der in Schritt 1 erzeugten DTD entspricht. Dazu gibt es nun zwei grundlegende Möglichkeiten:

  1. Es wird ein normaler Text-Editor verwendet, in dem das XML Dokument erstellt wird. Wir empfehlen diesen Weg, weil man auf diese Weise am besten ein Gefühl für die Syntax von XML bekommt.
  2. Es kann ein XML-Editor verwendet werden, der aufgrund der DTD das erstellen einer Instanz gemäss der DTD ermöglicht. Der Vorteil von solch einem syntaxgesteuerten Editor ist, dass man gar kein falsches Dokument erzeugen kann. Der Nachteil ist, dass man es dann auch nie tut, und einem dadurch wahrscheinlich ein paar interessante Erkenntnisse verlorengehen...

Wie auch immer Ihr das XML erstellt, wie bei der DTD gilt auch hier, dass wir syntaktisch inkorrektes XML (sei es nun nicht einmal well-formed oder zwar well-formed aber nicht valid) relativ kommentarlos ablehnen werden, Tools zur Validierung stehen vielfältige zur Verfügung und sollten auch genutzt werden. Beispiele dafür sind das XML Validation Form der Brown University oder der XML well-formedness Checker and Validator. Falls Ihr weitere online Tools suchen oder etwas lokal installieren wollt, ist (wie immer) die entsprechende Cover Page ein exzellenter Startpunkt.


please send comments to www-vl@dret.net
last modification on Sunday, 03-Jun-2001 16:43:50 CEST
valid CSS!valid HTML 4.01!