RE: Extending abstract elements with a choice

George,

Thanks very much for the quick reply on this - I'll give it a try. There's
no way to do it in one go (i.e. without the tmp element), right?

Shane

> -----Original Message-----
> From: xmlschema-dev-request@w3.org [mailto:xmlschema-dev-request@w3.org]
On
> Behalf Of George Cristian Bina
> Sent: Thursday, September 02, 2004 1:10 PM
> To: Shane Lauf; xmlschema-dev@w3.org
> Subject: Re: Extending abstract elements with a choice
> 
> 
> Hi Shane,
> 
> I guess can do that with a restriction to an empty content model and then
> extend that to your desired content model:
> 
> <?xml version="1.0"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>   <xsd:element name="test">
>     <xsd:complexType>
>       <xsd:sequence>
>         <xsd:element ref="myAbstractElement"/>
>       </xsd:sequence>
>     </xsd:complexType>
>   </xsd:element>
>   <xsd:element name="myAbstractElement" type="myAbstractElementType"
> abstract="true"/>
>   <xsd:complexType name="myAbstractElementType">
>     <xsd:sequence>
>       <xsd:element ref="Object1" minOccurs="0"/>
>       <xsd:element ref="Object2" minOccurs="0"/>
>     </xsd:sequence>
>   </xsd:complexType>
>   <xsd:element name="Object1"/>
>   <xsd:element name="Object2"/>
>   <xsd:complexType name="tmp">
>     <xsd:complexContent>
>       <xsd:restriction base="myAbstractElementType"/>
>     </xsd:complexContent>
>   </xsd:complexType>
>   <xsd:element name="myConcreteElement"
> substitutionGroup="myAbstractElement">
>     <xsd:complexType>
>       <xsd:complexContent>
>         <xsd:extension base="tmp">
>           <xsd:choice>
>             <xsd:element ref="SpecialObject1"/>
>             <xsd:sequence>
>               <xsd:element ref="Object1" minOccurs="0"/>
>               <xsd:element ref="Object2" minOccurs="0"/>
>             </xsd:sequence>
>           </xsd:choice>
>         </xsd:extension>
>       </xsd:complexContent>
>     </xsd:complexType>
>   </xsd:element>
>   <xsd:element name="SpecialObject1"/>
> </xsd:schema>
> 
> 
> <?xml version="1.0"?>
> <test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>  xsi:noNamespaceSchemaLocation="test.xsd">
>   <myConcreteElement>
>     <SpecialObject1></SpecialObject1>
>   </myConcreteElement>
> </test>
> 
> Best Regards,
> George
> -------------------------------------------------------
> George Cristian Bina mailto:george@oxygenxml.com
> <oXygen/> XML Editor and XSLT Editor/Debugger
> http://www.oxygenxml.com/
> 
> 
> ----- Original Message -----
> From: "Shane Lauf" <srl01@uow.edu.au>
> To: <xmlschema-dev@w3.org>
> Sent: Thursday, September 02, 2004 5:24 AM
> Subject: Extending abstract elements with a choice
> 
> 
> >
> > I have a question about extending abstract elements with a choice, and
> > maintaining substitutability.
> >
> > Say I have an abstract element myAbstractElement, defined with some
child
> > elements which all have minOccurs=0 attributes set.
> >
> >       <xsd:sequence>
> >        <xsd:element ref="Object1" minOccurs="0"/>
> >        <xsd:element ref="Object2" minOccurs="0"/>
> >       </xsd:sequence>
> >
> > Is there a way that I can extend/restrict myAbstractElement to another
> > element myConcreteElement, which ends up with a definition semantically
> > equivalent to:
> >      <xsd:sequence>
> >      <xsd:choice>
> >       <xsd:element ref="SpecialObject1"/>
> >       <xsd:sequence>
> >        <xsd:element ref="Object1" minOccurs="0"/>
> >        <xsd:element ref="Object2" minOccurs="0"/>
> >       </xsd:sequence>
> >      </xsd:choice>
> >     </xsd:sequence>
> >
> > - in otherwords, so that myConcreteElement must have one or the other of
> > [the child elements as defined in myAbstractElement i.e. Object1 and
> Object
> > 2], [a SpecialObject1 child] - and still be substitutable for
> > myAbstractElement?
> >
> > Regards,
> >
> > Shane
> >
> >
> >
> 
> 

Received on Thursday, 2 September 2004 04:49:06 UTC