package org.basex.examples.xqj.tutorial;
import java.io.*;
import javax.xml.namespace.*;
import javax.xml.transform.stream.*;
import javax.xml.xquery.*;
/**
* XQJ Examples, derived from an
* <a href="https://www.progress.com/products/data-integration-suite/data-integration-suite-developer-center/data-integration-suite-tutorials/learning-xquery/introduction-to-the-xquery-api-for-java-xqj-">
* XQJ online tutorial</a>.
*
* Part 11: Processing Large Inputs.
*
* @author BaseX Team 2005-17, BSD License
*/
public final class Part11 extends Main {
/**
* Main method of the example class.
* @param args (ignored) command-line arguments
* @throws Exception exception
*/
public static void main(final String... args) throws Exception {
init("11: Processing Large Inputs");
// Create a connection
XQConnection xqc = connect();
// Pipeline large inputs
info("Pipeline large inputs");
XQStaticContext xqsc = xqc.getStaticContext();
xqc.setStaticContext(xqsc);
String path = new File("src/main/resources/xml").getAbsolutePath();
XQExpression xqe = xqc.createExpression();
XQSequence xqs = xqe.executeQuery(
"doc('" + path + "/orders.xml')//order");
XQExpression xqe2 = xqc.createExpression();
xqe2.bindSequence(new QName("orders"), xqs);
XQSequence xqs2 = xqe2.executeQuery(
"declare variable $orders as element() external; " +
"for $order in $orders where $order/@status = 'closed' " +
"return <closed_order id = '{$order/@id}'>{ " +
" $order/* }</closed_order>");
xqs2.writeSequence(System.out, null);
xqe2.close();
xqe.close();
System.out.println();
// Stream large inputs
info("Stream large inputs");
xqe = xqc.createExpression();
xqe.bindDocument(XQConstants.CONTEXT_ITEM,
new StreamSource(path + "/orders.xml"), null);
xqs = xqe.executeQuery("/orders/order");
xqs.writeSequence(System.out, null);
System.out.println();
// Close the connection
close(xqc);
}
}