Defizite von DTDs:
Präzise Unterscheidung von Datentypen
Festlegung von erlaubten Wertebreichen
Kontrolle über bestimmte Zeichenmuster
Vorgabe von Standardwerten
DTDs sind nicht selbst in XML formulierbar ==> zusätzlicher Editor notwendig
Nicht über Programmierschnittstellen zugreifbar ( wie z.B. DOM)
Ein Schema beschreibt und definiert also eine Klasse von XML-Dokumenten, indem es die Bedeutung, die mögliche Verwendung und die Beziehung der Teile festlegt, aus denen das Dokument besteht:
Wichtig: Ein Schema ist selbst ein XML-Dokument und kann dadruch auf Wohlgeformtheit und Gültigkeit überprüft werden.
Komplexe Datentypen
Das Inhaltsmodell eines komplexen Datentyps setzt sich aus Teilen zusammen, die auch Partikel genannt werden.
Sequenzen
Legt Reihenfolge der Elemente verbindlich fest
Angeführte Elemente müssen vorkommen
Abfolge der angeführten Elemente muss genau eingehalten werden
Einfache Datentypen
Elemente die nur einen Wert enthalten, wie z.B. eine Zahl, ein Datum oder Text. Der Wert von Attributen gehört immer zu den simpleTypes ==> Keine Kindelemente oder Unterelemente!
Anonyme Datentypen
Diese sind immer dann problemlos, wenn der jeweilige Datentyp nur einmal verwendet wird und auch eine Übernahme in ein anderes Schema nicht vorgesehen ist. Restrictions sind ebenfalls nicht möglich.
Attribute
Dieses Element kann innerhalb von komplexen Datentypen verwendet werden, wobei es immer hinter den Elementendeklarationen erscheinen muss. Attribute können nicht geschachtelt werden oder andere Elemente enthalten. Die Reihenfolge der Attributdeklaration zu einem Datentyp ist beliebig. Die Namen der Attribute innerhalb eines koplexen Datentyps müssen aber eindeutig sein.
Namensräume
XML-Schema unterstützt die Verwendung von Namensräumen und ermöglicht dadurch die Überprüfung der Gültigkeit von XML-Dokumenten, die verschiedene Vokabulare mischen. Namenskonflikte können somit vermieden werden.
Der Default-Namespace kann durch weglassen des Präfixes bei der Deklaration des Namensraumes definiert werden. Dies hat aber den Nachteil, dass vorgegebene Datentypen und benutzerdefinierte Datentypen nicht mehr sofort unterschieden werden können.
Die Zuordnung der Namen zu den Komponenten eines bestimmten Schemas kann in jedem Fall einen eigenen Namensraum konstituieren, die Empfehlung nennt ihn target namespace. Dieser Namensraum wird dadurch gebildet, dass er über eine entsprechende Deklaration identifiziert wird.
Valide Schema Definitionen
1. Default Namespace mit Präfix
Zugehörige valide XML-Instanz:
Error durch weglassen des Präfixes im Schema-Dokument:
2. Definition eines Target-Namespaces:
Zugehörige valide XML-Instanz:
Error da das elementFormDefault Attribut im XML-Schemadokument default-mässig auf unqualified eingestellt ist und in der XML-Instanz als Default-Namespace der selebe Namespace wie der targetNamespace im Schema-File deklariert ist.
Dadurch erwartet der XML-Parser als erstes Element innerhalb des Wurzel-Eelements ein unqualifiziertes Element. Das Problem kann dadurch behoben werden indem dem Wurzel-Element und dem Default-Namespace ein Präfix zugeordnet wird. In der validen Abbildung geschieht dies durch das default-Präfix.
Weiters kann der Fehler behoben werden indem das elementFormDefault-Attribut im Schema-File auf qualified gesetzt wird, da jetzt der Namensraum als Vorgabe verwendet wird. Diese Einstellung kann man in der letzten Abbildung sehen.
Hier ist das elementFormDefault-Attribut im Schema auf qualified gesetzt und daher können die Präfixe komplette in der zugehörigen XML-Instaz weggelassen werden.
Hacks
Um z.B. xsd:decimal um ein Attribug "waehrung" zu erweitern, um diesen einfachen Datentyp mit dem Eurozeichen zu verknüpfen dient folgender Code: