document-uri() and base-uri() functions in BaseX 11.8
Friday, 21 March 2025 · 5 messages · last reply 25 Mar 2025
Y
ykhabins21 Mar 2025 15:36 #
Hello,
Congrats on the BaseX 11.8 release.
Was there a change in BaseX 11.8 to the document-uri() and base-uri() functions behavior?
It seems that they are striping out a file name at the end of the fully qualified file path on the file system!
Please find below a repro of it.
BaseX 11.7
==========
declare variable $base_dir as xs:string := 'e:\Temp\Identity Transformation88\';
for $x at $i in collection($base_dir)
let $file := tokenize(document-uri($x), '/')[last()]
return (document-uri($x), $file)Emits the following as expected:
file:///E:/Temp/Identity%20Transformation88/Input.xml
Input.xml
file:///E:/Temp/Identity%20Transformation88/Output.xml
Output.xml
BaseX 11.8
==========
The same XQuery emits the following:
file:///E:/Temp/Identity%20Transformation88/
file:///E:/Temp/Identity%20Transformation88/
Regards,
Yitzhak Khabinsky
GR
Gunther Rademacher21 Mar 2025 20:41 #
Hi Yitzhak,
thank you for reporting this. This is my fault, this change is causing it:
https://github.com/BaseXdb/basex/commit/83acbb74f9419d50a4c03c5793647d449b5577c1
It was made to fix the behavior of duplicating the last part of the path. E.g. this query
base-uri(doc('https://www.w3.org/TR/xml/'))up to 11.7 used to return
https://www.w3.org/TR/xml/xml
which is clearly wrong, and the above mentioned change fixes it to correctly return
https://www.w3.org/TR/xml/
But as you noticed it obviously affects documents retrieved by
fn:collection, and that slippped through our tests. Note that it does not affect documents retrieved by fn:doc, so in your case document-uri(doc("E:\Temp\Identity Transformation88\Input.xml"))should still return the correct file URI.
Apologies for the oversight - I’ll investigate further.
Best regards,
Gunther
Gesendet: Freitag, 21. März 2025 um 15:36
Quoted text · ykhabins at bellsouth.net · 29 lines
Von: ykhabins at bellsouth.net An: basex-talk at mailman.uni-konstanz.de Betreff: [basex-talk] document-uri() and base-uri() functions in BaseX 11.8 Hello, Congrats on the BaseX 11.8 release. Was there a change in BaseX 11.8 to the document-uri() and base-uri() functions behavior? It seems that they are striping out a file name at the end of the fully qualified file path on the file system! Please find below a repro of it. BaseX 11.7 ========== declare variable $base_dir as xs:string := 'e:\Temp\Identity Transformation88\'; for $x at $i in collection($base_dir) let $file := tokenize(document-uri($x), '/')[last()] return (document-uri($x), $file) Emits the following as expected: file:///E:/Temp/Identity%20Transformation88/Input.xml Input.xml file:///E:/Temp/Identity%20Transformation88/Output.xml Output.xml BaseX 11.8 ========== The same XQuery emits the following: file:///E:/Temp/Identity%20Transformation88/ file:///E:/Temp/Identity%20Transformation88/ Regards, Yitzhak Khabinsky
GR
Gunther Rademacher25 Mar 2025 19:19 #
Hi Yitzhak,
this has been now addressed by
https://github.com/BaseXdb/basex/pull/2404
and the fix is contained in the latest snapshot:
https://files.basex.org/releases/latest/
Best regards,
Gunther
Gesendet: Freitag, 21. März 2025 um 20:41
Quoted text · Gunther Rademacher · 48 lines
Von: "Gunther Rademacher via BaseX-Talk" <basex-talk at mailman.uni-konstanz.de> An: ykhabins at bellsouth.net, basex-talk at mailman.uni-konstanz.de Betreff: [basex-talk] Re: document-uri() and base-uri() functions in BaseX 11.8 Hi Yitzhak, thank you for reporting this. This is my fault, this change is causing it: https://github.com/BaseXdb/basex/commit/83acbb74f9419d50a4c03c5793647d449b5577c1 It was made to fix the behavior of duplicating the last part of the path. E.g. this query base-uri(doc('https://www.w3.org/TR/xml/')) up to 11.7 used to return https://www.w3.org/TR/xml/xml which is clearly wrong, and the above mentioned change fixes it to correctly return https://www.w3.org/TR/xml/ But as you noticed it obviously affects documents retrieved by fn:collection, and that slippped through our tests. Note that it does not affect documents retrieved by fn:doc, so in your case document-uri(doc("E:\Temp\Identity Transformation88\Input.xml")) should still return the correct file URI. Apologies for the oversight - I’ll investigate further. Best regards, Gunther Gesendet: Freitag, 21. März 2025 um 15:36 Von: ykhabins at bellsouth.net An: basex-talk at mailman.uni-konstanz.de Betreff: [basex-talk] document-uri() and base-uri() functions in BaseX 11.8 Hello, Congrats on the BaseX 11.8 release. Was there a change in BaseX 11.8 to the document-uri() and base-uri() functions behavior? It seems that they are striping out a file name at the end of the fully qualified file path on the file system! Please find below a repro of it. BaseX 11.7 ========== declare variable $base_dir as xs:string := 'e:\Temp\Identity Transformation88\'; for $x at $i in collection($base_dir) let $file := tokenize(document-uri($x), '/')[last()] return (document-uri($x), $file) Emits the following as expected: file:///E:/Temp/Identity%20Transformation88/Input.xml Input.xml file:///E:/Temp/Identity%20Transformation88/Output.xml Output.xml BaseX 11.8 ========== The same XQuery emits the following: file:///E:/Temp/Identity%20Transformation88/ file:///E:/Temp/Identity%20Transformation88/ Regards, Yitzhak Khabinsky
Y
ykhabins25 Mar 2025 20:20 #
Hi Gunter,
I tested the latest build, BaseX 11.9 beta c55e0e8
Everything is back to normal.
The document-uri() and base-uri() functions working as expected.
Thanks a lot for such quick turn-around with the fix.
Regards,
Yitzhak Khabinsky
Y
ykhabins25 Mar 2025 20:27 #
Hi Gunther,
I tested the latest build, BaseX 11.9 beta c55e0e8
Everything is back to normal.
The document-uri() and base-uri() functions working as expected.
Thanks a lot for such quick turn-around with the fix.
Regards,
Yitzhak Khabinsky
Written for BaseX 11.8. BaseX may have changed since: please check the current documentation.
⚡Generated with XQuery