DTDs und XSDs verstehen - Teil 2

Wie die DTDs, die im ersten Teil der Artikelserie im Mittelpunkt standen, sind auch XSDs (XML Schema Definitions) ein Ansatz für die Beschreibung der Datenstrukturen von XML-Dateien. Der Artikel erläutert die Grundstruktur und die wichtigsten Elemente in diesen Dateien, auch für die der Version Lotus Domino 7.0.

Document Type Definitions, kurz DTDs, sind der Standardansatz bis Domino 6.x. Ab der Version 7.x werden auch XSDs unterstützt.

XSDs sind selbst wieder XML-Dateien. Mit einer XML-Datei wird also die Struktur anderer XML-Dateien beschrieben. Dieses Verfahren ist grundsätzlich sinnvoll, weil man sich damit eigentlich nur mit XML auskennen muss, um auch eine XSD „lesen“ zu können.

Der erste Eintrag in einer solchen Datei ist damit logischerweise der Verweis auf die verwendete XML-Version, also

<?xml version="1.0" encoding="UTF-8"?>

Anschließend erfolgt mit

<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.lotus.com/dxl"
targetNamespace="http://www.lotus.com/dxl"
elementFormDefault="qualified">

die Festlegung der Namespaces, die verwendet werden. Neben dem Standard ist das in diesem Fall noch die Definition von Lotus für DXL. Weiter geht es mit einer Liste der zulässigen Root- Elemente – also der Elemente auf oberster Ebene – in den beschriebenen XML-Dokumenten. Bei der Domino-XSD sieht das – in einem Ausschnitt – wie folgt aus:

<xsd:element name="note" type="note"/>
<xsd:element name="document" type="document"/>
<xsd:element name="form" type="form"/>
<xsd:element name="helpaboutdocument" type="helpaboutdocument"/>
<xsd:element name="helpusingdocument" type="helpusingdocument"/>
<xsd:element name="imageresource" type="imageresource"/>
<xsd:element name="sharedfield" type="sharedfield"/>

Hier werden Elemente wie document oder form zunächst grundlegend definiert. Neben dieser normalen Festlegung von Elementen können auch Gruppen definiert werden, wie beispielsweise bei den verschiedenen Arten von Notes:

<xsd:group name="note.types">
<xsd:choice>
<xsd:element name="note"
type="note"/>
<xsd:element name="document" type=" document"/>
<xsd:element name="profiledocument"
type="profiledocument"/>
<xsd:group ref="design.elements"/>
</xsd:choice>
</xsd:group>