Bugzilla – Bug 20643
[XP3.0] Formal and informal definitions of derives-from() do not match
Last modified: 2013-06-19 10:07:10 UTC
This is transferred from the comment made by email here:
We say in 2.5.5
derives-from( AT, ET ) returns true if AT is derived from ET by
restriction or extension, or if ET is a union type of which AT is a
If this were the case, then when a function expects union(xs:string,
xs:decimal), it would be a type error to supply an xs:integer.
Furthermore, "union type" should be "pure union type".
This sentence is immediately followed by a paraphrase that says
"formally, ...", and the paraphrase gives the a more complete definition. But
there is no indication that the sentence quoted is to be regarded as
incomplete or informal.
A better definition might be:
derives-from( AT, ET ) returns true if any of the following conditions
* AT is ET
* ET is the base type of AT
* ET is a pure union type of which AT is a member type
* There is a type MT such that derives-from(AT, MT) and derives-from(MT, ET)
The problem is exemplified by test instanceof138. The expected result
for this test assumes that restrictedDate is substitutable for a union
type that includes the base type of restrictedDate as one of its members.
The Working Group accepted the proposed change.