- From: Shane Lauf <srl01@uow.edu.au>
- Date: Mon, 2 Aug 2004 19:27:03 +1000
- To: <xmlschema-dev@w3.org>
I am running in to a problem with substitution groups when the substitution
group head includes a required element. For an element which I would like to
include in the substitution group, I would like the required element to be
replaced by a different element which is not substitutable for the required
element.
For example, I have a myObject element (think "postal letter") of type
myObjectType, defined to include either a "pobox" or some number of
"streetaddress"es. (i.e. it has to have at least one or the other.)
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="myContainer">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="myObject"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="myObject" type="myObjectType"/>
<xsd:complexType name="myObjectType" mixed="true">
<xsd:sequence>
<xsd:choice>
<xsd:element name="pobox" type="string"/>
<xsd:element name="streetaddress" type="string"
maxOccurs="unbounded"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Example usage:
<myObject><pobox>12345</pobox></myObject>
<myObject><streetaddress>12345 Smith Ave.</streetAddress></myObject>
I would like to define a myOtherObject which can have a "forwardingaddress"
instead of the "pobox" or "streetaddress"es:
<myOtherObject><forwardingaddress>12345 Jones
Ave.</forwardingaddress></myOtherObject>
The crunch is that I also need myOtherObject to *substitute* for myObject
under myContainer. However if I declare myOtherObject to have
substitutionGroup="myObject", it seems to have to be to be a derivation from
myObjectType - thereby inheriting the requirement to have either a "pobox"
or a "streetaddress". Is there some way I can:
* substitute for, without deriving from (extending), myObjectType;
* extend myObjectType with a minOccurs="0" on the elements in the choice; or
* extend myObjectType with another possible element (forwardingaddress) in
the choice
.... allowing me to get around the one-or-the-other(pobox|streetaddress)
restriction - and leave the original schema intact?
SRL
Received on Monday, 2 August 2004 05:33:28 UTC