The error is in Basex 9.0.1 but not in 8.6.7. It seems to be caused by the presence of the function within the lambda function.

Universität Leipzig
Institute of Computer Science, NLP
Augustusplatz 10
04109 Leipzig
Deutschland
E-mail: celano@informatik.uni-leipzig.de
E-mail: giuseppegacelano@gmail.com
Web site 1: http://www.dh.uni-leipzig.de/wo/team/
Web site 2: https://sites.google.com/site/giuseppegacelano/

On May 11, 2018, at 12:52 PM, Sebastian Zimmer <sebastian.zimmer@uni-koeln.de> wrote:

Sorry to bother you again, but I think there is still something wrong with my code and I can't figure it out. This time I checked it consistently on BaseX 9.0.1 (Windows and Linux, console and web server), results are always the same:

xquery version "3.1";
declare namespace array = "http://www.w3.org/2005/xpath-functions/array";

let $array1 := []
let $array2 := array:for-each([], function($i) { lower-case($i) })
let $array3 := array:for-each([], function($i) { $i + 1 })

return (
  empty($array1!?*),
  empty($array2!?*),
  empty($array3!?*),
  empty(
    for $i in 1 to array:size($array1)
    return $array1($i)
  ),
  empty(
    for $i in 1 to array:size($array2)
    return $array2($i)
  ),
  empty(
    for $i in 1 to array:size($array3)
    return $array3($i)
  )
)

The results I get are:
true
false
true
true
true
true

Why isn't the second result "true" too?

Best regards,
Sebastian


Am 11.05.2018 um 11:12 schrieb Sebastian Zimmer:

Hi again,

the problem is gone now after a reboot. It seems that the web server was running on another version while the console was running with 9.0.1

Sorry for the inconvenience.

Best,
Sebastian

Am 11.05.2018 um 11:04 schrieb Sebastian Zimmer:

Hi Giuseppe,

thanks for checking. I double-checked again. The problem is even weirder now:

When using the console, I too get 2x true:

$ ./bin/basex "./webapp/array_test.xql"
true
true

When using the web server, I still get this:

$ curl localhost:8994/rest?run=array_test.xql
false
true

At first I thought there was some cache at work, preventing the update, but it doesn't seem to be the case. I can edit the XQL und both outputs change accordingly, but the first boolean is still different.

Best regards,
Sebastian


Am 11.05.2018 um 08:28 schrieb Giuseppe Celano:
Hi Sebastian,

In my Basex 9.0.1 and 8.6.7 you get two "true". 

Best,
Giuseppe

Universität Leipzig
Institute of Computer Science, NLP
Augustusplatz 10
04109 Leipzig
Deutschland
E-mail: celano@informatik.uni-leipzig.de
E-mail: giuseppegacelano@gmail.com
Web site 1: http://www.dh.uni-leipzig.de/wo/team/
Web site 2: https://sites.google.com/site/giuseppegacelano/

On May 11, 2018, at 1:50 AM, Sebastian Zimmer <sebastian.zimmer@uni-koeln.de> wrote:

Hi,

I have this script where I use the lookup operator to perform a unary lookup:

xquery version "3.1";
declare namespace array = "http://www.w3.org/2005/xpath-functions/array";

let $array := []

return (
  empty($array!?*),   (: returns false :)
  empty(
    for $i in 1 to array:size($array)
    return $array($i)
  )                  (: returns true  :)
)

I'm curious that the first expression returns false even though it should be equivalent to the second expression, if I read the XQuery spec [1] right:

If the context item is an array:
If the KeySpecifier is a wildcard ("*"), the UnaryLookup operator is equivalent to the following expression:
for $k in 1 to array:size(.)
return .($k)

But maybe I'm missing something. I'd be glad if you could help.

Best regards,
Sebastian Zimmer

[1] https://www.w3.org/TR/2017/REC-xquery-31-20170321/#id-unary-lookup