The XML document above consist of a root element, "shiporder",
that contains a required attribute called "orderid". The "shiporder"
element contain three different child elements: "orderperson",
"shipto" and "item". The "item" element appear twice, and it
contains a "title", an optional "note" element, a "quantity",
and a "price" element.
The line above: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
tells the XML parser that this documents should be validated against a schema. The line: xsi:noNamespaceSchemaLocation="shiporder.xsd"
specify WHERE the schema resides (here it is in the same
folder as "shiporder.xml").
Create an XML Schema
Now we want to create a schema for the XML document above.
We start by opening a new file that we will call as "shiporder.xsd".
To create the schema we could simply follow the structure in the
XML documents and define each element as we find it. We will
start with the standard XML declaration followed by the
xs:schema element that define a schema:
In the schema above we use the standard namespace (xs), and
the URI associated with this namespace is the Schema language
definition, which has the standard value of
http://www.w3.org/2001/XMLSchemas.
Next, we have to define "shiporder" element. This element
has an attribute and it contain other elements, therefore we
consider it as a complex type. The child element of the "shiporder"
element is surrounded by a xs:sequence element that defines an
ordered sequence of sub elements:
Then we have to define the "orderperson" element as simple type
(because it does not contain any attributes or other elements).
The type (xs:string) is prefixed with the namespace prefix associated with XML Schemas
that indicates a predefined schema data type:
<xs:element name="orderperson" type="xs:string"/>
Next, we have to defines two elements that are of the complex type: "shipto" and "item".
We start by defining the "shipto" element as follows:
With schema we can define the number of possible
occurrences for an element with the maxOccurs and minOccurs
attributes. maxOccurs specify the maximum number of
occurrences for an element and minOccurs specifies the minimum
number of occurrences for an element. The default value for both
maxOccurs and minOccurs is always 1!
Now we can define "item"
element. This element can appear multiple times inside the
"shiporder" element. This is specified by setting the maxOccurs
attribute of the "item" element to "unbounded" which mean that
there can be as many occurrences of the "item" element as the
author wishes. Notice that the "note" element is optional here. We
have specified this by setting the minOccurs attribute to be zero:
The third design method define classes or types, that
enables us to reuse element definitions. This is done by naming
the simpleTypes and complexTypes element, and then point to
them through the type attribute of the element.
Here is the
third design of the schemas file ("shiporder.xsd"):
The restriction element indicate that the datatype is derived from a W3C XML Schema namespace datatype.
So, the following fragment mean that the value of the element or attribute must be a string value:
<xs:restriction base="xs:string">
The restriction element is more often used to apply restriction to elements.
Look at the following line from the schema above:
This indicate that the value of the element or attribute must be a string,
it must be exactly six characters in a row, and those characters must be a number from 0 to 9.