DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 揭穿 XQuery 的神話和誤解
揭穿 XQuery 的神話和誤解
編輯:XML詳解     
XQuery 給軟件架構師和開發人員帶來了很多希望,因為大大減少了建立使用 XML 的服務所需要編寫的代碼量。您也許認為 XQuery 所做的一切很容易理解,但是在 XQuery 的軟件開發社區中仍然存在著錯誤的想法和誤解。Frank Cohen 在本文中詳細剖析和澄清了圍繞著 XQuery 的很多神秘色彩和誤解。

  如果您在使用 XML、Web 或者面向服務的架構(Service OrIEnted Architecture,SOA),那麼很可能會從 XML Query (XQuery) 標准的制定中受益。雖然 XQuery 還未批准為正式標准,但已經有幾十種實現每天都在幫助軟件架構師和開發人員了。即將形成的 XML 文檔查詢標准包括了下一代 XML 選擇語言(XPath 2)、XML 序列化、全文檢索和功能性 XML 數據建模。這樣規模的項目免不了有很多神話和誤解需要揭穿。下面是圍繞著 XQuery 的一些常見的神話和誤解。

  誤解:數據庫公司將 XQuery 視作其核心業務的直接對手

  數據庫公司將 XQuery 看作一個機會,與其核心解決方案互相補充。

  對於軟件架構師和開發人員而言,XQuery 提高了生產率,增加了敏捷性。工具供應商迫切希望支持 XQuery 是合情合理的。

  對於開發人員來說,XQuery 很像 SQL,自然而然地對兩者加以比較。何況越來越多的數據正使用 XML 標記,這就迫使數據庫公司在產品中增加 XML 存儲、持久性和查詢的能力。XQuery 擁有如此眾多的開發人員支持,以至於 IBM 和 Oracle 將它們的角逐放在一旁,轉而擴展其核心數據庫產品以提供 XQuery 能力。

  數據庫公司也看到了成為第一個充分利用 XML 格式的數據庫供應商(從而最終成為市場霸主)所帶來的機會。 目前存儲在關系數據庫中的數據按照行和字段進行了規格化。在 XML 世界中,每一行包含無限多個字段,每個字段都是父/子層次結構中的一部分。最先提供高性能和 XQuery 靈活性的供應商將贏得一個巨大的新市場。

  一個證據是,XQuery 將 IBM 和 Oracle 團結在一起(不再是凶狠的對手),合作提出 JSR 225(參閱參考資料), XQuery API for Java (XQJ)。在 .Net 這一邊,Microsoft 和 IBM 共同向萬維網聯盟(W3C)提交了 XQuery 測試包。

  神話:XQuery 將代替 XSLT

  XQuery 和 XSLT 都有足夠多的開發人員支持,將共存下去。事實上,XQuery 1.0 和 XSLT 2.0 最新規范的開發是先後進行的。
