spacer

Webref WebRef   Sitemap · Experts · Tools · Services · Newsletters · About i.com

home / authoring / languages / xml / schemas / chap1 / 1 To page 1To page 2To page 3To page 4current page
[previous]

Professional XML Schemas

Developer News
News Flash: Adobe Has iPhone Workaround
Adobe's Flash 10.1 Goes Mobile (Minus iPhone)
A Salute to Visionary CEOs

Complex Types

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.

The Customer element declared in the Customer.xsd example is allowed to contain three child elements (FirstName, MiddleInitial, and LastName), and therefore needs to be a complex type. We gave the Customer element a complex type using the complexType element nested inside the element that declared Customer. We then declared the number of child elements the element Customer is allowed to contain inside the complexType element and its compositor 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 complexType definition, after the closing sequence compositor tag and just before the closing complexType tag:

<?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 customerID 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.]


home / authoring / languages / xml / schemas / chap1 / 1 To page 1To page 2To page 3To page 4current page
[previous]

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Reprints, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs

webref The latest from WebReference.com Browse >
Building a Banking Application Home Page with OOP · Mixing Scripting Languages · Review: phpFox, a Social Networking CMS with all the Bells and Whistles
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
Enterprise 2.0: Social Networking in the Cloud · BroadSoft Marketplace Hastens Pace of Telephony Innovation · Review: HTC Hero for Sprint

Created: October 18, 2001
Revised: October 18, 2001


URL: http://webreference.com/authoring/languages/xml/schemas/chap1/1/5.html