XQuery - 环境设置


本章详细介绍如何在本地开发环境中设置 XQuery 库。

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

为了使用 Saxon XQuery 处理器,您的应用程序的类路径中应该有 saxon9he.jar、saxon9-test.jar、saxon9-unpack、saxon9-xqj.jar。这些 jar 文件可在下载文件SaxonHE9-6-0-1J.zip下载SaxonHE9-6-0-1J.zip中找到。

例子

我们将使用基于 Java 的 Saxon XQuery 处理器来测试 books.xqy,这是一个包含针对我们的示例 XML 文档(即 books.xml)的 XQuery 表达式的文件。

在此示例中,我们将了解如何编写和处理查询来获取价格大于 30 的书籍的标题元素。

书籍.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>40.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

书本网

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

XQueryTester.java

package com.tutorialspoint.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 复制到任何位置,例如E: > java

  • 步骤 2 - 将 books.xml 复制到同一位置,E: > java

  • 步骤 3 - 将 books.xqy 复制到同一位置,E: > java

  • 步骤 4 - 使用控制台编译 XQueryTester.java。确保您的计算机上安装了 JDK 1.5 或更高版本,并且配置了类路径。有关如何使用 JAVA 的详细信息,请参阅我们的JAVA 教程

E:\java\javac XQueryTester.java
  • 步骤 5 - 执行 XQueryTester

E:\java\java XQueryTester

输出

您将得到以下结果 -

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

理解示例

  • books.xml 代表示例数据。

  • books.xqy 表示要在 books.xml 上执行的 XQuery 表达式。我们将在下一章详细了解该表达式。

  • XQueryTester 是一个基于 Java 的 XQuery 执行程序,它读取 books.xqy,将其传递给 XQuery 表达式处理器,并执行该表达式。然后打印结果。