Ähnliche Dokumente
Namespaces. Namensräume...

3. XML Schema. XML Schema. Eigenschaften von XML Schema. Vorteile eines expliziten Schemas: Die XML Schema Recommendation des W3C besteht aus:

Einleitung. Schema root Übersicht Dokumentation

XML Schema Kurzreferenz

XML Schema 2015 S h_da S Seite 1

XML Schema 2015 S h_da S Seite 1

XML. extensible Markup Language. Dr. Beatrice Amrhein.

XML DTD und Schema von Thomas Mangold

XSD - XML Schema Definition

B Babuschka. Siehe Matrjoschka Babuschka-Design 294, 296, 301, 357 base 102, 109, 238 base64binary 74

Exkurs: Backus-Naur-Form (BNF) Document Type Definition (DTD) W3C XML Schema (XSD) RELAX NG. Diskussion

5. XML-Datenbanken: Datendefinition

Mario Jeckle. XML Schema

XML Schema: Validieren statt Programmieren

XML. XML-Datenmodellierung / XML-Schemasprachen. XPath DTD. XQuery. XML-Schema XSLT XML-Grundlagen, -Sprachen, -Datenhaltungsfragen

XML Schema vs. Relax NG

Semistrukturierte Daten. 2. Datenmodellierung mit XML und XML-Schema XML. Lernziele:

Zusammenfassung XML. Metasprache um Dokumenttypen zu definieren

JAXB. Java Architecture for XML Binding.

DTDs und XML- Schemata

Definition von Datentypen mit XML- Schemata

Erik Wilde XML Schema

Technische Richtlinie

Infobrief der Bundesagentur für Arbeit Datenlieferung über XSozial-BA-SGB II:

Versuchsziele. 1. Aufgabe. Hochschule Harz FB Automatisierung und Informatik Versuch: XML Thema: Grundkenntnisse in XML mit DTD s und Schemata

Projektspezifische Datenschemata erstellen

<BPM-XML-Seminar/> Michael Fellmann, M.A. Grundlagen Standards und Vokabulare XML-basiertes Prozessmanagement. Universität Osnabrück

Tutorial: Ein Benutzerprofil erstellen. Version: 2.0 Autoren: Anja Beuth, Stefan Suermann

D#32058 Spezifikation UPOC DM V2

Nonstandard Datenbanken

XML. extensible Markup Language. Dr. Beatrice Amrhein.

Document Type Definition (DTD)

Repräsentation von Struktur

XML-Schema (SCH) Sie erhalten einen Überblick über alle für XML-Schema relevanten Spezifikationen

XML Schemasprachen. Übersicht und Einordnung. Übersicht. ! DTDs und XML Schema. ! Schemasprachen als Konzept. ! Schemasprachen selbstgemacht

XML Schema-Sprachen 04

Erhöhung der Datenqualität in XML-Dokumenten von Desktop Applikationen. Alexander Hilliger von Thile - REI/ID

XML Empfehlung Anlage Einführung Allgemeine Grundlagen Anforderungen und Zielsetzung Dateinamenskonvention...

Gliederung. Service Oriented Architecture - XML Technologies. 1 von 11

Diese Version ist anwendbar für die Übermittlung von Daten, die die folgenden Veranlagungszeiträume betreffen:

Kapitel 5: Datenaustausch mit XML

DTD: Syntax-Zusammenfassung

(a) Erstellen Sie für die Web-Veröffentlichung eines Artikels die Meta-Informationen nach dem Dublin-Core-Standard.

IT-Zertifikat: Daten- und Metadatenstandards

Strukturierung von Inhalten

Seminar: mobile GIS Austausch von Geodaten

Transkript:

XML Schema (XSD) http://www.w3.org/tr/xmlschema-0

Was ist XML Schema? XML Schema ist eine XML basierte Alternative für ein DTD. Ein XML Schema beschreibt die Struktur eines XML Dokuments. XML Schema ist eine W3C Recommendation Statt XML Schema wird oft die Abkürzung XSD (XML Schema Definition) benutzt.

Ein XML Schema definiert die Elemente, welche im Dokument vorkommen dürfen die Attribute, welche vorkommen dürfen welche Elemente Kindelemente sind die Reihenfolge der Elemente die Anzahl der Kindelemente ob ein Element leer ist oder Text enthalten kann Datentypen für Elemente und Attribute Default Werte und feste Werte für Elemente und Attribute

