[XMLSCHEMA-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Defining recursive elements?

From: Andrew Welch <andrew.j.welch@gmail.com>
Date: Thu, 17 May 2007 20:24:46 +0100
Message-ID: <74a894af0705171224u3c77243cr451304b362576c84@mail.gmail.com>
To: "Todd Moon" <tmrfcm@gmail.com>
Cc: xmlschema-dev@w3.org
Re: Defining recursive elements?

On 5/17/07, Todd Moon <tmrfcm@gmail.com> wrote:
>
> (Forgive me if this is a duplicate, Gmail hiccuped for 5 minutes after
> I hit send. I don't see my message in the Sent folder though)
>
> I've been fleshing out my schema. I renamed "part" to "component", and
> added some unique and pattern validation. ("type" and "serial"
> together must be unique across all components.)
>
> I would appreciate some criticism of my schema's overall construction.
> Here it is:
>
> <?xml version="1.0" encoding="utf-8"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>   <xsd:element name="header"/>
>   <xsd:element name="components">
>     <xsd:complexType>
>       <xsd:sequence>
>         <xsd:element ref="component" minOccurs="0" maxOccurs="unbounded"/>
>       </xsd:sequence>
>     </xsd:complexType>
>     <xsd:unique name="componentTypeAndSerial">
>       <xsd:selector xpath=".//component"/>
>       <xsd:field xpath="@type"/>
>       <xsd:field xpath="@serial"/>
>     </xsd:unique>
>   </xsd:element>
>   <xsd:element name="component">
>     <xsd:complexType>
>       <xsd:sequence>
>         <xsd:element ref="component" minOccurs="0" maxOccurs="unbounded"/>
>       </xsd:sequence>
>       <xsd:attribute ref="type"/>
>       <xsd:attribute ref="serial"/>
>     </xsd:complexType>
>   </xsd:element>
>   <xsd:attribute name="serial">
>     <xsd:simpleType>
>       <xsd:restriction base="xsd:string">
>         <xsd:pattern value="\d{10}"/>
>       </xsd:restriction>
>     </xsd:simpleType>
>   </xsd:attribute>
>   <xsd:attribute name="type">
>     <xsd:simpleType>
>       <xsd:restriction base="xsd:string">
>         <xsd:pattern value="\d{3}"/>
>       </xsd:restriction>
>     </xsd:simpleType>
>   </xsd:attribute>
>   <xsd:element name="adapter">
>     <xsd:complexType>
>       <xsd:sequence>
>         <xsd:element ref="header"/>
>         <xsd:element ref="components"/>
>       </xsd:sequence>
>     </xsd:complexType>
>   </xsd:element>
> </xsd:schema>
>
> Here is an example of a valid document:
>
> <adapter>
>   <header>
>   </header>
>   <components>
>     <component type="735" serial="0000000001">
>       <component type="736" serial="0000000001"/>
>       <component type="736" serial="0000000002"/>
>       <component type="740" serial="0000000003"/>
>     </component>
>     <component type="735" serial="0000000002">
>     </component>
>     <component type="735" serial="0000000003"/>
>   </components>
> </adapter>

With global definitions some documents will be valid that you might
not want, for example an XML document of just <header/> would validate
using that schema.
Received on Thursday, 17 May 2007 19:24:52 GMT

Subscribe to the Stylus Scoop newsletter for helpful XML tips and tutorials.
Email
First Name
Last Name
Company

Download Stylus Studio 6 XML Enterprise Edition

Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2007 All Rights Reserved.