W3C home > Mailing lists > Public > www-xml-schema-comments@w3.org > January to March 2000

Re: Equivalence classes

From: Philip Wadler <wadler@research.bell-labs.com>
Date: Fri, 18 Feb 2000 12:59:16 -0500
Message-Id: <200002181759.MAA07052@nslocum.cs.bell-labs.com>
To: www-xml-schema-comments@w3.org, ht@cogsci.ed.ac.uk (Henry S. Thompson)
Henry S. Thompson (ht@cogsci.ed.ac.uk) writes:

> Philip Wadler <wadler@research.bell-labs.com> writes:
> 
> > If all elements are declared via top-level `element' declarations,
> > then I think that I understand how equivalence classes work.  Can
> > someone please explain how equivalence classes work in the presence
> > of element declarations nested within type declarations?
> 
> 'equivClass' is incoherent on a nested (or 'local') element
> declaration, because of the asymmetry pointed out below.  This should
> be made clear in the spec. -- I agree it is not clear now.

I don't see what this has to do with assymetry.
Let me try my question again.

First, let's review ordinary equivalence classes with top-level elements.

  <element name="b">
    <type>
      <element name="a-in-b" type="a-in-b-type"/>
    </type>
  </element>
  <element name="c">
    <type>
      <element name="a-in-c" type="a-in-c-type"/>
    </type>
  </element>
  <element name="a-in-b-prime" type="a-in-b-prime-type" equivClass="a-in-b"/>
  <element name="a-in-c-prime" type="a-in-c-prime-type" equivClass="a-in-c"/>

This says that we can use an "a-in-b-prime" element anywhere an
"a-in-b" element may appear, and an "a-in-c-prime" element anywhere an
"a-in-c" element may appear.  (It assumes "a-in-b-prime-type" is
derived from "a-in-b-type", and "a-in-c-prime" type is derived from
"a-in-c-type".)

Now, let's say we modify the first part of the above to use the
element name "a" in place of both "a-in-b" and "a-in-c".

  <element name="b">
    <type>
      <element name="a" type="a-in-b-type"/>
    </type>
  </element>
  <element name="c">
    <type>
      <element name="a" type="a-in-c-type"/>
    </type>
  </element>

What is the corresponding modification for the remainder?  That is,
how can I specify that "a-in-b-prime" can replace the occurrences of
"a" within "b", and that "a-in-c-prime" can replace the occurrence of
"a" within "c"?  Or is this not possible?  If it's not possible, what
was the rationale for omitting it?    -- P
Received on Friday, 18 February 2000 13:00:05 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Sunday, 6 December 2009 18:12:46 GMT