论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
在Apache Xindice中保存XML文档
 作者:佚名     2007-3-14 16:40:58        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

 Apache Xindice是一种本机XML数据库,可以在该数据库中保存、查询和修改XML文档。与关系数据库相比,本机数据库的优点是无须将XML映射到SQL。该数据库使用XPath查询Xindice数据库,使用XML:DB XUpdate来更新数据库。Xindice实现了Java XML:DB API,用于在Xindice数据库中添加、查询和更新XML文档。Xindice数据库中的XML文档保存在集合中;一个集合可以包含一个或多个XML文档。Xindice还提供一种命令行工具,该工具具有与XML:DB API相同的功能。

初始安装

  Xindice数据库可作为一种Web应用程序安装在Web服务器上。安装Xindice数据库时需要Xindice API JAR文件和Xindice服务器Web应用程序。

  • 下载Version 1.1b4 binary (JAR),即xml-xindice-1.1b4-jar.zip,其中包含Xindice XML:DB API JAR文件。
  • 下载Version 1.1b4 binary (webapp),即xml-xindice-1.1b4-war.zip,其中包含Xindice服务器Web应用程序。
  • 将xml-xindice-1.1b4-jar.zip解压缩到安装目录C:/xindice下。
  • 将xerces-2.6.0.jar添加到CLASSPATH变量前面。然后将下面的Xindice JAR文件添加到CLASSPATH,其中,是Xindice安装目录。
Xindice JAR文件描述
/xindice-1.1b4/lib/xerces-2.6.0.jarXerces XML解析器
/xindice-1.1b4/xindice-1.1b4.jar内核服务器API
/xindice-1.1b4/lib/commons-logging-1.0.3.jarJakarta Commons Logging API
/xindice-1.1b4/lib/xalan-2.5.2.jarXPath API
  • /xindice-1.1b4/lib/xmldb-api-20030701.jar
  • /xindice-1.1b4/lib/xmldb-api-sdk-20030701.jar
  • /xindice-1.1b4/lib/xmldb-common-20030701.jar
  • /xindice-1.1b4/lib/xmldb-xupdate-20040205.jar
XML:DB API 和XUpdate API的实现
/xindice-1.1b4/lib/xmlrpc-1.1.jarXML-RPC API
/xindice-1.1b4/lib/xml-apis.jarDOM API

表1 Xindice JAR文件

  • /xindice-1.1b4/bin添加到PATH变量。
  • 为XINDICE_HOME环境变量添加值/xindice-1.1b4。
  • 将xml-xindice-1.1b4-war.zip解压缩到安装目录C:/xindice。
  • Xindice Web应用程序部署在Web服务器/应用服务器中(本教程使用了WebLogic server 9.0,但也可以使用其他Web服务器/应用服务器)。安装WebLogic Server 9.0。然后使用WebLogic server配置向导创建一个WebLogic server域。创建的默认域为base_domain。

概述

  可以使用XML:DB和XUpdate API或Xindice命令行工具访问和修改Xindice数据库。XML:DB API包括使用XPath查询数据库的XpathQueryService服务以及使用XUpdate更新数据库的XUpdateQueryService服务。XML:DB/XUpdate API和命令行工具用于创建Xindice数据库集合、将XML文档添加到数据库、从数据库检索XML文档、查询数据库和更新数据库。在下面的各小节中,我们将先演示命令行工具,然后演示Xindice API。

   使用xindice命令访问Xindice命令行工具。xindice命令的语法是:

xindice action [switch] [parameter]

  表2列出了一些xindice命令操作值。

Xindice操作 描述
ac添加一个集合
dc删除一个集合
ad添加一个文档
dd删除一个文档
lc列出集合
rd检索一个文档
ld列出集合中的文档
xpath使用XPath查询文档
xupdate使用XUpdate更新文档

表 2. Xindice命令操作值

  表3列出了一些xindice命令切换值。.

Xindice切换描述
-c指定一个集合上下文。上下文语法的形式是 xmldb:xindice://host:port/db
-f指定一个文件路径
-n指定一个名称
-q指定一个XPath查询

表 3. Xindice命令切换值

  以下部分参考表2和表3,说明了xindice命令中使用的Xindice操作或切换。作为xindice命令的一个示例,使用以下命令列出了Xindice数据库中的集合:

xindice lc -c xmldb:xindice://localhost:7001/db

  该xindice命令的输出结果是:

system meta Total collections: 2

使用WebLogic Server配置Xindice

  需要使用Xerces解析器来配置Xindice 1.1.b4数据库。默认情况下,Xindice使用在JVM中配置的XML解析器。因为JDK 1.4.2中包括的XML解析器是Crimson解析器,将Xindice 1.1b4与JDK 1.4.2一起使用将发生以下错误:

