XML Schema

Überblick

Betrachtet man im Verlauf der Entwicklung von Markierungssprachen die Inhaltsmodellierung in Form von DTDs, so wird im Hinblick auf die dynamische Entwicklung des Internets schnell eines klar: die Möglichkeiten von DTDs sind begrenzt.

Durch dynamische Seitengenerierung im Internet wird zugleich mehr Kontrolle aber auch mehr Flexibilität bezüglich der Inhaltsmodellierung notwendig.
Was zunächst wie ein Widerspruch klingt, wird bei näherer Betrachtung bald deutlicher. So möchte man bspw. ein Intervall von Werten genauer definieren können, als nur von null bis unendlich. Gleichzeitig möchte man aber auch ein Element POSTLEITZAHL eingrenzen, auf den Datentyp Integer und den Bereich von 00000 bis 99999. Dies könnte man durch einen regulären Ausdruck überprüfen.

Es ist schlicht nicht einzusehen, warum man im Zeitalter von Datenbanken und objektorientierter Programmierung auf Datentypen und Vererbbarkeit verzichten sollte, zumal Applikationen, die mit XML arbeiten und Eingaben in Tags verarbeiten sollen, bei inkonsistenten Daten sehr leicht zu gefährden sind.

Wenn man die DTD, die in den bisherigen Beispielen benutzt wurde, ein wenig abwandelt, wird dies verständlicher:

<!ELEMENT PLAYLIST (ITEM)*>
<!ELEMENT ITEM (ARTIST, SONG, ALBUM, DURATION?)>
<!ELEMENT ARTIST (#PCDATA)>
<!ELEMENT SONG (#PCDATA)>
<!ELEMENT ALBUM (#PCDATA)>
<!ATTLIST ALBUM label CDATA #REQUIRED>
<!ATTLIST ALBUM year CDATA #IMPLIED>
<!ELEMENT DURATION (#PCDATA)>

Die Abweichungen gegenüber der bisherigen DTD sind gering, teilweise wurden im Abschnitt über XSLT benutzte Erweiterungen übernommen.
Als einziges Element ist das Element DURATION hinzugekommen.

Aber schon dieses Element zeigt ein mögliches Problem auf: es ist nicht möglich diesem Element einen Datentyp zuzuordnen, wie es in Programmiersprachen üblich ist. Der Inhalt ist einfach #PCDATA, also parseable character data, ein Datentyp der vom Parser zu erfassen und zu analysieren ist.
Mehr nicht.

Dies ist aber äußerst unbefriedigend für Elemente, die einen bestimmten Datentyp enthalten sollen. Die Schreibweise für dieses Element in einem XML-Schema könnte wie folgt aussehen:

<xsd:element name="DURATION">
  <xsd:simpleType base="xsd:decimal">
 	<xsd:minInclusive value="0"/>
 	<xsd:maxExclusive value="15"/>
  </xsd:simpleType>
</xsd:element> 

...

<xsd:complexType name="ITEMType" content="elementOnly">
<xsd:sequence>
			...
   <xsd:element name="DURATION" minOccurs="0" maxOccurs="1"/>
     </xsd:sequence>
</xsd:complexType>

An diesem Beispiel wird klarer: es ist in Schema möglich, dem Element einen Datentyp zuzuweisen, nämlich es soll eine Dezimalzahl sein, und soll minimal einen Wert 0 und maximal einen Wert von 14 haben.

In der Elementauflistung erscheint das näher spezifizierte Element dann mit dem Häufigkeitsmodifikator, für welchen in der DTD ein Fragezeichen gesetzt wird: Das Element kann nullmal erscheinen oder einmal.

Aber:

<xsd:element name="DURATION" minOccurs="1" maxOccurs="5"/>

auch das wäre möglich - nur in einem Schema, nicht aber in einer DTD (wenngleich auch hier wenig sinnvoll).

Es ist in Schema also möglich, einem Element ein Intervall vorzugeben, welches von den eher vagen Häufigkeitsmodifikatoren in DTDs abweicht und wesentlich genauer ist. Schemas beschreiben, wie wir noch sehen werden, also eher Klassen von Objekten, als nur Dokumente. Denn es geht um die Modellierung von Daten und weniger die semantische Struktur von Dokumenten.

Weitere Vorteile von XML-Schema sind die Möglichkeiten Vererbungen darzustellen und zu nutzen. Zwar gibt es in den DTDs bereits die Möglichkeit mit Parameter-Entities ein Inhaltsmodell an ein anderes Element zu übergeben, "diese Beziehung ist aber keine verwandtschaftliche. Sie begründet kein Verhältnis von Klasse zu Subklasse."

Der Code eines Schemas ist - im Gegensatz zur DTD - ebenfalls in XML-Syntax gehalten. Dies hat auch den Vorteil, "daß Parser, die XML-Dokumente gegen Schemas statt gegen DTDs validieren, mit einem reduzierten Satz syntaktischer Regeln umgehen - mit den Regeln, denen XML-Dokumente ohnehin folgen müssen, um wohlgeformt zu sein. Das vereinfacht die Parser-Algorithmik und kommt tendentiell der Performanz der Verarbeitung von Dokumenten zugute." Der Gebrauch von Namensräumen, ermöglicht es, eventuell Elemente, die in anderen Schemas definiert wurden, in das Inhaltsmodell einzubauen, ähnlich externen Entitäten in DTDs.

Somit bieten Schemas eine Menge Vorteile gegenüber DTDs, jedoch gerät durch verschiedene Implementierungen unter Berücksichtigung verschiedener Namensräume oder Elementdeklarationen dies möglicherweise auch bald zum Nachteil, weil Unübersichtlichkeit und die mangelnde Standardisierung problematisch werden könnten - welcher Parser unterstützt welche Schemas ?

Das W3C versucht derzeit mehrere verschiedene Ansätze zu vereinen: u.a. XML-Data, eine Initiative von Microsoft, Inso, ArborText und DataChannel, SOX von IBM und Microsoft und DDML von der GMD. Auf diese Entwicklungen wird hier nicht weiter eingegangen, sondern es wird der entwickelte und im Mai 2001 als Empfehlung verabschiedete erste W3C-Standard betrachtet.

Die XML-Schema Recommendation 1.0 gliedert sich in zwei Teile:

Teil 1 " spezifiziert den strukturellen Teil der Schema-Sprache, d.h. die möglichen Objekttypen und ihre möglichen Beziehungen."

Teil 2 "spezifiziert die möglichen Inhaltstypen von Objekttypen, d.h. Datentypen für Elemente und Attribute sowie einen Mechanismus zur Definition benutzerspezifischer Datentypen."

Mittelfristig ist die Prognose sicher richtig, daß DTDs und Schemata nebeneinander existieren werden. Langfristig aber wird sich die XML Schema Technologie wahrscheinlich durchsetzen und XML "sich damit stillschweigend abkoppeln von SGML" , in dem Sinne, daß der eher textorientierte Deklarationsansatz von DTDs der objektorientierten Auszeichnungssyntax von XML-Schema weichen wird.

 

Copyright & Kontakt
jcpohl@gmx.de
© www.jcpohl.de 1999/2000