- From: <bugzilla@wiggum.w3.org>
- Date: Wed, 31 May 2006 12:50:11 +0000
- To: public-qt-comments@w3.org
- CC:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=3305
Summary: Cardinality +/* on range variables
Product: XPath / XQuery / XSLT
Version: Candidate Recommendation
Platform: Other
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: XQuery
AssignedTo: chamberl@almaden.ibm.com
ReportedBy: frans.englich@telia.com
QAContact: public-qt-comments@w3.org
On queries such as:
for $i as xs:integer+ in (1, 2, 3) return $i
some/every $i as xs:integer+ in (1, 2, 3) satisfies $i
Saxon 8.7.1 SA raises the question of what the type declaration actually
applies on, by reporting XPTY0004, "Cardinality of range variable must be
exactly one."
What does the type declaration apply on?
One alternative is that Saxon is right, that the type declaration is applied on
each tuple binding individually. If this is the case, it makes no sense to
specify a cardinality other than exactly-one, in practice meaning that
specifying the type empty-sequence(), and cardinality +/* makes no sense and
should perhaps be statically forbidden.
The other alternative is that the type declaration applies on the initial
binding sequence as a whole, which must be the case of 'let' bindings. An
advantage of this alternative, is that the user can require a for/let/some
clause to be run at least once, by specifying a cardinality which disallows the
empty sequence.
The XQTS isn't of much guidance here. There are no tests specifying a
cardinality for 'for' tests(although tests involving empty-sequence exists),
and there are no type-declaration tests for quantifications in the latest
release.
I would with little doubt say that the latter is the correct way, but Saxon is
in that case stands out with having the exact opposite interpretation. Is an
editorial clarification appropriate? That at the end of the two
type-declaration paragraphs for 'for' and some/where is added "The type
declaration applies to the binding sequence as a whole, not on each item
individually."
One could argue that for and some/every should be consistent in this area, as
mentioned by Michael Kay in private mail.
Frans
Received on Wednesday, 31 May 2006 12:50:15 UTC