xml schema quick reference - slides - comelio medien€¦ · schema-wurzel-element elemente und...
TRANSCRIPT
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
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
Einleitung Standard
Portal-Seite des W3C: http://www.w3c.org/XML/Schema Einführung: http://www.w3c.org/TR/xmlschema-0/ Strukturen: http://www.w3c.org/TR/xmlschema-1/ Datentypen: http://www.w3c.org/TR/xmlschema-2/
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…
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 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>
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>
• 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 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: 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.
Auslagerung und Wiederverwendung Einbindung
<include
schemaLocation = anyURI >
Content: (annotation?)
</include>
• Die Einbindung kombiniert Schemas mit
dem gleichen Ziel-Namensraum.
<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
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
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
• 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.
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>