Failed to create SAXParser  org.xml.sax.SAXNotSupportedException:   Feature: http://xml.org/sax/features/  external-general-entities

  将JDK 5.0与Xindice 1.1b4一起使用。JDK 5.0包括Xerces解析器。WebLogic Server 9.0用于部署Xindice数据库。需要使用WebLogic 9.0(而不是8.1)版,因为9.0版本支持JDK 5.0。

   JDK 1.4.2可以与Xindice一起使用,方法是通过认可的标准覆盖机制将Xerces2-j 2.7.1中的Xerces实现类添加到JDK 1.4.2中Xerces类前面的类路径。要使用认可的标准覆盖机制,请使用安装Xerces2-j(如)的目录定义系统属性java.endorsed.dirs,或将JAR文件从xerces-2_7_1目录复制到/jre/lib/endorsed目录。

   本节中的配置过程仅适用于WebLogic Server 9.0:

  • /Xindice-webapp/xindice-1.1b4/xindice-1.1b4.jar修改为xindice.jar。
  • 从xindice.jar文件中解压缩WEB-INF/server.xml配置文件。
  • 在server.xml文件中,将root集合元素中的dbroot属性值指定为C:/xindice/db,该目录路径是用于创建Xindice数据库的目录路径。
  • 从xindice.jar文件删除WEB-INF/system.xml。将修改后的WEB-INF/server.xml 添加到xindice.jar。
  • 将xindice.jar文件复制到/user_projects/domains/base_domain/autodeploy目录。
  • 将JAVA_HOME环境变量定义为/jdk150_03,其中为安装WebLogic server的目录。
  • 启动WebLogic server。这将启动WebLogic server中的Xindice数据库服务器,并打开默认的Xindice数据库db。在WebLogic server中部署Xindice服务器Web应用程序。使用URL http://localhost:7001/console访问WebLogic server管理控制台。选择base_domain>Deployments节点。选择Xindice Web应用程序链接和Testing选项卡。Xindice服务器URL显示为http://localhost:/7001/xindice。

在数据库中创建集合

  在WebLogic server中配置了Xindice数据库服务器后,我们将使用命令行工具和XML:DB API创建一个Xindice数据库集合。在Xindice数据库中,集合是一组XML文档。

   使用Xindice命令创建顶级集合catalog:

>xindice ac -c xmldb:xindice://localhost:7001/db -n catalog

  示例命令行命令中的集合上下文是db数据库实例,它是默认的Xindice数据库实例。还可以将db数据库作为根集合引用。这会在db数据库中创建集合catalog,并输出以下消息:

Created :xmldb:xindice://localhost:7001/db/catalog

  可以使用以下命令删除创建的集合:

>xindice dc -c xmldb:xindice://localhost:7001/db -n catalog

  这将删除集合,并显示如下消息:

Deleted: xmldb:xindice://localhost:7001/db/catalog

  接下来,我们将使用XML:DB API创建一个集合,导入Xindice核心服务器类和XML:DB API类。

import org.apache.xindice.client.xmldb.services.*; import org.apache.xindice.util.XindiceException; import org.apache.xindice.xml.dom.*; import org.xmldb.api.*; import org.xmldb.api.base.*; import org.xmldb.api.modules.*;

  创建一个Xindice数据库引擎实例。Xindice数据库的XML:DB驱动程序实现类为DatabaseImpl。向org.xmldb.api.DatabaseManager注册Xindice数据库,使用该数据库从XML:DB数据库获取集合。

String xindiceDriver =    "org.apache.xindice.client.xmldb.DatabaseImpl"; org.xmldb.api.base.Database xindiceDatabase =    (org.xmldb.api.base.Database)   ((Class.forName(xindiceDriver)).newInstance()); org.xmldb.api.DatabaseManager.    registerDatabase(xindiceDatabase);

  接下来,从该数据库获取db集合。

 String url = "xmldb:xindice://localhost:7001/db";  org.xmldb.api.base.Collection  collection =      DatabaseManager.getCollection(url);

  创建org.apache.xindice.client.xmldb.services.CollectionManager对象。要从数据库创建并删除集合,CollectionManager是必需的。指定一个XML配置以创建集合。在Xindice文档中没有详细介绍XML配置。请使用CollectionManager服务创建一个数据库集合。

CollectionManager collectionManagerService =     (CollectionManager)     collection.getService("CollectionManager", "1.0");  String collectionName = "catalog"; String collectionConfig = "" +   " " +   "";  catalogCollection =    collectionManagerService.createCollection   (collectionName,    DOMParser.toDocument(collectionConfig));

  这将在db数据库中创建一个集合catalog。

将XML文档添加到数据库

  接下来,将XML示例文档添加到数据库集合catalog。XML示例文档如下所示:

       
