Vincent.Chan‘s Blog

常用链接

统计

积分与排名

网站

最新评论

XML 标准概览: 第 2 部分::XML 处理标准

级别: 中级

Uche Ogbuji, 首席顾问, Fourthought,Inc.

2004 年 2 月 01 日

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 部分)。

推荐的入门参考和教程

参考资料和其他资源

  • 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 最有效的标准方式的美誉,如果不是最容易的方式的话。

推荐的入门参考和教程

参考资料和其他资源

  • XML.org 的 SAX 专栏提供了很有用的资源链接。
XML 的编程语言

从一开始,XML 就受到了程序员的广泛关注。这里对使用各种语言处理 XML 的程序员列出了一些有用的资源:

Java 技术: IBM alphaworksXML 页面 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

其他: PHPXML 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。

推荐的入门参考和教程

参考资料和其他资源





回页首


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 入门参考。

推荐的入门参考和教程





回页首


XQuery

XQuery 1.0: An XML Query Language [开 发中]是一种用于查询 XML 数据源——文档和数据库——的规范。XQuery 是一种非常复杂的编程语言,组成了 XPath 的一个超集。XQuery 是与 XPath 2.0 一起开发的,同样因为其复杂性而备受争议,其实许多争论是不必要的。XQuery 1.0/XPath 2.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 很少交叉,两个标准中同时涉及的部分一般能一起工作。

参考资料和其他资源





回页首


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 推荐规范]中定义。

推荐的入门参考和教程





回页首


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 基础上的大批标准——许多已经超出了本文中所能讨论的范围。关于这些标准的信息有一些很好的资源:

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

推荐的入门参考和教程





回页首


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 词汇表。





回页首


参考资料





回页首


关于作者

Author photo

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

posted on 2006-03-18 21:27 Vincent.Chen 阅读(198) 评论(0)  编辑  收藏 所属分类: AJAX


只有注册用户登录后才能发表评论。


网站导航: