DTDs und XSDs verstehen - Teil 2

Standardwerte

Bei Attributen können auch Standardwerte angegeben werden, wie in diesem Beispiel:

<xsd:attribute name="logtransactions"
type="xsd:boolean" use="optional" default="true"/>

Neben Werten wie true und false lassen sich auch andere Werte vorgeben. Dabei wird in der Regel mit einfachen Zeichenketten gearbeitet. Eine andere Art von Typdefinitionen sind die einfachen Datentypen, die beispielsweise in der Form

<xsd:simpleType name="acl.levels">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="noaccess"/>
<xsd:enumeration value="depositor"/>
<xsd:enumeration value="reader"/>
<xsd:enumeration value="author"/>
<xsd:enumeration value="editor"/>
<xsd:enumeration value="designer"/>
<xsd:enumeration value="manager"/>
</xsd:restriction>
</xsd:simpleType>

erstellt werden. Hier wird ein Typ erstellt, der nur aus einem Wert besteht, wobei es sich um Zeichenketten handelt. Aus den angegebenen Zeichenketten kann eine ausgewählt werden.

Interessant sind auch die Attributgruppen. Sie fassen mehrere Attribute zusammen, wie beispielsweise bei

<xsd:attributeGroup name="launch.common.attrs">
<xsd:attribute name="whenopened" use="optional">
<xsd:simpleType>
<xsd:restriction
base="xsd:string">
<xsd:enumeration
value="openaboutdocument"/>
<xsd:enumeration
value="openframeset"/>
<xsd:enumeration
value="opennavigatorinwindow"/>
<xsd:enumeration
value="openfirstdoclink"/>
<xsd:enumeration
value="restorelastview"/>
<xsd:enumeration
value="opennavigator"/>
<xsd:enumeration
value="openfirstaboutattachment"/>
<xsd:enumeration
value="usenotesoptions"/>
<xsd:enumeration
value="openpage"/>
<xsd:enumeration
value="openspecifieddoclink"/>
<xsd:enumeration
value="openfirstdocumentinview"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="frameset"
type="xsd:string" use="optional"/>
<xsd:attribute name="navigator"
type="xsd:string" use="optional"/>
</xsd:attributeGroup>

Hier findet man sowohl einen einfachen Datentyp als auch zusätzliche Attribute, die mit diesem zusammen verwendet werden müssen. Attributgruppen werden verwendet, wenn bestimmte Attribute immer gemeinsam vorkommen. Interessant ist auch die Referenzierung im folgenden (gekürzten) Beispiel:

<xsd:sequence>
<xsd:group ref="named.design.note.prolog"/>
<xsd:element name="code" type="code" minOccurs="
0" maxOccurs="1"/>
<xsd:choice minOccurs="1" maxOccurs="unbounded">
<xsd:element name="frameset"
type="frameset"/>
<xsd:element name="frame"
type="frame"/>
</xsd:choice>
<xsd:group ref="note.epilog"/>
</xsd:sequence>
<xsd:attributeGroup
ref="named.design.note.attrs"/>
<xsd:attribute name="rows" type="xsd:string"
use="optional"/>

In diesem Fall wird beispielsweise auf name.design. note.prolog und auf note.epilog sowie auf named. design.note.attrs Bezug genommen. Diese Informationen sind an anderer Stelle als Gruppen oder Attributgruppen in der Spezifikation der XSD konfiguriert worden.

Mit diesen Definitionen und einigen wenigen zusätzlichen Varianten wird die gesamte Datenstruktur beschrieben. Dabei wird von den Root- Elementen ausgegangen, die weiter in untergeordnete Elemente und Attribute zerlegt werden,bis die gesamte Struktur der XML-Datei beschrieben ist. Das Konzept ist im Grundsatz relativ einfach, weil man mit einer sehr geringen Zahl an Grundstrukturen auskommt und beispielsweise keine speziellen Zeichen benötigt, um die zulässige Anzahl von Attributen zu beschreiben. Stattdessen wird einfach die minimale und maximale Zahl definiert.

Diese relative Einfachheit im Vergleich zu DTDs machen XSDs zum bevorzugten Ansatz, wenn die Strukturen von XML-Dokumenten beschrieben werden sollen.