Die Vorteile von XSD XML Schema unterstützt Datentypen XML Schema benutzt XML Syntax XML Schemas sind erweiterbar

Beispiel einer DTD <!-- file person.dtd --> <!ELEMENT person (name,profession*)> <!ATTLIST person born CDATA #IMPLIED died CDATA #IMPLIED> <!ELEMENT name (first_name,last_name)> <!ELEMENT first_name (#PCDATA)> <!ELEMENT last_name (#PCDATA)> <!ELEMENT profession (#PCDATA)>

Ein Beispiel <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.note.org" elementformdefault="qualified"> <xs:element name="note"> <xs:complextype> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complextype> </xs:element> </xs:schema>

Instanz-Dokument zum Schema <?xml version="1.0"?> <note xmlns="http://www.note.org" xmlns:xsdi="http://www.w3.org/2001/xmlschema-instance" xsdi:schemalocation="http://www.note.org note.xsd"> <to> Bill </to> <from> Jani </from> <heading> Reminder </heading> <body> Don't forget the book! </body> </note>

Die Teile eine Schemas Schema Deklaration Definition Element Attribut einfacher Typ komplexer Typ

Deklaration / Definition Eine Deklaration beschreibt ein Element oder Attribut, welches im Instanzdokument vorkommen darf: <xs:element name="age" type="xs:short"/> <xs:element name="product">... </xs:element> Eine Definition definiert einen Typ, welcher dann in einer Element- oder Attributdeklaration verwendet werden kann. <xs:complextype name="producttype">... </xs:complextype>

type Attribut complextype Eine Element Deklaration kann entweder ein type Attribut haben, oder eine anonyme Typdefinition enthalten. Aber nicht beides gleichzeitig! <xs:element name="note" type="nametype"> <xs:complextype> </xs:complextype> </xs:element>

Das Typsystem anytype einfacher Typ atomar list union komplexer Typ builtin sequence choice all

Einfache Typen

Deklaration von einfachen Elementen Beispiele von einfachen Elementen mit atomaren Typen <lastname>schmid</lastname> <age>34</age> <born>1968-03-27</born> Die entsprechenden Deklarationen: <xs:element name="lastname" type="xs:string"/> <xs:element name="age" type="xs:short"/> <xs:element name="born" type="xs:date"/>

Einfache Elemente Die allgemeine Syntax für einfache Elemente <xs:element name="elementname" type="elementtyp" minoccurs="min" maxoccurs="max" default/fixed="vorgabe" />

Vordefinierte primitive Typen anysimpletype date datetime time duration boolean double float anyuri QName gday gmonth gyear decimal gyearmonth gmonthday string numerische Typen String Typen

Abgeleitete String Typen string normalizedstring token language Name NCName NMTOKEN NMTOKENS ID IDREF IDREFS ENTITY ENTITIES

Abgeleitete Numerische Typen decimal integer nonpositiveinteger negativeinteger long int short byte nonnegativeinteger unsignedlong positiveinteger unsignedint unsignedshort unsignedbyte

minoccurs/maxoccurs Die Anzahl möglicher Wiederholungen eines Elementes wird mit den Attributen minoccurs und maxoccurs angegeben: <xs:complextype name="familytype"> <xs:complextype name="familytype"> <xs:sequence> <xs:element name="lastname" type="xs:string"/> <xs:element name="childname" type="xs:string" maxoccurs="10" minoccurs="0"/> </xs:sequence> </xs:complextype>

Deklaration von Attributen Attribute haben einen einfachen Typ. Nur komplexe Elemente können Attribute enthalten. Ein Beispiel <person gender="male">peter Muster</person> die Attribut-Deklaration: <xs:attribute name="gender" type="xs:string"/>

Attribut Deklarationen Attribut mit Default Wert: <xs:attribute name="lang" type="xs:string" default="en"/> Attribut mit fixem Wert: <xs:attribute name="lang" type="xs:string" fixed="en"/> optionales Attribut: <xs:attribute name="lang" type="xs:string" use="optional"/> Attribut muss vorhanden sein: <xs:attribute name="lang" type="xs:string" use="required"/> Vorsicht! Attribute sind nur obligatorisch mit use= required

