SGML-Grundlagen

Andreas Baumert

Dokument-Typen

SGML geht davon aus, daß jedes Dokument einem bestimmten Typ von Dokumenten angehört. Es ist in der Sprache dieser Norm eine Instanz eines Dokumententyps. Wir wollen uns auf einer sehr einfachen Ebene die Grundlagen dieser Norm ansehen.

Wir stellen uns die Aufgabe, einen Dokumententyp Handzettel mit folgender Struktur zu definieren: Ein Titel soll als Überschrift die Aufmerksamkeit der Leser erregen. Dann folgt ein argumentativer Teil, der das Interesse weckt und schließlich den Wunsch auslöst, unseren Aufforderungen Folge zu leisten. Jeder Handzettel wird durch eine Aufforderung zur Aktion (Kauf oder Handlung) beendet. Ein Beispiel dafür ist:


Schluß mit dem Wildwuchs!

In der Vergangenheit haben es die Anwender den Herstellern überlassen, nach welchen Verfahren Daten gespeichert werden.
Das Resultat war oft, daß Daten nach relativ kurzer Zeit verlorengingen, wenn beispielsweise Hersteller vom Markt verschwunden waren.

Datenrettung

Bislang hatten Sie nur drei Möglichkeiten, dem drohenden Datenverlust entgegenzuwirken.
Sie konnten die Dokumente auf Papier oder Microfiche kopieren. Oder Sie konnten sie elektronisch auf ein neues System übertragen.
Viele Anwender haben auch eine Art "Betriebsmuseum" mit alten Rechnern am Leben erhalten. Diese Verfahren sind teuer und stehen in bizarrem Kontrast zu den Möglichkeiten, die die EDV heute bietet.

Investitionssicherung

Setzen Sie auf eine internationale Norm!
Nutzen auch Sie SGML!


In unserem Beispiel liegt dem Handzettel eine Struktur zugrunde, die die folgende Grafik zeigt:

Bitte laden Sie das Bild, weil sich der Text darauf bezieht!

