- From: <bugzilla@wiggum.w3.org>
- Date: Wed, 11 Mar 2009 11:22:38 +0000
- To: public-qt-comments@w3.org
http://www.w3.org/Bugs/Public/show_bug.cgi?id=6683
Summary: [FS] Types unsound for nillable element tests (and some
minor editorial issues).
Product: XPath / XQuery / XSLT
Version: Candidate Recommendation
Platform: PC
OS/Version: Windows NT
Status: NEW
Severity: normal
Priority: P2
Component: Formal Semantics
AssignedTo: jmdyck@ibiblio.org
ReportedBy: oliver@cbcl.co.uk
QAContact: public-qt-comments@w3.org
Consider the following element test:
$axis/self:element(*, myString?)
where myString is a type derived from xs:string
and $axis has static type element(e, xs:string).
Clearly $axis can contain an element with name e and type xs:myString, which
matches the element test, and so the static type of this expression should not
be empty.
Lets look at the rules given in formal semantics (8.2.3.1.2)
The first rule reads:
[ElementTest]sequencetype = ElementType
statEnv |- Type1 <: ElementType
----------------------------------------------------------
statEnv |- test ElementTest with element of Type1 : Type1
ElementType is element * nillable of type myString
Type1 is element e of type xs:string
Type1 <: ElementType is false since the content of an element can contain an
xs:string that is not a myString, so this does not apply.
The second rule reads:
[ElementTest]sequencetype = ElementType
statEnv |- ElementType <: Type1
-----------------------------------------------------------------
statEnv |- test ElementTest with element of Type1 : ElementType?
ElementType <: Type1 is false since a value of ElementType can be nillable, and
a value of Type1 can not.
The third rule reads:
[ElementTest]sequencetype = element ElementName1 TypeSpecifier1
statEnv |- TypeSpecifier1 expands to Type1
statEnv |- TypeSpecifier2 expands to Type2
statEnv |- Type2 <: Type1
-----------------------------------------------------------------------------
statEnv |- test ElementTest with element of element TypeSpecifier2 : element
ElementName1 TypeSpecifier2?
The bottom line should probably say "element of element * TypeSpecifier2"), but
this is an editorial issue.
Even if we do apply this for ElementName1 equal to star we get Type1 =
xs:myString? and Type2 = xs:string, so Type2 <: Type1 is false and this rule
does not apply.
The fourth rule reads:
[ElementTest]sequencetype = element TypeSpecifier1
statEnv |- TypeSpecifier1 expands to Type1
statEnv |- TypeSpecifier2 expands to Type2
statEnv |- Type1 <: Type2
------------------------------------------------------------------------------
statEnv |- test ElementTest with element of element ElementName2
TypeSpecifier2 : element ElementName2 TypeSpecifier1?
Similarly to above the first line should say "element * TypeSpecifier1, but
again this is beside the point of this bug report.
For the same reasons as the previous rule, this rule does not apply.
Finally we reach rule 5:
[ElementTest]sequencetype = element ElementNameOrWildcard1 TypeSpecifier1
statEnv |- not(element ElementNameOrWildcard1 TypeSpecifier1 <: element
ElementNameOrWildcard2 TypeSpecifier2)
statEnv |- not(element ElementNameOrWildcard2 TypeSpecifier2 <: element
ElementNameOrWildcard1 TypeSpecifier1)
statEnv |- TypeSpecifier1 expands to Type1
statEnv |- TypeSpecifier2 expands to Type2
statEnv |- not(Type1 <: Type2)
statEnv |- not(Type2 <: Type1)
statEnv |- test ElementTest with element of element ElementNameOrWildcard2
TypeSpecifier2 : empty
There is another very minor editorial issue with this rule - there should not
be a space between ElementNameOrWildcard and the subscripted 1 or 2.
This case is indeed the negation of all the previous cases, and so this rule
applies and we obtain static type ().
As stated above, this type is not compatible with run time semantics.
We should have probably inferred the type element(e, myString)?
--
Configure bugmail: http://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
Received on Wednesday, 11 March 2009 11:22:48 UTC