XQuery开发环境安装

本章将详细说明了如何在本地开发环境中设置XQuery库开发环境。

我们将使用一种广泛使用的开源独立XQuery处理器Saxon Home Edition(Saxon-HE)。 该处理器支持XSLT 2.0,XQuery 3.0和XPath 3.0,并且针对性能进行了高度优化。 Saxon XQuery处理器可以在没有任何XML数据库的情况下使用。 在之后的一系列示例中,我们将使用一个简单的XML文档作为数据库。

要使用Saxon XQuery处理器,应该在应用程序的类路径中放置:saxon9he.jarsaxon9-test.jarsaxon9-unpacksaxon9-xqj.jar。 这些jar文件可通过下载文件包 - SaxonHE9-6-0-1J.zip 获得。把下载的 SaxonHE9-6-0-1J.zip 解压后放到目录:D:\worksp\xquery\libs 中。

示例

在示例中,将使用基于Java的Saxon XQuery处理器来测试文件:books.xqy,这是一个包含示例XML文档的XQuery表达式的文件,即 - books.xml

在这个例子中,将演示如何编写和处理查询以获取价格大于30的书籍<title>元素内容。

文件:D:\worksp\xquery\books.xml 的内容如下 -

<?xml version=1.0 encoding=UTF-8?>
<books>

   <book category=JAVA>
      <title lang=en>15天搞定Java</title>
      <author>Maxsu</author>
      <year>2015</year>
      <price>30.00</price>
   </book>

   <book category=DOTNET>
      <title lang=en>15天搞定.Net</title>
      <author>Susen</author>
      <year>2018</year>
      <price>40.50</price>
   </book>

   <book category=XML>
      <title lang=en>3天搞定XQuery</title>
      <author>Yizhi</author>
      <author>Maxsu</author> 
      <year>2016</year>
      <price>50.00</price>
   </book>

   <book category=XML>
      <title lang=en>24小时搞定XPath</title>
      <author>Jazz Bee</author>
      <year>2019</year>
      <price>16.50</price>
   </book>

</books>

文件:D:\worksp\xquery\books.xqy 的内容如下所示 -

for $x in doc(books.xml)/books/book
where $x/price>30
return $x/title

文件:D:\worksp\xquery\XQueryTester.java 的内容如下所示 -

//package com.jb51.xquery;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import javax.xml.xquery.XQConnection;
import javax.xml.xquery.XQDataSource;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQPreparedExpression;
import javax.xml.xquery.XQResultSequence;

import com.saxonica.xqj.SaxonXQDataSource;

public class XQueryTester {
   public static void main(String[] args){
      try {
         execute();
      }

      catch (FileNotFoundException e) {
         e.printStackTrace();
      }

      catch (XQException e) {
         e.printStackTrace();
      }
   }

   private static void execute() throws FileNotFoundException, XQException{
      InputStream inputStream = new FileInputStream(new File(books.xqy));
      XQDataSource ds = new SaxonXQDataSource();
      XQConnection conn = ds.getConnection();
      XQPreparedExpression exp = conn.prepareExpression(inputStream);
      XQResultSequence result = exp.executeQuery();

      while (result.next()) {
         System.out.println(result.getItemAsString(null));
      }
   }    
}

针对XML执行XQuery的步骤 -

第1步 - 将XQueryTester.java复制到一个工作目录位置,例如:D:\worksp\xquery
第2步 - 将books.xml复制到同一目录位置,例如:D:\worksp\xquery
第3步 - 将books.xqy复制到同一目录位置,例如:D:\worksp\xquery
第4步 - 在命令行下编译XQueryTester.java。 确保在计算机上安装了JDK 1.5或更高版本,并且已配置类路径。有关如何使用JAVA的详细信息,请参阅JAVA教程
第5步 - 执行编译和执行 -

D:\worksp\xquery>javac -Djava.ext.dirs=D:\worksp\xquery\libs XQueryTester.java

D:\worksp\xquery>java -Djava.ext.dirs=D:\worksp\xquery\libs XQueryTester

验证输出结果 -

在执行编译和执行上面示例代码后,得到以下结果 -

理解示例代码实现

  • books.xml表示示例数据文件。
  • books.xqy表示要在books.xml上执行的XQuery表达式。将在下一章详细理解这个表达方式。
  • XQueryTester.java是一个基于Java的XQuery执行程序,它读取books.xqy,将其传递给XQuery表达式处理器,然后执行表达式。然后打印结果。