- From: <bugzilla@wiggum.w3.org>
- Date: Thu, 14 Feb 2008 12:19:34 +0000
- To: public-qt-comments@w3.org
- CC:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=5480
Summary: Substitution groups and 8.2.3.1.1
Product: XML Query Test Suite
Version: unspecified
Platform: PC
OS/Version: Windows XP
Status: NEW
Severity: normal
Priority: P2
Component: XML Query Test Suite
AssignedTo: andrew.eisenberg@us.ibm.com
ReportedBy: nick@cbcl.co.uk
QAContact: public-qt-comments@w3.org
Consider a schema:
<schema targetNamespace="http://www.w3.org/XQueryTest/testcases"
xmlns:tc="http://www.w3.org/XQueryTest/testcases">
<element name="root">
<complexType>
<sequence>
<element ref="tc:schema-element-head"/>
</sequence>
</complexType>
</element>
<element name="schema-element-head" type="string"/>
<element name="schema-element-group" type="string"
substitutionGroup="tc:schema-element-head"/>
</schema>
And $input-context bound to the document:
<tc:root xmlns:tc="http://www.w3.org/XQueryTest/testcases">
<tc:schema-element-group>string</tc:schema-element-group>
</tc:root>
And the query
import schema namespace tc="http://www.w3.org/XQUeryTest/testcases";
declare variable $input-context1 as document-node(schema-element(tc:root))
external;
$input-context/tc:root/tc:schema-element-group
Clearly the expected result should be the schema-element-group element, but I
think the typing rules give the type of the axis expression as empty-sequence.
$input-context has type: document ( element tc:root of Type )
where Type is element tc:element-schema-head of xsd:string
Firstly I don't no believe any of the judgements (particularly the with union
interpretation judgement) cause tc:element-schema-group to be included in Type
Hence we ended up wanting to make the judgement from 8.2.3.1.1
statEnv |- test tc:schema-element-group with element of element
tc:schema-element-head of xsd:string : element tc:schema-element-group of
xsd:string
In the recommendation I don't think this case is caught, as clearly the QNames
schema-element-group and schema-element-head don't match. But I don't think it
is caught by the "Lastly, if none of the above rules holds, then the type of
the input expression is empty." as the line:
statEnv |- not(element ElementNameOrWildcard 1 TypeSpecifier1 <: element
ElementNameOrWildcard 2 TypeSpecifier2)
is false as I believe
element tc:schema-element-group <: element tc:schema-element-head
is true, as subtyping (<:) is true if every value which "matches" the first
type also "matches" the second, and the "matches" judgement uses judgements
"name lookup" and hence "substitutes for".
I think this problem was noted in #4261, and fixed in the erratum. And I now
agree the final empty-sequence case covers what is not covered in the prior
cases, particularly with rule 13, but I'm am unsure if it is fixed in the
correct way, as now it would cause the above query to statically type to the
empty-sequence. Should the change not be one using subtyping rather than name
matching for the prior static judgements?
Received on Thursday, 14 February 2008 12:19:58 UTC