本章將詳細說明了如何在本地開發環境中設定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 解壓後放到目錄: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.yiibai.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.xqy
,將其傳遞給XQuery表示式處理器,然後執行表示式。然後列印結果。