Conditional Schema Processing

This may be bad design, so if it is, then I guess what I'm looking for is an
elegant alternative solution. However I don't believe the following to be a
product of poor design, and so the following question should apply:

I want a particular element, <*widget*> to force the user to define a
*foo*attribute, which will be an enum type of three potential values:
*me*, *you* or *us*. For example:

<widget foo="me" />
<widget foo="you" />
<widget foo="us" />

Would all be legal <widget> instantiations. And so I have the following so
far in my XSD:

*<xs:element name="widget" minOccurs="1" maxOccurs="unbounded">
    <xs:complexType>
        <xs:attribute name="foo" type="xs:string" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:string">
**                    **<xs:enumeration value="me" />
**                    **<xs:enumeration value="you" />
**                    **<xs:enumeration value="us" />
**                **</xs:restriction>
**            **</xs:simpleType>
        </xs:attribute>

**        **<xs:sequence>
            <!-- No definition yet ... -->
**        **</xs:sequence>
    </xs:complexType>
</xs:element>
*
What I am looking for is the ability to define <widget>'s sequence based on
the value of foo.  If foo="me" I want it to contain, say, an <apple>
element. Else if it is "you" or "us" I want it to contain an <orange> child
element.  So for example:

<widget foo="me">
    <apple>Hello!</apple>
</widget>

<widget foo="us">
    <orange>XSD!</orange>
</widget>

I have been pouring through the tutorials and cannot find a way to include
this conditional functionality...

Received on Friday, 5 December 2008 17:31:50 UTC