Could you please provide me with a little, seld-contained example?

Thanks in advance,
Christian


Am 23.05.2017 14:14 schrieb "Johannes Echterhoff" <echterhoff@interactive-instruments.de>:
Hi Christian,
Thank you. This is very useful.
One issue, though: in my test, it looks like the ancestors of the element that is processed by the query are not available/accessible. What am I missing?
Best regards,
Johannes


-----Ursprüngliche Nachricht-----
Von: Christian Grün [mailto:christian.gruen@gmail.com]
Gesendet: Dienstag, 23. Mai 2017 12:43
An: Johannes Echterhoff <echterhoff@interactive-instruments.de>
Cc: basex-talk@mailman.uni-konstanz.de
Betreff: Re: [basex-talk] Evaluating XPath within custom QueryModule

Hi Johannes,

Welcome to the list.

> However, I wonder if it is possible to evaluate the expression also
> within the query module itself, i.e. when method “parse” is called. Is
> there a way to do so?

Absolutely. You find some examples in [1].

If you your class extends the QueryModule class – which is always recommendable – a function could look as follows:

  import org.basex.core.Context;
  import org.basex.query.QueryModule;
  import org.basex.query.QueryProcessor;
  import org.basex.query.value.Value;

  public class Module extends QueryModule {
    public Value elementName(Value elem) throws Exception {
      // Your query
      String query =
        "declare variable $elem external;" +
        "name($elem), (: element bound to variable :)" +
        "name(.) (: element bound to context :)";

      Context ctx = queryContext.context;
      QueryProcessor qp = new QueryProcessor(query, ctx);
      // Bind to context:
      qp.bind("elem", elem);
      qp.context(elem);
      Value value = qp.value();

      return value;
    }
  }

Hope this helps,
Christian

[1] https://github.com/BaseXdb/basex/blob/master/basex-examples/src/main/java/org/basex/examples/local/RunQueries.java