Kategorie-Archiv: SGML/XML

XML DTDs

DTD Alfred:

<!DOCTYPE Alfred[
<!ELEMENT Alfred (a, b, c)>
<!ELEMENT a (#PCDATA)>
<!ELEMENT b (#PCDATA)>
<!ELEMENT c (#PCDATA)>
]>

XML-Dokument:

<Alfred>
<a>text</a>
<b>text</b>
<c>text</c>
</Alfred>

Als JSON:

{
„Alfred“ : {
„a“ : „text“,
„b“ : „text“,
„c“ : „text“,
}
}

 

Erstellung einer DTD

Hier wird die Entwicklung der DTD in mehreren Schritten gezeigt. Eine umfangreiche DTD wird nicht in einem Zuge geschrieben. Bis zur Vollendung wird einiges verändert. Für die Fertigstellung folgender DTD waren nur wenige Tage notwendig. Sie enthält noch einige Fehler und ist unvollständig, aber für eine erste Testversion ist sie anwendbar.

Der DTD wird der Titel „mapue“ gegeben, dies ist das Wurzelelement. Innerhalb von „mapue“ sollen vorkommen: „vorwort“, „hinweise“, verzeichnis“, „teil“, „anhang“ und „sachv“. Dabei sollen „vorwort“ und „hinweise“ nur einmal erscheinen, „verzeichnis“, „anhang“ und „sachv“ sollen optional sein und „teil“ soll mindestens einmal vorkommen. Damit ergibt sich die erste Zeile der DTD wie folgt:

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

In einem „teil“ sollen sowohl PCDATA und „muster“ möglich sein:

<!ELEMENT teil - - (#PCDATA | muster)*>

Innerhalb eines Musters kommt zuerst die „musternummer“, dann das „stichwort“, es folgen die optionalen Elemente „untertitel“, „vorbem“, „erlaeut“ und dann der „mustertext“.

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, vorbem?, erlaeut?, mustertext)>

Es ergibt sich folgende DTD:

<!DOCTYPE mapue[

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

<!ELEMENT teil - - (#PCDATA | muster)*>

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, vorbem?, erlaeut?, mustertext)>

<!ELEMENT vorwort - - (#PCDATA)>

<!ELEMENT hinweise - - (#PCDATA)>

<!ELEMENT verzeichnis - - (#PCDATA)>

<!ELEMENT anhang - - (#PCDATA)>

<!ELEMENT sachv - - (#PCDATA)>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (#PCDATA)>

<!ELEMENT erlaeut - - (#PCDATA)>

<!ELEMENT mustertext - - (#PCDATA)>

]>

Die DTD „mapue“ in der Software Near & Far dargestellt.

Als nächsten wird ein Element „absatz“ definiert, das in verschiedenen Elementen erlaubt wird.

<!DOCTYPE mapue[

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, vorbem?, erlaeut?, mustertext)>

<!ELEMENT teil - - (muster* | absatz+)>

<!ELEMENT vorwort - - (absatz)+>

<!ELEMENT hinweise - - (absatz)+>

<!ELEMENT verzeichnis - - (absatz)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT sachv - - (absatz)+>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (absatz)+>

<!ELEMENT erlaeut - - (absatz)+>

<!ELEMENT mustertext - - (#PCDATA)>

<!ELEMENT absatz - - (#PCDATA)>

]>

Innerhalb von „absatz“ sollen neben Text die Elemente „betonung“, „fn“, „rn“ und „verweis“ möglich sein. Es wird ein Parameter-Entity „zeichen“ definiert.

<!DOCTYPE mapue[

<!--Zeichenebene-->

<!ENTITY % zeichen "betonung | fn | rn | verweis">

<!--Blockebene-->

<!ELEMENT absatz - - (#PCDATA | %zeichen)*>

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, vorbem?, erlaeut?)>

<!ELEMENT vorwort - - (absatz)+>

<!ELEMENT hinweise - - (absatz)+>

<!ELEMENT verzeichnis - - (absatz)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT teil - - (muster* | absatz+)>

<!ELEMENT sachv - - (absatz)+>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (absatz)+>

<!ELEMENT erlaeut - - (absatz)+>

<!ELEMENT betonung - - (#PCDATA)>

<!ELEMENT fn - (#PCDATA)>

<!ELEMENT rn - - (#PCDATA)>

<!ELEMENT verweis - - (#PCDATA)>

]>

Um Verweise zu ermöglichen werden bei verschiedenen Elementen ID-Attribute definiert und bei „verweis“ ein IDREF-Attribut. Das Attribut „typ“ soll anzeigen, ob auf „muster“, „rn“, „fn“ oder „teil“ verwiesen wird.

<!DOCTYPE mapue[

<!--Zeichenebene-->

<!ENTITY % zeichen "betonung | fn | rn | verweis">

<!--Blockebene-->

<!ELEMENT absatz - - (#PCDATA | %zeichen)*>

<!--Gliederungsebene-->

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, vorbem?, erlaeut?)>

<!ATTLIST muster

id ID #REQUIRED>

<!ELEMENT vorwort - - (absatz)+>

<!ELEMENT hinweise - - (absatz)+>

<!ELEMENT verzeichnis - - (absatz)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT teil - - (muster* | absatz+)>

<!ATTLIST teil

id ID #REQUIRED>

<!ELEMENT sachv - - (absatz)+>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (absatz)+>

<!ELEMENT erlaeut - - (absatz)+>

<!ELEMENT betonung - - (#PCDATA)>

<!ELEMENT fn - (#PCDATA)>

<!ATTLIST fn

id ID #REQUIRED>

<!ELEMENT rn - - (#PCDATA)>

<!ATTLIST rn

id ID #REQUIRED>

<!ELEMENT verweis - - (#PCDATA)>

<!ATTLIST verweis

typ (muster | rn | fn | teil) #REQUIRED

ziel IDREF #REQUIRED>

]>

Als nächstes werden Ändungen beim Element „teil“ vorgenommen. Es wird ein „teiltitel“ definiert. Verschiedene Elemente erhalten „zwischentitel“. Zum Ausrichten von Absätzen wird das Attribut „align“ (ausrichten) definiert.

<!DOCTYPE mapue[

<!--Zeichenebene-->

<!ENTITY % zeichen "betonung | fn | rn | verweis">

<!--Blockebene-->

<!ELEMENT absatz - - (#PCDATA | %zeichen)*>

<!ATTLIST absatz

align (left | center | right | block) left>

<!--Gliederungsebene-->

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, vorbem?, erlaeut?)>

<!ATTLIST muster

id ID #REQUIRED>

<!ELEMENT vorwort - - (absatz | zwischentitel)*>

<!ELEMENT hinweise - - (absatz | zwischentitel)*>

<!ELEMENT verzeichnis - - (absatz | zwischentitel)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT teil - - (teiltitel | muster* | zwischentitel | absatz)*>

<!ATTLIST teil

id ID #REQUIRED>

<!ELEMENT sachv - - (absatz | zwischentitel)*>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (absatz | zwischentitel)*>

<!ELEMENT erlaeut - - (absatz | zwischentitel)*>

<!ELEMENT betonung - - (#PCDATA)>

<!ELEMENT fn - (#PCDATA)>

<!ATTLIST fn

id ID #REQUIRED>

<!ELEMENT rn - - (#PCDATA)>

<!ATTLIST rn

id ID #REQUIRED>

<!ELEMENT verweis - - (#PCDATA)>

<!ATTLIST verweis

typ (muster | rn | fn | teil) #REQUIRED

ziel IDREF #REQUIRED>

<!ELEMENT teiltitel - - (#PCDATA)>

<!ELEMENT zwischentitel - - (#PCDATA)>

]>

Um in Betonungen Fußnoten zuzulassen, wird bei „betonung“ „%zeichen“ zugelassen. Damit wäre innerhalb von Betonung weitere Betonungen zugelassen. Um dies zu verhindern wird durch eine Exclusion „betonung“ herausgenommen. Gleiches gilt für „fn“ und „rn“.

<!DOCTYPE mapue[

<!--Zeichenebene-->

<!ENTITY % zeichen "betonung | fn | rn | verweis">

<!--Blockebene-->

<!ELEMENT absatz - - (#PCDATA | %zeichen)*>

<!ATTLIST absatz

align (left | center | right | block) left>

<!--Gliederungsebene-->

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, vorbem?, erlaeut?)>

<!ATTLIST muster

id ID #REQUIRED>

<!ELEMENT vorwort - - (absatz | zwischentitel)*>

<!ELEMENT hinweise - - (absatz | zwischentitel)*>

<!ELEMENT verzeichnis - - (absatz | zwischentitel)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT teil - - (teiltitel | muster* | zwischentitel | absatz)*>

<!ATTLIST teil

id ID #REQUIRED>

<!ELEMENT sachv - - (absatz | zwischentitel)*>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (absatz | zwischentitel)*>

<!ELEMENT erlaeut - - (absatz | zwischentitel)*>

<!ELEMENT betonung - - (#PCDATA | %zeichen)*-(betonung)>

<!ELEMENT fn - (#PCDATA | %zeichen)*-(fn)>

<!ATTLIST fn

id ID #REQUIRED>

<!ELEMENT rn - - (#PCDATA | %zeichen)-(rn)>

<!ATTLIST rn

id ID #REQUIRED>

<!ELEMENT verweis - - (#PCDATA)>

<!ATTLIST verweis

typ (muster | rn | fn | teil) #REQUIRED

ziel IDREF #REQUIRED>

<!ELEMENT teiltitel - - (#PCDATA)>

<!ELEMENT zwischentitel - - (#PCDATA)>

]>

In das Parameter-Entity „zeichen“ werden „name“ und „beachte“ neu aufgenommen. Für Absätze in Mustern wird das Element „m-absatz“ definiert. Nach dem „stichwort“ kommt stets „m-absatz“.

<!DOCTYPE mapue[

<!--Zeichenebene-->

<!ENTITY % zeichen "betonung | name | beachte | fn | rn | verweis">

<!--Blockebene-->

<!ELEMENT absatz - - (#PCDATA | %zeichen)*>

<!ATTLIST absatz

align (left | center | right | block) left>

<!--Gliederungsebene-->

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, m-absatz+, vorbem?, erlaeut?)>

<!ATTLIST muster

id ID #REQUIRED>

<!ELEMENT vorwort - - (absatz | zwischentitel)*>

<!ELEMENT hinweise - - (absatz | zwischentitel)*>

<!ELEMENT verzeichnis - - (absatz | zwischentitel)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT teil - - (teiltitel | muster* | zwischentitel | absatz)*>

<!ATTLIST teil

id ID #REQUIRED>

<!ELEMENT sachv - - (absatz | zwischentitel)*>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT m-absatz - - (#PCDATA | %zeichen)*>

<!ATTLIST m-absatz

align (left | center | right | block) left>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (absatz | zwischentitel)*>

<!ELEMENT erlaeut - - (absatz | zwischentitel)*>

<!ELEMENT betonung - - (#PCDATA | %zeichen)* -(betonung)>

<!ELEMENT name - - (#PCDATA | %zeichen)* -(name)>

<!ELEMENT beachte - - (#PCDATA | %zeichen)* -(beachte)>

<!ELEMENT fn - (#PCDATA | %zeichen)* -(fn)>

<!ATTLIST fn

id ID #REQUIRED>

<!ELEMENT rn - - (#PCDATA | %zeichen)-(rn)>

<!ATTLIST rn

id ID #REQUIRED>

<!ELEMENT verweis - - (#PCDATA)>

<!ATTLIST verweis

typ (muster | rn | fn | teil) #REQUIRED

ziel IDREF #REQUIRED>

<!ELEMENT teiltitel - - (#PCDATA)>

<!ELEMENT zwischentitel - - (#PCDATA)>

]>

Gesetzestexte werden in Absätzen in einer kleineren Schriftgröße dargestellt. Daher wird für „absatz“ ein Attribut „typ“ definiert, das die Werte „normal“ oder „gesetzestext“ annehmen kann. Der Defaultwert ist „normal“. In einem Muster wird das Wort „Bundesland“ unterstrichen. Da es kein Element für unterstreichen geben soll, wird „bundesland“ in das Parameter-Entity „zeichen“ aufgenommen.

<!DOCTYPE mapue[

<!--Zeichenebene-->

<!ENTITY % zeichen "betonung | name | beachte | bundesland | fn | rn | verweis">

<!--Blockebene-->

<!ELEMENT absatz - - (#PCDATA | %zeichen)*>

<!ATTLIST absatz

align (left | center | right | block) left

typ (normal | gesetzestext) normal>

<!--Gliederungsebene-->

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, m-absatz+, vorbem?, erlaeut?)>

<!ATTLIST muster

id ID #REQUIRED>

<!ELEMENT vorwort - - (absatz | zwischentitel)*>

<!ELEMENT hinweise - - (absatz | zwischentitel)*>

<!ELEMENT verzeichnis - - (absatz | zwischentitel)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT teil - - (teiltitel | muster* | zwischentitel | absatz)*>

<!ATTLIST teil

id ID #REQUIRED>

<!ELEMENT sachv - - (absatz | zwischentitel)*>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT m-absatz - - (#PCDATA | %zeichen)*>

<!ATTLIST m-absatz

align (left | center | right | block) left>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (absatz | zwischentitel)*>

<!ELEMENT erlaeut - - (absatz | zwischentitel)*>

<!ELEMENT betonung - - (#PCDATA | %zeichen)* -(betonung)>

<!ELEMENT name - - (#PCDATA | %zeichen)* -(name)>

<!ELEMENT beachte - - (#PCDATA | %zeichen)* -(beachte)>

<!--fuer Muster 13: Aerzte, Zahnaerzte, Tieraerzte II-->

<!ELEMENT bundesland - - (#PCDATA | %zeichen)* -(bundesland)>

<!ELEMENT fn - (#PCDATA | %zeichen)* -(fn)>

<!ATTLIST fn

id ID #REQUIRED>

<!ELEMENT rn - - (#PCDATA | %zeichen) -(rn)>

<!ATTLIST rn

id ID #REQUIRED>

<!ELEMENT verweis - - (#PCDATA)>

<!ATTLIST verweis

typ (muster | rn | fn | teil) #REQUIRED

ziel IDREF #REQUIRED>

<!ELEMENT teiltitel - - (#PCDATA)>

<!ELEMENT zwischentitel - - (#PCDATA)>

]>

In „vorwort“ wird „vorworttitel“ zugelassen, analog in „hinweise“ „hinweisetitel“. In den Mustern befinden sich Eintragfelder, die durch drei Punkte dargestellt werden. Das Element „eintragfeld“ wird in „m-absatz“ zugelassen. Die Attribute von „eintragfeld“ sind an die Attribute des HTML-Elementes „input“ angelehnt. Gliederungsziffern werden durch das Element „gl-ziff“ definiert, das in „% zeichen“ aufgenommen wird.

<!DOCTYPE mapue[

<!--Zeichenebene-->

<!ENTITY % zeichen "betonung | name | beachte | bundesland | fn | rn | verweis | gl-ziff">

<!--Blockebene-->

<!ELEMENT absatz - - (#PCDATA | %zeichen)*>

<!ATTLIST absatz

align (left | center | right | block) left

typ (normal | gesetzestext) normal>

<!--Gliederungsebene-->

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, m-absatz+, vorbem?, erlaeut?)>

<!ATTLIST muster

id ID #REQUIRED>

<!ELEMENT vorwort - - (vorworttitel | absatz | zwischentitel)*>

<!ELEMENT vorworttitel - - (#PCDATA)>

<!ELEMENT hinweise - - (hinweisetitel | absatz | zwischentitel)*>

<!ELEMENT hinweisetitel - - (#PCDATA)>

<!ELEMENT verzeichnis - - (absatz | zwischentitel)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT teil - - (teiltitel | muster* | zwischentitel | absatz)*>

<!ATTLIST teil

id ID #REQUIRED>

<!ELEMENT sachv - - (absatz | zwischentitel)*>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT m-absatz - - (#PCDATA | %zeichen | eintragfeld)*>

<!ATTLIST m-absatz

align (left | center | right | block) left>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (absatz | zwischentitel)*>

<!ELEMENT erlaeut - - (absatz | zwischentitel)*>

<!ELEMENT betonung - - (#PCDATA | %zeichen)* -(betonung)>

<!ELEMENT name - - (#PCDATA | %zeichen)* -(name)>

<!ELEMENT beachte - - (#PCDATA | %zeichen)* -(beachte)>

<!--fuer Muster 13: Aerzte, Zahnaerzte, Tieraerzte II-->

<!ELEMENT bundesland - - (#PCDATA | %zeichen)* -(bundesland)>

<!ELEMENT fn - (#PCDATA | %zeichen)*-(fn)>

<!ATTLIST fn

id ID #REQUIRED>

<!ELEMENT rn - - (#PCDATA | %zeichen)-(rn)>

<!ATTLIST rn

id ID #REQUIRED>

<!ELEMENT verweis - - (#PCDATA)>

<!ATTLIST verweis

typ (muster | rn | fn | teil) #REQUIRED

ziel IDREF #REQUIRED>

<!ELEMENT teiltitel - - (#PCDATA)>

<!ELEMENT zwischentitel - - (#PCDATA)>

<!ELEMENT eintragfeld - O EMPTY>

<!ATTLIST eintragfeld

wert CDATA #IMPLIED

name CDATA #IMPLIED

size CDATA #IMPLIED

maxlength NUMBER #IMPLIED>

<!ELEMENT gl-ziff - - (#PCDATA)>

]>

Innerhalb von „vorbem“ und „erlaeut“ werden auch Randnummern und Fußnoten benötigt, daher wird bei beiden Elementen „%zeichen“ zugelassen. In vielen Mustern wird der Text „In ein Formblatt (vgl.Hinweise Ziff. 5) ist einzusetzen:“ benötigt. Um diesen nicht stets neu tasten zu müssen, wird das Entitiy „form“ definiert.

<!DOCTYPE mapue[

<!--Zeichenebene-->

<!ENTITY % zeichen "betonung | name | beachte | bundesland | fn | rn | verweis | gl-ziff">

<!ENTITY form "In ein Formblatt (vgl.Hinweise Ziff. 5) ist einzusetzen:">

<!--Blockebene-->

<!ELEMENT absatz - - (#PCDATA | %zeichen)*>

<!ATTLIST absatz

align (left | center | right | block) left

typ (normal | gesetzestext) normal>

<!--Gliederungsebene-->

<!ELEMENT mapue - - (vorwort, hinweise, verzeichnis?, teil+, anhang?, sachv?)>

<!ELEMENT muster - - (musternummer, stichwort, untertitel?, m-absatz+, vorbem?, erlaeut?)>

<!ATTLIST muster

id ID #REQUIRED>

<!ELEMENT vorwort - - (vorworttitel | absatz | zwischentitel)*>

<!ELEMENT vorworttitel - - (#PCDATA)>

<!ELEMENT hinweise - - (hinweisetitel | absatz | zwischentitel)*>

<!ELEMENT hinweisetitel - - (#PCDATA)>

<!ELEMENT verzeichnis - - (absatz | zwischentitel)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT teil - - (teiltitel | muster* | zwischentitel | absatz)*>

<!ATTLIST teil

id ID #REQUIRED>

<!ELEMENT sachv - - (absatz | zwischentitel)*>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT m-absatz - - (#PCDATA | %zeichen | eintragfeld)*>

<!ATTLIST m-absatz

align (left | center | right | block) left>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (absatz | zwischentitel | %zeichen)*>

<!ELEMENT erlaeut - - (absatz | zwischentitel | %zeichen)*>

<!ELEMENT betonung - - (#PCDATA | %zeichen)* -(betonung)>

<!ELEMENT name - - (#PCDATA | %zeichen)* -(name)>

<!ELEMENT beachte - - (#PCDATA | %zeichen)* -(beachte)>

<!--fuer Muster 13: Aerzte, Zahnaerzte, Tieraerzte II-->

<!ELEMENT bundesland - - (#PCDATA | %zeichen)* -(bundesland)>

<!ELEMENT fn - (#PCDATA | %zeichen)* -(fn)>

<!ATTLIST fn

id ID #REQUIRED>

<!ELEMENT rn - - (#PCDATA | %zeichen) -(rn)>

<!ATTLIST rn

id ID #REQUIRED>

<!ELEMENT verweis - - (#PCDATA)>

<!ATTLIST verweis

typ (muster | rn | fn | teil) #REQUIRED

ziel IDREF #REQUIRED>

<!ELEMENT teiltitel - - (#PCDATA)>

<!ELEMENT zwischentitel - - (#PCDATA)>

<!ELEMENT eintragfeld - O EMPTY>

<!ATTLIST eintragfeld

wert CDATA #IMPLIED

name CDATA #IMPLIED

size CDATA #IMPLIED

maxlength NUMBER #IMPLIED>

<!ELEMENT gl-ziff - - (#PCDATA)>

]>

Als Zeichensätze sollen zugelassen werden „ISOlat1“, „ISOlat2“, „ISOnum“, „ISOpub“ und „ISOtech“. Die Document Type Declation soll nicht wie bisher vor der DTD stehen und die DTD nicht innerhalb des Declaration subset, sondern vor jedem Dokument. In die DTD wird ein Kommentar geschrieben, mit der Aussage, wie die DOCTYPE-Zeile vor dem Dokument zu schreiben ist.

<!--

PUBLIC "-//Sahler//DTD mapue//DE" "mapue.DTD"

-->

<!--ISO-Entities-- >

<!ENTITY % ISOlat1 PUBLIC

"ISO 8879-1986//ENTITIES Added Latin 1//EN">

%ISOlat1;

<!ENTITY % ISOlat2 PUBLIC

"ISO 8879-1986//ENTITIES Added Latin 2//EN">

%ISOlat2;

<!ENTITY % ISOnum PUBLIC

"ISO 8879-1986//ENTITIES Numeric and Special Graphic//EN">

%ISOnum;

<!ENTITY % ISOpub PUBLIC

"ISO 8879-1986//ENTITIES Publishing//EN">

%ISOpub;

<!ENTITY % ISOtech PUBLIC

"ISO 8879-1986//ENTITIES General Technical//EN">

%ISOtech;

<!--eigene Entities-->

<!--Zeichenebene-- >

<!ENTITY % zeichen "betonung | name | beachte | bundesland | fn | rn | verweis | gl-ziff">

<!ENTITY form "In ein Formblatt (vgl. Hinweise Ziff. 5) ist einzusetzen:">

<!--Blockebene-- >

<!ELEMENT absatz - - (#PCDATA | %zeichen)*>

<!ATTLIST absatz

align (left | center | right | block) left

typ (normal | gesetzestext) normal>

<!ELEMENT zwischentitel - - (#PCDATA)>

<!--Gliederungsebene-- >

<!ELEMENT mapue - - (vorwort,hinweise,verzeichnis?,teil+,anhang?,sachv?)>

<!ELEMENT muster - - (musternummer,stichwort,untertitel?,m-absatz+,vorbem?,erlaeut?)>

<!ATTLIST muster

id ID #REQUIRED>

<!ELEMENT vorwort - - (vorworttitel | absatz | zwischentitel)*>

<!ELEMENT vorworttitel - - (#PCDATA)>

<!ELEMENT hinweise - - (hinweisetitel | absatz | zwischentitel)*>

<!ELEMENT hinweisetitel - - (#PCDATA)>

<!ELEMENT verzeichnis - - (absatz | zwischentitel)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT teil - - (teiltitel | muster* | zwischentitel | absatz)*>

<!ATTLIST teil

id ID #REQUIRED>

<!ELEMENT sachv - - (absatz | zwischentitel)+>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT m-absatz - - (#PCDATA | %zeichen | eintragfeld)*>

<!ATTLIST m-absatz

align (left | center | right | block) left>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT vorbem - - (absatz | zwischentitel | %zeichen)*>

<!ELEMENT erlaeut - - (absatz | zwischentitel | %zeichen)*>

<!ELEMENT betonung - - (#PCDATA | %zeichen)*

-(betonung)>

<!ELEMENT name - - (#PCDATA | %zeichen)*

-(name)>

<!ELEMENT beachte - - (#PCDATA | %zeichen)*

-(beachte)>

<!--f&uuml;r Muster 13: &Auml;rzte, Zahn&auml;rzte, Tier&auml;rzte II-->

<!ELEMENT bundesland - - (#PCDATA | %zeichen)*

-(bundesland)>

<!ELEMENT fn - - (#PCDATA | %zeichen)*

-(fn)>

<!ATTLIST fn

id ID #REQUIRED>

<!ELEMENT rn - - (#PCDATA | %zeichen)

-(rn)>

<!ATTLIST rn

id ID #REQUIRED>

<!ELEMENT verweis - - (#PCDATA)>

<!ATTLIST verweis typ (muster | rn | fn | teil) #REQUIRED

ziel IDREF #REQUIRED >

<!ELEMENT teiltitel - - (#PCDATA)>

<!ELEMENT eintragfeld - O EMPTY>

<!ATTLIST eintragfeld

wert CDATA #IMPLIED

name CDATA #IMPLIED

size CDATA #IMPLIED

maxlength NUMBER #IMPLIED>

<!ELEMENT gl-ziff - - (#PCDATA)>

Als letztes wird die DTD nach Entities, Elementen und Attributen getrennt geschrieben. Elemente und Attribute werden alphabetisch sortiert.

<!--********************************************************************************-->

<!--

PUBLIC "-//Sahler//DTD mapue//DE" "mapue.DTD"

-->

<!--********************************************************************************-->

<!--********************************************************************************-->

<!--ISO-Entities -->

<!--********************************************************************************-->

<!ENTITY % ISOlat1 PUBLIC

"ISO 8879-1986//ENTITIES Added Latin 1//EN">

%ISOlat1;

<!ENTITY % ISOlat2 PUBLIC

"ISO 8879-1986//ENTITIES Added Latin 2//EN">

%ISOlat2;

<!ENTITY % ISOnum PUBLIC

"ISO 8879-1986//ENTITIES Numeric and Special Graphic//EN">

%ISOnum;

<!ENTITY % ISOpub PUBLIC

"ISO 8879-1986//ENTITIES Publishing//EN">

%ISOpub;

<!ENTITY % ISOtech PUBLIC

"ISO 8879-1986//ENTITIES General Technical//EN">

%ISOtech;

<!--********************************************************************************-->

<!--eigene Entities -->

<!--********************************************************************************-->

<!ENTITY % zeichen "betonung | name | beachte | bundesland | fn | rn | verweis | gl-ziff">

<!ENTITY form "In ein Formblatt (vgl. Hinweise Ziff. 5) ist einzusetzen:">

<!--********************************************************************************-->

<!--ELEMENT DECLARATION -->

<!--********************************************************************************-->

<!ELEMENT absatz - - (#PCDATA | %zeichen)*>

<!ELEMENT anhang - - (absatz)+>

<!ELEMENT beachte - - (#PCDATA | %zeichen)* -(beachte)>

<!ELEMENT betonung - - (#PCDATA | %zeichen)* -(betonung)>

<!ELEMENT bundesland - - (#PCDATA | %zeichen)* -(bundesland)>

<!ELEMENT eintragfeld - O EMPTY>

<!ELEMENT erlaeut - - (absatz | zwischentitel | %zeichen)*>

<!ELEMENT fn - - (#PCDATA | %zeichen)* -(fn)>

<!ELEMENT gl-ziff - - (#PCDATA)>

<!ELEMENT hinweise - - (hinweisetitel | absatz | zwischentitel)*>

<!ELEMENT hinweisetitel - - (#PCDATA)>

<!ELEMENT m-absatz - - (#PCDATA | %zeichen | eintragfeld)*>

<!ELEMENT mapue - - (vorwort,hinweise,verzeichnis?,teil+,anhang?,sachv?)>

<!ELEMENT muster - - (musternummer,stichwort,untertitel?,m-absatz+,vorbem?,erlaeut?)>

<!ELEMENT musternummer - - (#PCDATA)>

<!ELEMENT name - - (#PCDATA | %zeichen)* -(name)>

<!ELEMENT rn - - (#PCDATA | %zeichen) -(rn)>

<!ELEMENT sachv - - (absatz | zwischentitel)+>

<!ELEMENT stichwort - - (#PCDATA)>

<!ELEMENT teil - - (teiltitel | muster* | zwischentitel | absatz)*>

<!ELEMENT teiltitel - - (#PCDATA)>

<!ELEMENT untertitel - - (#PCDATA)>

<!ELEMENT verweis - - (#PCDATA)>

<!ELEMENT verzeichnis - - (absatz | zwischentitel)*>

<!ELEMENT vorbem - - (absatz | zwischentitel | %zeichen)*>

<!ELEMENT vorwort - - (vorworttitel | absatz | zwischentitel)*>

<!ELEMENT vorworttitel - - (#PCDATA)>

<!ELEMENT zwischentitel - - (#PCDATA)>

<!--********************************************************************************-->

<!--ATTRIBUTE DEFINITION LISTS -->

<!--********************************************************************************-->

<!ATTLIST absatz

align (left | center | right | block) left

typ (normal | gesetzestext) normal

>

<!ATTLIST eintragfeld

wert CDATA #IMPLIED

name CDATA #IMPLIED

size CDATA #IMPLIED

maxlength NUMBER #IMPLIED

>

<!ATTLIST fn

id ID #REQUIRED

>

<!ATTLIST m-absatz

align (left | center | right | block) left

>

<!ATTLIST muster

id ID #REQUIRED

>

<!ATTLIST rn

id ID #REQUIRED

>

<!ATTLIST teil

id ID #REQUIRED

>

<!ATTLIST verweis typ (muster | rn | fn | teil) #REQUIRED

ziel IDREF #REQUIRED

>

Musterdokument (Ausschnitt aus der Darstellung in Corel WordPerfect 7):

SGML DTDs

Ein vollständiges SGML Dokument besteht aus drei Bestandteilen:

  • der SGML Deklaration,
  • dem Prolog,
  • dem eigentlichen Dokument.

Mit der SGML-Deklaration werden wir uns zum jetzigen Zeitpunkt nicht näher beschäftigen, es sei nur erwähnt, dass in ihr die Regeln von SGML hinterlegt sind. Der Prolog enthält die Document Type Declaration (DOCTYPE) und diese wiederum kann die Document Type Definition (DTD) enthalten. Im Dokument werden die Tags verwendet, die in der DTD definiert worden sind.

Document Type Declaration

Die Document Type Declaration (auch: DOCTYPE declaration genannt) darf nicht mit der Document Type Definition verwechselt werden. In der Document Type Declaration wird das Wurzelelement (Name der DTD) und die entsprechende DTD angegeben. Dabei gibt es erstens die Möglichkeit, daß die DTD innerhalb des ‚Declaration subset‘ steht, der durch eckige Klammern begrenzt wird.

<!DOCTYPE Wurzelelement [Declaration subset]>

Bei der folgenden ersten Möglichkeit ist „Artikel“ das Wurzelelement. Die DTD steht zwischen eckigen Klammern, also im Declaration subset.

  1. Möglichkeit
<!DOCTYPE Artikel[

Inhalt der DTD

]>

Bei der zweiten Möglichkeit befindet sich die DTD nicht im Declaration subset, sondern in einer extra Datei. Vor der DTD befindet sich ein Kommentar, der angibt wie die Document Type Deklaration im Dokument zu schreiben ist. Nach DOCTYPE wird hier der Name des Wurzelelementes geschrieben, dann folgt die Angabe PUBLIC die einen ‚Public identifier‘ kennzeichnet. Bei einem Public identifier wird im Gegensatz zu einem ‚System identifier‘ kein Pfad- oder Dateiname angegeben, sondern ein öffentlicher Name, der von einem bestimmten Pfad auf einem Rechner unabhängig ist. Bei dem folgenden Ausdruck innerhalb der Anführungszeichen gilt die folgende Syntax:

„Zeichen für angemeldete oder nicht angemeldete DTD//Besitzer der DTD//Typ (Art des Objektes, hier DTD) Spezifikation//Sprache“

Zeichen für angemeldete DTD ist ein +

Zeichen für nicht angemeldete DTD ist ein –

Besitzer der DTD: Buergerblatt

Sprache: DE (für deutsch)

  1. Möglichkeit
DTD

<!--Artikel PUBLIC "-//Buergerblatt//DTD Artikel//DE"-->

Inhalt der DTD

SGML-Dokument

<!DOCTYPE Artikel PUBLIC "-//Buergerblatt//DTD Artikel//DE" "Artikel.DTD">
<Ueberschrift>Allianz: Freie Bahn auf dem Weg zur Nummer eins</Ueberschrift><Ort>München</Ort> <Inhalt>Dem Aufstieg des Allianz-Konzers zur weltweit größten Versicherung scheint nichts mehr im Wege zu stehen.</Inhalt><Verweis>(Wirtschaft)</Verweis>

Ebenfalls würde gelten (hier wird ein System identifier verwendet):

<!DOCTYPE Artikel SYSTEM "C:\eigene Dateien\SGML\Artikel.DTD"> . . .

bzw.

<!DOCTYPE Artikel SYSTEM "Artikel.DTD" [ ]> . . .

Document Type Definition

SGML hat keinen festen Sprachschatz. Die SGML-Tags werden vom Document Typ Definition-Ersteller (DTD-Designer) definiert. In der DTD werden die Regeln des Dokumentes hinterlegt und den Elementen frei wählbare Namen gegeben. Mit der Hilfe der DTD wird das SGML-Dokument erzeugt. Diesem SGML-Dokument wird ein Layout zugeordnet.

Element-Deklaration

Im Beispiel oben wären die Elemente „Artikel“, „Ueberschrift“, „Inhalt“, „Ort“ und „Verweis“. In der DTD wird dies so geschrieben:

<!ELEMENT Artikel - - (Ueberschrift, Ort, Inhalt, Verweis)>

<!ELEMENT Ueberschrift - - (#PCDATA)>

<!ELEMENT Inhalt - - (#PCDATA)>

<!ELEMENT Ort - - (#PCDATA)>

<!ELEMENT Verweis - - (#PCDATA)>

In der Element-Deklaration wird der Elementname, die Verkürzung und das Inhaltsmodell beschrieben:

<!ELEMENT Elementname Verkürzung Inhaltsmodell>

Elementname: z.B. Artikel.

Verkürzung: Die beiden Striche hinter dem Elementnamen zeigen an, daß der Start- und der Endetag im Dokument erscheinen müssen. Würde an Stelle des letzten Striches ein O stehen, könnte der Endetag entfallen (Hinweis: Das O steht für ottmited = auslassen). Wenn auch der erste Strich durch ein O ersetzt wird, kann auch der Starttag ausgelassen werden.

Inhaltsmodell (content modell): z.B. (Ueberschrift, Ort, Inhalt, Verweis)

Ohne Endetag

<!ELEMENT Artikel - O (Ueberschrift, Ort, Inhalt, Verweis)>
<Artikel><Ueberschrift>Allianz: Freie Bahn auf dem Weg zur Nummer eins</Ueberschrift><Ort>München</Ort> <Inhalt>Dem Aufstieg des Allianz-Konzers zur weltweit größten Versicherung scheint nichts mehr im Wege zu stehen.</Inhalt><Verweis>(Wirtschaft)</Verweis>

Ohne Start- und Endetag

<!ELEMENT Artikel O O (Ueberschrift, Ort, Inhalt, Verweis)>
<Ueberschrift>Allianz: Freie Bahn auf dem Weg zur Nummer eins</Ueberschrift><Ort>München</Ort> <Inhalt>Dem Aufstieg des Allianz-Konzers zur weltweit größten Versicherung scheint nichts mehr im Wege zu stehen.</Inhalt><Verweis>(Wirtschaft)</Verweis>

Attribut-Deklaration

Um Elemente zu erweitern, benutzt man bei SGML Attribute. Die Attribute und die Attributwerte stehen innerhalb des Starttags.

<ELEMENTNAME ATTRIBUT="ATTRIBUTWERT">

In der ‚attribute list declaration‘ (ATTLIST) schreibt man:

<!ATTLIST ELEMENTNAME

ATTRIBUTNAME (mögliche Attributwerte)>

In der Artikel-DTD könnte man dem Artikel noch eine Rubrik zuordnen. Wählbar ist zwischen den Rubriken „Politik“, „Wirtschaft“, „Kultur“, „Sport“ und „Lokales“. In der DTD schreibt man:

<!ATTLIST Artikel

Rubrik (Politik | Wirtschaft | Kultur | Sport | Lokales)#IMPLIED>

Das Wort „Implied“ zeigt an, daß das Attribut „Rubrik“ nicht notwendig ist. Würde an der gleichen Stelle „Required“ stehen, so wäre das Attribut notwendig.

Der Artikel:

<Artikel Rubrik="Wirtschaft"><Ueberschrift>Allianz: Freie Bahn auf dem Weg zur Nummer eins</Ueberschrift><Ort>München</Ort> <Inhalt>Dem Aufstieg des Allianz-Konzers zur weltweit größten Versicherung scheint nichts mehr im Wege zu stehen.</Inhalt><Verweis>(Wirtschaft)</Verweis></Artikel>

Entity-Deklaration

Entities (Mehrzahl von Entity) haben vielfältige Möglichkeiten. Mit ihnen kann man den Zeichenvorrat unbegrenzt erweitern. Man unterscheidet grundsätzlich zwischen dem ‚general entity‘ und dem ‚parameter entity‘. Das ‚general entiy‘ wird im SGML-Dokument verwendet und hat dort die Form:

&Name;

In der DTD wird das ‚general entity‘ bespielsweise wie folgt definiert:

<!ENTITY Name "Inhalt">

Hiermit ist es möglich lange Zeichenketten, die sich in einem Dokument öfters wiederholen, in einer Kurzform zu definieren.

<!ENTITY form "In ein Formblatt (vgl. Hinweise Ziff. 5) ist einzusetzen:">

Im Dokument schreibt man nur &form; und der Formatierer ersetzt dies durch: „In ein Formblatt (vgl. Hinweise Ziff. 5) ist einzusetzen:“

Das ‚parameter entity‘ wird nur in der DTD verwendet und hat dort die Form:

<!ENTITY % Name Parameter>

SGML-Dokumente bestehen aus 7-bit-ASCII Zeichen. Die Umlaute oder andere Sonderzeichen sind in 7-bit-ASCII nicht enthalten. Hierzu gibt es von der ISO spezielle Listen (siehe Anhang A), in denen steht wie Sonderzeichen in SGML Dokumenten zu codieren sind. Eine solche Liste wird Public Entity-Set genannt.

<!ENTITY auml; SDATA "[auml]" - - =small a, dieresis or umlautmark - ->

<!ENTITY Auml; SDATA "[Auml]" - - =capital a, dieresis or umlautmark - ->

<!ENTITY ouml; SDATA "[ouml]" - - =small o, dieresis or umlautmark - ->

<!ENTITY Ouml; SDATA "[Ouml]" - - =capital o, dieresis or umlautmark - ->

<!ENTITY uuml; SDATA "[uuml]" - - =small u, dieresis or umlautmark - ->

<!ENTITY Uuml; SDATA "[Uuml]" - - =capital a, dieresis or umlautmark - ->

<!ENTITY szlig; SDATA "[szlig]" - - =small sharp s, German(szligature - ->

Dies sind die Ersetzungen für die Umlaute und das ß.

<Artikel Rubrik="Wirtschaft"><Ueberschrift>Allianz: Freie Bahn auf dem Weg zur Nummer eins</Ueberschrift><Ort>M&uuml;nchen</Ort> <Inhalt>Dem Aufstieg des Allianz-Konzers zur weltweit gr&ouml;&szlig;ten Versicherung scheint nichts mehr im Wege zu stehen.</Inhalt><Verweis>(Wirtschaft)</Verweis></Artikel>

Die Umlaute und das ß befinden sich in der Liste mit den westeuropäischen Buchstaben, genannt „Latin 1“ (lateinisch 1/ISO-8859-1). In der DTD wird nicht die ganze Liste aufgeführt, sondern nur ein Verweis auf diese Liste:

<!ENTITY % ISOlat1 PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN">

%ISOlat1;

In einigen SGML-Editoren kann man die Umlaute normal tasten. Die Software weiß: Wenn die Taste ä gedrückt wird, ist in den Quelltext ein &auml; einzufügen. Öffnet man das SGML-Dokument in einer Textverarbeitung, die von SGML nichts weiß, sieht man auf dem Bildschirm nicht die Umlaute, sondern deren Ersetzungen.

Entities für circumflex (z.B. Â), grave (z.B. À), acute (z.B. Á), tilde (z.B. Ã), umlaut (z.B. Ä), ring (z.B. Å), ligatur (z.B. ß), cedilla (z.B. Ç) und slash (z.B. Ø)

Circumflex: &Acirc;, &Ecirc;, &Icirc;, &Ocirc;, &Ucirc;, &acirc;, &ecirc;, &icirc;, &ocirc;, &ucirc;

Grave: &Agrave;, &Egrave;, &Igrave;, &Ograve;, &Ugrave;, &agrave;, &egrave;, &igrave;, &ograve;, &ugrave;

Acute: &Aacute;, &Eacute;, &Oacute;, &Uacute;, &aacute;, &eacute;, &oacute;, &uacute;

Tilde: &Atilde;, &Ntilde;, &Otilde;, &atilde;, &ntilde;, &otilde;

Umlaut: &Auml;, &Euml;, &Iuml;, &Ouml;, &Uuml;, &auml;, &euml;, &iuml;, &ouml;, &uuml;,

Ring: &Aring;, &aring;

Ligatur: &aelig;, &szlig;

Cedilla: &Ccedil;, &ccedil;

Slash: &Oslash;, &oslash;

Nach der Zuordnung:

Circumflex: Â, Ê, Î, Ô, Û, â, ê, î, ô, û

Grave: À, È, Ì, Ò, Ù, à, è, ì, ò, ù

Acute: Á, É, Ó, Ú, ´, é, ó, ú

Tilde: Ã, Ñ, Õ, ã, ñ, õ

Umlaut: Ä, Ë, Ï, Ö, Ü, ä, ë, ï, ö, ü

Ring: Å, å

Ligatur: æ, ß

Cedilla: Ç, ç

Slash: Ø, ø

Anführungszeichen, Zwischenräume und Striche in SGML

In der deutschen Sprache schreibt man die Anführungszeichen als 99 (unten) und die Abführungszeichen als 66 (oben) Im englischsprachigen Raum schreibt man hingegen die Anführungszeichen als 66 (oben) und die Abführungszeichen 99 (oben). Obwohl man bei SGML an die An- und Abführungen gedacht hat, wurde auf einzelne Länder keine Rücksicht genommen. Für die letztendliche Erscheinungsweise muß im Formatierer (Satzsoftware) gesorgt werden.

Anführungszeichen (quotation mark) in SGML (genormt in ISOpub):

einfache Anführungen (rising single quote, left [low]) &lsquor;

doppelte Anführungen (rising double qoute, left [low]) &ldquor;

einfache Abführungen (rising single quote, right [high]) &rsquor;

doppelte Abführungen (rising double quote, right [high]) &rdquor;

Typografische Zwischenräume (space) in SGML (genormt in ISOpub)

Benötigt werden hier Halb-, 1/3- und 1/4-Gevierte. Da bei den meisten Schriften die Breite des >m< dem Maß des Gevierts entspricht, spricht man im englischen von >em-space<. Das Halbgeviert entspricht des Breite des >n<, daher spricht man im englischen vom >en-space<.

Geviert (em space) &emsp;

Halbgeviert (en space) &ensp;

1/3-Geviert (1/3-em space) &emsp13;

1/4-Geviert (1/4-em space) &emsp14;

Striche (dash) in SGML (genormt in ISOpub)

Wichtig ist hier vor allem die Unterscheidung zwischen Binde- bzw. Trennstrich (Divis) und Gedankenstrichen. Das Divis wird ganz normal getastet. Als Gedankenstrich wird der Halbgeviertstrich (en dash) verwendet.

Divis –

Gedankenstrich &ndash;

Die DTD lautet damit:

<!DOCTYPE Artikel[

<!ENTITY % ISOlat1 PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN">

%ISOlat1;

<!ENTITY % ISOpub PUBLIC "ISO 8879-1986//ENTITIES Publishing//EN">

%ISOpub;

<!ELEMENT Artikel - - (Ueberschrift, Ort, Inhalt, Verweis)>

<!ATTLIST Artikel

Rubrik (Politik | Wirtschaft | Kultur | Sport | Lokales)#IMPLIED>

<!ELEMENT Ueberschrift - - (#PCDATA)>

<!ELEMENT Inhalt - - (#PCDATA)>

<!ELEMENT Ort - - (#PCDATA)>

<!ELEMENT Verweis - - (#PCDATA)>

]>

Kommentare und Processing Instructions

Kommentare

Oft sind DTDs und SGML-Dokumente für Dritte nur schwer verständlich. Zu Erleichterung kann man sowohl in der DTD wie auch im SGML-Dokument Kommentare schreiben.

Kommentaranfang: <!–

Kommentarende: –>

In der Artikel-DTD befinden sich nun Kommentare:

<!DOCTYPE Artikel[

<!--Public entity sets-->

<!ENTITY % ISOlat1 PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN">

%ISOlat1;

<!ENTITY % ISOpub PUBLIC "ISO 8879-1986//ENTITIES Publishing//EN">

%ISOpub;

<!--hier beginnt die eigentliche DTD-->

<!ELEMENT Artikel - - (Ueberschrift, Ort, Inhalt, Verweis)>

<!ATTLIST Artikel

Rubrik (Politik | Wirtschaft | Kultur | Sport | Lokales)#IMPLIED>

<!ELEMENT Ueberschrift - - (#PCDATA) -- Element fuer die Ueberschrift -- >

<!ELEMENT Inhalt - - (#PCDATA)>

<!ELEMENT Ort - - (#PCDATA)>

<!ELEMENT Verweis - - (#PCDATA)>

]>

Wie beim letzten Kommentar zu sehen ist, können Kommentare auch innerhalb der Element-Deklaration vorkommen, um das Element näher zu beschreiben.

Processing Instructions

Mittels Processing Instructions (PIs) ist es möglich einer bestimmten Software Verarbeitungshinweise zugeben. Die Satzsoftware Advent 3B2 stellt ihre eigenen Befehle als PIs dar. Für eine andere Software haben diese PIs keine Bedeutung. Von SGML-Parsern, die DTDs und SGML-Dokumente kontrollieren, werden PIs nicht kontrolliert und somit auch nicht als Fehler angezeigt. Durch die Verwendung von PIs wird die Allgemeingültigkeit des SGML-Dokumentes eingeschränkt. Werden viele Funktionen eines Dokumentes über PIs gesteuert, ist das Dokument in einem anderen SGML-System nicht direkt mit den gleichen Funktionen verfügbar. Sie müssen erst für das SGML-System definiert werden.

Eine PI beginnt mit <? und endet mit >.

Synex SGML Viewer (Bildschirmfoto 1998). Links die Struktursicht, rechts die typografische Darstellung.

Connectoren und Occurrence Indicators

Um Flexibilität zu ermöglichen, aber auch Grenzen in die DTD einzubauen, werden in DTDs Connectoren und Occurrence Indicators verwendet.

Mit den Connector-Symbolen kann man bestimmen, in welcher Reihenfolge (Sequenz) die Elemente erscheinen, und ermöglicht Alternativen. Mit den Occurrence Indicator-Symbolen wird definiert ob und wie oft ein Element erscheinen darf (Quantität). Damit kontrollieren die Connectors die Sequenz und die Occurrence Indicators die Quantität.

 

Symbol Sequenz (Connector)

Bedeutung

,

 Sequenz (meint: „gefolgt von“)

&

und (alle müssen erscheinen, die Reihenfolge ist egal)

|

oder (Alternativen)

Symbol Quantität (Kardinalität/Occurrence Indicators)

Bedeutung

?

Optional (nur null oder ein können erscheinen)

*

Optional und wiederholbar (null oder mehrere können erscheinen)

+

Notwendig und wiederholbar (ein oder mehrere müssen erscheinen)

13 Beispiel DTDs

Mittels der folgenden 13 kleinen DTDs soll die Sequenz- und Quantitätskontrolle veranschaulicht werden.

Darstellung einer DTD in der Software Near & Far des Herstellers Microstar.

Eine minimale SGML-DTD besteht aus mindestens einem Element.

 DTD Nr. 1

<!DOCTYPE einfach[
<!ELEMENT einfach - - (#PCDATA)>
]>

Eine SGML-Instanz kann nur Text zwischen dem Wurzelelement „einfach“ haben. Bei weiteren Elementen innerhalb des Dokumentes würde der Parser Fehler melden.

 <einfach>Hallo Welt!</einfach>

Bei der zweiten DTD sollen die Elemente eine bestimmte Reihenfolge einhalten. Erst wenn das erste Element beendet ist, darf das zweite Element folgen und dann erst das dritte. Bei dieser DTD wird der Sequenz-Connector verwendet. 

DTD Nr. 2

<!DOCTYPE Alfred[

<!ELEMENT Alfred - - (a, b, c)>

<!ELEMENT a - - (#PCDATA)>

<!ELEMENT b - - (#PCDATA)>

<!ELEMENT c - - (#PCDATA)>

]>

 Die Instanz muß dann so aussehen:

 <Alfred><a>text</a><b>text</b><c>text</c></Alfred>

In der nächsten DTD wird der Oder-Connector benutzt. Es darf nur eines der drei definierten Elemente erscheinen. 

DTD Nr. 3

<!DOCTYPE Berta[

<!ELEMENT Berta - - (d | e | f)>

<!ELEMENT d - - (#PCDATA)>

<!ELEMENT e - - (#PCDATA)>

<!ELEMENT f - - (#PCDATA)>

]>

 Bei dieser DTD sind nun folgende Instanzen möglich

<Berta><d>text</d></Berta>
<Berta><e>text</e></Berta>
<Berta><f>text</f></Berta>

Die DTD „Dagmar“ verwendet den Und-Connector. Hier ist es möglich, daß die Elemente je einmal in beliebiger Reihenfolge erscheinen.

DTD Nr. 4 

<!DOCTYPE Dagmar[

<!ELEMENT Dagmar - - (g & h & i)>

<!ELEMENT g - - (#PCDATA)>

<!ELEMENT h - - (#PCDATA)>

<!ELEMENT i - - (#PCDATA)>

 Möglichkeiten der DTD:

<Dagmar><i>text</i><h>text</h><g>text</g></Dagmar>

<Dagmar><h>text</h><g>text</g><i>text</i></Dagmar>

<Dagmar><g>text</g><h>text</h><i>text</i></Dagmar>

 Bei der folgenden DTD werden der Sequenz- und der Oder-Connector verwendet. Dabei stellt „m“ eine Alternative zu der Sequenz „j“, „k“ und „l“ dar.

DTD Nr. 5a

<!DOCTYPE Emil[

<!ELEMENT Emil - - ((j, k, l) | m)>

<!ELEMENT j - - (#PCDATA)>

<!ELEMENT k - - (#PCDATA)>

<!ELEMENT l - - (#PCDATA)>

<!ELEMENT m - - (#PCDATA)>

]>

 Als Alternative können wir die DTD auch so schreiben:

 DTD Nr. 5b 

<!DOCTYPE Emil[

<!ELEMENT Emil - - ((j, k, l) | m)>

<!ELEMENT (j, k, l, m) - - (#PCDATA)>

]>

Möglichkeiten der DTD:

<Emil><j>text</j><k>text</k><l>text</l></Emil>

<Emil><m>text</m></Emil>

In der DTD „Franziska“ müssen zunächst „n“ und „o“ erscheinen, anschließend muß „p“ oder „q“ folgen.

DTD Nr. 6 

<!DOCTYPE Franziska[

<!ELEMENT Franziska - - (n, o,(p | q))>

<!ELEMENT (u, o, p, q)- - (#PCDATA)>

Möglichkeiten der DTD:

<Franziska><n>text</n><o>text</o><q>text</q>

<Franziska><n>text</n><o>text</o><p>text</p>

Die DTDs 2-6 bezogen sich alle auf die Sequenzkontrolle. Die folgenden DTDs behandeln die Quantitätskontrolle.

In der DTD „Gustav“ muß das Element „a“ erscheinen, daß Element „b“ hingegen ist optional.

DTD Nr. 7 

<!DOCTYPE Gustav[

<!ELEMENT Gustav - - (a, b?)>

<!ELEMENT a - - (#PCDATA)>

<!ELEMENT b - - (#PCDATA)>

]>

Möglichkeiten der DTD:

<Gustav><a>text</a></Gustav>

<Gustav><a>text</a><b>text</b></Gustav>

Um das zweite Element beliebig oft zu ermöglichen wird das Fragezeichen durch ein Pluszeichen ersetzt. Hierbei muß das zweite Element mindestens einmal erscheinen (notwendig und wiederholbar).

 DTD Nr. 8 

<!DOCTYPE Hanna[

<!ELEMENT Hanna - - (c, d+)>

<!ELEMENT c - - (#PCDATA)>

<!ELEMENT d - - (#PCDATA)>

]>

Möglichkeiten der DTD:

<Hanna><c>text</c><d>text</d></Hanna>

<Hanna><c>text</c><d>text</d><d>text</d></Hanna>

<Hanna><c>text</c><d>text</d><d>text</d><d>text</d></Hanna>

usw.

Um die Vorteile (optional, wiederholbar) der beiden vorherigen DTD zu kombinieren, wird nun das Sternchen angewendet. Dadurch ist es möglich, daß das Element gar nicht erscheint oder beliebig oft.

DTD Nr. 9 

<!DOCTYPE Ingo[

<!ELEMENT Ingo - - (e, f*)>

<!ELEMENT e - - (#PCDATA)>

<!ELEMENT f - - (#PCDATA)>

]>

Möglichkeiten der DTD:

<Ingo><e>text</e></Ingo>

<Ingo><e>text</e><f>text</f></Ingo>

<Ingo><e>text</e><f>text</f><f>text</f></Ingo>

<Ingo><e>text</e><f>text</f><f>text</f><f>text</f></Ingo>

usw.

In der folgenden DTD müssen beide Elemente erscheinen oder beide gar nicht.

DTD Nr. 10 

<!DOCTYPE Jutta[

<!ELEMENT Jutta - - (g,h)?>

<!ELEMENT g - - (#PCDATA)>

<!ELEMENT h - - (#PCDATA)>

]>

Möglichkeiten der DTD:

<Jutta><g>text</g><h>text</h></Jutta>

<Jutta></Jutta>

 Nun können beide Elemente wiederholbar sein und optional.

DTD Nr. 11 

<!DOCTYPE Karl[

<!ELEMENT Karl - - (i,j)*>

<!ELEMENT i - - (#PCDATA)>

<!ELEMENT j - - (#PCDATA)>

]>

Möglichkeiten der DTD:

<Karl></Karl>

<Karl><i>text</i><j>text</j></Karl>

<Karl><i>text</i><j>text</j><i>text</i><j>text</j></Karl>

<Karl><i>text</i><j>text</j><i>text</i><j>text</j><i>text</i><j>text</j>

</Karl>
usw.

Die Elemente „k“ und „l“ sind notwendig und wiederholbar.

DTD Nr. 12

<!DOCTYPE Lydia[

<!ELEMENT Lydia - - (k,l)+>

<!ELEMENT k - - (#PCDATA)>

<!ELEMENT l - - (#PCDATA)>

]>

Möglichkeiten der DTD:

<Lydia><k>text</k><l>text</l></Lydia>

<Lydia><k>text</k><l>text</l><k>text</k><l>text</l></Lydia>

<Lydia><k>text</k><l>text</l><k>text</k><l>text</l><k>text</k><l>text</l>

</Lydia>

usw.

Die Elemente können in beliebiger Reihenfolge erscheinen (wiederholbar, optional, beliebige Reihenfolge).

DTD Nr. 13 

<!DOCTYPE Martin[

<!ELEMENT Martin - - (m | n)*>

<!ELEMENT m - - (#PCDATA)>

<!ELEMENT n - - (#PCDATA)>

]>

Möglichkeiten der DTD:

<Martin><m>text</m><n>text</n><m>text</m></Martin>

<Martin></Martin>

<Martin><m>text</m><n>text</n><m>text</m><n>text</n><n>text</n><m>text

</m><m>text</m></Martin>