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 <[email protected]> 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
>
>
> _______________________________________________
> [email protected]
> http://x-query.com/mailman/listinfo/talk
_______________________________________________
[email protected]
http://x-query.com/mailman/listinfo/talk