Die hier folgende DTD ist insofern — immer noch — eine Momentaufnahme, als Erweiterungen nach wie vor möglich sind. Zum Beispiel ist derzeit noch nicht enthalten, wer wen kennt oder gekannt hat, und es ist noch nicht geklärt, welches die beste Lösung für eine Reihe von Links ist (URL als leeres Element oder beliebig oft auftretend). Und die Frage, ob berühmte Zitate in dieser Anwendung einen Platz haben können, ist nicht einmal angedacht.
Aus Gründen der Einfachheit definiert die folgende
DTD für die Elemente comment und what gemischte Inhalte (mixed
content
). Sie können jeweils außer
#PCDATA auch die Elemente EM und BR enthalten, die am Ende der
DTD definiert sind. Sie erfüllen dieselbe
Funktion, die sie auch in HTML
haben. Diesbezüglich sei noch einmal daran erinnert, dass
#PCDATA — anders als in SGML —
am Anfang dieser Liste auftauchen muss.
Unschön an dieser DTD ist, wie anfangs
erwähnt, dass sie nicht restriktiv genug ist. Elemente wie
WORK und EVENT sollten nicht optional sein; sie
sind es hier lediglich auf Grund des lückenhaften
Datenbestandes. Wer XML-Daten from
scratch
anlegt, sollte sich in dieser Hinsicht gerade zu
Beginn so wenig Freiheit wie möglich erlauben.
<!ELEMENT lithist ( author+ ) > <!ELEMENT author ( name , vita , work* , url* , event* , comment* ) > <!-- Elemente der zweiten Hierarchiestufe --> <!ELEMENT name ( fname , lname , pseudonym? ) > <!ELEMENT vita ( born , died? ) > <!ELEMENT work ( title , year? ) > <!ELEMENT url ( #PCDATA ) > <!ELEMENT event ( what , where? , year, month? , day? ) > <!ELEMENT comment ( #PCDATA | em | br )* > <!-- Elemente der dritten Hierarchiestufe --> <!ELEMENT born ( year , month? , day? , where? ) > <!ELEMENT died ( year , month? , day? , where?, sreason? ) > <!ELEMENT where ( place , country ) > <!-- various leaves ... --> <!-- elements used in "name" --> <!ELEMENT fname ( #PCDATA ) > <!ELEMENT lname ( #PCDATA ) > <!ELEMENT pseudonym ( #PCDATA ) > <!-- elements used in "where" --> <!ELEMENT place ( #PCDATA ) > <!ELEMENT country ( #PCDATA ) > <!-- elements used in "born" and "died" sreason only in "died" (cause of death etc.) year used in "work" and "event" as well --> <!ELEMENT year ( #PCDATA ) > <!ELEMENT month ( #PCDATA ) > <!ELEMENT day ( #PCDATA ) > <!ELEMENT sreason ( #PCDATA ) > <!-- element used in "work" --> <!ELEMENT title ( #PCDATA ) > <!-- element used in "event" --> <!ELEMENT what ( #PCDATA | em | br )* > <!-- element used in "event" --> <!ELEMENT em ( #PCDATA ) > <!ELEMENT br EMPTY > <!-- attributes for various elements --> <!ATTLIST author id ID #REQUIRED firstentry CDATA #REQUIRED lastmod CDATA #REQUIRED > <!ATTLIST work genre (novel|novella|story|poem| drama|essay|biogr|sf |crime) #REQUIRED > <!ATTLIST lithead lang (de|en) "de" > <!ATTLIST introduction lang (de|en) "de" > <!ATTLIST comment lang (de|en) "de" > <!ATTLIST what cat CDATA #IMPLIED lang (de|en) "de" >