Sie haben gelernt, wie man Document Type Definitions (DTDs) als Mittel zur Durchsetzung von Gültigkeitsbeschränkungen und Bedingungen für Ihr wohl geformtes XML-Dokument erstellt. Heute werden Sie einen anderen Typ von Schema kennen lernen, das XML Data Reduced (XDR)-Schema, eine von mehreren speziellen Varianten der XML-Schemata. Insbesondere werden Sie Folgendes lernen:
Am 4. Tag haben Sie gelernt, wie man DTDs als Mittel zur Aufstellung von Gültigkeitsbeschränkungen für XML-Dokumente erstellt. Sie haben erfahren, wie man beschreibende Abschnitte erzeugt, die dazu dienen, die Struktur, Semantik und den Inhalt Ihrer XML-Instanzen zu definieren und zu dokumentieren. Damit können Regeln zum Inhalt und zur Anwendung durch das Einfügen von Bedingungen und Eingrenzungen durchgesetzt werden, die die jeweilige Instanz betreffen. Das Hinzufügen von Beschränkungsregeln mittels einer DTD oder einem anderen Schema ist eine Möglichkeit, eine bloß wohl geformte XML-Instanz auf die höhere Ebene der Gültigkeit zu heben, auf der sie bestimmten Betriebsregeln entspricht oder ein Paradigma erfüllt, das mit der XML- Instanz verbunden ist.
Außerdem haben Sie eine Methode kennen gelernt, wie man nicht nur den Attributsinhalt einschränkt, sondern auch Standardwerte spezifiziert, die verwendet werden, wenn in der XML-Instanz Werte nicht ausdrücklich festgelegt werden. Sie haben auch gelernt, wie man geparste Entities deklariert, auf die wiederum im Dokument verwiesen werden kann, sodass ein bestimmter Inhalt eingefügt wird. Sie haben gesehen, dass validierende Parser, auch XML-Prozessoren genannt, diese Dokumentation verwenden, um Bedingungen durchzusetzen, die bestimmte Betriebsregeln kennzeichnen.
Der Validierprozess, der Bedingungen anfügt, die hilfreich dabei sind, die Semantik eines Dokuments auf ein geschäftliches Problem zuzuschneiden, hat ein gewaltiges Potenzial für den Informationsaustausch im Bereich des E-Business und anderer Formen der elektronischen Kommunikation. Immerhin werden unterschiedliche XML-Prozessoren, denen ein Dokument und eine DTD vorliegen, die Gültigkeit oder Ungültigkeit eines Dokuments übereinstimmend beurteilen, wenn Betriebsregeln für eine Dokument- und Datenstruktur erzwungen und validiert werden. Damit wird sichergestellt, dass jedes Dokument genau die Daten sendet und empfängt, die für das Durchführen einer Transaktion Voraussetzung sind. Man kann sich zum Beispiel zwei Anwendungen vorstellen, die von Geschäftspartnern genutzt werden, um Daten zum E-Commerce über das Internet auszutauschen. Damit die Daten bei dieser Transaktion verlässlich sind, müssen die Regeln des Betriebsmodells zweifellos strikt durchgesetzt werden. Wenn man den Datenelementen diese Stringenz auf Dokumentebene auferlegt, indem man die Validierung mit einem Schema erforderlich macht, können die Anwendungen, die die Transaktion senden und aufnehmen, für deren Durchführung optimiert werden. Die äquivalente Validierung von Feldern und Dateieinträgen wird auf Instanzebene durchgeführt.
Die Entwickler können die Struktur und das Vokabular der Daten, die über das Internet ausgetauscht werden, bestimmen und als Mittel zur Durchsetzung dieser Regeln DTDs oder andere Schemata verwenden. Auf ähnliche Weise können Entwickler Schemata als Grundlage für die Umwandlung von Daten zwischen verschiedenen automatisierten Systemen verwenden und eine validierte Funktion zur Aufzeichnung anbieten, die von einem Schema oder einer Datenbibliothek zur anderen gilt. Auf diese Weise liefern Schemata die Rahmenbedingungen für den Datenaustausch in großem Umfang. Anwendungen, die die auszutauschenden Daten aufnehmen oder erzeugen, müssen erst noch entwickelt werden, aber zumindest kann die Datenstruktur so gebildet werden, dass die unabhängige Entwicklung von Anwendungen und Werkzeugen möglich ist. Dies hilft dabei, die Investitionen der Industrie in bestehende Verarbeitungsmodelle zu erhalten und wertvolle alte Datenspeicher am Leben zu halten, die nicht neu entwickelt, sondern statt dessen nur so angepasst werden müssen, dass sie die Daten in Übereinstimmung mit vorher festgelegten strukturellen Einschränkungen erzeugen oder aufnehmen können.
Am 4. Tag haben Sie gelernt, dass eine DTD eine Art von Schema ist. Die Ansätze, die Sie heute und morgen untersuchen werden, stellen auch Schemata dar. All diese Ansätze haben Vor- und Nachteile. DTDs sind relativ gut für das geeignet, wofür sie gestaltet wurden, aber im Vergleich zu anderen Schemata kranken sie an ernsthaften Unzulänglichkeiten. Gestern haben Sie zum Beispiel gesehen, wie man DTDs als Mittel einsetzt, um die Einheitlichkeit von Dokumentstrukturen zu erzwingen. Aber um dies zu erreichen, mussten Sie eine völlig neue Sprache lernen, die nicht der XML-Syntax folgt. Das ist ein schwerer Nachteil für diejenigen, die diese Technologien neu erlernen. Deshalb ist einer der Vorteile der Ansätze zum Schema, die Sie heute und morgen kennen lernen werden, dass Sie viele der grundlegenden Syntax- und Strukturregeln bereits kennen, weil sie mit dem Erstellen von wohl geformtem XML zu tun haben. Anders gesagt, die Schemasprachen, die Sie heute und am 6. Tag erlernen werden, drücken sich mit der XML-Syntax aus.
Sowohl XML als auch DTDs können mithilfe der Grammatik der Erweiterten Backus-Naur-Form (EBNF) beschrieben werden, um ihre jeweilige Syntax zu erklären, aber sie drücken sich mit einem jeweils anderen Dialekt oder Vokabular aus. DTDs verwenden die EBNF-Grammatik, während andere XML-Schemata die XML-Syntax verwenden (einschließlich der Elemente und Attribute, Anfangs- und Schluss-Tags usw.), was sie zu eigenständigen XML-Dokumenten macht.
Die EBNF-Grammatik wurde von Wissenschaftlern in den späten 60er Jahren entwickelt, um die Syntaxregeln für Computersprachen und andere exakte Sprachstrukturen auf strikte Art ausdrücken zu können. Nicklaus Wirth, der Entwickler der Sprachen Pascal und Modula 2, sorgte dafür, dass der Gebrauch von EBNF allgemein üblich wurde. Ein Beispiel ist die folgende einfache Anweisung, ausgedrückt in EBNF, die die XML-Syntax zusammenfasst.
[1] dokument ::= prolog element Versch*Diese einfache Anweisung kann man so interpretieren: »Ein XML-Dokument muss einen Prolog einschließen, dem ein Element folgt, dem null oder mehrere verschiedene Elemente folgen.«
Wir haben schon auf eines der wichtigsten Mankos des DTD-Ansatzes hingewiesen, obwohl es noch andere gibt, iInsbesondere die folgenden:
Aus all diesen Gründen ist eine Alternative zur DTD wünschenswert, die sich in XML- Syntax ausdrücken lässt. Es ist eines der Ziele der Arbeitsgruppe zum XML-Schema beim W3C, eine solche Alternative zum Standard zu machen. Am 2. Mai 2001 legte das W3C die abschließende Form für einen Standard vor, der als XML Schema Definition (XSD) Language bekannt wurde, die Sie am 6. Tag genauer untersuchen werden. Die Aufgabe dieser Arbeitsgruppe lag in der Verantwortung für die Zusammenführung mehrerer Eingaben, die von verschiedenen Interessengruppen und kommerziellen Anbietern gemacht worden waren. XDR, das Thema der heutigen Lektion, gründet auf einer solchen Eingabe an das W3C: XML-Data. Um dies klar zu machen: XML-Data ist der vollständige Name der Schemasprache von Microsoft und XML-Data Reduced (XDR) ist eine Teilmenge der vollständigen Empfehlung. Auch wenn das W3C XSD zur Norm erhoben hat, wird XDR weiterhin von einer großen Anzahl von Anwendungen verwendet. Viele Produkte - nicht nur die von Microsoft - unterstützen XDR. Es ist daher sinnvoll, die Syntax für DTD, XDR und XSD kennen zu lernen. Tools wie der XML-Spy (http:// www.xmlspy.com) können ein Schema von einem Dialekt in einen anderen konvertieren und verwenden dabei einen Sprachumwandlungsansatz. Diese Konvertierung kann einem viel Zeit ersparen. Sie müssen aber das Resultat nach der Umwandlung trotzdem überprüfen, um sicherzugehen, dass die Datentypen und andere Dinge korrekt gehandhabt wurden.
Die Arbeitsgruppe beschäftigte sich mit folgenden Eingaben:
Da das W3C auf Grundlage dieser Eingaben eine Lösung fand, die man als pragmatisch bezeichnen kann, ist es wichtig zu verstehen, wo XSD herkommt. Die vorhergehende Aufzählung bietet einen groben Überblick über die Ansätze und Beteiligten, die an einer abschließenden Lösung mitgearbeitet haben. XSD soll diese abschließende Lösung sein. Es werden aber immer noch eine ganze Reihe von Lösungen veröffentlicht, die andere Schemasprachen verwenden. Die Sprache XML-Data Reduced etwa ist integraler Bestandteil von BizTalk, einer führenden Technologie für E-Commerce, E-Business, E- Procurement, die Verwaltung von Lieferketten usw.
Sie fragen sich vielleicht, ob es wichtig ist, mehr als eine Schemasprache zu kennen, oder ob eine der anderen vorzuziehen sei. Wäre XSD der abschließende seit Jahren implementierte Standard für das E-Business, dann würde es vielleicht genügen, diese Sprache zu kennen. Das ist derzeit aber bei weitem nicht so. Die Unterstützung von XSD ist immer noch etwas eingeschränkt. Deshalb wurden viele bestehende Systeme erstellt, die die Schemata DTD und XDR oder andere Ansätze verwenden. Microsoft hat sich darauf verlegt, sowohl seine eigene Schemasprache XDR zu unterstützen, als auch XSD, aber es bleibt eine Tatsache, dass die Pioniere im E-Commerce, geschäftliche Nutzer, die Regierung und die Betreiber von Lösungen für das Erziehungswesen, bereits Millionen für den Erwerb von Lösungen investiert haben, die auf DTDs, XDR-Schemata und einige andere Standards zurückgreifen. Es wird einige Zeit dauern, bis wirklich weltweit ein einziger Ansatz bezüglich der Gültigkeitsbeschränkung bei XML-Dokumenten zum Standard wird. Es ist ratsam, wenigstens eine allgemeine Kenntnis von der Struktur mehrerer Schemata zu haben.
Wenn Sie nur eine Schemasprache gründlich erlernen wollen, gibt es Tools, die Ihnen bei der Konvertierung in andere Schemata helfen. Darunter befinden sich die kommerziellen Produkte XML Authority und XML Spy. Darüber hinaus gibt es bei Anbietern manchmal Utilities für die Umwandlung. Microsoft bietet ein frei erhältliches Programm an, welches XDR-Schemata in XSD-Schemata umwandelt. Sie müssen sich jedoch darüber im Klaren sein, dass das Übersetzen von Schemata von einem Dialekt in einen anderen fehleranfällig ist. Wie bei jedem automatisierten Prozess zur Code-Erzeugung müssen Sie das Resultat einer Konvertier-Routine möglicherweise noch ausführlich überarbeiten, um zu den gewünschten Ergebnissen zu kommen.
Die Schema-Arbeitsgruppe beim W3C erstellte Anfang 1999 ein Dokument zu den Anforderungen der XML Schema Definition (XSD). Inzwischen ist die Spezifikation für XSD eine Empfehlung. Die Unterschiede zwischen XDR und XSD werden Ihnen klar werden, sobald Sie das Material der heutigen und morgigen Übungen durchgearbeitet haben.
Der Dialekt XML-Data Reduced (XDR) ist eine Teilmenge der vollständigen Spezifikation XML-Data, die Microsoft beim W3C eingab. Am 4. Tag haben Sie ein Validier-Script heruntergeladen und angewendet, das den XML-Parser von Microsoft (MSXML) instantiiert. Die Schema-Implementierung in diesem Parser gründet auf der Spezifikation zur Sprache XML-Data Reduced, auch wenn der Parser ebenso DTDs und XSD-Schemata validiert. Der MSXML ist zwar äußerst umfassend, hat aber dennoch einige Grenzen, wozu gehört, dass er die Vererbung und andere objektorientierten Gestaltungsfeatures nicht unterstützt. Diese Punkte werden morgen genauer besprochen. Darüber hinaus wollen Sie bestimmt sichergehen, dass Ihre Wahl der Schemasprache keine Plattformprobleme mit der Hardware oder dem Betriebssystem aufwirft, auch wenn viele Parser von SUN, Apache, IBM u.a. eine Reihe von Schemasprachen unterstützen. Glücklicherweise gibt es, wie bereits erwähnt, Parser und Optionen zur Validierung für fast alle Plattformen und Betriebssysteme.
Für die Verwendung von XDR zur Validierung eines XML-Dokuments ist ein Parser erforderlich, der XML-Data Reduced versteht. Der Parser MSXML von Microsoft ist gegenwärtig die beste verfügbare Wahl. Zur Zeit der Drucklegung dieses Buchs ist die neueste Version des MSXML die Version 4, die sowohl XSD als auch XDR unterstützt.
Wie DTDs definieren XDR-Schemata die Elemente, die in einer XML-Instanz auftreten können, sowie alle Attribute, die bestimmten Elementen zugeordnet werden können. Um der Gültigkeit genüge zu tun, muss jedes Element in einer Instanz in einem entsprechenden Schema deklariert werden. Ist ein Element im Schema nicht vorhanden, dann ist es notwendigerweise auch nicht in einer gültigen, dem Schema zugehörigen XML-Instanz vorhanden.
Die Beziehungen zwischen Elementen werden ebenfalls in einem XDR-Schema definiert; daher werden alle abgeleiteten Elemente, die bestimmte Elemente enthalten, deklariert und näher hinsichtlich ihres eigenen Inhalts definiert. Das schließt die Sequenz mit ein, in der abgeleitete Elemente zusammen mit einer zulässigen Anzahl abgeleiteter Elemente auftreten können.
Das Schema bestimmt, ob ein Element leer ist oder Textdaten, weitere Elemente oder eine beliebige Kombination aus Text und anderen Elementen enthält. Das Schema kann auch Standardwerte für Attribute festlegen.
Sie beginnen Ihre Untersuchung von XDR mit der Frage, wie es Bedingungen für Elemente und Attribute in Ihrem XML-Dokument durchsetzt. Diese Bedingungen werden mithilfe von Elementen und Attributen programmiert, die zum Dialekt XDR gehören. Das kann verwirrend werden. Ein Element oder Attribut aus einer Sprache (XDR) wird verwendet, um die Betriebsregeln zu definieren, mit denen die Einschränkungen einer anderen - Ihrer Auszeichnungssprache - festgelegt werden.
XDR-Schemata sind XML-Instanzen und als solche bestehen sie aus XML-Elementen und -Attributen. Die Sprache XDR umfasst bestimmte vordefinierte XML-Elemente und - Attribute, die mit dem Schema übereinstimmen, das alle Instanzen des XDR-Schemas validiert. Mit anderen Worten heißt das: Weil XDR-Schemata wohl geformte und gültige XML-Dokumente sind, müssen sie einem Regelsatz folgen, den das Schema für die Schemasprache aufstellt. Trotzdem sind XDR-Schemata erweiterbar, mehr dazu erfahren Sie später.
Da XDR-Schemata mit einem Schema validiert werden, werden bei ihrer Erzeugung bestimmte Regeln oder Bedingungen eingebaut. Zum Beispiel ist das Wurzelelement eines XDR-Schemas immer das Element Schema und es enthält immer ein xmlns-Attribut, das den Standard-Namensraum für das Schema-Element und die Elemente, die es enthält, spezifiziert.
Sie haben bei mehreren Gelegenheiten den Begriff Namensräume angetroffen und fragen sich vielleicht, was das ist. Sie werden sie am 8. Tag im Detail kennen lernen, aber es wird in diesem Buch noch vorher häufig Bezug auf sie genommen. Kurz gesagt ist ein Namensraum eine Methode, ein Element oder Attribut in ihrer Zugehörigkeit zu einem vorgeschriebenen Satz zu identifizieren oder zu qualifizieren. Die Elemente und Attribute einer bestimmten Schemasprache sind auf den Satz begrenzt, der für diese Schemasprache beschrieben wird.
Das bedeutet, dass Sie normalerweise ein Dokument der XML-Instanz schreiben, das einem Schemadokument zugeordnet ist, das noch einem weiteren Schema entsprechen kann. Glücklicherweise müssen Sie sich nur mit zwei von diesen drei Dokumenten beschäftigen: Ihrem XML-Dokument und dem Schema, mit dem das Dokument validiert wird. Heute geht es in der Einleitung um Teile der Syntax und die Verwendung der Schemasprache XML-Data Reduced. Sie werden die Gelegenheit erhalten, einige einfache XDR-Schemata zu erstellen und sie mithilfe des MSXML-Parsers zu validieren. Ziel ist, dass Sie einfache Schemata erzeugen können, einen Teil der Syntax von typischen Elementen und Attributen in XDR verstehen und wissen, wohin Sie sich wenden müssen, wenn Sie mehr Information brauchen, als Ihnen heute angeboten wird.
Betrachten Sie das einfache XML-Dokument in Listing 5.1. Sie erinnern sich vielleicht, dass dieses Dokument zuerst am 4. Tag vorgeführt und mit den Konzepten, die Sie zu den DTDs lernten, modifiziert wurde. Heute verfolgen wir den gleichen Lernprozess und verwenden eine Reihe von XDR-Schemata, um das Dokument in seiner Entstehung zu validieren. Erzeugen Sie das Dokument in Listing 5.1 mit einem Texteditor und speichern Sie es unter nachricht01_5.xml.
Listing 5.1: Ein einfaches XML-Dokument, das auf ein XDR-Schema verweist - nachricht01_5.xml
1: <?xml version="1.0"?>
2: <notiz xmlns = "x-schema:nachricht01_5.xdr">Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen</notiz>
Wenn Sie Ihr XML-Dokument mit einem Editor erzeugt haben, der fortlaufend validiert, ist dieses Dokument ungültig, weil die XDR-Datei noch nicht existiert; Sie werden sie als Nächstes erstellen. Wenn Sie einen einfachen Texteditor verwenden, ist das kein Problem.
Das Wurzelelement des Dokuments nachricht01_5.xml schließt ein xmlns-Attribut mit dem Wert "x-schema:nachricht01_5.xdr" ein. Das zeigt einem validierenden Prozessor, dass das Schema, das dem Standard-Namensraum zugeordnet ist, bei diesem XML- Dokument in einer Datei namens nachricht01_5.xdr abgelegt ist. Derzeit ist der MSXML- Parser der einzig brauchbare XDR-Parser.
Sie werden ein XDR-Schema für dieses Dokument erzeugen, das ein Wurzelelement Schema enthält sowie ein ElementType-Element, um das notiz-Element in Ihrer XML- Instanz zu beschränken.
Das Wurzelelement Schema in einem XDR-Schema enthält die Elemente und Attribute, die allen Beschränkungsregeln für eine XML-Dokument-Instanz entsprechen. Die Definitionen in einem XML-Schema sind in dem auf oberster Ebene liegenden Element Schema enthalten. Die Definition des Schema-Elements muss aus dem Namensraum xmlns="urn:schemas-microsoft-com:xml-data" stammen. Die Namensraum-Deklaration ist eine Verarbeitungsanweisung aus XML.
Das Schema-Element in einem Dokument des XML-Schemas sollte auch Namensraum- Deklarationen für andere Schemata enthalten, wie den Namensraum, der die eingebauten Datentypen für das XML-Schema definiert. Datentypen werden verwendet, um Datenstrings auf vordefinierte Syntaxsätze zu begrenzen, wie etwa Daten, numerische Werte, Fließkommazahlen usw. Der Datentyp-Namensraum für ein XDR-Schema ist xmlns:dt="urn:schemas-microsoft-com:datatypes".
Deshalb sieht das Wurzelelement Schema eines XDR-Schemas fast immer so aus:
<Schema name="meinschema" xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<!--alle anderen Deklarationen sind Teil des Wurzelelements-->
</Schema>
Die Elementtypen ElementType, AttributeType, Entity und Notation werden verwendet, um die Hauptkomponenten der Struktur der entsprechenden XML-Dokument-Instanzen zu deklarieren. Anders gesagt, das ElementType-Element etwa ist das vordefinierte Element in XDR, das verwendet wird, um die Bedingungen zu definieren, die einem Element in der entsprechenden XML-Instanz auferlegt sind.
Das Element ElementType in einem XDR-Schema hat die folgende Syntax:
<ElementType
content="{ empty | textOnly | eltOnly | mixed} "
dt:type="datatype"
model="{ open | closed} "
name="idref"
order="{ one | seq | many} ">
Jedes der Attribute hat eine besondere Bedeutung hinsichtlich des Elements, das beschrieben wird. Das content-Attribut ist ein Indikator dafür, ob der Inhalt des zu deklarierenden Elements leer sein muss, nur Textdaten oder nur andere Elemente enthalten darf oder ob er ein gemischtes Inhaltsmodell haben kann. Das Attribut dt:type deklariert den Datentyp für das Element. Die gültigen Datentypen - Datum, Zahl, Zeit usw. - werden später an diesem Tag genauer besprochen. Das model-Attribut ist ein Indikator dafür, ob der Inhalt nur das enthalten darf, was im Inhaltsmodell definiert ist oder ob Inhalt vorhanden sein darf, der im Modell nicht spezifiziert wurde. Wird das Modell als offen definiert, kann das Element zusätzliche Elemente oder Attribute einschließen, die nicht ausdrücklich im Inhaltsmodell deklariert wurden. Wenn das Modell als geschlossen definiert ist, darf das Element keine Elemente enthalten und keinen gemischten Inhalt einschließen, der nicht im Inhaltsmodell spezifiziert wurde. DTDs verwenden ein geschlossenes Modell. Das Attribut name ist erforderlich, um das Element zu identifizieren, das definiert wird. Beachten Sie, dass der Name in einem Element Element abgelegt ist, wenn dieser Elementtyp als Ableitung deklariert wird. Beispiele hierfür folgen in Kürze. Das Attribut order stellt die Reihenfolge der abgeleiteten Elemente her. Der Wert one gestattet nur den Einschluss eines Elements aus einem Elementsatz, seq macht es erforderlich, dass die Elemente in einer bestimmten sequenziellen Reihenfolge auftreten und many erlaubt, dass Elemente auftreten oder nicht und zwar in beliebiger Reihenfolge. Diese Attribute werden in Tabelle 5.1 zusammengefasst.
In einem XDR-Schema kann das Element, das definiert wird, zusätzliche Elemente oder Attribute einschließen, die nicht ausdrücklich im Inhaltsmodell deklariert wurden, wenn das Modell als offen definiert wird. Wird es als geschlossen definiert, darf das Element keinen gemischten Inhalt oder Elemente enthalten, die nicht im Inhaltsmodell spezifiziert sind.
Listing 5.2 zeigt das Schema nachricht01_5.xdr. Erzeugen Sie dieses Dokument mit Ihrem Texteditor und speichern Sie es unter nachricht01.xdr. Sie können der angefügten Analyse folgen, die Zeile für Zeile vorgeht.
Listing 5.2: Ein XDR-Schema zum Validieren des Dokuments nachricht01_5.xml, abgespeichert unter nachricht01_5.xdr
1: <?xml version="1.0"?>
2: <Schema
3: name="nachricht01_5"
4: xmlns="urn:schemas-microsoft-com:xml-data"
5: xmlns:dt="urn:schemas-microsoft-com:datatypes">
6: <ElementType name="notiz" model="closed" content="textOnly"
dt:type="string"/>
7: </Schema>
Betrachten Sie das Dokument in Listing 5.2 Zeile für Zeile. Da ein XDR-Schema eine XML-Instanz ist, wird es in Zeile 1 als solche deklariert. Das Start-Tag für das Wurzelelement Schema des XDR-Schemas beginnt in Zeile 2. In diesem Fall enthält das Start-Tag drei Attribute. Das name-Attribut in Zeile 3 dient dazu, den Namen zu dokumentieren, den Sie diesem speziellen Schema gegeben haben. Dabei handelt es sich um ein optionales Attribut; es stellt jedoch einen guten Programmierstil dar, es einzuschließen.
In Zeile 4 wird der Standard-Namensraum für das XDR-Schema mit einer URI ("urn:schemas-microsoft-com:xml-data") definiert, die dem validierenden MSXML-Parser anzeigt, dass die Sprache XML-Data Reduced verwendet wird. Das ist die URI, die bei einem XDR-Schema immer angegeben wird. Der Standard-Namensraum wird allen Elementen zugewiesen, die im Wurzelelement Schema enthalten sind, es sei denn, ein Proxy auf einen anderen Namensraum deklariert sie anders (siehe Tag 8 für Näheres zu den Namensräumen). Der Uniform Resource Identifier (URI) für den XML-Namensraum dient nur als eindeutige Benennung für den untergeordneten Namensraum, den er identifiziert. Ein URI ist nur eine Reihe von Zeichen, die verwendet wird, um Namen zu unterscheiden. Sie wissen, URL ist die Abkürzung für Universal Resource Locator. Ein URL dient als globale Adresse für eine entfernte Ressource oder ein entferntes Dokument. Namensraum-Deklarationen können einen URI-String enthalten, der einem URL ähnelt, weil er aussieht wie eine Webadresse; es handelt sich hierbei aber nur um eine Methode, um sicherzustellen, dass der Namensraum einmalig ist. Mehr dazu erfahren Sie an Tag 8. URIs können auch Universal Resource Names, URNs, enthalten. URNs sind Namen, die auch einmalig sein sollen; normalerweise ähneln sie jedoch keinen URLs.
Eine URI, die in einem XML-Namensraum verwendet wird, ist nur eine Benennung oder ein String von Zeichen, der den Namensraum eindeutig identifiziert. Es ist egal, worauf eine URI verweist, wenn sie dies überhaupt tut. Sie dient nur als eindeutiger Name in der Auflistung der Namen von Elementtypen und Attributstypen, die sie charakterisiert.
Zeile 5, die letzte Zeile im Start-Tag des Wurzelelements Schema, deklariert einen Namensraum für die Datentypen, die in diesem Schema deklariert werden. Das weist den Parser an, jedes Element im gesamten übrigen XDR-Schema, das ein dt:type-Attribut enthält, auf Grundlage der Regeln zum Datentyp, die Microsoft aufstellte, zu validieren. Mehr zu den Datentypen folgt später an diesem Tag.
Zeile 6 liefert die Deklaration für das einzige Element in der XML-Instanz, nachricht01_5.xml, dem notiz-Element.
<ElementType name="notiz" model="closed" content="textOnly" dt:type="string"/>
Zeile 6 enthält auch die Attribute, die das notiz-Element näher beschreiben. Das Attribut name stellt den Namen des Elements in der XML-Instanz dar, die deklariert wird. In diesem Fall benennt das name-Attribut das notiz-Element. Das Attribut model hat den Wert closed, was anzeigt, dass ein entsprechendes XML-Dokument nur Elemente enthält, die in diesem bestimmten Schema deklariert wurden. Mit anderen Worten, enthielte die XML-Instanz Elemente, die nicht in diesem Schema deklariert werden, würde das Dokument als ungültig betrachtet werden. Das Attribut content zeigt an, dass das Element notiz nur Textdaten enthält, was auf Bedeutung des Werts textOnly hinweist. Später erfahren Sie mehr zu den anderen Werten dieses Attributs. Das Attribut type gehört zum Namensraum Datentyp, das der Proxy dt: anzeigt. In diesem Fall ist der gültige Datentyp für das Element notiz ein string. Dies entspricht dem Datentyp cdata in einer DTD.
Verwenden Sie das Script, das Sie gestern heruntergeladen haben, um zu beweisen, dass die XML-Instanz nachricht01_5.xml wohl geformt und gültig ist. Abbildung 5.1 zeigt die zu erwartenden Resultate dieses Tests.
Das Element ElementType gestattet die Deklaration mehrerer vordefinierter Attribute. Diese werden in Tabelle 5.1 zusammengefasst.
Abbildung 5.1: Die zu erwartenden Resultate einer Anwendung des Scripts vom MSXML-Parser auf nachricht01_5.xml
Tabelle 5.1: Vordefinierte Attribute für das Element ElementType
Wie bei DTDs müssen eingebettete Elemente in einem XDR-Schema deklariert und definiert werden. In Listing 5.3 wird das Dokument nachricht01_5.xml so modifiziert, dass es ein eingebettetes Element enthält, nachricht, sowie eine Ableitung des Wurzelelements notiz. Erstellen Sie ein Dokument (oder modifizieren Sie eines Ihrer vorhandenen Dokumente) mit Ihrem Texteditor, um eine XML-Instanz zu erstellen, die derjenigen in Listing 5.3 entspricht.
Listing 5.3: Ein eingebettetes Element wird eingefügt - nachricht02_5.xml
1: <?xml version = "1.0"?>
2: <notiz xmlns = "x-schema:nachricht02.xdr">
3: <nachricht>Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen </nachricht>
4: </notiz>
Listing 5.4 zeigt ein XDR-Schema, mit dem nachricht02_5.xml validiert wird. Erzeugen Sie dieses XDR-Schema und speichern Sie es als nachricht02_5.xdr.
Listing 5.4: Ein XDR-Schema für nachricht02_5.xml - nachricht02_5.xdr
1: <?xml version="1.0"?>
2: <Schema
3: name="Schema ohne Titel"
4: xmlns="urn:schemas-microsoft-com:xml-data"
5: xmlns:dt="urn:schemas-microsoft-com:datatypes">
6: <ElementType name="notiz" model="closed" content="eltOnly">
7: <element type="nachricht"/>
8: </ElementType>
9: <ElementType name="nachricht" model="closed" content="textOnly"
dt:type="string"/>
10: </Schema>
Die Zeilen 1-5 sind in diesem XDR-Schema nahezu die gleichen wie bei nachricht01_5.xdr. Zeile 3 jedoch bezieht sich auf den Namen dieses Schemas als »Schema ohne Titel«. Der Name ist optional.
6: <ElementType name="notiz" model="closed" content="eltOnly">
7: <Element type="nachricht"/>
8: </ElementType>zeigen an, dass das Element notiz nur andere Elemente enthält (content="eltOnly"). Das nachricht-Element wird als Ableitung des notiz-Elements deklariert.
Die Zeile 9 definiert, dass das nachricht-Element den string-Inhalt textOnly hat. Der Wert textOnly bezieht sich auf den Inhalt des Elements, nicht auf den Datentyp dieses Elements. Dieser Unterschied ist manchmal verwirrend, weil der Begriff textOnly eine Qualifizierung des Datentyps impliziert, den der String umfasst. Er bedeutet aber nur, dass das Element Daten (eines beliebigen Typs) enthält und keine anderen Elemente.
Beachten Sie, dass das nachricht-Element in diesem Schema zweimal auftritt, einmal in Zeile 7, wo es als Ableitung des notiz-Elements deklariert wird, und dann wieder in Zeile 9, wo es vollständig definiert wird. Als Sie gestern DTDs erstellten, hatten Sie auf ähnliche Weise mit abgeleiteten Elementen zu tun, Sie haben sie zuerst deklariert und dann definiert.
Das element-Element ist in einem XDR-Schema eine gültige Ableitung des Elements ElementType. Es können in einem ElementType-Element abgeleitete Elemente eingefügt werden. Diese werden in Tabelle 5.2 zusammengefasst.
Beschreibt die Reihenfolge und Frequenz von Elementen, die miteinander in Beziehung stehen | |
Tabelle 5.2: Abgeleitete Elemente des Elements ElementType
Sie werden sich aus Ihren Studien der letzten Tage daran erinnern, dass leere Elemente in einer XML-Instanz diejenigen sind, die keine Daten oder anderen Elemente enthalten. Leere Elemente können immer noch Attribute enthalten, aber zwischen dem Start- und dem Schluss-Tag eines leeren Elements enthalten sie nichts. Das heißt nicht, dass leere Elemente keine Informationen transportieren. In Wirklichkeit haben viele davon Attribute, die Detailinformationen tragen; andere dienen als Platzhalter. In beiden Fällen haben sie einen Informationswert, ohne einen Inhalt zu haben. Auf Grund der Tatsache, dass zwischen beiden Tags nichts abgelegt ist, erlaubt XML eine abgekürzte Syntax für leere Elemente, die so aussieht:
<element_name />
Das Schluss-Tag wird eliminiert und das terminierende Slash-Zeichen in das Start-Tag des Elements eingebaut.
Aufbauend auf der Datei nachricht02_5.xml fügen Sie als Nächstes ein leeres anzahl- Element in die Instanz ein. Sie werden sehen, wie man in einem XDR-Schema eine Beschränkung für dieses Element eingibt.
Listing 5.5 zeigt eine XML-Instanz, die in Zeile 3 ein leeres anzahl-Element enthält.
Listing 5.5: Ein XML-Dokument mit einem leeren Element - nachricht03_5.xml
1: <?xml version = "1.0"?>
2: <notiz xmlns="x-schema:nachricht03_5.xdr">
3: <anzahl />
4: <anzahl>Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen</nachricht>
5: </notiz>
Wie Sie sehen, ist die Instanz immer noch recht einfach. Auch wenn es scheinen mag, dass das Einfügen des leeren anzahl-Elements nicht viel an Wert hinzufügt, werden Sie später die Instanz modifizieren können und anzahl zu einem Attribut des nachricht-Elements machen statt eines Elements. Wenn Sie XML-Dokumente und Schemata erzeugen, ist es oft recht schwierig, zu entscheiden, ob ein bestimmtes Datenobjekt besser als Element oder als Attribut eingegeben werden soll. Sie haben dies am zweiten Tag abwägen können, als Sie wohl geformte Dokument-Instanzen erstellt haben. Es gibt keine absoluten Regeln, die diktieren, wann ein Wert ein Element sein soll und wann ein Attribut. Diese Entscheidung liegt weitgehend bei Ihnen. Einige Dinge, die Sie bedenken sollten, drehen sich um die Nützlichkeit von Elementen und Attributen bei Auszeichnungen. Elemente tragen zum Beispiel normalerweise Informationen, die Daten von Wert sind, während Attribute häufig beigefügte Informationen tragen - wie etwa Metadaten -, die dazu dienen, Elemente auf die gleiche Art genauer zu bestimmen wie Adjektive ein Substantiv genauer definieren. Elemente können abgeleitete Elemente haben, Attribute dagegen nicht.
Nun programmieren Sie anzahl als leeres Element, um die Syntax für diese Art von Einschränkung in XDR zu sehen. Später werden Attribute hinzugefügt werden, die das Element qualifizieren.
Um das anzahl-Element im XDR-Schema auf ein leeres Inhaltsmodell zu beschränken, müssen Sie das Element als leer deklarieren, indem Sie für diese Deklaration das Attribut content="empty" für das Element ElementType setzen. Sie erinnern sich, dass empty einer der zur Verfügung stehenden Werte für das content-Attribut ist. Die Syntax für die neue Deklaration und die Definition schließt ein element-Element ein, das dem ElementType- Element notiz hinzugefügt werden muss, um anzuzeigen, dass das anzahl-Element im Wurzelelement enthalten ist. Die Syntax sieht folgendermaßen aus:
<element type="anzahl"/>
Dann muss ein neues ElementType-Element eingefügt werden, um das neue Element als leer zu deklarieren. Das sieht so aus:
<ElementType name="anzahl" model="closed" content="empty"/>
Das vollständige XDR-Schema in Listing 5.6 validiert nun das Dokument nachricht03_5.xml. Erzeugen Sie dieses Schema und speichern Sie es unter nachricht03_5.xdr im gleichen Unterverzeichnis ab wie das Dokument der XML-Instanz. Dann können Sie das Dokument oder auch die übrigen heutigen Beispiele validieren, indem Sie das XML-Dokument wie bereits beschrieben in den XML-Validierer laden.
Listing 5.6: Ein XDR-Schema, das eine Instanz mit einem Emptyelement validiert
1: <?xml version="1.0"?>
2: <Schema
3: name="Schema ohne Titel"
4: xmlns="urn:schemas-microsoft-com:xml-data"
5: xmlns:dt="urn:schemas-microsoft-com:datatypes">
6: <ElementType name="notiz" model="closed" content="eltOnly" order="seq">
7: <element type="anzahl"/>
8: <element type="nachricht"/>
9: </ElementType>
10: <ElementType name="anzahl" model="closed" content="empty"/>
11: <ElementType name="nachricht" model="closed" content="textOnly"
dt:type="string"/>
12: </Schema>
In den Zeilen 6-9 wird das notiz-Element deklariert, das nur Elemente enthält, insbesondere anzahl, dem sequenziell nachricht folgt. Das order-Attribut des notiz-Elements hat den Wert seq, der anzeigt, dass die Anordnung der abgeleiteten Elemente sequenziell ist. Wie bereits erwähnt, kann das order-Attribut nur die Werte one, seq oder many haben.
Im vorigen Beispiel haben Sie die Anzahl der Nachrichten als leeres Element deklariert. Das gab Ihnen die Gelegenheit, die Syntax für die Deklaration leerer Elemente bei XDR kennen zu lernen, aber der Wert dieser Kodierung ist im Kontext des Nachrichtenszenarios, das angewendet wird, fraglich. Im nächsten Beispiel werden Sie das leere anzahl-Element entfernen und durch ein anzahl-Attribut für das Element nachricht ersetzen. In diesem Fall wenden Sie einen guten Programmierstil an, wenn Sie ein Element, das selbst keinen besonders hohen Datenwert enthält, in ein Attribut umwandeln, das besser dazu geeignet ist, das Element, auf das es sich bezieht, zu qualifizieren. Das ist ein gutes Beispiel, wie ein Attribut in etwa einem Adjektiv ähnelt, das ein Substantiv modifiziert (in dem Fall ein Element). Beim Entwickeln von XML- Lösungen werden Sie feststellen, dass dieses Herangehen nach dem Trial-and-Error- Verfahren auch dann nicht ausbleibt, wenn Sie vor dem Programmieren eine klare Analyse durchgeführt haben. Lassen Sie sich nicht entmutigen, wenn Sie Ihre Meinung darüber ändern müssen, ob ein Konstrukt besser als Element oder als Attribut eingegeben werden soll.
Listing 5.7 zeigt die XML-Instanz des Nachrichten-Dokuments mit einem Attribut, das dem nachricht-Element hinzugefügt wurde. Führen Sie in Ihrem Dokument die nötigen Modifikationen durch und speichern Sie das Resultat unter nachricht04_5.xml.
Listing 5.7: Ein Attribut wird dem Nachricht-Dokument hinzugefügt - nachricht04_5.xml
1: <?xml version="1.0"?>
2: <notiz xmlns="x-schema:nachricht04_5.xdr">
3: <nachricht anzahl="10">
4: Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen
5: </nachricht>
6: </notiz>
Da Sie der XML-Instanz ein Attribut hinzugefügt haben, müssen Sie dem XDR-Schema eine Beschränkung für dieses Attribut eingeben. Attribute werden im XDR-Schema mit dem Element AttributeType deklariert. Die Syntax für AttributeType lautet wie folgt:
<AttributeType
default="Standardwert"
dt:type="Datentyp"
dt:values="Aufzählungswerte"
name="idref"
required="{ yes | no} ">
Die Attribute des Elements AttributeType werden in Tabelle 5.3 zusammengefasst.
Tabelle 5.3: Die Attribute des Elements AttributeType
In Ihrer XML-Instanz gehört das Attribut zum nachricht-Element. Deshalb enthält das Element ElementType für das notiz-Element ein AttributeType- und ein attribute- Element, mit denen das neue Attribut deklariert und definiert wird. Die beiden treten immer paarweise auf, genau wie Deklarationen und Definitionen in der DTD-Syntax ein Paar bilden. Sehen wir uns nun das Element attribute an.
Das attribute-Element verweist auf einen deklarierten Attributstyp, der im Bereich des benannten ElementType-Elements auftritt. Die Syntax für dieses Element ist folgende:
<attribute
default="Standardwert"
type="Attributstyp"
[required="{ yes | no} "]>
Die gültigen Werte für das Element attribute sind ähnlich denen für das Element AttributeType, wie Sie beim Vergleich von Tabelle 5.3 und 5.4 sehen können.
Tabelle 5.4 fasst die gültigen Attribute für das Element attribute bei XDR zusammen.
Tabelle 5.4: Attribute für das Element attribute bei XDR
Als Nächstes modifizieren Sie das Schema nachricht03_5.xdr, um die Entfernung des leeren Elements und das Einfügen des anzahl-Attributs für das Element nachricht umzusetzen. Entfernen Sie zunächst die Zeilen 7-10 (die Deklaration und die Definition für das leere Element). Die Zeilen, die Sie ausschneiden, sehen so aus:
7: <element type="anzahl"/>
...
10: <ElementType name="anzahl" model="closed" content="empty"/>
Jetzt müssen Sie das nachricht-Element ElementType modifizieren. Es war zuvor leer, soll jetzt aber die Elemente AttributeType und attribute enthalten, um das neue Attribut anzahl zu deklarieren und zu definieren. Das sollte so aussehen:
<ElementType name="nachricht" model="closed" content="textOnly"
dt:type="string">
<AttributeType name="anzahl" dt:type="number" required="yes"/>
<attribute type="anzahl"/>
</ElementType>
Listing 5.8 zeigt das fertige XDR-Schema zum Validieren der Datei nachricht04.xml.
Listing 5.8: Attribute bei XDR-Schemata deklarieren und definieren - nachricht04_5.xdr
1: <?xml version="1.0" encoding="UTF-8"?>
2: <Schema
3: name="Schema ohne Titel"
4: xmlns="urn:schemas-microsoft-com:xml-data"
5: xmlns:dt="urn:schemas-microsoft-com:datatypes">
6: <ElementType name="notiz" model="closed" content="eltOnly">
7: <element type="nachricht"/>
8: </ElementType>
9: <ElementType name="nachricht" model="closed" content="textOnly"
dt:type="string">
10: <AttributeType name="anzahl" dt:type="number" required="yes"/>
11: <attribute type="anzahl"/>
12: </ElementType>
13: </Schema>
In den Zeilen 10 und 11 wird das Attribut anzahl für das nachricht-Element deklariert und definiert. Das Element AttributeType in Zeile 10 stellt fest, dass der Wert des anzahl-Attributs zum Datentyp number gehört, der eine Zahl spezifiziert, ohne die Ziffern zu begrenzen. Es können viele andere Arten von Zahlen spezifiziert werden, wie Sie heute noch sehen werden. Das anzahl-Attribut ist außerdem obligatorisch, gemäß dem Wert yes für das required-Attribut in Zeile 10.
In einem XDR-Schema können Sie die Datentypen von Elementen und Attributen spezifizieren. Es gibt viele Möglichkeiten validierter Datentypen bei XDR, wodurch es sich ideal für die Verwendung bei einer Vielzahl von Datenapplikationen eignet. Datentypen spezifizieren die Datenformatierung und geben XML-Prozessoren und Anwendungen die Möglichkeit, mit der Überprüfung des Datentyps eine Funktion für die Validierung von Bedingungen zu bekommen. Will man zum Beispiel sicherstellen, dass ein Datum ein Datenwert, ein Integer oder ein Textstring ist, kann dies mithilfe der Datentyp- Bedingungen erreicht werden. Damit Datentypen beim XDR-Schema spezifiziert werden können, muss der Namensraum für Datentypen bei Microsoft
xmlns:dt="urn:schemas-microsoft-com:datatypes">
in die Deklaration des Wurzelelements Schema eingeschlossen werden. Das Präfix dt: wird diesem Namensraum per Konvention zugeordnet und dient im gesamten XDR-Schema als Proxy, um die Komponenten von Datentypen zu identifizieren. Tabelle 5.5 zeigt eine Auflistung der Datentypen, die XDR-Schemata validieren. Die Liste von Datentypen, die XDR unterstützt, sowie zusätzliche Informationen zur Datentyp-Validierung finden Sie in der MSDN Library unter http://msdn.microsoft.com.
Tabelle 5.5: Datentypen für das XDR-Schema
In der Instanz nachricht haben Sie für das nachricht-Element ein Attribut namens anzahl gesetzt. Sie haben dieses Attribut als ein dt:type="number" eingegeben, was bedeutet, dass der Beschränkung mit einem beliebigen numerischen Wert Genüge getan ist. Angenommen, Sie wollen sicherstellen, dass der Wert, der für diese Zahl angegeben wird, ein Integer ist: Sie müssen das Attribut für den Datentyp entsprechend ändern. Auf der Grundlage der Informationen aus Tabelle 5.5 wird das neue Attribut so aussehen:
dt:type="int"
Im nächsten Beispiel werden Sie diese und einige andere Änderungen durchführen, um ein Gespür für die Vielfalt der Möglichkeiten zur Datentyp-Validierung bei XDR zu bekommen. Um sicherzugehen, dass Ihr Code in der gleichen Weise validiert wie im Beispiel, müssen Sie aufpassen, dass Sie die Attributswerte der Datei nachricht04_5.xml genauso formatieren wie hier gezeigt.
Beginnen Sie mit der Modifikation Ihres Dokuments nachricht03_5.xml und fügen Sie ihm im Start-Tag des Elements nachricht ein datum- und ein von-Attribut hinzu. Das Datum sollte im Format CCYY-MM-DD stehen, wobei CC für Jahrhundert, YY für Jahr, MM für Monat und DD für Tag stehen. Der Wert für das von-Attribut muss ein String sein. Hier sehen Sie eine Möglichkeit für diese Änderungen:
<nachricht anzahl="10" datum="2001-07-29" von="Kathy Shepherd">
Sie können auch andere Zahlen, Daten und Textstrings verwenden, aber geben Sie Acht, dass Sie der angegebenen Syntax genau folgen, damit die Daten-Validierung korrekt funktioniert. Wenn Sie in Ihrem XML-Dokument all die Änderungen durchgeführt haben, speichern Sie es unter nachricht05_5.xml, woraufhin Sie damit anfangen können, das XDR-Dokument zum Zweck der Validierung zu ändern. Listing 5.9 zeigt das vollständige XML-Dokument einschließlich der neuen Attribute.
Listing 5.9: Neue Attribute - nachricht05_5.xml
1: <?xml version="1.0"?>
2: <notiz xmlns="x-schema:nachricht05_5.xdr">
3: <nachricht anzahl="10" datum="2001-07-29" von="Kathy Shepherd">
4: Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen
5: </nachricht>
6: </notiz>
Das XDR-Schema muss den Attributswert für anzahl als integer validieren, den Wert für das datum-Attribut als date und den Wert, der dem Attribut von zugeordnet ist als string. Vergessen Sie nicht, auch einen Inhaltstyp für das nachricht-Element zu deklarieren, der nur Text als string enthält. Setzen Sie voraus, dass all diese Attribute obligatorisch sind. Sie haben jetzt alle notwendigen Informationen, um die Deklarationen und Definitionen für die neuen Attribute einzugeben und sicherzustellen, dass sie mit den bekannten Datentypen validieren. Die Deklarationen und Definitionen sollen so aussehen:
10: <AttributeType name="number" dt:type="int" required="yes"/>
11: <AttributeType name="date" dt:type="date" required="yes"/>
12: <AttributeType name="from" dt:type="string" required="yes"/>
13: <attribute type="anzahl"/>
14: <attribute type="datum"/>
15: <attribute type="von"/>
In Zeilen 13-14 wird festgelegt, dass diese Attribute zu dem Element gehören, das durch das Element ElementType deklariert wird und das sie enthält. Die Zeilen 10-12 setzen Datentypen fest. Da alle Attribute obligatorisch sind (gemäß den gezeigten Bedingungen), ist das Dokument nicht gültig, wenn eines davon im XML-Dokument fehlt.
Kommen wir zum vollständigen XDR-Schema, das die Datentypen korrekt validiert.
Listing 5.10: Ein XDR-Schema zur Validierung spezifischer Datentypen - nachricht05_5.xdr
1: <?xml version="1.0"?>
2: <Schema
3: name="nachricht"
4: xmlns="urn:schemas-microsoft-com:xml-data"
5: xmlns:dt="urn:schemas-microsoft-com:datatypes">
6: <ElementType name="notiz" model="closed" content="eltOnly">
7: <element type="nachricht"/>
8: </ElementType>
9: <ElementType name="nachricht" model="closed" content="textOnly"
dt:type="string">
10: <AttributeType name="anzahl" dt:type="int" required="yes"/>
11: <AttributeType name="datum" dt:type="date" required="yes"/>
12: <AttributeType name="von" dt:type="string" required="yes"/>
13: <attribute type="anzahl"/>
14: <attribute type="datum"/>
15: <attribute type="von"/>
16: </ElementType>
17: </Schema>
Die Zeile 9 enthält die Deklaration des Elements als textOnly-Element, das als String dargestellt wird. Beachten Sie, dass die Datentypen Integer (int), date und string jeweils den Attributen anzahl, datum und von in den Zeilen 10-12 entsprechen. Im gezeigten Listing sind sie auch als obligatorische Attribute eingegeben. Überprüfen Sie die Gültigkeit Ihres Dokuments nachricht05_5.xml, indem Sie es mit dem Validier-Script parsen, das Sie am 4. Tag heruntergeladen haben. Das zu erwartende Resultat sehen Sie in Abbildung 5.2.
Abbildung 5.2: Ein wohl geformtes und gültiges XML-Dokument, das den definierten Bedingungen für die Datentypen entspricht
Angenommen, Sie würden das nachricht05_5.xml-Dokument so modifizieren, dass es aussieht wie in Listing 5.11.
Listing 5.11: Ein Datentypfehler - nachricht06_5.xml
1: <?xml version="1.0"?>
2: <notiz xmlns="x-schema:nachricht05_5.xdr">
3: <nachricht anzahl="zehn" datum="2001-07-29" von="Kathy Shepherd">
4: Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen
5: </nachricht>
6: </notiz>
In Zeile 3 ist die Anzahl ausgeschrieben und nicht numerisch. Wenn Sie dieses durch das Validier-Script von Microsoft laufen lassen, erhalten Sie eine Fehlermeldung, ähnlich der in Abbildung 5.3 gezeigten, weil der Datentyp Integer keine alphabetischen Zeichen zulässt. Der Parser MSXML meldet, dass er den Wert zehn (in Zeile 3) nicht als Datentyp int parsen kann.
Abbildung 5.3: Eine MSXML-Fehlermeldung, die anzeigt, dass die XML-Instanz nicht allen Bedingungen entspricht, die durch das zugeordnete XDR-Schema definiert wurden
Für das XDR-Schema ist eine Methode erforderlich, um mehrere abgeleitete Elemente angeben zu können. Sie können spezifizieren, wie oft ein abgeleitetes Element in seinem Stammelement auftritt, indem Sie die Attribute minOccurs und maxOccurs des element- Elements verwenden. Hier sehen Sie die vollständige Syntax für das element-Element:
<element
type="Elementtyp"
[minOccurs="{ 0 | 1} "]
[maxOccurs="{ 1 | *} "] >
Sie haben element-Elemente kennen gelernt, die das obligatorische type-Attribut einschlossen. Dieses Attribut ordnet die Deklaration dem Element im Dokument der XML-Instanz zu.
Das minOccurs-Attribut kann nur die Werte "0" oder "1" haben, wie angegeben. Legt man fest, dass minOccurs="1" ist, dann heißt das, dass zumindest ein Auftreten des abgeleiteten Elements erforderlich ist. Ein Element mit dem Attribut minOccur="0" ist eigentlich ein optionales abgeleitetes Element.
Die einzig möglichen Werte für das Attribut maxOccurs sind "1" und "*". Wenn maxOccurs einen Wert von "*" hat, kann das Stammelement eine unbegrenzte Anzahl abgeleiteter Elemente enthalten.
Die Attribute minOccurs und maxOccurs haben den Standardwert "1". Ein Element, bei dem keines der beiden Attribute spezifiziert wird, verwendet diese Standardwerte und kann nur einmal in einem Inhaltsmodell auftreten.
In der nächsten Übung fügen Sie Ihrem XML-Dokument nachricht-Elemente hinzu, damit diese Bedingungen mit einem XDR-Schema überprüft werden können. In Listing 5.12 sehen Sie ein Beispiel dafür, wobei das Element notiz nun mehrere nachricht- Elemente enthält. Fügen Sie Ihrem eigenen XML-Dokument einige hinzu und speichern Sie das Ergebnis unter nachricht07_5.xml. Ihre Nachrichtelemente können andere Textdaten und andere Attributswerte enthalten, aber achten Sie darauf, dass Sie Ihre Instanz nicht dadurch ungültig machen, dass Sie zum Beispiel ein inkorrektes Datumformat verwenden.
Listing 5.12: Eine Nachrichten-Instanz mit mehreren abgeleiteten Elementen - nachricht07_5.xml
1: <?xml version="1.0"?>
2: <notiz xmlns="x-schema:nachricht07_5.xdr">
3: <nachricht anzahl="10" datum="2001-07-29" von="Kathy Shepherd">
4: Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen
5: </nachricht>
6: <nachricht anzahl="12" datum="2001-07-30" von="Greg Shepherd">
7: Ich brauche ein wenig Hilfe bei den Hausaufgaben
8: </nachricht>
9: <nachricht anzahl="14" datum="2001-07-31" von="Kristen Shepherd">
10: Bitte spiele heute Abend Scribble mit mir
11: </nachricht>
12: </notiz>
Nun haben Sie ein XML-Dokument mit mehreren nachricht-Elementen und können das XDR-Schema so modifizieren, dass es etwa angibt, ob mindestens ein nachricht-Element erforderlich, aber auch eine beliebige Zahl darüber hinaus akzeptabel ist. Nehmen Sie zum Beispiel an, dass dieses Dokument Teil eines Systems ist, das die Nachrichten aufzeichnet, die den ganzen Tag über eintreffen. Es kann mehrere Aufzeichnungen speichern, braucht aber wenigstens eine, um die Datenintegrität zu bewahren. Das Schema, das Sie als nächstes erzeugen werden, kann diese Bedingungen durch die Verwendung der Attribute minOccurs und maxOccurs durchsetzen.
Die Attribute minOccurs und maxOccurs sind im element-Element programmiert, das im ElementType-Element enthalten ist und wiederum dem Element im XML-Dokument zugeordnet ist, für das Sie die Bedingungen aufstellen wollen. Das erscheint ein wenig verwirrend, besagt aber nur, dass das notiz-Element in Ihrem XML-Dokument ein nachricht-Element enthält, dem Bedingungen für seine Auftrittsfrequenz auferlegt sind. Die Auftrittsbeschränkung, die das obige Szenario nahe legt, ist, dass zumindest ein gültiges nachricht-Element vorhanden sein muss, aber es können auch viele vorhanden sein, Hauptsache ist, dass dieses eine existiert. Die neue Bedingung sollte daher so aussehen:
<element type="nachricht" minOccurs="1" maxOccurs="*"/>
Fügen Sie diese Bedingungen Ihrem Dokument nachricht06_5.xdr hinzu und speichern Sie das Ergebnis unter nachricht07_5.xdr. Dann können Sie die Gültigkeitsbeschränkungen überprüfen, indem Sie das Dokument nachricht07_5.xml in das XML-Validier-Script von Microsoft laden. Listing 5.13 liefert das komplette XDR- Schema, das notwendig ist, um nachricht07_5.xml zu validieren.
Listing 5.13: Ein XDR-Schema mit den Attributen minOccurs und maxOccurs - nachricht07_5.xdr
1: <?xml version="1.0" encoding="UTF-8"?>
2: <Schema
3: name="name"
4: xmlns="urn:schemas-microsoft-com:xml-data"
5: xmlns:dt="urn:schemas-microsoft-com:datatypes">
6: <ElementType name="notiz" model="closed" content="eltOnly" order="seq">
7: <element type="nachricht" minOccurs="1" maxOccurs="*"/>
8: </ElementType>
9: <ElementType name="nachricht" model="closed" content="textOnly" dt:type="string">
10: <AttributeType name="anzahl" dt:type="int" required="yes"/>
11: <AttributeType name="datum" dt:type="date" required="yes"/>
12: <AttributeType name="von" dt:type="string" required="yes"/>
13: <attribute type="anzahl"/>
14: <attribute type="datum"/>
15: <attribute type="von"/>
16: </ElementType>
17: </Schema>
7: <element type="nachricht" minOccurs="1" maxOccurs="*"/>
gibt an, dass das notiz-Element zumindest ein (minOccurs="1") abgeleitetes nachricht-Element enthalten muss und darüber hinaus eine beliebig größere Anzahl (maxOccurs="*").
Auch wenn es für einige Anwendungen vorteilhaft wäre, ist es derzeit nicht möglich, die Bedingungen für minOccurs und maxOccurs auf andere Werte zu setzen als die definierten. Es ist daher zum Beispiel nicht möglich, mit diesen Attributen einen vorgegebenen Bereich für die Auftrittsfrequenz abgeleiteter Elemente einzustellen.
Wenn Sie den Datentyp string oder number (oder auch die Typen bin.hex und bin.base64) verwenden, können Sie für diese Attribute die minimale und die maximale Länge eingeben, die akzeptabel ist. Die Attribute minLength und maxLength gehören zum Namensraum für Datentypen von Microsoft und werden beim Parsen oder Verarbeiten des zugeordneten XML-Dokuments aktiviert. Diese Attribute werden mit der folgenden Syntax in AttributeType eingegeben:
<AttributeType name="idref"
dt:type="(Datentyp, entweder: string | number | bin.hex | bin.base64)"
required="(yes | no)"
dt:minLength="positiver Integer"
dt:maxLength="positiver Integer"/>
Nehmen wir an, Sie wollen die Größe des von-Attributs begrenzen, um den Gegebenheiten eines Datenfelds in einer Anwendung zu entsprechen, die am Ende die Informationen nutzen wird, die in Ihrem Nachrichtensystem auf XML-Grundlage gespeichert sind. Vielleicht verlangt Ihr Programm, dass das von-Feld nicht weniger als acht Zeichen enthält, aber auch nicht mehr als 15. Sie können die Beschränkungen minOccurs und maxOccurs verwenden, um diese Regel zu erzwingen.
Als Beispiel hierfür bietet Listing 5.14 zusätzliche Datentypbeschränkungen, die dem von- Attributswert auferlegt werden, sodass er mindestens acht und höchstens 15 Zeichen lang sein darf. Führen Sie in Ihrem XDR-Schema diese Änderungen durch und speichern Sie es dann unter nachricht08_5.xdr. Modifizieren Sie Ihre XML-Instanz, nachricht07_5.xml, die dem neuen XDR-Dokument zugeordnet wird, indem Sie die xmlns-Deklaration im notiz-Element dieser XML-Instanz ändern.
Listing 5.14: Beschränkungen der Länge für das von-Attribut - nachricht08_5.xdr
1: <?xml version="1.0" encoding="UTF-8"?>
2: <Schema
3: name="nachricht"
4: xmlns="urn:schemas-microsoft-com:xml-data"
5: xmlns:dt="urn:schemas-microsoft-com:datatypes">
6: <ElementType name="notiz" model="closed" content="eltOnly" order="seq">
7: <element type="nachricht" minOccurs="1" maxOccurs="*"/>
8: </ElementType>
9: <ElementType name="nachricht" model="closed" content="textOnly"
dt:type="string">
10: <AttributeType name="anzahl" dt:type="int" required="yes"/>
11: <AttributeType name="datum" dt:type="date" required="yes"/>
12: <AttributeType name="von" dt:type="string" required="yes"
13: dt:minLength="8"
14: dt:maxLength="15"/>
15: <attribute type="anzahl"/>
16: <attribute type="datum"/>
17: <attribute type="von"/>
18: </ElementType>
19: </Schema>
In den Zeilen 12-15 werden die Bedingungen aufgestellt, die dem von-Attribut im nachricht-Dokument der Instanz auferlegt werden. Insbesondere wird in Zeile 13 deklariert, dass der Wert für das von-Attribut mindestens acht Zeichen enthalten muss. Zeile 14 legt die maximale Länge für das von-Attribut auf 15 Zeichen fest.
Wenn Sie die Änderungen in Ihrem Dokument vorgenommen haben, laden Sie das Resultat in das Validier-Script, um irgendwelchen Fehlern auf die Spur zu kommen. Das Ergebnis sollte aussehen wie Abbildung 5.4.
Abbildung 5.4: Eine Fehlermeldung des MSXML, die anzeigt, dass die Länge des Werts für das von-Attribut das vom XDR-Schema vorgegebene Maximum überschreitet
Angenommen, Sie müssen eine Reihe optionaler Elemente in einer XML-Instanz mit XDR validieren. In Ihrer Nachrichtenanwendung wollen Sie vielleicht zwischen zwei Elementen auswählen können, vollstaendig oder unvollstaendig. In unserem Zusammenhang bedeutet das, dass die Anwendung das nachricht-Element, das ein vollstaendig-Element einschließt, die gesamte Meldung empfangen hat. Ein Fehler in der Telekommunikation oder eine andere Störung kann verursachen, dass Nachrichten zeitweilig nur unvollständig empfangen werden können. In diesem Fall platziert Ihre imaginäre Anwendung statt eines vollstaendig-Elements ein unvollstaendig-Element in das nachricht-Element.
In der Praxis gibt es Anwendungen mit ähnlichen Funktionen für Übertragungssysteme im E-Commerce. Anstatt eine gesamte Transaktion auszuschließen, ist es manchmal vorteilhaft, so viele Daten wie möglich zu übermitteln und mit der anschließenden Verarbeitung zu beginnen. Dabei wird festgehalten, dass der Vorgang unvollständig war und eine Fehlerbehandlung initiiert, die der übermittelnden Anwendung den Status meldet. (Wenn Sie an dieser Form der Verarbeitung interessiert sind, ist die Website zu XML/EDI (Electronic Data Interchange = Elektronischer Datenaustausch) unter http:// www.xmledi-group.org eine gute Quelle für weitere Informationen.)
Für dieses Beispiel nehmen wir einmal an, dass Sie nur wissen wollen, ob die Nachricht vollständig ist. Außerdem wollen Sie, dass die Anwendung die XML-Instanz so validiert, dass eines der beiden Elemente eingeschlossen sein muss. Modifizieren Sie Ihre XML-Instanz und fügen ihr diese Informationen hinzu. Fügen Sie nach jedem nachricht-Element ein neues Element namens empfangsbericht ein. Platzieren Sie im neuen empfangsbericht- Element als leeres abgeleitetes Element entweder vollstaendig oder unvollstaendig und speichern Sie das Ergebnis unter nachricht09_5.xml. Es kommt nicht darauf an, welche Nachrichten Sie mit einem vollstaendig-Empfangsbericht versehen und welche Sie unvollständig lassen, aber versichern Sie sich, dass nur eines der beiden Elemente in jedem neuen empfangsbericht-Element vorkommt. Listing 5.15 zeigt das XML-Dokument mit einer der möglichen Kombinationen für das neue Element.
Listing 5.15: Eine gültige Instanz mit einer Elementgruppierung - nachricht09_5.xml
1: <?xml version="1.0"?>
2: <notiz xmlns="x-schema:nachricht09_5.xdr">
3: <nachricht anzahl="10" datum="2001-07-29" von="Kathy Shepherd">
4: Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen
5: </nachricht>
6:
7: <empfangsbericht>
8: <vollstaendig/>
9: </empfangsbericht>
10:
11: <nachricht anzahl="12" datum="2001-07-30" von="Greg Shepherd">
12: Ich brauche ein wenig Hilfe bei den Hausaufgaben
13: </nachricht>
14:
15: <empfangsbericht>
16: <vollstaendig/>
17: </empfangsbericht>
18:
19:
20: <nachricht anzahl="14" datum="2001-07-31" von="Kristen Shepherd">
21: Bitte spiele heute Abend Scribble mit mir
22: </nachricht>
23:
24: <empfangsbericht>
25: <unvollstaendig/>
26: </empfangsbericht>
27: </notiz>
Für dieses Beispiel war es nötig, ziemlich viel an der Dokument-Instanz zu verändern. In den Zeilen 7, 15 und 24 wurde nach jedem nachricht-Element ein neues empfangsbericht-Element eingefügt. Die Zeilen 8 und 16 schließen das neue vollstaendig-Element ein; das kann bei Ihnen etwas anders aussehen. Das unvollstaendig-Element wurde für das letzte empfangsbericht-Element in Zeile 25 eingesetzt.
Um das Ganze zu validieren, erstellen Sie eine Inhaltsgruppe im XDR-Schema, die beide Elemente, vollstaendig und unvollstaendig, enthält. Sie legen außerdem in einem entsprechenden XML-Nachrichtendokument eine Bedingung fest, die den Einschluss des einen oder anderen Elements erzwingt. Eine solche Inhaltsgruppe ist in einem XDR- Gruppen-Element enthalten. Das gruppe-Element ermöglicht Ihnen, Beschränkungen für eine Reihe von abgeleiteten Elementen aufzustellen. Es liegt innerhalb eines ElementType- Elements und hat normalerweise die folgende Syntax:
<group order="(one | seq | many)" minOccurs="(0 | 1)" maxOccurs="(1 | *)">
<element type="ElementType"/>
<element type="ElementType"/>
<element type="ElementType"/>
<element type="ElementType"/>
<element type="ElementType"/>
...
</group>
Das group-Element lässt den Einschluss der Attribute order, minOccurs und maxOccurs zu. Es kann eine beliebige Anzahl abgeleiteter element-Elemente enthalten. In unserem Zusammenhang sollten Sie Ihr group-Element mit dem Attribut order="one" eingeben, sodass die dazugehörige XML-Instanz nur eines der aufgelisteten abgeleiteten Elemente einfügt. Mit den abgeleiteten Elementen in Gruppenelementen wird die Tatsache festgeschrieben, dass Ableitungen zu einem Satz gehören. Ihr group-Element schließt zwei abgeleitete Elemente ein, die so aussehen:
<element type="vollstaendig"/>
<element type="unvollstaendig"/>
Da diese element-Elemente neue Elementtypen für Ihre Instanz deklarieren, müssen Sie im XDR-Schema ein ElementType-Element für jedes von ihnen einfügen. Insbesondere müssen Sie die folgenden ElementType-Elemente hinzufügen:
<ElementType name="vollstaendig" model="closed" content="empty"/>
<ElementType name="unvollstaendig" model="closed" content="empty"/>
Zusätzlich zu der neuen Gruppierung müssen Sie sich um das neue empfangsbericht- Element mit der Elementauswahl vollstaendig oder unvollstaendig kümmern. Sie müssen am XDR-Schema eine Reihe zusätzlicher Änderungen vornehmen, um dieses Beispiel austesten zu können. Sie müssen zum Beispiel:
Das neue ElementType-Element für das empfangsbericht-Element sieht so aus:
<ElementType name="empfangsbericht" model="closed" content="eltOnly">
<group order="one">
<element type="vollstaendig" />
<element type="unvollstaendig" />
</group>
</ElementType>
Dieses ElementType-Element wird so interpretiert, dass das empfangsbericht-Element ausschließlich andere Elemente enthalten kann, die im aktuellen Schema definiert sind (model="closed"). Das group-Element lässt eine Auswahl eines seiner abgeleiteten Elemente zu, das als Ableitung in das empfangsbericht-Element eingefügt wird. Sie haben die Wahl zwischen den Elementen vollstaendig und unvollstaendig.
Listing 5.16 zeigt das fertige XDR-Schema.
Listing 5.16: Ein gruppe-Element mit order="one«-Beschränkung - nachricht09_5.xdr
1: <?xml version="1.0" encoding="UTF-8"?>
2: <Schema
3: name="nachricht"
4: xmlns="urn:schemas-microsoft-com:xml-data"
5: xmlns:dt="urn:schemas-microsoft-com:datatypes">
6: <ElementType name="notiz" model="closed" content="eltOnly"
7: order="many">
8: <element type="nachricht" minOccurs="1" maxOccurs="*"/>
9: <element type="empfangsbericht"/>
10: </ElementType>
11: <ElementType name="vollstaendig" model="closed" content="empty" />
12: <ElementType name="unvollstaendig" model="closed" content="textOnly"
13: dt:type="string"/>
14: <ElementType name="nachricht" model="closed" content="mixed">
15: <AttributeType name="anzahl" dt:type="int" required="yes"/>
16: <AttributeType name="datum" dt:type="date" required="yes"/>
17: <AttributeType name="von" dt:type="string" required="yes"/>
18: <attribute type="anzahl"/>
19: <attribute type="datum"/>
20: <attribute type="von"/>
21: </ElementType>
22: <ElementType name="empfangsbericht" model="closed" content="eltOnly">
23: <group order="one">
24: <element type="vollstaendig" />
25: <element type="unvollstaendig" />
26: </group>
27: </ElementType>
28: </Schema>
Zeile 9 deklariert das neue empfangsbericht-Element innerhalb des Wurzelelements notiz.
Die Zeilen 11-12 definieren die neuen leeren Elemente vollstaendig und unvollstaendig.
Zeile 22 beginnt die Definition des neuen empfangsbericht-Elements und in den Zeilen 23-26 wird das Element group mit dem Attribut order="one" deklariert. Das zeigt an, dass die entsprechende XML-Dokument-Instanz nur eines der beiden Elemente vollstaendig oder unvollstaendig im Stammelement nachricht enthalten muss, um gültig zu sein. Zeile 27 ist das Schluss-Tag für die empfangsberichtelementType-Definition.
Heute haben Sie die Syntax der Schemasprache XDR kennen gelernt. Sie haben gesehen, dass sich ein XDR-Schema aus einem Vokabular zusammensetzt, das die Syntax von XML verwendet. Anders gesagt, die Schemasprache umfasst Elemente und Attribute auf die gleiche Weise wie eine XML-Dokument-Instanz. Dieses Vokabular ist entweder im Namensraum XML-Data enthalten (urn:schemas-microsoft-com:xml-data) oder im Namensraum für die Datentypen von Microsoft (urn:schemas-microsoft-com:datatypes). Das bietet Ihnen als Entwickler einen Vorteil: Da Sie die Syntaxregeln für eine wohl geformte XML-Instanz bereits kennen, können Sie sich auf die Semantik des Vokabulars von XML-Data Reduced konzentrieren statt auf die Semantik der Auszeichnung. Als Sie DTDs erstellten, mussten Sie beides tun. XDR macht zum Beispiel keinen extensiven Gebrauch von Symbolsätzen mit einer einzigen Bedeutung. XDR-Schemata können mit einem Parser »durchgecheckt« werden, um sicherzustellen, dass sie wohl geformt sind, womit Ihnen ein Werkzeug an die Hand gegeben ist, mit dem Sie vergessene terminierende Slashes, fehlende eckige Klammern oder schlecht geformte Tags aufspüren können. Das kann Ihnen auf lange Sicht eine deutliche Zeitersparnis bringen.
Verschiedene weitere Merkmale von XDR sollen hier noch erwähnt werden. In diesem Abschnitt präsentieren wir Ihnen einen kurzen Überblick über einige davon.
XML-Data Reduced-Schemata sind erweiterbar, weil sie auf offenen Inhaltsmodellen aufbauen, die die XML-Syntax verwenden, die per se erweiterbar ist. Das bietet einen großen Vorteil gegenüber dem DTD-Ansatz, den Sie am 4. Tag untersucht haben. Dokumentautoren können XDR-Schemata erweitern und einer XDR-Schema-Instanz benutzerdefinierte Elemente und Attribute hinzufügen. Wenn Sie ein XDR-Schema erweitern wollen, müssen Sie eine benutzerdefinierte Namensraum-Deklaration einschließen, um die erweiterten Elemente und Attribute von denen zu unterscheiden, die von XDR vorgegeben sind. Das Standard-Vokabular für XDR wird von den Daten- und Datentyp-Namensräumen definiert, wie bereits oben erwähnt. Wenn Sie die Sprache erweitern, definieren Sie einen neuen Namensraum, der Ihre anwenderdefinierten Elemente und Attribute enthält.
XDR-Schemata werden normalerweise nur dann erweitert, wenn das XDR-Standard- Vokabular die für besondere Bedürfnisse von Anwendungen erforderlichen Beschränkungen nicht so einfach liefern kann. Um beim Beispiel mit der Nachrichtenverarbeitung zu bleiben, das Sie gestern und heute untersucht haben: Wir nehmen an, dass die Anwendung in einer bestimmten Zeit nur eine begrenzte Anzahl an Nachrichten empfangen und verarbeiten kann. Dann kann es sein, dass Sie eine zusätzliche Bedingung zur Deklaration eines limit-Elements einfügen wollen. Das können Sie dann dem Datentyp int zuordnen, mit Beschränkungen, die dem Namensraum meinedinge zugehörig sind. Ein Ansatz, um dies zu erreichen, liegt in folgender ElementType-Deklaration:
<ElementType name="limit" xmlns:meinedinge="urn:meinedinge-extensions:limits">
<datatype dt:type="int" />
<mystuff:max>100</meinedinge:max>
</ElementType>
Dieser Codeausschnitt zeigt das neue Element meinedinge:max, das zum Namensraum urn:meinedinge-extensions:limits gehört. Die Validierung überprüft zwar nur, ob der Wert für ein bestimmtes limit-Element ein Integer ist, aber Ihre Anwendung kann die Informationen, die anwenderdefinierte Elemente in Ihrem eigenen Namensraum anbieten, dazu verwenden, zusätzliche Validierungen vorzunehmen. Mehr über das Erstellen eigener Namensräume erfahren Sie am 8. Tag.
Wenn Sie ein XDR-Schema erweitern, validiert der MSXML-Parser Ihr erweitertes Vokabular nur hinsichtlich der Datentypen. Eine Benutzeranwendung, die bestimmte Daten erwartet, die von XDR nicht gut dokumentiert sind, ist ein Ansatz, der zur Auszeichnung dieser Daten in XML funktioniert.
Wenn Sie eine Programmiertechnik verwenden, die XSLT genannt wird (Extensible Stylesheet Language Transformation), können Sie ein Dokument der XML-Instanz programmatisch in ein anderes, in HTML oder eine andere Form der Auszeichnung umwandeln. XSLT erklären wir ausführlicher am 16. Tag.
Da XDR-Schemata in der XML-Syntax verfasst sind, können Sie auch in andere Auszeichnungsdialekte umgewandelt werden. Ein Grund, dies zu tun, kann in der Transformation von einer XDR-Instanz in eine XSD-Instanz (XML Schema Definition Language) liegen. Microsoft hat ein XSLT-Programm herausgebracht, das dies für Dokumentautoren übernimmt, die XDR gelernt haben, statt dessen aber ein XSD-Schema verwenden wollen. Wie bereits erwähnt, können Sie dies auch mit einer kommerziellen Anwendung wie XML-Spy unter http://www.xmlspy.com tun. Diese Art der Transformation funktioniert bei DTDs nicht. Um eine DTD in XDR, XSD oder eine andere Schemasprache umzuwandeln, ist eine Anwendung erforderlich, die außerhalb des Spektrums der XML-Technologie liegt.
Heute haben Sie die XML-Data Reduced Schema Language (XDR) kennen gelernt. Sie haben viele der Unterschiede gesehen, die zwischen den XDR-Schemata und DTDs bestehen. XDR-Schemata sind Dokumente, die in einer XML-Syntax verfasst sind und die ausgefeiltere und leistungsfähigere Möglichkeiten der Validierung anbieten, einschließlich Beschränkungen für Datentypen. Da es sich bei den XDR-Schemata um eigenständige gültige XML-Instanzen handelt, können sie bearbeitet, abgefragt und in andere Auszeichnungsdialekte transformiert werden, genau wie dies bei einer XML-Dokument- Instanz der Fall ist.
Frage:
Sollen XDR oder andere Schemata auf XML-Grundlage die DTDs ersetzen?
Antwort:
Schemata werden mit der XML-Grammatik geschrieben und bieten den DTDs
gegenüber viele Vorteile. Mit der Zeit verlieren die DTDs dadurch vielleicht an
Beliebtheit, aber momentan gibt es viele Implementierungen, die auf die Stabilität
von überprüften DTDs zurückgreifen.
Frage:
Nennen Sie einige der spezifischen Funktionen, denen ein XDR-Schema dient!
Antwort:
Ein Schema stellt die Struktur eines XML-Dokuments her, indem es
Gültigkeitsbeschränkungen aufstellt. Dadurch stellt es sicher, dass erforderliche
Elemente und Attribute vorhanden sind, und es überprüft die Beziehungen, die
zwischen den Elementen bestehen. Ein XDR-Schema bietet eine ausgefeilte
Datentyp-Validierung.
Frage:
Welche Rolle spielt MSXML bei XDR?
Antwort:
Das Microsoft-Produkt MSXML ist ein validierender Parser, der dem Browser
Internet Explorer beigefügt ist. Wenn man den MSXML instanziert, kann man
XML-Dokumente mit oder ohne zugeordnetes Schema parsen.
Antwort:
Ein Universal Resource Identifier ist eine Markierung, die Ihnen dabei hilft, einen
Namensraum von einem anderen zu unterscheiden. Mehr über die Deklaration
und Syntax von Namensräumen erfahren Sie am 8. Tag.
Am 4. Tag haben Sie eine DTD für Ihre Music Collection Markup Language (MCML) erstellt. Erzeugen Sie nun ein XDR-Schema, um die MCML-Dateien zu validieren.