Hi all,
I have a query that makes use of the UCA collation with the "numeric" keyword [1] (e.g., for ensuring that "d2" sorts before "d12"), and I'm seeking a way to confirm that the icu4j library is available on the BaseX classpath before I run queries that depend on it. [2]
Even though I manually install the icu4j library into Basex's lib/custom directory as specified in [3], I have sometimes forgotten to do so when, for example, Homebrew upgraded BaseX, and as a result my query relying on this collation began producing unexpected results. I've tried to make use of the XQuery 4 fn:collation-available function [4], but so far I've been unsuccessful.
Specifically, using BaseX 11.9 or 12 with icu4j-77.1.jar on macOS 15.5 (on Apple Silicon), the following expression returns the expected result:
``` ("d2", "d12") => sort("http://www.w3.org/2013/collation/UCA?numeric=yes") ```
The result, as expected, is ("d12", "d2"), when the library is present and the opposite when it is absent.
But the following version, which introduces a conditional and the fn:collation-available function, always takes the "else" path:
``` if (collation-available("http://www.w3.org/2013/collation/UCA?numeric=yes", "compare")) then ("d2", "d12") => sort("http://www.w3.org/2013/collation/UCA?numeric=yes") else "UCA collation not present" ```
I expected this expression to return ("d12", "d2") but instead received "UCA collation not present".
Am I misusing/misunderstanding how to use fn:collation-available?
Thanks! Joe
[1] https://www.w3.org/TR/xpath-functions-31/#uca-collations [2] https://docs.basex.org/main/Full-Text#collations [3] https://docs.basex.org/main/Startup#full_distributions [4] https://docs.basex.org/12/Standard_Functions#fn:collation-available