用于XQuery查询的Java API

http://tech.ddvip.com   2007年07月03日    社区交流

内容摘要:这篇文章对XQJ(XQuery Java API)进行了简要的介绍,并且讨论了一些为XQuery中的关键概念进行建模的接口。如同JDBC在关系数据库中的成功,我们相信XQJ会成为对XML数据源的XQuery引擎进行交互中最广泛使用的Java API。

  查询是用于查询XML的声明性语言,类似于用于查询关系数据的SQL。大部分Java程序员熟悉JDBC,它提供了标准的Java API来和各种关系数据库的SQL引擎进行交互。XQJ具有相同的目的:它向Java程序员提供了标准的Java API用于和各种XML数据源的XQuery引擎进行交互。

  XQJ也被称为JSR 255,因为它是由Java Community Process设计的。这个JSR 255规范定义了接口和Class集合,用于Java应用能够向一个XQuery引擎对一个或者多个XML数据源提交XQuery查询和使用查询结果。这篇文章通过给出基本的用况(use-case)来提供对XQJ的介绍,并且讨论了作为XQuery基础的XQJ中的几个关键的接口。此外,这篇文章强调了XQL和JDBC之间的不同之处。

  对那些熟悉JDBC的程序员而言比较幸运的是,XQJ遵守了几个熟悉的模式。执行一个查询的典型编码顺序——获得连接(connection),准备XQuery表达式,在已经准备好的XQuery表达式中的值和变量绑定起来,执行表达式,使用XQuery结果并且清理资源——是和JDBC的次序基本一致。然而,XQuery中的几个关键概念要求创建XQJ中的专用接口,比如static context、dynamic context、XQuery data model和XQuery Sequence Type。进一步,在XQuery数据模型中一个主要元素是XML node。XQJ需要和现有的XML节点操作API如DOM、SAX和StAX等相结合。XQuery允许节点通过XMLSchema定义类型。XQJ通过XQuery Sequence Type接口定义和XMLSchema的关系。

  一个简单的例子

  下面是简单的、使用XQJ来执行查询的代码示例,演示了典型的使用情况。注意为了简单起见,错误处理已经被忽略了。

  // obtain an XQDataSource instance
  XQDataSource xqds = (XQDataSource)
   Class.forName("com.jsr225.xqj").newInstance();
 
  // obtain a connection
  XQConnection con = xqds.getConnection("usr", "passwd");
 
  // prepare an XQuery Expression
  String xqry = "for $i in fn:collection('dept') " +
   "where $i/deptname = %dname return count($i/employees)";
  XQPreparedExpression expr = con,preparedExpression(xqry);
 
  // bind variable with value
  expr.bindString(new Qname("dname"), "engineering");
 
  // execute the XQuery Expression
  XQResultSequence rs = expr.executeQuery();
 
  // Consume results
  while (rs.next())
  {
   System.out.printLn(rs.getInt());
  }
 
  // clean up resources
  rs.close();
  con.close();

责编:豆豆技术应用

正在加载评论...