基本信息
◆ 簡介
解釋XQuery最佳方式是這樣講:XQuery 相對於 XML 的關係,等同於 SQL 相對於資料庫表的關係。
XQuery 被設計用來查詢 XML 數據 - 不僅僅限於 XML 檔案,還包括任何可以 XML 形態呈現的數據,包括資料庫。
◆什麼是 XQuery?
XQuery 是用於 XML 數據查詢的語言
XQuery 對 XML 的作用類似 SQL 對資料庫的作用
XQuery 被構建在 XPath 表達式之上
XQuery 被所有主要的資料庫引擎支持(IBM、Oracle、Microsoft等等)
XQuery 是 W3C 標準。
解析
Query是一種發展得最為慎重的W3C標準,因而演化得也最為緩慢,XQuery也因此而聞名。造成這種現象的一個主要原因就是,對於如何獲得以XML形式存儲的信息,業界還沒有什麼經驗。許多公司仍然在這個領域創新,並且正不斷產生大量的經驗信息,這些信息必須經過處理和提煉,才能使解決XML查詢問題的水平達到令人滿意的程度。
XQuery還不是W3C推薦標準。最新的工作草案已經有了顯著的進展,並且正在被許多不同的供應商或多或少地實現。一些市場主導供應商例如BEA和Software AG已經決定發布一些基於這些工作草案的產品,但是直到其成為W3C的推薦標準前,這些廠商並不準備緊跟這一標準。由於最終發布版的延遲推出,有關其實施的大規模市場推廣計畫尚未開始。
XQuery低公開度的另一個原因就是,到目前為止,還沒什麼證據能表明XML格式的數據存儲能夠成為將關係型數據存儲拉下馬的通用技術。雖然XML資料庫展現出很多有價值的和特殊的特性,但是它們在市場滲透方面與面向對象資料庫比較相似。這兩種資料庫都可以很方便地解決專業問題,並且適用於中小型系統。不過,隨著存儲問題複雜性的增加,XML和面向對象資料庫看起來都沒有關係型資料庫那樣容易擴展。實際上,像關係型資料庫那樣運作可能也不會取得成功。只有在技術方面的大踏步前進才會減少對關係型資料庫管理系統遺留項目的大量投資。
特點
XQuery有如下特點:
XQuery是查詢XML的語言
XQuery類似RDBMS的SQL
XQuery建立在XPATH的基礎之上
XQuery已經被現在主流的RDBMS所支持,如Oracle,DB2,SQLServer
XQuery套用舉例
·從Web Service中提取信息
·生成數據的摘要報告
·將XML轉換為XHTML
·從Web文檔中找尋信息
在了解XQuery之前,你應該首先了解
XML
HTML/XHTML
XPATH
參考手冊
XQuery 1.0 和 XPath 2.0 分享相同的數據模型,並支持相同的函式和運算符。
相關函式
XQuery 構建在 XPath 表達式之上。XQuery 1.0 和 XPath 2.0 分享相同的數據模型,並支持相同的函式和運算符。
XPath Operators
XPath Functions
數據類型
XQuery 分享與 XML Schema 1.0 (XSD) 相同的數據類型。
XSD String
XSD Date
XSD Numeric
XSD Misc
代碼演示
XML檔案books.xml中是如下代碼:
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>329.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>349.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>339.95</price>
</book>
</bookstore>
檔案存儲了書店中的若干本書以及他們的語言,分類,作者,出版年和價格。
現在,如果我們想找出所有價格大於30的書名集合則可以寫XQuery為
where $i/price > 30
return $i/title
doc是打開一個XML文檔的函式,XQuery有一個函式館支持,提供了諸如數學計算,字元串操作等功能。XQuery1.0於XPATH2.0,XSLT1.0共用同一套函式館。粗體部分是一個XPATH的表達式,他返回了所有書的集合。where子句是篩選條件。而return子句則用於選擇結果並返回。XQuery具有和SQL類似的外觀和結構,以及相似的表達力。
上述XQuery將返回
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>
然後,我們想把所有書的名稱組成一個排序列表並生成相應的HTML表格,則應該
<ul>
{
order by $x
return <li>{$x}</li>
}
</ul>
order子句用於排序。將返回
<ul>
<li><title lang="en">Everyday Italian</title></li>
<li><title lang="en">Harry Potter</title></li>
<li><title lang="en">Learning XML</title></li>
<li><title lang="en">XQuery Kick Start</title></li>
</ul>
這是一段合理的HTML代碼
下面是一些XQuery語法的基本規則:
·大小寫敏感
·元素,屬性和變數名必須是合法的XML名稱
·XQuery中的字元串可以使用單引或雙引號
·XQuery中的變數用$前綴加名稱表示
·XQuery中的注釋在 (: 和 :)範圍內
另外,作為高級功能,XQuery還提供了用戶自定義函式功能
術語
節點
在 XQuery 中,有七種節點:元素、屬性、文本、命名空間、處理指令、注釋、以及文檔(根)節點。XML 文檔是被作為節點樹來對待的。樹的根被稱為文檔節點或者根節點。
請看下面的 XML 文檔:
<bookstore><book>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book></bookstore>
上面的 XML 文檔中的節點例子:
<bookstore> (文檔節點)<author>J K. Rowling</author> (元素節點)lang="en" (屬性節點)基本值(或稱原子值,Atomic value)
基本值是無父或無子的節點。
基本值的例子:
J K. Rowling"en"
基礎語法
XQuery 對大小寫敏感
XQuery 的元素、屬性以及變數必須是合法的 XML 名稱。
XQuery 字元串值可使用單引號或雙引號。
XQuery 變數由 “$” 並跟隨一個名稱來進行定義,舉例,$bookstore
XQuery 注釋被 (: 和 :) 分割,舉例,(: XQuery 注釋 :)
條件表達
"If-Then-Else" 可以在 XQuery 中使用。
請看下面的例子:
return if ($x/@category="CHILDREN")
then <child>{data($x/title)}</child>
else <adult>{data($x/title)}</adult>
請注意 "If-Then-Else" 的語法:if 表達式後的圓括弧是必需的。else 也是必需的,不過僅僅寫 “else ()” 也是可以的。
上面的例子的結果:
<adult>Everyday Italian</adult><child>Harry Potter</child><adult>Learning XML</adult><adult>XQuery Kick Start</adult>
比較
在 XQuery 中,有兩種方法來比較值。
通用比較:=, !=, <, <=, >, >=
值的比較:eq、ne、lt、le、gt、ge
總結
XQuery將成為一種用於描述對XML數據源的查詢的語言,具有精確、強大和易用的特點。其支持者認為針對XML的XQuery非常類似針對關係資料庫的SQL。對XQuery語言標準的定義工作已經於2007年初完成,版本為1.0
XQuery 如果使用FLWOR(For-let-where-order by- return) 從 "books.xml" 選取節點請看下面這個路徑表達式:
doc("books.xml")/bookstore/book[price>30]/title上面這個表達式可選取 bookstore 元素下的 book 元素下所有的 title 元素,並且其中的 price 元素的值必須大於 30。
下面這個FLWOR表達式所選取的數據和上面的路徑表達式是相同的:
where $x/price>30
return $x/title結果是:
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>通過 FLWOR,您可以對結果進行排序:
where $x/price>30
order by $x/title
return $x/titleFLWOR 是 "For, Let, Where, Order by, Return" 的只取首字母縮寫。
for 語句把 bookstore 元素下的所有 book 元素提取到名為 $x 的變數中。
where 語句選取了 price 元素值大於 30 的 book 元素。
order by 語句定義了排序次序。將根據 title 元素進行排序。
return 語句規定返回什麼內容。在此返回的是 title 元素。
上面的 XQuery 表達式的結果:
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>