/basex-examples/src/main/java/org/basex/examples/xqj/cfoster/Part4.java
Java | 204 lines | 114 code | 50 blank | 40 comment | 6 complexity | dd32570d02de93ae27d0c73387efe087 MD5 | raw file
- package org.basex.examples.xqj.cfoster;
- import java.io.*;
- import java.util.*;
- import javax.xml.datatype.*;
- import javax.xml.namespace.*;
- import javax.xml.parsers.*;
- import javax.xml.xquery.*;
- import org.w3c.dom.*;
- /**
- * XQJ Example, derived from the XQJ Tutorial
- * <a href="http://www.cfoster.net/articles/xqj-tutorial">
- * http://www.cfoster.net/articles/xqj-tutorial</a> from Charles Foster.
- *
- * Part 4: XDM Model within XQJ.
- *
- * @author BaseX Team 2005-16, BSD License
- */
- public final class Part4 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("4: XDM Model within XQJ");
- // Create the connection
- XQConnection conn = connect();
- // Create XQuery items from int values
- info("Create XQuery items from int values");
- XQItem[] items = new XQItem[7];
- // Create an XQItem type, with a type of xs:int and a value of 0
- items[0] = conn.createItemFromInt(0, null);
- XQItemType xsInteger = conn.createAtomicType(XQItemType.XQBASETYPE_INTEGER);
- XQItemType xsString = conn.createAtomicType(XQItemType.XQBASETYPE_STRING);
- XQItemType xsByte = conn.createAtomicType(XQItemType.XQBASETYPE_BYTE);
- XQItemType xsDecimal = conn.createAtomicType(XQItemType.XQBASETYPE_DECIMAL);
- XQItemType xsLong = conn.createAtomicType(XQItemType.XQBASETYPE_LONG);
- // Create an XQItem, with a type of xs:integer and a value of 1
- items[1] = conn.createItemFromInt(1, xsInteger);
- // Create an XQItem, with a type of xs:string and a value of 2
- items[2] = conn.createItemFromInt(2, xsString);
- // Create an XQItem, with a type of xs:byte and a value of 3
- items[3] = conn.createItemFromInt(3, xsByte);
- // Create an XQItem, with a type of xs:decimal and a value of 4
- items[4] = conn.createItemFromInt(4, xsDecimal);
- // Create an XQItem, with a type of xs:long and a value of 5
- items[5] = conn.createItemFromInt(5, xsLong);
- // Try to create an XQItem, with a type of xs:byte and a value of 1000
- // This causes an XQException, because the
- // value 1000 is outside the range of xs:byte (-128 to 127)
- try {
- items[6] = conn.createItemFromInt(1000, xsByte);
- } catch(final XQException ex) {
- System.out.println(ex.getMessage());
- }
- for(XQItem it : items) {
- if(it != null) it.writeItem(System.out, null);
- System.out.print(' ');
- }
- System.out.println();
- // Create items from atomic values
- info("Create items from atomic values");
- XQItemType date = // xs:date
- conn.createAtomicType(XQItemType.XQBASETYPE_DATE);
- XQItemType hex = // xs:hexBinary
- conn.createAtomicType(XQItemType.XQBASETYPE_HEXBINARY);
- XQItem dateValue = conn.createItemFromAtomicValue("2007-01-23", date);
- XQItem binaryData = conn.createItemFromAtomicValue("48656C6C6F", hex);
- dateValue.writeItem(System.out, null);
- System.out.println();
- binaryData.writeItem(System.out, null);
- System.out.println();
- // Create items from Java objects
- info("Create items from atomic values");
- items = new XQItem[3];
- // Create an XQItem with a type of xs:int
- items[0] = conn.createItemFromObject(5, null);
- // Create an XQItem with a type of xs:float
- items[1] = conn.createItemFromObject(123.4f, null);
- // Create an XQItem with a type of xs:hexBinary
- items[2] = conn.createItemFromObject(new byte[] { 1, 2, 3, 4 }, null);
- for(XQItem it : items) {
- if(it != null) System.out.println(it.getAtomicValue());
- }
- // Create and bind XQuery sequences
- info("Create and bind XQuery sequences");
- List<Object> list = new ArrayList<>();
- list.add(conn.createItemFromInt(1, null));
- list.add(conn.createItemFromInt(2, null));
- list.add(conn.createItemFromInt(3, null));
- list.add(4);
- list.add(5);
- list.add(6);
- XQSequence sequence = conn.createSequence(list.iterator());
- XQPreparedExpression xqpe =
- conn.prepareExpression("declare variable $x as xs:int+ external; $x");
- xqpe.bindSequence(new QName("x"), sequence);
- XQResultSequence rs = xqpe.executeQuery();
- while(rs.next())
- System.out.println(rs.getItemAsString(null) + ", " + rs.getItemType());
- // Bind XQResultSequences to XQuery Expressions
- info("Bind XQResultSequences to XQuery Expressions");
- XQExpression expr = conn.createExpression();
- String path = new File("src/main/resources/xml").getAbsolutePath();
- String xqueryString =
- "for $x in doc('" + path + "/books.xml')//book/@isbn " +
- "return xs:string($x)";
- rs = expr.executeQuery(xqueryString);
- // Create a copy of the XQResultSequence that is scrollable and in memory.
- sequence = conn.createSequence(rs);
- expr.bindSequence(new QName("isbnCodes"), sequence);
- xqueryString = "declare variable $isbnCodes external; $isbnCodes";
- rs = expr.executeQuery(xqueryString);
- while(rs.next()) {
- System.out.println(rs.getItemAsString(null));
- }
- // Retrieve XML nodes
- info("Retrieve XML nodes");
- expr = conn.createExpression();
- xqueryString = "doc('" + path + "/books.xml')//book";
- rs = expr.executeQuery(xqueryString);
- while(rs.next()) {
- Node book = rs.getNode(); // org.w3c.dom.Element
- System.out.println(book);
- }
- // Create XML nodes
- info("Create XML nodes");
- // Create {@link Document} instance
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
- Document docObj = builder.newDocument();
- Element elementObj = docObj.createElement("e"); // from org.w3c.dom
- // Create an XQItem with a type of element()
- XQItem item1 = conn.createItemFromObject(elementObj, null);
- // Create an XQItem with a type of document-node()
- XQItem items2 = conn.createItemFromObject(docObj, null);
- System.out.println(item1.getItemType());
- System.out.println(items2.getItemType());
- // Retrieve date values
- info("Retrieve date values");
- xqueryString = "for $x in doc('" + path + "/books.xml')//publish_date " +
- "return xs:date($x)";
- rs = expr.executeQuery(xqueryString);
- while(rs.next()) {
- XMLGregorianCalendar cal = (XMLGregorianCalendar) rs.getObject();
- int day = cal.getDay();
- int month = cal.getMonth();
- int year = cal.getYear();
- System.out.println(year + "/" + month + '/' + day);
- }
- // Closing connection to the Database.
- close(conn);
- }
- }