- From: <bugzilla@wiggum.w3.org>
- Date: Sat, 11 Mar 2006 19:45:29 +0000
- To: public-qt-comments@w3.org
- CC:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=2999
Summary: typeswitch: how to handle case clauses specifying the
same type
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
>From what I can tell, the following query succeeds to compile:
typeswitch(1)
case xs:integer return 1
case xs:integer return 2
default return -1
What it evaluates to, I find more tricky to determine. I think this sentence is
supposed to tell:
<quote>
[Definition: The effective case in a typeswitch expression is the first case
clause such that the value of the operand expression matches the SequenceType
in the case clause, using the rules of SequenceType matching.
</quote>
I find the sentence phrased in a tricky way("the first case clause such that
the value of"). I assume that the "first case" refers to the first case clause
in terms of occurrence in the "physical" query, not whatever the
implementations happens to match "first".
I think the above query should fail to compile because it is vague what is the
result, and it is unclear what the user wants should happen. Other languages,
such as C++, treats identical case conditions as errors. Perhaps this applies
extraordinarily due to the declarative nature of XQuery and its lack of "order
of execution".
More specifically, I propose two things:
* That the following paragraph is added: "It is an error if two or more case
clauses specifies sequence types that are identical to one another[new error
code].", or something in that direction. I don't know what to refer to in order
to define sequence type equalness(probably something in 2.5.4). Perhaps one
should keep an eye on that it is clear that types can still have the same
parent types(it sounds perhaps obvious since all types are derived from item()
if one thinks about it, but then one have to think about it).
* Reword the definition of effective case to be a bit simpler(or is it just
me?)
However, I do suspect I've missed something glaringly obvious..
Regards,
Frans
Received on Saturday, 11 March 2006 19:47:22 UTC