Re: Derivation by restriction wrt to type inheritance

The equivalent of templates, which is what you need for your List
example, is indeed supported by XML Schema, using substitution groups:

 <xs:complexType name="List">
  <xs:sequence minOccurs="0" maxOccurs="unbounded">
   <xs:element ref="entry"/>
  </xs:sequence>
 </xs:complexType>
 
 <xs:element name="entry" abstract="true" type="Object"/>
 
Note because this is abstract you will have to declare other elements
which have this as their substitution group head.

 <xs:complexType name="Object"/> [this could be anything you choose]
 
 <xs:element name="list" type="List"/> [polymorphic list]
 
 <xs:complexType name="Person">
  <xs:complexContent>
   <xs:extension base="Object">
    <xs:sequence>
     <xs:element name="name"/>
     . . .
    </xs:sequence>
    <xs:attribute name="gender" type="xs:token"/>
    . . .
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 
 <xs:element name="person" type="Person" substitutionGroup="entry"/>
 
 <xs:element name="personList">
  <xs:complexType>
   <xs:complexContent>
    <xs:restriction base="List">
     <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="person"/>
     </xs:sequence>
    </xs:restriction>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>

So this will allow <personList><person gender='F'><name>....</person>
                               <person....
                   </personList>
 
 <xs:element name="company" substitutionGroup="entry">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="Object">
     . . .
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
</xs:schema>

Now you could mix <person> and <company> inside a polymorphic <list>,
or define a <companyList> in the same way as <personList>.

You could make the 'List' type abstract if you wanted to _require_
restriction to lists of particular sub-types of Object.

Hope this helps.

ht
-- 
  Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
          W3C Fellow 1999--2001, part-time member of W3C Team
     2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
	    Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk
		     URL: http://www.ltg.ed.ac.uk/~ht/

Received on Monday, 26 November 2001 05:01:51 UTC