List-Typen Ein List-Typ definiert eine Liste von einfachen Typen: Beispiel: Liste von ganzen Zahlen <xs:simpletype name="regnumbertype"> <xs:list itemtype="xs:int"/> </xs:simpletype>

Union-Typen Ein Union-Typ ist eine Vereinigung von einfachen Typen: <xs:simpletype name="unotype"> <xs:union membertypes="xs:int xs:boolean"/> </xs:simpletype>

Komplexe Typen

Verschiedene Komplexe Elemente Elemente mit komplexe Typen können andere Elemente und/oder Attribute enthalten. Es gibt vier Arten von komplexen Elementen leere Elemente (die nur Attribute enthalten), Elemente, welche nur andere Elemente enthalten, gemischte Elemente enthalten sowohl andere Elemente als auch Text. Elemente mit beliebigem Inhalt

Leere Elemente Ein leeres Element <product productid="1345" /> Mögliches XML Schema: <xs:complextype name="producttype"> <xs:attribute name="productid" type="xs:positiveinteger"/> </xs:complextype> <xs:element name="product" type="producttype"/>

Element mit Text und Attribut: simplecontent <shoesize country="france">35</shoesize> Ein XML Schema <xs:complextype name="shoesizetype" > <xs:simplecontent> <xs:extension base="xs:positiveinteger"> <xs:attribute name="country" type="xs:string"/> </xs:extension> </xs:simplecontent> </xs:complextype>

Element mit Kind Elementen: sequence <person> <firstname>john</firstname> <lastname>smith</lastname> </person> Ein XML Schema <xs:complextype name="persontype"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complextype>

Komplexer Typ mit Attribut <person gender="male"> <firstname>john</firstname> <lastname>smith</lastname> </person> Das XML Schema <xs:complextype name="persontype"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> <xs:attribute name="gender" type="xs:string"/> </xs:complextype>

Element mit Kind Elementen: all Der all Indikator gibt an, dass die Kindknoten in beliebiger Reihenfolge: <xs:complextype name="persontype"> <xs:all> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:all> </xs:complextype>

Element mit Kind Elementen: choice Der Choice Indikator bestimmt, dass entweder das eine oder das andere Kind vorkommen soll: <xs:complextype name="persontype" > <xs:choice> <xs:element name="employee" type="employeetype"/> <xs:element name="member" type="membertype"/> </xs:choice> </xs:complextype>

Elemente mit gemischtem Inhalt <letter>dear Mr.<name>J. Smith</name>. Your order <orderid>1032</orderid> will be shipped on <shipdate>2001-07-13</shipdate>. </letter> XML Schema <xs:element name="letter"> <xs:complextype mixed="true"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="orderid" type="xs:positiveinteger"/> <xs:element name="shipdate" type="xs:date"/> </xs:sequence> </xs:complextype> </xs:element>

Spezielle Schema Elemente

Facetten Einschränken dienen zur besseren Kontrolle von (akzeptierbaren) Werten von XML Elementen oder Attributen. Solche Einschränkungen nennt man Facetten (facets). Facetten für Strings: length, maxlength, minlength Facetten für numerische Werte: totaldigits, fractiondigits, maxexclusive, minexclusive, maxinclusive, mininclusive Facetten für Zeit-Typen: maxexclusive, minexclusive, maxinclusive, mininclusive Für alle Typen: enumeration, pattern, whitespace

enumeration fractiondigits length Definiert eine Liste von möglichen Werten Spezifiziert die maximal erlaubte Anzahl Dezimalstellen (grösser oder gleich null) Spezifiziert die (exakte!) Anzahl Buchstaben oder Listenelemente (grösser oder gleich null) maxexclusive maxinclusive maxlength minexclusive mininclusive minlength Spezifiziert eine obere Schranke für numerische Werte (Werte sind kleiner!) Spezifiziert eine obere Schranke für numerische Werte (kleiner oder gleich) Spezifiziert die maximal erlaubte Anzahl Buchstaben oder Listenelemente (grösser oder gleich null) Spezifiziert eine untere Schranke für numerische Werte (Werte sind grösser!) Spezifiziert eine untere Schranke für numerische Werte (grösser oder gleich) Spezifiziert die minimale Anzahl Buchstaben oder Listenelemente (grösser oder gleich null) pattern totaldigits whitespace Definiert ein Muster für die erlaubten Werte Spezifiziert die maximale Anzahl Ziffern (grösser oder gleich null) Spezifiziert, wie Whitespaces (newlines, tabs,...) behandelt werden sollen

