package org.basex.examples.xqj.tutorial;
import javax.xml.namespace.*;
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 7: XQuery Type System.
*
* @author BaseX Team 2005-17, BSD License
*/
public final class Part7 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("7: XQuery Type System");
// Create a connection
XQConnection xqc = connect();
// Check sequence types
info("Check sequence types");
XQExpression xqe = xqc.createExpression();
XQSequence xqs = xqe.executeQuery("1, 'hello', <xml/>");
while(xqs.next()) {
XQItemType xqit = xqs.getItemType();
if(xqit.getItemKind() == XQItemType.XQITEMKIND_ATOMIC) {
// Check atomic type
switch(xqit.getBaseType()) {
// Check for string
case XQItemType.XQBASETYPE_INTEGER:
long l = xqs.getLong();
System.out.println("Integer: " + l);
break;
// Check for integer
case XQItemType.XQBASETYPE_STRING:
String s = (String) xqs.getObject();
System.out.println("String: " + s);
break;
// Any other type
default:
String a = xqs.getAtomicValue();
System.out.println("Atomic Value: " + a);
break;
}
} else {
// Node type
System.out.println("Node: " + xqs.getNode());
}
}
// Retrieve static result type
info("Retrieve static result type");
XQPreparedExpression xqp = xqc.prepareExpression("1 + 2");
XQSequenceType xqst = xqp.getStaticResultType();
System.out.println("Type: " + xqst);
// Retrieve type of external variables
info("Retrieve type of external variables");
xqp = xqc.prepareExpression(
"declare variable $i as xs:integer external; $i+1");
QName[] variables = xqp.getAllExternalVariables();
for(final QName v : variables) {
xqst = xqp.getStaticVariableType(v);
System.out.println("Variable $" + v + ": " + xqst);
}
// Close the connection
close(xqc);
}
}