Autoren sind Menschen, das heißt, sie haben einen
Namen, sind geboren und eventuell schon gestorbenIn
einer Literaturgeschichte ist die Mehrheit der
Akteure notgedrungen nicht mehr am Leben., und es
gab/gibt wichtige Ereignisse in ihrem Leben. Anders als
normale
Menschen haben sie literarische Werke
veröffentlicht. Diese Basisdaten müssen als Elemente in den konkreten
Einträgen und als Elementtypen in der DTD enthalten sein. Darüber
hinaus erschien es sinnvoll, die Daten des ersten Eintrags und
der letzten Veränderung aufzunehmen sowie jedem Autor, gleich
welchen Geschlechts, eine eindeutige Kennung zu geben, die
nicht nur dem Nachnamen entspricht (bei den Manns und den
Brontës führt das sonst schnell zu Problemen).
Folgender Ausschnitt aus der DTD beschreibt die Struktur eines Autoreneintrags:
<!ELEMENT lithist ( author+ ) > <!ELEMENT author ( name , vita , work* , url* , event* , comment* ) > <!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)* > <!ELEMENT born ( year , month? , day? , where? ) > <!ELEMENT died ( year , month? , day? , where?, sreason? ) > <!ELEMENT where ( place , country ) >
Mindestens an einer Stelle enthält dieser
DTD-Ausschnitt eine Falle
. Wie das Kapitel 13 im Detail erläutert, sollte man bei der
Entwicklung einer DTD möglichst restriktiv
vorgehen. In diesem Sinne müsste hier work mit einem Plus-Zeichen statt des
Sterns versehen sein; damit auf jeden Fall etwas darin
steht. Leider lagen zum Zeitpunkt der
DTD-Erstellung nur für einige Autoren
Werkeinträge vor: eigentlich unangebrachte Großzügigkeit
fürs Design. Bei fertig vorliegenden Daten gilt dasselbe
für event und möglicherweise
auch für comment
Die Top-down-Beschreibung der Struktur von Einträgen ist nicht ganz vollständig; es fehlen Jahr, Monat und Tag sowie einige weitere Daten; sie alle sind schlicht als Parsed Character Data (#PCDATA) definiert, also in sich nicht strukturiert (siehe dazu die vollständigen Listings am Ende dieses Kapitels). Auch für diese so genannten Blätter, die Endelemente oder Terminale, muss es Elementtypdeklarationen geben.
Vieles von dem, was oben steht, ist wahrscheinlich selbsterklärend. Ein paar Anmerkungen sollen hier dennoch folgen. Auf der obersten Ebene besteht ein Autor aus seinem Namen, einer zwingend vorhandenen Lebensbeschreibung (siehe unten), einer optionalen Liste seiner Werke, einem ebenfalls optionalen URL, eventuellen Begebenheiten sowie beliebig vielen Kommentaren. Auch die in dieser Ebene enthaltenen Elemente sind bis auf den URL und den Kommentar strukturiert.
Dass ein Name aus Vor- und Nachnamen bestehen
muss
, heißt, dass für diejenigen, die über ihr Pseudonym
bekannt sind (Novalis, Lautréamont), auch der
eigentliche Name vorhanden sein mussEine Ausnahme ist
vielleicht B. Traven, wenn man voraussetzt, dass
seine Herkunft vielleicht doch unsicher ist.. Was
den Namen betrifft, war zu überlegen, ob es außer Vor- und
Nachnamen weitere geben sollte
Nordamerikaner etwa
hätten sicherlich einen middle name
eingeführt., aber die Entscheidung ist zu gunsten
der einfacheren Lösung gefallen.
Ein Kommentar soll sowohl aus Zeichendaten als auch aus den Elementen em und br bestehen können. In einem solchen Fall muss #PCDATA als erstes in der Reihe vorkommen.
Zu den Lebensdaten: Das einzige, das man über Autoren, die vor tausend Jahren gelebt haben, weiß, ist manchmal das Geburtsjahr. Nicht einmal der Ort ist in Einzelfällen bekannt. Daher musste vita eine flexible Struktur haben. Nur born ist zwingend enthalten — und dort auch nur das Jahr der Geburt —, alles andere ist optional. died darf verständlicherweise nur einmal vorkommen, event hingegen beliebig oft.
Natürlich wäre es sinnvoll, zu den in work enthaltenen Werken immer das Jahr der Veröffentlichung zu haben, aber wie im Falle des Geburtsorts ist dieses Datum nicht immer verfügbar. Ähnlich chaotisch sieht es bei den Begebenheiten (event) aus: Aufgenommen werden sollen hier nur solche Ereignisse, bei denen außer dem Vorfall mindestens das Jahr bekannt ist. Ort und genauere Datumsangaben sind wiederum optional.
Was bislang völlig außer acht geblieben ist, sind die oben genannten Daten der Kennzeichung (ID) eines Autors und der Ersteintrag sowie das Datum der letzten Veränderung. Diese Daten stecken in Attributen, die im letzten DTD-Ausschnitt fehlten. Hier sind ein paar:
<!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" >
Zunächst zum Element author. Die drei Attribute sind die
genannten: Kennung (id),
Ersteintrag (firstentry) und
letzte Änderung (lastmod)Denkbar wären weitere
Attribute wie lastmodby
(
zuletzt geändert von
) oder contrib für jemanden, der einen Eintrag
beigesteuert hat.. Aber auch andere Elemente haben
Attribute bekommen. Für jedes Werk muss eingetragen
sein (#REQUIRED), zu welchem Genre es gehört. Etwas
anders sieht es für das Element comment aus. Es ist dazu gedacht,
möglicherweise in mehreren Sprachen vorhanden zu sein, wobei
hier Deutsch (de) und Englisch
(en) vorgesehen sind und Deutsch
als Vorgabewert (Default) angenommen wird. Das sieht konkret
so aus:
<comment>Dies ist ein deutscher Kommentar.</comment> <comment lang="en">This, on the other hand, is in English.</comment>
Optional ist das Attribut cat (Kategorie) im Element what. Sein Zweck besteht darin, dort, wo
es sinnvoll ist, die Begebenheit zu klassifizieren. Für
Ausgaben wie zeige mir alle Nobelpreisträger
kann das
Attribut zu Rate gezogen werden. IMPLIED bedeutet,
dass es nicht vorhanden sein muss und kein Vorgabewert existiert.
Wann Daten in Attributen enthalten sein sollen oder
Elemente darstellen, ist schwierig abzuschätzen (siehe dazu
Kapitel 14). Eine — und sei
es kurze — Abhandlung zu diesem Thema erforderte hier zu
viel Platz. Eve Maler beschäftigt sich ein ganzes Buch lang
damit
[male96]
[male96]Developing SGML DTDs - From Text to Model to Markup
- From Text to Model to Markup, Eve Maler, Jeanne L. Andaloussi, Upper Saddle River/NJ, 1996, Prentice-Hall. Die oben angeführten Attribute
sind deshalb auf unterschiedliche Weise definiert, weil sie
nicht dieselbe Funktion erfüllen: Mal muss ein Wert vorhanden
sein sein (REQUIRED), mal nicht
(IMPLIED), mal kann er einer aus einer vorgegebenen
Liste sein (ein fehlendes Attribut erhält den
Default). id etwa hat keinen
vorgegebenen Wert, weil das keinen Sinn ergäbe — und
außerdem ist es verboten, weil der Wert eindeutig sein muss
(diese Bedingung kann ein Vorgabewert nicht erfüllen). Hier
soll der Name des Autors stehen, unter Umständen gefolgt vom
ersten Buchstaben des Vornamens (mannt
oder
brontec
), wobei zu beachten ist, dass in
SGML einige Zeichen innerhalb von Attributwerten
nicht erlaubt sind, weswegen dort Umlaute wegfallen müssen
(das ë
in Brontë wird zum e
). Da diese
Anwendung mit der SGML-Ausgabe von Clarks Jade
arbeitet, musste das auch hier sein.
Die beiden anderen Attribute sollen eine wie auch
immer geartete Datumsangabe enthalten. Im Gegensatz zu den Angaben
in author macht der Eintrag für
work Vorgaben darüber, was hier
zu stehen hat. Im Beispiel handelt es sich um eine begrenzte
Liste von Gattungen und Genres der Literatur, die sicherlich
ergänzungsbedürftig istWeder Briefroman noch Epos
tauchen derzeit hier auf.. Der entscheidende
Unterschied zu den drei folgenden Elementen ist, dass ein
Einzelwerk keinem Default zugeordnet ist, weil der in diesem
Fall nicht sinnvoll ist. Dagegen dürften die ersten Kommentare
etc. zunächst auf Deutsch abgefasst sein, was das
Eintragen eines Attributs überflüssig macht.
Um das Vorgehen etwas zu verallgemeinern: Die
Entscheidung darüber, ob ein Datum besser als Element oder als
Attribut Eingang ins Dokument finden soll, ist schwer zu
beantworten. Ein Fingerzeig ist, wenn es sich um eine Auswahl
aus einer begrenzten Menge von Werten handelt, wie in work das Attribut genre; hier bietet sich das Attribut
an. Auch Informationen wie die id dürften
nirgends als Element zu finden sein. Schwieriger ist die
Entscheidung etwa beim url:
könnte er nicht genausogut als Attribut von author dienen? Die Antwort ist ein
klares Jein
. Solange es immer höchstens einen
URL zu einem Autor gibt, kann ein Attribut
ausreichend seinWie in Kapitel 13 genauer nachzulesen ist, reicht es oft,
sich die Frage zu stellen: Ist es Inhalt oder ein Metadatum?
Im ersten Fall sollte es ein Element sein, im zweiten ein
Attribut.. Will man aber auf mehrere
URLs verweisen und damit die Möglichkeiten des
Linking in XML nutzen, sollte es auf jeden Fall
ein Element url sein (siehe
Kapitel 8).
Bei einer solchen Definition (die hier nicht vorkommt)
von url handelte es sich um eine
beliebig lange Liste von href-Elementen, die in der
DTD als leere (durch EMPTY) deklariert nur über ihre Attribute
Werte enthalten. Das heißt, dass sie einen Schrägstrich vor dem
schließenden >
haben müssen.
<ELEMENT url ( href )* > <ELEMENT href EMPTY > <ATTLIST href
Ein dieser DTD folgender Datensatz kann recht ausführlich sein, weil einige Elemente beliebig oft vorkommen können. Ein kurzes (was die Ausführung der Details angeht: unvollständiges) Beispiel soll genügen:
<!-- Thomas Mann --> <author ID="mannt" firstentry="1997/07/19" lastmod="1998/02/12"> <name> <fname>Thomas</fname> <lname>Mann</lname> </name> <vita> <born> <year>1875</year> <month>6</month> <day>6</day> <where> <place>Lübeck</place> <country>de</country></where> </born> <died><year>1955</year> <month>8</month> <day>12</day> <where><place>Kilchberg b. Zürich</place> <country>ch</country></where> </died> </vita> <work genre="novel"> <title>Buddenbrooks</title> <year>1901</year> </work> <work genre="novel"> <title>Der Zauberberg</title> <year>1924</year> </work> <work genre="novel"> <title>Doktor Faustus</title> <year>1947</year> </work> <event> <what>Italienaufenthalt mit Bruder Heinrich (bis 1897)</what> <year>1895</year> </event> <event> <what cat="marr">Heirat mit Katja Pringsheim</what> <year>1905</year> </event> <event> <what cat="nobel">Nobelpreis</what> <year>1929</year> </event> <event> <what>geht in die USA</what> <year>1939</year> </event> <comment>Eigentlich unnötig, aber dennoch: ein Erzähler, dessen Romane vor allem mit gutem Wein und Rauchwaren zu genießen sind. Besonders die Diskussionen zwischen Naphta und Settembrini im "Zauberberg" sind geradezu köstlich.</comment> </author>
Zugegeben, hier fehlen viele Werke und Daten, die Literaturwissenschaftler gern sehen würden, und die Kommentare sind eher als Scherz gedacht, aber das Beispiel zeigt, wie schnell ein solcher Eintrag Dimensionen annehmen kann, die leicht über die 5- oder 10-KByte-Grenze hinausgehen (hier handelt es sich lediglich um gute zwei KByte).