级别: 初级
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 的人而言非常重要的标准。
参考资料
关于作者