- From: Curt Arnold <carnold@houston.rr.com>
- Date: Mon, 9 Aug 2004 15:55:08 -0500
- To: www-dom@w3.org
On Aug 9, 2004, at 4:02 AM, Michael Kay wrote:
>
> If type A is derived indirectly from type B by a sequence of steps that
> includes both restriction and extension, what result should
> A.isDerivedFrom(B, x) return where:
>
> (a) x is 0
> (b) x is DERIVATION_EXTENSION
> (c) x is DERIVATION_RESTRICTION
> (d) x is DERIVATION_EXTENSION | DERIVATION_RESTRICTION
>
> The answer to (a) seems to be clearly documented as TRUE. I can't find
> an
> explanation of what the other three cases should return.
>
> Obviously the result of (b) and (c) should be the same, and the spec
> does
> say that the result of (d) should be the result of b OR c, so it boils
> down
> to the question, what does (b) return?
>
a = true, b = true, c = false, d = true
Test cases testinfoisderivedfrom32, 33 and 34 test that type of
scenario. Test 32 is equivalent to scenarios a and d, 33 == scenario b
and 34 == scenario c.
The definition of DERIVATION_RESTRICTION
(http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/
core.html#TypeInfo-DERIVATION_RESTRICTION) ends with the phrase: "and
all the derivation methods involved are restriction." In this
scenario, one of the derivation methods is not restriction, so that
condition is not satisfied and c is false.
The definition of DERIVATION_EXTENSION
(http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/
core.html#TypeInfo-DERIVATION_EXTENSION) ends with the phrase: "at
least one of the derivation methods involved is an extension". In
this scenario, at least one step is an extension, so the condition is
satisfied and b is true.
In the description of Definition Groups DerivationMethods: "When
using the isDerivedFrom method, combining all of them in the
derivationMethod parameter is equivalent to invoking the method for
each of them separately and combining the results with the OR boolean
function." So
A.isDerivedFrom(B, METHOD_RESTRICTION | METHOD_EXTENSION) ==
A.isDerivedFrom(B, METHOD_RESTRICTION) || A.isDerivedFrom(B,
METHOD_EXTENSION) ==
false || true == true
The definition of METHOD_RESTRICTION was designed so that if
A.isDerivedFrom(B, METHOD_RESTRICTION) were true then it would follow
that all legal values for type A were also legal values for type B.
This would allow you to, for example, ask if a type was derived by
restriction from xsd:double. If it returned true, you could check
proposed values to see if they were of type double and if not, you
could safely reject it as not being a legal value for the type.
Received on Monday, 9 August 2004 20:55:16 UTC