SGML besteht seit 1986 als internationaler ISO-Standard 8879 „Information Processing - Text and office systems - Standard Generalized Markup Language“ (SGML, [ISO86]). Die Grundidee stammt von Dr. Ch. F. Goldfarb (IBM), der 1969 die „Document Composition Facility General Markup Language“ (DCF GML) entwickelt hat. DCF GML ist eine Makrosprache für ein Formatiersystem und daher vergleichbar mit Formaten wie NROFF/TROFF ([Sch90]), TEX([Knu84]) oder LATEX([Lam86]).
DCF GML wurde später von dem Standardisierungsgremium ISO/IEC JTC1/SC18/WG8 zu SGML verallgemeinert und um die Möglichkeit zur Festlegung einer Grammatik für die jeweilige Dokumentstruktur erweitert. Dadurch unterscheidet sich SGML von jeder anderen Dokumentbeschreibungssprache. Die Grammatik für den Aufbau eines Dokuments nennt sich Document Type Definition (DTD) oder im Deutschen Dokumenttypfestlegung. Die deutschen SGML-Fachbegriffe sind in DIN 28879 ([DIN91]) übersetzt worden, werden aber hier nur der Vollständigkeit halber erwähnt, da sie eher ungebräuchlich sind. In der DTD werden der hierarchische Aufbau, sowie die Reihenfolge der Dokumentelemente festgelegt, durch sie werden die Tags für die daraus zu erstellenden Dokumente definiert. Den einzelnen Elementen können in der DTD Attribute zugeordnet werden, welche die Eigenschaften der Elemente beschreiben.
Im SGML-Standard ISO 8879 sind bestimmte Regeln zum Aufbau von DTD’s und von den aus DTD’s gebildeten Dokumenten festgeschrieben. Zudem werden in der „Reference Concrete Syntax“ (dt. Bezugslexikalik) die Zeichen der SGML-Syntax im Standard vorgegeben. Es ist aber durchaus möglich diese anzupassen, in einer sogenannten „Variant Concrete Syntax“ (dt. variante Lexikalik). Abbildung 2.1 zeigt die Zusammenhänge.
Durch die folgenden drei Punkte unterscheidet sich SGML von anderen Dokumentbeschreibungssprachen:
Beim deskriptiven Markup werden die Tags (der Markup Code) dazu benutzt, die Teile des Dokuments strukturell zu klassifizieren. Im Gegensatz zum prozeduralen Markup werden die an die Tags gebundenen Operationen streng vom Markup getrennt. Durch deskriptiven Markup wird jedem Teil des Dokuments lediglich eine Semantik zugeordnet, das prozedurale Markup ordnet jedem Tag eine festvorgegebene Operation zu. Der Vorteil deskriptiven Markups ist, daß mehrere verschiedene Operationen auf das gleiche Dokument aufsetzen können und die jeweils gewünschten Dokumentteile bearbeitet werden. Ein Programm kann ein Inhaltsverzeichnis des Dokuments erstellen, ein anderes das Dokument in einer bestimmten Schriftart formatieren. Beispiele für prozedurales Markup sind alle gängigen Textverarbeitungsdateiformate, wie Word for Windows oder Word-Perfect Dateien. Deskriptives Markup findet man in den verschiedenen Darstellungsweisen von HTML-Seiten (Hyper Text Markup Language, [Tol96]) durch unterschiedliche HTML-Betrachter (Web-Browser) wieder.
SGML ermöglicht es, Dokumente zu klassifizieren und stellt dazu das Konzept der Document Type Definition (DTD) zur Verfügung. Der Typ eines Dokuments wird dabei durch seine wesentlichen Abschnitte und ihre Struktur formell definiert. Die Kodierung erfolgt nach dem ASCII-Standard ([ANS86]). Ein Buch könnte z.B. aus einem Titel, einem Autor und mehreren Kapiteln aufgebaut sein, wobei jedes Kapitel mehrere Unterkapitel bzw. Abschnitte enthalten kann. Diese Klassifizierung ermöglicht es, Dokumente auf ihre Zugehörigkeit bzw. Korrektheit zu einer, durch eine DTD definierte Dokumentenklasse zu prüfen. Weiterhin ist es möglich Operationen bzw. Algorithmen zu entwerfen, die auf einer ganzen Klasse von Dokumenten operieren können. Da die Algorithmen Kenntnis von der genauen Struktur der Dokumente haben, können sie effektiver und effizienter realisiert werden.
Ein grundlegendes Ziel bei der Standardisierung von SGML war, daß SGML-Dokumente unabhängig von Hard- und Software auf andere Computersysteme portierbar sein sollen. Die Portierung wird erheblich dadurch vereinfacht, daß das SGML-Dokument die korrespondierende DTD enthalten kann und sich somit selbst beschreibt. Dokumentenbeschreibung und Dokument bilden dann eine funktionale Einheit. Um diese Unabhängigkeit auf der Ebene von einzelnen Zeichen und Zeichenketten zu erlangen, stellt SGML einen Ersetzungsmechanismus bereit.
Die durch diesen Mechanismus definierten Zeichenketten heißen Entitäten. Entitäten werden beispielsweise eingesetzt, um die Zeichensätze verschiedener Computersysteme aufeinander abzubilden oder um eine einheitliche Nomenklatur in einer Menge von Dokumenten zu gewährleisten. Eine vollständige Erläuterung der Merkmale von SGML findet sich in [Gol88].
Wie unter Kapitel 2.1 beschrieben fußt jedes SGML-Dokument auf einer DTD. Eine einfache DTD für das in Abbildung 2.2 dargestellte SGML-Dokument zeigt Abbildung 2.3.
|
Das reservierte Tag !ENTITY deklariert Entitäten. Entitäten stellen Konstanten dar, die innerhalb der Dokumentinstanz ersetzt werden (z.B. %DOCTYPE wird durch den String MEMO ersetzt).
Elemente werden durch das reservierte Tag !ELEMENT deklariert. Für jedes Element wird ein Name (z.B. MEMO), die Art der Begrenzung durch Start- und Endtags (z.B. - -, für beide Tags müssen vorkommen oder - 0, für das Starttag muß vorkommen, das Endtag kann vorkommen) und der Beschreibung des Inhalts des Tags (z.B. (#PCDATA) für Text) angegeben.
Das reservierte Tag !ATTLIST deklariert die Attribute, die ein Tag haben darf oder haben muß (z.B. hat das Tag MEMO ein Attribut STATUS, das den Wert CONFIDENTIAL oder PUBLIC annehmen kann, der Standardwert ist PUBLIC).
Eine umfassende Einführung in SGML würde den Rahmen dieser kurzen Einleitung sprengen, hierzu sei auf [Bry88] und [Rie95] verwiesen.