- From: George Cristian Bina <george@sync.ro>
- Date: Tue, 03 Aug 2004 09:10:21 +0300
- To: Shane Lauf <srl01@uow.edu.au>
- Cc: xmlschema-dev@w3.org
Hi Shane, I think that is not possible, the main reason being that the particle that defines the myObjectType is not emptiable. If you add for instance a minOccurs="0" like below: <xsd:complexType name="myObjectType" mixed="true"> <xsd:sequence> <xsd:choice minOccurs="0"> <xsd:element name="pobox" type="xsd:string"/> <xsd:element name="streetaddress" type="xsd:string" maxOccurs="unbounded"/> </xsd:choice> </xsd:sequence> </xsd:complexType> then you should be able to extend the myObjectType to add the forwardingaddress element: <xsd:complexType name="tmpType" mixed="true"> <xsd:complexContent> <xsd:extension base="myObjectType"> <xsd:sequence> <xsd:element name="forwardingaddress" type="xsd:string"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> and then restrict it to remove the pobox and streetaddress in the myOtherObjectType: <xsd:complexType name="myOtherObjectType" mixed="true"> <xsd:complexContent> <xsd:restriction base="tmpType"> <xsd:sequence> <xsd:element name="forwardingaddress" type="xsd:string"/> </xsd:sequence> </xsd:restriction> </xsd:complexContent> </xsd:complexType> Now you should be able to add the myOtherObject in the substitution group of myObject: <xsd:element name="myOtherObject" type="myOtherObjectType" substitutionGroup="myObject"/> Best Regards, George ----------------------------------------------- George Cristian Bina <oXygen/> XML Editor & XSLT Editor/Debugger http://www.oxygenxml.com Shane Lauf wrote: > Thanks George. If there's no way to go forward without > changing the original schema as well, then the abstract > elements idea sounds like it will be the best solution. I'd > like to exhaust the other options (which leave the original > schema intact) first though. Can you think of anything else > ("extending" with a minOccurs="0", or something?) that might > be feasible? > > Regards, > > Shane > > ---- Original message ---- > >>Date: Mon, 02 Aug 2004 13:13:16 +0300 >>From: George Cristian Bina <george@sync.ro> >>Subject: Re: Substitution groups - replacing required > > elements in the s.group head > >>To: Shane Lauf <srl01@uow.edu.au> >>Cc: xmlschema-dev@w3.org >> >>Hi Shane, >> >>You can define an abstract element like: >> >><xsd:element name="abstractObject" abstract="true"/> >> >>and then use that in the content model of the container: >> >><xsd:element name="myContainer"> >> <xsd:complexType> >> <xsd:sequence> >> <xsd:element ref="abstractObject"/> >> </xsd:sequence> >> </xsd:complexType> >></xsd:element> >> >>Add the myObject in the substitution group for the > > abstractObject > >><xsd:element name="myObject" type="myObjectType" >>substitutionGroup="abstractObject"/> >> >>and do the same for the new myOtherObject element: >> >><xsd:element name="myOtherObject" type="myOtherObjectType" >>substitutionGroup="abstractObject"/> >><xsd:complexType name="myOtherObjectType"> >> <xsd:sequence> >> <xsd:element name="forwardingaddress" > > type="xsd:string"/> > >> </xsd:sequence> >></xsd:complexType> >> >>Hope that helps, >>George >>----------------------------------------------- >>George Cristian Bina >><oXygen/> XML Editor & XSLT Editor/Debugger >>http://www.oxygenxml.com >> >> >>Shane Lauf wrote: >> >>>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 Tuesday, 3 August 2004 02:10:16 UTC