XML 变得越来越强大,得到了迅速的发展。它已经证明自己是一种非常有价值的技术,但可能也是一种令人害怕的技术,如果考虑到挂在“XML”一词下面不断变化的各个部分。在这一组文章中,我将简述我认为最重要的 XML 技术,讨论它们如何在 XML 世界中更大的范围内彼此融合。为了进一步研究和学习以使用各种技术,我还推荐了一些教程和其他有用的参考资料。
这里介绍的所有技术都是 标准,尽管这个词本身就有点捉摸不定。标准有各种各样的形式,而且在同一个领域中常常有多种标准互相竞争。我按照实践的方法把标准定义为:被不同的供应商大量采用的或者有影响、独立于供应商的组织推荐的规范。
在 本系列的第一篇文章中主要讨论了核心 XML 技术。(关于各种标准开发团体的概述以及标准的分类请参阅 那篇文章中的侧栏。) 第二篇文章中探讨了和开发人员处理 XML 有关的标准。本文中我将介绍最重要的一些 XML 应用(也称为词汇表,虽然不很准确)。和原来的 SGML 一样,XML 也是一种元语言,是定义其他语言的语法基础。这些语言(如 SGML 中的 HTML,XML 中的 XHTML)是 应用——不要与程序员编写的应用程序(软件应用)如 IBM DB2 混淆。
在第 4 部分,我将就以前所述的这些信息加以比较,提供一个方便的交叉索引。
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 原来是一种流行的 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 各个方面的很好很详细的参考。
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 强大的国际化支持。
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 教程涵盖了最常用的元素。
- ZVON 的 SVG Reference提供了元素之间的关系图和一些例子。
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突出了例子。
Mathematical Markup Language (MathML) 2.0 [W3C 推荐标准]是一种 XML 语言,按照该规范的说法,其目的是“促进数学和科学内容在 Web 上,以及其他应用程序如计算机代数系统、打印排版及语音合成中的使用和重用。MathML 可用于对能够高质量显示的数学符号表示编码,也可用于为语义起着更重要作用的应用程序对数学内容编码,如科学软件或语音合成。”MathML 常用于在教育、科学论文、工业规范、规章内容等领域中表示等式、公式或者类似的信息。这个版本对 MathML 1.01 [W3C 推荐标准]增加了一些相对较新的特性。MathML 经常和 XHTML、SVG 以及其他应用一起使用。
- 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。
差不多在 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 更多信息的权威资源。
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专栏 中也讨论了许多这样的标准。
下一篇文章是本系列的最后一篇文章,我将对讲述过的内容进行比较,并一一列出以便交叉参考。
- 您可以参阅本文在 developerWorks 全球站点上的
英文原文.
- 如果希望就 XML 获得坚实的基础,请阅读
The XML Bible, 2nd Edition
,Elliotte Rusty Harold 著(John Wiley & Sons, 2001),前提是您愿意买下这本书。关于 XSLT、XSL-FO、XLink、XPointer 和 WXS 的五章可以免费从网上获得。
- 访问开发 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 帮助编辑。
- 在
developerWorksXML 专区
可以找到更多的 XML 资源,包括 Uche Ogbuji 的
Thinking XML专栏
。
- 在
developerWorks
Developer Bookstore上可以找到大量与 XML 有关的书籍。
- 了解如何才能成为一名
IBM 认证的 XML 及相关技术开发人员。

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