XQuery 學習筆記(三)回到定義(上)
上一次我們學習了XQuery中FLOWER表達式的基礎知識,了解了下FLOWER的組成與變化情況,后續的篇章會繼續對FLOWER展開討論。本次主要學習XML相關的定義與擴展知識,包括XQuery的設計、XQuery與XML相關標準的關系以及XQuery的處理模型。搞清楚XQuery、XPath、XSL、XSLT等究竟扮演了何種角色。
本系列所有示例代碼均在Altova XMLSpy 2010 Enterprise Edition中調試通過。
一、XQuery的設計
1999年W3C開始設計XQuery,XQuery起初使用"Quilt"的XML查詢語言作為起點,而"Quilt"又受到更早的兩種XML查詢語言影響:XQL和XML-QL。
XQuery的設計目標:
- 對于高度結構化和半結構的文件都有效。
- 與協議無關,跨平臺。
- 說明性語言而非過程化語言。
- 是強類型的,允許被"編譯"。
- 允許跨文件查詢。
- 盡可能多的共享W3C的推薦標準。
二、XQuery與其他標準的關系
1、XQuery與XPath
XPath是一種專門從XML中查詢元素或屬性的語言,它逐層遍歷XML文件并過濾掉不需要的內容。XPath目前有兩個版本:XPath 1.0 和 XPath 2.0,XPath 1.0提供了基本的但很使用的路徑查詢語法,而XPath 2.0提供了很多內置函數,包括了多種表達式,不僅僅是路徑表達式。
XPath本質上是XQuery的一個子集,他們擁有相同的數據模型、相同的內置函數集和運算符,但是XQuery的功能更加強大,提供了其他新特性,如FLOWER表達式和XML構造器。
2、XQuery與XSLT
XSLT負責把XML轉換為其他任何需要的格式 ,XQuery與XSLT在功能上有很多重合的地方,XSLT目前也有兩種版本:XSLT 1.0 和 XSLT 2.0。XSLT 2.0是基于 XPath 2.0的,所以XSLT與 XQuery有相同的數據模型,支持相同的內置函數,并且有許多一樣的表達式。
XQuery與XSLT的主要區別:
- XSLT針對整個文件的格式轉換操作做了優化,將文件全部寫入內存。而XQuery針對數據片段選擇進行優化,只將片段寫入內存,XQuery被設計成可伸縮的并可以利用數據庫的特性(如索引)進行優化。
- XQuery的語法更易于閱讀。
- XQuery適合于操作文件集合,而XSLT沒有針對多文件操作做出優化。
3、XQuery與SQL
XQuery是XML的SQL,針對XML數據進行了優化,而SQL是標準的關系數據庫的查詢語句,主要針對結構化數據。但是現如今,這兩者的界限正變得愈來愈模糊,主流關系數據庫均提供了XQuery的實現,能夠利用SQL語句來操作XML;而XML數據庫的出現,也使得小型項目的實施變得更加容易。
4、XQuery與XML Schema
XML Schema是用來取代DTD來對XML文檔進行驗證的一種標準,對于維護文檔的正確性、結構化非常的重要。XQuery可以利用XML Schema來優化查詢,避免無謂的數據類型轉換,同時XQuery也提供了部分的數據驗證功能。
三、處理查詢
1、可以被XQuery處理的對象
1)文本文件形式的XML
2)使用URI從網絡路徑獲取的XML片段。
3)存儲在XML數據庫中的數據。
4)存儲在數據庫中的XML數據。
5)內存中的XML數據。
2、XQuery查詢
XQuery查詢由兩部分組成:查詢頭部和查詢主體。
查詢頭部包括以分號分隔的聲明、命名空間、外部schema、變量、函數等其他內容。
查詢主體包括以逗號分隔的一個或多個表達式。
3-1 XQueryDemo.xq
xquery version "1.0";(:聲明XQuery的版本號:)
declare boundary-space preserve;(:保持邊界空白,直譯,我也不清楚具體指什么邊界,望達人指教一下:)
declare namespace prod = "http://www.google.com";(:聲明一個命名空間:)
declare variable $users := doc("../XML/Users.xml")/Users;
<count>{count($users/User)}</count>,
<prod:FirstUser>{$users/User[@id = "1"]}</prod:FirstUser>
查詢結果:
<count>3</count><prod:FirstUser xmlns:prod="http://www.google.com"><User id="1"><Name>Tom</Name><Age>12</Age></User></prod:FirstUser>
3、上下文
不能無緣無故的去計算查詢,必須要給出一個查詢上下文,由外部程序或查詢頭部給出。
查詢上下文包含的值有:
- 當前日期和時間,隱含的時區;
- 在查詢外部活在查詢頭部中定義的變量;
- 外部函數庫。
4、查詢處理器
對XQuery進行解析、分析和計算的軟件,類似于編譯器。就像SQL有很多不同廠商的實現:SQL Server(T-SQL)、Oracle(PL-SQL)…,XQuery同樣有很多實現,如SAXON、Zorba、Pathfinder、xbird等。
5、查詢結果
XQuery的查詢結果可以寫入到文件、序列化,或者傳遞給一個程序做二次處理
小結:
本次學習主要回顧了XML相關技術的特點及其相互關系,為了在合適的場合使用合適的技術做鋪墊。下次將學習XQuery的數據模型,深入理解樹形結構這一經典的數據結構。

浙公網安備 33010602011771號