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 02:26:05 UTC