Beispiele von Facetten Erlaubte Wochentage sind Montag, Mittwoch und Samstag. <xs:simpletype name="weekdaytype"> <xs:restriction base="xs:string"> <xs:enumeration value="montag"/> <xs:enumeration value="mittwoch"/> <xs:enumeration value="samstag"/> </xs:restriction> </xs:simpletype>

Beispiele von Facetten Eine Publisher ID ist entweder von der Form P-ABC: <xs:simpletype name="publisheridtype"> <xs:restriction base="xs:string"> <xs:pattern value="p-[a-z]+"/> <xs:length value="5"/> </xs:restriction> </xs:simpletype>

Beispiele von Facetten Eine Publisher ID ist entweder von der Form P-ABC oder von der Form P-321: <xs:simpletype name="publisheridtype"> <xs:simpletype name="publisheridtype"> <xs:restriction base="xs:string"> <xs:pattern value="p-[a-z]+"/> <xs:pattern value="p-[0-9]+"/> <xs:length value="5"/> </xs:restriction> </xs:simpletype>

Regläre Ausdrücke \ Escape. Ein beliebiges Zeichen (ausser newline) X Eine Instanz von x ^x Jedes Zeichen ausser x [x] Alle Zeichen in diesem Bereich () Gruppierung Auswahl {x} x fache Wiederholung {x,} mindestens x Mal {x,y} mindestens x Mal und höchstens y Mal? Abkürzung für {0,1} * Abkürzung für {0, } + Abkürzung für {1, } \d Abkürzung für [0-9] (digits) \D alles ausser Ziffern \s Whitespace (spaces, tabs, newlines,...) \S alles ausser Whitespace

Weitere Beispiele von Facetten <xs:simpletype name="threeinitialstype"> <xs:restriction base="xs:string"> <xs:pattern value="[a-za-z][a-za-z][a-za-z]"/> </xs:restriction> </xs:simpletype> <xs:simpletype name="mystringtype"> <xs:restriction base="xs:string"> <xs:pattern value="([a-z0-9])*"/> <xs:length value="6"/> </xs:restriction> </xs:simpletype>

Weitere Beispiele von Facetten <xs:restriction base="xs:string"> <xs:pattern value="[a-z]([a-z])+"/> </xs:restriction> <xs:restriction base="xs:string"> <xs:pattern value="\d+"/> </xs:restriction>

Beispiele von Facetten <xs:simpletype name="addresstype"> <xs:restriction base="xs:string"> <xs:length value="8"/> <xs:whitespace value="preserve"/> </xs:restriction> </xs:simpletype> <xs:simpletype name="agetype"> <xs:restriction base="xs:int"> <xs:minexclusive value="0"/> <xs:maxinclusive value="100"/> </xs:restriction> </xs:simpletype>

Assertions Zusicherungen (ab Schema Version 1.1)

Zusicherungen Mittels xs:assert können weitere Einschränkungen an Element- oder Attribut-Werte definiert werden. Mit Zusicherungen können verschiedene Werte in Beziehung gesetzt oder verglichen werden. xs:assertion erlaubt komplexe Bedingungen an (einzelne) Werte (simple Type)

Zusicherungen: verschiedene Namen <xs:complextype name="nametype"> <xs:sequence> <xs:element name="first_name" type="xs:string"/> <xs:element name="last_name" type="xs:string"/> </xs:sequence> <xs:assert test="first_name!= last_name"/> </xs:complextype>

Zusicherung: Start Datum nach End Datum <xs:complextype name="persontype"> <xs:sequence> <xs:element name="name" type="nametype"/> <xs:element name="address" type="addresstype"/> </xs:sequence> <xs:attribute name="startdate" type="xs:date" /> <xs:attribute name="enddate" type="xs:date" /> <xs:assert test="@startdate > @enddate"/> </xs:complextype>