XQuery 和 XSLT 交叉之處在於它們解決的問題:XML 數據轉換、XML 集合聯邦和 XML 數據高級查詢。開發人員仍仍將看到關於這兩種技術的爭論,包括各種各樣的神話和誤解。比如,我常常聽說 XQuery 能夠一次查詢多個不同的源文件,因此要比 XSLT 優越得多。事實上,XSLT 2.0 處理程序允許在輸入隊列中給出多個節點。 XSLT 1.0 有 document() 函數,可以在一次轉換中訪問多個源文件,XSLT 2.0 還支持新的 collection() 函數。我也常常聽到這樣的說法,雖然 XQuery 的語法看起來更好,但是缺少 XSLT 模板風格的模式匹配。雖然這也許是真的,但我堅信 XQuery 也會增加這一功能。最終,開發人員可以預期這兩種技術的改進和競爭將使它們的功能和能力不相上下。

  最後,還有開發人員頭腦遲鈍的問題。參加的那些 XSLT 會議讓我感到,我並沒有真正理解它。 XSLT 的轉換語法並沒有像 Java 和 Jython 中通常所用的 main() 或 start 方法。我有時候將 XSLT 看作一種腳本,說明並沒有真正理解 XSLT。XQuery 看起來很像 SQL,解決了很多我不得不從書架上翻找答案的問題。

  神話:XQuery 將代替 SQL

  XQuery 最適合於 XML,就像 SQL 最適合於關系數據。 XQuery 為需要訪問、挑選、集成和轉換一個或多個 XML 集合的應用程序提供了類似於 SQL 的查詢能力。雖然 XML 的狂熱者可能將世界上的一切都看成是用 XML 標簽編碼的,單關系數據庫模型仍然根深蒂固,世界上大部分數字數據是用由行和列組成的表來進行編碼的。SQL 不會很快地消失。相反已經出現 XQuery 擴展,將 SQL 調用的結果看作是 XML 文檔集合的一部分。

  如上所述,XQuery 對於 XML 就像 SQL 對於關系數據庫。但是,有些時候甚至相對於關系數據庫而言,XQuery 更容易使用。比方說,對於一般開發人員,使用 SQL 創建輸出結果為新 XML 文檔的多表外連接查詢要比編寫 XQuery 復雜得多。

  XML 的普及已經迫使標准團體工作組擴展 SQL 規范,以便納入 XML 處理功能。 SQLX Group、INCITS H2 小組和 ISO/IEC JTC1/SC32/WG2 的 SQL/XML 標准化都在致力於擴展 SQL 標准,使其能夠處理 XML 數據。

對於 XQuery 來說,過程性腳本語言和面向對象的編程語言都是一樣的。如果願意編寫 PHP 腳本,仍然可以繼續這樣做。多數現有的編程語言都有 XQuery 實現。

  XQuery 給開發人員帶來的好處是減少了執行查詢所需要的代碼量。有時候關系數據在兩個或更多的數據庫中,開發人員需要生成報表來顯示兩個數據庫的並。喜歡使用 Python 這類過程性編程語言的開發人員可能要編寫 100 或更多代碼行來檢索、解析和處理數據。當然也可以編寫幾行 XQuery 來完成。

  神話:XQuery 比 JDOM、JAXP 和其他 XML 解析 API 更難用

  XQuery 用於 XML 數據並不比 XML 解析 API 更難。JDOM、JAXP 以及其他 XML 解析 API 提供了處理 XML 數據的 Java 代碼和方法。很多面向對象的設計模式都准備編寫處理 XML 文檔復雜性的對象。編寫 Java 對象需要時間、精力和專門的技能。底層 XML 數據格式的任何細微變化都需要修改對象。XQuery 的擁護者可以肯定地說,和使用 JDOM 編寫 Java 對象相比,XQuery 腳本能夠更快地發現應用程序需要表示的 XML 數據。另外,很多 XQuery 庫都提供了 Java 接口,因此可以在 Java 類中編寫 XQuery 代碼來獲得結果集,就像調用一個方法一樣。然後讓 Java 類處理結果。

  神話:XQuery 難以學習

  使用 Java、.Net 和其他語言的軟件開發人員發現 XQuery 很容易學。XML 有很多不那麼優美的地方,包括從早期的 SGML 標准繼承下來的那些部分。 XQuery 使用一組簡潔的命令,很容易處理 XML。雖然一般開人員要掌握 XQuery 面臨著一些困難,但是學習曲線並不很陡峭,也不長。

  誤解:XQuery 不是產品,僅僅是很多層中的一層

  如果需要管理和操縱 XML 數據,XQuery 就是程序庫、應用程序編程或者服務棧所提供的功能規范。但是,底層的 XML 存儲、檢索和索引機制造成了 XQuery 實現的功能、性能和可伸縮性的很大差異。比如,最初曾經嘗試將 XML 數據保存在關系數據庫的 varchar2 字段中,然後簡單地增加一個 XQuery 引擎層,結果查詢性能很差。這就導致了在內容管理、數據持久性、Web 服務和面向服務架構(SOA)、數據倉庫、聯機分析處理(OLAP)、提取/轉換/加載(ETL)、企業應用程序集成(EAI)和供應方管理等方面形成了專門的 XQuery 解決方案。
