Grazie Christian!

Saluti,

M.

On 5/21/26 09:16, Christian Grün wrote:
Hi Marco,

Ci hai beccati, the interpretation of query parameters has changed with 12.3: Defaults will no longer be cast to the parameter type anymore, as we found the underlying mechanism to be too idiosyncratic and error-prone.

As you have already discovered, true() and false() are now allowed and supported as annotation values. If you need to make your code backward-compatible, you can use either use an optional type for values whose Boolean value is false (this includes false(), 0, empty strings)…

declare
  %rest:path('test')
  %rest:query-param('b', '{$b}')
function abcde($b as xs:boolean?) { (: and so on :) };

…or use strings and do explicit casts afterwards.

declare
  %rest:path('test')
  %rest:query-param('b', '{$b}', 'false')
function abcde($b as xs:string) {
  if(xs:boolean($b)) { (: and so on :) }
};

Spero che aiuti,
Christian
________________________________________

Von: Marco Lettere via BaseX-Talk <basex-talk@mailman.uni-konstanz.de>
Gesendet: Mittwoch, 20. Mai 2026 18:57
An: basex-talk@mailman.uni-konstanz.de
Betreff: [basex-talk] Strictre type checks on RestXQ

Hello all,

I have a code similar to [1] and used to call it like: curl -X POST "https://myservice.local?compress=false"<https://myservice.local?compress=false>. It worked.

Yesterday I moved to official Basex 12.3 version and started getting the following error:

Value of 'compress' must be of type xs:boolean, supplied: "false". (hint: ....)

Is this a recent implementation change that enforces this type-check? I've not been able to identify the changes in the code base.

Apparently, I can fix this by changing 'false' to false() in the annotation but do you have any idea whether this will be back compatible to older basex versions?

Thanks!

Marco.

[1]

declare
  %rest:path("store")
  %rest:POST
  %rest:query-param("compress", "{$compress}", 'false')
  %rest:produces("application/xml")
function _:store($compress as xs:boolean) {
   ()
};