xml schema quick reference - slides - comelio medien€¦ · schema-wurzel-element elemente und...

78
XML Schema

Upload: vuongthuan

Post on 04-Jun-2018

260 views

Category:

Documents


0 download

TRANSCRIPT

XML Schema

Schema-Wurzel-Element Elemente und Attribute Gruppen Einfache Datentypen Komplexe Typen Schlüssel und Verweise Auslagerung und Wiederverwendung Namensräume Joker-Elemente Ersetzungsgruppen Notation

Inhalte

Schema root

Übersicht

Dokumentation

Einleitung

Einleitung Schema-Wurzel-Element

• Das schema-Element setzt verschiedene Standardwerte, die von Elementen und Attributen überschrieben werden können.

• Es kann einen Ziel-Namensraum und auch andere intern genutzte Namensräume enthalten.

Einleitung Schema-Wurzel-Element

<schema

attributeFormDefault = (qualified | unqualified) :

unqualified

blockDefault = (#all | List of (extension

| restriction | substitution)) : ‘’

elementFormDefault = (qualified | unqualified) :

unqualified

finalDefault = (#all | List of (extension

| restriction)) : ‘’

targetNamespace = anyURI

version = token

xml:lang = language >

Content: (

(include | import | redefine | annotation)*,

(((simpleType | complexType | group

| attributeGroup) | element

| attribute | notation), annotation*)*)

</schema>

Einleitung Schema-Wurzel-Element

Eine Schema-Datei wird von den Attributen noNamespaceSchemaLocation oder schemaLocation

referenziert.

<Catalog

xmlns:xsi="http://www.w3.org/2001/

XMLSchema-instance"

xsi:noNamespaceSchemaLocation="CatalogWithout

Hierarchies.xsd">

Einleitung Übersicht

Primär-Komponenten Sekundär- Komponenten Hilfskomponenten

1. Einfache Typ-Definitionen

2. Komplexe Typ-Definitionen

3. Attributdeklarationen

4. Elementdeklarationen

5. Attributgruppen-Definitionen

6. Identititätseinschränkungen -

Definitionen

7. Elementgruppen-Definitionen

8. Notationsdeklarationen

9. Elementgruppen

10. Partikel

11. Joker

12. Attributverwendung

13. Annotationen

Elemente

Attribute

Lokale Elemente und Attribute

Globale Elemente und Attribute

Inhaltsmodelle für Elemente

Elemente und Attribute

Elemente und Attribute

<Catalog>

<Book id="11">

<Title>Dragons in the Middle Ages</Title>

<ProductLine>Dragon History</ProductLine>

<Price>14.95</Price>

</Book>

<Book id="12">

<Title>Society and Dragons</Title>

<Price>14.95</Price>

</Book>

</Catalog>

Elemente und Attribute: Elemente

• Ein Element kann einen Namen haben oder kann eine Referenz auf ein globales Element sein.

• Möglichkeiten der Ableitung werden durch die Attribute final (globales Element) und block kontrolliert, wobei block die verbotenen Ableitungstypen aufzählt.

• Die Kardinalität wird festgelegt durch minOccurs und maxOccurs (Standardwert 1).

• Es kann in einer Element-Ersetzungsgruppe verwendet werden und auch abstrakt sein.

• Wenn Text-Inhalt zulässig ist, hat es einen entsprechenden Datentyp, ein gemischtes Inhaltsmodell oder auch einen nil-Wert.

Elemente und Attribute: Elemente

<element

abstract = boolean : false

