The spec says (very carefully)

The expression E castable as T returns true if the result of evaluating E can 
be successfully cast into the target type T by using a cast expression; 
otherwise it returns false. If evaluation of E fails with a dynamic error or if 
the value of E cannot be atomized, the castable expression as a whole fails.

So if E is map{} then there should definitely be an error because map{} cannot 
be atomized. (It's less clear exactly what the error should be, or whether it 
can be reported statically).

If E is array{1,2} then I think the spec says the result should be false: 
evaluation of E does not fail, and it can be atomized, and it cannot be cast to 
xs:integer.

I will add some test cases to QT3.

Michael Kay
Saxonica

> On 10 Nov 2020, at 10:33, Ghislain Fourny <gfou...@inf.ethz.ch> wrote:
> 
> Dear all,
> 
> I would like to check something on XQuery 3.1 and in particular the behavior 
> of maps/arrays with "castable as" given the way they can and cannot be 
> atomized.
> 
> Do you agree that
> 
>  array { 1, 2 } castable as xs:integer
> 
> and
> 
>  map {} castable as xs:integer
> 
> should both return false?
> 
> 
> My first thought was to see what Saxon (I used 9.9.1.7) says (in oXygen) but 
> the first query returns true in spite of
> 
>  array { 1, 2 } cast as xs:integer
> 
> throwing an error (as expected)
> 
> and the second query returns a null pointer exception (in all likelihood, 
> this one is undesired).
> 
> Thanks a lot for confirming whether my understanding of the spec is correct!
> 
> Thanks and kind regards,
> Ghislain
> 
> 
> _______________________________________________
> talk@x-query.com
> http://x-query.com/mailman/listinfo/talk

_______________________________________________
talk@x-query.com
http://x-query.com/mailman/listinfo/talk

Reply via email to