package examples;
import ch.ethz.mxquery.contextConfig.CompilerOptions;
import ch.ethz.mxquery.contextConfig.Context;
import ch.ethz.mxquery.contextConfig.XQDynamicContext;
import ch.ethz.mxquery.datamodel.MXQueryDateTime;
import ch.ethz.mxquery.datamodel.QName;
import ch.ethz.mxquery.exceptions.MXQueryException;
import ch.ethz.mxquery.exceptions.QueryLocation;
import ch.ethz.mxquery.model.XDMIterator;
import ch.ethz.mxquery.query.PreparedStatement;
import ch.ethz.mxquery.query.XQCompiler;
import ch.ethz.mxquery.query.impl.CompilerImpl;
import ch.ethz.mxquery.util.StringReader;
import ch.ethz.mxquery.xdmio.XDMAtomicItemFactory;
import ch.ethz.mxquery.xdmio.XDMInputFactory;
import ch.ethz.mxquery.xdmio.XDMSerializer;
// set boundary space policy
//set external variables
//set context item
// set current time
public class ContextExample {
public static void main(String[] arg) throws Exception {
String query = "declare variable $ext external;"
+ "\n\n\t\n\t\t{$ext}\n\t"
+ "\n\t\n\t\t{.}\n\t\n\t\n";
Context ctx = new Context();
CompilerOptions co = new CompilerOptions();
XQCompiler comp = new CompilerImpl();
PreparedStatement statement;
XDMSerializer ser = new XDMSerializer();
// Static context setting
// Keep boundary space (default is no)
ctx.setBoundarySpaceHandling(true);
try {
statement = comp.compile(ctx, query, co);
// Default store
XDMIterator it;
String xml = "characters";
String context = "context123";
XDMIterator inp = XDMInputFactory.createXMLInput(ctx,
new StringReader(xml), false, Context.NO_VALIDATION,
QueryLocation.OUTSIDE_QUERY_LOC);
XDMIterator cItem = XDMAtomicItemFactory.createString(context);
statement.addExternalResource(new QName("ext"), inp);
statement.setContextItem(cItem);
XQDynamicContext dynCtx = statement.getContext();
it = statement.evaluate();
dynCtx.setCurrentTime(new MXQueryDateTime(
"2000-01-01T00:00:00-00:00"));
System.out.println(ser.eventsToXML(it));
statement.close();
ctx.getStores().freeRessources();
} catch (MXQueryException err) {
MXQueryException.printErrorPosition(query, err.getLocation());
System.err.println("Error:");
throw err;
}
}
}