W3C home > Mailing lists > Public > xmlschema-dev@w3.org > August 2004

RE: Substitution groups - replacing required elements in the s.group head

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>
Message-Id: <20040802100256.ADC18A0D6B@frink.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

This archive was generated by hypermail 2.3.1 : Wednesday, 5 February 2014 07:15:10 UTC