XSD ( XML Schema Definition ), eine Empfehlung des World Wide Web Consortiums ( W3C ), legt fest, wie die Elemente in einem XML -Dokument (Extensible Markup Language) formal beschrieben werden. Programmierer können es verwenden, um jedes Element in einem Dokument zu überprüfen und sicherzustellen, dass es der Beschreibung des Elements entspricht, in dem es sich befindet. [ 1 ]
Wie alle XML-Schema-Sprachen kann auch XSD verwendet werden, um Regeln zu definieren, die ein XML-Dokument erfüllen muss, um gemäß diesem Schema als „gültig“ zu gelten. Im Gegensatz zu den meisten anderen Schema-Sprachen wurde XSD jedoch auch mit der Absicht entwickelt, dass die Bestimmung der Gültigkeit eines Dokuments eine Sammlung von Informationen bestimmter Datentypen erzeugt. Ein solches Informationsset nach der Validierung kann bei der Entwicklung von Software zur XML-Dokumentverarbeitung hilfreich sein.
Geschichte
XML Schema , im Mai 2001 als W3C-Empfehlung veröffentlicht [ 2 ], ist eine von mehreren XML-Schema-Sprachen . Es war die erste eigenständige Schema-Sprache für XML , die vom W3C den Status einer Empfehlung erhielt. Aufgrund von Verwechslungen zwischen XML Schema als spezifischer W3C-Spezifikation und der Verwendung desselben Begriffs zur allgemeinen Beschreibung von Schema-Sprachen, bezeichneten einige Nutzer diese Sprache als WXS (W3C XML Schema), während andere sie als XSD (XML Schema Definition) nannten [ 3 ] [ 4 ] . In Version 1.1 entschied sich das W3C für XSD als bevorzugten Namen, und dieser Name wird auch in diesem Artikel verwendet.
In ihrem Referenzverzeichnis verweist die XSD-Spezifikation auf den Einfluss von DTDs und anderen frühen XML-Schema-Ansätzen wie DDML , SOX , XML-Data und XDR . Sie hat Merkmale dieser Ansätze übernommen, stellt aber gleichzeitig einen Kompromiss dar. Von diesen Sprachen wurden XDR und SOX noch eine Zeitlang nach der Veröffentlichung von XML Schema verwendet und unterstützt. Zahlreiche Microsoft- Produkte unterstützten XDR bis zur Veröffentlichung von MSXML 6.0 (das XDR zugunsten von XML Schema aufgab) im Dezember 2006. [ 5 ] Commerce One , Inc. unterstützte seine SOX-Schemasprache bis zur Insolvenz Ende 2004.
Die offensichtlichsten Merkmale, die XSD bietet und die in den nativen Dokumenttypdefinitionen (DTDs) von XML nicht verfügbar sind, sind die Namensraumerkennung und die Datentypen, d. h. die Möglichkeit, Element- und Attributinhalte als Werte wie ganze Zahlen und Datumsangaben anstatt als beliebigen Text zu definieren.
Die XSD-1.0-Spezifikation wurde ursprünglich 2001 veröffentlicht, eine zweite Auflage folgte 2004, um zahlreiche Fehler zu korrigieren. XSD 1.1 wurde im April 2012 zur W3C-Empfehlung .
Schemas und Schemadokumente
Technisch gesehen ist ein Schema eine abstrakte Sammlung von Metadaten, bestehend aus einer Reihe von Schemakomponenten : hauptsächlich Element- und Attributdeklarationen sowie komplexen und einfachen Typdefinitionen. Diese Komponenten werden üblicherweise durch die Verarbeitung einer Sammlung von Schemadokumenten erstellt , welche die Quellsprachendefinitionen dieser Komponenten enthalten. Im allgemeinen Sprachgebrauch wird ein Schemadokument jedoch oft einfach als Schema bezeichnet.
Schemadokumente sind nach Namensräumen organisiert: Alle benannten Schemakomponenten gehören zu einem Zielnamensraum, und dieser Zielnamensraum ist eine Eigenschaft des gesamten Schemadokuments. Ein Schemadokument kann andere Schemadokumente für denselben Namensraum einbinden und Schemadokumente für einen anderen Namensraum importieren .
Wird ein Instanzdokument anhand eines Schemas validiert (ein Prozess, der als Bewertung bezeichnet wird ), kann das für die Validierung zu verwendende Schema entweder als Parameter an die Validierungs-Engine übergeben oder direkt aus dem Instanzdokument mithilfe zweier spezieller Attribute referenziert werden xsi:schemaLocation. xsi:noNamespaceSchemaLocation(Letztere Methode setzt voraus, dass der Client, der die Validierung aufruft, dem Dokument ausreichend vertraut, um sicherzustellen, dass es anhand des korrekten Schemas validiert wird. „xsi“ ist das übliche Präfix für den Namespace „ https://www.w3.org/2001/XMLSchema-instance “.)
XML-Schema-Dokumente haben üblicherweise die Dateinamenerweiterung ".xsd". Da für XSDs noch kein eindeutiger Internet-Medientyp registriert ist, sollte gemäß RFC 7303 "application/xml" oder "text/xml" verwendet werden.
Schemakomponenten
Die Hauptbestandteile eines Schemas sind:
- Elementdeklarationen definieren die Eigenschaften von Elementen. Dazu gehören der Elementname und der Ziel-Namensraum. Eine wichtige Eigenschaft ist der Elementtyp, der die Attribute und Kindelemente des Elements einschränkt. In XSD 1.1 kann der Elementtyp von den Werten seiner Attribute abhängen. Ein Element kann einer Substitutionsgruppe angehören; ist Element E beispielsweise in der Substitutionsgruppe von Element H, so kann E überall dort, wo das Schema die Verwendung von H zulässt, an dessen Stelle stehen. Elemente können Integritätsbedingungen haben: Eindeutigkeitsbedingungen legen fest, dass bestimmte Werte innerhalb des Teilbaums, der von einem Element verwurzelt ist, eindeutig sein müssen, und Referenzbedingungen legen fest, dass Werte mit dem Bezeichner eines anderen Elements übereinstimmen müssen. Elementdeklarationen können global oder lokal sein, sodass derselbe Name für nicht verwandte Elemente in verschiedenen Teilen eines Instanzdokuments verwendet werden kann.
- Attributdeklarationen definieren die Eigenschaften von Attributen. Zu diesen Eigenschaften gehören der Attributname und der Ziel-Namespace. Der Attributtyp schränkt die möglichen Werte des Attributs ein. Eine Attributdeklaration kann auch einen Standardwert oder einen festen Wert enthalten (der dann der einzige Wert ist, den das Attribut annehmen kann).
- Einfache und komplexe Typen . Diese werden im folgenden Abschnitt beschrieben.
- Modellgruppen- und Attributgruppendefinitionen . Dabei handelt es sich im Wesentlichen um Makros: benannte Gruppen von Elementen und Attributen, die in vielen verschiedenen Typdefinitionen wiederverwendet werden können.
- Eine Attributverwendung stellt die Beziehung zwischen einem komplexen Typ und einer Attributdeklaration dar und gibt an, ob das Attribut obligatorisch oder optional ist, wenn es in diesem Typ verwendet wird.
- Ein Elementpartikel repräsentiert analog dazu die Beziehung zwischen einem komplexen Typ und einer Elementdeklaration und gibt die minimale und maximale Häufigkeit des Elements im Inhalt an. Neben Elementpartikeln können Inhaltsmodelle auch Modellgruppenpartikel enthalten , die wie Nichtterminale in einer Grammatik fungieren: Sie definieren die Auswahl- und Wiederholungseinheiten innerhalb der Sequenz zulässiger Elemente. Zusätzlich sind Platzhalterpartikel zulässig, die eine Menge unterschiedlicher Elemente erlauben (beispielsweise jedes Element innerhalb eines bestimmten Namensraums).
Weitere, spezialisiertere Komponenten sind Annotationen, Assertions, Notationen und die Schema-Komponente , die Informationen über das Schema als Ganzes enthält.
Typen
Einfache Datentypen (auch einfache Datentypen genannt) schränken die Textwerte ein, die in einem Element oder Attribut vorkommen dürfen. Dies ist einer der wichtigsten Unterschiede zwischen XML-Schema und DTDs. Beispielsweise kann ein Attribut so eingeschränkt sein, dass es nur ein gültiges Datum oder eine Dezimalzahl enthalten darf.
XSD stellt einen Satz von 19 primitiven Datentypen bereit ( anyURI, base64Binary, boolean, date, dateTime, decimal, double, duration, float, hexBinary, gDay, gMonth, gMonthDay, gYear, gYearMonth, NOTATION, QName, string, und time). Es ermöglicht die Konstruktion neuer Datentypen aus diesen Primitiven durch drei Mechanismen:
- Einschränkung (Verringerung der Menge zulässiger Werte),
- Liste (die eine Folge von Werten ermöglicht), und
- Vereinigung (die eine Auswahl von Werten aus mehreren Typen ermöglicht).
In der Spezifikation selbst sind 25 abgeleitete Typen definiert, und weitere abgeleitete Typen können von Benutzern in ihren eigenen Schemata definiert werden.
Zu den Mechanismen zur Einschränkung von Datentypen gehören die Angabe von Minimal- und Maximalwerten, reguläre Ausdrücke, Längenbeschränkungen für Zeichenketten und Beschränkungen der Dezimalstellenanzahl. XSD 1.1 führt außerdem Assertions ein, die es ermöglichen, beliebige Einschränkungen mithilfe eines XPath-2.0- Ausdrucks festzulegen.
Komplexe Datentypen beschreiben den zulässigen Inhalt eines Elements, einschließlich seiner Kindelemente und Textelemente sowie seiner Attribute. Eine Definition eines komplexen Datentyps besteht aus einer Menge von Attributverwendungen und einem Inhaltsmodell. Zu den verschiedenen Inhaltsmodellen gehören:
- Inhalt, der nur aus Elementen besteht und in dem kein Text erscheinen darf (außer Leerzeichen oder Text, der von einem Kindelement umschlossen ist).
- einfacher Inhalt, in dem Text erlaubt ist, aber untergeordnete Elemente nicht.
- leerer Inhalt, in dem weder Text noch untergeordnete Elemente zulässig sind
- gemischter Inhalt, der es ermöglicht, dass sowohl Elemente als auch Text erscheinen
Ein komplexer Typ kann von einem anderen komplexen Typ abgeleitet werden, indem man ihn einschränkt (bestimmte Elemente, Attribute oder Werte, die der Basistyp zulässt, werden ausgeschlossen) oder erweitert (zusätzliche Attribute und Elemente werden zugelassen). In XSD 1.1 kann ein komplexer Typ durch Assertions eingeschränkt werden – XPath-2.0- Ausdrücke, die anhand des Inhalts ausgewertet werden und den Wert „wahr“ ergeben müssen.
Infoset nach der Schema-Validierung
Nach der XML-Schema-basierten Validierung lassen sich Struktur und Inhalt eines XML-Dokuments anhand des während der Validierung impliziten Datenmodells beschreiben. Das XML-Schema-Datenmodell umfasst:
- Das Vokabular (Element- und Attributnamen)
- Das Inhaltsmodell (Beziehungen und Struktur)
- Die Datentypen
Diese Informationssammlung wird als Post-Schema-Validation Infoset (PSVI) bezeichnet. Das PSVI weist einem gültigen XML-Dokument seinen „Typ“ zu und ermöglicht die Behandlung des Dokuments als Objekt mithilfe von objektorientierten Programmierparadigmen (OOP).
Sekundäre Verwendungszwecke für XML-Schemas
Der Hauptgrund für die Definition eines XML-Schemas ist die formale Beschreibung eines XML-Dokuments; das resultierende Schema hat jedoch eine Reihe weiterer Verwendungsmöglichkeiten, die über die einfache Validierung hinausgehen.
Codegenerierung
Das Schema kann zur Codegenerierung verwendet werden, die als XML-Datenbindung bezeichnet wird . Dieser Code ermöglicht es, Inhalte von XML-Dokumenten innerhalb der Programmierumgebung als Objekte zu behandeln.
Generierung der XML-Dateistrukturdokumentation
Das Schema kann verwendet werden, um eine für Menschen lesbare Dokumentation der XML-Dateistruktur zu generieren. Dies ist besonders hilfreich, wenn die Autoren Annotationselemente verwendet haben. Es gibt keinen formalen Standard für die Dokumentationsgenerierung, aber verschiedene Tools, wie beispielsweise das Stylesheet Xs3p , stehen zur Verfügung, die qualitativ hochwertiges, lesbares HTML und druckbares Material erzeugen.
Kritik
Obwohl XML Schema insofern erfolgreich ist, als es weite Verbreitung gefunden hat und seine Ziele weitgehend erreicht, war es Gegenstand heftiger Kritik, vielleicht sogar mehr als jede andere W3C-Empfehlung. Gute Zusammenfassungen der Kritikpunkte liefern James Clark [ 6 ] , Anders Møller und Michael Schwartzbach [ 7 ] , Rick Jelliffe [ 8 ] und David Webber [ 9 ] .
Allgemeine Probleme:
- Es ist zu kompliziert (die Spezifikation umfasst mehrere hundert Seiten in einer sehr technischen Sprache) und daher für Nicht-Experten schwer verständlich – doch viele Nicht-Experten benötigen Schemata zur Beschreibung von Datenformaten. Die W3C-Empfehlung selbst ist extrem schwer lesbar. Die meisten Nutzer finden den W3C XML Schema Primer deutlich verständlicher.
- XSD besitzt keine formale mathematische Spezifikation. (Dies erschwert das Nachdenken über Schemata, beispielsweise den Nachweis, dass eine Änderung an einem Schema abwärtskompatibel ist.)
- Die Sprache birgt viele Überraschungen, zum Beispiel funktioniert die Einschränkung von Elementen anders als die Einschränkung von Attributen.
Praktische Grenzen der Ausdrucksfähigkeit:
- XSD bietet nur sehr schwache Unterstützung für ungeordnete Inhalte.
- XSD kann kein bestimmtes Wurzelelement vorschreiben (daher sind zusätzliche Informationen erforderlich, um selbst einfachste Dokumente zu validieren).
- Bei der Beschreibung von gemischten Inhalten können die Zeichendaten in keiner Weise eingeschränkt werden (es kann nicht einmal eine Menge gültiger Zeichen angegeben werden).
- Inhalts- und Attributdeklarationen dürfen nicht von Attributen oder dem Elementkontext abhängen (dies wurde auch als zentrales Problem der DTD aufgeführt).
- Es ist nicht hundertprozentig selbsterklärend (ein triviales Beispiel hierfür ist der vorherige Punkt), obwohl dies eine anfängliche Designanforderung war.
- Standardwerte können nicht separat von den Deklarationen angegeben werden (dadurch wird es schwierig, Schemafamilien zu erstellen, die sich nur in den Standardwerten unterscheiden); Elementstandardwerte können nur Zeichendaten sein (ohne Auszeichnungssprache).
Technische Probleme:
- Obwohl es technisch gesehen namensraumkonform ist, scheint es dem Namensraumgedanken nicht zu folgen (z. B. „unqualifizierte lokale Variablen“).
- XSD 1.0 bot keine Möglichkeit, die Abhängigkeit des Werts oder Vorhandenseins eines Attributs von den Werten oder dem Vorhandensein anderer Attribute (sogenannte Kookkurrenzbedingungen ) festzulegen. Dies wurde in XSD 1.1 behoben.
- Die Menge der angebotenen XSD-Datentypen ist weitgehend willkürlich. [ 10 ]
- Die beiden Aufgaben der Validierung und Erweiterung (Hinzufügen von Typinformationen und Standardwerten) sollten getrennt gehalten werden.
Version 1.1
XSD 1.1 wurde im April 2012 zu einer W3C-Empfehlung , was bedeutet, dass es sich um eine vom W3C anerkannte Spezifikation handelt.
Wesentliche Neuerungen in XSD 1.1 sind:
- Die Möglichkeit, Aussagen über den Dokumentinhalt mittels XPath 2.0 -Ausdrücken zu definieren (eine Idee, die von Schematron übernommen wurde ).
- Die Möglichkeit, den Typ auszuwählen, anhand dessen ein Element auf Basis der Werte der Attribute des Elements validiert wird („bedingte Typzuweisung“).
- Die Regeln, wonach explizite Elemente in einem Inhaltsmodell nicht mit Platzhaltern übereinstimmen dürfen, die im Modell ebenfalls zulässig sind, werden gelockert.
- Die Möglichkeit, Platzhalter (sowohl für Elemente als auch für Attribute) anzugeben, die für alle Typen im Schema gelten, sodass alle die gleiche Erweiterungsrichtlinie implementieren.
Bis zum Entwurf der vorgeschlagenen Empfehlung sah XSD 1.1 auch die Einführung eines neuen numerischen Datentyps, precisionDecimal, vor. Dies erwies sich als kontrovers und wurde daher in einer späten Entwicklungsphase aus der Spezifikation gestrichen.
Siehe auch
- Liste der XML-Schema-Typen – Liste der im Internet verwendeten XML-Schemas, sortiert nach Zweck
- RELAX NG – eine weitere XML-Schema-Sprache (ein internationaler ISO-Standard), die häufig mit XSD-Datentypen verwendet wird.
- XML-Schema-Editoren – Informationen zu XSD-Tools
- XML-Schema-Sprachen – Vergleicht XSD mit anderen XML-Schema-Sprachen
- Einzigartige Partikelzuordnung
- Kanonisches Modell
- JSON-Schema
Referenzen
- ^ " Definition XSD (XML Schema Definition) Archiviert am 19.11.2016 in der Wayback Machine " TechTarget, abgerufen am 10. Juni 2014
- ^ „Zeitleiste der W3C-Standards für XML und das semantische Web“ (PDF) . 04.02.2012. Archiviert vom Original (PDF) am 24.04.2013 . Abgerufen am 04.02.2012 .
- ^ Siehe Schema - W3C
- ^ Siehe W3C XML Schema Definition Language (XSD) 1.1 Teil 1: Strukturen
- ^ „Entfernung der XDR-Schema-Unterstützung in MSXML 6.0“ . Abgerufen am 19.09.2010 .
- ^ Zusammenfassung von James Clark zu den Kritikpunkten am XML-Schema und Empfehlung von RELAX NG als Alternative, https://web.archive.org/web/20150316212413/http://www.imc.org/ietf-xml-use/mail-archive/msg00217.html
- ^ Anders Møller und Michael I. Schwartzbach präsentieren „Probleme mit XML-Schema“, https://cs.au.dk/~amoeller/XML/schemas/xmlschema-problems.html
- ^ Kritik von Rick Jelliffe im Mai 2009, https://web.archive.org/web/20090516232816/http://broadcast.oreilly.com/2009/05/w3c-please-put-xsd-11-on-hold.html
- ^ David Webber , " Entwurf eines Whitepapers zu CAM v1.1 und XSD Schema V1.1 Insights ", 1. September 2008.
- Dieser Punkt wird von Uche Ogbuji weiter ausgeführt. Mehr zum Thema XML-Klassenkriege – O'Reilly ONLamp Blog
Weiterführende Literatur
- Walmsley, Priscilla (2001). Definitives XML-Schema . Prentice-Hall. ISBN 0-13-065567-8Die
- van der Vlist, Eric (2001). XML-Schema . O'Reilly. ISBN 0-596-00252-1Die
- Bradley, Neil (2003). The XML Schema Companion . Addison-Wesley. ISBN 0-321-13617-9Die
- Ducket, J.; et al. (2001). Professionelle XML-Schemas . Wrox Press. ISBN 1-86100-547-4Die
- Dykes, L.; Tittel, E.; Valentine, C. (2002). XML-Schemas . Sybex. ISBN 0-7821-4045-9Die
Externe Links
W3C XML Schema 1.0 Spezifikation
W3C XML Schema 1.1 Spezifikation
Andere
- SPARQL2XQuery transformiert XML-Schemas in OWL. Ordnet XML-Schemas und OWL-RDF/S-Ontologien zu.