Post on 04-Jun-2018
transcript
Seite 2h_da
SS
201
4
XML/Schema: Datentypen
• Zusammenfassung: Dokument-Strukturen in XML Schema
• Datentypen in XML Schema
- Einfache Typen
- Komplexe Typen
• Konzept “Mixed Content”
Seite 3h_da
SS
201
4
XML Schema – Elementdeklaration
Attribute einer Elementdeklaration Zusammenfassung:
name: XML Name
type: Typdefinition (built in oder von der Anwendung definiert)
minOccurs: nicht negative Integer
maxOccurs: positive Integer oder „unbounded“
fixed: Element muss mit gegebenem Wert auftreten
default: Element erhält den gegebenen Wert, wenn nicht anderweitig ein Wert zugewiesen ist.
nillable: (boolean) Element kann NIL Wert haben.
Elemente
Seite 4h_da
SS
201
4
XML Schema – Attribut Deklaration
Übersicht über Attribute bei der XML/Schema Attributdeklaration:
name: XML Name
type: Typdefinition (built in oder von der Anwendung definiert, immer einfach)
use: optional | prohibited | required
fixed: Attribute muss mit gegebenem Wert auftreten
default : Attribut erhält den gegebenen Wert, wenn nicht anderweitig ein Wert zugewiesen ist.
Attribute
Seite 5h_da
SS
201
4
XML Schema – Inhaltsmodelle
sequence, choice, all, group
sequence Folge von Elementen, minOccurs und maxOccurs kann angewendet werden.
choice Alternative von Elementen, minOccurs und maxOccurs kann angewendet werden.
all Alle Elemente 0 oder 1 mal in beliebiger Reihenfolgen. Einschränkungen: nur auf oberster Ebene eines Inhaltsmodells,
nur einzelne Elemente (keine Inhaltsmodelle)
group Bilden von Gruppen zur Wiederverwendung.
Seite 6h_da
SS
201
4
XML Schema – Simple Types
XML Schema unterstützt 44 vordefinierte Datatypen (simple types). Formal wird zwischen built-in und derived Datentypen unterschieden.
Beispiele (vollständige Liste folgt):
- string, boolean, decimal, float, double, uriReference, ID, IDREF
- language, name, integer
Zusätzlich gibt es Listentypen:
NMTOKENS, IDREFS,
Und einen Union Type.
Seite 7h_da
SS
201
4
XML Schema – Simple Types
XML Schema unterstützt 44 vordefinierte Datatypen (simple types). Formal wird zwischen built-in und derived Datentypen unterschieden.
Beispiele (vollständige Liste folgt):
- string, boolean, decimal, float, double, uriReference, ID, IDREF
- language, name, integer
Zusätzlich gibt es Listentypen:
NMTOKENS, IDREFS,
Und einen Union Type.
Seite 8h_da
SS
201
4XML Schema – Simple Types
Type Beispiel
string Confirm this is electric
normalizedString Confirm this is electric (newline, tabs, CR werden zu space char)token Confirm this is electric (Folgen von space chars zu einem space char)byte -1, 126
unsignedByte 0, 126
base64Byte GpM7
hexBinary 0FB7
integer -126789, -1, 0, 1, 126789 (und Varianten)
Seite 9h_da
SS
201
4
XML Schema – Simple Types
Type Beispiel
decimal -1.23, 0, 123.4, 1000.00
float -INF, -1E4, -0, 0, 12.78E-2, (auch double)
boolean true, false
time 13:20:00.000
dateTime 1999-05-31T13:20:00.000-05:00
duration P1Y2M3DT10H30M12.3S
date 1999-05-31 (auch Varianten)
Seite 10h_da
SS
201
4
XML Schema – Simple Types
Type Beispiel
Name shipTo
QName po:USAddress
anyURI http://www.example.com/
language en-GB, en-US, fr
ID , IDREF ,IDREFS A1
ENTITY, ENTITIES
NOTATION
NMTOKEN, NMTOKENS
Seite 11h_da
SS
201
4
XML Schema – Simple Types – neuer Typ Aufzählung
Neue einfache Typen werden von existierenden einfachenTypen abgeleitet:
Beispiel (Definition):
<xs:simpleType name="monatname"> <xs:restriction base="xs:string"> Valuespace
<xs:enumeration value="Januar"/> Facet <xs:enumeration value="Februar"/>
.... </xs:restriction>
</xs:simpleType>
Beispiel (Nutzung):
<xs:attribute name= "monat" type= "monatname" use="required"/>
Seite 12h_da
SS
201
4
XML Schema – Simple Types – neuer Typ
Beispiel (Definition):
<xs:simpleType name="monatnummer"> <xs:restriction base="xs:integer"> Valuespace
<xs:minInclusive value="1"/> Facet <xs:maxInclusive value="12"/>
</xs:restriction> </xs:simpleType>
Beispiel (Nutzung):
<xs:attribute name= "monat" type= "monatnummer" use="required"/>
Seite 13h_da
SS
201
4
XML Schema – Simple Types – neuer Typ Liste
Neue einfache Typen werden von existierenden einfachenTypen abgeleitet:
Beispiel (Typ-Definition):
<xs:simpleType name="listOffloats">
<xs:list itemType="xs:float"/>
</xs:simpleType>
Beispiel (Element-Definition):
<xs:element name="mengen" type ="listOffloats"/>
Beispiel (Nutzung):
<mengen>200E03 150.37 959E-7 95.945</mengen>
Seite 14h_da
SS
201
4
XML Schema – Simple Types – neuer Typ
Für jeden Built-in Datentyp ist festgelegt, welche Facets anwendbar sind:
Beispiel: string
• length • minLength • maxLength • pattern • enumeration
Ausserdem ist definiert, welche built-in derived Datentypen definiert sind:
• language • NMTOKEN • name
Seite 15h_da
SS
201
4
XML Schema – Simple Types – neuer Typ
Für jeden Built-in Datentyp ist festgelegt, welche Facets anwendbar sind:
Beispiel: integer
• precision • scale • pattern • enumeration • maxInclusive • maxExclusive • minInclusive • minExclusive
Ausserdem ist definiert, welche built-in derived Datentypen definiert sind:
• nonPositiveInteger • long • nonNegativeInteger
Seite 16h_da
SS
201
4
XML Schema – Simple Types
Beispiel für einen Union Type:
<xs:simpleType name="monatUnion"> <xs:union memberTypes="monatname monatnummer"/>
</xs:simpleType>
Erlaubt sind dann folgende Exemplare:
<monate>1 3 12</monate> <monate>Januar 3 Dezember</monate> <monate>Mai</monate>
Seite 17h_da
SS
201
4
XML Schema – Typenkonzept
Alle Typdefinitionen in XML Schema bilden eine Hierarchie. Wurzel dieser Hierarchie ist der "Ur-Typ", von dem alle simple und complex Typen abgeleitet sind.
xs:anyType als Typbezeichnung eines Elements legt fest, dass der Inhalt in keiner Weise beschränkt ist.
Neue Typen werden durch extension oder restriction von definierten Typen abgeleitet.
Beispiel für restriction:
<xs:simpleType name="monatnummer"> <xs:restriction base="xs:integer"> Valuespace <xs:minInclusive value="1"/> Facet
<xs:maxInclusive value="12"/> </xs:restriction>
</xs:simpleType>
Seite 19h_da
SS
201
4
XML Schema – Typenkonzept
Typdefinition durch extension:
Typdefinition einer Adresse (dient als Ausgangsmaterial):
<xs:complexType name="Adresse"><xs:sequence> <xs:element name="Name" type="xs:string"/>
<xs:element name="Strasse" type="xs:string"/> <xs:element name="Stadt" type="xs:string"/></xs:sequence>
</xs:complexType>
Seite 20h_da
SS
201
4
XML Schema – Typenkonzept - Extension
<xs:complexType name="DE_Adresse"><xs:complexContent>
<xs:extension base="Adresse"> <xs:sequence> <xs:element name="PLZ" type="xs:integer"
minOccurs="0"/> </xs:sequence> <xs:attribute name="Code" type="xs:string"/></xs:extension>
</xs:complexContent></xs:complexType>
<xs:element name="Lieferadresse" type="DE_Adresse"/>
<Lieferadresse Code="D"><Name>Maier</Name> <Strasse>Bergstrasse</Strasse><Stadt>Darmstadt</Stadt> <PLZ>64282</PLZ>
</Lieferadresse>
Seite 21h_da
SS
201
4
XML Schema – Typenkonzept - Restriction
Restriktionen sind auf bestimmte Fälle eingeschränkt:
- Optionale Elemente dürfen wegfallen,
- Defaultwerte definieren, wenn keiner definiert war (Attribute)
- Fixed Value definieren, wenn keiner definiert war (Attribute)
- Typdefinition, wenn kein Typ definiert war (Attribute)
- Einschränkende Facets definieren (Attribute)
- Wiederholungsfaktoren (minOccurs, maxOccurs) einschränken
Seite 22h_da
SS
201
4
XML Schema – Typenkonzept, abstrakte Typen
XML Schema unterstützt abstrakte Typen:
- Können nicht instantiiert werden.
- Abgeleitete Typen in den Dokumentinstanzen müssen das xsi:type Attribut verwenden, um den konkreten Type anzuzeigen
Verwendung:
<transport xsi:type="Car"/>
Seite 23h_da
SS
201
4XML Schema – Typenkonzept, abstrakte Typen
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="Vehicle" abstract="true"/><xs:complexType name="Car">
<xs:complexContent> <xs:extension base="Vehicle"/></xs:complexContent>
</xs:complexType><xs:complexType name="Plane">
<xs:complexContent> <xs:extension base="Vehicle"/></xs:complexContent>
</xs:complexType><xs:element name="transport" type="Vehicle"/>
</xs:schema>
Verwendung:<transport xsi:type="Car"/>
Seite 24h_da
SS
201
4
XML Schema – Typenkonzept, anonyme Typen
Ein anonymer Typ hat keinen Namen (kein name-Attribut). Solche Typen:
• können nicht referenziert (wiederverwendet werden)
• Sind nur innerhalb einer Typ-/Element-Deklaration möglich
Beispiel:
<xs:element name="Preis"> <xs:complexType>
<xs:simpleContent> <xs:extension base="xs:decimal">
<xs:attribute name="currency" type="xs:string"/> </xs:extension>
</xs:simpleContent> </xs:complexType>
</xs:element>
Seite 25h_da
SS
201
4
XML Schema – Complex Types – Beispiele aus MPEG-7<!-- Definition of IntegerMatrix datatype -->
<complexType name="IntegerMatrixType"><simpleContent> <extension base="integerVector"> <attribute ref="dim" use="required"/> </extension></simpleContent>
</complexType> <!-- definition of dim attribute --> <attribute name="dim"> <simpleType> <restriction base="listOfPositiveIntegerForDim"> <minLength value="1"/> </restriction> </simpleType> </attribute>
Seite 26h_da
SS
201
4
XML Schema – Complex Types – Beispiele aus MPEG-7
<!-- Definition of listOfPositiveIntegerForDim datatype --> <simpleType name="listOfPositiveIntegerForDim"> <list itemType="positiveInteger"/> </simpleType>
<!-- Definition of integerVector datatype --><simpleType name="integerVector">
<list itemType="integer"/></simpleType>
Seite 27h_da
SS
201
4
XML Schema – Complex Types – Beispiele aus MPEG-7
<!-- Deklaration eine Matrix im Schema --><xs:element name="myMatrix" type="IntegerMatrixType">
<!-- Instanz eines Vektors der Länge 5 --><myMatrix dim="5" >5 6 6 7 8</myMatrix>
<!-- Instanz einer 2-dimensionalen 3 x 5 Matrix →<myMatrix dim="3 5"> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15</myMatrix>
Seite 28h_da
SS
201
4
XML Schema – Grundkonzepte- Mixed content
<?xml version="1.0" encoding="UTF-8"?>
<employee>
Text <id>123</id> Text2 <name>Maier</name> Text3 <hireDate>12-12-12</hireDate> Text4 </employee>
Seite 29h_da
SS
201
4
XML Schema – Grundkonzepte- Mixed content
Mit XML/Schema kann die Reihenfolge definiert werden:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"><xs:complexType name="employeeType" mixed="true">
<xs:sequence><xs:element name="id" type="xs:int"/><xs:element name="name" type="xs:string"/><xs:element name="hireDate" type="xs:date"/>
</xs:sequence></xs:complexType><xs:element name="employee" type="employeeType"/>
</xs:schema>