block = (#all | List of (extension | restriction | substitution))

default = string

final = (#all | List of (extension | restriction))

fixed = string

form = (qualified | unqualified)

maxOccurs = (nonNegativeInteger | unbounded) : 1

minOccurs = nonNegativeInteger : 1

name = NCName

nillable = boolean : false

ref = QName

substitutionGroup = QName

type = QName >

Content: (annotation?, ((simpleType | complexType)?,

(unique | key | keyref)*))

</element>

Elemente und Attribute: Attribute

• Ein Attribut kann

einen Standardwert oder einen festen Wert haben

einen Namen haben oder

eine Referenz auf ein globales Attribut enthalten

qualifiziert (zu einem Namensraum gehörig) und

unqualifiziert sein

• Seine Verwendung im XML-Dokument kann optional,

erforderlich oder auch verboten (verwendet bei Ableitung durch

Einschränkung) sein.

<attribute

default = string

fixed = string

form = (qualified | unqualified)

name = NCName

ref = QName

type = QName

use = (optional | prohibited | required) :

optional >

Content: (annotation?,

simpleType?)

</attribute>

Elemente und Attribute Attribute

Elemente und Attribute: Lokale Elemente und Attribute

• Elemente und Attribute können

lokal oder global definiert sein.

• Lokale Komponenten definiert

man in einem Eltern-Element.

Daher können verschiedene

Inhaltsmodelle unter dem

gleichen Element-Namen, aber

innerhalb verschiedener

Eltern-Elemente definiert

werden.

Elemente und Attribute Globale Elemente und Attribute

• Globale Elemente

und Attribute können

für lokale Referenzen

innerhalb

verschiedener Eltern-

Elemente zum

Einsatz kommen.

• Dennoch kann man

alternativ weiterhin

lokale Definitionen

mit dem gleichen

Namen erstellen.

Elemente und Attribute Inhaltsmodelle für Elemente

• Definitionen für Elemente gruppiert man

innerhalb eines Inhaltsmodells, welche

wiederum kombiniert und durch eine

Wiederholung (Kardinalitätsangabe)

erweitert werden können, um komplexe

Inhaltsmodelle zu erstellen.

Elemente und Attribute Inhaltsmodelle für Elemente

Ein gültiges Dokument enthält…

• … eine freie Auswahl in einer freien Reihenfolge der

definierten Elemente. <all

maxOccurs = 1 : 1

minOccurs = (0 | 1) : 1 >

Content: (annotation?, element*)

</all>

Elemente und Attribute Inhaltsmodelle für Elemente

• …die Elemente oder Gruppen in der Reihenfolge, in der

sie in sequence definiert werden.

<sequence

maxOccurs = (nonNegativeInteger | unbounded) : 1

minOccurs = nonNegativeInteger : 1 >

Content: (annotation?, (element | group | choice

| sequence | any)*)

</sequence>

Ein gültiges Dokument enthält…

Elemente und Attribute Inhaltsmodelle für Elemente

• … nur eines der Elemente oder Gruppen, die innerhalb

von choice aufgezählt werden.

<choice

maxOccurs = (nonNegativeInteger | unbounded) : 1

minOccurs = nonNegativeInteger : 1 >

Content: (annotation?, (element | group | choice

| sequence | any)*)

</choice>

Ein gültiges Dokument enthält…

Elementgruppen

Attributgruppen

Gruppen

Gruppen Elementgruppen

• Eine Elementgruppe ist eine Sammlung von

Elementen, die in einem Inhaltsmodell definiert sind

und die später als Ganzes referenziert werden

können.

<group

name = NCName>

Content: (annotation?, (all | choice | sequence))

</group>

Gruppen Attributgruppen

• Eine Attributgruppe ist eine Sammlung von Attributen, die später als Ganzes referenziert werden können.

<attributeGroup

name = NCName

ref = QName >

Content: (annotation?, (

(attribute | attributeGroup)*,

anyAttribute?)

)

</attributeGroup>

Typhierarchie

Fassetten

Abgeleitete einfache Typen

Lokale einfache Datentypen

Globale einfache Datentypen

Einfache Datentypen

Einfache Datentypen Typhierarchie

• Das Typsystem von XML Schema und

die Definition von abgeleiteten und

genaueren einfachen Datentypen kann

für Elemente und Attribute verwendet

werden.

Einfache Datentypen Typhierarchie

Einfache Datentypen Fassetten

• Fassetten – allein oder kombiniert – erlauben eine genauere Definition von Datentypen durch die Einschränkung von vorhandenen Datentypen.

Fassette Beschreibung

length Zeichenkettenlänge

minLength Minimale Zeichenkettenlänge

maxLength Maximale Zeichenkettenlänge

pattern Regulärer Ausdruck

enumeration Aufzählung von erlaubten Werten

whiteSpace Leerraum-Behandlung

maxInclusive Obere eingeschlossene Grenze

maxExclusive Obere nicht eingeschlossene Grenze

minExclusive Untere nicht eingeschlossene Grenze

minInclusive Untere eingeschlossene Grenze

totalDigits Anzahl aller Stellen einer Zahl.

fractionDigits Anzahl Dezimalstellen einer Zahl.

Einfache Datentypen Abgeleitete einfache Typen

• Einfache Typen und ihre enthaltenen Einschränkungen können

innerhalb eines Elements oder Attributs als lokale unbenannte

Datentypen definiert werden.

• Globale einfache Datentypen kann man als direkte Kind-Elemente von schema definieren und muss sie benennen.

<simpleType

final = (#all |

List of (list | union | restriction))

name = NCName >

Content: (annotation?, (restriction | list | union)

</simpleType>

Einfache Datentypen: Abgeleitete einfache Typen

Eine Ableitung durch …

• … restriction resorts to the facets in order to list the properties.

<restriction

base = QName >

Content: (annotation?,

(simpleType?,

(minExclusive | minInclusive |

maxExclusive | maxInclusive

| totalDigits | fractionDigits | length

| minLength | maxLength | enumeration

| whiteSpace | pattern)*))

</restriction>

Einfache Datentypen Abgeleitete einfache Typen

Eine Ableitung durch …

• … Auflistung erstellt einen Datentyp für eine XML Liste,

deren Einheiten jeweils gültige Werte für diesen

Listendatentyp sein müssen.

<list

itemType = QName >

Content: (annotation?, simpleType?)

</list>

Einfache Datentypen Abgeleitete einfache Typen

Eine Ableitung durch …

• … Vereinigung kombiniert die Wertebereiche der

aufgelisteten Datentypen (member types).

<union

memberTypes = List of QName >

Content: (annotation?, simpleType*)

</union>

Einfache Datentypen Lokale einfache Datentypen

• Die vordefinierten

einfachen Typen werden

durch die Angabe von

weiteren genaueren

Einschränkungen

abgeleitet.

• Diese Einschränkungen

sind dann nur innerhalb

ihres Eltern-Elements/-

Attributs gültig.

<SalesReport>

...

<FiscalYear>

<Year>2012</Year>

<Category>Merchandise</Category>

<Turnover>871.45</Turnover>

<PrevYear>1853.45</PrevYear>

<Diff>-982.00</Diff>

</FiscalYear>

</SalesReport>

Einfache Datentypen Lokale einfache Datentypen

<xs:element name="Year">

<xs:simpleType>

<xs:restriction base="xs:gYear">

<xs:minInclusive value="2010"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name="Category">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:enumeration value="Books"/>

<xs:enumeration value="Merchandise"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

Einfache Datentypen Globale einfache Datentypen

• Globale einfache

Datentypen werden in

der gleichen oder in

einer externen XML

Schema-Datei

definiert.

• Sie können sowohl in

Elementen wie auch

Attributen (lokal/global)

referenziert und auch

weiter eingeschränkt

werden.

...

<!-- Global elements -->

<xs:element name="Turnover"

type="MoneyType"/>

...

<!-- Global simple types -->

<xs:simpleType name="MoneyType">

<xs:restriction base="xs:decimal">

<xs:totalDigits value="6"/>

<xs:fractionDigits value="2"/>

</xs:restriction>

</xs:simpleType>

</xs:schema>

Grundlegende Idee

Ableitung durch Erweiterung

Ableitung durch Einschränkung

Komplexe Typen

Komplexe Typen Grundlegende Idee

• Globale komplexe Typen erlauben die Definition

einer Struktur mit mehreren Elementen und auch

Attributen, die dann von Elementen im type-Attribut

referenziert werden.

• Wie bei einfachen Datentypen ist es möglich, neue

lokale und globale komplexe Typen durch Ableitung

(Einschränkung, Erweiterung) zu erstellen.

Komplexe Typen Grundlegende Idee

<complexType

abstract = boolean : false

block = (#all | List of (extension | restriction))

final = (#all | List of (extension | restriction))

mixed = boolean : false

name = NCName >

Content:

(annotation?,

(simpleContent | complexContent |

((group | all | choice | sequence)?,

((attribute | attributeGroup)*,

anyAttribute?))))

</complexType>

Komplexe Typen Grundlegende Idee

• Einen globalen

komplexen Typ setzt man

am besten für Elemente

mit gleicher oder

ähnlicher Datenstruktur

und anderem Namen ein.

• Mit zusätzlicher Ableitung

kann man dann weitere

Verfeinerungen lokal

angeben.

Komplexe Typen Ableitung durch Erweiterung

• Diese Ableitungstechnik ermöglicht die Vererbung in

einem objektorientierten Stil.

• Bei der Erweiterung fügt man neue Elemente oder

Attribute an.

<extension

base = QName >

Content: (annotation?,

((group | all | choice | sequence)?,

((attribute | attributeGroup)*,

anyAttribute?)))

</extension>

Komplexe Typen Ableitung durch Erweiterung

<xs:element name="BusinessCustomer">

<xs:complexType>

<xs:complexContent>

<xs:extension base="CustomerType">

<xs:sequence>

<xs:element name="ContactPerson“ type="xs:string"/>

</xs:sequence>

</xs:extension>

</xs:complexContent>

</xs:complexType>

</xs:element>

Komplexe Typen Ableitung durch Erweiterung

• Bei der Einschränkung kann man Untermengen von Feldern bilden

oder die Verwendung von Attributen (required -> optional -> prohibited)

verändern.

• Während das extension-Element die angehängten und neuen

Definitionen enthält, listet die Einschränkung die übrigbleibende

Struktur auf und kann dabei auch weitere Einschränkungen bzgl. der

Kardinalität vorgeben.

<restriction

base = QName >

Content:

(annotation?, (group | all | choice | sequence)?,

((attribute | attributeGroup)*, anyAttribute?))

</restriction>

Komplexe Typen Ableitung durch Einschränkung

Schlüssel

Referenzen

Felder und Selektoren

Schlüssel und Verweise

Schlüssel und Verweise:

• Schlüssel und Verweise (Fremdschlüssel)

kann man verwenden, um relationale

Strukturen in XML (Schema) abzubilden.

• Ein Feld (Element/Attribut), das als key definiert ist,

muss einen einzigartigen Wert innerhalb des

Gültigkeitsbereichs des definierenden Eltern-

Elements enthalten und

muss auch im XML-Instanzdokument

vorhanden sein.

• Ein Feld mit einem unique-Wert braucht dagegen

nicht in der XML-Datei enthalten zu sein.

Schlüssel und Verweise Schlüssel

<unique

name = NCName >

Content: (annotation?, (selector, field+))

</unique>

<key

name = NCName >

Content: (annotation?, (selector, field+))

</key>

Schlüssel und Verweise Schlüssel

Schlüssel und Verweise: Schlüssel

• Die folgende XML-Datei besitzt ein eher relationales

Format anstelle einer mehrschichtigen Hierarchie.

• Jede Entität ist in einer eigenen Liste gespeichert,

wobei der Schlüssel innerhalb des alles umschließenden Catalog-Elements und – abgesehen

vom obersten Element Category – eine Referenz auf

die nächsthöhere Ebene besitzt: Product ->

SubCategory -> Category.

Schlüssel und Verweise Schlüssel

Schlüssel und Verweise: Schlüssel

Schlüssel und Verweise: Referenzen

<keyref

name = NCName

refer = QName >

Content: (annotation?, (selector, field+))

</keyref>

Ein Fremdschlüssel referenziert einen Schlüssel

innerhalb des Gültigkeitsbereichs des Elements, das

diesen Schlüssel enthält.

Schlüssel und Verweise Referenzen

<xs:schema>

<xs:element name="Catalog">

<xs:complexType>

...

</xs:complexType>

<!-- Keys -->

<xs:key name="SubCategoryKey">

<xs:selector xpath="SubCategoryList/SubCategory"/>

<xs:field xpath="@ID"/>

</xs:key>

...

<!-- Foreign keys -->

<xs:keyref name="SubCategoryKeyRef“ refer="SubCategoryKey">

<xs:selector xpath="ProductList/Product"/>

<xs:field xpath="@SC_ID"/>

</xs:keyref>

...

</xs:element>

</xs:schema>

Schlüssel und Verweise Felder und Selektoren

<selector

xpath = Subset of XPath >

Content: (annotation?)

</selector>

<field

xpath = Subset of XPath >

Content: (annotation?)

</field>

• Das selector-und die

field-Kind-Elemente

enthalten vereinfachte

XPath-Ausdrücke, wobei selector zu einem oder

mehreren Feldern (Text-

Knoten, Attribut) führen.

• Mehrere Felder können

einen Schlüssel mit

mehreren Feldern/

zusammengesetzten

Werten referenzieren.

Einbindung

Redefinition

Import

Auslagerung und Wiederverwendung

Auslagerung und Wiederverwendung Einbindung

<include

schemaLocation = anyURI >

Content: (annotation?)

</include>

• Die Einbindung kombiniert Schemas mit

dem gleichen Ziel-Namensraum.

Auslagerung und Wiederverwendung Einbindung

<redefine

schemaLocation = anyURI >

Content: (annotation |

(simpleType | complexType |

group | attributeGroup))*

</redefine>

• Die Redefinition stellt einen Mechanismus bereit,

um einfache und komplexe Typen und auch

Element-/Attributgruppen zu ändern, aber den

Namen zu behalten.

Auslagerung und Wiederverwendung Redefinition

<xs:schema

xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:redefine schemaLocation="ProfitReport_SimpleTypes.xsd">

<xs:simpleType name="MoneyType">

<xs:restriction base="MoneyType">

<xs:totalDigits value="8"/>

<xs:fractionDigits value="2"/>

<xs:minInclusive value="0"/>

</xs:restriction>

</xs:simpleType>

</xs:redefine>

...

<!-- Contents as before -->

Auslagerung und Wiederverwendung Redefinition

<import

namespace = anyURI

schemaLocation = anyURI >

Content: (annotation?)

</import>

• Der Import kombiniert Schemas mit

verschiedenen Ziel-Namensräumen.

Auslagerung und Wiederverwendung Import

xmlns-Attribut

Definition und Import

Namensräume

Namensräume: xmlns-Attribut

• Die XML-Datei enthält

zwei Namensräume für

Datenelemente, die

Autoren (Präfix a) und

Bücher (Präfix b)

enthalten, während das

Dokument selbst einen

eigenen Standard-

Namensraum ohne Präfix

enthält.

Namensräume Definition und Import

• Die dritte XML Schema-

Datei wird nur von der

zweiten Datei importiert

und importiert selbst keine

weitere XML Schema-

Datei. Sie enthält den

autorenbezogenen

Namensraum und

entsprechende

Definitionen.

Namensräume Definition und Import

• Die zweite XML

Schema-Datei definiert

die buchbezogenen

Elemente und den

entsprechenden

Namensraum. Sie

importiert eine dritte XML

Schema-Datei, welche

die autorenbezogenen

Definitionen enthält.

• Die erste XML Schema-

Datei definiert den

endgültigen Namensraum

und importiert eine zweite

XML Schema-Datei,

welche die Buch-

bezogenen Daten-

Elemente enthält.

Namensräume Definition und Import

Namensräume Definition und Import

Element xs:any

Element xs:anyAttribute

Beispiel

Joker-Elemente

Joker-Elemente: Element xs:any

• Mit dem Element any ist es möglich, beliebigen

Inhalt eines angegebenen Namensraums oder des

Ziel-Namensraums oder eines sonstigen anderen

Namensraums zuzulassen.

• Die erlaubten Namensräume oder Namensraum-Typen referenziert man durch die ##-

Schlüsselwörter oder einen Namensraum-URI innerhalb des namespaces-Attributs.

Joker-Elemente: Element xs:any

<any

maxOccurs = (nonNegativeInteger | unbounded) : 1

minOccurs = nonNegativeInteger : 1

namespace = ((##any | ##other)

| List of (anyURI

| (##targetNamespace | ##local))

) : ##any

processContents = (lax | skip | strict) : strict >

Content: (annotation?)

</any>

Das Element any legt die Verwendung

von Elementen fest:

Das Element anyAttribute legt die Verwendung

von Attributen fest:

<anyAttribute

namespace = ((##any | ##other)

| List of (anyURI

| (##targetNamespace | ##local))

) : ##any

processContents = (lax | skip | strict) : strict >

Content: (annotation?)

</any Attribute>

Joker-Elemente: Element xs:any

Joker-Elemente: Beispiele

Definition

Beispiel

Ersetzungsgruppen

• Eine Element-Ersetzungsgruppe besteht aus:

einem Element der obersten Ebene (Kopf oder defining

member) und

anderen Kind-Elementen (members) von schema, die im

Instanzdokument anstelle des Kopf-Elements erscheinen

können.

• Das Inhaltsmodell dieser Member ist dann durch das

Kopf-Element vorgegeben.

Ersetzungsgruppen

Ersetzungsgruppen

• Der Kopf enthält das abstract-Attribut mit zwei

möglichen Werten:

Wenn abstract den Wert true hat, dann darf das Kopf-

Element nicht in der Instanz erscheinen.

Wenn abstract den Wert false hat, kann es genauso wie

die Member der Ersetzungsgruppe im Instanzdokument

erscheinen.

Ersetzungsgruppen

Notation-Element

Dokumentation

Verschiedene Elemente

Notation

• Die notation-Deklaration und der xs:NOTATION-

Datentyp erlauben die Verwendung von Notationen in

XML, die in XML Schema definiert sind.

<notation

name = NCName

public = anyURI

system = anyURI >

Content: (annotation?)

</notation>

Dokumentation

• Drei mögliche Arten der

Dokumentation:

XML Schema-Elemente

für Anmerkungen

(annotation mit seinen

Kind-Elementen appinfo

und documentation)

Standard-XML-

Kommentare

Fremdattribute eines

benutzerdefinierten

Namensraums

<annotation>

Content: (appinfo |

documentation)*

</annotation>

<appinfo

source = anyURI>

Content: ({any})*

</appinfo>

<documentation

source = anyURI

xml:lang = language>

Content: ({any})*

</documentation>

Dokumentation

Fragen und Antworten