What Is a Portlet Sunil Patil
What Is Hibernate James Elliott
BCEL Maven and CSS with Swing Daniel Steinberg

  使用命令行工具通过以下命令将XML文档添加到Xindice数据库:

>xindice ad -c xmldb:xindice://localhost:7001/db/catalog  -f c:/xindice/catalog.xml -n catalog.xml

  这将catalog.xml文档添加到catalog集合,并输出以下确认:

Added document xmldb:xindice://localhost:7001/db/catalog/catalog.xml

  接下来,我们将使用XML:DB API添加集合。导入前一节列出的XML:DB API和核心服务器类。创建并注册“在数据库中创建集合”一节中的数据库驱动程序。从数据库获取catalog集合:

Collection collection = DatabaseManager.getCollection   ("xmldb:xindice://localhost:7001/db/catalog");

  获取添加到数据库的XML文档的Document对象。

DocumentBuilderFactory factory =    DocumentBuilderFactory.newInstance(); File datafile = new File("c:/Xindice/catalog.xml"); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(datafile);

  创建添加到集合的XML文档资源的ID。ID将集合与标识符关联起来。为从集合添加的XML文档创建org.xmldb.api.modules.XMLResource。在Xindice数据库中,XMLResource对象表示XML资源,如Document对象。从Document对象设置XMLResource的内容。将XML资源添加到集合。

String  resourceID = collection.createId();  XMLResource resource = (XMLResource)   (collection.createResource(resourceID,               "XMLResource")); resource.setContentAsDOM(document); collection.storeResource(resource);

  这将XML文档添加到数据库集合。

从数据库检索XML文档

  接下来,检索在上一节中添加的XML文档。使用下列命令从Xindice数据库检索XML文档:

>xindice rd -c xmldb:xindice://localhost:7001/db/catalog   -n catalog.xml

  这将检索XML文档。接下来,使用XML:DB API检索XML文档。获取“将XML文档添加到数据库”一节中的catalog集合。获取用于XML文档的XML资源。输出XML资源中的XML文档。

XMLResource resource = (XMLResource)   (collection.getResource(resourceID)); System.out.println(resource.getContent());

  这将检索上一节中添加的XML文档。

使用XPath查询数据库

  Xindice提供XPath查询引擎,以便使用XPath查询数据库的XML文档。接下来,使用XPath查询Xindice数据库中的XML文档。首先,使用命令行工具通过xindice命令xpath操作查询Xindice数据库集合。例如,检索第一个元素中

的title。

>xindice xpath -c xmldb:xindice://localhost:7001/db/catalog    -q /catalog/journal[1]/article/title

  参数-q指定Xpath查询。来自Xpath查询的输出是:

 What Is a Portlet

  作为另一个示例,检索catalog元素的publisher属性。

>xindice xpath -c xmldb:xindice://localhost:7001/db/catalog     -q /catalog/@publisher

  来自Xpath查询的输出是:

  接下来,使用XML:DB API查询数据库。从“将XML文档添加到数据库”一节中的数据库获取catalog集合。接下来,指定Xpath查询字符串。以下XPath表达式将找到第一个journal元素中article的title。

String xpath = "/catalog/journal[1]/article/title";

  使用org.xmldb.api.modules.XpathQueryService服务查询数据库集合。创建一个XpathQueryService对象。使用XPathQueryService query()方法查询数据库。查询返回org.xmldb.api.base.ResourceSet。在资源集上迭代以获取XML文档资源org.xmldb.api.base.Resource。输出资源中的XML文档。

XPathQueryService queryService =    (XPathQueryService)    collection.getService("XPathQueryService","1.0"); ResourceSet resourceSet = queryService.query(xpath); ResourceIterator iterator = resourceSet.getIterator();    while (iterator.hasMoreResources()) {        Resource resource = iterator.nextResource();        System.out.println(resource.getContent());    }

  Xpath查询的输出为:

 What Is a Portlet

使用Xupdate修改数据库

  Xindice实现XML:DB XUPdate机制,以更新XML文档。让我们使用Xupdate更新数据库中的XML文档。首先,我们将使用命令行工具。使用Xindice命令xupdate操作更新XML文档。表4列出了一些Xupdate命令,用于更新XML文档。

Xupdate命令描述
xupdate:insert-after在选择的节点后添加节点。
xupdate:update更新选择的节点。
xupdate:remove移除选择的节点。

表4. Xupdate命令

使用xindice命令添加元素

  例如,我们将更新catalog.xml文件,以便将journal元素添加到XML文档。在xupdate配置文件xupdate.xml中指定了要更新/添加的元素/属性。要添加journal元素的配置文件xupdate.xml如下:

        Aug 2005    
iBatis DAO Sunil Patil

  使用以下命令更新XML文档:

