Die Bestandteile von SGML

(SGML = Standard Generalized Markup Language)

Martin Volk

Universität Zürich (Computerlinguistik)

11. Oktober 1995


Das SGML-Dokument

Das Dokument bestehend aus dem Inhalt und den SGML-Marken (auch: Dokument-Instanz).

Die Dokument-Typ-Definition (DTD)

Die Festlegung der Dokumentstruktur.

Die SGML-Deklaration

Die Festlegung von Parametern für die Verarbeitung des Dokuments und der DTD (z.B. Länge der Markennamen).


SGML-Dokument

Ein SGML-Dokument besteht aus:

Beispiel:

<MEMO status="CONFIDEN">
<FROM>Prof. Hess</FROM>
<TO>Assistenten in Computerlinguistik</TO>
<SUBJECT>Motivation für das SGML-Seminar </SUBJECT>

<!-- Das ist ein Beispiel für einen Kommentar. -->
<BODY>
<P>In Unternehmen und Verwaltung fallen immer mehr 
Dokumente in elektronischer Form an. Um diesen 
Wissensbestand optimal einzusetzen, ist es notwendig, 
diese Dokumente in plattformunabh&auml;ngiger Weise
abzulegen und  systematisch zu verwalten. SGML, 
die Standard Generalized Markup Language, kann 
dabei eine zentrale Rolle &uuml;bernehmen.</P>
</MEMO>


Marken und Attribute im SGML-Dokument

Marken im SGML-Dokument gliedern den Text in eine hierarchische Struktur.

FORMAT: <Bezeichner (Attribute)> Inhalt </Bezeichner>

Beispiel: <FROM>Prof. Hess</FROM>

<FROM> 		Anfangsmarke des Elementes FROM (Anfangs-Tag)
Prof. Hess	Inhalt des Elementes
</FROM>		Endemarke des Elementes (Ende-Tag)

Attribute im SGML-Dokument

Beispiel: <MEMO Status = "CONFIDEN"><FROM>...</MEMO>

MEMO		Name eines Elementes 
Status		Name eines Attributs
CONFIDEN	Wert des Attributs in Hochkommas 

Über Attribute können auch Referenzen aufgebaut werden.

Beispiel für Referenzziel: <P IDNUM = "XYZ1">

Der Wert von IDNUM muß im Dokument eindeutig sein. Verwiesen wird z.B. mit dem Attribut POINTER, das den entsprechenden Wert haben muß:

Beispiel für Referenz: <PREF POINTER = "XYZ1">


Einheiten (Entities)

Einheiten dienen folgenden Zwecken:

Format

 &Name;       allgemeine Einheit
 %Name;       Parametereinheit

Allgemeine Einheiten (General entities)

Beispiel: &SGML; verweist auf die Definition der Entität SGML und wird durch den Parser aufgelöst, z.B. in "Standard Generalized Markup Language".

Zeicheneinheiten (Character entities)

Beispiel: &#91; verweist auf eine öffnende eckige Klammer, die auf Position 91 für die ISO-Norm festgelegt ist.

Parametereinheiten (Parameter entities)

Beispiel:%kap1.txt; verweist auf eine Datei mit diesem Namen.


Die Doctype-Deklaration

beinhaltet die DTD für das SGML-Dokument oder (typischer) einen Verweis auf eine Datei mit der entsprechenden DTD. Jedes SGML-Dokument beginnt mit einer solchen Doctype-Deklaration.

Beispiel für eine DTD in der Doctype-Deklaration:

