内容正在载入中,请稍后……
公告
About me
搜索
统计
其他
7 Dec.2008

XML标准概览第1部分:核心标准——XML 大世界的基石 不指定

作者: 我就是个世界   分类:技术&学习 » Pure XML   出处:本站原创            | |
原文网址为:http://www.ibm.com/developerworks/cn/xml/x-stand1/

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 的重新介绍,强调了编码的问题,突出了其他文献中经常掩盖的一些主题。

参考资料和其他资源

在“ 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 用户指定标准的过程。在 参考资料中提供了大多数链接,但这里我要解释一下在本文中用于修饰标准的一些词汇

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 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 以及 XPointerXInclude(参见后述)和 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:

第 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(本系列文章将讨论)。

参考资料和其他资源

许多资料都链接到了 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 标准的最重要组织的网站:

W3C (万维网联盟)

OASIS (结构化信息标准推进组织)

ISO (国际标准化组织),尤其是它的项目 ISO/IEC 19757 - Document Schema Definition Languages (文档模式定义语言,DSDL)

  

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 及相关技术开发人员

  

关于作者

Highslide JS


Highslide JS


Highslide JS


Uche Ogbuji 是 Fourthought Inc.的顾问和共同创始人,该公司是专为企业知识管理提供 XML 解决方案的软件供应商和咨询公司。 Fourthought 开发了 4Suite,这是一个用于 XML、RDF 和知识管理应用程序的开放源代码平台。Ogbuji 先生是一位出生于尼日利亚的计算机工程师和作家,他现在美国科罗拉多州的博耳德生活和工作。可以通过 uche.ogbuji@fourthought.com 和 Ogbuji 先生联系。

分享到QQ空间
时间:21:11 评论(0) 引用(0) 阅读(2582) Tags: ,
发表评论
  昵称 [注册]
  密码 (游客无需密码)
  网址
  电邮
OpenID登入 权限选项 表情