- From: Michael Kay <mhk@mhk.me.uk>
- Date: Mon, 2 Aug 2004 11:01:53 +0100
- To: "'Shane Lauf'" <srl01@uow.edu.au>, <xmlschema-dev@w3.org>
It's very much part of the whole idea of substitution groups that the elements within a substitution group satisfy all the constraints defined for the head of the substitution group. I think you are looking for a different mechanism here. Michael Kay > -----Original Message----- > From: xmlschema-dev-request@w3.org > [mailto:xmlschema-dev-request@w3.org] On Behalf Of Shane Lauf > Sent: 02 August 2004 10:27 > To: xmlschema-dev@w3.org > Subject: Substitution groups - replacing required elements in > the s.group head > > > 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 06:02:56 UTC