Die Kreise symbolisieren Text. Das ist eigentlich nicht ganz korrekt, denn es ist nur für uns als menschliche Leser ein Text, was darin steht. Für den Rechner sind es einfach Zeichen, die in einer bestimmten Weise verarbeitet werden können: parsable character data (in SGML: #PCDATA).

Ein Handzettel besteht aus einem Titel, einem oder mehreren Abschnitten und einem Finale. Das Pluszeichen in "Abschnitt" soll bedeuten, daß diese Komponente sich beliebig oft wiederholen kann. Elemente mit einem Fragezeichen, müssen nicht vorhanden sein, alle anderen sind vorgeschrieben.

Ein Abschnitt besteht aus einer Überschrift und einem oder mehreren (Pluszeichen) Absätzen. Auch das Finale kann eine Überschrift und einen oder mehrere Absätze haben.

Im Prinzip haben wir mit dieser einfachen Grafik schon eine formale Definition der Voraussetzungen, die ein beliebiges Dokument erfüllen muß, um ein Handzettel zu sein. Sie läßt einige Ungereimtheiten zu und ist nicht ganz eindeutig, was an dieser Stelle nicht stören soll.

Eine Ursache für Doppeldeutigkeiten liegt an der Struktur des Elementes "Abschnitt". In dem Beispiel oben beginnt ein Abschnitt mit der Überschrift "Datenrettung". Der folgende Absatz ist auch in unserer Grafik klar als Absatz repräsentiert. Bei dem Absatz, der mit den Worten "Viele Anwender haben" beginnt, ist aber nicht eindeutig, ob dieser Absatz noch zu dem gleichen Abschnitt gehört oder schon den Beginn eines neuen Abschnitts markiert. Letzteres wäre möglich, weil in unserer Definition oben ein Abschnitt nicht unbedingt eine Überschrift haben muß.

Eine solche Unklarheit wäre für jede wirkliche Definition von Dokumententypen (in SGML: DTD Document Type Definition) das K.O.-Kriterium.

Für SGML ist die Art und Weise, wie eine solche DTD niedergeschrieben wird, einigermaßen festgelegt. Die Zeichnung oben liest sich in einer SGML-konformen Schreibweise etwa so:

<!ELEMENT hanzet - - (tit, absn+, finl) >
<!ELEMENT tit    - - (#PCDATA) >
<!ELEMENT absn   - - (aueb?, abz+) >
<!ELEMENT aueb   - - (#PCDATA) >
<!ELEMENT abz    - - (#PCDATA) >
<!ELEMENT finl   - - (fueb?, akn+) >
<!ELEMENT fueb   - - (#PCDATA) >
<!ELEMENT akn    - - (#PCDATA) >

Jede dieser Zeilen definiert ein Element der DTD, mit dem später Anwendungsprogramme umgehen können. Man hat sich angewöhnt, solche Zeilen als Deklarationen zu bezeichnen.

Eine Deklaration beginnt mit einer öffnenden spitzen Klammer und einem Ausrufezeichen <! und wird mit einer schließenden spitzen Klammer > abgeschlossen. Zu Beginn einer Deklaration wird aufgeführt, was eigentlich deklariert wird, in unserem Beispiel sind es die Elemente der DTD (ELEMENT); man spricht deswegen von einer Elementdeklaration.

Die zweite Komponente einer Elementdeklaration ist der Name des Elements. Die Namen in der Zeichnung stimmen mit den Namen in der Liste nicht mehr überein, "Handzettel" ist zu "hanzet" geworden, "Abschnitt" zu "absn" usw. Der erste Grund dafür ist, daß Namen von Elementen aus maximal 8 Zeichen bestehen dürfen. Der zweite Grund ist, daß man Dokumente wesentlich schlanker gestalten kann, wenn die Elementnamen nicht zu lang werden.

Nach dem Elementnamen stehen in unserem Beispiel zwei Bindestriche (die sogenannte Minimierung, es könnte auch der Buchstabe O sein), die in diesem Beitrag noch nicht von Bedeutung sind.

Die letzte Komponente jeder Elementdeklaration steht in runden Klammern und gibt an, woraus ein Element dieser DTD bestehen darf: hanzet (der Handzettel) besteht aus tit (dem Titel), absn (dem Abschnitt) und finl (dem Finale).

Die Kommata zwischen den drei Elementen haben in SGML eine besondere Bedeutung. Elemente, die mit einem Komma verbunden sind, müssen vorhanden sein. Würde in unserem Beispielhandzettel eines der drei Elemente fehlen, könnte dieses Dokument nicht korrekt verarbeitet werden. Das Pluszeichen und das Fragezeichen haben die gleiche Bedeutung wie in der Zeichnung: + bedeutet, daß ein Element mehrfach vorhanden sein kann, ? bedeutet, daß es nicht unbedingt vorhanden sein muß.

#PCDATA ist in unserem Beispiel die unterste Ebene, es sind die Zeichen, die vom Programm verarbeitet werden müssen.

Für die DTD fehlt eigentlich nur noch eine Komponente, um mit ihr zu arbeiten: der Kommentar. SGML ist eben eine Systematik, die man mit Programmiersprachen vergleichen kann. Umfangreiche DTD sind - vergleichbar einem umfangreichen Programmcode - nur noch schwer zu lesen und zu verstehen. Entwickler, die darauf Wert legen, daß ihre Arbeit auch von anderen verstanden wird, werden deswegen Kommentare in die DTD einbinden, die sogenannten Kommentardeklarationen.

Kommentardeklarationen sind nur zum besseren Verständnis für den menschlichen Betrachter einer DTD vorgesehen. Man erkennt sie an der öffnenden spitzen Klammer, mit Ausrufezeichen und zwei Bindestrichen:

<!-- Das ist ein Kommentar -->

Die vollständige DTD wird also mit Kommentaren und Elementen etwa wie folgt aussehen:

<!--      Handzettel, eine einfache DTD  -- >
<!--      Elementnamen:
          hanzet Handzettel
          tit    Titel
          absn   Abschnitt
          aueb   Abschnitt-Ueberschrift
          abz    Absatz
          finl   Finale
          fueb   Finale-Ueberschrift
          akn    Aufforderung zur Aktion -- >
<!--      Element  Minimierung  Inhalt -- >
<!--      =======  ===========  ======   -- >
<!ELEMENT hanzet       - -      (tit, absn+, finl)>
<!ELEMENT tit          - -      (#PCDATA) >
<!ELEMENT absn         - -      (aueb?, abz+) >
<!ELEMENT aueb         - -      (#PCDATA) >
<!ELEMENT abz          - -      (#PCDATA) >
<!ELEMENT finl         - -      (fueb?, akn+) >
<!ELEMENT fueb         - -      (#PCDATA) >
<!ELEMENT akn          - -      (#PCDATA) >

Für den Anfang erfüllt diese DTD ihre Funktion, sie ist unsere Definition des Dokumententyps "Handzettel".

Letzte Änderung: 16AUG12
www.recherche-und-text.de/wwwpubls/sgml05.html
Dieser Text ist urheberrechtlich geschützt.
Sonderdruck für die Veranstaltung „Neue Medien“ der tekom-Regionalgruppe Rhein-Main,
28.-29. Oktober 1995 in Bad König Momart / Odenwald.

baumert@recherche-und-text.de