>xindice xupdate -c   xmldb:xindice://localhost:7001/db/catalog -n catalog.xml   -f  c:/xindice/xupdate.xml

  xupdate操作指定要更新的XML文档。参数-f指定配置文件xupdate.xml。这将更新XML文档,并显示以下消息:

1 documents updated

使用xindice命令删除和修改元素

  再如,移除journal元素,并修改另一个journal元素中的title。让我们移除第一个journal元素,并修改第三个journal元素中的title。因为在更新第三个journal元素之前,移除了第一个journal元素,所以要更新的journal元素成为第二个journal元素。我们会使用xupdate:remove移除某一元素和xupdate:update,以更新一个元素。下面是用于移除和修改元素的配置文件xupdate.xml:

   Maven with Swing 

  使用以下命令更新XML文档:

>xindice xupdate -c   xmldb:xindice://localhost:7001/db/catalog -n catalog.xml   -f  c:/xindice/xupdate.xml

  这将更新Xindice数据库中的XML文档。

使用XML:DB API添加元素

  接下来,使用XML:DB API更新XML示例文档。作为一个示例,在第三个journal元素后面添加一个journal元素。从“将XML文档添加到数据库”一节中的数据库获取catalog集合。然后用XUpdate 字符串指定XUpdate命令。

String xupdate =  "" + "    " + "    " + " 
" + " iBatis DAO" + " Sunil Patil" + "
" + "
" + "
" + "
";

  使用org.xmldb.api.modules.XUpdateQueryService通过XUpdate更新数据库。从要更新的集合创建XUpdateQueryService对象。使用XUpdateQueryService对象的update()方法更新数据库,如下所示:

XUpdateQueryService queryService = (XUpdateQueryService) collection.getService("XUpdateQueryService",                    "1.0"); queryService.update(xupdate);

使用XML:DB API删除元素

  类似地,可以使用xupdate:remove命令从数据库中的XML文档移除journal元素。为移除第一个journal元素,可以创建一个XUpdate命令String。使用XUpdate查询服务更新XML文档:

xupdate = "" +     "    " +     ""; queryService.update(xupdate);

使用XML:DB API修改元素

  接下来,使用xupdate:update命令修改元素。修改第二个journal元素中article的title。此外,我们将使用XUpdate查询服务创建一个XUpdate命令String来更新XML文档。

xupdate = "" + "     + "    Maven with Swing" + "";  queryService.update(xupdate);

  在数据库集合catalog中检索修改的XML文档。修改后的XML文档列表如下:

       
What Is Hibernate James Elliott
Maven with Swing Daniel Steinberg
iBatis DAO Sunil Patil

删除XML文档

  接下来,从数据库集合删除XML文档。使用命令行工具通过以下命令删除XML文档:

>xindice dd -c   xmldb:xindice://localhost:7001/db/catalog -n catalog.xml

  这将删除catalog集合中的XML文档catalog.xml,并显示以下消息:

DELETED: xmldb:xindice://localhost:7001/db/catalog/catalog.xml

  接下来,使用XML:DB API删除XML文档。需要从将要删除的XML文档获取catalog集合,并获取要删除的XML资源。删除XML资源的方法如下:

XMLResource resource = (XMLResource)   (collection.getResource(resourceID)); collection.removeResource(resource);

  这将从数据库删除选择的XML文档。

   用于创建集合、添加XML文档、检索XML文档、查询数据库、更新数据库和删除XML文档的Xindice Java应用程序XIndiceDB.java可从xindice-resources.zip文件中获得。

结束语

  在本教程中,我们使用WebLogic server 9.0配置了Xindice数据库服务器。也可以使用其他应用服务器(如JBoss)配置Xindice。使用JDK 5.0是因为JDK 1.4.2会生成Xindice 1.1b4的异常。使用WebLogic server 9.0是因为9.0版本支持JDK 5.0。


责任编辑:lss
  相关新闻
艰难PASS216,完成MCSE!!!
Jsp中的Application使用
使用AppFuse框架进行开发的总结
生成Mapping文件、编辑HQL语言的好工具
微软新推Dynamics社区 打造Myspace商务版
用Apache Velocity模板引擎速造网站(1)
FrontPage 2000网站FTP到NT服务器
Oracle发布免费数据库管理工具Raptor
简易使用Apache Web让你的JSP“动”起来
用JTextPane显示网页
艰难PASS216,完成MCSE!!!
Oracle发布免费数据库管理工具Raptor
微软新推Dynamics社区 打造Myspace商务版
生成Mapping文件、编辑HQL语言的好工具
使用AppFuse框架进行开发的总结
用Apache Velocity模板引擎速造网站(1)
用Apache Velocity模板引擎速造网站(2)
用JSF与BEEHIVE PAGE FLOW开发WEB应用
在Applet中应用JDBC访问数据库
重温Struts--ActionMapping和ActionForward
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号