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 處理器來測試 books.xqy,這是一個包含針對我們的示例 XML 文件(即 books.xml)的 XQuery 表示式的檔案。
在這個例子中,我們將看到如何編寫和處理一個查詢,以獲取價格大於 30 的書籍的標題元素。
books.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>
books.xqy
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 表示式處理器,並執行該表示式。然後列印結果。