Upload
misae
View
41
Download
0
Embed Size (px)
DESCRIPTION
Module 3 XML Schema. Recapitulation (Module 2). XML as inheriting from the Web history SGML, HTML, XHTML, XML XML key concepts Documents, elements, attributes, text Order, nested structure, textual information Namespaces XML usage scenarios Financial, medical, Web Services, blogs, etc - PowerPoint PPT Presentation
Citation preview
1
Module 3Module 3
XML SchemaXML Schema
2
Recapitulation (Module Recapitulation (Module 2)2)
XML as inheriting from the Web historyXML as inheriting from the Web history SGML, HTML, XHTML, XMLSGML, HTML, XHTML, XML
XML key conceptsXML key concepts Documents, elements, attributes, textDocuments, elements, attributes, text Order, nested structure, textual informationOrder, nested structure, textual information
NamespacesNamespaces XML usage scenariosXML usage scenarios
Financial, medical, Web Services, blogs, etcFinancial, medical, Web Services, blogs, etc communication data, meta data, documentscommunication data, meta data, documents
DTDs and the need for describing the DTDs and the need for describing the “structure” of an XML file“structure” of an XML file
Next: XML SchemasNext: XML Schemas
3
Limitations of DTDsLimitations of DTDs DTDs describe only the “grammar” of the DTDs describe only the “grammar” of the
XML file, not the detailed structure and/or XML file, not the detailed structure and/or typestypes
This grammatical description has some obvious This grammatical description has some obvious shortcomings:shortcomings: we cannot express that a “length” element must contain a we cannot express that a “length” element must contain a
non-negative number non-negative number (constraints on the type of the (constraints on the type of the value of an element or attribute)value of an element or attribute)
The “unit”The “unit” element should only be allowed when element should only be allowed when ““amount”amount” is present is present (co-occurrence constraints)(co-occurrence constraints)
the “the “comment”comment” element should be allowed to appear element should be allowed to appear anywhere anywhere (schema flexibility)(schema flexibility)
There is no subtyping / inheritance There is no subtyping / inheritance (reuse of definitions)(reuse of definitions) There are no composite keysThere are no composite keys (referential integrity) (referential integrity)
4
Overview XML SchemaOverview XML Schema ComplexTypes and SimpleTypesComplexTypes and SimpleTypes
ComplexType correspond to RecordsComplexType correspond to Records „„string“ is an example of a SimpleTypestring“ is an example of a SimpleType
Built-in and user-defined TypesBuilt-in and user-defined Types ComplexTypes are always user-definedComplexTypes are always user-defined
Elements have complexTypes or Elements have complexTypes or simpleTypes; simpleTypes; Attributes have simpleTypesAttributes have simpleTypes
Type of Root element of a document is globalType of Root element of a document is global (almost) downward comptable with DTDs(almost) downward comptable with DTDs Schemas are XML Documents (Syntax)Schemas are XML Documents (Syntax) Namespaces etc. are part of XML SchemasNamespaces etc. are part of XML Schemas
5
Example SchemaExample Schema<?xml version=„1.0“ ?><?xml version=„1.0“ ?><xsd:schema xmlns:xsd=„http://w3.org/2001/XMLSchema“><xsd:schema xmlns:xsd=„http://w3.org/2001/XMLSchema“> <xsd:element name=„book“ type=„<xsd:element name=„book“ type=„BookTypeBookType“/>“/>
<xsd:complexType name=„BookType“><xsd:complexType name=„BookType“> <xsd:sequence><xsd:sequence> <xsd:element name=„title“ type=„<xsd:element name=„title“ type=„xsd:stringxsd:string“/>“/>
<xsd:element name=„author“ type=„<xsd:element name=„author“ type=„PersonTypePersonType““minOccurs=„1“ maxOccurs=„unbounded“minOccurs=„1“ maxOccurs=„unbounded“/>/>
<xsd:complexType name=„PersonType“><xsd:complexType name=„PersonType“><xsd:sequence> ... <xsd:sequence><xsd:sequence> ... <xsd:sequence></xsd:complexType></xsd:complexType>
<xsd:element name=„publisher“ <xsd:element name=„publisher“ type=„type=„xsd:anyTypexsd:anyType“/>“/>
</xsd:sequence></xsd:sequence> </xsd:complexType></xsd:complexType></xsd:schema></xsd:schema>
6
Example SchemaExample Schema<?xml version=„1.0“ ?><?xml version=„1.0“ ?><xsd:schema <xsd:schema
xmlns:xsd=„http://w3.org/2001/XMLSchema“>xmlns:xsd=„http://w3.org/2001/XMLSchema“> ......</xsd:schema></xsd:schema>
Schema in a separate XML DocumentSchema in a separate XML Document Vocabulary of Schema defined in special Vocabulary of Schema defined in special
Namespace. Prefix „xsd“ is commonly usedNamespace. Prefix „xsd“ is commonly used There is a Schema for Schemas (don‘t There is a Schema for Schemas (don‘t
worry!)worry!) „„schema“ Element is always the Rootschema“ Element is always the Root
7
Example SchemaExample Schema <xsd:element name=„book“ type=„<xsd:element name=„book“ type=„BookTypeBookType“/>“/>
„„element“ Element in order to declare elementselement“ Element in order to declare elements „„name“ defines the name of the element.name“ defines the name of the element. „„type“ defines the type of the element type“ defines the type of the element Declarations under „schema“ are Declarations under „schema“ are globalglobal Global element declarations are potential rootsGlobal element declarations are potential roots Example: „book“ is the only global element, Example: „book“ is the only global element,
root element of a valid document must be a root element of a valid document must be a „book“.„book“.
The type of a „book“ is BookType (defined next).The type of a „book“ is BookType (defined next).
8
Example SchemaExample Schema<xsd:complexType name=„BookType“><xsd:complexType name=„BookType“> <xsd:sequence><xsd:sequence> ...... </xsd:sequence></xsd:sequence></xsd:complexType></xsd:complexType>
User-defined complex typeUser-defined complex type Defines a sequence of sub-elementsDefines a sequence of sub-elements Attribute Attribute „name“„name“ specifies name of Type specifies name of Type This Typedefinition is This Typedefinition is global.global.
Type can be used in any other definition.Type can be used in any other definition.
9
Example SchemaExample Schema
<xsd:sequence><xsd:sequence> <xsd:element name=„title“ type=„<xsd:element name=„title“ type=„xsd:stringxsd:string“/>“/></xsd:sequence></xsd:sequence> Local element declaration within a complex Local element declaration within a complex
typetype („title“ cannot be root element of documents)(„title“ cannot be root element of documents) „„name“name“ and and „type“„type“ as before as before „„xsd:string“xsd:string“ is built-in type of XML Schemais built-in type of XML Schema
10
Example SchemaExample Schema<xsd:element name=„author“ <xsd:element name=„author“
type=„type=„PersonTypePersonType““minOccurs=„1“ minOccurs=„1“
maxOccurs=„unbounded“maxOccurs=„unbounded“/>/> Local element declarationLocal element declaration „„PersonType“PersonType“ is user-defined type is user-defined type „„minOccurs“, „maxOccurs“ minOccurs“, „maxOccurs“ specify cardinality specify cardinality
of of „author“„author“ Elements in Elements in „BookType“.„BookType“. Default: Default: minOccurs=1, maxOccurs=1minOccurs=1, maxOccurs=1
11
Example SchemaExample Schema<xsd:complexType name=„PersonType“><xsd:complexType name=„PersonType“>
<xsd:sequence> <xsd:sequence> <xsd:element name=„first“ <xsd:element name=„first“
type=„xsd:string“/>type=„xsd:string“/><xsd:element name=„last“ <xsd:element name=„last“
type=„xsd:string“/>type=„xsd:string“/><xsd:sequence><xsd:sequence>
</xsd:complexType></xsd:complexType>
Local type definitionLocal type definition „„PersonType“PersonType“ may only be used inside the may only be used inside the
scope of the definition of BookType.scope of the definition of BookType. The same syntax as for BookType.The same syntax as for BookType.
12
Example SchemaExample Schema <xsd:element name=„publisher“ <xsd:element name=„publisher“
type=„type=„xsd:anyTypexsd:anyType“/>“/> Local element declaratationLocal element declaratation Every book has exactly one Every book has exactly one „publisher“ „publisher“
minOccurs, maxOccurs minOccurs, maxOccurs by default 1by default 1 „„anyType“ anyType“ is built-in Typeis built-in Type „„anyType“ allows any contentanyType“ allows any content „„anyType“anyType“ is default type. Equivalent is default type. Equivalent
definition:definition:<xsd:element name=„publisher“ /><xsd:element name=„publisher“ />
13
Example SchemaExample Schema<?xml version=„1.0“ ?><?xml version=„1.0“ ?><xsd:schema xmlns:xsd=„http://w3.org/2001/XMLSchema“><xsd:schema xmlns:xsd=„http://w3.org/2001/XMLSchema“> <xsd:element name=„book“ type=„<xsd:element name=„book“ type=„BookTypeBookType“/>“/>
<xsd:complexType name=„BookType“><xsd:complexType name=„BookType“> <xsd:sequence><xsd:sequence> <xsd:element name=„title“ type=„<xsd:element name=„title“ type=„xsd:stringxsd:string“/>“/>
<xsd:element name=„author“ type=„<xsd:element name=„author“ type=„PersonTypePersonType““minOccurs=„1“ maxOccurs=„unbounded“minOccurs=„1“ maxOccurs=„unbounded“/>/><xsd:complexType name=„PersonType“><xsd:complexType name=„PersonType“><xsd:sequence> ... <xsd:sequence><xsd:sequence> ... <xsd:sequence></xsd:complexType></xsd:complexType>
<xsd:element name=„publisher“ <xsd:element name=„publisher“ type=„type=„xsd:anyTypexsd:anyType“/>“/>
</xsd:sequence></xsd:sequence> </xsd:complexType></xsd:complexType></xsd:schema></xsd:schema>
14
Valid DocumentValid Document<?xml version=„1.0“><?xml version=„1.0“><book><book> <title>Die Wilde Wutz</title><title>Die Wilde Wutz</title> <author><first>D.</first><author><first>D.</first> <last>K.</last></author><last>K.</last></author> <publisher> Addison Wesley, <publisher> Addison Wesley, <state>CA</state>, USA<state>CA</state>, USA </publisher></publisher></book></book>
15
Valid DocumentValid Document<?xml version=„1.0“><?xml version=„1.0“><book><book> <title>Die Wilde Wutz</title><title>Die Wilde Wutz</title> <author><first>D.</first><author><first>D.</first> <last>K.</last></author><last>K.</last></author> <publisher> Addison Wesley, <publisher> Addison Wesley, <state>CA</state>, USA<state>CA</state>, USA </publisher></publisher></book></book>
Root is book
16
Valid DocumentValid Document<?xml version=„1.0“><?xml version=„1.0“><book><book> <title>Die Wilde Wutz</title><title>Die Wilde Wutz</title> <author><first>D.</first><author><first>D.</first> <last>K.</last></author><last>K.</last></author> <publisher> Addison Wesley, <publisher> Addison Wesley, <state>CA</state>, USA<state>CA</state>, USA </publisher></publisher></book></book>
Exactly one title of Type string
17
Valid DocumentValid Document<?xml version=„1.0“><?xml version=„1.0“><book><book> <title>Die Wilde Wutz</title><title>Die Wilde Wutz</title> <author><first>D.</first><author><first>D.</first> <last>K.</last></author><last>K.</last></author> <publisher> Addison Wesley, <publisher> Addison Wesley, <state>CA</state>, USA<state>CA</state>, USA </publisher></publisher></book></book>
At least one authorof Type
PersonTypeOne publisher
with arbitrary content.
Subelements In right order
18
Schema ValidationSchema Validation Conformance TestConformance Test
Result: „true“ or „false“Result: „true“ or „false“ Infoset ContributionInfoset Contribution
Annotate TypesAnnotate Types Set Default ValuesSet Default Values Result: new instance of the data modelResult: new instance of the data model
Tools: Xerces (Apache)Tools: Xerces (Apache) Theory: Graph Simulation AlgorithmsTheory: Graph Simulation Algorithms Validation is a-posteri; explicit - not implicit!Validation is a-posteri; explicit - not implicit!
19
Global vs. Local Global vs. Local DeclarationsDeclarations
Instances of global element declarations are Instances of global element declarations are potential root elements of documents potential root elements of documents
Global declarations can be referencedGlobal declarations can be referenced<xsd:schema xmlns:xsd=„...“><xsd:schema xmlns:xsd=„...“> <xsd:element name=„book“ type=„BookType“/> <xsd:element name=„book“ type=„BookType“/> <xsd:element name=„comment“ <xsd:element name=„comment“
type=„xsd:string“/> type=„xsd:string“/> <xsd:ComplexType name=„BookType“> <xsd:ComplexType name=„BookType“> ... <xsd:element ... <xsd:element ref=„comment“ref=„comment“ minOccurs=„0“/>...minOccurs=„0“/>...
ConstraintsConstraints „„ref“ref“ not allowed in global declarations not allowed in global declarations No No „minOccurs“, „maxOccurs“„minOccurs“, „maxOccurs“ in global Decl. in global Decl.
20
Attribute DeclarationsAttribute Declarations Attributes may only have a SimpleTypeAttributes may only have a SimpleType SimpleTypes are, e.g., „string“ (more SimpleTypes are, e.g., „string“ (more
later)later) Attribute declarations can be global Attribute declarations can be global
Reuse declarations with Reuse declarations with refref Compatible to Attribute lists in DTDsCompatible to Attribute lists in DTDs
Default values possibleDefault values possible Required and optional attributesRequired and optional attributes Fixed attributesFixed attributes (In addition, there are „prohibited“ (In addition, there are „prohibited“
attributes)attributes)
21
Attribute DeclarationsAttribute Declarations<xsd:complexType name=„BookType“><xsd:complexType name=„BookType“> <xsd:sequence> ... </xsd:sequence><xsd:sequence> ... </xsd:sequence> <xsd:attribute name=„isbn“ type=„xsd:string“<xsd:attribute name=„isbn“ type=„xsd:string“
use=„required“use=„required“ />/> <xsd:attribute name=„price“ type=„xsd:decimal“<xsd:attribute name=„price“ type=„xsd:decimal“ use=„optional“use=„optional“ />/> <xsd:attribute name=„curr“ type=„xsd:string“<xsd:attribute name=„curr“ type=„xsd:string“ fixed=„EUR“fixed=„EUR“ />/> <xsd:attribute name=„index“ type=„xsd:idrefs“<xsd:attribute name=„index“ type=„xsd:idrefs“ default=„“default=„“ />/></xsd:complexType></xsd:complexType>
22
Anonymous TypesAnonymous Types PersonType PersonType need not be „named“need not be „named“<xsd:complexType name=„BookType“><xsd:complexType name=„BookType“> ...... <xsd:element name=„author“><xsd:element name=„author“> <xsd:complexType><xsd:complexType> <xsd:sequence><xsd:sequence> <xsd:element name=„first“ <xsd:element name=„first“
type=„xsd:string“/>type=„xsd:string“/> <xsd:element name=„last“ type=„xsd:string“/><xsd:element name=„last“ type=„xsd:string“/> </xsd:sequence> </xsd:complexType></xsd:sequence> </xsd:complexType>
</xsd:element></xsd:element> ... ...
23
Simple Elements + Simple Elements + AttributesAttributes<xsd:element name=„price“><xsd:element name=„price“>
<xsd:complexType><xsd:complexType> <xsd:simpleContent><xsd:simpleContent> <xsd:extension base= <xsd:extension base= „xsd:decimal“„xsd:decimal“ > > <xsd:attribute name=„curr“ <xsd:attribute name=„curr“
type=„xsd:string“/>type=„xsd:string“/> </xsd:extension></xsd:extension> </xsd:simpleContent></xsd:simpleContent> </xsd:complexType> </xsd:element> </xsd:complexType> </xsd:element>
Valid Instance:Valid Instance: <price <price curr=„USD“curr=„USD“ >>69.9569.95</price></price>
24
Element + Attributes, no Element + Attributes, no ContentContent
<xsd:element name=„price“><xsd:element name=„price“> <xsd:complexType><xsd:complexType> <xsd:attribute name=„curr“ <xsd:attribute name=„curr“
type=„xsd:string“/>type=„xsd:string“/> <xsd:attribute name=„val“ <xsd:attribute name=„val“
type=„xsd:decimal“/>type=„xsd:decimal“/> </xsd:complexType></xsd:complexType></xsd:element></xsd:element>
Valid Instance:Valid Instance:<price <price curr=„USD“curr=„USD“ val=„69.95“val=„69.95“ />/>
25
Pre-defined Pre-defined SimpleTypesSimpleTypes
Numeric ValuesNumeric ValuesInteger, Short, Decimal, Float, Double, Integer, Short, Decimal, Float, Double,
HexBinary, ...HexBinary, ... Date, Timestamps, PeriodsDate, Timestamps, Periods
Duration, DateTime, Time, Date, gMonth, ...Duration, DateTime, Time, Date, gMonth, ... StringsStrings
String, NMTOKEN, NMTOKENS, NormalizedStringString, NMTOKEN, NMTOKENS, NormalizedString OthersOthers
Qname, AnyURI, ID, IDREFS, Language, Entity, ...Qname, AnyURI, ID, IDREFS, Language, Entity, ... In summary, 44 pre-defined simple typesIn summary, 44 pre-defined simple types
Question: How many does SQL have?Question: How many does SQL have?
26
Derived SimpleTypesDerived SimpleTypes Restrict domainRestrict domain
<xsd:simpleType name=„MyInteger“><xsd:simpleType name=„MyInteger“> <xsd:restriction<xsd:restriction base=„xsd:integer“>base=„xsd:integer“> <xsd:minInclusive value=„10000“/><xsd:minInclusive value=„10000“/>
<xsd:maxInclusive value=„99999“/><xsd:maxInclusive value=„99999“/> </xsd:restriction></xsd:restriction></xsd:simpleType></xsd:simpleType>
minInclusive, maxInclusiveminInclusive, maxInclusive are are „Facets“„Facets“
27
Derived SimpleTypesDerived SimpleTypes
Restriction by Pattern MatchingRestriction by Pattern Matching Currencies have three capital lettersCurrencies have three capital letters
<xsd:simpleType name=„Currency“><xsd:simpleType name=„Currency“> <xsd:restriction <xsd:restriction base=„xsd:string“base=„xsd:string“ > > <xsd:pattern value=„[A-Z]{3}“/><xsd:pattern value=„[A-Z]{3}“/> </xsd:restriction></xsd:restriction></xsd:simpleType></xsd:simpleType>
28
Derived SimpleTypesDerived SimpleTypes Restriction by EnumerationRestriction by Enumeration
<xsd:simpleType name=„Currency“><xsd:simpleType name=„Currency“> <xsd:restriction <xsd:restriction base=„xsd:string“base=„xsd:string“ > > <xsd:enumeration value=„ATS“/><xsd:enumeration value=„ATS“/> <xsd:enumeration value=„EUR“/><xsd:enumeration value=„EUR“/> <xsd:enumeration value=„GBP“/><xsd:enumeration value=„GBP“/> <xsd:enumeration value=„USD“/> <xsd:enumeration value=„USD“/> </xsd:restriction></xsd:restriction></xsd:simpleType></xsd:simpleType>
29
Derived SimpleTypesDerived SimpleTypes There are 15 different kinds of There are 15 different kinds of
FacetsFacets e.g., minExclusive, totalDigits, ...e.g., minExclusive, totalDigits, ...
Most built-in types are derived from Most built-in types are derived from other built-in types by restrictionother built-in types by restriction e.g., Integer is derived from Decimale.g., Integer is derived from Decimal there are only 19 base types (out of 44)there are only 19 base types (out of 44)
Ref: Appendix B of XML Schema Ref: Appendix B of XML Schema PrimerPrimer
30
List TypesList Types SimpleType for ListsSimpleType for Lists Built-in List Types: IDREFS, NMTOKENSBuilt-in List Types: IDREFS, NMTOKENS User-defined List TypesUser-defined List Types
<xsd:simpleType name = „intList“ ><xsd:simpleType name = „intList“ > <xsd:list itemType = „xsd:integer“ /><xsd:list itemType = „xsd:integer“ /></xsd:simpleType></xsd:simpleType>
Items in instances are separed by Items in instances are separed by whitespace whitespace „„5 -10 7 -20“5 -10 7 -20“
Facets for Restrictions:Facets for Restrictions: length, minLength, maxLength, enumerationlength, minLength, maxLength, enumeration
31
Facets of List TypesFacets of List Types
<xsd:simpleType name = „Participants“ ><xsd:simpleType name = „Participants“ > <xsd:list itemType = „xsd:string“ /><xsd:list itemType = „xsd:string“ /><xsd:simpleType><xsd:simpleType>
<xsd:simpleType name = „Medalists“ ><xsd:simpleType name = „Medalists“ > <xsd:restriction base = „Participants“ ><xsd:restriction base = „Participants“ > <xsd:length value = „3“ /><xsd:length value = „3“ /> </xsd:restriction></xsd:restriction></xsd:simpleType></xsd:simpleType>
32
Union TypesUnion Types Corresponds to the „|“ in DTDsCorresponds to the „|“ in DTDs
(Variant Records in Pascal or Union in C)(Variant Records in Pascal or Union in C) Valid instances are valid to any of the typesValid instances are valid to any of the types
<xsd:simpleType name = „Potpurri“ ><xsd:simpleType name = „Potpurri“ > <xsd:union memberTypes = „xsd:string <xsd:union memberTypes = „xsd:string
intList“/>intList“/></xsd:simpleType></xsd:simpleType>
Valid InstanzesValid Instanzes„„fünfzig“ „1 3 17“ „wunderbar“ „15“fünfzig“ „1 3 17“ „wunderbar“ „15“
Supported FacetsSupported Facets pattern, enumerationpattern, enumeration
33
Choice: „Union“ in Choice: „Union“ in ComplexTypesComplexTypes
A book has either an A book has either an „author“„author“ or an „ or an „editor“editor“<xsd:complexType name = „Book“ > <xsd:sequence><xsd:complexType name = „Book“ > <xsd:sequence> <xsd:choice><xsd:choice> <xsd:element name = „author“ type = „Person“<xsd:element name = „author“ type = „Person“ maxOccurs = „unbounded“ />maxOccurs = „unbounded“ /> <xsd:element name = „editor“ type = „Person“ /><xsd:element name = „editor“ type = „Person“ /> </xsd:choice></xsd:choice></xsd:sequence> </xsd:complexType></xsd:sequence> </xsd:complexType>
34
Element GroupsElement Groups If the book has an „editor“, then the book also If the book has an „editor“, then the book also
has a „sponsor“:has a „sponsor“:
<xsd:complexType name = „Book“ > <xsd:sequence><xsd:complexType name = „Book“ > <xsd:sequence> <xsd:choice><xsd:choice>
<xsd:element name = „Author“ type = „Person“ .../><xsd:element name = „Author“ type = „Person“ .../> <xsd:group<xsd:group ref = „EditorSponsor“ref = „EditorSponsor“ />/>
</xsd:choice></xsd:choice> </xsd:sequence> </xsd:complexType></xsd:sequence> </xsd:complexType>
<xsd:group name = „EditorSponsor“ > <xsd:sequence> <xsd:group name = „EditorSponsor“ > <xsd:sequence> <xsd:element name =„Editor“ type=„Person“ /> <xsd:element name =„Editor“ type=„Person“ />
<xsd:element name = „Sponsor“ type = „Org“ /><xsd:element name = „Sponsor“ type = „Org“ /></xsd:sequence> </xsd:group></xsd:sequence> </xsd:group>
35
Optional Element Optional Element GroupsGroups
All or nothing; unordered contentAll or nothing; unordered content PubInfo has „name“, „year“, „city“ PubInfo has „name“, „year“, „city“
or gar nothingor gar nothing <xsd:complexType name = „PubInfo“ > <xsd:sequence><xsd:complexType name = „PubInfo“ > <xsd:sequence>
<xsd:all><xsd:all> <xsd:element name = „name“ type = „xsd:string“/><xsd:element name = „name“ type = „xsd:string“/> <xsd:element name = „year“ type = „xsd:string“ /><xsd:element name = „year“ type = „xsd:string“ /> <xsd:element name = „ort“ type = „xsd:string“ /><xsd:element name = „ort“ type = „xsd:string“ /> </xsd:all></xsd:all> <!-- Attributdeklarationen --><!-- Attributdeklarationen --></xsd:sequence> </xsd:complexType></xsd:sequence> </xsd:complexType>
No other element declarations allowed!!!No other element declarations allowed!!! maxOccurs must be 1maxOccurs must be 1
36
Attribute GroupsAttribute Groups<xsd:attributeGroup name = „PriceInfo“ ><xsd:attributeGroup name = „PriceInfo“ > <xsd:attribute name = „curr“ type = <xsd:attribute name = „curr“ type =
„xsd:string“ />„xsd:string“ /> <xsd:attribute name = „val“ type = <xsd:attribute name = „val“ type =
„xsd:decimal“ />„xsd:decimal“ /></xsd:attributeGroup></xsd:attributeGroup>
<xsd:complexType name = „Book“ ><xsd:complexType name = „Book“ > ...... <xsd:attributeGroup <xsd:attributeGroup ref = „PriceInfo“ref = „PriceInfo“ /> /></xsd:complexType></xsd:complexType>
37
Definition of KeysDefinition of Keys Keys are defined as part of elementsKeys are defined as part of elements Special sub-element „key“Special sub-element „key“
selector: describes the context (e.g., emp in a DB) selector: describes the context (e.g., emp in a DB) field: describes the key within contextfield: describes the key within context several fields several fields ~ composite keys~ composite keys
selector and fields are XPath expressionsselector and fields are XPath expressions ValidationValidation
Eval „Eval „selectorselector“ -> “ -> Sequence of NodesSequence of Nodes Eval „Eval „fieldsfields“ on “ on NodesNodes -> -> Set of tuplesSet of tuples Check that there are no duplicates in Check that there are no duplicates in Set of Set of
tuplestuples
38
Definition of KeysDefinition of Keys „„isbn“isbn“ is key of is key of „books“„books“ in „bib“ in „bib“
<element name = „bib“> <complexType> <element name = „bib“> <complexType> <sequence><sequence>
<element book maxOccurs = „unbounded> <element book maxOccurs = „unbounded> <complexType> <sequence> ... </sequence> <complexType> <sequence> ... </sequence>
<attribute <attribute name = „isbn“name = „isbn“ type = type = „string“ />„string“ />
</complexType> </element></complexType> </element> </sequence></sequence> <key name = „constraintX“ ><key name = „constraintX“ > <selector xpath = „book“ /> <selector xpath = „book“ />
<field xpath = „@isbn“ /> <field xpath = „@isbn“ /> </key></key></complexType> </element></complexType> </element>
39
References (foreign keys)References (foreign keys) Part of the definition of an elementPart of the definition of an element Concept: Concept: „selector“„selector“ and and „field(s)“ „field(s)“
selector: determines context of the foreign keysselector: determines context of the foreign keys field(s): specify the foreign key field(s): specify the foreign key refer: gives the scope of the references (key refer: gives the scope of the references (key
constr.)constr.) Syntax; e.g., books referencing other books:Syntax; e.g., books referencing other books:
<keyref name = „constraintY“ refer = <keyref name = „constraintY“ refer = „constraintX“ >„constraintX“ >
<selector xpath = „book/references“ /> <selector xpath = „book/references“ /> <field xpath = „@isbn“ /><field xpath = „@isbn“ /></keyref></keyref>
40
UNIQUE ConstraintsUNIQUE Constraints Same concept as in SQLSame concept as in SQL
uniqueness, but no referentiabilityuniqueness, but no referentiability Syntax and concept almost the same as Syntax and concept almost the same as
for keysfor keys<unique name = „constraintZ“><unique name = „constraintZ“> <selector xpath = „book“ /><selector xpath = „book“ /> <field xpath = „title“ /><field xpath = „title“ /></unique></unique>
Part of the definition of an elementPart of the definition of an element
41
Null ValuesNull Values „„not there“ vs. „unknown“ (i.e., null)not there“ vs. „unknown“ (i.e., null) „„empty“ vs. „unknown“empty“ vs. „unknown“ Concept: Attribute „nil“with value „true“Concept: Attribute „nil“with value „true“ Only works for elementsOnly works for elements Schema definition: „NULL ALLOWED“Schema definition: „NULL ALLOWED“
<xsd:element name = „publisher“ type = <xsd:element name = „publisher“ type = „PubInfo“„PubInfo“
nillable = „true“nillable = „true“ /> /> Valid Instance with content „unknown“Valid Instance with content „unknown“
<publisher <publisher xsi:nil = „true“xsi:nil = „true“ /> /> xsi: Namespace for predefined Instancesxsi: Namespace for predefined Instances Publisher may have other attributes, but Publisher may have other attributes, but
content must be empty!content must be empty!
42
Derived Complex TypesDerived Complex Types Two concepts of subtyping / inheritanceTwo concepts of subtyping / inheritance Subtyping via ExtensionSubtyping via Extension
Add ElementenAdd Elementen Similar to inheritance in OOSimilar to inheritance in OO
Subtyping via RestrictionSubtyping via Restriction e.g., constrain domains of types usede.g., constrain domains of types used substituitability is preservedsubstituitability is preserved
Further „features“Further „features“ Constrain Sub-typisierung (Constrain Sub-typisierung (~final~final)) Abstracte TypesAbstracte Types
43
Subtyping via ExtensionSubtyping via Extension A „book“ is a „publikation“A „book“ is a „publikation“<xsd:complexType name = „Publication“> <xsd:complexType name = „Publication“>
<xsd:sequence><xsd:sequence> <xsd:element name = „title“ type = „xsd:string“ /><xsd:element name = „title“ type = „xsd:string“ /> <xsd:element name = „year“ type = „xsd:integer“ /> <xsd:element name = „year“ type = „xsd:integer“ /> </xsd:sequence> </xsd:complexType> </xsd:sequence> </xsd:complexType> <xsd:complexType name = „Book“> <xsd:complexType name = „Book“>
<xsd:complexContent><xsd:complexContent> <xsd:extension base =<xsd:extension base = „Publication“„Publication“ > >
<xsd:sequence><xsd:sequence> <xsd:element name = „author“ type = „Person“ /><xsd:element name = „author“ type = „Person“ /> </xsd:sequence> </xsd:sequence> </xsd:extension></xsd:extension></xsd:complexContent> </xsd:complexType></xsd:complexContent> </xsd:complexType>
44
Subtyping by ExtensionSubtyping by Extension A „bib“ contains „Publications“ A „bib“ contains „Publications“ <xsd:element name = „bib“ > <xsd:sequence><xsd:element name = „bib“ > <xsd:sequence> <xsd:element name = „pub“ type = „Publication“ <xsd:element name = „pub“ type = „Publication“
maxOccurs = „unbounded“/>maxOccurs = „unbounded“/></xsd:sequence> </xsd:element></xsd:sequence> </xsd:element> „„pub“pub“ Elements may be books!Elements may be books! Instanzes have „xsi:type“ AttributeInstanzes have „xsi:type“ Attribute<bib> <pub <bib> <pub xsi:type = „Book“xsi:type = „Book“>> <title>Wilde Wutz</title><year>1984</year><title>Wilde Wutz</title><year>1984</year> <author>D.A.K.</author> </pub><author>D.A.K.</author> </pub></bib></bib>
45
Subtyping via RestrictionSubtyping via Restriction The following restrictions are allowedThe following restrictions are allowed
Instances of subtypes have default valuesInstances of subtypes have default values Instances of subtypes are fixed (i.e., constant)Instances of subtypes are fixed (i.e., constant) Instances of subtypes have stronger types (e.g., Instances of subtypes have stronger types (e.g.,
string vs. anyType)string vs. anyType) Instances of subtypes have mandatory fields Instances of subtypes have mandatory fields
which optional in supertypewhich optional in supertype Supertype.minOccurs <= Subtype.minOccursSupertype.minOccurs <= Subtype.minOccurs
Supertype.maxOccurs >= Subtype.maxOccursSupertype.maxOccurs >= Subtype.maxOccurs
46
Subtyping via Subtyping via RestrictionRestriction
<complexType name = „superType“> <sequence><complexType name = „superType“> <sequence> <element name = „a“ type = „string“ minOccurs = „0“ /><element name = „a“ type = „string“ minOccurs = „0“ /> <element name = „b“ type = „anyType“ /> <element name = „b“ type = „anyType“ /> <element name = „c“ type = „decimal“ /><element name = „c“ type = „decimal“ /></sequence> <complexType></sequence> <complexType>
<complexType name = „subType“> <complexContent><complexType name = „subType“> <complexContent> <restriction base = „superType“><restriction base = „superType“> <sequence> <sequence> <element name = „a“ type = „string“ minOccurs = „0“ <element name = „a“ type = „string“ minOccurs = „0“
maxOccurs = „0“maxOccurs = „0“ /> /> <element name = „b“ type = „<element name = „b“ type = „stringstring“ /> “ /> <element name = „c“ type = „decimal“ /><element name = „c“ type = „decimal“ /> </sequence> </sequence> </restriction></restriction></complexContent> </complexType></complexContent> </complexType>
47
Substitution GroupsSubstitution Groups Elements, which substitute global elem.Elements, which substitute global elem. E.g., „editor“ is a „person“E.g., „editor“ is a „person“
<element name = „<element name = „personperson“ type = „string“ />“ type = „string“ /><complexType name = „Book“ > <sequence><complexType name = „Book“ > <sequence> <element <element ref = „ref = „personperson““ /> ... /> ...</sequence> </complexType></sequence> </complexType>
<element name = „<element name = „authorauthor“ type = „string““ type = „string“ substitutionGroup = „person“substitutionGroup = „person“ /> /><element name = „<element name = „editoreditor“ type = „string““ type = „string“ substitutionGroup = „person“substitutionGroup = „person“ /> />
48
Abstract Elements and Abstract Elements and TypesTypes
No instances existNo instances exist Only instances of subtypes of substitions Only instances of subtypes of substitions
existexist person in Book must be an author or editor person in Book must be an author or editor
<element name = „person“ type = „string“ <element name = „person“ type = „string“ abstract = „true“abstract = „true“ /> /><complexType name = „Book“ > <sequence><complexType name = „Book“ > <sequence> <element ref = „ <element ref = „personperson“ /> ...“ /> ...</sequence> </complexType></sequence> </complexType>
......
49
Constrain SubtypingConstrain Subtyping Corresponds to „Corresponds to „final“ in Javafinal“ in Java XML Schema is more clever!(?)XML Schema is more clever!(?)
Constrain the kind of subtyping (extension, restriction, Constrain the kind of subtyping (extension, restriction, all)all)
Constrain the facets usedConstrain the facets used<simpleType name = „ZipCode“ ><simpleType name = „ZipCode“ > <restriction base = „string“><restriction base = „string“> <length value = „5“ <length value = „5“ fixed = „true“fixed = „true“ /> /> </restriction> <simpleType></restriction> <simpleType><complexType name = „Book“ <complexType name = „Book“ final = „restriction“final = „restriction“ > >... </complexType>... </complexType>
You may subtype ZipCode. But all subtypes have You may subtype ZipCode. But all subtypes have length 5.length 5.
50
Constrain SubstituabilityConstrain Substituability<complexType name = „Book“ <complexType name = „Book“ block = „all“block = „all“ > >... </complexType>... </complexType>
It is possible to define subtypes of „Book“It is possible to define subtypes of „Book“ So, it is possible to reuse structe of „Book“So, it is possible to reuse structe of „Book“ But instances of subtypes of „Book“ are But instances of subtypes of „Book“ are
NOT books themselves.NOT books themselves. (Now, things get really strange!)(Now, things get really strange!)
51
Namespaces and XML Namespaces and XML SchemaSchema
Declare the Namespace of Elements?Declare the Namespace of Elements? TargetNamespace for Global ElementsTargetNamespace for Global Elements
qualifies names of root elementsqualifies names of root elements elementFormDefaultelementFormDefault
qualifies names of local (sub-) elementsqualifies names of local (sub-) elements attributeFormDefaultattributeFormDefault
qualifies names of attributesqualifies names of attributes
52
Namespaces in the Namespaces in the Schemadef.Schemadef.
<xsd:schema <xsd:schema xmlns:xsd=„http://w3.org/2001/XMLSchema“xmlns:xsd=„http://w3.org/2001/XMLSchema“
xmlns:bo=„http://www.Book.com“xmlns:bo=„http://www.Book.com“
targetNamespace=„http://www.Book.com“targetNamespace=„http://www.Book.com“>> <xsd:element <xsd:element name=„book“name=„book“
type=„bo:BookType“type=„bo:BookType“/>/> <xsd:complexType <xsd:complexType name=„bo:BookTypename=„bo:BookType““ > > ... </xsd:complexType>... </xsd:complexType> </xsd:schema></xsd:schema>
„„book“ und „BookType“ are part of TargetNameSp.book“ und „BookType“ are part of TargetNameSp.
53
Namespaces in Schemadef.Namespaces in Schemadef.<schema xmlns = <schema xmlns =
„http://w3.org/2001/XMLSchema“„http://w3.org/2001/XMLSchema“ xmlns:bo=„http://www.Book.com“xmlns:bo=„http://www.Book.com“
targetNamespace=„http://www.Book.com“ >targetNamespace=„http://www.Book.com“ > <element<element name=„book“ type name=„book“ type = =
„bo:BookType“ />„bo:BookType“ /> <complexType name<complexType name=„BookType“ >=„BookType“ > ... ... </complexType> </complexType> </schema></schema>
54
Namespaces in Schemadef.Namespaces in Schemadef.<xsd:schema <xsd:schema
xmlns:xsd=„http://w3.org/2001/XMLSchema“xmlns:xsd=„http://w3.org/2001/XMLSchema“ xmlns =„http://www.Book.com“xmlns =„http://www.Book.com“
targetNamespace=„http://www.Book.com“ >targetNamespace=„http://www.Book.com“ > <xsd:element name=„book“ <xsd:element name=„book“ type = „BookType“type = „BookType“
/>/> <xsd:complexType xsd:name=„BookType“ ><xsd:complexType xsd:name=„BookType“ > ... </xsd:complexType>... </xsd:complexType> </xsd:schema></xsd:schema>
Target „www.Book.com“ as Default NamespaceTarget „www.Book.com“ as Default Namespace
55
Instances of www.Book.comInstances of www.Book.com<bo:book xmlns:bo = „http://www.Book.com“ <bo:book xmlns:bo = „http://www.Book.com“
>> ......</bo:book></bo:book>
Valid according to all three schemas!Valid according to all three schemas!
56
Schema Location in Schema Location in InstanceInstance
Declare within an XML document, where to find Declare within an XML document, where to find the schema that should valid that documentthe schema that should valid that document
Declare „Declare „target Namespacetarget Namespace“ “ Declare Declare URIURI of Schemaof Schema
<book xmlns = „http://www.Book.com“<book xmlns = „http://www.Book.com“ xmlns:xsi = „http://w3.org/XMLSchema-instance“xmlns:xsi = „http://w3.org/XMLSchema-instance“ xsi:schemaLocation = „xsi:schemaLocation = „http://www.Book.comhttp://www.Book.com http://www.book.com/Book.xsdhttp://www.book.com/Book.xsd““ ......</book></book>
This is not enforced! This is not enforced! Validation using other Schemas is legal.Validation using other Schemas is legal.
57
Unqualified „Locals“Unqualified „Locals“ Local Declarations are not qualifiziert Local Declarations are not qualifiziert
<<bo:bookbo:book xmlns:bo = „http://www.Book.com“ xmlns:bo = „http://www.Book.com“ priceprice = „69.95“ = „69.95“ currcurr = „EUR“ >= „EUR“ > <<titletitle>Die wilde Wutz</>Die wilde Wutz</titletitle> ...> ...<</bo:book/bo:book>>
Valide Instance: globally qualifed, locally Valide Instance: globally qualifed, locally notnot
Even works within SchemaEven works within Schema<<xsd:elementxsd:element namename = „...“ = „...“ typetype = „...“ /> = „...“ />
Full flexibility to control use of Full flexibility to control use of namespacesnamespaces
58
Qualifizied Sub-Qualifizied Sub-elementselements
<schema xmlns = „http://w3.org/2001/XMLSchema“<schema xmlns = „http://w3.org/2001/XMLSchema“ xmlns:bo=„http://www.Book.com“xmlns:bo=„http://www.Book.com“ targetNamespace=„http://www.Book.com“ targetNamespace=„http://www.Book.com“
>> elementFormDefault=„qualified“elementFormDefault=„qualified“ <element name=„book“ type = „bo:BookType“ /><element name=„book“ type = „bo:BookType“ /> <complexType name=„BookType“ > <sequence><complexType name=„BookType“ > <sequence> <element <element name = „title“name = „title“ type = „string“ /> type = „string“ /> <element <element name = „author“name = „author“ /> <sequence> /> <sequence> <element <element name = „vname“name = „vname“ type = „string“ /> type = „string“ /> <element <element name = „nname“name = „nname“ type = „string“ /> type = „string“ /> </sequence> </sequence> </complexType> </sequence> </sequence> </complexType> </schema></schema>
59
Valid InstancesValid Instances<bo:book<bo:book xmlns:bo = „http://www.Book.com“ xmlns:bo = „http://www.Book.com“
<<bo:titlebo:title>Die wilde Wutz</>Die wilde Wutz</bo:titlebo:title>> <<bo:authorbo:author><><bo:vnamebo:vname>D.</>D.</bo:vnamebo:vname>>
<<bo:nnamebo:nname>K.</>K.</bo:nnamebo:nname></></bo:authorbo:author>>
<</bo:book/bo:book>>
<<bookbook xmlns = „http://www.Book.com“ xmlns = „http://www.Book.com“ < <titletitle>Die wilde Wutz</>Die wilde Wutz</titletitle>>
<<authorauthor><><vnamevname>D.</>D.</vnamevname>> < <nnamenname>K.</>K.</nnamenname></></authorauthor>>
<</book/book>>
60
Qualified AttributesQualified Attributes
Enforce Qualified AttributesEnforce Qualified AttributesattributeFormDefault = „qualified“attributeFormDefault = „qualified“ in in
Element definitionElement definition Enforce that certain attributes must be Enforce that certain attributes must be
qualifiedqualified<attribute name = „...“ type = „...“ form = <attribute name = „...“ type = „...“ form =
„qualified“ />„qualified“ />(Analogous, enforce that Sub-elements must (Analogous, enforce that Sub-elements must
be qualified)be qualified)
61
Composition of Composition of Schemas Schemas
Construct libraries of schemasConstruct libraries of schemas Include a SchemaInclude a Schema
Parent and child have the same Target Parent and child have the same Target NamespaceNamespace
Only Parent used for ValidationOnly Parent used for Validation Redefine: Include + ModifyRedefine: Include + Modify
Again, parent and child have the same Again, parent and child have the same Target NamespaceTarget Namespace
Include individual types from a schemaInclude individual types from a schema<element ref = „lib:impType“ /><element ref = „lib:impType“ />
62
SummarySummary XML Schema is very powerfulXML Schema is very powerful
simple Types and complex Typessimple Types and complex Types many pre-defined typesmany pre-defined types many ways to derive and create new typesmany ways to derive and create new types adopts database concepts (key, foreign keys)adopts database concepts (key, foreign keys) full control and flexibilityfull control and flexibility fully inline with namespaces and other XML standardsfully inline with namespaces and other XML standards
XML Schema is too powerful?XML Schema is too powerful? too complicated, confusing?too complicated, confusing? difficult to implementdifficult to implement people use only a fraction anywaypeople use only a fraction anyway
XML Schema is very different to what you know!XML Schema is very different to what you know! the devil is in the detailthe devil is in the detail
63
XML vs. OOXML vs. OO EncapsulationEncapsulation
OO hides dataOO hides data XML makes data explicitXML makes data explicit
Type HierarchyType Hierarchy OO defines superset / subset relationshipOO defines superset / subset relationship XML shares structure; XML shares structure; setset rel. make no sense rel. make no sense
Data + BehaviorData + Behavior OO packages them togetherOO packages them together XML separates data from its interpretationXML separates data from its interpretation
64
XML vs. RelationalXML vs. Relational Structural DifferencesStructural Differences
Tree vs. TableTree vs. Table Heterogeneous vs. HomegeneousHeterogeneous vs. Homegeneous Optional vs. Strict typingOptional vs. Strict typing Unnormalized vs. Normalized dataUnnormalized vs. Normalized data
Some commonalitiesSome commonalities Logical and physical data independanceLogical and physical data independance Declarative semanticsDeclarative semantics Generic data model Generic data model