誤解:XQuery 對於提高面向服務架構(SOA)的性能、控制復雜性沒有多大用處

  構建的系統要處理大量 XML 數據時,軟件架構師和開發人員借助 XQuery 解決性能和復雜性問題。考慮下面的情況和相應的 XQuery 解決方案:

  早期的研究表明,基於 ebXML 和 UBL 的服務中有效負載的數量和 XML 模式的復雜性呈爆炸性增長,在這裡 XQuery 可以發揮重要作用。

  XQuery 在很大程度上增強了 UDDI 解決方案,因為可以更好地管理和控制 UDDI 注冊中心列出的資源。

  軟件架構師發現,滯後(soft-moving)數據緩存能夠改善 SOA 的性能。類似的網頁邊緣緩存中,收到很多對相同信息請求的服務可以使用 XQuery 引擎臨時緩存 XML 數據。Xquery 實現一般同時提供 Xquery 腳本能力和數據持久性或者存儲設施。服務將 XQuery 公開為一種服務,並使用底層的 XQuery XML 數據庫臨時緩存 XML 數據。

  另外,在供應鏈應用領域,XQuery XML 存儲和檢索有可能對加速整個系統的性能發揮重要作用。設想一下,在供應鏈事務中需要跟蹤每個產品,而且業務關系使用 XML 文檔描述,如果能利用基於 XQuery 的高級存儲和檢索能力會是什麼樣的。

  誤解:XQuery 在數據轉換中起不了多大作用

  當采用新模式或者現有模式發生變化時,XQuery 可以在數據轉換中發揮很大的作用。對於需要建立供應鏈應用程序的企業而言,成本最大的部分就是轉換不兼容的消息格式。比如,假設買方采用了 RosettaNet 這樣的標准,和原來內部開發的模式完全不同。作為供應商,就需要供應鏈應用程序兼容 RosettaNet 格式,但是又要避免將現有系統轉移到 RosettaNet 的成本和風險。XQuery 可以幫助您遷移到新標准,又不會終止現有的銷售操作。

  XQuery 提供了一種方法,可以將現有的模式映射或轉換到 RosettaNet 格式,而不需要編寫大量的新代碼庫。相反,只需要編寫一個 XQuery,將現有的響應數據轉化成 RosettaNet 響應。

  誤解:XQuery 和聯機分析處理(OLAP)以及數據倉庫應用程序沒有什麼關系

  XQuery 確實為 OLAP 和數據倉庫應用程序提供了必要的鏈接能力。比如,一般企業通常有多個數據倉庫來跟蹤和分析公司數據。這些倉庫就像是雜亂的地下室,需要花費人力、資金和專門技能才能挖掘出業務知識。將一個地下室和另一個聯系起來需要很大的工作量,成本很高。XQuery 提供了一種解決方案,通過在多個數據倉庫之間建立基於查詢的連接來幫助 OLAP。比如,一個數據倉庫保存發送給日用零售店的產品,另一個數據倉庫保存零售店提供的產品支持電話。 XQuery 通過顯示哪些產品造成最多未解決的支持電話,建立了這兩個數據倉庫之間的橋梁。這就證明了 XQuery 在邏輯數據倉庫、分析、提取/轉換/加載(ETL)和企業應用程序集成(EAI)方面的優勢。
