the code in your project seems to have dependencies that cannot be resolved. This is from the log of mvn install:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.539 s
[INFO] Finished at: 2024-11-15T18:43:46+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project basex-ner-xar: Could not resolve dependencies for project com.rakensi:basex-ner-xar:jar:1.0.2
[ERROR] dependency: org.greenmercury:SMAX:jar:1.0.4 (compile)
[ERROR] Could not find artifact org.greenmercury:SMAX:jar:1.0.4 in central (https://repo.maven.apache.org/maven2)
[ERROR] dependency: com.rakensi:XML-NER:jar:1.0.5 (compile)
[ERROR] Could not find artifact com.rakensi:XML-NER:jar:1.0.5 in central (https://repo.maven.apache.org/maven2)
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
package test;
import static org.basex.query.value.type.SeqType.*;
import org.basex.query.*;
import org.basex.query.expr.*;
import org.basex.query.util.list.*;
import org.basex.query.value.*;
import org.basex.query.value.item.*;
import org.basex.query.value.type.*;
import org.basex.query.var.*;
import org.basex.util.hash.*;
public class Test extends QueryModule
{
public FuncItem makeFunction() throws QueryException {
final Var var = new VarScope().addNew(new QNm("input"), STRING_O, queryContext, null);
final Var[] params = { var };
final Expr[] exprs = new Expr[] { new VarRef(null, var) };
final FuncType funcType = FuncType.get(SeqType.STRING_O, STRING_O);
final TestFunction tf = new TestFunction(exprs);
return new FuncItem(null, tf, params, AnnList.EMPTY, funcType, params.length, null);
}
private static final class TestFunction extends Arr {
protected TestFunction(final Expr[] args) {
super(null, SeqType.STRING_O, args);
}
@Override
public Value value(final QueryContext qc) throws QueryException {
return arg(0).value(qc);
}
@Override
public Expr copy(final CompileContext cc, final IntObjMap<Var> vm) {
return copyType(new TestFunction(copyAll(cc, vm, args())));
}
@Override
public void toString(final QueryString qs) {
qs.token("test-function").params(exprs);
}
}
}
Gunther
I am trying to make a Java module, which is included in BaseX as a jar-file in `lib/custom`.
The module contains one XQuery function:
named-entity-recognition($grammar as item(), $options as map(*)?) as function(item()) as node()*This is a higher-order XQuery function that returns another (anonymous) XQuery function. The returned function is a parser (for named entities), similar to what the `invisible-xml` function returns.
The relevant part (I think) is the following Java function:
@Requires(Permission.NONE)
@Deterministic
@ContextDependent
public FuncItem namedEntityRecognition(Object grammar, Map<String, String> options) throws QueryException {
// Types of the arguments of the generated function.
final Var[] generatedFunctionParameters = { new VarScope().addNew(new QNm("input"), SeqType.ITEM_O, queryContext, null) };
// Type of the generated function.
final FuncType generatedFunctionType = FuncType.get(SeqType.NODE_ZM, generatedFunctionParameters[0].declType);
// The generated function.
NamedEntityRecognitionFunction nerf = new NamedEntityRecognitionFunction(grammar, options, generatedFunctionType, queryContext);
// Return a function item.
return new FuncItem(null, nerf, generatedFunctionParameters, AnnList.EMPTY, generatedFunctionType, generatedFunctionParameters.length, null);
}
Value inputValue = arg(0).value(qc); // JavaThe namedEntityRecognition function works fine when I use it like this (XQuery):
let $ner-parse := ner:named-entity-recognition($grammar, map{})However, is does not work when the parsing function is put into a declared variable, like
return $input => $ner-parse()
declare variable $ner-parse as function(item()) as node()* := ner:named-entity-recognition($grammar,map{});In this case, the parameter value obtained by arg(0).value(qc) is null. When I debug this _expression_, it turns out that the parameter ($input) is not on the stack. The stack (which is qc.stack) is all nulls, and the begin and end indexes of the stack are both 0, meaning that the stack is empty..
$input => $ner-parse()
This probably means that the query context of a local (let) variable is different from the query context of a global (declare) variable.
Maybe I need to indicate that the namedEntityRecognition function returns a higher order function (but how)?
The code for this can be found at https://github.com/nverwer/basex-ner-xar.
If anyone can shed some light on this, that would be very much appreciated.
Best regards,
Nico Verwer