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