Im ersten Teil der Aufgabe erstellen Sie eine DTD und ein XML-Dokument nach einer gegebenen Struktur.
Erstellen Sie eine DTD für eine Softwarefirma, die ihre Projekte und Teams in XML abbildet.
firma
,
welches ein erforderliches Attribut name
hat und ein weiteres erforderliches Attribut nummer
,
für das nur Ihre Matrikelnummer mit dem Prefix „e“ als Wert gültig ist (also
z.B. e1234567).firma
hat ein oder mehrere Subelemente namens team
und beliebig viele (auch keine) Subelemente namens projekt
– in genau dieser Reihenfolge.team
hat ein erforderliches Attribut id
,
welches eine eindeutige ID für das Team enthält, und weiters zwei oder mehrere
Subelemente mitarbeiter
.mitarbeiter
hat ein erforderliches Attribut position
,
dass entweder den Wert „leiter“ oder „mitglied“ enthält.projekt
hat ein erforderliches Attribut team
,
dass als Wert eine id
eines team
-Elements enthält und ein optionales
Attribut arbeitsstunden
. Des
Weiteren hat es genau ein Subelement name
und ein optionales Subelement beschreibung
.beschreibung
hat gemischten Inhalt, der aus einer beliebigen Kombination aus schlagwort
-Elementen und Text besteht.Erstellen Sie weiters ein XML-Dokument, das der beschriebenen DTD entspricht und zumindest 3 Projekte enthält.
Das XML-Dokument soll die unterschiedlichen Möglichkeiten veranschaulichen und daher möglichst viele der beschriebenen Einschränkungen abdecken (optionale Elemente, verschiedene Werte für Attribute etc.).
Überprüfen Sie Ihre Lösung mit dem Befehl
xmllint --dtdvalid firma.dtd firma.xml
bzw. mit
xmllint --valid firma.xml
wenn Sie Ihre DTD direkt im XML-Dokument verknüpft haben.
firma.dtd
, firma.xml
Im zweiten Teil der Aufgabe erweitern Sie Ihre DTD und das XML-Dokument aus dem vorigen Beispiel um Namespaces.
Ändern Sie die DTD firma.dtd
so ab, dass alle Elemente im Namespace http://www.dbai.tuwien.ac.at/software/
mit dem Prefix soft
liegen.
Verwenden Sie für Ihre Lösung keinen Default-Namespace. Die Attribute sollen im
leeren Namespace liegen.
Überprüfen Sie Ihre Lösung mit dem Befehl
xmllint --dtdvalid firma-ns.dtd firma-ns.xml
firma-ns.dtd
, firma-ns.xml
Für den dritten Teil der Aufgabe erstellen Sie eine XML-Schema-Definition, die bis auf folgende Punkte der DTD mit Namespaces aus dem vorigen Beispiel entspricht:
arbeitsstunden
ist numerisch, größer 0 und kleiner-gleich 4000.Das Verwenden der Datentypen ID und IDREF ist in diesem Beispiel nicht erlaubt. In XML Schema gibt es eine elegantere Möglichkeit.
Tipp: Sehen Sie sich zu den Namespaces die Folien zu elementFormDefault und attributeFormDefault, sowie zu key/keyref an.
Prüfen Sie die Schema-Definition gegen das XML-Dokument aus dem vorigen Beispiel mit dem Befehl
xmllint --schema firma-ns.xsd firma-ns.xml
firma-ns.xsd
Erstellen Sie auf Basis des letzten Beispiels eine neue XML-Schema-Definition und eine neue XML-Datei mit folgender Änderung:
Verwenden Sie für das beschreibung
-Element den Typ aus folgender
XML-Schema-Definition: zusatz.xsd. Ändern Sie den in der Datei enthaltenen Typ BeschreibungTyp
so ab, dass es noch
ein zusätzliches, optionales Attribut format
enthält. Dieses soll vom Typ string
sein.
Tipp: Sehen Sie sich redefine
genauer an.
Prüfen Sie die Schema-Definition gegen das XML-Dokument aus dem vorigen Beispiel mit dem Befehl
xmllint --schema firma-zusatz.xsd firma-zusatz.xml
firma-zusatz.xsd
, firma-zusatz.xml