XQuery API for Java (XQJ) refers to the common
Java API for the
W3C
The World Wide Web Consortium (W3C) is the main international standards organization for the World Wide Web. Founded in 1994 by Tim Berners-Lee, the consortium is made up of member organizations that maintain full-time staff working together in ...
XQuery 1.0 specification.
The XQJ API enables Java programmers to execute
XQuery against an
XML
Extensible Markup Language (XML) is a markup language and file format for storing, transmitting, and reconstructing data. It defines a set of rules for encoding electronic document, documents in a format that is both human-readable and Machine-r ...
data source (e.g. an
XML database
An XML database is a data persistence software system that allows data to be specified, and stored, in XML format. This data can be queried, transformed, exported and returned to a calling system. XML databases are a flavor of document-oriented ...
) while reducing or eliminating
vendor lock in.
The XQJ API provides Java developers with an interface to the XQuery Data Model.
[XQuery 1.0 and XPath 2.0 Data Model (XDM)](_blank)
/ref> Its design is similar to the JDBC API which has a client/server feel and as such lends itself well to Server-based XML Databases and less well to client-side XQuery processors, although the " connection" part is a very minor part of the entire API. Users of the XQJ API can bind Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
values to XQuery expressions, preventing code injection attacks. Also, multiple XQuery expressions can be executed as part of an atomic transaction.
History and implementation
The XQuery API for Java was developed at the Java Community Process as JSR 225. It had some big technology backers such as Oracle
An oracle is a person or thing considered to provide insight, wise counsel or prophetic predictions, most notably including precognition of the future, inspired by deities. If done through occultic means, it is a form of divination.
Descript ...
,[XQJ - XQuery Java API is Completed, Marc Van Cappellen, Zhen Hua Liu, Jim Melton and Maxim Orgiyan](_blank)
/ref>[An Early Look at XQuery API for Java (XQJ) - Andrew Eisenberg, IBM and Jim Melton, Oracle](_blank)
IBM
International Business Machines Corporation (using the trademark IBM), nicknamed Big Blue, is an American Multinational corporation, multinational technology company headquartered in Armonk, New York, and present in over 175 countries. It is ...
, BEA Systems, Software AG, Intel
Intel Corporation is an American multinational corporation and technology company headquartered in Santa Clara, California, and Delaware General Corporation Law, incorporated in Delaware. Intel designs, manufactures, and sells computer compo ...
, Nokia
Nokia Corporation is a Finnish multinational corporation, multinational telecommunications industry, telecommunications, technology company, information technology, and consumer electronics corporation, originally established as a pulp mill in 1 ...
and DataDirect.
Version 1.0 of the XQuery API for Java Specification was released on June 24, 2009, along with JavaDocs, a reference implementation
In the software development process, a reference implementation (or, less frequently, sample implementation or model implementation) is a program that implements all requirements from a corresponding specification. The reference implementation ...
and a TCK (Technology Compatibility Kit) which implementing vendors must conform to.
The XQJ classes are contained in the Java package
A Java package organizes Java classes into namespaces,
providing a unique namespace for each type it contains.
Classes in the same package can access each other's package-private and protected members.
In general, a package can contain the fo ...
javax.xml.xquery
/code>
There is no (visible) activity to create a version of XQJ that provides support for XQuery 3.0 or 3.1, for example by providing Java bindings for additions to the data model such as functions, arrays, or maps.
Functionality
XQJ allows multiple implementations to exist and be used by the same application.
XQJ connections support creating and executing XQuery expressions. Expressions may be updating[ XQuery Update Facility] and may include full text searches. XQJ represents XQuery expressions using one of the following classes:
* XQExpression
/code> – the expression is sent to the XQuery processor every time.
*
/code> – the expression is cached and the execution path is pre-determined allowing it to be executed multiple times in an efficient manner.
XQuery expressions return a result sequence of XDM items which in XQJ are represented through the XQResultSequence
/code> interface. The programmer can use an
/code> to walk over individual XDM items in the result sequence. Each item in the sequence has XDM type information associated with it, such as its node type e.g. , or an XDM atomic type such as , or . XDM type information in XQJ can be retrieved via the
/code> interface.
Atomic XQuery items can be easily cast to Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
primitives via XQItemAccessor
/code> methods such as
/code> and
/code>. Also XQuery items and sequences can be serialized to DOM , SAX , StAX and the generic IO and classes.
Examples
Basic example
The following example illustrates creating a connection to an XML Database
An XML database is a data persistence software system that allows data to be specified, and stored, in XML format. This data can be queried, transformed, exported and returned to a calling system. XML databases are a flavor of document-oriented ...
, submitting an XQuery expression, then processing the results in Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
. Once all of the results have been processed, the connection is closed to free up all resources associated with it.
// Create a new connection to an XML database
XQConnection conn = vendorDataSource.getConnection("myUser", "myPassword");
XQExpression expr = conn.createExpression(); // Create a reusable XQuery Expression object
XQResultSequence result = expr.executeQuery(
"for $n in fn:collection('catalog')//item " +
"return fn:data($n/name)"); // execute an XQuery expression
// Process the result sequence iteratively
while (result.next())
// Free all resources created by the connection
conn.close();
Binding a value to an external variable
The following example illustrates how a Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
value can be bound to an external variable in an XQuery expression.
Assume that the connection already exists:
XQExpression expr = conn.createExpression();
// The XQuery expression to be executed
String es = "declare variable $x as xs:integer external;" +
" for $n in fn:collection('catalog')//item" +
" where $n/price <= $x" +
" return fn:data($n/name)";
// Bind a value (21) to an external variable with the QName x
expr.bindInt(new QName("x"), 21, null);
// Execute the XQuery expression
XQResultSequence result = expr.executeQuery(es);
// Process the result (sequence) iteratively
while (result.next())
Default data type mapping
Mapping between Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
and XQuery data types is largely flexible, however the XQJ 1.0 specification does have default mapping rules mapping data types when they are not specified by the user. These mapping rules bear great similarities to the mapping rules found in JAXB.
The following table illustrates the default mapping rules for when binding Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
values to external variables in XQuery expressions.
Known implementations
Native XML databases
The following is a list of Native XML Databases which are known to have XQuery API for Java implementations.
* MarkLogic
* eXist
eXist-db (or eXist for short) is an open source software project for NoSQL databases built on XML technology. It is classified as both a NoSQL document-oriented database system and a native XML database (and it provides support for XML, JSON, HTM ...
* BaseX
* Sedna
* Oracle
An oracle is a person or thing considered to provide insight, wise counsel or prophetic predictions, most notably including precognition of the future, inspired by deities. If done through occultic means, it is a form of divination.
Descript ...
br>XDB
* Tamino
* TigerLogic
Relational databases
DataDirect provide XQJ adapters for relational database
A relational database (RDB) is a database based on the relational model of data, as proposed by E. F. Codd in 1970.
A Relational Database Management System (RDBMS) is a type of database management system that stores data in a structured for ...
s, by translating XQuery code into SQL on the fly, then converting SQL result sets into a format suitable for XQJ to process further. The following is a couple of known implementations.
* Oracle DB (Not XDB)
* IBM Db2
* Microsoft SQL Server
Microsoft SQL Server is a proprietary relational database management system developed by Microsoft using Structured Query Language (SQL, often pronounced "sequel"). As a database server, it is a software product with the primary function of ...
* Sybase ASE
* Informix
* MySQL
MySQL () is an Open-source software, open-source relational database management system (RDBMS). Its name is a combination of "My", the name of co-founder Michael Widenius's daughter My, and "SQL", the acronym for Structured Query Language. A rel ...
* PostgreSQL
Non-database implementations
The following is a list of non-database XQuery processors which provide an XQuery API for Java interface (typically allowing query against documents parsed from XML in filestore, and held in memory as DOM or similar trees).
* Saxon XSLT and XQuery processor
* Zorba
* MXQuery
* Oracle XQuery Processor
License
The specification is marked as "Copyright © 2003, 2006 - 2009 Oracle. All rights reserved."
The specification contains two separate licenses: a "specification license" and a "reference implementation license".
The specification license allows free copying of the specification provided that copyright notices are retained; it also grants a license to create and distribute an implementation of the
specification provided that it fully implements the entire specification, that it does not modify or extend any interfaces, and that it passes the compatibility tests.
This provision has caused some controversy. Firstly, it is not universally accepted that implementing a published specification is something that requires a license (that is, that copyright law would disallow this in the absence of a license).[ ] Secondly, the license does not meet the criteria to qualify as an open source license (see Open Source Definition), because of the ban on making extensions and modifications. This has led some open source enthusiasts to challenge whether XQJ implementations can ever be considered truly open source.
The license for the reference implementation is a fairly conventional BSD-style open source license.
References
{{reflist
External links
Javadoc for XQJ
XQJ Tutorial
Building Bridges from Java to XQuery, Charles Foster. XML Prague 2012
Prezi Presentation
* ttp://wiki.orbeon.com/forms/doc/developer-guide/processors-xquery-generator#TOC-XQuery-processor-implementations Orbeon Forms using XQJ
Spring Integration XQuery Support
XQS: XQuery for Scala (Sits on top of XQJ)
IntelliJ XQuery Support plugin
Java APIs
Java specification requests
XML data access
Java API for XML
Database APIs