XQJ Part I - Introduction

August 07, 2007 Data & AI

This is the first post in a series about XQJ (JSR 225). The XQJ initiative aims to provide the standard Java API to access XQuery implementations. Eventually XQJ will be for XQuery what JDBC means for SQL. XQJ is currently in public review, the specification can be downloaded here.

I hope this series will give a good overview of the major interfaces and functionality offered by XQJ, mostly through example code. The majority of the code should be implementation independent, but I have to admit, it will be tested using DataDirect XQuery 3.0, which supports the XQJ Public Draft.

We have today the following essays in the XQJ series (the list is updated as more posts become available),

  • XQJ Part I - Introduction
  • XQJ Part II - Setting up a session
  • XQJ Part III - Executing queries
  • XQJ Part IV - Processing query results
  • XQJ Part V - Serializing query results
  • XQJ Part VI - Manipulating the static context
  • XQJ Part VII - Typing
  • XQJ Part VIII - Binding external variables
  • XQJ Part IX - Creating XDM instances
  • XQJ Part X - XML Pipelines
  • XQJ Part XI - Processing large inputs

Let's start with our first simple XQJ application; the XQuery/XQJ version of "Hello World!".

[cc lang="java"]XQDataSource xqjd = new DDXQDataSource(); XQConnection xqjc = xqjd.getConnection(); XQExpression xqje = xqjc.createExpression(); XQSequence xqjs = xqje.executeQuery("'Hello World!'"); xqjs.writeSequence(System.out, null); xqjc.close(); [/cc]I assume most of it speaks for itself. But don't worry if you have some questions, things will become clear in the upcoming posts.

Some of you might recognize some of the JDBC concepts in the code example above. Indeed, the XQJ expert group decided to make XQJ stylistic consistent with JDBC. Similar to JDBC is has concepts like,

  • datasources
  • connections
  • expressions and prepared expressions

But at the same time, XQuery is not SQL, as such XQJ differs from JDBC,

  • data model
  • typing
  • static context
  • error handling

The next post in this series will introduce data sources and setting up connections.

digg_skin = 'compact';

XQJ

Marc Van Cappellen