級別: 中級
Uche Ogbuji, 首席顧問, Fourthought,Inc.
2004 年 2 月 01 日
XML
世界非常龐大,而且還在不斷成長,存在大量不同的標準和技術,它們以復雜的方式互相影響。新手很難確定哪些是 XML
最重要的方面,用戶也難以跟蹤這個領域出現的新生事物和變化。在這一系列的文章中,Uche Ogbuji 提供了 XML
標準的指南,并為進一步的學習推薦了廣泛的資料。Uche Ogbuji 繼續關于 XML 的論述,這次主要討論 XML 處理技術。
XML
變得越來越強大,得到了迅速的發展。它已經證明自己是一種非常有價值的技術,但可能也是一種令人害怕的技術,如果考慮到掛在“XML”一詞下面不斷變化的
各個部分。在這一系列的文章中,我將簡述我認為最重要的 XML 技術,討論它們如何在 XML
世界中更大范圍內的彼此融合。為了進一步評估和學習使用各種技術,我還推薦了一些教程和其他有用的參考資料。
這里介紹的所有技術都是
標準,盡管這個詞本身就有點捉摸不定。標準有各種各樣的形式,而且在同一個領域中常常有多種標準互相競爭。我按照實踐的方法把標準定義為:被不同的供應商大量采用的或者有影響、獨立于供應商的組織推薦的規范。
在
第一篇文章中,我主要討論了核心 XML 技術。(關于各種標準開發團體和規范分類的概述,請參閱
文章的側欄。)本文中我將討論和開發人員處理 XML 有關的標準。下一篇文章中將介紹選擇的一些最重要的 XML 應用(即詞匯表)。
XSLT
Extensible Stylesheet
Language Transformations (XSLT) 1.0
[W3C
推薦標準]是一種轉換語言,描述從輸入 XML 文檔到輸出樹的轉換。比如,輸出樹可以是 HTML 文檔的形式也可以是另一種 XML
格式。因此,XSLT 可以作為把 XML 呈現為遺留瀏覽器顯示格式的語言,也可以保持格式不變作為對 XML
文件操作的語言。轉換本身使用一種專門的詞匯表定義為 XML 文檔。使用XPath( 前文
已述)訪問原文檔和生成表達處理。專門的指令建立處理規則(XSLT 是一種聲明性語言)并控制輸出樹的創建。
XSLT 1.0 是一種非常成功的語言,涵蓋了多數常用的 XML 處理任務。如果熟悉 XML,學習 XSLT
的基礎并不難,但精通這門語言還是需要很大的努力。它有一種設計很好的擴展機制。它的聲明性處理模型使代碼很容易維護和重用。把 XML
文檔鏈接到它的 XSLT 樣式表文檔的標準方式在 Associating Style Sheets with XML documents, Version 1.0[W3C 推薦標準]中定義。XSLT 規范被
翻譯成了各種不同的語言。
如前所述,XSLT 有一種很好的擴展機制,允許您使用自己選擇的語言定義另外的功能。但更好的是,您甚至不必去編寫擴展,因為別人已經替您做了。
EXSLT[社區規范]是這類擴展的一個標準集,采用了隱藏實現的定義方式。EXSLT 試圖囊括通常需要的多數擴展,比如日期處理、正則表達式和數學操作。許多 XSLT 實現都實現了一個或多個 EXSLT 模塊。
XSLT 2.0
[開發中]根據收集的 XSLT 1.0 使用經驗提供了一些重要的改進,但缺點是對 XPath 2.0 的密切依賴,我認為后者存在根本上的缺陷(請參閱
第 1 部分)。
推薦的入門參考和教程
- W3Schools 提供了一個簡要的
XSLT 教程。
- ZVON 提供了更深入的
XSLT 教程。
- IBM
developerWorks 提供了幾種 XSLT 教程,包括:
- 如果準備使用 EXSLT,請參閱“
EXSLT 實例”(
developerWorks,2003 年 2 月)。
參考資料和其他資源
SAX
Simple API for XML (SAX)
[社區規范]是一種事件驅動的 API。XML 標記的不同部分(如起始和結束標簽、文本、實體)觸發特殊的事件,開發人員為這些事件注冊處理程序代碼。然后,解析器根據輸入的 XML 發出事件流,處理程序代碼依次處理這些事件。
SAX 的創立基本上是一個馬拉松式的過程,從 1997 年后期由
XML-DEV 郵件列表
發起,長期以來這個郵件列表一直是 XML 專家的主要據點。David Megginson 領導了這個討論組,造就了最成功的 XML
研究項目之一,沒有任何大公司或標準團體的資助。在 SAX 之前,每種解析器都通過自己私有的 API 在 XML
結構與處理程序代碼之間通信,SAX 提供了重要的統一性。通常提供 SAX 驅動程序的解析器都把底層的解析器事件轉化成 SAX
標準事件,以支持代碼的移植。SAX 最初的想法是用 Java 語言開發,但已經普及到多種語言和環境,盡管有時候它的以 Java
為中心的特點增加了移植的復雜性。SAX 目前處在第二代,包括 XML 名稱空間處理和相對于文檔結構可以選擇的某些事件報告。
在主流語言中,基于事件的接口通常使用
回調函數實現,這是一種在 GUI 之類的編程中常見的方式。在面向對象語言中,回調函數通常是對象的注冊方法,使用多態匹配方法名和處理程序代碼,并在兩次回調之間通過封裝在處理程序中管理狀態。基于事件編程的整個模型被稱為
推式模型,背著多數程序員都難以掌握的名聲。但是,多數被認為容易編程的模型都需要對文檔進行隨機訪問,從而造成效率低下,因此 SAX 享有處理 XML 最有效的標準方式的美譽,如果不是最容易的方式的話。
推薦的入門參考和教程
參考資料和其他資源
DOM
Document Object Model (DOM)
[W3C
推薦標準]是一種 XML 文檔對象模型,可用于直接訪問 XML 文檔的各個部分。在 DOM 中,文檔被模型化為一棵樹,其中每個 XML
語法成分(如元素和文本內容)都用一個節點表示。DOM 是一種
API,允許您在這種樹中導航,從父節點移動到子節點或者在兄弟節點之間移動,并利用特定節點類型的特性(比如,元素可以有屬性,而文本節點有文本數
據)。DOM 被設計成語言中立的。使用了 Object Management Group(對象管理組,OMG)的 CORBA Interface Definition Language (接口定義語言,IDL)[ISO 國際標準,編號 14750]表示 DOM 節點和支持接口。
DOM
作為一種對象模型,最初實際上是用于在 Web 瀏覽器中標準化 HTML 和 XML 對象的腳本操作。作為獨立的編程 API
使用時,有時候這種轉換非常笨拙。DOM 的演進經過了幾個級別,每個版本都在上一級別的基礎上增加了新的功能。Level 1
包括了基本的功能,Level 2 增加了對名稱空間的支持、一個 UI 事件模型、迭代器等等。Level 3 增加了用于從 XML
文檔文件中加載和保存的 API,集成了 XPath,增加了對驗證的支持等等。
DOM 一般比 SAX
更容易掌握,因為它沒有涉及到回調和復雜的狀態管理,但是 DOM 實現通常在內存中保存所有的 XML
節點,對于較大的文檔效率可能非常低。盡管許多語言都有 DOM 實現,DOM 還是努力保持語言的中立性。特定語言的擁護者常常抱怨 DOM
難以使用,不能利用任何語言的特長。結果涌現了許多針對特定語言的樹處理 API。
推薦的入門參考和教程
參考資料和其他資源
XAPI
XML Database API (XAPI)
[開
發中]是一種用于 XML 數據庫的獨立于供應商和語言(盡管是面向對象的)的 API。XML:DB 是致力于 XML
數據庫管理工具的開發人員興趣小組。XAPI 涵蓋了 XML 數據庫中數據的存儲、檢索、修改和查詢,以及對事務管理的支持。它類似于 ODBC 和
JDBC。和 DOM 一樣,XAPI 也指定使用 OMG IDL,并按照功能級別組織。Level 0 是基本的 API,Level 1 增加了
XPath 支持(XPathQueryService)。XAPI 在原生 XML 數據庫管理工具中得到了廣泛的實現,尤其是開源工具如
Apache XIndice 和 SleepyCat Berkeley XML DB。盡管如此,除了 XML:DB 規范本身外,這方面的
Web 資源還很少。 API Use Cases提供了一些在 Java 語言中使用這種 API 的很粗略的例子。
XUpdate
XUpdate
[開
發中]定義了修改 XML 文檔中的數據的更新工具。盡管 XUpdate 是由 XML:DB 小組定義的,但 XUpdate
被設計成能夠處理常規的 XML 文檔和存儲在數據庫中的 XML,甚至虛擬的 XML 數據模型。XUpdate 是一種類似 XSLT 的 XML
詞匯表,但是比 XSLT 簡單得多,總體上是一種很容易理解的詞匯表。和 XSLT 相似,它也使用 XPath
訪問修改的文檔,并使用專門的元素定義輸出操作。XUpdate 也有廣泛的實現,特別是在開源工具中,如 XML DBMS 和 XML
比較和修補工具。 XUpdate Use Cases草案也是很好的 XUpdate 入門參考。
推薦的入門參考和教程
XQuery
XQuery 1.0: An XML Query Language
[開
發中]是一種用于查詢 XML 數據源——文檔和數據庫——的規范。XQuery 是一種非常復雜的編程語言,組成了 XPath
的一個超集。XQuery 是與 XPath 2.0 一起開發的,同樣因為其復雜性而備受爭議,其實許多爭論是不必要的。XQuery
1.0/XPath 2.0 系統包括令人生畏的一大批規范定義,包括語義、語法以及核心函數庫:
推薦的入門參考和教程
- Howard Katz 撰寫的“
XQuery 簡介”介紹了 XQuery,并提供了一些例子,根據最近的工作草案作了更新(
developerWorks,2003 年 9 月)。
- Nicholas Chase 的“
使用XML Query 處理XML”講授 XQuery 并考察了 XPath 2.0 中的變化。它討論的是較早版本的工作草案,但是因為此后的變化很小,我還是推薦這個教程(
developerWorks,2002 年 9 月)。
- Per Bothner 撰寫的文章“
What
is XQuery?”,最近的
修訂論及最新的草案。
參考資料和其他資源
-
xquery.com是一個很好的 XQuery 資源集散站,還包括一個
Wiki,這是一種協作式的資源索引和討論網頁。
SQL/XML
SQL/XML
[ISO
國際標準 ISO/IEC 9075-14:2003]是 SQL 標準的一個新的分支,包括大量和 XML 有關的對 SQL
的擴展。SQL/XML 最初是由“SQLX Informal Group of Companies(非正式企業組織)”開發的,其中包括
IBM,后來交給了美國國家標準局(ANSI——維護 SQL 的標準組織)中的委員會。SQL/XML 所涉及到的范圍包括(引自 Andrew
Eisenberg 與 Jim Melton):
- SQL 數據(具體而言就是行和表,以及視圖和查詢結果)以 XML 形式表示(或者相反)的規范。
- 與 SQL 架構和 XML 架構之間的映射有關的規范,可能包括實現任何已有 XML 架構和 SQL 架構之間的映射。
- SQL 架構在 XML 中表示的規范。
- SQL 動作(插入、更新、刪除)表示的規范。
- 和 SQL 一起使用時 XML 的消息規范。
SQL/XML 與 XQuery 很少交叉,兩個標準中同時涉及的部分一般能一起工作。
參考資料和其他資源
CSS
Cascading Style Sheets (CSS)
[W3C 推薦標準]是一種將表示樣式應用于標記的系統。最知名的是在樣式化 HTML Web 頁中的應用,但尤其是從 CSS Level 2 發布以來,它也非常適合在 Web 或者其他媒介上表示 XML 文檔。把 XML 文檔映射到輸出結構通過使用
display
屬性完成。XML 文檔鏈接到它的 CSS 樣式表文檔的標準方式在
Associating Style Sheets with XML documents Version 1.0[W3C 推薦規范]中定義。
推薦的入門參考和教程
XForms
XForms 1.0
[W3C
推薦標準],不要與名稱相同的 XWindows GUI 庫混淆,這是用于 XML 數據處理的 Web
表單規范,可通過不同的媒介用于不同的平臺。XForms 希望把表單的用途和表示分開。它把表單做什么與表單看起來怎么樣分離開。它是一種 XML
詞匯表,可用于開發表單 UI 以操縱 XML 內容。XForms 最初是 XHTML
家族的一部分,但已經完全獨立出來了。盡管其復雜程度超出了需要,但看來是一種能夠把混亂的 Web 表單世界帶入正軌的技術。
推薦的入門參考和教程
- Micah Dubinko 寫的“
What
Are XForms?”對這種技術作了一般性的介紹。
- Joel Rivera 和 Len Taing 撰寫的“
準備使用 XForms”,通過幾個詳細的例子介紹了 XForms(
developerWorks,2002 年 9 月)。
- Nicholas Chase 的“
理解 XForms”更深入地分析了一系列的例子(
developerWorks,2002 年 12 月)。
SOAP
SOAP
[W3C 推薦標準](盡管使用大寫,但已經成為正式的名詞而不再是縮寫詞了)是一種協議,在使用底層 Internet 協議連接的系統之間使用 XML 通信。一些用戶認為 SOAP 是
XML Web 服務的
基礎,這是一組技術的統稱,用于管理和組織使用 XML 數據格式和 Internet 通信協議連接的系統之間交互的一組技術。SOAP
最初是在數量不多、臨時拼湊的個人之間開發的,這些人來自各種不同的公司,其中包括 IBM。之所以能夠得到迅速普及,是因為它提供了與早期對 XML
消息的研究成果相似的功能,并且有更牢固的體系結構基礎和更多的商業支持。SOAP 的開發交給了 W3C,W3C 開發了 SOAP
1.2,在體系結構上作了許多改進,但是也對許多爭議作了折衷。SOAP 定義了一種 XML 信封格式,可以包含偽 XML 載荷(SOAP
消息的實際有效載荷不能使用 XML 的所有功能,這是引起激烈爭論的一個焦點)。
Web 服務不一定必須使用 SAOP,許多人鼓吹直接在 HTTP 上交換原始 XML 文檔的觀點,這是松散地聚在“
REpresentational State Transfer (REST)”
大旗下的人吹捧的一種方法。REST 本身是它的架構師之一,Roy Fielding,為一種 Web 體系結構方式所取的名字。REST 風格
Web 服務的鼓吹者抱怨 SOAP 太復雜、XML 有效載荷像是雜耍,而且沒有充分利用 Web 的基本能力。在 SOAP
的提倡者中,最近的重點已經從 SOAP 的 RPC 源頭轉移到了所謂的 實文檔方式的 SOAP。在 RPC 方式中,傳輸的數據使用專門的 XML 符合格式(稱為 SOAP 編碼)編組成離散的數據類型。在實文檔方式中,XML 負荷由更自然的 XML 格式組成,通常更具有描述性,更便于人類閱讀。
SOAP 大廈
建立在 SOAP 基礎上的大批標準——許多已經超出了本文中所能討論的范圍。關于這些標準的信息有一些很好的資源:
至今仍然廣泛使用的一種 SOAP 先驅是
XML Remote Procedure Calls (XML-RPC)[社
區規范]。XML-RPC 定義了使用 XML 編碼通過 HTTP 通信的過程調用。之所以流行至今是因為它的簡單性(整個規范打印出來不超過 10
頁),而且現在的多數語言和許多應用程序框架,都有標準的或者容易應用的 XML-RPC
實現。它確實有一些很突出的不足,包括非常原始的數據類型化以及缺乏對字符編碼的支持(對于使用 XML 而言,這真是一個令人吃驚的瑕疵)
推薦的入門參考和教程
WSDL
根據正式的定義,
Web Services Description Language (WSDL) Version 1.2[開
發中]是“一種描述網絡服務的 XML
格式,它把網絡服務描述為對消息的一組端點操作,消息可以包含面向文檔的信息或者面向過程的信息。”它在一系列抽象層次上定義了 Web
服務中端到端通信的組件。WSDL 最初是作為 IBM 和 Microsoft 的合作項目發起的,但在 WSDL 1.2 的開發是已經交給了
W3C。WSDL 通常伴隨著 SOAP 作為 Web 服務核心技術,但也可用于描述 SOAP 之外的其他協議。
推薦的入門參考和教程
- IBM
developerWorks上的一篇文章討論了舊版本的 WSDL,即 Bilal Siddiqui 撰寫的“
使用 WSDL 部署 Web 服務”(2001 年 11 月)。
后續內容
本文綜述了和應用程序開發有關的最重要的 XML 標準。下一篇文章中,我將分析最重要的通用 XML 詞匯表。
參考資料
關于作者