級別: 初級
Uche Ogbuji, 首席顧問, Fourthought, Inc.
2004 年 2 月 01 日
XML
世界非常龐大,而且還在不斷成長,存在大量不同的標準和技術(shù),它們以復雜的方式互相影響。新手很難確定哪些是 XML
最重要的方面,用戶也難以跟蹤這個領域出現(xiàn)的新生事物和變化。在這一系列的文章中,Uche Ogbuji 提供了 XML
標準的指南,并為進一步的學習推薦了廣泛的資料。
XML 變得越來越強大,得到了迅速的發(fā)展。它已經(jīng)證明自己是一種非常有價值的技術(shù),但可能也是一種令人害怕的技術(shù),如果考慮到掛在“XML”一詞下面不斷變化的各個部分。在這一系列的文章中,我將簡述我認為最重要的
XML 技術(shù),討論它們?nèi)绾卧?XML 世界中更大范圍內(nèi)的彼此融合。為了進一步評估和學習使用各種技術(shù),我還推薦了一些教程和其他有用的參考資料。
這里介紹的所有技術(shù)都是
標準,盡管這個詞本身就有點捉摸不定。標準有各種各樣的形式,而且在同一個領域中常常有多種標準互相競爭。我按照實踐的方法把標準定義為:被不同的供應商大量采用的或者有影響的、獨立于供應商的組織推薦的規(guī)范。
在第一篇文章中,我主要討論我認為是核心的 XML 技術(shù)。這些技術(shù)構(gòu)成了 XML 文檔中所表達的內(nèi)容的基礎。在以后的文章中,我將討論和開發(fā)人員處理
XML 有關的標準,和選擇一些最重要的 XML 應用(即詞匯表)。
XML
XML
1.0 (第 2 版)
[W3C 推薦標準]當然是衍生出 XML 技術(shù)大樹的主干。它在
Unicode
[Unicode Consortium 技術(shù)報告和 ISO 標準]的基礎上定義了文本格式的嚴格規(guī)則,以及
Document
Type Definition (文檔類型定義,DTD)驗證語言。該規(guī)范的當前版本(第 2 版)包含了規(guī)范的歷次修訂。它被
翻譯
成多種語言,盡管英語版本是唯一的
規(guī)范版本,就是說只有這個版本被認為具有標準的效力。
XML
1.1
[開發(fā)中]是改變了
結(jié)構(gòu)良好的
XML 文檔的定義的第一個修訂版。主要的變化是修訂了 XML 規(guī)范中對字符的處理,使其更自然地適應 Unicode 規(guī)范的變化,并通過引用
Character
Model for the World Wide Web(萬維網(wǎng)字符模型)1.0 [開發(fā)中],提供了不同 Unicode 版本字符的規(guī)范化。XML
1.1 還增加了行結(jié)束字符列表,新增加的 NEL 用于在 IBM 大型機系統(tǒng)中表示行結(jié)束(EOL)。這種變化存在爭議,有人認為對大型機用戶帶來的有限好處不值得做這種基礎性的改變。還有一些其他的爭論,因為一些評論者發(fā)現(xiàn)所有的修改都太穩(wěn)妥了,在
XML 版本變換中不會造成各種可能的互操作性問題。
XML 是基于
Standard Generalized Markup Language(標準通用標記語言,SGML)的,后者由 ISO 8879:1986 [ISO 標準]定義。它在很大程度上簡化了 SGML,包括一些調(diào)整使其更適合于 Web 環(huán)境。
推薦的入門參考和教程
- 以 Doug Tidwell 的文章“
XML 入門” (
developerWorks, 2002 年 8 月)作為起點。
- ZVON 的
XML 教程和
DTD 教程有多種語言的版本。
- Ken Sall 所著的
XML Family of Specifications: A Practical Guide中的
Excerpts一章提供了簡單的介紹。
- W3Schools 和 W3C 沒有任何從屬關系,提供了包羅萬象的
XML 教程。
- Mike Brown 的“
skew.org
XML 教程”是對 XML 的重新介紹,強調(diào)了編碼的問題,突出了其他文獻中經(jīng)常掩蓋的一些主題。
參考資料和其他資源
Catalogs
XML
Catalogs
[OASIS 委員會規(guī)范]定義了一種格式,指導 XML 處理程序把 XML
實體標識符解析成實際的文檔。比如,給定一個
DTD 的系統(tǒng)標識符和公共標識符,
實體目錄可用于規(guī)定
XML 處理程序從哪里加載 DTD。
系統(tǒng)標識符通常使用
Uniform Resource
Identifiers(統(tǒng)一資源標識符,URI)給出,后者受
RFC
2396: Uniform Resource Identifiers [IETF RFC]的控制。URI 僅僅是對 Web 瀏覽器或者類似工具中所用的一般
URL 的擴展。所有的 URL 都是 URI,但是 URI 還包括 URN,URN 由
RFC
2141: Uniform Resource Names [IETF RFC]控制,這是使用名稱而不是位置標志 Web 資源的一種方式(請參閱“
The
URN Charter”)。
公共標志符通常用
SGML 中定義的 Formal Public Identifiers(正式公共標志符,F(xiàn)PI)指定。目錄可能在這樣的情況下使用:所用的計算機不能訪問
URL 所指定的網(wǎng)絡資源,或者企業(yè)希望用當?shù)匕姹敬嫱獠抠Y源。
XML 目錄本身是一個 XML 文檔,不過是一種用于 SGML 的較老的格式,而 XML 使用更簡單文本定義了一種目錄格式:
Entity
Management, OASIS Technical Resolution 9401:1997 [OASIS 標準]。這種格式經(jīng)常被稱為
OASIS Open Catalog。
推薦的入門參考和教程
目錄處理通常作為 XML 解析器完整的一部分提供,但是有一些介紹性的資料專門討論使用目錄解析實體:
|
多種風格的標準
有幾種組織和非正式的團體參與了為 XML 用戶指定標準的過程。在
參考資料中提供了大多數(shù)鏈接,但這里我要解釋一下在本文中用于修飾標準的一些詞匯
W3C
正式發(fā)布的
推薦標準,在技術(shù)上講僅僅是關于進一步標準化的建議,但是由于該組織自身的權(quán)威性往往成為
事實上的標準。首先是
工作草案,然后成為
候選推薦標準(提出來供開發(fā)人員通過實現(xiàn)進行測試的最終形式),接下來是
提議的推薦標準(準備進行推薦標準的待定 W3C 投票),最后規(guī)范進入推薦標準狀態(tài)。
國際標準化組織(ISO)
可能是世界上最權(quán)威的標準體。它的許多標準在相關行業(yè)中都具有法律效力。
結(jié)構(gòu)化信息標準推進組織(OASIS)
大約從 SGML 的時代開始在結(jié)構(gòu)上就發(fā)生了變化,但工作的成果是類似的。過去 OASIS 所稱的
Technical Resolutions(技術(shù)解決方案)現(xiàn)在變成了
Committee Specifications(委員會規(guī)范),目的和 W3C 推薦標準是類似的。
Internet
工程任務組(IETF)
是一種依靠基層力量發(fā)達昌盛的組織模型,同時也嘗試引入正式組織的一些節(jié)制手段。差不多能夠訪問
Internet 的任何人都可以提交
Internet
草案,并建議作為一種可能的標準。一個指導小組對草案進行了評估,并可能推薦作為
Request
for Comment(請求注釋,RFC)發(fā)布。RFC 可以標記為
Standards
Track RFC(標準跟蹤 RFC)或者直接成為
Standard
RFC(標準 RFC),但是成為 RFC 的多數(shù)文檔都經(jīng)過詳細的考察,并且經(jīng)常已經(jīng)很好地實現(xiàn)過。
最后還要向
XML 社區(qū)致意,他們創(chuàng)建非正式的但是重要的標準的努力填補了大型組織留下的空白。SAX、RDDL 和 EXSLT 是一些非常著名的例子。OASIS 通過努力已經(jīng)成為吸引這類標準爭鳴的陣地,但是愿意通過郵件列表打造一種事實標準的仍然不乏其人。
|
|
XML Namespaces
Namespaces
in XML 1.0
[W3C 推薦標準]提供了一種統(tǒng)一命名 XML 文檔中的元素和屬性的機制。一些這些簡單的例子可以解釋
XML NameSpace 幕后的動機:假設您有一個 XML 詞匯表,其中名為“head”和“body”的元素作為解剖學描述的標記,但是您希望在文檔中嵌入
XHTML (參見后述)片段。XHTML
也定義了“head”和“body”元素。如何從同名的宿主詞匯表元素中區(qū)分 XHTML 元素呢?使用 XML Namespaces 就可以為每種詞匯表指定一個標記。在
XML 名稱空間中,每種詞匯表被稱為一個名稱空間,有專門的語法表示詞匯表標記。每個元素或?qū)傩悦己鸵粋€名稱空間聯(lián)系,這樣就能把解剖學上的“head”和
XHTML “head”區(qū)分開來。在 XML 專家中,對 XML 名稱空間曾經(jīng)存在爭議,因為對 XML 處理模型增加了一點復雜性,一些人認為這樣做帶來的好處不能抵消引起的問題。無論如何,XML
名稱空間已經(jīng)在 XML 用戶中得到了廣泛的認可,差不多所有的 XML 處理技術(shù)都能處理 XML 名稱空間。
Namespaces in XML 1.1
[開發(fā)中]是一次更新,結(jié)合了勘誤表與補充,其中包括對國際化 URI 的支持。
經(jīng)常提出的和 XML 名稱空間有關的一個問題是,應該標識哪一類資源的名稱空間 URI。Jonathan Borden 和 Tim BrayOne
領導的 XML 專家組提出了
Resource
Directory Description Language (資源目錄描述語言,RDDL)作為在名稱空間中打包信息的一種標準。RDDL
使用 XHTML 提供詞匯表的簡單描述,用內(nèi)嵌的
XLink(將在本文中討論)提供到重要資源的指針,幫助理解和處理這種名稱空間。
RDDL
2.0[開發(fā)中]是一個升級版本,尋求通過兩種選擇代替 XLink:
Resource
Description Framework(資源描述框架,RDF)(后面討論)以及在郵件列表上為
W3C
Technical Architecture Group(技術(shù)體系結(jié)構(gòu)組,TAG)開發(fā)的替代 XML 鏈接建議。
推薦的入門參考和教程
上面提到的一些 XML 1.0 教程涉及到了 XML 名稱空間。此外還有:
參考資料和其他資源
XML Base
XML Base
[W3C
推薦標準]提供了一種聯(lián)系 XML 元素和 URI 方法,以便更精確地規(guī)定在相關的 XML 處理活動中如何解析相對 URI。比方說,如果一個
XML 元素包含使用相對 URL 的鏈接,要鏈接的絕對 URL 就要通過參考該元素的基 URL 來決定。多數(shù) XML
處理程序都對組成文檔的每個 XML 實體假定一個基 URL,可以使用 XML Base 替換這種默認設置。
推薦的入門參考和教程
XInclude
XML Inclusions (XInclude) 1.0
[開發(fā)中]提供了一種合并 XML 文檔的系統(tǒng)。XInclude 通常用于希望將 XML 文檔分成多個可管理的段的情況。可以根據(jù)需要分割文檔,然后再使用 XInclude 把文檔合并回去。
外部已解析實體是一種 XML 1.0 結(jié)構(gòu),允許從單獨的文件中加載文檔的一部分,可以完成類似的功能,從某種程度上說 XInclude 是一種不必要的規(guī)范。XInclude 提供了一些特殊的便利之處,比如在包含文檔時可以選擇包含文檔的哪些部分。
推薦的入門參考和教程
XML Infoset
XML Information Set
[W3C 推薦標準]也稱為 XML Infoset,定義了一種抽象的方式把 XML 文檔描述為一系列帶有特定屬性的對象,即
信息項。這種抽象數(shù)據(jù)集結(jié)合了在 XML 1.0、XML Namespaces 和 XML Base 中定義的 XML 文檔的各個方面。XML Infoset 被用作其他幾種規(guī)范的基礎,這些規(guī)范試圖把 XML 文檔分解成一些組成對象的集合。
推薦的入門參考和教程
Canonical XML ("c14n")
Canonical
XML Version 1.0
[W3C 推薦規(guī)范]是一種生成 XML 文檔物理表示的標準方法,稱為規(guī)范化形式,用于統(tǒng)一 XML
語法中不影響語義的幾種變體。比如,在 XML 中屬性的順序并不重要,因此如果一個文檔中所有的屬性都按照字母順序排列,而另一個相同的文檔以不同的方式保存屬性,盡管其物理表示不同,但對于
XML 1.0 而言兩個文檔是等價的。這有時候會造成應用中的問題。比如,如果希望用數(shù)字加密的簽名保護文檔不被篡改,改變屬性的順序會破壞簽名,盡管對
XML 1.0 來講文檔實際上并沒有改變。解決的辦法是在簽名、文本比較或者其他此類操作之前把文檔轉(zhuǎn)化成規(guī)范的形式(這個過程稱為“規(guī)范化(c14n)”)。這樣就可以保證正確地接納
XML 1.0 中認為不重要的變動。
有時候需要比較或者簽署的 XML 實際上是一個更大的文檔的一部分。即便如此,c14n 通常也需要解決這種問題以便處理名稱空間聲明這樣的細節(jié)。如果需要把 c14n 嚴格限制在一個文檔子集中,就必須使用相關的算法
Exclusive XML Canonicalization Version 1.0[W3C 推薦標準]。
XPath
XML Path Language (XPath) 1.0
[W3C 推薦標準]是處理 XML 文檔部分的一種語法和處理模型。它包括一些通用表達式語言的特性,被設計成一種小型的語言,以便在 XML 系統(tǒng)中進行應用程序中立的處理。比如,可以使用 XPath 定位文檔中所有的節(jié)標題元素。
除了 XML 1.0 本身,XPath 可能是最成功的 XML 技術(shù)。它是
XSLT(本系列文章中間加以論述)的核心,后者是一種非常成功的 XML 轉(zhuǎn)換語言,差不多所有的平臺上都提供它處理 XML。
XPath 2.0[開發(fā)中]增加了新的特性,包括對
W3C XML Schema(后面將討論)的支持和許多新的核心功能。這是一個飽受爭議的規(guī)范,因為它的龐大增加了復雜性;許多用戶和實現(xiàn)者(包括我自己)都說除非 XPath 2.0 得到很大的簡化,否則就避免使用它。
推薦的入門參考和教程
基本上所有關于 XSLT 的介紹都同時涉及到 XPath。這里列出專門討論 XPath 的教程:
XPointer
XPointer Framework
[W3C 推薦標準]定義了一種語言,可用語音用 XML 文檔中的片段。對于使用帶有井號(#)的 URL 鏈接到 XML 文檔中的特定片段,您可能已經(jīng)非常熟悉了。在鏈接和引用 XML 文檔時,XPointer 帶來了類似但是更廣泛的能力。這種框架可以和
xpointer() scheme[開發(fā)中]、
element() scheme[W3C 推薦標準]以及
xmlns() scheme[W3C 推薦標準]一起使用,這些標準定義了在 XPointer 框架中表達所關心的文檔片段的具體要求。
XPointer 經(jīng)歷了一段艱難的歷程,飽受非議。XPointer 工作組本身的成員開發(fā)了一種相反的建議,
FIXptr
[社區(qū)標準]。幾種替代的 XPointer 方案包括
the
xpath1() scheme[IETF Internet 草案]。
推薦的入門參考和教程
在成為推薦標準之前,XPointer 進行了非常大的修改,所以要注意有許多教程所討論的是舊版本。
XLink
XML
Linking Language (XLink) 1.0
[W3C 推薦標準]提供了一種在 XML 文檔中表示鏈接的通用框架。需要鏈接的超文本是
Web 的基礎,加入完善的鏈接能力一直被認為是 XML 的基石。事實上,XLink 最初被稱為 "XML part 2"。不幸的是實踐證明,為
XML 定義一種鏈接系統(tǒng)和為 HTML 這樣的靜態(tài)詞匯表定義鏈接系統(tǒng)相比要遠遠復雜得多。XLink 的開發(fā)經(jīng)歷了漫長的過程,遭受了種種非議。比如,XHTML
(本系列文章將討論)的開發(fā)者決定不使用 XLink 而創(chuàng)建他們自己的系統(tǒng),稱為
HLink
[開發(fā)中]。即使到現(xiàn)在,XLink 已經(jīng)完成兩年了,對它的采用仍然非常緩慢。。
無論如何,XLink 都非常重要,處在許多 XML 相關項目中的中心位置,與基本的、單向的 HTML 鏈接相比提供了更豐富的鏈接功能。XLink 頁提供了這種鏈接(
簡單鏈接),同時還提供了更復雜的可以有多個端點的鏈接(
擴展鏈接),甚至還有在鏈接的文檔中沒有表達而是在專門的中心文檔(稱為
鏈接庫)中表示的鏈接。
推薦的入門參考和教程
您可能會找到討論該語言的舊的、廢止的草案的 XLink 教程。下面是最新的教程:
參考資料和其他資源
RELAX NG
RELAX
NG
[OASIS 委員會規(guī)范和 ISO 草案標準]是一種
XML
模式語言,即一種可用于定義和限制 XML 詞匯表的語言。最初的 XML 模式語言是 XML 1.0 自己定義的文檔類型定義(DTD)。但是,一些人不喜歡
DTD,因為它丑陋的語法、表達文本和標記結(jié)構(gòu)的局限性,并且難以處理 XML Namespaces。出現(xiàn)了幾種新的 XML 模式語言以取代或者增強
DTD,其中包括 RELAX NG,以其簡單性和表達能力而聞名。RELAX NG 的核心規(guī)范定義了架構(gòu)的 XML 語法,此外
RELAX
NG Compact Syntax [OASIS 委員會規(guī)范]還為 RELAX NG 架構(gòu)定義了一種簡單的文本語法。人們期望這種文本語法作為補充添加到
ISO 標準中。RELAX NG 是稱為
Document
Schema Definition Languages(文檔模式定義語言,DSDL)的整個 ISO XML 模式處理系統(tǒng)的研究工作的一部分。
推薦的入門參考和教程
- 閱讀 Nicholas Chase 的入門教程“
理解
RELAX NG”,它可以幫助您迅速領略 RELAX NG 的簡單性和強大功能,包括它的完全基于 XML 的語法和緊湊語法(
developerWorks,2003
年 12 月)。
- David Mertz 在
developerWorks 上的“XML 問題”專欄,在其系列文章“使用 RELAX NG 反擊”中專門討論了 RELAX NG:
- 第 1 部分考察了 RELAX NG 的一般語法,并涉及到數(shù)據(jù)類型化(2003 年 3 月)。
- 第 2 部分通過解決幾個附加的語義問題繼續(xù)前面的討論,并考察了可以使用 RELAX NG 的工具(2003 年 3 月)。
- 第 3 部分詳細探討了 RELAX NG 緊湊語法,并揭示了緊湊語法和 XML 語法之間的完全對應關系(2003 年 5 月)。
- RELAX NG 的正式教程
核心和它的
緊湊語法。
- ZVON 提供了一個混合教程
RELAX NG and W3C XML Schema language(本系列文章將討論)。
參考資料和其他資源
W3C XML Schema
XML Schema Part 1: Structures
和
XML Schema Part 2: Datatypes[W3C
推薦標準]定義了另一種 XML 模式語言。 第一部分用于約束文檔的結(jié)構(gòu),第二部分則用于約束簡單元素和屬性的內(nèi)容。W3C XML Schema
(WXS) 由于過于復雜和表達能力不足而受到了批評,結(jié)果造成與其他語言如 RELAX NG
的競爭。逐漸地,人們開始僅僅使用最適合自身的模式語言,而根據(jù)需要求助于轉(zhuǎn)換工具從一種形式轉(zhuǎn)化成另一種形式,這類工具的大量涌現(xiàn)給人留下了深刻的印
象。許多其他的規(guī)范已經(jīng)采用了 WXS DataTypes 規(guī)范,盡管也有開發(fā)其他數(shù)據(jù)類型系統(tǒng)的呼聲。工作組已經(jīng)開始 WXS 1.1
的研發(fā)工作。
推薦的入門參考和教程
參考資料和其他資源
Schematron
Schematron Assertion Language 1.5
[社
區(qū)標準和草案 ISO 標準]是一種模式語言,使用了不同于 DTD、RELAX NG 和 WXS 的方法。在 Schematron
中,您需要對要檢查的 XML 文檔登記一組規(guī)則,而不是繪制出試圖表達的 XML 格式從根節(jié)點到葉子的整個樹結(jié)構(gòu)。這就使得 Schematron
不僅可以作為一種獨立的、非常有用的模式語言,也可以作為其他模式語言的補充。Schematron
可以表達我所討論的其他語言所不能表達的約束,因此經(jīng)常與其他語言協(xié)同使用。
推薦的入門參考和教程
參考資料與其他資源
后續(xù)內(nèi)容
本文中綜述了最重要的核心 XML 標準。在第 2 部分,我將介紹對于在應用程序處理中使用 XML 的人而言非常重要的標準。
參考資料
關于作者
|
|
|
Uche
Ogbuji 是
Fourthought
Inc.的顧問和共同創(chuàng)始人,該公司是專為企業(yè)知識管理提供 XML 解決方案的軟件供應商和咨詢公司。 Fourthought
開發(fā)了
4Suite,這是一個用于
XML、RDF 和知識管理應用程序的開放源代碼平臺。Ogbuji 先生是一位出生于尼日利亞的計算機工程師和作家,他現(xiàn)在美國科羅拉多州的博耳德生活和工作。可以通過
uche.ogbuji@fourthought.com
和 Ogbuji 先生聯(lián)系。
|