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