WebReference.com - Part 1 of Chapter 1: Professional XML Schemas, from Wrox Press Ltd (5/5)
Professional XML Schemas
Complex types define the attributes an element can carry, and the child elements that an element can contain. Whenever we want to allow an element to carry an attribute or contain a child element, we have to define a complex type.
Customer element declared in the
is allowed to contain three child elements (
LastName), and therefore needs to be a complex type. We gave the
element a complex type using the
complexType element nested inside the element that
Customer. We then declared the number of child elements the element
Customer is allowed to contain inside the
complexType element and its
sequence, like so:
<complexType> <sequence> <element name = "FirstName" type = "string" /> <element name = "MiddleInitial" type = "string" /> <element name = "LastName" type = "string" /> </sequence> </complexType>
Note that we cannot just nest the other element declarations inside each other. The following would not be allowed:
<element name = "Customer"> <element name = "FirstName" type = "string" /> <element name = "MiddleInitial" type = "string" /> <element name = "LastName" type = "string" /> </element>
This is not allowed because we need to define the complex type in order for the
Customer element to contain child elements.
The complex type defined above is known as an anonymous complex type. This is because
it is nested within the element declaration (
Customer, in this case). If we wanted more than one
element to contain the same child elements and carry the same attributes, then we would create
a named complex type, which would apply the same restrictions to the content of our new element. We
look at named complex types in Chapter 3.
Let's quickly add to the
Customer element in our example XML document, by giving
it an attribute called
customerID, so that we can see how we declare attributes. We want the
new document to look as follows:
<?xml version = "1.0" ?> <Customer customerID = "24332"> <FirstName>Raymond</FirstName> <MiddleInitial>G</MiddleInitial> <LastName>Bayliss</LastName> </Customer>
To add the attribute we can just declare it within the
after the closing
sequence compositor tag and just before the closing
<?xml version = "1.0" ?> <schema xmlns = "http://www.w3.org/2001/XMLSchema"> <element name = "Customer"> <complexType> <sequence> <element name = "FirstName" type = "string" /> <element name = "MiddleInitial" type = "string" /> <element name = "LastName" type = "string" /> </sequence> <attribute name = "customerID" type = "integer" /> </complexType> </element> </schema>
We declare an attribute using an element called
attribute. As with the element
declaration, it carries an attribute called
name whose value is the name of the attribute.
Remember the value of an attribute is always a simple type; in this case we want our
attribute to be represented as an integer, so we can use the built-in type of
integer to restrict
the value of the attribute to an integer value.
Note the distinction that elements and attributes are declared, while simple and complex types are defined.
Let's start to look at each of the schema constructs in greater depth. [Continued in part 2 - Ed.]
Created: October 18, 2001
Revised: October 18, 2001