W3C home > Mailing lists > Public > xmlschema-dev@w3.org > December 2008

Re: Conditional Schema Processing

From: Michael Glavassevich <mrglavas@ca.ibm.com>
Date: Fri, 5 Dec 2008 12:48:06 -0500
To: "Zac Harvey" <zachary.harvey@gmail.com>
Cc: xmlschema-dev@w3.org
Message-ID: <OFD1A9007B.4793C83B-ON85257516.0060C789-85257516.0061CCD8@ca.ibm.com>

XML Schema 1.1 introduces a new feature called type alternatives (aka
conditional type assignment) which allows you to do this. There's an
implementation in the current development stream of Xerces-J; still not
quite ready for prime time, but should be available in a release soon.

Thanks.

[1] http://www.w3.org/TR/xmlschema11-1/#cTypeAlternative

Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: mrglavas@ca.ibm.com
E-mail: mrglavas@apache.org

zachary.harvey@gmail.com wrote on 12/05/2008 12:11:10 PM:

> 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:48:45 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:15:09 GMT