Dear Gunther,

Thank you for the test code. I gradually changed it into my code that did not work, and found the problem:

        private static Expr[] parameterVars(FuncType funcType,
   QueryContext queryContext)
        {
          Expr[] paramVars = new Expr[funcType.argTypes.length];
          for (int i = 0; i < paramVars.length; ++i) {
            paramVars[i] = new VarRef(null, new VarScope().addNew(new
   QNm("arg"+i), funcType.argTypes[i], queryContext, null));
          }
          return paramVars;
        }

I was trying to be clever, and derive the parameter VarRefs from the function type. But this cannot get to the original parameter names, and I invented new names; new QNm("arg"+i). But these names are different from the original names, and somehow this means that in some cases there will be no parameters on the stack.

What is strange / interesting, is that with the above code, the following works:

   let $ner-parse := ner:named-entity-recognition($grammar, map{})
   return $input => $ner-parse()

But using a declared variable does not work:

   declare variable $ner-parse as function(item()) as node()* :=
   ner:named-entity-recognition($grammar,map{});
   $input => $ner-parse()

Now I make sure I use the same names for the generated VarRefs, and my function is always called with the parameter values on the stack.

Thanks for your help!

Best regards,
Nico

Reply via email to