Re: Derivation by restriction wrt to type inheritance

Eddie Robertsson <eddie@allette.com.au> writes:

> > 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>
> 
> I'm still trying to get my head around all the rules for derivation
> by restriction but should the above Person type really be a
> derivation by extension from the base Object?

Yes, because that's what the questioner asked for.

> I have two reasons for asking this question:

> 1) Since the base Object doesn't specify a type this means that it
> will default to the anyType.

Nope.  _Element declarations_ with no type get the ur-type by
default.  Complex type definitions default to _restrictions_ of the
ur-type [1], and since they're empty, that in turn defaults to an
empty content model.

> This in turn means that any element and any attribute is allowed so
> how can this type be extended to add elements and attributes?

Since it's empty, extension is the right thing.

<snip/>


> 2) My second reason is because (from what I can understand) in the
> above restriction the intent is to use person elements instead of
> entry elements.  Doesn't the rules on restriction say that for this
> to be valid then the type of the person element must be derived by
> _restriction_ from the type of the entry element. In this case the
> type of the person element (Person) is derived by _extension_ from
> the type of the entry element (Object).

I agree this is confusing, but it's correct.  The base type allows a
sequence of any number of <entry> elts.  Since <entry> is the head of
a substitution group, this effectively is a sequence of any number of
choices among the members of that s-group, i.e. <person> or
<company>.  So a type which allows only a sequence of <person> is
indeed a restriction.

ht

[1] http://www.w3.org/TR/xmlschema-1/#declare-type
-- 
  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 Tuesday, 27 November 2001 13:47:03 UTC