XQuery - 环境设置

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

我们使用的是开源独立XQuery处理器Saxon Home Edition(Saxon-HE),它被广泛使用.该处理器支持XSLT 2.0,XQuery 3.0和XPath 3.0,并且针对性能进行了高度优化. Saxon XQuery处理器可以在没有任何XML数据库的情况下使用.在我们的例子中,我们将使用一个简单的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处理器test books.xqy,一个包含针对我们的示例XML文档的XQuery表达式的文件,即books.xml.

在这个例子中,我们将看到如何编写和处理查询以获取价格大于30的图书的标题元素.

books.xml

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

books.xqy

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

XQueryTester.java

package com.it1352.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:\ javaa \ java XQueryTester

输出

您将获得以下结果 :

<title>Learn .Net in 24 hours</title>
<title>Learn XQuery in 24 hours</title>

了解示例

  • books.xml表示样本数据.

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

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