用于XQuery查询的Java API

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

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

  相比之下,XQDynamicContext接口让应用检索关于动态上下文的信息,并且改变这些信息。尤其,它提供方法绑定XQuery变量到各种数值,这些变量是动态上下文的一部分。XQPreparedExpression和XQExpression接口都扩展XQDynamicContext。上面的例子可以对XQPreparedExpression调用bindString()方法,因为bindString()是基类的XQDynamicContext接口中定义的方法。

  和JDBC不同的是由于绑定到XQuery变量的值不一定是简单的标量值,XQDynamicContext中的bindXXX()方法可以有一种延迟绑定模式(deferred binding mode)。在延迟绑定模式中,这个绑定的数值可能直到XQuery处理器真正的访问了该变量才会被使用,这让XQJ潜在的使用基于流水线的惰性数值赋值模型。

  XQuery数据模型的支持

  再次,XQuery的结果是XQuery数据模型的一个实例,它由XQuery元素的序列组成。每个元素可以是原子数值或者XML节点(文档, 元素, 属性, 注释, 处理指令, 或者文本)。XQSequence接口建模XQuery数据模型。它包含零个或者多个XQItem接口对象。XQItem接口代表了XQuery 数据模型中的元素。程序员通过调用XQSequence.getItem()或XQConnection.createItem()方法获得XQItem 。

  虽然XQItem和XQSequence代表了独立于XQuery结果的XQuery的元素和序列,XQResultItem和XQResultSequence(分别扩展了XQItem和XQSequence)代表了从XQuery执行结果中得到的XQuery元素和序列。

  如果XQItem是原子数值,你可以使用某种getXXX()方法将它转换到对应的Java数据类型,这些方法包括getInt()、getString()等等。假如XQItem是XML节点,你可以通过已有的XML节点操作接口访问它,这些接口包括DOM、SAX或者StAX。XQItem和XQSequence都扩展了XQItemAccessor接口,该接口定义了各种元素访问方法。比如,getNode()方法返回了DOM节点。writeItemToSAX()方法通过将序列顺序化为SAX事件来产生SAX事件。getItemAsStream()方法将序列顺序化为XMLStreamReader事件流。进一步,XQJ定义了一套进行Java数据类型和XQuery数据类型之间的标准映射,来辅助将标准的Java类型绑定到XQuery变量。

责编:豆豆技术应用

正在加载评论...