新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 关于 XML 的一般性技术讨论,提供 XML入门资料 和 XML教程
    [返回] 计算机科学论坛XML.ORG.CN讨论区 - XML技术『 XML基础 』 → XML标准概览 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6650 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: XML标准概览 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18407
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 XML基础 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 XML标准概览

    XML 标准概览:  第 1 部分   


    核心标准——XML 大世界的基石
    级别:入门

    Uche Ogbuji (uche.ogbuji@fourthought.com)
    首席顾问, Fourthought, Inc.
    2004 年 2 月

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

    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 名称空间。此外还有:

    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:
    第 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 的人而言非常重要的标准。


    XML 标准概览:第 2 部分  英文原文   


    Uche Ogbuji (uche.ogbuji@fourthought.com)
    首席顾问, Fourthought,Inc.
    2004 年 2 月

    XML 世界非常庞大,而且还在不断成长,存在大量不同的标准和技术,它们以复杂的方式互相影响。新手很难确定哪些是 XML 最重要的方面,用户也难以跟踪这个领域出现的新生事物和变化。在这一系列的文章中,Uche Ogbuji 提供了 XML 标准的指南,并为进一步的学习推荐了广泛的资料。Uche Ogbuji 继续关于 XML 的论述,这次主要讨论 XML 处理技术。
    XML 变得越来越强大,得到了迅速的发展。它已经证明自己是一种非常有价值的技术,但可能也是一种令人害怕的技术,如果考虑到挂在“XML”一词下面不断变化的各个部分。在这一系列的文章中,我将简述我认为最重要的 XML 技术,讨论它们如何在 XML 世界中更大范围内的彼此融合。为了进一步评估和学习使用各种技术,我还推荐了一些教程和其他有用的参考资料。

    这里介绍的所有技术都是 标准,尽管这个词本身就有点捉摸不定。标准有各种各样的形式,而且在同一个领域中常常有多种标准互相竞争。我按照实践的方法把标准定义为:被不同的供应商大量采用的或者有影响、独立于供应商的组织推荐的规范。

    在第一篇文章 中,我主要讨论了核心 XML 技术。(关于各种标准开发团体和规范分类的概述,请参阅 文章的侧栏。)本文中我将讨论和开发人员处理 XML 有关的标准。下一篇文章中将介绍选择的一些最重要的 XML 应用(即词汇表)。

    XSLT
    Extensible Stylesheet Language Transformations (XSLT) 1.0 [W3C 推荐标准]是一种转换语言,描述从输入 XML 文档到输出树的转换。比如,输出树可以是 HTML 文档的形式也可以是另一种 XML 格式。因此,XSLT 可以作为把 XML 呈现为遗留浏览器显示格式的语言,也可以保持格式不变作为对 XML 文件操作的语言。转换本身使用一种专门的词汇表定义为 XML 文档。使用XPath(前文 已述)访问原文档和生成表达处理。专门的指令建立处理规则(XSLT 是一种声明性语言)并控制输出树的创建。 XSLT 1.0 是一种非常成功的语言,涵盖了多数常用的 XML 处理任务。如果熟悉 XML,学习 XSLT 的基础并不难,但精通这门语言还是需要很大的努力。它有一种设计很好的扩展机制。它的声明性处理模型使代码很容易维护和重用。把 XML 文档链接到它的 XSLT 样式表文档的标准方式在 Associating Style Sheets with XML documents, Version 1.0 [W3C 推荐标准]中定义。XSLT 规范被 翻译 成了各种不同的语言。

    如前所述,XSLT 有一种很好的扩展机制,允许您使用自己选择的语言定义另外的功能。但更好的是,您甚至不必去编写扩展,因为别人已经替您做了。EXSLT [社区规范]是这类扩展的一个标准集,采用了隐藏实现的定义方式。EXSLT 试图囊括通常需要的多数扩展,比如日期处理、正则表达式和数学操作。许多 XSLT 实现都实现了一个或多个 EXSLT 模块。

    XSLT 2.0 [开发中]根据收集的 XSLT 1.0 使用经验提供了一些重要的改进,但缺点是对 XPath 2.0 的密切依赖,我认为后者存在根本上的缺陷(请参阅 第 1 部分)。

    推荐的入门参考和教程


    W3Schools 提供了一个简要的 XSLT 教程。
    ZVON 提供了更深入的 XSLT 教程。
    IBM developerWorks 提供了几种 XSLT 教程,包括:
    “用 XSLT 创建多用途 Web 内容” (2003 年 3 月)
    “转化 XML 文档” (2000 年 5 月)
    “用 4Suite 进行 Python 和 XML 开发,第二部分:4XPath和4XSLT”(2001 年 10 月),其中包括 XSLT 的简要介绍
    如果准备使用 EXSLT,请参阅“EXSLT 实例”(developerWorks,2003 年 2 月)。
    参考资料和其他资源


    ZVON 提供了一个 XSLT Reference。
    Dave Pawson 的 XSL FAQ 谈到了 XSLT 和 XPath 以及 XSL-FO(本系列文章后面将述及)。
    TopXML 分类提供了 100 多个 XSLT 样式表的例子。
    Jeni Tennison 以其对 XSLT 奥秘清晰而深刻的阐述而知名,她的 XSLT 页面 是常见 XSLT 问题非常棒的参考。
    SAX
    Simple API for XML (SAX) [社区规范]是一种事件驱动的 API。XML 标记的不同部分(如起始和结束标签、文本、实体)触发特殊的事件,开发人员为这些事件注册处理程序代码。然后,解析器根据输入的 XML 发出事件流,处理程序代码依次处理这些事件。

    SAX 的创立基本上是一个马拉松式的过程,从 1997 年后期由 XML-DEV 邮件列表 发起,长期以来这个邮件列表一直是 XML 专家的主要据点。David Megginson 领导了这个讨论组,造就了最成功的 XML 研究项目之一,没有任何大公司或标准团体的资助。在 SAX 之前,每种解析器都通过自己私有的 API 在 XML 结构与处理程序代码之间通信,SAX 提供了重要的统一性。通常提供 SAX 驱动程序的解析器都把底层的解析器事件转化成 SAX 标准事件,以支持代码的移植。SAX 最初的想法是用 Java 语言开发,但已经普及到多种语言和环境,尽管有时候它的以 Java 为中心的特点增加了移植的复杂性。SAX 目前处在第二代,包括 XML 名称空间处理和相对于文档结构可以选择的某些事件报告。

    在主流语言中,基于事件的接口通常使用 回调 函数实现,这是一种在 GUI 之类的编程中常见的方式。在面向对象语言中,回调函数通常是对象的注册方法,使用多态匹配方法名和处理程序代码,并在两次回调之间通过封装在处理程序中管理状态。基于事件编程的整个模型被称为 推式 模型,背着多数程序员都难以掌握的名声。但是,多数被认为容易编程的模型都需要对文档进行随机访问,从而造成效率低下,因此 SAX 享有处理 XML 最有效的标准方式的美誉,如果不是最容易的方式的话。

    推荐的入门参考和教程


    请参阅 Nicholas Chase 所写的 developerWorks 教程,“理解 SAX”(2003 年 7 月)。
    Sun 为 Java 技术用户提供了一个 SAX 教程。
    C++ 开发人员应该看一看 Martin Naughton 所写的“The Joy of SAX”。
    我的文章“Taking Applications to the Next Level with XML, Part 3: The Toolbox of XML APIs” 涉及到了 SAX 和 DOM(参见后述)。
    Perl 程序员应该看一看“Using Perl with XML (part 1)”,其中涉及到了 SAX。
    参考资料和其他资源


    XML.org 的 SAX 专栏 提供了很有用的资源链接。
    XML 的编程语言
    从一开始,XML 就受到了程序员的广泛关注。这里对使用各种语言处理 XML 的程序员列出了一些有用的资源:

    Java 技术:IBM alphaworks XML 页面; Apache XML 页面;Sun 的 Java 技术和 XML 社区

    C/C++:“C/C++ 开发人员:充实您的 XML 工具箱” (developerWorks,2001 年 9 月)

    Python: Special Interest Group for XML Processing in Python; XML.com 上的“Python & XML”专栏; “The State of the Python-XML Art, 2003”;“Uche Ogbuji 关于在 Python 中处理 XML 的 Akara 网站”

    Perl: “Perl 开发人员:充实您的 XML 工具箱” (developerWorks,2001 年 6 月); Perl-XML Project;XML.com 上的“Perl & XML”; XMLperl.com

    其他: PHP XML Classes; <rubyXML/>;XML 与 Scheme

    DOM
    Document Object Model (DOM) [W3C 推荐标准]是一种 XML 文档对象模型,可用于直接访问 XML 文档的各个部分。在 DOM 中,文档被模型化为一棵树,其中每个 XML 语法成分(如元素和文本内容)都用一个节点表示。DOM 是一种 API,允许您在这种树中导航,从父节点移动到子节点或者在兄弟节点之间移动,并利用特定节点类型的特性(比如,元素可以有属性,而文本节点有文本数据)。DOM 被设计成语言中立的。使用了 Object Management Group(对象管理组,OMG)的 CORBA Interface Definition Language (接口定义语言,IDL) [ISO 国际标准,编号 14750]表示 DOM 节点和支持接口。

    DOM 作为一种对象模型,最初实际上是用于在 Web 浏览器中标准化 HTML 和 XML 对象的脚本操作。作为独立的编程 API 使用时,有时候这种转换非常笨拙。DOM 的演进经过了几个级别,每个版本都在上一级别的基础上增加了新的功能。Level 1 包括了基本的功能,Level 2 增加了对名称空间的支持、一个 UI 事件模型、迭代器等等。Level 3 增加了用于从 XML 文档文件中加载和保存的 API,集成了 XPath,增加了对验证的支持等等。

    DOM 一般比 SAX 更容易掌握,因为它没有涉及到回调和复杂的状态管理,但是 DOM 实现通常在内存中保存所有的 XML 节点,对于较大的文档效率可能非常低。尽管许多语言都有 DOM 实现,DOM 还是努力保持语言的中立性。特定语言的拥护者常常抱怨 DOM 难以使用,不能利用任何语言的特长。结果涌现了许多针对特定语言的树处理 API。

    推荐的入门参考和教程


    请阅读 Nicholas Chase 所写的 developerWorks 教程“理解 DOM”(2003 年 7 月)。
    W3Schools 提供的教程 主要讨论将 DOM Level 1 用于 HTML 以及 XML 在浏览器 JavaScript 脚本中的应用。
    Perl 程序员应该阅读“Using Perl with XML (part 1)”,这篇教程讨论了 DOM。
    Python 程序员应该看一看 标准 Python Library Reference 上的 DOM 页。
    参考资料和其他资源


    ZVON 提供了 DOM Level 1 和 DOM Level 2 很好的参考指南,有大量的 JavaScript 例子。
    XAPI
    XML Database API (XAPI) [开发中]是一种用于 XML 数据库的独立于供应商和语言(尽管是面向对象的)的 API。XML:DB 是致力于 XML 数据库管理工具的开发人员兴趣小组。XAPI 涵盖了 XML 数据库中数据的存储、检索、修改和查询,以及对事务管理的支持。它类似于 ODBC 和 JDBC。和 DOM 一样,XAPI 也指定使用 OMG IDL,并按照功能级别组织。Level 0 是基本的 API,Level 1 增加了 XPath 支持(XPathQueryService)。XAPI 在原生 XML 数据库管理工具中得到了广泛的实现,尤其是开源工具如 Apache XIndice 和 SleepyCat Berkeley XML DB。尽管如此,除了 XML:DB 规范本身外,这方面的 Web 资源还很少。API Use Cases 提供了一些在 Java 语言中使用这种 API 的很粗略的例子。

    XUpdate
    XUpdate [开发中]定义了修改 XML 文档中的数据的更新工具。尽管 XUpdate 是由 XML:DB 小组定义的,但 XUpdate 被设计成能够处理常规的 XML 文档和存储在数据库中的 XML,甚至虚拟的 XML 数据模型。XUpdate 是一种类似 XSLT 的 XML 词汇表,但是比 XSLT 简单得多,总体上是一种很容易理解的词汇表。和 XSLT 相似,它也使用 XPath 访问修改的文档,并使用专门的元素定义输出操作。XUpdate 也有广泛的实现,特别是在开源工具中,如 XML DBMS 和 XML 比较和修补工具。XUpdate Use Cases 草案也是很好的 XUpdate 入门参考。

    推荐的入门参考和教程


    Arun Gaikwad 的“Xindice 简介”在最后谈到了 XUpdate(developerWorks,2002 年 9 月)
    “4Suite 进行 Python 和 XML 开发,第四部分:合成和更新”中有一节介绍 XUpdate(developerWorks,2002 年 10 月)。
    X-Hive 的 在线 XUpdate 演示 是通过实验学习这种语言的一种好方法。
    XQuery
    XQuery 1.0: An XML Query Language [开发中]是一种用于查询 XML 数据源——文档和数据库——的规范。XQuery 是一种非常复杂的编程语言,组成了 XPath 的一个超集。XQuery 是与 XPath 2.0 一起开发的,同样因为其复杂性而备受争议,其实许多争论是不必要的。XQuery 1.0/XPath 2.0 系统包括令人生畏的一大批规范定义,包括语义、语法以及核心函数库:

    XML Query Use Cases [开发中]通过带有 XQuery 例子的预想应用场景把握着 XQuery 的发展方向。
    XQuery 1.0 和 XPath 2.0 Data Model [开发中]精确定义了 XSLT 2.0 或 XQuery 处理程序可以包含的信息,以及 XSLT 2.0、XQuery 和 XPath 2.0 表达式中所有允许的值。
    XQuery 1.0 和 XPath 2.0 Formal Semantics [开发中]在其数据模型的基础上,给出了 XPath 2.0 和 XQuery 1.0 规范中每种表达式精确的、形式化的含义。
    XPath 2.0 [开发中]定义了 XPath 2.0 的核心语法。
    XQuery 1.0 和 XPath 2.0 Functions and Operators [开发中]定义了表达式中常用的处理任务。
    XQuery 1.0 [开发中]定义了 XQuery 1.0 的核心语法。
    XML Syntax for XQuery 1.0 (XQueryX) [开发中]提供了一种可选的 XQuery 的 XML 表示。
    XSLT 2.0 和 XQuery 1.0 Serialization [开发中]定义了数据模型中的值在 XML、HTML 和文本中是什么样子,如何在处理程序输出中替换 XSLT 中的节。
    XSLT 2.0 [开发中]不是 XQuery 家族的直接成员,但是和 XPath 2.0 与 XQuery 1.0 密切相关,并且完全依赖于前者。
    推荐的入门参考和教程


    Howard Katz 撰写的“XQuery 简介”介绍了 XQuery,并提供了一些例子,根据最近的工作草案作了更新(developerWorks,2003 年 9 月)。
    Nicholas Chase 的“使用XML Query 处理XML”讲授 XQuery 并考察了 XPath 2.0 中的变化。它讨论的是较早版本的工作草案,但是因为此后的变化很小,我还是推荐这个教程(developerWorks,2002 年 9 月)。
    Per Bothner 撰写的文章“What is XQuery?”,最近的 修订 论及最新的草案。
    参考资料和其他资源


    xquery.com 是一个很好的 XQuery 资源集散站,还包括一个 Wiki,这是一种协作式的资源索引和讨论网页。
    SQL/XML
    SQL/XML [ISO 国际标准 ISO/IEC 9075-14:2003]是 SQL 标准的一个新的分支,包括大量和 XML 有关的对 SQL 的扩展。SQL/XML 最初是由“SQLX Informal Group of Companies(非正式企业组织)”开发的,其中包括 IBM,后来交给了美国国家标准局(ANSI——维护 SQL 的标准组织)中的委员会。SQL/XML 所涉及到的范围包括(引自 Andrew Eisenberg 与 Jim Melton):

    SQL 数据(具体而言就是行和表,以及视图和查询结果)以 XML 形式表示(或者相反)的规范。
    与 SQL 架构和 XML 架构之间的映射有关的规范,可能包括实现任何已有 XML 架构和 SQL 架构之间的映射。
    SQL 架构在 XML 中表示的规范。
    SQL 动作(插入、更新、删除)表示的规范。
    和 SQL 一起使用时 XML 的消息规范。
    SQL/XML 与 XQuery 很少交叉,两个标准中同时涉及的部分一般能一起工作。

    参考资料和其他资源


    Andrew Eisenberg 和 Jim Melton 撰写的“SQL/XML and the SQLX Informal Group of Companies [PDF]”列举了 SQL/XML 的成就。
    J. E. Funderburk、S. Malaika 和 B. Reinwald 撰写的“XML programming with SQL/XML and XQuery [PDF]”(IBM Systems Journal,Vol. 41, No. 4, 2002)彻底分析了所有这些 XML 和 DBMS 技术的交叉之处。
    SQL/XML 草案现在是正式的,只有向 ISO(或者所在国家的相关会员)付费后才能得到一个副本,但是如果希望很好地理解该标准,可以使用 2003 年 3 月的一个较早版本 [PDF]。
    CSS
    Cascading Style Sheets (CSS) [W3C 推荐标准]是一种将表示样式应用于标记的系统。最知名的是在样式化 HTML Web 页中的应用,但尤其是从 CSS Level 2 发布以来,它也非常适合在 Web 或者其他媒介上表示 XML 文档。把 XML 文档映射到输出结构通过使用 display 属性完成。XML 文档链接到它的 CSS 样式表文档的标准方式在 Associating Style Sheets with XML documents Version 1.0 [W3C 推荐规范]中定义。

    推荐的入门参考和教程


    Simon St. Laurent 撰写的“On Display: XML Web Pages with Mozilla”是一篇较老的文章,但使用 Mozilla 浏览器(包括与 MSIE 5 的比较)的例子较好地说明了其中的基本原理。
    ZVON 的“CSS 2 Tutorial”讲解如何使用 CSS 2 显示 XML 文档。
    Dr. David Mertz 的 developerWorks 技巧文章,“技巧: 使用 CSS2 显示 XML 文档”,对详尽的例子作简要的说明(2001 年 12 月)。
    XForms
    XForms 1.0 [W3C 推荐标准],不要与名称相同的 XWindows GUI 库混淆,这是用于 XML 数据处理的 Web 表单规范,可通过不同的媒介用于不同的平台。XForms 希望把表单的用途和表示分开。它把表单做什么与表单看起来怎么样分离开。它是一种 XML 词汇表,可用于开发表单 UI 以操纵 XML 内容。XForms 最初是 XHTML 家族的一部分,但已经完全独立出来了。尽管其复杂程度超出了需要,但看来是一种能够把混乱的 Web 表单世界带入正轨的技术。

    推荐的入门参考和教程


    Micah Dubinko 写的“What Are XForms?”对这种技术作了一般性的介绍。
    Joel Rivera 和 Len Taing 撰写的“准备使用 XForms”,通过几个详细的例子介绍了 XForms(developerWorks,2002 年 9 月)。
    Nicholas Chase 的“理解 XForms”更深入地分析了一系列的例子(developerWorks,2002 年 12 月)。
    SOAP
    SOAP [W3C 推荐标准](尽管使用大写,但已经成为正式的名词而不再是缩写词了)是一种协议,在使用底层 Internet 协议连接的系统之间使用 XML 通信。一些用户认为 SOAP 是 XML Web 服务 的基础,这是一组技术的统称,用于管理和组织使用 XML 数据格式和 Internet 通信协议连接的系统之间交互的一组技术。SOAP 最初是在数量不多、临时拼凑的个人之间开发的,这些人来自各种不同的公司,其中包括 IBM。之所以能够得到迅速普及,是因为它提供了与早期对 XML 消息的研究成果相似的功能,并且有更牢固的体系结构基础和更多的商业支持。SOAP 的开发交给了 W3C,W3C 开发了 SOAP 1.2,在体系结构上作了许多改进,但是也对许多争议作了折衷。SOAP 定义了一种 XML 信封格式,可以包含伪 XML 载荷(SOAP 消息的实际有效载荷不能使用 XML 的所有功能,这是引起激烈争论的一个焦点)。

    Web 服务不一定必须使用 SAOP,许多人鼓吹直接在 HTTP 上交换原始 XML 文档的观点,这是松散地聚在“REpresentational State Transfer (REST)”大旗下的人吹捧的一种方法。REST 本身是它的架构师之一,Roy Fielding,为一种 Web 体系结构方式所取的名字。REST 风格 Web 服务的鼓吹者抱怨 SOAP 太复杂、XML 有效载荷像是杂耍,而且没有充分利用 Web 的基本能力。在 SOAP 的提倡者中,最近的重点已经从 SOAP 的 RPC 源头转移到了所谓的 实文档 方式的 SOAP。在 RPC 方式中,传输的数据使用专门的 XML 符合格式(称为 SOAP 编码)编组成离散的数据类型。在实文档方式中,XML 负荷由更自然的 XML 格式组成,通常更具有描述性,更便于人类阅读。

    SOAP 大厦
    建立在 SOAP 基础上的大批标准——许多已经超出了本文中所能讨论的范围。关于这些标准的信息有一些很好的资源:

    IBM developerWorks 上的 Web 服务标准列表
    W3C Web Services Activity 主页
    webservices.xml.com
    至今仍然广泛使用的一种 SOAP 先驱是 XML Remote Procedure Calls (XML-RPC) [社区规范]。XML-RPC 定义了使用 XML 编码通过 HTTP 通信的过程调用。之所以流行至今是因为它的简单性(整个规范打印出来不超过 10 页),而且现在的多数语言和许多应用程序框架,都有标准的或者容易应用的 XML-RPC 实现。它确实有一些很突出的不足,包括非常原始的数据类型化以及缺乏对字符编码的支持(对于使用 XML 而言,这真是一个令人吃惊的瑕疵)

    推荐的入门参考和教程


    W3C 有正式的 SOAP 入门,推荐它是因为它对 XML 传输格式的关注。
    Perl 程序员可以看看 Paul Kulchenko 的“Quick Start with SOAP”,尽管这篇文章很老了,但它讨论的主要是开发人员所用的 API 而不是实际的传输格式,仍然很实用。我建议您最好特别熟悉 SOAP 的有线格式。
    Python 程序员可以看看 IBM developerWorks 上的 Python Web 服务开发人员专栏。
    关于实文档风格的 SOAP 推荐以下资源。请参阅 James McCarthy 的文章“Reap the benefits of document style Web services”(developerWorks,2002 年 6 月)。
    Paul Prescod 的“Second Generation Web Services” 和“REST and the Real World”,对 REST 的观点和动机作了很好地介绍。
    对 XML-RPC 感兴趣的 Perl 用户应该从“Using XML-RPC for Web services: Getting started with XML-RPC in Perl”入手,然后参考“XML-RPC Middleware”,作者都是 Joe Johnston(developerWorks,2001 年 3 月)。
    关注 XML-RPC 的 Python 用户可以阅读 Mike Olson 与 Uche Ogbuji 撰写的“针对 Python 的 XML-RPC ”(developerWorks,2002 年 8 月)。
    Eric Kidd 的“XML-RPC HOWTO”讨论了如何在 Java 语言、C、C++、Perl、Ruby 和 NET 中使用这种协议。
    WSDL
    根据正式的定义,Web Services Description Language (WSDL) Version 1.2 [开发中]是“一种描述网络服务的 XML 格式,它把网络服务描述为对消息的一组端点操作,消息可以包含面向文档的信息或者面向过程的信息。”它在一系列抽象层次上定义了 Web 服务中端到端通信的组件。WSDL 最初是作为 IBM 和 Microsoft 的合作项目发起的,但在 WSDL 1.2 的开发是已经交给了 W3C。WSDL 通常伴随着 SOAP 作为 Web 服务核心技术,但也可用于描述 SOAP 之外的其他协议。

    推荐的入门参考和教程


    IBM developerWorks 上的一篇文章讨论了旧版本的 WSDL,即 Bilal Siddiqui 撰写的“使用 WSDL 部署 Web 服务”(2001 年 11 月)。
    后续内容
    本文综述了和应用程序开发有关的最重要的 XML 标准。下一篇文章中,我将分析最重要的通用 XML 词汇表。


    XML 标准概览:  第 3 部分  英文原文   

    Uche Ogbuji (uche.ogbuji@fourthought.com)
    首席顾问, Fourthought, Inc.
    2004 年 3 月

    XML 世界非常庞大,而且还在不断成长,存在大量不同的标准以复杂的方式互相影响。新手很难确定哪些是 XML 最重要的方面,用户也难以跟踪这个领域出现的新生事物和变化。XML 是一种基本语法,可用于开发本地或全局的词汇表。XML 成功的关键就在于一些非常重要的数据格式定义成了 XML 词汇表。本文中,Uche Ogbuji 将介绍其中最重要的一些词汇表。
    XML 变得越来越强大,得到了迅速的发展。它已经证明自己是一种非常有价值的技术,但可能也是一种令人害怕的技术,如果考虑到挂在“XML”一词下面不断变化的各个部分。在这一组文章中,我将简述我认为最重要的 XML 技术,讨论它们如何在 XML 世界中更大的范围内彼此融合。为了进一步研究和学习以使用各种技术,我还推荐了一些教程和其他有用的参考资料。

    这里介绍的所有技术都是标准,尽管这个词本身就有点捉摸不定。标准有各种各样的形式,而且在同一个领域中常常有多种标准互相竞争。我按照实践的方法把标准定义为:被不同的供应商大量采用的或者有影响、独立于供应商的组织推荐的规范。

    在本系列的第一篇文章中主要讨论了核心 XML 技术。(关于各种标准开发团体的概述以及标准的分类请参阅那篇文章中的侧栏。) 第二篇文章中探讨了和开发人员处理 XML 有关的标准。本文中我将介绍最重要的一些 XML 应用(也称为词汇表,虽然不很准确)。和原来的 SGML 一样,XML 也是一种元语言,是定义其他语言的语法基础。这些语言(如 SGML 中的 HTML,XML 中的 XHTML)是应用——不要与程序员编写的应用程序(软件应用)如 IBM DB2 混淆。

    在第 4 部分,我将就以前所述的这些信息加以比较,提供一个方便的交叉索引。

    XHTML
    XHTML 1.0 [W3C 推荐标准]基本上是对 HTML 4 的改写,使其成为结构良好的 XML。HTML 是一种 SGML 应用,当 XML 作为对 SGML 在 Web 应用上的简化和规范化开发出来的时候,HTML(本身是 Web 上的通用语言)就成为采用 XML 的首选目标。于是出现了 HTML 的一种变体,称为 XHTML。XHTML 研究的目标是一种更容易解析(因为 XML 的语法更加严格)的 HTML 语言。XHTML 很容易用现成的 XML 工具处理,力求更好地分离内容与表示。XHTML 是最古老的 XML 应用之一,有许多利益集团在不同的部分和版本中起过作用。我将尽力对其中的大部分加以概括。

    与三种HTML 4 DTD——Strict、Transitional 和 Frameset 对应,XHTML 1.0 定义了不同的 DTD 和名称空间。Modularization of XHTML [W3C 推荐标准]提供了一个框架,把 XHTML 分解成单独的模块,作为不同的 DTD 定义。比如,用于定义列表的所有元素和属性组成一个模块,而和表示有关的元素类型则放在另一个模块中。这样,就可以通过增加、减少和修改通用的独立模块开发和重新定义 XHTML。沿着这条路线,第一步就是 XHTML Basic [W3C 推荐标准],它定义了任何作为 XHTML 的语言都必须具有的最小 XHTML 模块集。XHTML Basic 本身可以作为 Web 客户的内容语言,如移动电话、PDA、寻呼机和置顶盒。XHTML 1.1 [W3C 推荐标准]基本上就是使用模块框架分解的 XHTML 1.0 Strict DTD。

    XHTML 2.0 [开发中]是对 XHTML 的重写,没有考虑与 HTML 的向后兼容。这种想法差不多就是为 Web 编写一种全新的内容语言,学习过去的经验而又不束缚于过去。其中大的变化有:

    取消了 <br/>、 <img/> 以及其他认为过于面向表示的元素
    取消 HTML 风格的表单,改为支持 XForm(本系列文章前已述及)
    取消 HTML 风格的链接改为 HLink(本系列文章中前已述及)
    用 XML Event 代替许多 JavaScript 驱动的动态任务
    用 XFrame 代替 HTML 风格的框架
    更重要的是,XHTML 2.0 做了许多扩展,增强了作者表达内容结构和含义的能力。打破向后兼容性引起了争议。一些评论者认为保持 (X)HTML 的名称只修改版本号会造成混乱。其他人则说这些修改非常必要,而 XHTML 实际上仍然是一种可扩展超本文标记语言,因此保留原来的名称非常合适。

    XHTML 常常和其他嵌入格式一起使用,如 MathML、RDF、SVG、SMIL 和 VoiceXML(后面都将予以介绍)。这种混合文档称为多模的或者非单体的。W3C、ISO 以及其他组织正投入巨大的努力鼓励对这种文档的强力支持。

    推荐的入门参考和教程


    Sathyan Munirathinam 的 “XHTML:两种语言的力量”(developerWorks,2002 年 7 月),以及 Molly Holzschlag 撰写的 “XHTML 1.0: Marking up a new dawn”(developerWorks,2000 年 10 月),提供了 XHTML 1.0 的简要介绍。
    Nicholas Chase 的 “Web 的未来:XHTML 2.0”(developerWorks,2002 年 9 月)尽管写得比较早,仍然是关于 XHTML 2.0 所作修订的很好介绍。
    如果希望理解这种语言的构造块,教程 “XHTML 的模块化 ”(Nicholas Chase,developerWorks,2001 年 10 月)非常有用。
    参考资料和其他资源


    W3Schools 提供了一份 XHTML 1.0 Reference,其中包括浏览器兼容性指南。
    ZVON 的 XHTML 1.0 参考包括一些例子和到标准的链接。
    Docbook
    Docbook 原来是一种流行的 SGML 格式,用于编纂书籍和文档,尤其是带有较多技术特性的文档。后来增加了一个 XML 版本,DocBook XML V4.2 [OASIS 委员会规范]是最新的成果。Docbook 非常流行,得到了许多工具的支持,其中很多工具非常成熟。它作为避免混合表示问题与内容格式的一个范例而受人尊敬。最近,一些开发人员开始抱怨它从过去的版本继承了太多的负担,纷纷讨论(甚至包括它的主要开发者 Norm Walsh)为这种格式重新开发一种新的、不向后兼容的版本。

    Text Encoding Initiative (TEI) 甚至比 Docbook 更古老,这种文档格式在某种程度上与 Docbook 的应用范围类似,区别在于它通常处理的是人文学科的文本而非技术文本。TEI 本身不是一种 SGML 或 XML 应用,而是一组用于构造语言(DTD)的指导原则。最常用的 TEI 变体是 TEI Lite [社区标准]。TEI 以其复杂性驰名,这在一定程度上限制了它被大量采用,但是它得到了很好的维护,并在一些社区中有狂热的用户。

    推荐的入门参考和教程


    David Mertz, Ph.D. 撰写的 “DocBook XML 方言入门”(developerWorks,2000 年 10 月)是一篇高水平的介绍。
    Norman Walsh 的 “Introducing DocBook” 是一篇非常深入的介绍,采用了演示幻灯片的形式。
    “XML 问题: TEI -- 文本编码规范”(David Mertz, Ph.D.,developerWorks,2003 年 9 月)对 TEI 做了高水平的介绍。
    参考资料和其他资源


    DocBook.org 基本上是关于 Norman Walsh 所著 DocBook: The Definitive Guide(O'Reilly & Associates, 1999) 一书的站点。它把全书的内容都放在了网上,并作了很好的链接,这是关于 DocBook 各个方面的很好很详细的参考。
    DocBook Wiki 是关于这种语言的信息和讨论的协作空间。
    XSL-FO
    Extensible Stylesheet Language Formatting Objects (XSL-FO) [W3C 推荐标准]是一种使用 XML 定义的表示语言。(注意,链接规范的标题是 "Extensible Stylesheet Language (XSL)",但内容事实上只包括 XSL 的格式化对象方面。)XSL-FO 是一种 XML 格式,可被任何用户代理用于按照开发人员给定的精确规范呈现内容。它的角色类似于 Web 用户界面中的 XHTML, 但是更加复杂,以便表达适用于打印形式的格式化细节。这些细节和级联样式表(CSS——本系列文章前已述及)中所规定的没有什么不同,但是在 XSL-FO 中,这些细节构成了这种标记语言本身的一个实例,而不是呈现单个标记的指令。

    XSL-FO 常用作 XSLT(本系列文章前已述及)的输出格式。事实上,最初 XSLT 和 XSL-FO 是一个系统,称为 XSL,但是工作组明智地将这两个部分分成了两个不同的规范。有多种开放源代码的或者商业化的工具可以将 XSL-FO 转化成 TeX、Adobe 的 PDF 以及其他适于打印和排版的(非 XML)输出格式。这种应用模式使 XSL-FO 非常流行,但是 XSL-FO 一直希望成为 WYSIWYG 工具或者类似工具的原生呈现格式,它的这种应用也开始受到推动。XSL-FO 1.1 [开发中]是这种语言的升级,增加了注释、索引、书签之类的特性,并增强了图像的处理能力。

    推荐的入门参考和教程


    Doug Tidwell 的教程 “XSL 格式化对象(XSL-FO)基础知识”(developerWorks,2003 年 2 月)是一个非常友好的起点。他的后续文章“XSL-FO 高级技术”(developerWorks,2003 年 2 月)介绍如何使用 XSL-FO 完成更加复杂的任务,如格式化数据、创建复杂的文档、把 HTML 元素转化成格式化对象然后再转化成 PDF 文档。最后,他的“HTML 至格式化对象(FO)转换指南”(developerWorks,2003 年 2 月)示范了如何使用 XSLT 模板把常用的 HTML 元素转化成格式化对象,以便更容易转换为 PDF。
    Rodolfo M. Raya 的“使用 XSL-FO 创建可打印文档”(developerWorks,2001 年 1 月)主要讨论将 XSL-FO 用于创建可打印的数据库报表。
    J. David Eisenberg 的“Using XSL Formatting Objects”是一篇简要的介绍,强调了 XSL-FO 强大的国际化支持。
    参考资料和其他资源


    ZVON 提供了一个 XSL FO 参考,勾勒了元素之间的一些关系,但是没有深入每种元素的语义。
    Dave Pawson 的 XSL FAQ 探讨了 XSL-FO 以及 XSLT 和 XPath。
    SVG
    Scalable Vector Graphics (SVG) 1.1 [W3C 推荐标准]是一种描述二维图像的语言。它主要是一种向量图形语言,尽管也支持一些光栅图形特性。SVG 的非凡雄心是提供一种实用的、灵活的、使用(以冗长闻名的)XML 表示的图像格式,而且在这点上做的很成功。SVG 的特性包括:嵌套转换、剪辑路径、alpha 蒙板、光栅过滤效果、模板对象,当然还有可扩展性。SVG 也支持动画、缩放和移动视图、各种图形原语、分组、脚本、超链接、结构化元数据、CSS、一种专用的 DOM 超集(DOM 和 CSS 前已述及),并且很容易嵌入其他 XML 文档。SVG 的一些设计决策经历了不很激烈的争论,其中包括向量路径在单个属性中使用空格分隔的数字列表表示,但是总体上 SVG 已经成为应用最广泛的并受到热烈欢迎的一种 XML 应用。该规范已经被翻译成了多种语言。

    SVG 1.1 是对 SVG 1.0 [W3C 推荐标准]的更新,增加了一些新特性,也包括一些更正。最大的区别是 SVG 1.1 以类似 XHTML 1.1+ 的方式进行了模块化。这种模块化使得 SVG 能够扩展甚至精简,就像 Mobile SVG Profiles: SVG Tiny and SVG Basic [W3C 推荐标准]那样。后者定义了 SVG 模块的精简集,适用于移动电话和 PDA。SVG 1.2 [开发中]致力于增加许多新工具,使 SVG 不仅作为一种图像格式,而且成为具有广泛应用前景的平台。

    推荐的入门参考和教程


    Nicholas Chase 撰写的教程“可伸缩向量图形介绍”(developerWorks,2002 年 2月)提供了许多例子。
    J. David Eisenberg 的“An Introduction to Scalable Vector Graphics”是一篇很好的快速入门文章。
    W3Schools SVG 教程涵盖了最常用的元素。
    参考资料和其他资源


    SVG Wiki,一个协作资源索引和讨论网页,是关于这种语言的各种信息的公共消息交换中心。
    ZVON 的 SVG Reference 提供了元素之间的关系图和一些例子。
    VoiceXML
    Voice Extensible Markup Language (VoiceXML) Version 2.0 [开发中]是一种创建音频、语音和电话应用程序的语言。它包含的音频对话框具有以下特点:语音合成、数字音频、声音识别和电话音质拨号输入和话音输入录制。它寻求把基于 Web 的开发和内容传递的优势带入交互式语音响应应用程序中。VoiceXML 是 W3C Speech Interface Framework [开发中]的一部分,后者还包括其他的标准,由于这些标准与电话行业的界限非常模糊,这里就不讨论了。VoiceXML 2.0 标志着 VoiceXML 规范从 VoiceXML Forum 转向 W3C,前者仍然在努力改进这种技术。关于 VoiceXML 已经有了一些专利声明,其中一些意味着 VoiceXML 用户将面临版权和许可费的问题。

    推荐的入门参考和教程


    W3C 职员 Dave Raggett 撰写了一篇很好的介绍文章,“Getting started with VoiceXML 2.0”。
    稍微深一点的教程,请参阅 Vivek Malhotra 的“Introduction to Voice XML”(developerWorks,2001 年 11 月)。
    VoiceXML Forum 提供了一个交互式系列教程。
    参考资料和其他资源


    ZVON 的 VoiceXML Reference 突出了例子。
    FreeSpeech Developer Network 也提供了一份 VoiceXML Reference。
    MathML
    Mathematical Markup Language (MathML) 2.0 [W3C 推荐标准]是一种 XML 语言,按照该规范的说法,其目的是“促进数学和科学内容在 Web 上,以及其他应用程序如计算机代数系统、打印排版及语音合成中的使用和重用。MathML 可用于对能够高质量显示的数学符号表示编码,也可用于为语义起着更重要作用的应用程序对数学内容编码,如科学软件或语音合成。”MathML 常用于在教育、科学论文、工业规范、规章内容等领域中表示等式、公式或者类似的信息。这个版本对 MathML 1.01 [W3C 推荐标准]增加了一些相对较新的特性。MathML 经常和 XHTML、SVG 以及其他应用一起使用。

    推荐的入门参考和教程


    Robert Miner 与 Jeff Schaeffer 合作的“A Gentle Introduction to MathML”是一篇很好的入门文章。
    Michael Kohlhase 的“MathML: Presenting and Capturing Mathematics for the Web (PDF)”更长内容也更深。
    参考资料和其他资源


    ZVON 的 MathML 2 参考更类似一个索引,反映了元素之间的关系。
    Synchronized Multimedia Integration Language (SMIL)
    SMIL 2.0 [W3C 规范],按照 W3C 的说法,“支持简单地编辑交互式[音频/视频]演示文稿。SMIL 通常用于[‘丰富媒体’或多媒体]演示文稿,其中集成了流式音频和视频、图像、文本或者任何其他媒体类型。SMIL是一种简单易学的类 HTML 语言,许多 SMIL 演示文稿都是使用简单的[文本编辑器]编写的。”SMIL 是 W3C Synchronized Multimedia activity 的一个产品,已经升级到了 SMIL 1.0 [W3C 推荐标准],增加了和动画、元数据、内容控制、链接、定时与同步、事件处理、过渡效果等有关的特性。

    推荐的入门参考和教程


    Anne Zieger 的“熟悉 SMIL 2.0”(developerWorks,2002 年 9 月)从高层次上概述了这种技术及其实现。
    Lynda Hardman 与 Lloyd Rutledge 的“SMIL 2.0 -- Interactive Multimedia on the Web”[PDF] 是一篇深入的教程。
    W3Schools 提供了一个 SMIL 2.0 教程。
    参考资料和其他资源


    荷兰的 CWI (Centrum voor Wiskunde en Informatica) 提供了一个 Experimental SMIL validator。
    RDF
    差不多在 W3C 致力于以 XML 为代表的下一代标记技术的同时,它也开始了下一代 Web 资源形式化描述技术的研究。Resource Description Framework (RDF) [W3C 推荐标准]是一种模型,用于描述一组 Web 资源声明。这些声明被概念化为三元组,每一个都包含主语(一个 URI——本系列文章前已述及)、谓词(也是一个 URI)和对象(一个 URI 或字面数据值)。要理解这种声明的意义,可以想一想描述 Web 页面的 HTML meta 标签。如果套用在 RDF 上,主语就是 Web 页面本身的 URI,谓词是一个标准 URI 表示一般的描述,而对象就是描述的实际文本。通过大量使用 URI,RDF 希望尽量减少这些声明成分标识的歧义,从而更加形式化以便于机器处理。RDF 能否实现这一目标还存在争议,但是 RDF 以其非常活跃的社区和范围广泛的工具而知名。

    RDF 是 W3C Semantic Web activity 的支柱;Semantic Web 是 Web 的一种视像,不仅仅是内容的表示,还包括内容的注释以帮助表达它的含义。比如,在 Semantic Web 中描述 Web 资源时,可以区分 "python"(一种蛇)和 "python"(一种计算机编程语言)这样的概念。RDF 标准化由大量规范组成,包括:

    Resource Description Framework (RDF): Concepts and Abstract Syntax [W3C 推荐标准]提出了目标、核心概念、基本数据模型以及 RDF 的抽象语法。
    RDF/XML Syntax Specification [W3C 推荐标准]定义了 RDF 的一种通用 XML 表示。许多观察者包括我自己,都抱怨 RDF/XML 语法可怜的标记设计。
    RDF Vocabulary Description Language 1.0: RDF Schema [W3C 推荐标准]定义了一个 RDF 词汇表,可用于定义其他 RDF 词汇表。
    RDF Semantics [W3C 推荐标准]不是供内心缺乏勇气的人看的,它探讨了 RDF 数据模型底层的形式数学理论。
    Web Ontology Language (OWL) [W3C 推荐标准]是 RDF 的一个应用,通常用 RDF/XML 编码,增加了丰富的词汇表可用于对 RDF 资源进行正式分类和归纳。

    推荐的入门参考和教程


    我的文章“The Languages of the Semantic Web”讨论了 RDF 与 Semantic Web 技术的动机和基础,主要针对 Web 开发人员。
    W3C 的 RDF Primer 是非常适当的入门文章。
    参考资料和其他资源


    Dave Beckett's RDF Resource Guide 是关于 RDF、OWL 和 Semantic Web 更多信息的权威资源。
    XML Topic Maps
    Topic Maps [ISO 国际标准,编号 13250]提供了组织信息的一个系统,在某些方面是与 RDF 竞争的一种 Semantic Web 技术。具体而言,XML Topic Maps [ISO 13250 的一部分]是 Topic Maps 一种 Web 友好的版本,使用 XML 语法,并以 URI 作为标识符。与 RDF 相似,Topic Maps 定义了一种类似图的模型,但更细微的差别和这样一个事实有关,即 Topic Maps 的一个重要规定是实际概念与其计算机表示的区分。Topic Maps 的这种做法是 Semantic Web 的一种基本工具,还是增加了不必要的复杂性,在 Topic Maps 与 RDF 支持者之间的这种争论永远不会划上句号。XML Topic Maps 使用了一种非常清晰的 XML 语法,这种语法基于 XLink(本系列文章前已述及)。

    推荐的入门参考和教程


    我的文章“Think XML:从书本学习 XML Topic Maps”(developerWorks,2003 年 7 月)做了相当简要的介绍。
    Lars Marius Garshol 的“What Are Topic Maps?”做了很具体的介绍。
    参考资料和其他资源


    关于 Topic Maps 信息的主要资源站点有 Topicmaps.net、TopicMaps.org 和 topicmap.com。
    只是浅尝辄止
    在本系列文章中,在有限的空间中选择哪些内容进行讨论让我煞费苦心。很多信息不可能包含进来,尤其是关于 XML 应用的这篇文章。XML 的一个优点同时也是祸根,它让每个人都可以很容易地定义自己的语言。目前存在的难以计数的词汇表都可以称为这种或那种形式的标准。在形形色色的目标之间,我主要把目光放在那些最流行、采用最广泛的那些标准上。

    您还可以找到关于正式商业文档交换的许多标准,要了解这些数不清的选择,您可以看看下面列出的参考资料,既有私有的也有标准的。在我的Thinking XML 专栏中也讨论了许多这样的标准。

    下一篇文章是本系列的最后一篇文章,我将对讲述过的内容进行比较,并一一列出以便交叉参考。

    参考资料

    如果希望就 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 专栏。

    [此贴子已经被作者于2004-4-16 21:27:53编辑过]

       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/3/2 20:38:00
     
     boystones 帅哥哟,离线,有人找我吗?魔羯座1979-1-8
      
      
      头衔:独孤客
      等级:大一(高数修炼中)
      文章:35
      积分:136
      门派:XML.ORG.CN
      注册:2004/4/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给boystones发送一个短消息 把boystones加入好友 查看boystones的个人资料 搜索boystones在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看boystones的博客2
    发贴心情 
    帮版主 顶一下,我正在努力学习xml中,希望大家能多帮帮小弟
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/4/17 14:03:00
     
     GoogleAdSense魔羯座1979-1-8
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML基础 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/7/18 23:34:30

    本主题贴数2,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    140.625ms