string-join implementation always uses XPath 3.1 implementation
Related to issue [[https://saxonica.plan.io/issues/2738]], it seems the situation hasn't effectively changed. Since that issue is closed a while now, I raise a new issue.
Essentially the implementation for string-join() should reject any non-string item arguments with a XPTY0004 when XPathCompiler has set the language version to 2.0. Currently I'm using Saxon 9.9 (upgrading to 12.1 soon). Looking at XPath20FunctionSet, it uses the same StringJoin.class as the XPath31FunctionSet. Was the 2.0-specific implementation dropped again in 9.9?
Updated by Michael Kay 8 months ago
We made a conscious decision to drop the requirement for 100% XPath 2.0 conformance in cases where the only difference would be to raise an error for run-time conditions that XPath 3.1 allows but XPath 2.0 does not. This is documented at
The example of string-join() accepting non-string arguments is given as a specific example.
We felt that the only adverse impact would be on people (like yourself) running conformance tests. Sorry for the inconvenience.
Updated by Johan Walters 8 months ago
That is a fair decision. And the inconvenience is indeed limited to a failing conformance test. I got confused by the comments on the other ticket, where there was mention of a patch on 9.7 to have a 2nd string-join implementation, and where the 9.8 function sets were also presented as a 'solution'. Therefore I thought an exception was made for string-join. But as said, the current situation is fine.
Please register to edit this issue