package org.basex.examples.module; import org.basex.query.*; import org.basex.query.value.*; import org.basex.query.value.item.*; import org.basex.query.value.node.*; /** * This is a simple XQuery demo module that demonstrates how XQuery items can be * processed from Java. It is derived from the {@link QueryModule} class. * * If the class is in the classpath of the executed BaseX instance, it can be addressed * as follows: * * <pre> * import module namespace demo = 'http://basex.org/examples/module/module-demo'; * demo:name(demo:create()), * ... * </pre> */ public class ModuleDemo extends QueryModule { /** * Creates a new example node. * @return node */ public ANode create() { FDoc doc = new FDoc("http://www.example.com"); FElem elem = new FElem("root").add("attr", "value"); doc.add(elem); return doc; } /** * Returns the QName of a node. * @param node input node * @return qname */ public QNm name(final ANode node) { return node.qname(); } /** * Creates a new node sequence. * @return resulting value */ public Value sequence() { FElem elem1 = new FElem("root1"); FElem elem2 = new FElem("root2"); ValueBuilder vb = new ValueBuilder(); vb.add(elem1); vb.add(elem2); return vb.value(); } /** * Creates a sequence with parts of the input. * @param value value * @return resulting value */ public Value value(final Value value) { ValueBuilder vb = new ValueBuilder(); for(final Item item : value) { if(item instanceof AStr) { vb.add(item); } else if(item instanceof ANode) { ANode node = (ANode) item; vb.add(node.qname()); } } return vb.value(); } /** * Returns all id values of the specified database nodes. * @param value value * @return resulting value */ public Value dbnodes(final Value value) { ValueBuilder vb = new ValueBuilder(); for(final Item item : value) { if(item instanceof DBNode) { final DBNode node = (DBNode) item; int id = node.data().id(node.pre()); vb.add(Int.get(id)); } } return vb.value(); } }