摘要:XML的應用變得日益廣泛,XML數據庫技術也得到了迅速發展,當越來越多的數據資料以XML為標準格式進行存儲時,卻由于其格式的不同導致了傳統的數據庫及查詢語法無法適用。分析了一種全新的XML查詢語言XQuery,并對FLWOR表達式進行了重要闡述。
關鍵詞:XML查詢;XQuery;表達式
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)23-865-02
Research and Analysis of XQuery,a XML Query Language
ZHANG Jing-jing1,LI Nan2
(1.Northwest Normal Uniuersity, Lanzhou 730070, China; 2.Bohai Uniuersity, Jingzhou 121000, China)
Abstract:XML becomes more and more popular in Web implementation .XML database and related technologies are also rapidly developing.When more and more data are stored up in the standard format of XML,the traditional datebase and inquiring grammar can't be used due to different format.The article intends to analyze a brand-new query language,XQuery for XML,and it also introduces FLWOR expression exactly.
Key words: XML querying; XQuery; expression
1 引言
隨著Web的廣泛應用,W3C提出了新的可擴展性標記語言XML,它能對各種數據源的信息內容進行標記,包括結構化和半結構化的文檔、關系數據庫和對象庫。XML得到了廣泛的應用[5],越來越多的數據采用XML格式進行存儲、交換或表現,但當這些數據資料以XML為標準格式進行存儲時,由于其格式的不同而導致傳統的數據庫及查詢語法無法使用,鑒于非結構性數據的查詢工作以及關系數據庫自己的缺陷,人們需要一種更優化的數據查詢語言來解決這些問題。
XQuery1.0在2007年1月23日被確立為W3C推薦標準[1],XQuery起源于Quilt,并將Xpath2.0作為其子集,綜合了SQL、OQL、XML-QL、XQL及Lorel等諸多語言的特點,XQuery吸取了多種查詢語言的優點,適用于各種類型的XML數據源的查詢,不僅查詢功能強大,而且簡潔靈活且易于實現。此外,XQuery還具有從多種數據庫中檢索信息的功能,能對各種數據和文檔進行查詢,是專門為處理XML數據的查詢而設計的查詢語言。
2 XQuery的模塊結構及特點
XQuery查詢模塊主要由三部分組成:名字空間和模式聲明,函數定義和查詢表達式。前兩部分和起來稱為查詢序(query prolog),查詢序不是必需的[2],可省略。下節我們將通過FLWOR表達式來進行詳細的分析。
XQuery能較好的滿足目前XML對查詢語言的要求,能夠實現對基于數據的、基于文檔的以及混合型的XML數據源的查詢,提高用戶查詢效率。下面我們對XQuery的幾點主要特性做一簡要的說明[3,5]:
1)組合性:XQuery語言通常是由多種表達式(如路徑表達式、條件表達式以及元素構造函數等)構成,它們是完全通用的,其中任何一個表達式的結果都可用作另一個表達式的操作數。組合性能使其實現簡單或復雜的模式匹配功能,如過濾,選擇,重構等。
2)簡潔性:XQuery定義了運算符的語義,使其包括了某種隱式操作。例如,將算術運算符(如+)施加于某個元素時,該運算符會自動提取該元素的數值。類似地,將比較運算符(如=)施加于一系列值時,則會自動地對該序列進行迭代,尋找滿足比較條件的一對值。
3)靜態分析:XQuery查詢語法主要有三層:首先是表層語法,它是可視性最高的并且是用戶最有可能與之發生聯系的語法;其次是可以替換表層語言的基于XML的語法XQuery;最后是形式代數語言,它使用正規定義的形式十分詳細地描述了XQuery處理器內部工作,為XQuery處理器查詢優化奠定了基礎。查詢的三個層主要體現在靜態分析和動態求值的過程中。靜態分析的目標是把XQuery表層語句通過XQuery核心語法XQueryX轉換為標準的XQuery運算樹,并對其進行類型檢查,靜態分析階段是執行優化和檢測某種錯誤的階段,它能夠及時發現查詢錯誤并進行反饋。
3 XQuery表達式的特性及實例的應用分析
XQuery具有強大的查詢和檢索功能,它通過各種由關鍵字、符號和操作數所組成的表達式來完成查詢。作為一門函數化的語言,它允許各個表達式進行相互嵌套,同時它又是一門類型明確的語言,一個運算涉及的表達式、函數、常量和變量必須符合類型要求。XQuery的基礎是表達式,目前,最新版本的XQuery 1. 0規范共有14種表達式:初級表達式(Primary Expressions),路徑表達式(Path Expressions),序列表達式(Sequence Expressions),算術表達式(Arithmetic Expressions),比較表達式(Comparison Expressions),邏輯表達式(Logical Expressions),構造器(Constructors), FLWOR表達式(FLWOR Expressions),有序和無序表達式( Ordered and Unordered Expressions),條件表達式(ConditionalExpressions),量化表達式(Quantified Expressions),序列類型表達式(Expressions on SequenceTypes),效用表達式(Validate Expressions),擴展表達式(Extension Expressions)。本文主要介紹和實現FLOWR表達式。
3.1 FLWOR表達式的語法規范[1]
XQuery 中最強大的新特性是FLOWR表達式,FLWOR在XQuery中的作用類似于SQL中的“SELECT FROM WHERE ORDER BY”, FLWOR是“For,Let,Where,Order by,Return”的縮寫,其語法構成為:
FLWORExpr::=(ForClause|LetClause)+WhereClause?+OrderByClause?“return”ExprSingle
ExprSingle::=FLWORExp
| QuantifiedExpr
| TypeswitchExpr
| IfExpr
| OrExpr
ForClause ::= \"for\" \"$\" VarName TypeDeclaration? PositionalVar? \"in\" ExprSingle (\",\" \"$\" VarName TypeDeclaration? PositionalVar? \"in\" ExprSingle)*
LetClause ::=\"let\" \"$\" VarName TypeDeclaration? \":=\" ExprSingle (\",\" \"$\" VarName TypeDeclaration? \":=\" ExprSingle)*
WhereClause ::= \"where\"ExprSingle
OrderByClause ::= ((\"order\" \"by\") | (\"stable\" \"order\" \"by\")) OrderSpecList
3.2 FLWOR表達式的執行過程及語句含義
FLWOR表達式的執行過程如圖1所示。
FLWOR具體的含義如下:
For 遍歷結果集,并把當前條目綁定到給定的變量。
Let 將匹配結果綁定到給定的變量。
Where 條件子句,用來過濾結果集。
Order by 排序子句,對結果進行排序。
Return 對For ,Let ,Where, Order by子句進行求值,也就是返回FLWOR的結果。
3.3 XQuery對XML文檔的查詢示例
FLWOR表達式的結果是一個包含連接這些求值結果的有序序列。首先看一個簡單的\"bib.xml\" XML文檔:
<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>
<bib>
<book><title >SQL Server</title><author>Stevens </author><year>2008</year><price>30.00</price>
</book>
<book>
<title>asp.net 2.0</title>
<author>J K</author>
<year>2007</year>
<price>30.80</price>
</book>
<title >c#</title>
<author>H.M</author>
<year>2006</year>
<price>40.95</price>
</book>
</bib>
該文檔的數據模型示于圖2。
下面用一簡單的例子進行查詢說明:
for $x in document(\"bib.xml\")/bib/book
let $y:=$book/@year
where $x/price>30 AND $y>=2006
order by ($y) decending
return
<results>
{$x/title}
</results>
表示選取 bib 元素下的 book 元素下所有的 title元素,并且其中的 price 元素的值必須大于 30,year元素的值大于等于2006,并對year元素進行升序排序。其中document() 用于打開 \"bib.xml\" 文件。
上面的 XQuery 查詢的結果為:
<results>
<title >c#</title>
<title>asp.net 2.0</title>
</results>
4 結束語
本文通過對非結構性數據的查詢工作以及關系數據庫自己的缺陷這一問題引出了XQuery語言,并對XQuery的特點進行了簡要的分析,對于W3C發布的查詢語言標準,文中我們從源語言的語言規范開始,尤其對于XQuery中的FLWOR表達式的整體應用過程,進行了詳細的介紹。
由于XML本身還是比較新的東西,尤其是XML查詢語言,它的研究現在也在大部分限于理論研究階段。盡管XQuery還不太成熟穩定,但是對于查詢和恢復XML文檔和文檔集,XQuery仍然是一種很有前途的創新語法定義,并且在生成XML文檔等方面,XQuery有著其他查詢語言無可比擬的優勢。隨著計算機領域的不斷擴大,XQuery也將會被廣泛的接受,大規模的采用XQuery的浪潮不會太遙遠。
參考文獻:
[1] XQuery 1.0: An XML Query Language W3C Recommendation[EB/OL].[2008-1-23].http://www.w3.org/TR/xquery/.
[2] W3C Working Group:XML Syntax for XQuery 1.0(XQueryX)[EB/OL].http://www.w3.org/TR/xqueryx/.
[3] 謝榮傳,謝鉉洋.XQuery語言的實現[J].安徽大學學報:自然科學版,2005,29(1):23-26.
[4] 基于XQuery的XML查詢平臺研究與設計[J].河南大學碩士論文,2006.
[5] 程和俠,黃國興.XQuery簡介及在.NET中的應用[J].微型電腦應用,2005,21(7):62-63.