在Java中使用XQuery:SOA中操作数据的最佳方法
轻便的数据传输方式一直是面向服务构架(SOA)所关注的焦点,对于SOA来说,曾经发展出了很多方便的数据传输模式。但自从XML流行后,这些传输模式都逐渐消失了,因此,现在的SOA中的基本的数据传输模式都是基于XML的。虽然XML可以用于象服务发送请求、从服务器获得响应或传递数据表之类的操作,但这些操作都太简单,而有时我们需要对XML数据进行复杂的操作,如果要象SQL查询数据表一样来查询XML数据。这就要用到本文所讨论的XQuery技术。
本文主要讨论XQuery以及相关的其他技术,如XQJ(基于XQuery的Java API)。本文首先介绍了什么是XQuery和XQJ,并使读者可以了解使用这些技术的基本方法。然后通过具体的实例来使读者真正掌握XQuery和XQJ技术。
一、什么是XQuery
XQuery是一种查询XML数据的技术。就象用SQL来查询关系数据一样。在几年前,W3C查询语言工作组开发出了XQuery1.0。在以前我们想操作XML数据必须要掌握SAX或DOM中的一种,而在本文中我们将有幸了解到更容易使用的XQJ技术。XQJ更符合XQuery规范,在XQJ语言中,我们将定义很多接口和类,而提交XQJ查询和获得查询结果的任务就是由这些类完成的。同时,XQJ还支持最新的XPath2.0技术。由于XQuery是为查询XML的专用语言,因此,使用一行XQuery语句所达到的效果需要象Java或C#这样的语言上百行才能达到。
XPath是一种用来获得XML文档的部分内容的技术。因此,如果我们只想得到一个XML文件中的一部分内容,就可以使用XPath来完成。但XPath也有局限性,如它不能获得一个节点(Node)的一部分,也不能创建新的内容。这一点XSLT就强一些,XSLT是XPath的超集,除了包含XPath的全部功能外,还包含了很多其他的特性。如可以在XSLT中使用变量、命名空间,并可以创建新文档。
二、XQuery API for Java (XQJ)简介
XQJ其实就是用Java实现的一个包,其中包含了很多的接口和类。使用XQJ可以查询单独的XML文档或XML文档集合。而XQuery提供了更灵活的机制:可以根据需要选择实现这些特性的方法。这就意味着可以使用XQJ来区分处理中间结果和最终结果。现在实现XQJ主要有两个框架,它们是Qexo和Saxon。其中Saxon可以同时在Java和.NET中使用,分别对应了两个包:Saxon-B和Saxon-SA。其中Saxon-B是以开源许可证形式发布的,而Saxon-SA则是收费的。
XQJ可以从JNDI中获得数据,也可以使用其他的方法获得数据。如XQDataSource可以作为创建XQuery连接对象、序列对象和项目对象的工厂。XQDataSource方法有三个重载的
相关文档:
List的用法
List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。
表1 List接口定义的常用方法及功能
从表1可以看出,List接口提供的适合于自身的 ......
2008 年 6 月 24 日
原文地址: http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0806wangys/
本文介绍 IBM FileNet P8 4.0 Platform 提供的 Content Java API。首先对 FileNet P8 Content Engine 和 API 进行概要介绍, 并说明了一些基本概念,随后详细介绍了 FileNet Content Engine提供的基于 EJB ......
ajax技术是使页面能局部刷新的一种技术,全称应该是asynchronous JavaScript and xml从几个单词就知道它的请求响应的处理是异步的,而且使用的是JavaScript和xml技术.
我们在java中使用ajax技术最简单的是使用它的一个框架dwr只要导入这个包,做相应的配置,可 ......
第一种方法使用 Desktop类,该类继承自Object
import java.awt.*;
import java.io.*;
class DesktopTest
{
public static void main(String args[])
{
if (!Desktop.isDesktopSupported())
{
System.err.println("Desktop not supported!");
System.exit(-1);
}
else
{
try{
Desktop desktop ......