<!DOCTYPE MEMO
 [<!ELEMENT MEMO - - ((TO & FROM), SUBJECT, BODY) >
  <!ELEMENT TO   - O (#PCDATA)                    >
  <!ELEMENT FROM - O (#PCDATA)                    >
  <!ELEMENT BODY - O (P)*                         >
  ...
]>

Beispiel für einen Verweis:

<!DOCTYPE MEMO SYSTEM "PFAD/DATEI.DTD">


DTD (Document Type Definition)

Eine DTD definiert u.a.:


Anlegen einer DTD

Alle Deklarationen beginnen mit <! und enden mit >.

1. Elementdeklarationen

Format: <! ELEMENT Bezeichner(gruppe) Verkürzung Beschreibung>

Beispiele:

 <! ELEMENT MEMO - - ((TO & FROM), SUBJECT, BODY)>
 <! ELEMENT BODY - O (P)*                                 >
bestehend aus
ELEMENT		Keyword für Deklarationstyp 

MEMO Bezeichner des Elements (Generic Identifier)

- - Weglaßbarkeit der Marken (je ein Symbol für Startmarke und Endemarke),

- steht für obligatorisch und O für omissible, weglaßbar.

((TO & FROM), BODY) Inhalt des Elements

Konnektoren und Wiederholungszeichen im Beschreibungsfeld

Die Bezeichner im Beschreibungsfeld werden mit folgenden Operatoren gruppiert:

   ,                  Sequenz-Konnektor
   &                  UND-Konnektor
   |                  ODER-Konnektor (exklusives ODER)
   *                  optional und wiederholbar 
   ?                  optional
   +                  obligatorisch und wiederholbar                         

Bezeichnergruppen (name groups)

fassen gleiche Definitionen zusammen. Die Bezeichner werden durch senkrechten Strich voneinander getrennt.
<!ELEMENT (TO | FROM)         - O   (#PCDATA) >

Inhalte der Beschreibungsfelder

ANY
Element enthält #PCDATA oder irgendein anderes in der DTD definiertes Element.
EMPTY
Element hat keinen Inhalt. (Sinnvoll, wenn nur Attributinformation festgehalten werden soll.)
#PCDATA
(Parsed character data) Element enthält Textzeichen, aber keine SGML-Zeichen wie < (Anfang einer Marke) oder & (Beginn eines Verweises auf eine Entität).
CDATA
(Character data) Element kann irgendein SGML-Zeichen enthalten. Alle Markenzeichen, wie z.B. < oder & werden ignoriert. Nur </ wird interpretiert.
RCDATA
(Replaceable character data) ähnlich wie CDATA, nur werden hierbei Verweise auf Entitäten erkannt.

Beispiel

<!DOCTYPE MEMO
 [<!ELEMENT MEMO - - ((TO & FROM), SUBJECT, BODY) >
  <!ELEMENT TO   - O (CDATA)                      >
  <!ELEMENT FROM - O (#PCDATA)                    >
  <!ELEMENT BODY - O (P)*                         >
  ...
]>
<MEMO>
<TO>Martin <Name>Volk </TO>
<FROM>Martin <Name>Volk </FROM>
...
</MEMO>

Vererbung und Ausschluss von Elementen

Vererbte (eingeschlossene) Unterelemente

Soll ein Element in allen Unterelementen möglich sein, so kann es in der Elementdeklaration durch +('Element') angegeben werden und wird somit auf alle Unterelemente vererbt.

Beispiel: <! ELEMENT MEMO - - ((TO & FROM), BODY) +(FOOTNOTE)>

Damit kann FOOTNOTE in allen Unterelementen von MEMO benutzt werden.

Ausgeschlossene Unterelemente

Soll ein Element in allen Unterelementen ausgeschlossen sein, so kann das in der Elementdeklaration durch -('Element') angegeben werden und wird somit auf alle Unterelemente ausgeschlossen.

Beispiel: <! ELEMENT FOOTNOTE - - (P+) -(FOOTNOTE)>

Damit wird verhindert, dass FOOTNOTE innerhalb von FOOTNOTE auftritt.


Anlegen einer DTD

2. Attributdeklarationen

Format <!ATTLIST Element(gruppe) Attributname Wertebereich Vorbelegung >

Beispiele:

<!ATTLIST  MEMO  STATUS  (CONFIDEN|PUBLIC)  PUBLIC >
<!ATTLIST  P     IDNUM   ID                 #IMPLIED >
<!ATTLIST  PREF  POINTER IDREF              #REQUIRED >

Mögliche Wertebereiche für Attribute:

Aufzählung   Bezeichner getrennt durch |
CDATA        irgendwelche Zeichen, einschließlich Marken
ENTITY	     Namen einer Einheit (z.B. eines deklarierten Teildokuments)
ID           (identifier) Zielpunkt einer Referenz
IDREF        Ausgangspunkt einer Referenz
NAME         irgendein Bezeichner
NMTOKEN	     (name token) irgendwelche Zeichen
NUMBER	     eine Ziffernfolge
NUTOKEN	     (number token) irgendwelche Zeichen jedoch 
             beginnend mit einer Ziffer  

VORSICHT: Attribute sind zu unterscheiden von SGML-FEATURES!!!

Mögliche Vorbelegungen für ein Attribut


Anlegen einer DTD

3. Entity-Deklarationen

Ein Entity (Einheit) ist ein benennbarer Teil eines markierten Dokuments (z.B. ein String oder eine Datei).

Format:

<!ENTITY Bezeichner Parameter>                allgemeine Einheit 
<!ENTITY % Bezeichner Parameter>              Parameter-Einheit 
<!ENTITY % Bezeichner SYSTEM Dateiangabe>     externe systembezogene Einheit 
<!ENTITY % Bezeichner PUBLIC Identifikator>   externe öffentliche Einheit 

Beispiele:

<!ENTITY  SGML  "Standard Generalized Markup Language" >
<!ENTITY  % Chap1  SYSTEM  "C:\KAPITEL1.SGM" >

Unterscheide:

Allgemeine Einheit
für eine reine Textersetzung

Parameter Einheit
für eine Ersetzung durch strukturierte Objekte

Externe systembezogene Einheit
Das Keyword SYSTEM weist den SGML-Parser an, daß es sich um eine externe Entity handelt. Eine Referenz &Chap1; im Dokument bindet dann die entsprechende Datei an dieser Stelle ein. Das Einbinden kann zur Modularisierung der DTD oder des SGML-Dokuments eingesetzt werden.

Externe öffentliche Einheit
Das Keyword PUBLIC weist den SGML-Parser an, daß es sich um eine externe öffentliche Einheit handelt. Damit wird z.B. auf standardisierte Zeichensätze verwiesen.

Umlaute

Für Umlaute und andere Sonderzeichen gibt es ISO-standardisierte Identifikatoren.

    ä   &auml;     
    ö   &ouml; 
    ü   &uuml;     
    Ä   &Auml; 
    Ö   &Ouml;  
    Ü   &Uuml;
    ß   &szlig;  

Spezielle Einheit

Um undeklarierte Entities zu vermeiden, kann man eine Default-Entity festlegen.

<!ENTITY #DEFAULT 'UNDEFINIERTE ENTITY'>


SGML-Deklaration

Format: <!SGML Angaben>

In der SGML Deklaration werden folgende lokale Einstellungen für ein SGML-System vorgenommen.

SGML-FEATURES

SGML-Features definieren die Zulässigkeit bestimmter SGML-Konstrukte.

Minimierung (Weglassbarkeit von Marken)

Omittag: Nur wenn OMITTAG YES gesetzt ist, darf die Minimierung von Marken (d.h. das Weglassen von Start- oder Endemarken) vorgenommen werden.

Beispiel: Wenn eine Startmarke verarbeitet wird, wird überprüft, ob die vorhergehende Marke geschlossen werden muss.

<FROM> Prof. Hess <TO>Assistenten <SUBJECT> ...
anstatt
<FROM> Prof. Hess </FROM><TO>Assistenten </TO><SUBJECT> ...

Shorttag: Nur wenn SHORTTAG YES gesetzt ist, darf die Minimierung innerhalb von Marken vorgenommen werden.

Beispiel: Bei einer leeren Ende-Marke wird angenommen, daß damit das zuletzt geöffnete Element geschlossen wird.

 
</> anstatt </Q>

Beispiel: Bei einem Attributwert ohne Attribut wird das entsprechende Attribut angenommen.

<Memo confiden> anstatt <Memo status= "confiden"> 

Shortref: behandelt die Umsetzung von Zeichen in SGML-Marken via Entities. Also z.B. die Umsetzung von " in ein <Q>. Genauer: ein Shortref-String wird auf eine Entity-Referenz abgebildet, die dann zu einer Marke erweitert wird.

<!SHORTREF MAP-TO &#SPACE;  MapEntity1>

Aufgaben eines SGML-Parsers

Prüfen der Übereinstimmung zwischen SGML-Dokument und zugehöriger DTD. Dabei:


Martin Volk; -Computerlinguistik-; Universität Zürich; 11. Oktober 1995