VOResource v1.0 IWD
    Arnold Rots 
    arots at head.cfa.harvard.edu
       
    Fri Jun 10 14:11:47 PDT 2005
    
    
  
Hay Ray,
OK, here is to your challenge to produce something that can be done
with substitution groups (SG) but not with xsi:type.
As I said, one major problem is the lack of a nesting mechanism for
xsi:type (which could have been solved by allowing xsi:type in schemata).
So, very simply, I want to define a generic element, and a generic
container for such generic elements.  Now I derive specialized
elements from the generic element and a specialized container from the
generic container that holds those specialized elements.
This leads to the two schemata that I have appended.  The trouble is
that the xsi:type version does not validate, whereas the SG one does.
At least - I don't see how one can do it for the former.
The issue here is retaining the inheritance concept for the container
as well as for its contents.
Enjoy!
  - Arnold
--------------------------------------------------------------------------
Arnold H. Rots                                Chandra X-ray Science Center
Smithsonian Astrophysical Observatory                tel:  +1 617 496 7701
60 Garden Street, MS 67                              fax:  +1 617 495 7356
Cambridge, MA 02138                             arots at head.cfa.harvard.edu
USA                                     http://hea-www.harvard.edu/~arots/
--------------------------------------------------------------------------
xsi:type version:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:complexType name="baseElementType">
    <xs:sequence/>
  </xs:complexType>
  <xs:complexType name="baseContainerType">
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="MyBaseElement" type="baseElementType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="mySpecialElementType">
    <xs:complexContent>
      <xs:extension base="baseElementType"/>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="mySpecialContainerType">
    <xs:complexContent>
      <xs:restriction base="baseContainerType">
        <xs:sequence>
          <xs:element name="SpecialElement" type="mySpecialElementType"/>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>
SG version:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:complexType name="baseElementType">
    <xs:sequence/>
  </xs:complexType>
  <xs:element name="BaseElement" abstract="true" type="baseElementType"/>
  <xs:complexType name="baseContainerType">
    <xs:sequence maxOccurs="unbounded">
      <xs:element ref="BaseElement"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="mySpecialElementType">
    <xs:complexContent>
      <xs:extension base="baseElementType"/>
    </xs:complexContent>
  </xs:complexType>
  <xs:element name="SpecialElement" type="mySpecialElementType" substitutionGroup="BaseElement"/>
  <xs:complexType name="mySpecialContainerType">
    <xs:complexContent>
      <xs:restriction base="baseContainerType">
        <xs:sequence>
          <xs:element ref="SpecialElement"/>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>
    
    
More information about the registry
mailing list