- From: <bugzilla@wiggum.w3.org>
- Date: Wed, 31 Oct 2007 05:55:38 +0000
- To: public-qt-comments@w3.org
- CC:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=4841 ------- Comment #16 from jmdyck@ibiblio.org 2007-10-31 05:55 ------- (In reply to comment #14) > One other concern with the proposed change is that removing the special case > rules from subsequence causes static type errors to occur in XQTS queries such > as K-RangeExpr-11 and K-ForExprPropositionalVar-23. As far as I can tell, those tests should already be raising errors. More precisely, an implementation that conforms to the Formal Semantics and does not support a static typing extension will raise a type error during static type analysis of either of those tests. For instance, consider K-RangeExpr-11: subsequence(-3 to -1, 1, 1) eq -3 For inferring the static type of the call to fn:subsequence, you might think that the first rule of 7.2.13 applies, yielding xs:integer. However, static type analysis always takes place on the normalized query. Normalization transforms the query to: fs:eq( fs:convert-operand( fn:data(( subsequence( fs:to( (fs:unary-minus(fs:convert-operand(fn:data((3)),1.0E0))), (fs:unary-minus(fs:convert-operand(fn:data((1)),1.0E0))) ), fs:convert-simple-operand(fn:data(1),1.0E0), fs:convert-simple-operand(fn:data(1),1.0E0), ) )), "string" ), fs:convert-operand( fn:data(( fs:unary-minus(fs:convert-operand(fn:data((3)),1.0E0)) )), "string" ) ) The normalized call to subsequence() matches none of the specialized forms in 7.2.13; only the final catch-all rule applies. The type of the first arg is xs:integer*, so prime(Type) is xs:integer and quantifier(Type) is *. Thus, the inferred type of the subsequence() call is xs:integer*. Ditto for the fn:data() call and fs:convert-operand() call that contain it. So when it comes to typing the fs:eq() call, the xs:integer* argument type isn't accepted by the rules of C.2, and static type inference fails. (A type error is raised.) Of course, an implementation is free to support a static typing extension, in which the subsequence() call might have a type of xs:integer? or xs:integer. In such a case, static typing of fs:eq() would succeed (yielding xs:boolean? or xs:boolean respectively).
Received on Wednesday, 31 October 2007 05:55:54 UTC