Title: XML Schemas
1XML Schemas
- Marco Mesiti
- This Presentation has been extracted from
- Roger L. Costello (XML Technologies Course)
http//www.xfront.com/
2Purpose of XML Schemas (and DTDs)
- Specify
- the structure of instance documents
- "this element contains these elements, which
contains these other elements, etc" - the datatype of each element/attribute
- "this element shall hold an integer within the
range 0 to 12,000" (DTDs don't do too well with
specifying datatypes like this)
3Motivation for XML Schemas
- People are dissatisfied with DTDs
- It's a different syntax
- You write your XML (instance) document using one
syntax and the DTD using another syntax --gt bad,
inconsistent - Limited datatype capability
- DTDs support a very limited capability for
specifying datatypes. You can't, for example,
say "I want the ltelevationgt element to hold an
integer with a range of 0 to 12,000" - Desire a set of datatypes compatible with those
found in databases - DTD supports 10 datatypes XML Schemas supports
44 datatypes
4Highlights of XML Schemas
- XML Schemas are a tremendous advancement over
DTDs - Enhanced datatypes
- 44 versus 10
- Can create your own datatypes
- Example "This is a new type based on the string
type and elements of this type must follow this
pattern ddd-dddd, where 'd' represents a digit". - Written in the same syntax as instance documents
- less syntax to remember
- Object-oriented'ish
- Can extend or restrict a type (derive new type
definitions on the basis of old ones)
5Highlights of XML Schemas
- Can express sets, i.e., can define the child
elements to occur in any order - Can define multiple elements with the same name
but different content - Can define elements with nil content
- Can define substitutable elements - e.g., the
"subway" element is substitutable for the "train"
element.
6Schema Validators
- Command Line Only
- XSV by Henry Thompson
- ftp//ftp.cogsci.ed.ac.uk/pub/XSV/XSV12.EXE
- As a Programmatic API
- xerces by Apache
- http//www.apache.org/xerces-j/index.html
- Oracle Schema Validator
- http//technet.oracle.com/tech/xml/schema_java/ind
ex.htm - GUI Oriented
- XML Spy
- http//www.xmlspy.com
- XML Authority
- http//www.extensibility.com
7Save using XML Schemas
Code to actually do the work
Code to check the structure and content of the
data
"In a typical program, up to 60 of the code is
spent checking the data!"
- source unknown
Continued --gt
8Save using XML Schemas (cont.)
Code to actually do the work
Code to check the structure and content of the
data
If your data is structured as XML, and there is a
schema, then you can hand the data-checking task
off to a schema validator. Thus, your code is
reduced by up to 60!!! Big savings!
9Classic use of XML Schemas(Trading Partners -
B2B)
Software to Process P.O.
P.O.
"P.O. is okay"
Supplier
Consumer
P.O.
Schema Validator
P.O. Schema
(Schema at neutral web site)
10What are XML Schemas?
- Data Model
- With XML Schemas you specify how your XML data
will be organized, and the datatypes of your
data. That is, with XML Schemas you model your
XML data - A Contract
- Organizations agree to structure their XML
documents in conformance with the XML Schema.
Thus, the XML Schema acts as a contract - A rich source of metadata
- An XML Schema document contains lots of data
about the data in the XML documents, i.e., XML
Schemas contain metadata
11BookStore.dtd
lt!ELEMENT BookStore (Book)gt lt!ELEMENT Book
(Title, Author, Date, ISBN, Publisher)gt lt!ELEMENT
Title (PCDATA)gt lt!ELEMENT Author
(PCDATA)gt lt!ELEMENT Date (PCDATA)gt lt!ELEMENT
ISBN (PCDATA)gt lt!ELEMENT Publisher (PCDATA)gt
12lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"gt
ltxsdelement name"BookStore"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement ref"Book" minOccurs"1"
maxOccurs"unbounded"/gt
lt/xsdsequencegt lt/xsdcomplexTypegt
lt/xsdelementgt ltxsdelement name"Book"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement ref"Title"
minOccurs"1" maxOccurs"1"/gt
ltxsdelement ref"Author" minOccurs"1"
maxOccurs"1"/gt ltxsdelement
ref"Date" minOccurs"1" maxOccurs"1"/gt
ltxsdelement ref"ISBN" minOccurs"1"
maxOccurs"1"/gt ltxsdelement
ref"Publisher" minOccurs"1" maxOccurs"1"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt
ltxsdelement name"Title" type"xsdstring"/gt
ltxsdelement name"Author" type"xsdstring"/gt
ltxsdelement name"Date" type"xsdstring"/gt
ltxsdelement name"ISBN" type"xsdstring"/gt
ltxsdelement name"Publisher" type"xsdstring"/gt
lt/xsdschemagt
(explanations on succeeding pages)
xsd Xml-Schema Definition
13lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"gt
ltxsdelement name"BookStore"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement ref"Book" minOccurs"0"
maxOccurs"unbounded"/gt
lt/xsdsequencegt lt/xsdcomplexTypegt
lt/xsdelementgt ltxsdelement name"Book"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement ref"Title"
minOccurs"1" maxOccurs"1"/gt
ltxsdelement ref"Author" minOccurs"1"
maxOccurs"1"/gt ltxsdelement
ref"Date" minOccurs"1" maxOccurs"1"/gt
ltxsdelement ref"ISBN" minOccurs"1"
maxOccurs"1"/gt ltxsdelement
ref"Publisher" minOccurs"1" maxOccurs"1"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt
ltxsdelement name"Title" type"xsdstring"/gt
ltxsdelement name"Author" type"xsdstring"/gt
ltxsdelement name"Date" type"xsdstring"/gt
ltxsdelement name"ISBN" type"xsdstring"/gt
ltxsdelement name"Publisher" type"xsdstring"/gt
lt/xsdschemagt
lt!ELEMENT BookStore (Book)gt
lt!ELEMENT Book (Title, Author, Date,
ISBN, Publisher)gt
lt!ELEMENT Title (PCDATA)gt lt!ELEMENT Author
(PCDATA)gt lt!ELEMENT Date (PCDATA)gt lt!ELEMENT
ISBN (PCDATA)gt lt!ELEMENT Publisher (PCDATA)gt
14lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"gt
ltxsdelement name"BookStore"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement ref"Book" minOccurs"0"
maxOccurs"unbounded"/gt
lt/xsdsequencegt lt/xsdcomplexTypegt
lt/xsdelementgt ltxsdelement name"Book"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement ref"Title"
minOccurs"1" maxOccurs"1"/gt
ltxsdelement ref"Author" minOccurs"1"
maxOccurs"1"/gt ltxsdelement
ref"Date" minOccurs"1" maxOccurs"1"/gt
ltxsdelement ref"ISBN" minOccurs"1"
maxOccurs"1"/gt ltxsdelement
ref"Publisher" minOccurs"1" maxOccurs"1"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt
ltxsdelement name"Title" type"xsdstring"/gt
ltxsdelement name"Author" type"xsdstring"/gt
ltxsdelement name"Date" type"xsdstring"/gt
ltxsdelement name"ISBN" type"xsdstring"/gt
ltxsdelement name"Publisher" type"xsdstring"/gt
lt/xsdschemagt
All XML Schemas have "schema" as the root element.
15lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"gt
ltxsdelement name"BookStore"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement ref"Book" minOccurs"0"
maxOccurs"unbounded"/gt
lt/xsdsequencegt lt/xsdcomplexTypegt
lt/xsdelementgt ltxsdelement name"Book"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement ref"Title"
minOccurs"1" maxOccurs"1"/gt
ltxsdelement ref"Author" minOccurs"1"
maxOccurs"1"/gt ltxsdelement
ref"Date" minOccurs"1" maxOccurs"1"/gt
ltxsdelement ref"ISBN" minOccurs"1"
maxOccurs"1"/gt ltxsdelement
ref"Publisher" minOccurs"1" maxOccurs"1"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt
ltxsdelement name"Title" type"xsdstring"/gt
ltxsdelement name"Author" type"xsdstring"/gt
ltxsdelement name"Date" type"xsdstring"/gt
ltxsdelement name"ISBN" type"xsdstring"/gt
ltxsdelement name"Publisher" type"xsdstring"/gt
lt/xsdschemagt
The elements that are used to construct schemas
come from the XMLSchema namespace
16XMLSchema Namespace
http//www.w3.org/2001/XMLSchema
complexType
element
sequence
schema
boolean
string
integer
17Referencing a schema in an XML instance document
lt?xml version"1.0"?gt ltBookStore
xmlnsxsi"http//www.w3.org/2001/XMLSchema-instan
ce" xsischemaLocation"http
//www.books.org
BookStore.xsd"gt
ltBookgt ltTitlegtMy Life and
Timeslt/Titlegt ltAuthorgtPaul
McCartneylt/Authorgt ltDategtJuly,
1998lt/Dategt ltISBNgt94303-12021-4389
2lt/ISBNgt ltPublishergtMcMillin
Publishinglt/Publishergt lt/Bookgt
... lt/BookStoregt
1. With schemaLocation tell the schema-validator
that the http//www.books.org namespace is
defined in BookStore.xsd (schemaLocation contains
a pair of values). 2. tell the schema-validator
that schemaLocation attribute we are using is the
one in the schema instance namespace.
18Default Value for minOccurs and maxOccurs
- The default value for minOccurs is "1"
- The default value for maxOccurs is "1"
ltxsdelement ref"Title" minOccurs"1"
maxOccurs"1"/gt
Equivalent!
ltxsdelement ref"Title"/gt
19Inlining Element Declarations
- In the previous examples we declared an element
and then we refed that element declaration.
Alternatively, we can inline the element
declarations. - On the following slide is an alternate
(equivalent) way of representing the schema shown
previously, using inlined element declarations.
20lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"gt
ltxsdelement name"BookStore"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement name"Book"
maxOccurs"unbounded"gt
ltxsdcomplexTypegt
ltxsdsequencegt
ltxsdelement name"Title" type"xsdstring"/gt
ltxsdelement
name"Author" type"xsdstring"/gt
ltxsdelement name"Date"
type"xsdstring"/gt
ltxsdelement name"ISBN" type"xsdstring"/gt
ltxsdelement
name"Publisher" type"xsdstring"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt
lt/xsdelementgt lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt lt/xsdschem
agt
21Summary of Declaring Elements (two ways to do it)
1
ltxsdelement name"name" type"type"
minOccurs"int" maxOccurs"int"/gt
A simple type (e.g., xsdstring) or the name of a
complexType
A nonnegative integer
A nonnegative integer or "unbounded"
Note minOccurs and maxOccurs can only be used in
nested (local) element declarations.
ltxsdelement name"name" minOccurs"int"
maxOccurs"int"gt ltxsdcomplexTypegt
lt/xsdcomplexTypegt lt/xsdelementgt
2
22Problem
- Defining the Date element to be of type string is
unsatisfactory (it allows any string value to be
input as the content of the Date element,
including non-date strings). - We would like to constrain the allowable content
that Date can have. Modify the BookStore schema
to restrict the content of the Date element to
just date values (actually, gYear values). - Similarly, constrain the content of the ISBN
element to content of this form d-ddddd-ddd-d or
d-ddd-ddddd-d or d-dd-dddddd-d, where 'd' stands
for 'digit'
23The date Datatype
- A built-in datatype
- Elements declared to be of type date must follow
this form CCYY-MM-DD - range for CC is 00-99
- range for YY is 00-99
- range for MM is 01-12
- range for DD is
- 01-28 if month is 2
- 01-29 if month is 2 and the gYear is a leap gYear
- 01-30 if month is 4, 6, 9, or 11
- 01-31 if month is 1, 3, 5, 7, 8, 10, or 12
- Example 1999-05-31 represents May 31, 1999
24The gYear Datatype
- A built-in datatype (a Gregorian calendar gYear)
- Elements declared to be of type gYear must follow
this form CCYY - range for CC is 00-99
- range for YY is 00-99
- Example 1999 indicates the gYear 1999
25ltxsdsimpleType name"ISBNType"gt
ltxsdrestriction base"xsdstring"gt
ltxsdpattern value"\d1-\d5-\d3-\d1"/gt
ltxsdpattern value"\d1-\d3-\d5-\d1"/
gt ltxsdpattern value"\d1-\d2-\d6-\d
1"/gt lt/xsdrestrictiongt lt/xsdsimpleTypegt
"I am defining a new type that is a restricted
form of the string type. Elements declared of
this type must conform to one of the following
patterns - First Pattern 1 digit followed by a
dash followed by 5 digits followed by another
dash followed by 3 digits followed by another
dash followed by 1 more digit, or - Second
Pattern 1 digit followed by a dash followed by 3
digits followed by another dash followed by 5
digits followed by another dash followed by 1
more digit, or - Third Pattern 1 digit followed
by a dash followed by 2 digits followed by
another dash followed by 6 digits followed by
another dash followed by 1 more digit."
These patterns are specified using Regular
Expressions. More details on regular Expression
can be found in the extended version of the
Costellos presentation
26lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"
targetNamespace"http//www.books
.org" xmlns"http//www.book
s.org" elementFormDefault"q
ualified"gt ltxsdsimpleType name"ISBNType"gt
ltxsdrestriction base"xsdstring"gt
ltxsdpattern value"\d1-\d5-\d3-\d1"/gt
ltxsdpattern value"\d1-\d3-\d5
-\d1"/gt ltxsdpattern
value"\d1-\d2-\d6-\d1"/gt
lt/xsdrestrictiongt lt/xsdsimpleTypegt
ltxsdelement name"BookStore"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement name"Book"
maxOccurs"unbounded"gt
ltxsdcomplexTypegt
ltxsdsequencegt
ltxsdelement name"Title" type"xsdstring"/gt
ltxsdelement
name"Author" type"xsdstring"/gt
ltxsdelement name"Date"
type"xsdgYear"/gt
ltxsdelement name"ISBN" type"ISBNType"/gt
ltxsdelement
name"Publisher" type"xsdstring"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt
lt/xsdelementgt lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt lt/xsdschem
agt
27ltxsdcomplexTypegt or ltxsdsimpleTypegt?
- When do you use the complexType element and when
do you use the simpleType element? - Use the complexType element when you want to
define child elements and/or attributes of an
element - Use the simpleType element when you want to
create a new type that is a refinement of a
built-in type (string, integer, etc)
28Built-in Datatypes
- Primitive Datatypes
- string
- boolean
- decimal
- float
- double
- duration
- dateTime
- time
- date
- gYearMonth
- gYear
- gMonthDay
- Atomic, built-in
- "Hello World"
- true, false
- 7.08
- 12.56E3, 12, 12560, 0, -0, INF, -INF, NAN
- 12.56E3, 12, 12560, 0, -0, INF, -INF, NAN
- P1Y2M3DT10H30M12.3S
- format CCYY-MM-DDThh-mm-ss
- format hhmmss.sss
- format CCYY-MM-DD
- format CCYY-MM
- format CCYY
- format MM-DD
Note 'T' is the date/time separator INF
infinity NAN not-a-number
29Built-in Datatypes (cont.)
- Primitive Datatypes
- gDay
- gMonth
- hexBinary
- base64Binary
- anyURI
- QName
- NOTATION
- Atomic, built-in
- format DD
- format MM
- a hex string
- a base64 string
- http//www.xfront.com
- a namespace qualified name
- a NOTATION from the XML spec
30Built-in Datatypes (cont.)
- Derived types
- normalizedString
- token
- language
- IDREFS
- ENTITIES
- NMTOKEN
- NMTOKENS
- Name
- NCName
- ID
- IDREF
- ENTITY
- integer
- nonPositiveInteger
- Subtype of primitive datatype
- A string without tabs, line feeds, orcarriage
returns - String w/o tabs, l/f, leading/trailing spaces,
consecutive spaces - any valid xmllang value, e.g., EN, FR, ...
- must be used only with attributes
- must be used only with attributes
- must be used only with attributes
- must be used only with attributes
- part (no namespace qualifier)
- must be used only with attributes
- must be used only with attributes
- must be used only with attributes
- 456
- negative infinity to 0
31Built-in Datatypes (cont.)
- Derived types
- negativeInteger
- long
- int
- short
- byte
- nonNegativeInteger
- unsignedLong
- unsignedInt
- unsignedShort
- unsignedByte
- positiveInteger
- Subtype of primitive datatype
- negative infinity to -1
- -9223372036854775808 to 9223372036854775808
- -2147483648 to 2147483647
- -32768 to 32767
- -127 to 128
- 0 to infinity
- 0 to 18446744073709551615
- 0 to 4294967295
- 0 to 65535
- 0 to 255
- 1 to infinity
Note the following types can only be used with
attributes (which we will discuss later)
ID, IDREF, IDREFS, NMTOKEN, NMTOKENS, ENTITY,
and ENTITIES.
32Creating your own Datatypes
- A new datatype can be defined from an existing
datatype (called the "base" type) by specifying
values for one or more of the optional facets for
the base type. - Example. The string primitive datatype has six
optional facets - length
- minLength
- maxlength
- pattern
- enumeration
- whitespace (legal values preserve, replace,
collapse)
33Example of Creating a New Datatype by Specifying
Facet Values
ltxsdsimpleType name"TelephoneNumber"gt
ltxsdrestriction base"xsdstring"gt
ltxsdlength value"8"/gt ltxsdpattern
value"\d3-\d4"/gt lt/xsdrestrictiongt lt/xsd
simpleTypegt
This creates a new datatype called
'TelephoneNumber'. Elements of this type can
hold string values, but the string length must be
exactly 8 characters long and the string must
follow the pattern ddd-dddd, where 'd'
represents a 'digit'. (Obviously, in this example
the regular expression makes the length facet
redundant.)
34Another Example
ltxsdsimpleType name"US-Flag-Colors"gt
ltxsdrestriction base"xsdstring"gt
ltxsdenumeration value"red"/gt
ltxsdenumeration value"white"/gt
ltxsdenumeration value"blue"/gt
lt/xsdrestrictiongt lt/xsdsimpleTypegt
This creates a new type called US-Flag-Colors. An
element declared to be of this type must have
either the value red, or white, or blue.
35Facets of the Integer Datatype
- Facets
- totalDigits
- pattern
- whitespace
- enumeration
- maxInclusive
- maxExclusive
- minInclusive
- minExclusive
36Example
ltxsdsimpleType name "EarthSurfaceElevation"gt
ltxsdrestriction base"xsdinteger"gt
ltxsdminInclusive value"-1290"/gt
ltxsdmaxInclusive value"29035"/gt
lt/xsdrestrictiongt lt/xsdsimpleTypegt
This creates a new datatype called
'EarthSurfaceElevation'. Elements declared to be
of this type can hold an integer. However, the
integer is restricted to have a value between
-1290 and 29035, inclusive.
37General Form of Creating a New Datatype by
Specifying Facet Values
ltxsdsimpleType name "name"gt
ltxsdrestriction base "xsdsource"gt
ltxsdfacet value "value"/gt ltxsdfacet
value "value"/gt lt/xsdrestrictiongt
lt/xsdsimpleTypegt
Facets - length - minlength - maxlength
- pattern - enumeration - minInclusive -
maxInclusive - minExclusive - maxExclusive
...
Sources - string - boolean - number -
float - double - duration - dateTime -
time ...
38Multiple Facets - "and" them together, or "or"
them together?
An element declared to be of type
TelephoneNumber must be a string of length8 and
the string must follow the pattern 3 digits,
dash, 4 digits.
ltxsdsimpleType name"TelephoneNumber"gt
ltxsdrestriction base"xsdstring"gt
ltxsdlength value"8"/gt ltxsdpattern
value"\d3-\d4"/gt lt/xsdrestrictiongt lt/xsd
simpleTypegt
ltxsdsimpleType name"US-Flag-Color"gt
ltxsdrestriction base"xsdstring"gt
ltxsdenumeration value"red"/gt
ltxsdenumeration value"white"/gt
ltxsdenumeration value"blue"/gt
lt/xsdrestrictiongt lt/xsdsimpleTypegt
An element declared to be of type US-Flag-Color
must be a string with a value of either red, or
white, or blue.
Patterns, enumerations gt "or" them together All
other facets gt "and" them together
39Element Containing a User-Defined Simple Type
Example. Create a schema element declaration for
an elevation element. Declare
the elevation element to be an integer with a
range -1290 to 29035
ltelevationgt5240lt/elevationgt Here's one way of
declaring the elevation element ltxsdsimpleType
name"EarthSurfaceElevation"gt
ltxsdrestriction base"xsdinteger"gt
ltxsdminInclusive value"-1290"/gt
ltxsdmaxInclusive value"29035"/gt
lt/xsdrestrictiongt lt/xsdsimpleTypegt ltxsdelement
name"elevation" type"EarthSurfaceElevation"/gt
40Element Containing a User-Defined Simple Type
(cont.)
Here's an alternative method for declaring
elevation ltxsdelement name"elevation"gt
ltxsdsimpleTypegt ltxsdrestriction
base"xsdinteger"gt ltxsdminInclusive
value"-1290"/gt ltxsdmaxInclusive
value"29035"/gt lt/xsdrestrictiongt
lt/xsdsimpleTypegt lt/xsdelementgt
The simpleType definition is defined inline, it
is an anonymous simpleType definition.
41Summary of Declaring Elements (three ways to do
it)
1
ltxsdelement name"name" type"type"
minOccurs"int" maxOccurs"int"/gt
ltxsdelement name"name" minOccurs"int"
maxOccurs"int"gt ltxsdcomplexTypegt
lt/xsdcomplexTypegt lt/xsdelementgt
2
ltxsdelement name"name" minOccurs"int"
maxOccurs"int"gt ltxsdsimpleTypegt
ltxsdrestriction base"type"gt
lt/xsdrestrictiongt
lt/xsdsimpleTypegt lt/xsdelementgt
3
42Annotating Schemas
- The ltannotationgt element is used for documenting
the schema, both for humans and for programs. - Use ltdocumentationgt for providing a comment to
humans - Use ltappinfogt for providing a comment to programs
- The content is any well-formed XML
- Note that annotations have no effect on schema
validation
ltxsdannotationgt ltxsddocumentationgt
This constraint is not expressible with XML
Schema The value of element A should be greater
than the value of element B. So, we
need to use a separate tool (e.g., Schematron) to
check this constraint. We will
express this constraint in the appinfo section
(below). lt/xsddocumentationgt
ltxsdappinfogt ltassert test"A gt B"gtA
should be greater than Blt/assertgt
lt/xsdappinfogt ltxsd/annotationgt
43Derived Types
- We can do a form of subclassing complexType
definitions. We call this "derived types" - derive by extension extend the parent
complexType with more elements - derive by restriction create a type which is a
subset of the base type. There are two ways to
subset the elements - redefine a base type element to have a restricted
range of values, or - redefine a base type element to have a a more
restricted number of occurrences.
44lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"gt
ltxsdcomplexType name"Publication"gt
ltxsdsequencegt ltxsdelement
name"Title" type"xsdstring" maxOccurs"unbounde
d"/gt ltxsdelement name"Author"
type"xsdstring" maxOccurs"unbounded"/gt
ltxsdelement name"Date" type"xsdgYear"/gt
lt/xsdsequencegt lt/xsdcomplexTypegt
ltxsdcomplexType name"BookPublication"gt
ltxsdcomplexContentgt ltxsdextension
base"Publication" gt
ltxsdsequencegt ltxsdelement
name"ISBN" type"xsdstring"/gt
ltxsdelement name"Publisher"
type"xsdstring"/gt
lt/xsdsequencegt lt/xsdextensiongt
lt/xsdcomplexContentgt lt/xsdcomplexTypegt
ltxsdelement name"BookStore"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement name"Book"
type"BookPublication" maxOccurs"unbounded"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt lt/xsdschema
gt
Note that BookPublication extends the
Publication type, i.e., doing Derive by Extension
45ltxsdcomplexType name"Publication"gt
ltxsdsequencegt ltxsdelement name"Title"
type"xsdstring" maxOccurs"unbounded"/gt
ltxsdelement name"Author" type"xsdstring"
maxOccurs"unbounded"/gt ltxsdelement
name"Date" type"xsdgYear"/gt
lt/xsdsequencegt lt/xsdcomplexType
gt ltxsdcomplexType name"BookPublication"gt
ltxsdcomplexContentgt ltxsdextension
base"Publication"gt ltxsdsequencegt
ltxsdelement name"ISBN"
type"xsdstring"/gt ltxsdelement
name"Publisher" type"xsdstring"/gt
lt/xsdsequencegt lt/xsdextensiongt
lt/xsdcomplexContentgt lt/xsdcomplexType gt
Elements declared to be of type BookPublication
will have 5 child elements - Title, Author, Date,
ISBN, and Publisher. Note that the elements in
the derived type are appended to the elements in
the base type.
46Derive by Restriction
ltxsdcomplexType name"Publication"gt
ltxsdsequencegt ltxsdelement
name"Title" type"xsdstring" maxOccurs"unbounde
d"/gt ltxsdelement name"Author"
type"xsdstring" maxOccurs"unbounded"/gt
ltxsdelement name"Date"
type"xsdgYear"/gt lt/xsdsequencegt lt/xsdc
omplexTypegt ltxsdcomplexType name
"SingleAuthorPublication"gt ltxsdcomplexContent
gt ltxsdrestriction base"Publication"gt
ltxsdsequencegt
ltxsdelement name"Title" type"xsdstring"
maxOccurs"unbounded"/gt
ltxsdelement name"Author" type"xsdstring"/gt
ltxsdelement name"Date"
type"xsdgYear"/gt lt/xsdsequencegt
lt/xsdrestrictiongt lt/xsdcomplexContentgt
lt/xsdcomplexTypegt
Elements of type SingleAuthorPublication will
have 3 child elements - Title, Author, and
Date. However, there must be exactly one Author
element. Note that in the restriction type you
must repeat all the declarations from the base
type.
47Terminology Declaration vs Definition
- In a schema
- You declare elements and attributes. Schema
components that are declared are used in an XML
instance document. - You define components that are used just within
the schema document(s)
Declarations - element declarations - attribute
declarations
Definitions - type definitions - attribute group
definitions - model group definitions
48Terminology Global versus Local
- Global element declarations, global type
definitions - These are element declarations/type definitions
that are immediate children of ltschemagt - Local element declarations, local type
definitions - These are element declarations/type definitions
that are nested within other elements/types.
49lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"gt
ltxsdcomplexType name"Publication"gt
ltxsdsequencegt ltxsdelement
name"Title" type"xsdstring" maxOccurs"unbounde
d"/gt ltxsdelement name"Author"
type"xsdstring" maxOccurs"unbounded"/gt
ltxsdelement name"Date" type"xsdgYear"/gt
lt/xsdsequencegt lt/xsdcomplexTypegt
ltxsdcomplexType name"BookPublication"gt
ltxsdcomplexContentgt ltxsdextension
base"Publication" gt
ltxsdsequencegt ltxsdelement
name"ISBN" type"xsdstring"/gt
ltxsdelement name"Publisher"
type"xsdstring"/gt
lt/xsdsequencegt lt/xsdextensiongt
lt/xsdcomplexContentgt lt/xsdcomplexTypegt
ltxsdelement name"BookStore"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement name"Book"
type"BookPublication" maxOccurs"unbounded"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt lt/xsdschema
gt
Global type definition
Global type definition
Global element declaration
Local element declarations
Local type definition
50Global or Local What's the Big Deal?
- So what if an element or type is global or local.
What practical impact does it have? - Answer only global elements/types can be
referenced (i.e., reused). Thus, if an
element/type is local then it is effectively
invisible to the rest of the schema (and to other
schemas).
51Summary of Declaring Elements
1. Element with Simple Content. Declaring an
element using a built-in type
ltxsdelement name"numStudents"
type"xsdpositiveInteger"/gt Declaring an
element using a user-defined simpleType
ltxsdsimpleType name"US-Flag-Colorsgt
ltxsdrestriction base"xsdstring"gt
ltxsdenumeration value"red"/gt
ltxsdenumeration value"white"/gt
ltxsdenumeration value"blue"/gt
lt/xsdrestrictiongt lt/xsdsimpleTypegt
ltxsdelement name"flag" type"US-Flag-Colors"/gt
An alternative formulation of the above flag
example is to inline the simpleType definition
ltxsdelement name"flag"gt
ltxsdsimpleTypegt ltxsdrestriction
base"xsdstring"gt
ltxsdenumeration value"red"/gt
ltxsdenumeration value"white"/gt
ltxsdenumeration value"blue"/gt
lt/xsdrestrictiongt lt/xsdsimpleTypegt
lt/xsdelementgt
52Summary of Declaring Elements (cont.)
2. Element Contains Child Elements Defining the
child elements inline ltxsdelement
name"Person"gt ltxsdcomplexTypegt
ltxsdsequencegt ltxsdelement
name"Title" type"xsdstring"/gt
ltxsdelement name"FirstName" type"xsdstring"/gt
ltxsdelement name"Surname"
type"xsdstring"/gt lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt An
alternate formulation of the above Person example
is to create a named complexType and then use
that type ltxsdcomplexType
name"PersonType"gt ltxsdsequencegt
ltxsdelement name"Title"
type"xsdstring"/gt ltxsdelement
name"FirstName" type"xsdstring"/gt
ltxsdelement name"Surname" type"xsdstring"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt ltxsdelement
name"Person" type"PersonType"/gt
53Summary of Declaring Elements (concluded)
3. Element Contains Simple Content and Attributes
ltxsdelement name"apple"gt
ltxsdcomplexTypegt ltxsdsimpleContentgt
ltxsdextension base"xsdstring"gt
ltxsdattribute name"variety"
type"xsdstring" use"required"/gt
lt/xsdextensiongt lt/xsdsimpleContentgt
lt/xsdcomplexTypegt lt/xsdelementgt
Example. ltapple variety"Cortland"gtLarge, green,
sourlt/applegt
54group Element
- The group element enables you to group together
element declarations. - Note the group element is just for grouping
together element declarations, no attribute
declarations allowed!
55lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"
targetNamespace"http//www.books
.org" xmlns"http//www.books
.org" elementFormDefault"qua
lified"gt ltxsdelement name"BookStore"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement name"Book"
maxOccurs"unbounded"gt
ltxsdcomplexTypegt
ltxsdsequencegt
ltxsdgroup ref"BookElements"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt
lt/xsdelementgt lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt
ltxsdgroup name"BookElements"gt
ltxsdsequencegt ltxsdelement
name"Title" type"xsdstring"/gt
ltxsdelement name"Author" type"xsdstring"
maxOccurs"unbounded"/gt ltxsdelement
name"Date" type"xsdstring"/gt
ltxsdelement name"ISBN" type"xsdstring"/gt
ltxsdelement name"Publisher"
type"xsdstring"/gt lt/xsdsequencegt
lt/xsdgroupgt lt/xsdschemagt
56Note about group
- Group definitions must be global
ltxsdelement name"Book"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdgroup name"BookElements"gt
ltxsdsequencegt
ltxsdelement name"Title" type"xsdstring"
minOccurs"0"/gt
ltxsdelement name"Author" type"xsdstring"
minOccurs"0" maxOccurs"unbounded"/gt
...
lt/xsdsequencegt lt/xsdgroupgt
lt/xsdsequencegt ...
lt/xsdcomplexTypegt lt/xsdelementgt
Cannot inline the group definition. Instead, you
must use a ref here and define the group
globally.
57Expressing Alternates
DTD
lt!ELEMENT transportation (train plane
automobile)gt
lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"gt
ltxsdelement name"transportation"gt
ltxsdcomplexTypegt ltxsdchoicegt
ltxsdelement name"train"
type"xsdstring"/gt ltxsdelement
name"plane" type"xsdstring"/gt
ltxsdelement name"automobile" type"xsdstring"/gt
lt/xsdchoicegt
lt/xsdcomplexTypegt lt/xsdelementgt lt/xsdschema
gt
XML Schema
58Expressing Repeatable Choice
DTD
lt!ELEMENT binary-string (zero one)gt
lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"
targetNamespace"http//www.binar
y.org" xmlns"http//www.bin
ary.org" elementFormDefault
"qualified"gt ltxsdelement name"binary-string"
gt ltxsdcomplexTypegt
ltxsdchoice minOccurs"0" maxOccurs"unbounded"gt
ltxsdelement name"zero"
type"xsdunsignedByte" fixed"0"/gt
ltxsdelement name"one" type"xsdunsignedByte"
fixed"1"/gt lt/xsdchoicegt
lt/xsdcomplexTypegt lt/xsdelementgt lt/xsdschema
gt
XML Schema
Notes 1. An element can fix its value, using the
fixed attribute. 2. When you don't specify a
value for minOccurs, it defaults to "1".
Same for maxOccurs. See the last example
(transportation) where we used a ltchoicegt
element with no minOccurs or maxOccurs.
59fixed/default Element Values
- When you declare an element you can give it a
fixed or default value. - Then, in the instance document, you can leave the
element empty.
ltelement name"zero" fixed"0"/gt ltzerogt0lt/zerogt
or equivalently ltzero/gt
ltelement name"color" default"red"/gt ltcolorgtred
lt/colorgt or equivalently ltcolor/gt
60Using ltsequencegt and ltchoicegt
DTD
lt!ELEMENT life ((work, eat), (work play),
sleep) gt
lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"
targetNamespace"http//www.binar
y.org" xmlns"http//www.bin
ary.org" elementFormDefault
"qualified"gt ltxsdelement name"life"gt
ltxsdcomplexTypegt ltxsdsequence
minOccur"0" maxOccur"unbounded"gt
ltxsdsequence minOccurs"0" maxOccurs"unbounded"
gt ltxsdelement name"work"
type"xsdstring"/gt
ltxsdelement name"eat" type"xsdstring"/gt
lt/xsd sequencegt
ltxsdchoice minOccurs"0" maxOccurs"unbounded"gt
ltxsdelement name"work"
type"xsdstring"/gt
ltxsdelement name"play" type"xsdstring"/gt
lt/xsdchoicegt
ltxsdelement name"sleep" type"xsdstring"/gt
lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt lt/xsdschema
gt
XML Schema
61Expressing Any Order
Problem create an element, Book, which contains
Author, Title, Date, ISBN, and Publisher,
in any order (Note this cannot be
easily done with DTDs).
lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"
targetNamespace"http//www.books.
org" xmlns"http//www.books.
org" elementFormDefault"qual
ified"gt ltxsdelement name"BookStore"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement name"Book"
maxOccurs"unbounded"gt
ltxsdcomplexTypegt
ltxsdallgt
ltxsdelement name"Title" type"xsdstring"/gt
ltxsdelement
name"Author" type"xsdstring"/gt
ltxsdelement name"Date"
type"xsdstring"/gt
ltxsdelement name"ISBN" type"xsdstring"/gt
ltxsdelement
name"Publisher" type"xsdstring"/gt
lt/xsdallgt
lt/xsdcomplexTypegt
lt/xsdelementgt lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt
XML Schema
ltallgt means that Book must contain all five
child elements, but they may occur in any order.
62Constraints on using ltallgt
- Elements declared within ltallgt must have a
maxOccurs value of "1" (minOccurs can be either
"0" or "1") - If a complexType uses ltallgt and it extends
another type, then that parent type must have
empty content. - The ltallgt element cannot be nested within either
ltsequencegt, ltchoicegt, or another ltallgt
63Empty Element
lt!ELEMENT image EMPTYgt lt!ATTLIST image href CDATA
REQUIREDgt
DTD
lt?xml version"1.0"?gt ltxsdschema
xmlnsxsd"http//www.w3.org/2001/XMLSchema"
targetNamespace"http//www.photog
raphy.org"
xmlns"http//www.photography.org"
elementFormDefault"qualified"gt
ltxsdelement name"gallery"gt
ltxsdcomplexTypegt ltxsdsequencegt
ltxsdelement name"image"
maxOccurs"unbounded"gt
ltxsdcomplexTypegt
ltxsdattribute name"href" type"xsdanyURI"
use"required"/gt
lt/xsdcomplexTypegt
lt/xsdelementgt lt/xsdsequencegt
lt/xsdcomplexTypegt lt/xsdelementgt lt/xsdschem
agt
Schema
Instance doc (snippet)
ltimage href"http//www.xfront.com/Rog.gif"/gt