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