Professional Documents
Culture Documents
4
XML Schema
TSIW 2006/2007
Warning
! Authors
" João Moura Pires (jmp@di.fct.unl.pt)
" With contributions of
! Carlos Damásio (cd@di.fct.unl.pt)
! Joaquim Aparício (jna@di.fct.unl.pt)
! Pedro Barahona (pb@di.fct.unl.pt)
4-2
4 - XML Schema
Summary
! Introduction and Motivation
! Content models
4 - XML Schema
DTD weaknesses
! Non-XML syntax
4-4
! The main XML Schema goals are to provide a solution for most
4-5
! Validation
" More common use
" Due to the possibility of using extensible complex data types the
validation of documents can be enhanced.
! Documentation
" They provide a formal specification of new vocabularies
" As schemas are XML documents they can be processed (ex: XSL) for
producing documentation of vocabularies in several ways.
! Querying support
" New Xpath, XSLT and XQuery specifications will use XML Schemas
for enhancing the performance of some functions (sort, equality
checks, etc.) by analysing the document data types. 4-6
! Editors / GUIs
" W3C is creating a standard API aimed at editors
Competitors
! Other schema languages
" RDF (Resource Description Framework)
" XML – Data
" XML - DR (XML – Data Reduced)
" DCD (Document Content Description)
" SOX (Schema for Object-Oriented XML) Definition
" DDML (Document Definition Markup Language)
" BizTalk Schema
" Schematron
4-9
4 - 12
4 - 13
! http://zvon.org/xxl/xmlSchema2001Reference/Output/Schema/ind
ex.html
! http://search.msdn.microsoft.com/search/results.aspx?qu=xml+s
chema&View=msdn&st=b&c=4&s=1&swc=4
! http://www.xml.com/pub/a/2000/11/29/schemas/structuresref.html
! http://www.w3schools.com/schema/
4 - 14
TSIW 2006/2007
" Author
" Date
" ISBN
" Publisher
</BookStore> 4 - 17
4 - 18
…
<!ELEMENT Publisher (#PCDATA)>
</xs:schema>
4 - 19
</xs:element>
...
<xs:schema> <!ELEMENT Book (Title, Author, Date, ISBN, Publisher)>
4 - 20
4 - 21
4 - 22
4 - 23
! Attributes:
" Date attribute for the purchase order.
" Part-number attribute of each item.
4 - 24
4 - 26
4 - 27
4 - 28
4 - 29
4 - 31
4 - 33
4 - 34
4 - 35
! ELEMENT declarations
" Local or global element declarations
" Reuse of global elements by using references
4 - 37
4 - 38
4 - 39
Namespaces
! W3C Recommendation (14th, January 1999)
" “Namespaces in XML”
" http://www.w3.org/TR/REC-xml-names/
4 - 40
! When using namespaces there are qualified names for the markups:
" Namespace Prefix : local name
" As URIs are unique and each prefix is associated with an URI, a qualified
name is unique, avoiding naming conflicts.
xmlns:xs = ”http://www.w3.org/2001/XMLSchema”
4 - 41
<xs:element …>
….
</xs:element>
</xs:schema>
4 - 44
element1 att1
extra
<?xml version="1.0"?>
<!-- both namespace prefixes are available throughout -->
<bk:book xmlns:bk='urn:loc.gov:books'
xmlns:isbn='urn:ISBN:0-395-36341-6'>
<bk:title>Cheaper by the Dozen</bk:title>
<isbn:number>1568491379</isbn:number>
</bk:book>
4 - 46
<?xml version="1.0"?>
<!-- initially, the default namespace is "books" -->
<book xmlns='urn:loc.gov:books'
xmlns:isbn='urn:ISBN:0-395-36341-6'>
<title>Cheaper by the Dozen</title>
<isbn:number>1568491379</isbn:number>
<notes>
<!-- make HTML the default namespace for some commentary -->
<p xmlns='urn:w3-org-ns:HTML'>
This is a <i>funny</i> book!
</p>
</notes>
</book>
4 - 47
4 - 48
<dimensions xmlns="http://www.example.org/measurements“
xmlns:inch="http://www.example.org/inches"
xmlns:cm="http://www.example.org/cms">
<vertical inch:height="24" cm:height="60"/>
</dimensions>
4 - 49
4 - 51
! xsi:nil
4 - 52
<?xml version="1.0"?>
<Customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Customer.xsd">
Instance
<FirstName>Ray</FirstName>
<MiddleInitial>G</MiddleInitial>
<LastName>Bayliss</LastName>
</Customer>
4 - 53
<xs:element name="BookStore">
<xs:complexType name="BookType">
<xs:sequence> ... </xs:sequence>
Namespace of the XML
</xs:complexType> Schema language:
</xs:element> element, complexType, etc
<xs:element name="Book"> … </xs:element>
<xs:element name="Title" type="xs:string"/>
<xs:element name="Author" type="xs:string"/> XML Schema elements are
<xs:element name="Date" type="xs:string"/> refered with the xs prefix
<xs:element name="ISBN" type="xs:string"/>
<xs:element name="Publisher" type="xs:string"/>
</xs:schema>
4 - 54
4 - 55
4 - 56
4 - 57
<?xml version="1.0"?>
<BookStore xmlns ="http://www.books.org" 1
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3
xsi:schemaLocation="http://www.books.org BookStore.xsd">
2
<Book>
<Title>My Life and Times</Title>
<Author>Paul McCartney</Author>
<Date>July, 1998</Date>
<ISBN>94303-12021-43892</ISBN>
<Publisher>McMillin Publishing</Publisher>
</Book>
...
</BookStore>
1. Declaration of the default namespace means that all the tags are defined
in http://www.books.org
2. Declaration that the namespace http://www.books.org is defined in
Bookstore.xsd. This information will be used by validating parsers.
3. Required declaration of the XMLSchema-instance namespace for the
use of the xsi:schemaLocation attribute in point 2.
4 - 58
schemaLocation="http://www.books.org targetNamespace="http://www.books.org"
BookStore.xsd"
BookStore.xml BookStore.xsd
- uses elements of the namespace - defines elements in the namespace
http://www.books.org http://www.books.org
4 - 60
Simple Types
Complex Types
Attributes
4 - 61
<xs:complexType name=“NameforType">
....
</xs:complexType>
! Anonymous types
<xs:simpleType>
....
</xs:simpleType>
<xs:complexType>
....
</xs:simpleType>
4 - 63
<xs:attribute name=“attributeName">
…
</xs:attribute>
! Type definitions
For defining the data
types of attributes and
" Can be named or anonymous
leaf complex elements.
4 - 64
" Notes:
! Global declarations can’t use ref. Simple or complex types should be
identified directly by type or should be created in-line.
! Cardinality restrictions (minOccurs, maxOccurs, use) can’t be placed
in global declarations (although these can be placed in local
declarations which refer the global declaration by using ref).
4 - 65
4 - 67
4 - 68
<xs:annotation>
<xs:documentation>
The following 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).
</xs:documentation>
<xs:appinfo>
<assert test="A > B">A should be greater than B</assert>
</xs:appinfo>
<xs:/annotation>
4 - 69
! Rule
" <annotation> can be before or after any global component.
" <annotation> can only be in the beginning of a local element.
4 - 70
4 - 72
! <xsd:appinfo>
" source: URL to an additional information document
<xsd:appinfo source="http://www.xfront.com/Assertions.xml"/>
4 - 73
! Simple types
" A simple character sequence
" Restricted character sequences that restrict numeric values or dates,
for instance
" No sub elements
! Complex types
" Contain sub elements or
" Attributes
4 - 74
Value space
! Each data type has a set of valid distinct values.
! Example
" European Union country codes
! {PT, …., UK}
4 - 76
! Each value of the string type can only have one lexical
representation, but in other datatypes each value can have more
tha one representation.
4 - 77
Facets
! Properties of the value space, or each one of its values or lexical
representations.
! Basic
" equality, order, bounds, cardinality, numeric/non-numeric
! Restriction
" length, minLength, maxLength
" whiteSpace
Used to build new
" pattern derived data types
" enumeration
" minExclusive, maxExclusive
minInclusive, maxInclusive
" totalDigits, fractionDigits
4 - 78
! User defined
" Simple
! With addditional user-defined restrictions
" Complex
! Allow the definition of structures from simple types
4 - 79
4 - 80
<simpleType name='sizes'>
<list itemType='decimal'/>
</simpleType>
" Union
! By union of two or more base types
4 - 81
! Atomic
! List
! Union
4 - 82
<xs:simpleType name=“digit">
<xs:restriction base="xs:int">
<xs:simpleType name=“digitList">
<xs:maxExclusive=“10"/>
<xs:list itemType = “digito”>
<xs:minInclusive=“0"/>
</xs:simpleType>
</xs:restriction>
</xs:simpleType>
4 - 83
Union
<xsd:simpleType name=“digitH">
<xsd:restriction base="xsd:string">
<xsd:enumeration value=“A"/>
.....
<xsd:enumeration value=“F"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name=“hexDigit">
<xsd:union memberTypes = “digit digitH”>
</xsd:simpleType>
4 - 84
4 - 85
Whitespace replacement
Whitespace collapse
4 - 86
4 - 87
4 - 88
4 - 89
<xsd:simpleType name=“PortugueseTelephone"> 1
<xsd:restriction base="string"> 2
<xsd:length value=“15"/> 3
<xsd:pattern value=“+351\d{9}"/>4
</xsd:restriction>
</xsd:simpleType>
Preserve
No normalization is done, the value is not changed
replace
All occurrences of #x9 (tab), #xA (line feed) and #xD (carriage return) are replaced with #x20 (space)
collapse
After the processing implied by replace, contiguous sequences of #x20's are collapsed to
a single #x20, and leading and trailing #x20's are removed
4 - 92
4 - 93
enumeration restriction
...
<attribute name=”size” type=”SizeType”/>
...
4 - 94
4 - 95
Regular Expressions
! A regular expression is a string with special character sequences
which form a pattern to describe a set of string values (the
values in this set match the pattern)
! W3C
" http://www.w3c.org/TR/xmlschema-2/#regexs
" http://www.w3.org/TR/xmlschema-0/#regexAppendix
4 - 96
branch
Or
4 - 97
Basic Grammar
! Each regular expression branch is formed by zero or more
concated components.
! Each component is composed by an atom and an optional
quantifier.
Atom
C1 Component C2 C3 C4 C5
Quantifier
4 - 98
4 - 100
4 - 101
4 - 102
4 - 104
4 - 105
Content Models
<complexType>
Type shall contain
Contains elements? Yes
elements or attributes ?
Yes No
4 - 107
! Choice
" Choice of one of the child elements
! All
" Child elements can appear in any order
4 - 108
4 - 109
Compositors: sequence
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="A" type="xs:string" minOccurs="1" maxOccurs="2"/>
<xs:element name="B" type="xs:string" minOccurs="1" maxOccurs=“3"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0">
<root> <!ELEMENT root (A1-2, B1-3))>
<A/>
<A/>
<B/>
<B/>
<B/>
</root>
4 - 110
<?xml version="1.0">
<root> <!ELEMENT root (A1-2, B1-3)2)>
<A/> <A/> <B/> <B/> <B/>
<A/> <B/>
</root>
4 - 111
Compositors: choice
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:choice>
<xs:element name="A" type="xs:string"/>
<xs:element name="B" type="xs:string"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
4 - 112
4 - 113
Compositors: choice
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:choice minOccurs=“1" maxOccurs=“2“ >
<xs:element name="A" type="xs:string“
minOccurs=“1" maxOccurs="unbounded"/>
<xs:element name="B" type="xs:string" maxOccurs=“2"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
4 - 114
4 - 115
! All
" Complex types can only have an all compositor.
" Should appear as the first child of the complexType element.
" It’s not possible to combine “all” either with sequence or choice.
" Inside “all” minOccurs and maxOccurs can not be bigger than 1.
4 - 116
<element
abstract = Boolean : false
block = (#all | List of (extension | restriction | substitution))
default = string
final = (#all | List of (extension | restriction))
fixed = string
form = (qualified | unqualified)
id = ID
maxOccurs = ( nonNegativeInteger | unbounded) : 1
minOccurs = nonNegativeInteger : 1
name = NCName
nillable = Boolean : false
ref = QName substitutionGroup = QName
type = QName {any attributes with non-schema Namespace}…>
Content: (annotation?, ((simpleType | complexType)?, (unique |
key |
keyref)*))
</element>
4 - 117
<root>
Free text
<B/>
Free text
<A/>
Free text
</root>
4 - 118
4 - 119
<xs:element name="root”>
<xs:complexType mixed="true">
<xs:sequence>
<xs:any namespace=“http://www.w3c.org/1999/xhtml“
minOccurs=“0“
maxOccurs="unbounded"
processContents="skip"/>
</xs:sequence>
</xs:complexType>
</xs:element>
4 - 120
<xs:element name="root">
<xs:complexType mixed="true">
<xs:sequence>
<xs:any namespace=“http://www.w3c.org/1999/xhtml“
minOccurs=“0“
maxOccurs="unbounded"
processContents=“strict"/>
</xs:sequence>
<xs:anyAttribute namespace=“http://www.w3c.org/1999/xhtml”>
</xs:complexType>
</xs:element>
4 - 121
<?xml version="1.0"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<A xsi:nil="true"/>
<B/>
</root>
4 - 123
Grouped models
<xsd:element name="Book" >
<xsd:complexType>
<xsd:sequence>
<xsd:group ref="PublicationElements"/>
<xsd:element name="ISBN" type="string"/>
<xsd:element name="Reviewer" type="string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="CD" >
<xsd:complexType>
<xsd:sequence>
<xsd:group ref="PublicationElements"/>
<xsd:element name="RecordingStudio" type="string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:group name="PublicationElements">
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string" maxOccurs="unbounded"/>
<xsd:element name="Date" type="xsd:string"/>
</xsd:sequence>
</xsd:group>
4 - 124
! Have to be global
4 - 125
Attributes
! An element with attributes is a complex type
" Simple content - no child elements
" Complex content - with child elements
! Attribute declaration
<attribute
default = string
fixed = string
form = (qualified | unqualified)
id = ID
name = NCName
ref = QName
type = QName
use = (optional | prohibited | required): optional
{any attributes with non-schema Namespace}>
Content: (annotation?, (simpleType?))
</attribute>
4 - 126
4 - 127
Attributes group
<attributeGroup name = ”emailDetails”>
<attribute name = ”priority” type = ”string”/>
<attribute name = ”attachments” type = ”boolean”/>
</attributeGroup>
4 - 128
4 - 129
4 - 131
<complexType name=”PersonType”>
<complexContent>
<extension base=”NameType”>
<sequence>
<element name=”age” type=”positiveInteger”/>
</sequence>
<attribute name=”weight” type=”positiveInteger”/>
</extension>
</complexContent>
</complexType>
4 - 132
<complexType name=”MessageType”>
<simpleContent>
<extension base=”string”>
<attribute name=”sent” type=”boolean”/>
</extension>
</simpleContent>
</complexType>
4 - 133
Derivation by restriction
<complexType name=”NameType”>
<sequence>
<element name=”Name” type=”string”/>
<element name=”FirstSurname” type=”string”/>
<element name=”SecondSurname” type=”string”/>
</sequence>
</complexType>
<complexType name=”SimplifiedNameType”>
<complexContent>
<restriction base=”NameType”>
<sequence>
<element name=”Name” type=”string”/>
<element name=”FirstSurname” type=”string”/>
</sequence>
</restriction>
</complexContent>
</complexType>
4 - 134
4 - 135
4 - 136
Inside the <BookStore> element we define a key named PK. It selects each
book and inside it the ISBN element will be a key.
4 - 138
4 - 139
4 - 140
Unique
! The <unique> element is used exactly in the same way as <key>
4 - 142
4 - 143
Keyref: an example
<?xml version="1.0"?>
<Library xmlns="http://www.library.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.library.org
Key
AuthorSigningAtLibrary.xsd">
<Books>
<Book>
<Title>Illusions The Adventures of a Reluctant Messiah</Title>
<Author>Richard Bach</Author>
<Date>1977</Date>
<ISBN>0-440-34319-4</ISBN>
<Publisher>Dell Publishing Co.</Publisher> We want to assure that ISBN
</Book>
... indicated in the author is in
</Books>
<GuestAuthors> fact an book ISBN.
<Author>
<Name>Richard Bach</Name>
<BookForSigning>
<Title>Illusions The Adventures of a Reluctant Messiah</Title>
<ISBN>0-440-34319-4</ISBN>
</BookForSigning>
</Author> Refence element
</GuestAuthors>
</Library>
4 - 144
4 - 145
The number of fields (<field>) of the <key> element must be equal to the number off
Fields (<field>) in keyref.
Besides that they should be of the same type an be in the same order.
4 - 146
! The key, keyref and unique elements can be declared in any part
of the schema (as long as they are in the end of an element
declaration).
4 - 147
Restrictions scope
XML
Document
Splitting a
All the keys and
XML document into respective
Document several references could
be lost
XML
Document
4 - 148
4 - 149
Modular organization
core
opcional
core
opcional
opcional
opcional
Principals schemas
Modular schemas
4 - 150
<schema>
<element name=”...”>
<schema> <attribute name=”...”>
<complexType name=”...”>
<simpleType name=”...”>
</schema>
<group name=”...”>
<attributeGroup name=”...”>
</schema>
4 - 151
Reusing mechanisms
! The XML Schema features the following mechanisms to access
the modules of a schema.
4 - 152
! Homogeneous namespace
! Heterogeneous namespace
! No namespace
4 - 153
Homogeneous namespace
!For schemas that use the same namespace one can use:
4 - 154
Types:
typeLib.xsd nameType
addressType
catalog.xsd
contact.xsd Types:
contactType
4 - 155
<xs:complexType name=”nameType">
<xs:sequence>
<xs:element name=”Name" type="xs:string"/>
<xs:element name=”Surname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name=”addressType">
<xs:sequence>
<xs:element name=”street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name=”PostalCode" type="xs:string"/>
<xs:element name=”Country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
4 - 156
<xs:include schemaLocation="typelib.xsd"/>
<xs:complexType name=”contactType">
<xs:sequence>
<xs:element name=”completeName" type="ct:nameType"/>
<xs:element name=”address" type="ct:addressType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name=”observationsType">
<xs:restriction base="xs:string">
<xs:maxLength value="256"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
4 - 157
4 - 158
4 - 159
<contact>
<completeName>
<Name></Name>
<Surname></Surname>
</completeName>
<address>
<street></street>
<city></city>
<PostalCode></PostalCode>
<Country></Country>
</address>
</contact>
</catalog>
4 - 160
Types:
typeLib.xsd nameType
addressType
include
catalog.xsd
contact.xsd Types:
contactType
redefine
Types:
contactType
+ extension
telephone
4 - 161
4 - XML Schema
<xs:redefine schemaLocation="contacts.xsd">
<!-- includes with redefinition -->
<xs:complexType name=”contactType">
<xs:complexContent>
<xs:extension base="ct:contactType">
<xs:sequence>
<xs:element name="telephone" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
<xs:element name="catalog">
<xs:complexType>
<xs:sequence>
<!-- observationsType was not redefined but was included -->
<xs:element name="observations" type="ct:observationsType"/>
<xs:element name="contact" type="ct:contactType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
4 - 162
<observations></observations>
<contact>
<completeName>
<Name></Name>
</Surname></Surname>
</completeName>
<address>
<street></street>
<city></city>
<PostalCode></PostalCode>
<Country></Country>
</address>
</contact>
</catalog>
4 - 163
Heterogeneous namespace
4 - 164
EN=typeLib
Types:
EN=contactcatalog typeLib.xsd nameType
addressType
catalog.xsd
contact.xsd Types:
contactType
EN=contact
4 - 165
4 - XML Schema
<xs:complexType name=”nameType">
<xs:sequence>
<xs:element name=”Name" type="xs:string"/>
<xs:element name=”Surname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name=”addressType">
<xs:sequence>
<xs:element name=”street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name=”PostalCode" type="xs:string"/>
<xs:element name=”Country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
4 - 166
<xs:complexType name=”contactType">
<xs:sequence>
<xs:element name=”completeName" type=”typ:nameType"/>
<xs:element name=”address" type=”typ:addressType" minOccurs="0”/
</xs:sequence>
</xs:complexType>
<xs:simpleType name=”observationsType">
<xs:restriction base="xs:string">
<xs:maxLength value="256"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
4 - 167
4 - 168
<cct:contact>
<ct:completeName>
<typ:Name></typ:Name>
<typ:Surname></typ:Surname>
</ct:completeName>
<ct:morada>
<typ:street></typ:street>
<typ:city></typ:city>
<typ:PostalCode></typ:PostalCode>
<typ:Country></typ:Country>
</ct:morada>
</cct:contact>
</cct:catalog>
4 - 169
4 - 170
<contact>
<nomeCompleto xmlns="contacts">
<Name xmlns="typeLib"></Name>
<Surname xmlns="typeLib"></Surname>
</nomeCompleto>
<address xmlns="contacts">
<street xmlns="typeLib"></street>
<city xmlns="typeLib"></city>
<PostalCode xmlns="typeLib"></PostalCde>
<Country xmlns="typeLib"></Country>
</address>
</contact>
</catalog>
4 - 171
Without namespace
4 - 172
Types:
typeLib.xsd nameType
addressType
catalog.xsd
contact.xsd Types:
contactType
4 - 173
Without namespaces
4 - 174
<xs:redefine schemaLocation="contactss.xsd">
<!-- include with definition -->
<xs:complexType name=”contactType">
<xs:complexContent>
<xs:extension base=”contactType">
<xs:sequence>
<xs:element name="telephone" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
<xs:element name="catalog">
<xs:complexType>
<xs:sequence>
<!-- the observationsType was not redefined but was included -->
<xs:element name="observations" type=”observationsType"/>
<xs:element name="contact" type=”contactType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
4 - 175
<observations></observations>
<contact>
<completeName xmlns="">
<Name></Name>
<Surname></Surname>
</completeName>
<address xmlns="">
<street></street>
<city></city>
<PostalCode></PostalCode>
<Country></Country>
</address>
<telephone></telephone>
</contact>
</catalog>
4 - 176
Camera.xsd
4 - 178
4 - 181
4 - 182
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
….
</xs:schema>
4 - 183