内容


XML 标准概览

第 1 部分

核心标准——XML 大世界的基石

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 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 的重新介绍,强调了编码的问题,突出了其他文献中经常掩盖的一些主题。

参考资料和其他资源

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 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 教程。下面是最新的教程:

参考资料和其他资源

  • 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:
    • 第 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: StructuresXML 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中对这种技术作了透彻而浅显的介绍。

参考资料和其他资源

Schematron

Schematron Assertion Language 1.5[社区标准和草案 ISO 标准]是一种模式语言,使用了不同于 DTD、RELAX NG 和 WXS 的方法。在 Schematron 中,您需要对要检查的 XML 文档登记一组规则,而不是绘制出试图表达的 XML 格式从根节点到叶子的整个树结构。这就使得 Schematron 不仅可以作为一种独立的、非常有用的模式语言,也可以作为其他模式语言的补充。Schematron 可以表达我所讨论的其他语言所不能表达的约束,因此经常与其他语言协同使用。

推荐的入门参考和教程

参考资料与其他资源

后续内容

本文中综述了最重要的核心 XML 标准。在第 2 部分,我将介绍对于在应用程序处理中使用 XML 的人而言非常重要的标准。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=XML
ArticleID=22075
ArticleTitle=XML 标准概览: 第 1 部分
publish-date=02012004