- 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 UTC