SGML - Standard Generalized Markup Language

SGML wurde von Charles Goldfarb 1986 entwickelt und in der ISO Norm 8879 standardisiert. Der Grundgedanke von SGML ist, die logische Struktur eines Dokuments zu beschreiben. So besteht ein Dokument 'Buch' aus einzelnen Kapiteln und diese aus Abschnitten usw.. Ganz unten in dieser baumartigen Hierarchie steht der Text.

Das konkrete Layout eines Dokuments legt SGML nicht fest. Es wird lediglich die Struktur des Textes und sein Inhalt festgelegt, Details über Seitenfornat, Absatzabstände, Zeichensätze und ähnliche Layout-Informationen werden von SGML nicht festgelegt. Das Vorhandensein von Strukturinformationen macht SGML zu einem geeigneten Textaustauschformat und ermöglicht seine automatische Bearbeitung, insbesondere seine Ablage in Datenbanken.

Dokumente werden nicht direkt in SGML verfasst, sondern SGML fungiert als Meta-Sprache mit deren Hilfe man je nach Bedarf eine Dokumentenauszeichnungssprache spezifiziert, die die jeweils benötigten Strukturelemente enthält. Die Sprachdefinition wird in einer Document Type Definition (DTD) niedergelegt, die den syntaktisch korrekten Aufbau eines dieser speziellen DTD genügenden Dokuments beschreibt. HTML ist eine solche in SGML definierte Auszeichnungssprache. Die HTML-DTD stellt Konstrukte bereit, mit deren Hilfe ein Autor die Strukturelemente seines Dokuments festlegen kann (Klute, 1996).

SGML ist dabei flexibel genug, jede Art von Text strukturell zu beschreiben, sei es ein Formular, ein Buch, ein Memo, ein Brief, eine Enziklopädie oder ein Wörterbuch. Die einzelnen Strukturblöcke eines Dokuments werden im SGML Jargon Entitäten oder auch Objekt genannt. Jede Entität kann aus ein oder mehreren Elementen bestehen. Jedes der Elemente kann bestimmte Eigenschaften oder Attribute haben, die beschreiben, wie das Element verarbeitet werden kann. Mit Hilfe von SGML kann einer Maschine beschrieben werden, welche Beziehungen zwischen Entitäten, Elementen und Attributen herrschen und wie diese Dokumentkomponenten erkannt werden können. Hat man für einen bestimmten Dokumententyp eine DTD erarbeitet, kann diese in einen SGML fähigen Editor als Steuerdatei geladen werden. Die DTD befähigt den Editor beispielsweise zum syntaxgesteuerten Editieren, also ein Dokument das in der Sprache der DTD geschrieben wurde, syntaktisch zu analysieren (zu 'parsen') (Bryan, 1988). Beispiele dafür sind HTML Editoren, wie Softquads HoTMetaL oder MS-Frontpage. Diese sind wegen ihrer z.T. 'festverdrahteten' HTML-DTDs aber keine echten SGML-Editoren.

Zur Illustration des oben gesagten hier ein kurzes Beispiel das ebenfalls von Martin Bryan (Bryan, 1988) stammt:

Ein Memo sei aufgebaut wie folgt:

<to>All staff
<from>Martin Bryan
<date>5th November
<subject>Cats and Dogs
<text>Please remember to keep all cats and dogs indoors tonight.

Um wirklich jedes Textelement einwandfrei identifizieren zu können, werden Anfang und Ende jedes Elements des Textes markiert. Danach hat der Text folgendes Aussehen:

<memo><to>
All staff
</to><from>
Martin Bryan
</from><date>
5th November
</date><subject>
Cats and Dogs
</subject><text><para>
Please remember to keep all cats and dogs indoors tonight.
</para></text></memo> 

Um die erforderlichen Auszeichnungen in SGML zu definieren, bedarf es folgender SGML Zeilen (einer 'Memo-DTD'):

<!DOCTYPE memo [
<!ELEMENT memo O O ((to & from & date & subject?), text) >
<!ELEMENT text - O (para+) >
<!ELEMENT para O O (#PCDATA) >
<!ELEMENT (to, from, date, subject) - O (#PCDATA) >
]>

Erläuterung:

Dieses Modell erklärt dem SGML Parser, dass ein Memo aus einer Gruppe von Elementen <to>, <from>, <date> und optional <subject> besteht, dabei ist die Reihenfolge dieser Elemente egal. Diesen Elementen muss ein Text folgen. Das <text> Element des Memos besteht aus einem ('+' bedeutet mindestens einer) oder mehreren Absätzen . In diesem vereinfachten Beispiel ist <para> ein Blatt im DTD-Baum das 'parsed character data' (#PCDATA) enthalten kann, also Daten die vom Parser als Daten ohne weitere Auszeichnungsstrings angesehen wurden. Genauso sind die <to>, <from>, <date> und <subject> Auszeichnungen durch die obige Deklaration Blattknoten im DTD Baum.

Die Zeichen 'O' und '-' hinter dem Namen jedes Elements und seines Modells zeigen, wo Auszeichnungen weggelassen werden dürfen. Das erste Zeichen bedeutet, dass die Start Auszeichnung weggelassen werden kann '-', das zweite Zeichen bedeutet, dass das Ende Zeichen weggelassen werden kann.