Zusicherungen: Anzahl Eigenschaften <xs:complextype name="persontype"> <xs:sequence> <xs:element name="name" type="nametype"/> <xs:element maxoccurs="9" name="profession" type="xs:string"/> <xs:element maxoccurs="9" name="hobby" type="xs:string"/> </xs:sequence> <xs:attribute name="properties" type="xs:int"/> <xs:assert test="@properties eq count(profession hobby)"/> </xs:complextype> <person properties="3"> <name> <first_name>leonhard</first_name> <last_name>euler</last_name> </name> gesamt höchstens 3 <profession>physicist</profession> <profession>mathematician</profession> <hobby>astronomy</hobby> </person>

Zusicherungen: Spezieller simple Type Einfacher Typ mit speziellen Anforderungen xs: assertion <xs:simpletype name="speztype"> <xs:restriction base="xs:int"> <xs:assertion test="($value < 1800 or $value > 1900) and $value!= 0"/> </xs:restriction> </xs:simpletype> Nur ungerade Zahlen <xs:simpletype name="oddtype"> <xs:restriction base="xs:int"> <xs:assertion test="($value mod 2!= 0)"/> </xs:restriction> </xs:simpletype>

Schlüssel und Referenzen

Schlüssel Mittels key können Elemente oder Attribute als Schlüssel definiert und damit die Eindeutigkeit innerhalb eines Instanzdokuments garantiert werden <xs:key name="departmentid"> <xs:selector xpath="department"/> <xs:field xpath="@id"/> </xs:key> <xs:unique name="uniqueprofession"> <xs:selector xpath="profession"/> <xs:field xpath="."/> </xs:unique>

Referenzen auf Schlüssel Mittels keyref können Referenzen auf Schlüssel definiert werden <xs:keyref name="departmentref" refer=" departmentid"> <xs:keyref name="departmentref" refer=" departmentid"> <xs:selector xpath="employee/department"/> <xs:field xpath="@ref"/> </xs:keyref>

Beispiel key / keyref <xs:element name="people"> <xs:complextype>... </xs:complextype> <xs:key name="addressid"> <xs:selector xpath="address"/> <xs:field xpath="@id"/> </xs:key> <xs:keyref name="bornref" refer="addressid"> <xs:selector xpath="person/born"/> <xs:field xpath="@addressref"/> </xs:keyref>... </xs:element>

Beispiel key / keyref <person> <name> <firstname>alan</firstname> <lastname>turing</lastname> </name> <born date="1912" addressref="gbl"/> <!-- Referenz auf Adresse --> <died date="1954" addressref="gbc"/> <!-- Referenz auf Adresse -->... </person> <address id="gbl"> <!-- Schlüssel --> <country>great Britain</country> <city>london</city> </address> <address id="gbc"> <!-- Schlüssel --> <country>great Britain</country> <city>cambridge</city> </address>

Schlüssel / Unique Mittels key können Elemente oder Attribute als Schlüssel definiert und damit die Eindeutigkeit innerhalb eines Instanzdokuments garantiert werden <xs:key name="departmentid"> <xs:selector xpath="department"/> <xs:field xpath="@id"/> </xs:key> <xs:unique name="uniqueprofession"> <xs:selector xpath="profession"/> <xs:field xpath="."/> </xs:unique>

Anmerkungen Anmerkungen (xs:annotation) enthalten Informationen für den Benutzer (xs:documentation) oder für eine Applikation (xs:appinfo) <xs:annotation> <xs:documentation xml:lang="en"> This is a schema for address books </xs:documentation> </xs:annotation>

Einfügen von Schematas Mittels include kann ein anderes Schema eingefügt werden, welches denselben Target-Namespace hat: <xs:include schemalocation="address.xsd"/> Mittels import kann ein Schema eingefügt werden, welches einen andern Target-Namespace hat: <xs:import namespace="http://www.example.org/address" schemalocation="address.xsd"/>

Überschreiben von Schemata-Typen Ab Schema Version 1.1 können (einzelne) Schema Typen in einem anderen Schema überschrieben und dadurch neu definiert werden. <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" xmlns:vc="http://www.w3.org/2007/xmlschema-versioning" vc:minversion="1.1"> <xs:override schemalocation="overridebase.xsd"> <xs:simpletype name="dresssizetype"> <xs:restriction base="xs:integer"> <xs:mininclusive value="2"/> <xs:maxinclusive value="16"/> </xs:restriction> </xs:simpletype> </xs:override> <xs:element name="newsize" type="dresssizetype"/> </xs:schema>