Zur Beschreibung eines Softwarepakets mit allen seinen Versionen habe ich eine eigene DTD entworfen. Da die Instanzen dieser DTD automatisch erzeugt und auch nur maschinell weiterverarbeitet werden müssen, musste ich keinen besonderen Wert auf gute Lesbarkeit legen. Die DTD ist in folgendem Listing zu sehen:
<!-- swpaket 1.0 Beschreibung der Software-Pakete der IRB-Installation Informatikrechner-Betriebsgruppe / Uni Dortmund Benutzung: <!DOCTYPE swpaket PUBLIC "-//UNIDO-IRB//DTD swpaket 1.0//DE" "swpaket.dtd"> --> <!-- ============================================================= --> <!-- Das Top-Level-Element --> <!-- ============================================================= --> <!ELEMENT swpaket ( instdir , beschreibung , size , def-version, new-version, kategorie+ , version+) > <!-- Name des Paketes --> <!ATTLIST swpaket name CDATA #REQUIRED > <!-- Installationsverzeichnis --> <!-- Paket: voller Pfad zum Installationsverzeichnis --> <!-- Version: relativer Pfad bzgl. Paketverzeichnis --> <!ELEMENT instdir (#PCDATA) > <!-- Beschreibung --> <!-- textuelle, kurze(!) Beschreibung des Paketes; Verweise auf andere Pakete mit <verweis paket="name">; Sprache: Deutsch; Kodierung: ISO-Latin-1 --> <!ELEMENT beschreibung (#PCDATA | verweis)* > <!-- Verweis auf andere Pakete, Name erforderlich --> <!ELEMENT verweis EMPTY > <!-- Name des Referenzpaketes --> <!ATTLIST verweis paket CDATA #REQUIRED > <!-- Dokumentation --> <!-- Angaben über die Art der Dokumentation; Sprache und Kodierung wie Beschreibung. --> <!ELEMENT doku (#PCDATA) > <!-- Art der Doku --> <!-- lokal - liegt als Datei im Filesystem --> <!-- url - liegt irgendwo im Netz --> <!-- catman - UNIX-Manualseiten --> <!-- GNU-Infoseiten --> <!ATTLIST doku art (lokal | url | catman | info) #REQUIRED ort CDATA #REQUIRED > <!-- Groesse eines Paketes oder einer Version; Einheit: KBytes --> <!ELEMENT size (#PCDATA) > <!-- Name der Default- und neusten Version --> <!ELEMENT def-version (#PCDATA) > <!ELEMENT new-version (#PCDATA) > <!-- Kategorie des Paketes; ggf. Subkategorien --> <!ELEMENT kategorie (#PCDATA , kategorie?) > <!-- ============================================================= --> <!-- Es folgt die Beschreibung einer PaketVERSION --> <!-- ============================================================= --> <!ELEMENT version ( instdir , neues-feature* , freigabedatum , doku+ , size , abhaengigkeiten*) > <!-- Angabe der Support-Kategorie und der Versionsnummer --> <!ATTLIST version support-kategorie (A|B) "B" nummer CDATA #REQUIRED> <!-- Angabe, von welchen Paketen das aktuelle Paket abhaengt --> <!ELEMENT abhaengigkeiten (paketbezeichner)+ > <!-- stichpunktartige Beschreibung eines neuen Features dieser Version --> <!ELEMENT neues-feature (#PCDATA) > <!-- Freigabedatum --> <!ELEMENT freigabedatum (tag, monat, jahr) > <!-- tag von 1 bis 31 --> <!ELEMENT tag (#PCDATA) > <!-- monat von 1 bis 12 --> <!ELEMENT monat (#PCDATA) > <!-- jahr vierstellig --> <!ELEMENT jahr (#PCDATA) > <!-- Bezeichner eines Paketes inklusive Version --> <!ELEMENT paketbezeichner (name , vnummer?) > <!-- Name eines Paketes --> <!ELEMENT name (#PCDATA) > <!-- Version eines Paketes --> <!ELEMENT vnummer (#PCDATA) >
Die Bedeutung der in der DTD deklarierten Elementtypen lässt sich am besten an einer Instanz erklären. Dazu dient in diesem Fall die folgende Paketbeschreibung des Softwarepakets tetex:
<!DOCTYPE swpaket PUBLIC "-//UNIDO-IRB//DTD swpaket 1.0//DE" "swpaket.dtd"> <swpaket name="tetex"> <instdir>/app/unido-inf/sun4_56/tetex</instdir> <beschreibung>TeTeX - LaTeX, TeX; Textsatzsystem von Donald Knuth/Leslie Lamport; Paket zusammengestellt von Thomas Esser (TE)</beschreibung> <size>110339</size> <def-version>1.0.6</def-version> <new-version>1.0.6</new-version> <kategorie>text<kategorie>verarbeitung</kategorie></kategorie> <version nummer="1.0.6" support-kategorie="B"> <instdir>1.0.6</instdir> <freigabedatum><tag>1</tag><monat>1</monat><jahr>1998</jahr></freigabedatum> <doku art="catman" ort="man">Manualpages</doku> <doku art="info" ort="info">GNU Info-Files</doku> <doku art="lokal" ort="texmf/doc/index.html">Die gesamte Dokumentation des Pakets in HTML</doku> <doku art="url" ort="http://www.tug.org/teTeX/">The teTeX Homepage</doku> <doku art="url" ort="http://www.tex.ac.uk/cgi-bin/texfaq2html?introduction=yes">TeX Frequently Asked Questions</doku> <doku art="url" ort="http://www.latex-project.org/">The LaTeX Homepage</doku> <size>109860</size> </version> <version nummer="0.9pre" support-kategorie="A"> <instdir>0.9pre</instdir> <freigabedatum><tag>1</tag><monat>7</monat><jahr>1997</jahr></freigabedatum> <doku art="catman" ort="man">Manualpages</doku> <doku art="info" ort="info">GNU Info-Files</doku> <doku art="url" ort="http://www.tug.org/teTeX/">The teTeX Homepage</doku> <doku art="url" ort="http://www.tex.ac.uk/cgi-bin/texfaq2html?introduction=yes">TeX Frequently Asked Questions</doku> <doku art="url" ort="http://www.latex-project.org/">The LaTeX homepage</doku> <size>53948</size> </version> </swpaket>
Der Name des Paketes ist als Attributwert des Wurzelelements angegeben. Die darin enthaltenen Tochterelemente enthalten der Reihe nach die folgenden Informationen:
Diese Informationen beziehen sich auf das gesamte Paket. Es schließt sich für jede installierte Version jeweils ein Block an, der innerhalb von <version>...</version> steht. Im vorliegenden Beispiel gibt es zwei Versionen mit den Nummern 1.0.6 und 0.9pre.
Jede Version liegt in einem eigenen Installationsverzeichnis, relativ zum oben genannten Verzeichnis. Nach dem Freigabedatum folgen Elemente, die Auskunft über die Dokumentation des Pakets geben, abgeschlossen durch die Angabe des Versionsumfangs in KBytes. Für die Dokumentation sind hier mehrere verschiedene Varianten zu sehen:
Aus diesem Datenbestand wird mit Hilfe eines DSSSL-Stylesheets on-the-fly eine HTML-Ansicht erzeugt (vgl. Abbildung 60).