Homepage-Webhilfe Event-Banner

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.


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.


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.


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>
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK