XML 标准概览
第 1 部分
核心标准——XML 大世界的基石
系列内容:
此内容是该系列 # 部分中的第 # 部分: XML 标准概览
此内容是该系列的一部分: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 的重新介绍,强调了编码的问题,突出了其他文献中经常掩盖的一些主题。
参考资料和其他资源
- 在“ The Annotated XML Specification”中,Tim Bray 对 XML 1.0 的文本以脚注的形式作了很好的解释和说明。
- “ The XML FAQ” 是由 Peter Flynn 编辑的。
- Markus Kuhn 的“ UTF-8 and Unicode FAQ for Unix/Linux”实际上对任何平台上的用户都是很好的参考。 UTF-8 是一种很常用的 Unicode 编码。
- “ Unicode in XML and other Markup Languages” 对于需要非常严格地讨论 Unicode 与 XML 的交集的人(可能的实现者)而言,是一份正式的技术报告。
- IBM 的“ Introduction to Unicode”站点深入探讨了 Unicode 的基础。
- Open Internationalization Resources Directory对于管理国际化数据的方方面面都是很好的参考,国际化也是 XML 建立在 Unicode 基础上的核心目标。
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 解析器完整的一部分提供,但是有一些介绍性的资料专门讨论使用目录解析实体:
- Norman Walsh 在其文章“ XML Entity and URI Resolvers”中同时讨论了两种目录。
- Bob Stayton 的电子书 DocBook XSL: The Complete Guide的 第 4 章 XML 目录中只讨论了 XML 目录。
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 名称空间。此外还有:
- ZVON 提供了一个 XML namespace 教程。
- Tim Bray 所写的“ XML Namespaces by Example”,给出了一个简单的名称空间的例子。
- Anders Miller 和 Michael I. Schwartzbach 所著的“ XML Namespaces, XInclude, and XML Base”从关于 XML 名称空间的轻松介绍入手。
参考资料和其他资源
- Ronald Bourret 维护的 XML Namespaces FAQ。
- James Clark 在他的文章“ XML Namespaces”中详细分析了名称空间,并介绍了描述名称空间常用的符号。
- Elliotte Rusty Harold 在文章“ RDDL Me This: What Does a Namespace URL Locate?”中介绍了 RDDL。
XML Base
XML Base[W3C 推荐标准]提供了一种联系 XML 元素和 URI 方法,以便更精确地规定在相关的 XML 处理活动中如何解析相对 URI。比方说,如果一个 XML 元素包含使用相对 URL 的链接,要链接的绝对 URL 就要通过参考该元素的基 URL 来决定。多数 XML 处理程序都对组成文档的每个 XML 实体假定一个基 URL,可以使用 XML Base 替换这种默认设置。
推荐的入门参考和教程
- ZVON 提供了 XML Base 教程。
- 我的 IBM developerWorks教程,“ 4Suite 进行 Python 和 XML 开发,第四部分:合成和更新” (2002 年 10 月)介绍了 XML Base 以及 XPointer、 XInclude(参见后述)和 XUpdate (本系列文章将予以介绍)。
XInclude
XML Inclusions (XInclude) 1.0[开发中]提供了一种合并 XML 文档的系统。XInclude 通常用于希望将 XML 文档分成多个可管理的段的情况。可以根据需要分割文档,然后再使用 XInclude 把文档合并回去。 外部已解析实体是一种 XML 1.0 结构,允许从单独的文件中加载文档的一部分,可以完成类似的功能,从某种程度上说 XInclude 是一种不必要的规范。XInclude 提供了一些特殊的便利之处,比如在包含文档时可以选择包含文档的哪些部分。
推荐的入门参考和教程
- Elliotte Rusty Harold 在“ Using XInclude”中做了很好的介绍。
- ZVON 提供了 XInclude 教程。
XML Infoset
XML Information Set[W3C 推荐标准]也称为 XML Infoset,定义了一种抽象的方式把 XML 文档描述为一系列带有特定属性的对象,即 信息项。这种抽象数据集结合了在 XML 1.0、XML Namespaces 和 XML Base 中定义的 XML 文档的各个方面。XML Infoset 被用作其他几种规范的基础,这些规范试图把 XML 文档分解成一些组成对象的集合。
推荐的入门参考和教程
- Ken Sall 的文章“ Exploring the XML Infoset”摘录自他所著的 XML Family of Specifications: A Practical Guide。
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 的教程:
- ZVON 的 XPath 教程是一个以例子为主的教程。
- W3Schools 的 XPath 教程对这个规范的各个方面作了介绍。
- XML in a Nutshell(Elliotte Rusty Harold 与 W. Scott Means 合著)中的 第 9 章: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 进行了非常大的修改,所以要注意有许多教程所讨论的是旧版本。
- ZVON 提供了 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 教程。下面是最新的教程:
- Eve Maler 的文章“ XML Linking: State of the Art”是关于该规范中形式化概念的一般描述。
- ZVON 提供了单独的 XLink 教程: 简单链接和 扩展链接。
参考资料和其他资源
- ZVON 也提供了一份“ XLink Reference”。
- Bob DuCharme 在他的文章中“ XLink: Who Cares?”中讨论了 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:
- RELAX NG 的正式教程 核心和它的 紧凑语法。
- ZVON 提供了一个混合教程 RELAX NG and W3C XML Schema language(本系列文章将讨论)。
参考资料和其他资源
- 许多资料都链接到了 RELAX NG 主页。
- ZVON 提供了“ RELAX NG Reference”。
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 的研发工作。
推荐的入门参考和教程
- Nicholas Chase 的 developerWorks教程“ 验证 XML”同时涉及到 DTD 和 WXS(2003 年 8 月)。
- W3Schools 有一个 WXS 教程.
- W3C XML Schema 工作组在 XML Schema Part 0: Primer中对这种技术作了透彻而浅显的介绍。
参考资料和其他资源
- ZVON 提供了一份 WXS 参考。
- W3Schools 上有一个 WXS Elements Reference。
Schematron
Schematron Assertion Language 1.5[社区标准和草案 ISO 标准]是一种模式语言,使用了不同于 DTD、RELAX NG 和 WXS 的方法。在 Schematron 中,您需要对要检查的 XML 文档登记一组规则,而不是绘制出试图表达的 XML 格式从根节点到叶子的整个树结构。这就使得 Schematron 不仅可以作为一种独立的、非常有用的模式语言,也可以作为其他模式语言的补充。Schematron 可以表达我所讨论的其他语言所不能表达的约束,因此经常与其他语言协同使用。
推荐的入门参考和教程
- ZVON 提供了一个 Schematron 教程。
- Chimezie Thomas-Ogbuji 撰写了一篇介绍文章,“ Validating XML with Schematron”。
参考资料与其他资源
- Schematron 主页与 资源目录提供了许多有用的链接。
- ZVON 还提供了一份 Schematron 参考。
后续内容
本文中综述了最重要的核心 XML 标准。在第 2 部分,我将介绍对于在应用程序处理中使用 XML 的人而言非常重要的标准。
相关主题
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
- 如果希望就 XML 获得坚实的基础,请阅读 The XML Bible, 2nd Edition,Elliotte Rusty Harold 著(John Wiley & Sons,2001 年),前提是您愿意买下这本书。
- 访问开发 XML 标准的最重要组织的网站:
- Simon St. Laurent 所写的 Outsider's Guide to the W3C是一个 FAQ,澄清了这个为您带来 HTML 和 XML 的组织的许多方面。
- Robin Cover 的 The Cover Pages基本上涉及到了 XML 的每个方面,这是一个令人瞠目的、包罗万象的 XML 资源指南。
- 访问 xmlhack,XML 开发人员的新闻站点,Uche 帮助编辑。
- 在 developerWorks XML 专区 可以找到更多的 XML 资源,包括 Uche Ogbuji 的 Thinking XML专栏 。
- 了解如何才能成为一名 IBM 认证的 XML 及相关技术开发人员。