file:list - a question

Thursday, 24 May 2012 · 2 messages
HR
Hans-Juergen Rennau24 May 2012 10:13 #

Hello,

a question about the function file:list. The documenation says: "The returned paths are relative to the provided path." My understanding is that if the path is a/b/c and this dir contains a file fool.xml, the returned path would be "fool.xml", rather thatn "a/b/c/fool.xml".

What confuses me is that I observe two different behaviours in two different BaseX versions, once with and once without path: version 7.2 with path, version 7.2.2 without path. (The OS also differs in the environments, but I suppose this is irrelevant.)

My question: is the output without path (more generally: with a path relative to the stated dir) the correct one and will be produced in all future versions?

Thank you.

Kind regards, Hans-Juergen

CG
Christian Grün24 May 2012 17:54 #

Dear Hans-Jürgen,

Quoted text · Hans-Juergen Rennau · 4 lines
> a question about the function file:list. The documenation says: "The > returned paths are relative to the provided path." My understanding is that > if the path is a/b/c and this dir contains a file fool.xml, the returned > path would be "fool.xml", rather thatn "a/b/c/fool.xml".

completely true: this is why we have recently aligned the functionality of the file:list() function to match the current EXPath documentation. I have just added a post hoc entry in our Wiki to avoid future surprises [1].

If you want to prefix the relative file paths with the root directory without writing too many LOCs, you can take advantage of the XQuery 3.0 "simple map" and "concatenate" operators:

  let $p := "/root/path"
  return file:list($p) ! ($p || '/' || .)

⚡Generated with XQuery