XQuery/優勢
XQuery 的主要優勢是
- 表達能力 - XQuery 可以查詢許多不同的資料結構,其遞迴特性使其成為查詢樹和圖結構的理想選擇
- 簡潔性 - XQuery 語句比類似的 SQL 或 XSLT 程式更短
- 靈活性 - XQuery 可以查詢分層和表格資料
- 一致性 - XQuery 具有統一的語法,可以與其他 XML 標準(如 XML Schema 資料型別)一起使用
XQuery 通常與另外兩種語言 SQL 和 XSLT 相比較,但與它們相比,XQuery 具有許多優勢。
與 SQL 不同的是,XQuery 返回的不僅是表格,而是任意樹結構。這使得 XQuery 可以直接建立可以在網頁中使用的 XHTML 結構。XQuery 適用於基於 XML 的物件資料庫,物件資料庫比以純粹表格格式儲存的資料庫更加靈活和強大。
與 XSLT 不同的是,任何熟悉 SQL 的人都可以學習 XQuery。許多結構非常相似,例如
- 排序結果: XQuery 和 SQL 都在查詢中添加了
order by子句。 - 選擇不同值: XQuery 和 SQL 都具有從結果集中選擇不同值的簡單方法
- 限制行: XQuery 和 SQL 都有一個 WHERE X=Y 子句,可以新增到 XQuery 中
另一個很大的優勢是,XQuery 本質上是全球資訊網的原生查詢語言。可以使用 XQuery 查詢實際網頁,但不能使用 SQL。即使使用基於 SQL 的資料庫來儲存 HTML/XHTML 頁面或此類頁面的片段,也會錯過 XQuery 的簡單標籤/屬性搜尋(類似於在列名中搜索列名)的許多優點。
與 XSLT 不同的是,任何熟悉 SQL 的人都可以快速學習 XQuery。XSLT 有許多對於許多程式設計師來說不熟悉的模式。此外,XSLT 擅長用作將一種型別的文件轉換為另一種型別的文件(例如 RSS 到 HTML)的靜態方法,而 XQuery 是一種更加動態的查詢工具,適用於從大型文件或大量文件中提取資料部分。
關於兩種語言用於轉換 XML 的優劣,一直存在著爭議:XSLT 和 XQuery。一個常見的誤解是,“XQuery 最適合查詢或選擇 XML,而 XSLT 最適合轉換 XML。”實際上,兩種方法都能轉換 XML。儘管 XSLT 歷史更悠久,安裝基礎更大,但“XQuery 型別切換”轉換 XML 的方法提供了許多優勢。
大多數需要轉換 XML 的人聽說他們需要學習一種叫做 XSLT 的語言。XSLT 的第一個版本由 W3C 於 1999 年釋出,在其時代是一個巨大的創新,而且的確仍然占主導地位。它是最早專門用於轉換 XML 文件的語言之一,也是第一個使用來自函數語言程式設計世界的先進理論來建立非常可靠、無副作用的轉換的領域特定語言 (DSL)。許多 XML 開發人員仍然對這種開創性的語言心存感激,因為它幫助他們看到了軟體開發的新模型:一個以模型轉換為中心並授權他們將轉換路由的既定要求和文件融合到單個、模組化程式中的模型。
另一方面,學習 XSLT 需要克服非常大的學習曲線。XSLT 的難度在一定程度上是由於其架構師的一項關鍵設計決策:使用 XML 本身來表達轉換規則,而不是為儲存轉換規則建立全新的語法和語法。XSLT 對轉換規則的獨特方法也增加了學習曲線的陡峭程度。學習曲線可以克服,但公平地說,這種學習曲線為另一種方法創造了機會。
XQuery 滿足了日益壯大的使用者群體對替代方案的需求:他們發現 XQuery 的學習曲線更低,它滿足了他們對轉換 XML 的需求,並且與 XQuery 的其他優勢一起,它已成為一種引人注目的“一體化”語言。與 XSLT 一樣,XQuery 由 W3C 建立來處理 XML。但與使用 XML 語法表達語言不同的是,XQuery 的架構師選擇了一種對伺服器端指令碼語言(如 PHP、Perl 或 Python)使用者更熟悉的語法。XQuery 的設計與關係資料庫查詢語言(如 SQL)的使用者類似,同時仍然忠實於函數語言程式設計實踐。儘管 XQuery 相對年輕(XQuery 1.0 僅在 2007 年釋出,而 XSLT 已經發布了 2.0 版),但 XQuery 的誕生非常成熟。eXist-db 和 MarkLogic 等 XML 伺服器已經在使用 XQuery 作為其查詢 XML 和執行 Web 伺服器操作的語言(從而避免了學習 PHP、Perl 或 Python 的必要性)。
因此,面對 XSLT 社群聲稱“XSLT 最適合轉換文件,而 XQuery 最適合查詢資料庫”,這個使用者群體驚訝地發現,XQuery 完全取代了他們對 XSLT 的需求。他們開始毫不掩飾地聲稱他們更喜歡 XQuery 用作此目的。
XQuery 如何完成轉換 XML 的任務?XQuery 中用於轉換 XML 的主要技術是 XQuery 作者新增的一個鮮為人知的表示式,稱為“型別切換”。雖然它非常簡單,但型別切換使 XQuery 能夠執行 XSLT 所執行的幾乎所有轉換。型別切換表示式會快速檢視節點的型別,並根據節點的型別,執行您為該型別節點指定的運算。這意味著文件的每個不同元素都可以有自己的規則,這些規則可以儲存在模組化的 XQuery 函式中。對 XQuery 語言的這一簡樸新增使開發人員能夠轉換具有複雜內容和不可預測順序的文件 - 這通常被認為是 XSLT 的最佳領域。儘管語法和轉換方法存在差異,但日益壯大的使用者群體實際上已經開始將 XQuery 型別切換表示式視為一種有效甚至更優越的方式來儲存他們的文件轉換邏輯。
透過圍繞型別切換表示式構建一組 XQuery 函式,您可以實現與 XSLT 風格轉換相同的結果,同時保留 XQuery 的優勢:易於學習並與原生 XML 資料庫整合。對於那些使用原生 XML 資料庫的使用者來說,型別切換的存在意味著他們只需要學習一種語言來執行他們的資料庫查詢、Web 伺服器操作和文件轉換。這些 XQuery 型別切換例程已被證明易於構建、測試和維護 - 有些人認為比 XSLT 更容易。XQuery 型別切換為這些使用者提供了高度的靈活性,使他們能夠完全掌握 XQuery,而不是將時間和精力分配到 XQuery 和 XSLT 之間。
也就是說,仍然存在大量運作良好的遺留 XSLT 轉換,並且有一些 XSLT 開發人員認為遷移到型別切換風格的 XQuery 並沒有什麼益處。兩種方法都是有效的文件轉換方法。XQuery 型別切換和 XSLT 的支持者之間產生了自然的張力,他們分別推廣著自己最熟悉和認為更優越的方法。在實踐中,您可能最適合嘗試這兩種技術,並確定哪種風格適合您和您的組織。在沒有假設您具備 XSLT 背景或興趣的情況下,本文及其配套文章將幫助您瞭解使用 XQuery 型別切換滿足您的 XML 轉換需求的關鍵模式。