神話:XQuery 不能處理大型數據集,永遠趕不上關系數據庫的運行速度


  從很多方面,XQuery 標准業界都將 Internet 看作是一個大型的分布式 XML 數據庫。從這種角度出發,這種查詢語言要具備使用戶在一個或多個相關文檔中發現數據的浏覽能力。從數據庫的角度看, XQuery 是大型數據集上的結構化和基於內容的查詢工具,這一數據集就是世界范圍內的 XML 數據庫。從這個角度來說卻是非常大。

  XQuery 解決方案的可伸縮性和性能取決於 XQuery 實現的目標。比如,有些 XQuery 實現強調內容管理和集成服務。這類實現最適合於向有限受眾發布 Web 站點和 Web 門戶。以 XML 數據庫功能為中心的 XQuery 實現最適合高效地處理大型數據集。

  要了解 XQuery 實現的主要目標,最簡單的辦法是查看其來源。比如,觀察 XQuery 工作組可以看到兩類完全不同的參與者:從 XML 文檔領域轉向 XQuery 的人和將 XML 作為數據的人。面向文檔的成員具有 SGML 背景,強調快速訪問相對較少的 XML 數據。面向數據庫的成員具有層次、關系和 XML 數據庫的背景,認為對開發人員最重要的是索引、文本搜索擴展、事務和兩階段提交、外部索引和 SDK/API。

  誤解:XPath 和 XQuery 不是一回事嗎?

  實際上,XQuery 建立在 XPath 和 XSLT 的基礎之上。軟件架構師和開發人員使用 XPath 作為一種查詢語言,發現 XML 文檔中的元素並使用 XSLT 將其轉換成 XHtml 或者另一種 XML 格式。比如,開發人員使用 XPath 在 XML 文件中發現病人的牙科記錄,然後使用 XSLT 將病人信息打包成 Html 顯示在浏覽器中。如果數據已經保存為 XML 格式,這種方法很好,但是 XPath 和 XSLT 只能用於 XML 文件。

  XPath 是面向選擇的,XSLT 則面向轉換;這兩種技術仍需要一種有效的方式來選擇、連接並將數據轉化成需要的形式。XQuery 能夠滿足應用程序的數據需求:可以訪問多個數據源、選擇信息和連接數據。這種技術同樣適用於非 XML 數據,包括表單、網頁和其他結構松散的數據。

  誤解:XQuery 沒有更新機制

  XQuery 規范確實沒有包含更新機制。而且在撰寫本文的時候,XQuery 工作組的主 Xquery 規范正處於“Last Call”狀態,沒有工作組成員願意花費時間來更新規范。我希望 XQuery 規范最終將采用 SQL 風格的方法。更新很可能用一組獨立的操作表示,模仿和支持現有的關系數據庫命令。但是,一些實現者和現有的實現提供了一種更加自由的方式來利用 XQuery 組成更新。
必須指出的是,多數 XQuery 實現都提供了自己的更新機制。比如,一種流行的 XQuery 引擎通過擴展提供了對 XML 數據和非 XML 數據的 Create、Read、Update 和 Delete (CRUD) 操作。

  神話:XQuery 規范永遠不會成為 RFC

  看來似乎如此,但是撰寫本文的時候, XML Query 工作組和 XSL 工作組的 XQuery、XPath 和 XSLT 語言都進入了“Last Call”狀態。而且已經存在了多種成熟的 XQuery 產品。

  神話:XQuery 支持基於記號的文本搜索

  雖然 XQuery 全文檢索規范確實定義了基於記號(token-based)的文本檢索, XQuery 工作組有意留下了一些方面未作規定。比如, XQuery 沒有提供加載文檔和查看可用文檔列表的標准機制。按照我的看法,不規定每個方面為 XQuery 帶來了一些可塑性。當前的 XQuery 實現關注的焦點不同,底層的數據管理設施也有很大差異。 這種可塑性使 XQuery 不僅適合作為數據庫搜索引擎,還可用於隊列篩選。非常強大。

  結束語

  總之,XQuery 看來不錯,減少了創建 XML 服務需要編寫的代碼量。更大的 XQuery 系統提供了查詢 XML 文檔的統一方式,包括 XML 選擇、序列化、全文搜索和函數性數據建模。XQuery 規范工作組的工作還將繼續,為使用 XML 的開發人員帶來更多的好處。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved