如何在Java中使用XQJbt宅解析码使用方法XQuery

IBM WebSphere 7添加XPath 2.0,XSLT2.0和XQuery 1.0支持
发表于 15:46|
作者刘文君
摘要:IBM的WebSphere功能包是可选择的安装产品扩展,为应用服务器提供了新功能。IBM最近发布的XML功能包为应用开发者提供了对最新生效的的W3C XML标准集的支持
IBM的WebSphere功能包是可选择的安装产品扩展,为应用服务器提供了新功能。IBM最近发布的XML功能包为应用开发者提供了对最新生效的的W3C XML标准集的支持:
* XQuery 1.0: 新引入的查询和函数式编程语言,为查询XML数据集合而设计。它使用XPath表达式语法来访问一个XML文档的特定部分,并且有&FOR,LET,WHERE,ORDER BY和RETURN&表达式作为补充。通常缩写为&FLWOR&的这些表达式可以被用于以类似SQL的方式执行跨多个XML流的连接。
* XPath2.0: 一个用于XML文档的表达式语言。一个XPath表达式的结果通常是从输入文档选择出的节点或者是原子值。XPath 2.0现在是XQuery 1.0的一个子集。XPath 1.0到XPath 2.0最引人注意的一个改变是引入了更加丰富的类型系统:每个值现在都是一个序列,一个单一的值将被视为长度为1的序列。XPath 2.0支持&模式认知&,意味着树的元素有类型注解,可以用于XPath导航。一个解析器必须为内建的类型比如字符串,数字,日期等等提供模式认知。作为可选项,也有可能支持用户自定义类型,这将极大的简化所要求的表达式。例如,一个因特网邮件服务公司可能有一个XML文档,内容是与客户订单挂钩的记帐地址与投递地址。如果两个地址域都有一个公共的AddressType,表达式//element(*, tns:AddressType)/postalCode将会返回两个地址的邮编。XPath同时还提供强大的功能扩展集和操作符。新的功能包括用于模式匹配的正则表达式语法,新的日期函数比如当前日期,还有新的算术函数比如floor,ceiling和round。新的操作符包括intersect和except。
* XSLT 2.0:一种用于将XML转换为一种新XML格式,或其它的表示格式,比如HTML,XHTML或SVG的编程语言。如XQuery 1.0一样,XSLT 2.0也使用XPath 2.0作为路径解析语言。XSLT 2.0加入了一系列的功能,包括grouping&&从一个单一的输入文档输出多个结果的能务,以及在XSLT中定义可以被XPath调用的函数的能力。因此一个XPath 2.0解析器或者XSLT解析器可能会是&模式认知&的。这样将会带来许多优势,比如在XSLT转换前可以检验输入树,并且可以检验输出树以合格证 XSLT转换产生正确的结果。你可以可以为变量指明数据类型,输入参数,来自函数的返回值,用户自定义函数以及模板。XSLT继续成为转换XML数据的主流选择,而XQuery有望成为查询XML文档的标准。由于XQuery与XSLT 2.0两者都使用XPath 2.0作为路径解析语言,XQuery对于XPath 2.0的扩展对于XSLT开发者来说就无关了。
为了寻求该功能包的更多细节,InfoQ采访了它的首席架构师,Andrew Spyker:
InfoQ:XML显而已见已成为在企业计算中广泛应用的格式。你能给我们提供一些例子,哪一类型的应用中这些标准的新功能有可能会引起特别注意?
XML已在企业计算中非常流行的前提下,要讨论能用到这一功能包的每一个场景将非常困难。因此,下面要提到的并不是所有&&而只是作个说明。
查询和表示来自于XML源数据的应用。例如,博客feed,评论以及与feed相关的分析。你可以考虑这样一个应用,它挖掘你所有的博客,查找有问题的评论内容,再将这些信息表示为web表格的形式,允许你调查其趋势并将特定的评论者标记为不受欢迎的。不断发展下去,你会选择将这一列表存储在数据库里,这样就可以先行一步判定不受欢迎的评论。由于这一场景里所有的输入源都是XML和XHTML(XSLT 2.0里新支持的序列化格式)可以方便地被用于web展示,使用基于XML的编程模型再自然不过。在功能包里有一个示例应用就演示了这一点。
使用业界标准模式的应用。几乎每个垂直行业都要与业界标准模式打交道,并且许多企业都扩展了这些模式来定制自己的业务。在过去,使用XPath 1.0(并且依赖于XSLT 1.0),XML运行时不知道模式知识。这意味着如果你查找所有PurchaseOrder类型的数据元素,你必须在你的搜索中硬编码每一个可能吻合的名字。即使最好的情况下这也会带来代码维护的困难,而最坏的情况当企业扩展现有类型而引入新类型时,脆弱的代码就会失效。而在XPath 2.0 (以及相关的XSLT 2.0和 XQurey 1.0中),你可以在查询中根据类型搜索。
使用XPath 1.0和XSLT 1.0的应用。这似乎是显而易见的,但也值得单独提出来。XPath 2.0和XSLT 2.0考虑了业界使用7年以来积累的经验。新功能提供了许多新的功能性场景(一些例子是:多种语言的比对支持以及XSLT 2.0的多输出),这些之前是不可能做到的。 同时,这些能力还加入了对模式的支持,而这些模式用XSLT 1.0表达则过于复杂(例如,grouping的支持),这些支持将会使得代码减少,易于维护并会比以前执行得更好&&因为现在是运行时提供支持而不是在运行时之上编码。
跨多个数据源查询数据的应用。尽管一些原生支持XML的数据库有时也支持XQuery(DB2 pureXML即是一例),但在中间件级别支持XQuery可以允许在这些XML数据库与数据库之外的XML存储之间进行连接。一个例子是一个批处理文件,处理一个XML数据库的数据,并通过调用Web 2.0 API来丰富数据,然后将其存储到另一个数据库。该XML功能包通过一个可以在服务器JVM环境之外的标准Java SE应用瘦客户端来支持这一场景,只要它以支持应用服务器功能的方式被使用。
如我之前所说,有很多可能的应用场景。所有可能的应用只局限于企业所存储的XML数据或文档&&而这是非常巨大的。
InfoQ: XSLT 2和XQuery 1这样的语言处理XML相比Java DOM模型在多核或者云计算的环境里有什么优势呢?
使用如XML功能包所支持的声明式(vs.命令式)的以XML为中心(vs.以语言为中心)的语言主要有两大方面的优势。
首先,声明式编程询问用户他们想要做什么事。这与命令式编程是相反的(例如,操作DOM或JAXB API的Java代码),询问的是用户想要如何实现他们想做的事。Declarative programming leads to smaller, 声明式编程带来的是可适应快速变更的更精简,更易维护的代码。它同时还支持用户向XML运行时表达他们的兴趣,或者是他们想要如何查询或转换数据,这种方式运行时可以进行优化,而如果用户直接告诉运行时具体怎样执行则无法做到优化。这一区别在多核及云计算的环境下非常重要,你可以想像得到,优化不仅仅能认出可以单核CPU下执行更出色的模式,在多CPU或跨虚拟环境的条件下也能出色的执行。还有,因为XSLT和XQuery是函数式并且无副作用,你可以完全安全地执行这样的优化&&而在命令式语言里使用典型的编程API是无法做到这一点的。另外,我个人相信,从长远来看,高级的声明式语言会更加迎合云计算,因为它们比那些假设特定运行时环境的低级语言可移植性更强。
第二点,以XML为中心(vs. Java或C#等其它语言),就是将XML类型系统作为核心类型系统。将XML类型系统映射为原生语言的类型系统有两方面的劣势。首先,有一个XML保真性的问题。将XML映射为对象表示十分困难,稍不注意就有可能造成信息的丢失。像JAXB2.0这样的API处理这类问题非常棒,但到最后映射成一个完美的无损的XML表示,对比纯XML模型并不见得有什么好。其次,因为我们转换了类型系统或转换成DOM模型,我们加入了显著的性能开销。本质上这意味着数据拷贝,这在中间件是十分昂贵的操作应当予以避免。而以其原生的表示使用XML数据,我们可以保证没有数据丢失而且性能最优。鉴于XML作为业务与企业间的数据交换格式如此流行,拥有这两个益处是十分重要的。
我应该说明我们理解人们不会将现有的应用全盘转变成XML编程模型。因此,我们允许以一种简单的方式来将现有的Java数据和逻辑添加到XML运行时的执行。这一扩展是通过同一个一致的API来完成的,而不管使用的是哪一种XML语言。这一一致性是重要的,它统一了跨三种语言的编程体验,并且支持数据可以从XQuery 1.0到XSLT 2.0有效的流水。我们同时还设计了API,以保证这一技术简单高效的多线程服务器应用。 之前的XML API是为客户端环境而设计的,相对于支持高效多线程编码而言更倾向于单一调用的简洁性。我们的API为所有的共享对象加入了线程安全,使得为服务器运用编程更加自然高效。
InfoQ:就操作XML而言,W3C标准与微软的LINQ相较而言如何?
一个关键的区别在于XML功能包实现的是公开制定的W3C XML处理标准。有着这样的一个标准作为根基,组织和开发者就可以更好的跨该标准的多种具体实现而利用这种一致的XML编程模型技术和工具。
InfoQ: 该功能包相对于Michael Kay的Saxon实现有什么优势?
先让我首先解释一下我观察到的所有来自业界的反馈&&Saxon是非常优秀的XPath 2.0,XSLT 2.0以及XQuery 1.0实现。同时,Michael Kay与来自IBM和其它公司的贡献者一道,在驱动XML的W3C标准化方面作了许多工作。
Saxon及XML功能包都是实现的相同的标准集。所以从编程模型的角度来看这里保持了一种一致性。从运维的角度,WebSphere客户可以得到一个背后有IBM支持的XML实现,他们现有的WebSphere Application Server V7权利范围内的测试及支持也将得到保证。就像我们上面所谈到的一样,我们可以看到许多客户想要在WebSphere之上实现基于XML的解决方案的应用场景。意识到这一点,我们想要以这样一种形式来提供支持这些标准的新功能,那就是我们的客户不管是现在还是将来都可以信赖它们。
InfoQ:你觉得什么时候我们可以看到这些技术能够融入Java平台而得以标准化?到那时你的实现将会怎样呢?
目前,Java通过JAXP支持XPath 1.0和XSLT 1.0,但不支持XPath 2.0和XSLT 2.0。同时,还有一个支持XQuery 1.0的JSR叫作XQJ。今后我们应当考虑在Java中实现普遍化的XQuery。个人而言,我比较担忧面向连接的XQJ API以及用户要多大的需要去学习多种API(JAXP和XQJ)来运用XML标准。 Java平台正逐渐变得更加应变,这也是业界对它的要求,因此基于业界的支持和用户的需求我期待着这些标准能够被吸纳进该平台。IBM将会继续驱动XML 的Java标准化过程,为用户创造价值。 如果Java平台的进展到可以处理XPath 2.0,XSLT 2.0以及XQuery 1.0,我们的实现仍可以保留。目前IBM的JVM也是用的自己的XPath 1.0和XSLT 1.0实现。IBM有这样的历史,在支持Java标准的同时,JVM的XML部分还提供高效的,可靠的,功能性的附加值。这些改进将会持续为整个 WebSphere系列产品在XML处理,web服务和SOA等方面提供有力支持。
推荐阅读相关主题:
网友评论有(0)
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章上传用户:fforhyozrt资料价格:5财富值&&『』文档下载 :『』&&『』所属分类:机构:安徽理工大学计算机科学与工程学院分类号:TP312.1文献出处:关 键 词 :&&&权力声明:若本站收录的文献无意侵犯了您的著作版权,请点击。摘要:主要介绍了XML查询语言及其JAVA程序应用接口XQ(JXQuery API for Java)的应用。通过对XQJ体系结构的剖析,显示XQJ在功能和用法上与JDBC有很多相似之处;并进一步揭示了XQJ对XQuery查询的支持,主要体现在XQJ对XQuery上下文的支持和XQJ对XQuery数据模型的支持。最后通过一个实例展示了如何在Java程序中使用XQJ的相关接口或类来解析XQuery语句。Abstract:This paper mainly introduces the application of XML query language and JAVA program application interface XQ (API for Java JXQuery). Through the analysis to the architecture of the XQJ, showing XQJ on the function and usage of JDBC h and further reveals the XQJ support for XQuery, which is mainly reflected in XQJ to XQuery context support and XQJ to XQuery data model support. Finally, an example is presented to show how to use the XQJ related interface or class to parse the XQuery statement in the Java program.正文快照:引言随着近年来Web Service的蓬勃发展,XML越来越多地活跃在数据交换和存储领域。面对XML数据量的指数级的增长,必然要求更有效的数据管理能力和更快、更精确的查询。如何从XML数据源中准确有效地查询所需信息,也就变得越来越重要。XML查询语言XQuery的出现正是基于这样的需分享到:相关文献|XQJ解析
用于XQuery查询的Java
API - 无线通信
易迪拓培训,专注于微波、射频、天线设计工程师的培养
XQJ解析
用于XQuery查询的Java
API
XQJ解析
用于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();
  在上面的例子中,XQDataSource是你用来获得XQuery连接的接口。你可以通过典型的数据源实例化机制,比如JNDI查询或者显式的类装载方法来创建XQDataSource 接口初始实现类。这类似于JDBC的DataSource和Connection接口的设计。在获得了XQConnection之后,你可以通过XQExpression或者XQPreparedExpression接口来执行XQuery。假如你只执行XQuery表达式一次,那么你应该使用XQExpression,并且如果你要准备XQuery表达式一次而使用不同的绑定值来多次执行这个表达式,像在前面的例子中那样,那么你应该使用XQPreparedExpression。这两个接口分别类似于JDBC中的Statement和PreparedStatement概念。  XQuery结果是XQuery数据模型的一个实例。在例子中显示的XQResultSequence提供了以光标为中心的接口,允许用户在结果的sequence中迭代每一个元素。用户可以从每个元素获得值,或者是原子数值或者XML节点。这类似于JDBC结果集中的迭代。  在使用完XQuery结果之后,程序员需要对XQResultSequence和XQConnection接口调用close()方法来清理这些资源。合理的用于释放资源的错误处理代码对避免资源泄露非常关键。在sequence结果关闭的时候,这个框架隐含的关闭从sequence结果中创建的元素。类似的,在连接被关闭的时候,这个sequence结果也被隐含的关闭了。  XQuery上下文(Context)的支持  XQuery有双重的"上下文"概念:静态的上下文和动态的上下文。XQJ提供了XQStaticContext和XQDynamicContext接口来为它们建模。XQStaticContext提供了方法检索定义在XQuery静态上下文中的信息,比如base URI、the boundary-space policy等等,允许应用检索关于全局静态上下文中的信息。比如,XQConnection接口扩展了XQStaticContext接口。  相比之下,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变量。&&&&&&& XQuery类型系统的支持  XQuery有类型&&并且还有支持它们的接口。XQSequenceType和XQItemType接口允许用户使用XQuery类型系统。XQSequenceType接口代表了XQuery中定义的序列类型(sequence ),而XQItemType接口代表了XQuery中定义的元素类型(item type) 。XQItemType扩展了XQSequenceType 但是将出现次数限制为1。XQItem接口包含了获得关于XQuery元素类型信息的方法,比如元素类型、基础类型、节点名(如果有的话)、节点类型名(如果有的话)以及和类型有联系的任何XML Schema URI。  XQJ给予了实现很大的自由处理XML模式类型。因为XQJ被设计为能够和各种XQuery引擎协同工作,你不能为XQJ的实现和底层的XQuery引擎之间假设任何特定的关系。因此你不能假设某个XQJ的时间和XQuery引擎会共享相同的XML模式仓储。为了解决这个问题,XQJ API使用叫做isUserDefinedXMLSchemaTypeSupported()的XQMetaData方法来判断是否XQJ的实现可以回答关于对XML模式依赖的问题。对于紧耦合的系统,XQuery引擎和XQJ实现共享了相同的XML模式仓储,isUserDefinedXMLSchemaTypeSupported 就会返回ture,对于松耦合的系统,这个值被设为false。  使用XQMetaData  XQMetaData接口为用户提供了关于底层XQJ和XQuery实现的额外的信息。它包含方法查询某些特定的XQuery的功能,比如StaticTypingFeature和SchemaImportFeature,是否被支持。它还提供了关于数据源的通用信息。XQMetaData接口为XQJ用户起到了可移植层的作用。这类似于JDBC中的DatabaseMetaData接口。  未来的发展方向  随着SQL/XML成为标准,程序员将能够在SQL中嵌入和执行XQuery&&这样JDBC最终会支持XQuery。但是,我们相信XQJ仍然是必要的,由于不是所有的需要XQJ的XQuery处理器都支持SQL和SQL/XML。进一步,XQJ已经定义了一些重要的接口(上面已提到)来建模XQuery中的关键概念,以及经典的XML Java接口,比如DOM、SAX和StaX。当JDBC最终支持SQL/XML 2006,它让SQL调用XQuery,这些XQJ接口会被使用。潜在的集成点是让JDBC XMLType支持一个使用XQJ定义的接口来创建XQuery数据模型。  这篇文章对XQJ(XQuery Java API)进行了简要的介绍,并且讨论了一些为XQuery中的关键概念进行建模的接口。如同JDBC在关系数据库中的成功,我们相信XQJ会成为对XML数据源的XQuery引擎进行交互中最广泛使用的Java API.&&&&&&&&&&&&&&
手机天线设计培训教程
国内最全面、系统、专业的手机天线设计培训课程,没有之一;是您学习手机天线设计的最佳选择...【】
易迪拓培训课程列表
我们是来自于研发一线的资深工程师,专注并致力于射频、微波和天线设计工程师的培养。
手机设计栏目
频道总排行4830人阅读
在使用关系数据库时,我们通过sql语句来检索数据源,这没有任何问题,但是关系数据也存在着一定的局限性,只能存储结构化的数据
当数据集是非结构化的时候该怎样存储呢,最简单的办法就是封装成xml。
应用开发中我们经常使用xml作为数据源来存储一些非结构化的数据,然而是否存在一种语言可以像sql语句检索关系数据库一样来检索xml呢?答案就是xquery。
xquery本身的语法结构并不复杂,xml节点位置是通过xpath进行描述的,在辅以相应的逻辑表达式,满足用户的检索偏好设置。
有关xquery和xpath的教程可参考如下网址
几个比较基础的语法信息如下:
xpath中通过'/'来表示节点层级结构,'//'表示所有节点
节点过滤条件写在'[ ]'里
节点属性加@符
如//person[@name='zhangsan']/password 表示获取姓名为zhangsan的用户密码
对应的xml结构是这样的&root&&person name=&zhangsan&&&password&mima&/password&&/person& person...&/root&
where语句用来指定过滤条件
return语句用来设置返回的结果集
for语句用来执行遍历
where和return子句里都可以加if/else条件判断逻辑
几个比较常用的功能函数:
&& &data(element):返回节点的text
&& &contains(element,value):查询模糊匹配
&& &doc(filePath):加载xml数据文件
for $x in doc(&persons.xml&)//person
where $x/@age & 20 and contains($x/@name,'张')
return if($x/@sex='男') then data($x/password) else ()
查询姓张并且年龄大于20的人,如果是男性返回密码,如果是女性返回空
javaAPI使用
这里主要使用saxon来执行xquery,具体应用可参考如下网址:
saxon的jar包可到这里下载:
使用大致如下:
//首先获取xml的数据源连接
XQDataSource ds = new SaxonXQDataSource();
XQConnection conn = ds.getConnection();
//通过XQExpression执行xquery
XQExpression expression = conn.createExpression();
XQResultSequence res=expression.executeQuery(&doc(persons.xml)//person....&);
//处理结果集
while(res.next()){
res.getObject();
xquery的doc()函数需要传递xml的文档路径,然而在开发时,我们的xml数据源可能还没有生成文件,对此,XQExpression提供了API,可以直接绑定xml数据而不用加载xml文档
expression.bindNode(XQConstants.CONTEXT_ITEM, org.w3c.dom.Document doc, null);
doc对象可通过DocumentBuilder类生成
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc=db.parse(new ByteArrayInputStream(&&person&zhangsan&/person&&.getBytes()));
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:408717次
积分:4694
积分:4694
排名:第5773名
原创:82篇
评论:106条
阅读:30324
(2)(3)(3)(1)(2)(1)(1)(1)(4)(6)(6)(4)(3)(4)(2)(1)(1)(8)(4)(5)(1)(7)(2)(1)(3)(3)(1)(2)用户名: @
密&&码:&&&|
密&&码:&|
密&&码:&|
您的位置: &
XQuery Java API JSR 225发布公开预览版
作者:infoq 张凯峰&&
内容导航:
&&& 【IT168技术资讯】JSR 225――XQuery API for Java――的第一个公开草案已经发布。其规范(由Oracle领导)的目标在于为XQuery的Java实现提供标准的便捷的访问接口。XQJ是一个通用的XQuery数据访问框架,它在许多不同的XQuery实现之上提供了一个统一的接口。&&&
是针对XML的查询语言。Wikipedia对它的定义是,提供了用于抽取和操纵来自于XML文档或者任何可以视作XML的数据源(比如关系型数据库或者office文档)中数据的方式。XQuery使用 表达式语法来解析XML文档中的特殊部分。 之一是Query语言必须是方便人们读写的。现在XQuery语言既有一种方便人们阅读的语法,也有一种基于XML的语法。基于XML的语法开始于。&&& 用Java编写的基本XQJ表达式看起来是这样(源自规范):
...// establish a connection to the XQuery engineXQConnection conn = xqds.getConnection();// create an expression object that is later used// to execute an XQuery expressionXQExpression expr = conn.createExpression();// the XQuery expression to be executedString es = "for $n in fn:doc('catalog.xml')//item " +"return fn:data($n/name)";// execute the XQuery expressionXQResultSequence result = expr.executeQuery(es);// process the result (sequence) iterativelywhile (result.next()) {
// retrieve the current item of the sequence as a String
String str = result.getAtomicValue();
System.out.println("Product name: " + str);}// free all resources allocated for the resultresult.close();// free all resources allocated for the expressionexpr.close();// free all resources allocated for the connectionconn.close();...
&&& 虽然XQJ规范是由Jim Melton(Oracle)领导制定,但它的JCP专家组成员包括 , ,等等。除了JCP之外的行业领导者也一直遵循XQJ规范,贡献自己的思想,并为了统一而改善他们自己的产品。 的创建者及 的作者――
:&&& 这是近一年来的第一个新版本,而且规范是在完全保密的情况下制定的,因此我很感兴趣它里面发生了什么。我原来并没有太多期望,因为我对于之前草案的多数评论 都被婉拒了(大约在我提交完的8个月后,而且没有任何公开的讨论)。但肯定的是,他们已经整理了很多细微之处,但总体设计并没有改变多少。(然而大多数应 用将不得不进行调整:不是重写,而是进行多处修改。这无疑说明了系统的兼容性并不好。)&&& 它还是坚定地基于客户机-服务器、面向连接的模 式,这样应用程序就存在于不同于数据库所在的那台机器上(就好像回到了上世纪八十年代!)……prepared语句并不是线程安全的――你不能编译一个表 达式并让它在多个线程中同时运行,因为XQPreparedExpression持有它自己的动态执行上下文。&&& 那有什么优点吗?是的,有一些。XPath值(19个基本数据类型)到Java对象的映射做得相当好――比JAXP好得多……这个版本还有针对所有XPath类型的Java表示……还有,我认为还有一个可以做得更好……源文地址:1
【内容导航】
&版权所有。未经许可,不得转载。
[责任编辑:]
相关论坛贴
itpub.net All Right Reserved.&&&&E-mail:
北京皓辰广域网络信息技术有限公司.&版权所有&&&&&&&&&&

我要回帖

更多关于 bt宅解析码使用方法 的文章

 

随机推荐