Grundlagen
Die XML-basierende Sprache XSD (XML Schema Definition, oftmals auch nur als XML Schema bezeichnet) ist eine Schemasprache, die den Aufbau und Inhalt von XML-Dokumenten definieren soll. Im Gegensatz zu den klassischen Dokumenttypdefinitionen (DTDs) bieten XSD-Skripte jedoch einige Vorteile.
Die Definition eines solchen sogenannten XML-Schemas erfolgt in einer separaten Datei (üblicherweise mit der Dateiendung
.xsd
). Die Vorgehensweise in XSD ist dabei etwas anders als bei DTD, da hier Datentypen definiert werden,
welche wiederum einem Element oder Attribut zugeordnet werden. Neben der Verwendung der bereits vorhandenen Datentypen (z. B.
für Zeichenketten oder Zahlen), können eigene Datentypen (z. B. durch bestimmte Einschränkungen) definiert werden. Zudem lässt
sich die Elementanzahl, der Element- und Attributinhalt und vieles mehr wesentlich genauer steuern. Dies hat zur Folge,
dass XSD-Dokumente i. d. R. umfangreicher als DTDs sind, jedoch auch eine deutlich höhere Anzahl an Möglichkeiten (z. B.
Einschränkungen oder Ableitungen) zur Validierung bestehen.
Nutzen und Funktionsweise
Wie bei DTDs stellt sich zunächst natürlich folgende Frage: Brauche ich ein XSD-Dokument? Um dies zu erklären, greifen wir zunächst auf die Begriffe wohlgeformt und gültig zurück. Ein XML-Dokument ist wohlgeformt, wenn die „Regeln von XML“ eingehalten werden. Zu diesen Regeln zählt z. B., dass das Dokument nur über ein Wurzelelement verfügt, jedes geöffnete Element auch wieder geschlossen wird (in umgekehrter Reihenfolge) usw.. Das Dokument ist dadurch jedoch noch nicht gültig. Um die Gültigkeit eines XML-Dokuments zu erreichen, ist es notwendig, dass das Dokument über eine Definition (DTD) oder ein XML Schema (XSD) verfügt, dessen Regeln dann auch eingehalten werden.
Was heißt das jetzt konkret? Verwenden Sie keine DTD oder XSD, so kann Ihr Dokument nicht gültig (auch als valide bezeichnet) sein, da dessen Struktur und Inhalt nicht geprüft werden kann. Verfügt Ihr XML-Dokument hingegen über eine solche Definition, so kann das Dokument geprüft werden und ist, falls die Prüfung erfolgreich war, gültig (auch als valide bezeichnet). Daraus ergibt sich jetzt natürlich folgende Frage: Brauchen Sie für Ihr Vorhaben ein DTD- oder XSD-Skript? Grundsätzlich kann man sagen, dass eine DTD oder XSD immer dann sinnvoll ist, wenn mit den XML-Dateien dritte Personen in Kontakt kommen bzw. diese ändern oder sogar selber erstellen sollen. Beispiele dafür wären, Konfigurationsdateien für Programme oder „Skripte“, mit welchen Programme gesteuert werden. Für den Datenaustausch auf der eigenen Website hingegen werden Sie wohl kaum eine DTD oder XSD erstellen.
Ein XML Schema soll also, wie eine Dokumenttypdefinition auch, die Struktur und den Inhalt des XML-Dokuments auf Gültigkeit überprüfen. Dafür werden in XSD in erster Linie Datentypen festgelegt. Diese Datentypen sind von bereits vorhandenen Basis-Datentypen (z. B. Zeichenkette oder Zahl) abzuleiten und können über bestimmte Definitionen weiter eingeschränkt werden. Neben solchen Datentypen, welche auch als einfache Typen bezeichnet werden, gibt es noch komplexe Typen, die dazu genutzt werden, Datentypen zu definieren, welchen Elemente untergeordnet werden, die leer sind oder die Attribute besitzen.
Grundaufbau
In erster Linie ist ein XSD-Dokument nichts anderes als ein normales XML-Dokument, d. h. auch hier gibt es eine optionale
XML-Deklaration sowie ein Wurzelelement. Das Wurzelelement in XML Schema ist schema
. Wie in XSLT und XSL-FO wird
i. d. R. ein Namensraumpräfix verwendet. Bei XSD ist dies normalerweise xs
oder xsd
. Das Weglassen
des Namensraumpräfixes ist nicht zu empfehlen, da dadurch Konflikte zwischen eigenen Namen und den vordefinierten Namen von
XSD entstehen können (z. B. in Bezug auf Datentypen). Abhilfe könnte hier dann die Verwendung eines Namensraums für die „eigenen“
Namen schaffen. Da die Werte von Attributen im Regelfall dem Standardnamensraum angehören, ist für Features wie die Referenzierung
von Elementen oder Datentypen, welche Sie im Normalfall immer benötigen, notwendig, den Standardnamensraum mittels des
xmlns
-Attributs festzulegen. Alternativ wäre es auch möglich, einen eigenen Namensraumpräfix zu definieren. Sie
müssten dann jedoch bspw. bei der Referenzierung auf einen eigenen Datentyp (dazu später mehr) den definierten Namensraumpräfix
davorstellen. Wir empfehlen Ihnen jedoch die Verwendung des Standardnamensraums. Das schema
-Element verfügt des
Weiteren noch über ein paar optionale Attribute: version
(Versionsangabe von XSD, i. d. R. 1.0
),
targetNamespace
(Namensraum, der für die XML-Dokumente, welche dieses Schema verwenden, zulässig ist - meistens wird
hier der gleiche Namensraum wie für den Standardnamensraum angegeben), elementFormDefault
(Angabe zur
Element-Qualifizierung) und attributeFormDefault
(Angabe zur Attribut-Qualifizierung).
Für die Attribute elementFormDefault
und attributeFormDefault
sind die Werte qualified
(Element / Attribut muss qualifiziert sein) und unqualified
(Element / Attribut muss nicht qualifiziert sein)
möglich. Der Standardwert der beiden Attribute ist unqualified
. Eine kurze Erklärung dazu: In XSD wird zwischen
globalen und lokalen Elementen unterschieden. Als globale Elemente gelten alle Elemente, welche direkt im schema
-Element
des XSD-Dokuments angegeben sind. Auch Elemente, die sich auf ein anderes Element bzw. einen Datentyp, welches direkt im
schema
-Element angegeben wurde, beziehen, gelten als globale Elemente. Alle anderen Elemente sind lokal. Doch was
hat das ganze nun mit der Qualifizierung eines Elements zu tun? Durch den Wert qualified
im Attribut
elementFormDefault
wird festgelegt, dass jedes XML-Element (egal ob global oder lokal) über einen vollständigen
(auch als qualifiziert bezeichnet) Namen verfügen muss, d. h. der Name muss sich aus Namensraumpräfix und Elementname
zusammensetzen. Der Namensraumpräfix fällt natürlich weg, wenn ein Standardnamensraum verwendet wird. Anders herum heißt
dies also, dass bei Verwendung des Werts unqualified
nicht jeder Elementname (sondern nur Namen von globalen Elementen)
über einen vollständigen / qualifizierten Namen verfügen muss. Lokale Elemente können dann also z. B. ohne Namensraumpräfix
angegeben werden. Dies ist in der Praxis jedoch selten erwünscht, da dadurch nicht mehr direkt erkennbar ist, welches Element
zu welchem Namensraum gehört. Zudem ist bei dem Wert unqualified
die Verwendung eines Standardnamensraums unzulässig.
Der einzige Vorteil dieser Variante ist, dass bei Verwendung mehrerer Namensräume die Angabe von Präfixen gespart werden kann.
Wie sieht das Ganze aber nun bei Attributen aus? Bei Attributen ist es irrelevant, ob es sich um ein globales oder lokales
Attribut handelt. Hier geht es lediglich um die Notation des Attributs: Der Wert qualified
bedeutet, dass
der Attributname aus Namensraumpräfix und dem eigentlichen Attributnamen bestehen muss. Der Wert unqualified
hingegen
bedeutet, dass der Name nicht qualifiziert ist und somit nur aus dem Attributnamen besteht. Wird ein Standardnamensraum
verwendet, so ist der Wert qualified
ungültig (also umgekehrt wie bei Elementen!). Als Resultat lässt sich sagen,
dass i. d. R. für das Attribut elementFormDefault
der Wert qualified
und für das Attribut
attributeFormDefault
der Wert unqualified
(keine explizite Angabe notwendig, da es der Standardwert
ist) verwendet wird.
<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" xmlns="https://www.homepage-webhilfe.de/XML/XSD/" targetNamespace="https://www.homepage-webhilfe.de/XML/XSD/" elementFormDefault="qualified"> </xs:schema>
Wichtig: Im obigen Beispiel haben wir bezüglich den Namensräumen genau das gemacht, was wir im Text oben als empfohlene
Variante genannt haben: Für das Schema selbst wird der Namensraumpräfix xs
verwendet. Zudem wird ein
Standardnamensraum verwendet (xmlns
-Attribut), welcher den gleichen Wert wie das Attribut targetNamespace
hat. Dies ist die gängige Praxis.
Einbindung
Wenn Sie eine XML-Datei erstellen, welche einem bestimmten (oder auch dem eigenen) Schema angehört, so müssen Sie eine
Verbindung zwischen XML- und XSD-Datei herstellen. Dafür verwenden Sie im „Basiselement“ (meistens ist dies das
Wurzelelement) Ihres XML-Dokuments das Attribut schemaLocation
. Als Wert geben Sie die URI zur XSD-Datei an. Das
Attribut schemaLocation
gehört zum XML Schema Instanz Namensraum. Dieser wird in die XML-Datei meistens über
den Namensraumpräfix xsi
„eingebunden“.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <adressbuch xmlns="https://www.homepage-webhilfe.de/XML/XSD/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="adressbuch.xsd"> </adressbuch>