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

作者:我就是个世界 发表于:2008-12-07
作者: 来源:IBM developerWorks 中国网站 原文网址为: [url=http://www.ibm.com/developerworks/cn/xml/x-stand2/][color=#c0c0c0]http://www.ibm.com/developerworks/cn/xml/x-stand2/[/color][/url]

XML 世界非常庞大,而且还在不断成长,存在大量不同的标准和技术,它们以复杂的方式互相影响。新手很难确定哪些是 XML 最重要的方面,用户也难以跟踪这个领域出现的新生事物和变化。在这一系列的文章中,Uche Ogbuji 提供了 XML 标准的指南,并为进一步的学习推荐了广泛的资料。Uche Ogbuji 继续关于 XML 的论述,这次主要讨论 XML 处理技术。[separator]

XML 变得越来越强大,得到了迅速的发展。它已经证明自己是一种非常有价值的技术,但可能也是一种令人害怕的技术,如果考虑到挂在“XML”一词下面不断变化的各个部分。在这一系列的文章中,我将简述我认为最重要的 XML 技术,讨论它们如何在 XML 世界中更大范围内的彼此融合。为了进一步评估和学习使用各种技术,我还推荐了一些教程和其他有用的参考资料。

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

在 [url=http://www.ibm.com/developerworks/cn/xml/x-stand1/index.html][color=#5c81a7]第一篇文章[/color][/url]中,我主要讨论了核心 XML 技术。(关于各种标准开发团体和规范分类的概述,请参阅 [url=http://www.ibm.com/developerworks/cn/xml/x-stand1/index.html#sidebar1][color=#5c81a7]文章的侧栏[/color][/url]。)本文中我将讨论和开发人员处理 XML 有关的标准。下一篇文章中将介绍选择的一些最重要的 XML 应用(即词汇表)。

XSLT

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

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

[b][url=http://www.w3.org/TR/xslt20/][color=#5c81a7]XSLT 2.0[/color][/url] [/b][开发中]根据收集的 XSLT 1.0 使用经验提供了一些重要的改进,但缺点是对 XPath 2.0 的密切依赖,我认为后者存在根本上的缺陷(请参阅 [url=http://www.ibm.com/developerworks/cn/xml/x-stand1/index.html][color=#5c81a7]第 1 部分[/color][/url])。

[b][size=3]推荐的入门参考和教程[/size][/b]

W3Schools 提供了一个简要的 [url=http://www.w3schools.com/xsl/][color=#5c81a7]XSLT 教程[/color][/url]。

ZVON 提供了更深入的 [url=http://www.zvon.org/xxl/XSLTutorial/Books/Book1/][color=#5c81a7]XSLT 教程[/color][/url]。

IBM [i]developerWorks[/i] 提供了几种 XSLT 教程,包括:

“ [url=http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=84988][color=#5c81a7]用 XSLT 创建多用途 Web 内容[/color][/url]” (2003 年 3 月)

“ [url=http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp][color=#5c81a7]转化 XML 文档[/color][/url]” (2000 年 5 月)

“ [url=http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=84888][color=#5c81a7]用 4Suite 进行 Python 和 XML 开发,第二部分:4XPath和4XSLT[/color][/url]”(2001 年 10 月),其中包括 XSLT 的简要介绍

如果准备使用 EXSLT,请参阅“ [url=http://www.ibm.com/developerworks/cn/xml/x-exslt/index.html][color=#5c81a7]EXSLT 实例[/color][/url]”( [i]developerWorks[/i],2003 年 2 月)。

[b][size=3]参考资料和其他资源[/size][/b]

ZVON 提供了一个 [url=http://www.zvon.org/xxl/XSLTreference/Output/index.html][color=#5c81a7]XSLT Reference[/color][/url]。

Dave Pawson 的 [url=http://www.dpawson.co.uk/xsl/][color=#5c81a7]XSL FAQ[/color][/url]谈到了 XSLT 和 XPath 以及 XSL-FO(本系列文章后面将述及)。

TopXML 分类提供了 [url=http://www.topxml.com/xsltstylesheets/default.asp][color=#5c81a7]100 多个 XSLT 样式表的例子[/color][/url]。

Jeni Tennison 以其对 XSLT 奥秘清晰而深刻的阐述而知名,她的 [url=http://www.jenitennison.com/xslt/][color=#5c81a7]XSLT 页面[/color][/url]是常见 XSLT 问题非常棒的参考。



SAX

[b][url=http://www.saxproject.org/][color=#5c81a7]Simple API for XML (SAX)[/color][/url] [/b][社区规范]是一种事件驱动的 API。XML 标记的不同部分(如起始和结束标签、文本、实体)触发特殊的事件,开发人员为这些事件注册处理程序代码。然后,解析器根据输入的 XML 发出事件流,处理程序代码依次处理这些事件。

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

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

[b][size=3]推荐的入门参考和教程[/size][/b]

请参阅 Nicholas Chase 所写的 [i]developerWorks[/i]教程,“ [url=http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=84979][color=#5c81a7]理解 SAX[/color][/url]”(2003 年 7 月)。

Sun 为 Java 技术用户提供了一个 [url=http://java.sun.com/xml/jaxp/dist/1.0.1/docs/tutorial/sax/index.html][color=#5c81a7]SAX 教程[/color][/url]。

我的文章“ [url=http://www.intel.com/cd/ids/developer/asmo-na/eng/20259.htm][color=#5c81a7]Taking Applications to the Next Level with XML, Part 3: The Toolbox of XML APIs[/color][/url]” 涉及到了 SAX 和 DOM(参见后述)。

Perl 程序员应该看一看“ [url=http://www.devshed.com/c/a/Perl/Using-Perl-with-XML-part-1/][color=#5c81a7]Using Perl with XML (part 1)[/color][/url]”,其中涉及到了 SAX。

[b][size=3]参考资料和其他资源[/size][/b]

XML.org 的 [url=http://www.xml.org/xml/resources_focus_sax.shtml][color=#5c81a7]SAX 专栏[/color][/url]提供了很有用的资源链接。

[img]http://www.dbacontest.net/Upfiles/BeyondPic/2008-07/20087103587941359.gif[/img]

[b]XML 的编程语言[/b]

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

[b]Java 技术:[/b] [url=http://www.alphaworks.ibm.com/xml][color=#5c81a7]IBM [i]alphaworks[/i]XML 页面 [/color][/url]; [url=http://xml.apache.org/][color=#5c81a7]Apache XML 页面[/color][/url]; [url=http://java.sun.com/xml/][color=#5c81a7]Sun 的 Java 技术和 XML 社区[/color][/url]

[b]C/C++:[/b]“ [url=http://www.ibm.com/developerworks/cn/xml/x-ctlbx/index.html][color=#5c81a7]C/C++ 开发人员:充实您的 XML 工具箱[/color][/url]” ( [i]developerWorks[/i],2001 年 9 月)

[b]Python: [/b][url=http://www.python.org/sigs/xml-sig/][color=#5c81a7]Special Interest Group for XML Processing in Python[/color][/url]; XML.com 上的“ [url=http://www.xml.com/pub/q/pyxml][color=#5c81a7]Python & XML[/color][/url]”专栏; “ [url=http://www.xml.com/pub/a/2003/09/10/py.html][color=#5c81a7]The State of the Python-XML Art, 2003[/color][/url]”;“ [url=http://uche.ogbuji.net/tech/akara/nodes/2003-01-01/pyxml-akara][color=#5c81a7]Uche Ogbuji 关于在 Python 中处理 XML 的 Akara 网站[/color][/url]”

[b]Perl:[/b] “ [url=http://www.ibm.com/developerworks/cn/xml/perl-xml-toolkit/index.html][color=#5c81a7]Perl 开发人员:充实您的 XML 工具箱[/color][/url]” ( [i]developerWorks[/i],2001 年 6 月); [url=http://perl-xml.sourceforge.net/][color=#5c81a7]Perl-XML Project[/color][/url];XML.com 上的“ [url=http://www.xml.com/pub/q/perlxml][color=#5c81a7]Perl & XML[/color][/url]”; [url=http://www.xmlperl.com/][color=#5c81a7]XMLperl.com[/color][/url]

[b]其他:[/b] [url=http://phpxmlclasses.sourceforge.net/][color=#5c81a7][b]PHP[/b]XML Classes [/color][/url]; [url=http://www.rubyxml.com/][color=#5c81a7] [/color][/url]; [url=http://okmij.org/ftp/Scheme/xml.html][color=#5c81a7]XML 与 [b]Scheme[/b] [/color][/url]





DOM

[b][url=http://www.w3.org/DOM/][color=#5c81a7]Document Object Model (DOM)[/color][/url] [/b][W3C 推荐标准]是一种 XML 文档对象模型,可用于直接访问 XML 文档的各个部分。在 DOM 中,文档被模型化为一棵树,其中每个 XML 语法成分(如元素和文本内容)都用一个节点表示。DOM 是一种 API,允许您在这种树中导航,从父节点移动到子节点或者在兄弟节点之间移动,并利用特定节点类型的特性(比如,元素可以有属性,而文本节点有文本数据)。DOM 被设计成语言中立的。使用了 Object Management Group(对象管理组,OMG)的 [b][url=http://www.omg.org/gettingstarted/omg_idl.htm][color=#5c81a7]CORBA Interface Definition Language (接口定义语言,IDL)[/color][/url] [/b][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。

[b][size=3]推荐的入门参考和教程[/size][/b]

请阅读 Nicholas Chase 所写的 [i]developerWorks[/i]教程“ [url=http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=84890][color=#5c81a7]理解 DOM[/color][/url]”(2003 年 7 月)。

W3Schools 提供的 [url=http://www.w3schools.com/dom/default.asp][color=#5c81a7]教程[/color][/url]主要讨论将 DOM Level 1 用于 HTML 以及 XML 在浏览器 Javascript 脚本中的应用。

Perl 程序员应该阅读“ [url=http://www.devshed.com/c/a/Perl/Using-Perl-with-XML-part-1/][color=#5c81a7]Using Perl with XML (part 1)[/color][/url]”,这篇教程讨论了 DOM。

Python 程序员应该看一看 [url=http://www.python.org/doc/current/lib/module-xml.dom.html][color=#5c81a7]标准 Python Library Reference 上的 DOM 页[/color][/url]。

[b][size=3]参考资料和其他资源[/size][/b]

ZVON 提供了 [url=http://zvon.org/xxl/DOM1reference/Output/index.html][color=#5c81a7]DOM Level 1[/color][/url]和 [url=http://zvon.org/xxl/DOM2reference/DOM2/Output/index.html][color=#5c81a7]DOM Level 2[/color][/url]很好的参考指南,有大量的 Javascript 例子。



XAPI

[b]XML Database API (XAPI) [/b][开发中]是一种用于 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 资源还很少。



XUpdate

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

[b][size=3]推荐的入门参考和教程[/size][/b]

Arun Gaikwad 的“ [url=http://www.ibm.com/developerworks/cn/xml/x-wa-xindice/index.html][color=#5c81a7]Xindice 简介[/color][/url]”在最后谈到了 XUpdate( [i]developerWorks[/i],2002 年 9 月)

“ [url=http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=85024][color=#5c81a7]4Suite 进行 Python 和 XML 开发,第四部分:合成和更新[/color][/url]”中有一节介绍 XUpdate( [i]developerWorks[/i],2002 年 10 月)。

X-Hive 的 [url=http://support.x-hive.com/xupdate/input][color=#5c81a7]在线 XUpdate 演示[/color][/url]是通过实验学习这种语言的一种好方法。

  

XQuery

[b][url=http://www.w3.org/TR/xquery/][color=#5c81a7]XQuery 1.0: An XML Query Language[/color][/url] [/b][开发中]是一种用于查询 XML 数据源——文档和数据库——的规范。XQuery 是一种非常复杂的编程语言,组成了 XPath 的一个超集。XQuery 是与 XPath 2.0 一起开发的,同样因为其复杂性而备受争议,其实许多争论是不必要的。XQuery 1.0/XPath 2.0 系统包括令人生畏的一大批规范定义,包括语义、语法以及核心函数库:

[b][url=http://www.w3.org/TR/xmlquery-use-cases][color=#5c81a7]XML Query Use Cases[/color][/url] [/b][开发中]通过带有 XQuery 例子的预想应用场景把握着 XQuery 的发展方向。

[b][url=http://www.w3.org/TR/query-datamodel/][color=#5c81a7]XQuery 1.0 和 XPath 2.0 Data Model[/color][/url] [/b][开发中]精确定义了 XSLT 2.0 或 XQuery 处理程序可以包含的信息,以及 XSLT 2.0、XQuery 和 XPath 2.0 表达式中所有允许的值。

[b][url=http://www.w3.org/TR/query-semantics/][color=#5c81a7]XQuery 1.0 和 XPath 2.0 Formal Semantics[/color][/url] [/b][开发中]在其数据模型的基础上,给出了 XPath 2.0 和 XQuery 1.0 规范中每种表达式精确的、形式化的含义。

[b][url=http://www.w3.org/TR/xpath20][color=#5c81a7]XPath 2.0[/color][/url] [/b][开发中]定义了 XPath 2.0 的核心语法。

[b][url=http://www.w3.org/TR/xquery-operators][color=#5c81a7]XQuery 1.0 和 XPath 2.0 Functions and Operators[/color][/url] [/b][开发中]定义了表达式中常用的处理任务。

[b][url=http://www.w3.org/TR/xquery][color=#5c81a7]XQuery 1.0[/color][/url] [/b][开发中]定义了 XQuery 1.0 的核心语法。

[b][url=http://www.w3.org/TR/xqueryx/][color=#5c81a7]XML Syntax for XQuery 1.0 (XQueryX)[/color][/url] [/b][开发中]提供了一种可选的 XQuery 的 XML 表示。

[b][url=http://www.w3.org/TR/xslt-xquery-serialization/][color=#5c81a7]XSLT 2.0 和 XQuery 1.0 Serialization[/color][/url] [/b][开发中]定义了数据模型中的值在 XML、HTML 和文本中是什么样子,如何在处理程序输出中替换 XSLT 中的节。

[b][url=http://www.w3.org/TR/xslt20][color=#5c81a7]XSLT 2.0[/color][/url] [/b][开发中]不是 XQuery 家族的直接成员,但是和 XPath 2.0 与 XQuery 1.0 密切相关,并且完全依赖于前者。

[b][size=3]推荐的入门参考和教程[/size][/b]

Howard Katz 撰写的“ [url=http://www.ibm.com/developerworks/cn/xml/x-xquery.html][color=#5c81a7]XQuery 简介[/color][/url]”介绍了 XQuery,并提供了一些例子,根据最近的工作草案作了更新( [i]developerWorks[/i],2003 年 9 月)。

Nicholas Chase 的“ [url=http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=84918][color=#5c81a7]使用XML Query 处理XML[/color][/url]”讲授 XQuery 并考察了 XPath 2.0 中的变化。它讨论的是较早版本的工作草案,但是因为此后的变化很小,我还是推荐这个教程( [i]developerWorks[/i],2002 年 9 月)。

Per Bothner 撰写的文章“ [url=http://www.xml.com/pub/a/2002/10/16/xquery.html][color=#5c81a7]What is XQuery?[/color][/url]”,最近的 [url=http://www.xml.com/pub/a/2003/09/10/xquery.html][color=#5c81a7]修订[/color][/url]论及最新的草案。

[b][size=3]参考资料和其他资源[/size][/b]

[url=http://www.xquery.com/][color=#5c81a7]xquery.com[/color][/url]是一个很好的 XQuery 资源集散站,还包括一个 [b]Wiki[/b],这是一种协作式的资源索引和讨论网页。



SQL/XML

[b][url=http://www.iso.ch/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=35341&ICS1=35][color=#5c81a7]SQL/XML[/color][/url] [/b][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 很少交叉,两个标准中同时涉及的部分一般能一起工作。

[b][size=3]参考资料和其他资源[/size][/b]

Andrew Eisenberg 和 Jim Melton 撰写的“ [url=http://www.acm.org/sigmod/record/issues/0109/standards.pdf][color=#5c81a7]SQL/XML and the SQLX Informal Group of Companies [PDF][/color][/url]”列举了 SQL/XML 的成就。

J. E. Funderburk、S. Malaika 和 B. Reinwald 撰写的“ [url=http://www.research.ibm.com/journal/sj/414/reinwald.pdf][color=#5c81a7]XML programming with SQL/XML and XQuery [PDF][/color][/url]”( [i]IBM Systems Journal[/i],Vol. 41, No. 4, 2002)彻底分析了所有这些 XML 和 DBMS 技术的交叉之处。

SQL/XML 草案现在是正式的,只有向 ISO(或者所在国家的相关会员)付费后才能得到一个副本,但是如果希望很好地理解该标准,可以使用 [url=http://xml.coverpages.org/SQLX-5wd-14-xml-2002-08.pdf][color=#5c81a7]2003 年 3 月的一个较早版本 [PDF][/color][/url]。



CSS

[b][url=http://www.w3.org/Style/CSS/][color=#5c81a7]Cascading Style Sheets (CSS)[/color][/url] [/b][W3C 推荐标准]是一种将表示样式应用于标记的系统。最知名的是在样式化 HTML Web 页中的应用,但尤其是从 CSS Level 2 发布以来,它也非常适合在 Web 或者其他媒介上表示 XML 文档。把 XML 文档映射到输出结构通过使用 [font=NSimsun]display[/font] 属性完成。XML 文档链接到它的 CSS 样式表文档的标准方式在 [b][url=http://www.w3.org/TR/xml-stylesheet/][color=#5c81a7]Associating Style Sheets with XML documents Version 1.0[/color][/url] [/b][W3C 推荐规范]中定义。

[b][size=3]推荐的入门参考和教程[/size][/b]

Simon St. Laurent 撰写的“ [url=http://www.xml.com/pub/a/2000/03/29/tutorial/][color=#5c81a7]On Display: XML Web Pages with Mozilla[/color][/url]”是一篇较老的文章,但使用 Mozilla 浏览器(包括与 MSIE 5 的比较)的例子较好地说明了其中的基本原理。

ZVON 的“ [url=http://www.zvon.org/xxl/CSS2Tutorial/General/htmlIntro.html][color=#5c81a7]CSS 2 Tutorial[/color][/url]”讲解如何使用 CSS 2 显示 XML 文档。

Dr. David Mertz 的 [i]developerWorks[/i]技巧文章,“ [url=http://www.ibm.com/developerworks/cn/xml/tips/x-tipcss2/index.html][color=#5c81a7]技巧: 使用 CSS2 显示 XML 文档[/color][/url]”,对详尽的例子作简要的说明(2001 年 12 月)。

  

XForms

[b][url=http://www.w3.org/MarkUp/Forms/][color=#5c81a7]XForms 1.0[/color][/url] [/b][W3C 推荐标准],不要与名称相同的 XWindows GUI 库混淆,这是用于 XML 数据处理的 Web 表单规范,可通过不同的媒介用于不同的平台。XForms 希望把表单的用途和表示分开。它把表单做什么与表单看起来怎么样分离开。它是一种 XML 词汇表,可用于开发表单 UI 以操纵 XML 内容。XForms 最初是 XHTML 家族的一部分,但已经完全独立出来了。尽管其复杂程度超出了需要,但看来是一种能够把混乱的 Web 表单世界带入正轨的技术。

[b][size=3]推荐的入门参考和教程[/size][/b]

Micah Dubinko 写的“ [url=http://www.xml.com/pub/a/2001/09/05/xforms.html][color=#5c81a7]What Are XForms?[/color][/url]”对这种技术作了一般性的介绍。

Joel Rivera 和 Len Taing 撰写的“ [url=http://www.ibm.com/developerworks/cn/xml/x-xforms/index.html][color=#5c81a7]准备使用 XForms[/color][/url]”,通过几个详细的例子介绍了 XForms( [i]developerWorks[/i],2002 年 9 月)。

Nicholas Chase 的“ [url=http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=85080][color=#5c81a7]理解 XForms[/color][/url]”更深入地分析了一系列的例子( [i]developerWorks[/i],2002 年 12 月)。



SOAP

[b][url=http://www.w3.org/2000/xp/Group/][color=#5c81a7]SOAP[/color][/url] [/b][W3C 推荐标准](尽管使用大写,但已经成为正式的名词而不再是缩写词了)是一种协议,在使用底层 Internet 协议连接的系统之间使用 XML 通信。一些用户认为 SOAP 是 [b]XML Web 服务[/b]的基础,这是一组技术的统称,用于管理和组织使用 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 源头转移到了所谓的 [i]实文档[/i]方式的 SOAP。在 RPC 方式中,传输的数据使用专门的 XML 符合格式(称为 SOAP 编码)编组成离散的数据类型。在实文档方式中,XML 负荷由更自然的 XML 格式组成,通常更具有描述性,更便于人类阅读。

[b][size=3]SOAP 大厦[/size][/b]

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

[url=http://www.ibm.com/developerworks/views/webservices/standards.jsp?S_TACT=105AGX52&S_CMP=cn-a-x][color=#5c81a7]IBM [i]developerWorks[/i]上的 Web 服务标准列表 [/color][/url]

[url=http://www.w3.org/2002/ws/][color=#5c81a7]W3C Web Services Activity 主页[/color][/url]

[url=http://webservices.xml.com/][color=#5c81a7]webservices.xml.com[/color][/url]

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

[b][size=3]推荐的入门参考和教程[/size][/b]

W3C 有正式的 [url=http://www.w3.org/TR/2003/REC-soap12-part0-20030624/][color=#5c81a7]SOAP 入门[/color][/url],推荐它是因为它对 XML 传输格式的关注。

Perl 程序员可以看看 Paul Kulchenko 的“ [url=http://www.perl.com/pub/a/2001/01/soap.html][color=#5c81a7]Quick Start with SOAP[/color][/url]”,尽管这篇文章很老了,但它讨论的主要是开发人员所用的 API 而不是实际的传输格式,仍然很实用。我建议您最好特别熟悉 SOAP 的有线格式。

Python 程序员可以看看 IBM [i]developerWorks[/i]上的 [url=http://www.ibm.com/developerworks/cn/webservices/ws-pyth/index.html][color=#5c81a7]Python Web 服务开发人员专栏[/color][/url]。

关于实文档风格的 SOAP 推荐以下资源。请参阅 James McCarthy 的文章“ [url=http://www.ibm.com/developerworks/webservices/library/ws-docstyle.html?S_TACT=105AGX52&S_CMP=cn-a-x][color=#5c81a7]Reap the benefits of document style Web services[/color][/url]”( [i]developerWorks[/i],2002 年 6 月)。

Paul Prescod 的“ [url=http://webservices.xml.com/pub/a/ws/2002/02/06/rest.html][color=#5c81a7]Second Generation Web Services[/color][/url]” 和“ [url=http://webservices.xml.com/pub/a/ws/2002/02/20/rest.html?page=1][color=#5c81a7]REST and the Real World[/color][/url]”,对 REST 的观点和动机作了很好地介绍。

对 XML-RPC 感兴趣的 Perl 用户应该从“ [url=http://www.ibm.com/developerworks/webservices/library/ws-xpc1/?S_TACT=105AGX52&S_CMP=cn-a-x][color=#5c81a7]Using XML-RPC for Web services: Getting started with XML-RPC in Perl[/color][/url]”入手,然后参考“ [url=http://www.ibm.com/developerworks/webservices/library/ws-xpc2/?S_TACT=105AGX52&S_CMP=cn-a-x][color=#5c81a7]XML-RPC Middleware[/color][/url]”,作者都是 Joe Johnston( [i]developerWorks[/i],2001 年 3 月)。

关注 XML-RPC 的 Python 用户可以阅读 Mike Olson 与 Uche Ogbuji 撰写的“ [url=http://www.ibm.com/developerworks/cn/webservices/ws-pyth/part10/index.html][color=#5c81a7]针对 Python 的 XML-RPC[/color][/url]”( [i]developerWorks[/i],2002 年 8 月)。

Eric Kidd 的“ [url=http://xmlrpc-c.sourceforge.net/][color=#5c81a7]XML-RPC HOWTO[/color][/url]”讨论了如何在 Java 语言、C、C++、Perl、Ruby 和 NET 中使用这种协议。



WSDL

根据正式的定义, [b][url=http://www.w3.org/2002/ws/desc/][color=#5c81a7]Web Services Description Language (WSDL) Version 1.2[/color][/url] [/b][开发中]是“一种描述网络服务的 XML 格式,它把网络服务描述为对消息的一组端点操作,消息可以包含面向文档的信息或者面向过程的信息。”它在一系列抽象层次上定义了 Web 服务中端到端通信的组件。WSDL 最初是作为 IBM 和 Microsoft 的合作项目发起的,但在 WSDL 1.2 的开发是已经交给了 W3C。WSDL 通常伴随着 SOAP 作为 Web 服务核心技术,但也可用于描述 SOAP 之外的其他协议。

[b][size=3]推荐的入门参考和教程[/size][/b]

IBM [i]developerWorks[/i]上的一篇文章讨论了旧版本的 WSDL,即 Bilal Siddiqui 撰写的“ [url=http://www.ibm.com/developerworks/cn/webservices/ws-intwsdl/part1/index.html][color=#5c81a7]使用 WSDL 部署 Web 服务[/color][/url]”(2001 年 11 月)。



后续内容

本文综述了和应用程序开发有关的最重要的 XML 标准。下一篇文章中,我将分析最重要的通用 XML 词汇表。



参考资料

您可以参阅本文在 developerWorks 全球站点上的 [url=http://www.ibm.com/developerworks/library/x-stand2.html?S_TACT=105AGX52&S_CMP=cn-a-x][color=#5c81a7]英文原文[/color][/url].

  

阅读本系列关于 XML 标准的文章的 [url=http://www.ibm.com/developerworks/cn/xml/x-stand1/index.html][color=#5c81a7]第 1 部分[/color][/url],主要讨论 Uche Ogbuji 认为是核心的 XML 技术( [i]developerWorks[/i],2004 年 1 月)。

  

看看 IBM [i]developerWorks[/i]上的 [url=http://www.ibm.com/developerworks/views/xml/standards.jsp?S_TACT=105AGX52&S_CMP=cn-a-x][color=#5c81a7]XML 标准列表[/color][/url]。

  

如果希望就 XML 获得坚实的基础,请阅读 [url=http://www.ibiblio.org/xml/books/bible2/][color=#5c81a7][i]The XML Bible, 2nd Edition[/i] [/color][/url],Elliotte Rusty Harold 著(John Wiley & Sons, 2001),前提是您愿意买下这本书。

  

访问开发 XML 标准的最重要组织的网站:

[url=http://www.w3.org/][color=#5c81a7]W3C(万维网联盟)[/color][/url]

[url=http://www.oasis-open.org/][color=#5c81a7]OASIS (结构化信息标准推进组织)[/color][/url]

ISO(国际标准化组织),尤其是它的项目 [url=http://dsdl.org/][color=#5c81a7]ISO/IEC 19757 - Document Schema Definition Languages (文档模式定义语言,DSDL)[/color][/url]

  

Simon St. Laurent 所写的 [url=http://simonstl.com/articles/civilw3c.htm][color=#5c81a7]Outsider's Guide to the W3C[/color][/url]是一个 FAQ,澄清了这个为您带来 HTML 和 XML 的组织的许多方面。

  

Robin Cover 的 [url=http://xml.coverpages.org/][color=#5c81a7]The Cover Pages[/color][/url]基本上涉及到了 XML 的每个方面,这是一个令人瞠目的、包罗万象的 XML 资源指南。

  

访问 [url=http://xmlhack.com/][color=#5c81a7]xmlhack[/color][/url],XML 开发人员的新闻站点,Uche 帮助编辑。

  

在 [url=http://www.ibm.com/developerworks/cn/xml/][color=#996699][i]developerWorks[/i]XML 专区 [/color][/url]可以找到更多的 XML 资源,包括 Uche Ogbuji 的 [url=http://www.ibm.com/developerworks/cn/xml/rdf/index.html][color=#5c81a7][i]Thinking XML[/i]专栏 [/color][/url]。

  

IBM 的 [url=http://www.ibm.com/software/data/db2/][color=#5c81a7]DB2[/color][/url]数据库不仅提供了关系数据库存储,也包括和 XML 有关的工具,如 [url=http://www.ibm.com/software/data/db2/extenders/xmlext/index.html][color=#5c81a7]DB2 XML Extender[/color][/url]提供了连接 XML 和关系系统的桥梁。要进一步了解 DB2,请访问 [url=http://www.ibm.com/developerworks/cn/db2/][color=#996699][i]developerWorks[/i]上的 DB2 专区 [/color][/url]。

  

了解如何才能成为一名 [url=http://www.ibm.com/developerworks/cn/xml/theme/x-cert.html][color=#5c81a7]IBM 认证的 XML 及相关技术开发人员[/color][/url]。

  



关于作者

[img]http://www.dbacontest.net/Upfiles/BeyondPic/2008-07/20087103587941359.gif[/img]

[img]http://www.dbacontest.net/Upfiles/BeyondPic/2008-07/20087103189084166.jpg[/img]

[img]http://www.dbacontest.net/Upfiles/BeyondPic/2008-07/20087103587941359.gif[/img]

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

分享:

扫一扫在手机阅读、分享本文

请发表您的评论