什么是 XML?

XML 即可扩展标记语言(Extensible Markup Language),是一种平台无关的表示数据的方法。 简单地说,使用 XML 创建的数据可以被任何应用程序在任何平台上读取。甚至可以通过手动编码来编辑和创建 XML 文档。其原因是,XML 与 HTML 一样,都是建立在相同的基于标记技术基础之上。

一个示例

比如说,假设我们想要使用 XML 存储关于某个事务的信息。这个事务是由销售人员的 iBook 发起的,因此您想把信息存储在 iBook 中。但是,信息稍后会发送给 Windows 服务器上的数据应用程序,并且最终保存在您的主机中,因此这需要极佳的灵活性才能完成。使用 XML 创建的数据内容如清单 1 所示。 清单 1. XML 示例
<?xml version="1.0"?> <transaction ID="THX1138"> <salesperson>bluemax</salesperson> <order> <product productNumber="3263827"> <quantity>1</quantity> <unitprice currency="standard">3000000</unitprice> <description>Medium Trash Compactor</description> </product> </order> <return></return> </transaction>

XML 将信息串行化并作为文本存储,这样数据便可以在任何可能需要的环境中使用。甚至不需使用特殊的应用程序,我们便可以看到内容(粗体显示)和标记(用于描述内容)。

继续学习

XML 的使用相当简单方便,当然前提是要理解 XML 的结构。XML 还提供了一些不同的方法,使用这些方法可以对数据的结构(甚至内容)进行控制。开始使用 XML 之后,您还会困扰于设计 XML 结构的最佳方式,不过这算不上复杂的过程。

新手上路,请阅读下列文章:

XML 的灵活性意指可用于许多应用程序,比如说配置文件、Web 服务、数据存储等等。

XML 的用途

从接触 XML 开始,开发人员就已经发现 XML 的用途多种多样。下面列出的文章能让您对 XML 的使用方法有所了解。

存储数据

显而易见,XML 可用于存储数据。在以数据为中心的信息(比如在某个数据库查找到的数据)和以文档的中心的信息(比如将数据存储在 XML 中,以便在不同的环境中显示出来)这两个方面,XML 都有自己的优势。

阅读下列文章了解更多有关 XML 作为以数据为中心的存储介质的知识。

如果对存储 XML 数据感兴趣,您应该知道 IBM 发布了一款 DB2 9 免费版本, IBM DB2 Express-C 9. 您也应该查阅最新的 DB2 Developer Workbench, 通过阅读以下系列教程可以使在 DB2 9 中使用 XQuery 和 SQL/XML 变得更加容易。

这份系列文章共分三部分,其中第一篇教程展示了如何使用 XML 一般地存储以文档为中心的数据,以及如何操纵其表示层:

Web 服务

Web 服务最初用于在 HTTP 上传递非 HTML 信息。它们如今已成为通过 Ajax 获取字段的基础,用于向 Web 站点、如今的面向服务体系结构(Service Oriented Architecture,SOA)和复杂的基于消息的应用程序添加交互性。XML 是 Web 服务领域不可或缺的一部分。Web 服务中的所有主流方法,如 SOAP、REST 甚至 XML-RPC,都是基于 XML 的。

要了解 XML 在 Web 服务领域中的应用,请阅读下列文章:

请参阅下面的 部分获得更多信息。

播客和其他数据联合

如今,XML 最普遍的应用是数据联合领域。数百万的 blogger 都在使用 RSS 提要订阅他们所喜爱的博客上的最新信息。而且商业利益已经发现通过英特网向各种设备(如 iPod,它也使用 XML)发布音频和视频的商机了。

要了解数据联合,请阅读如下文章:

平台无关的配置和部署指令

在您所喜爱的应用程序和开发环境的幕后经常都有 XML 存在,它是创建配置或指令文件的通用方法。在人类可读的 XML 文件中提供配置指令能让用户比以前更加方便地控制应用程序的行为。

以下文章介绍了使用 XML 创建配置文件的示例:

XML 可用于应用程序开发吗?

清单 1 中的标记是最常见的 XML 串行表示,不过在应用程序的上下文中处理 XML 数据也是非常普遍的。在这种情况下,我们通常需要使用到一些模型,其中包括下面所列出的这些。

文档对象模型(Document Object Model,DOM

文档对象模型(DOM)是一个基于对象的,以树形查看 XML 数据的方法。例如,在 清单 1 中,salesperson、order 和 return 元素都是 transaction 元素的子元素,也就是说它们在层次结构中位于 transaction 的下方。大多数基于 XML 的应用程序在处理 XML 时使用的都是 DOM 方法。

要了解 DOM 请阅读下列文章和教程:

Simple API for XML(SAX)

由于任何内容都要存放在内存中,所以 DOM 对于操纵数据而言是非常有用的。不过另一方面,其资源占用自然也相应地比较大了。

Simple API for XML(SAX)解决了在内存中同时存放所有内容的问题。SAX 自始至终一直在分析数据,并将所有的事件通知给应用程序,比如 “起始元素” 或 “字符”。SAX 在资源友好方面要胜过 DOM 一筹,但是其操纵数据的方法却不尽相同。

要了解 SAX,请阅读下列文章:

DOM 和 SAX 是通过编程手段与 XML 交互的最常见方法,但是有时也可以不通过构建应用程序来操纵 XML 数据。.

转换 XML 数据(XSLT)

有时,甚至无需编程也可以操纵 XML 数据。可以使用可扩展样式表转换语言(EXtensible Stylesheet Language Transformation,XSLT)来操纵 XML 数据。XSLT 让我们能将 XML 文档转换为不同 XML 结构的文档,甚至还可以转换为非 XML 文档。XSLT 功能极为强大,并且应用广泛。

可以在我熟悉的编程语言中使用 XML 吗?

XML 是与平台和编程语言无关的,因此我们可以在基本上任何编程语言中使用它,只要底层软件(比如说解析程序,它读取标记的文本文件并为数据操纵创建 XML 文档)可用就没有问题。要了解如何在各种不同的编程语言中使用 XML,请阅读下列文章:

Java

Java 中直接内置了 XML 解析和一些其他功能。

PHP

PHP 对 XML 的支持一开始并不顺利;其早期实现并未完全与 DOM 规范同步。不过,目前的情形已经好了很多,PHP 提供支持更类似标准的支持。

Perl

Perl 旨在操作文本,因此有时更倾向直接操作文本而不是使用 XML 方法,但是使用 XML 的优势是显而易见的。

Python

结合 Python 的易用性和 XML 对跨平台可用性的注重,这两者真是天生的一对。

C++

C++ 程序员同样可以利用 XML 的各种功能。

Ruby

REXML 库使 Ruby 编程语言能支持 XML。

JavaScript

JavaScript 对 XML 的支持类似于 Java,至少在比较基本的操作方面非常相似。

有现成的 XML 词汇和应用程序吗?

随着开发人开始在各种应用程序中使用 XML,一些标准词汇或 XML 应用程序也开始涌现出来。例如,XHTML 就是一种 XML 版本的 HTML,播客中也正在使用一种叫做 RSS 的 XML 词汇。可缩放矢量图型(Scalable Vector Graphics,SVG)语言提供了一种使用 XML 定义图形图象的方法,使一些浏览器(如 Firefox)可以呈现它们。

下面讨论了一些正在应用中的 XML 示例。

RSS 和联合

博客经常会提供一些外部提要,用于显示最近发表的文章并能提供返回原始资料的链接。这些提要已经转变成为巨大的商机,广告商纷至沓来,音频和/或视频或播客 的发布正在成为一些大型传媒公司(比如广播电视网 [broadcast television network])关注的焦点。这些提要都是 XML 形式的,或者是 RSS 或 Atom 的某种变体。

可缩矢量图形(Scalable Vector Graphics,SVG)

图形之如 SVG,就如桌面发布之如 HTML。SVG 提供了一种使用小的、简单的文本指令指定图形的方法。使用 SVG 创建的复杂图形,不仅带宽占用小而且可以通过编程进行控制。

XForms

可以把视为 XFoms 下一代的 HTML 表单,它可以指定以表示无关的方式采集信息。这种方式使我们能更加方便地添加更多功能,也使得在其他介质(比如手机)中重用表单更加轻松,这些介质中的信息相同不过表示可能完全不同。

更多 XML 应用

应用 XML 的地方可以说是不胜枚举,比如说发布、编码语义数据,甚至那些电话中的语音识别单元也使用了 XML。下面列出了一些例子:

XML 与 Web 服务和 SOA 有何关联?

尽管可以使用许多技术来实现面向服务体系结构(SOA),不过最常用的还是使用 Web 服务,这意味着要使用 XML。SOAP 和 REST 是实现 Web 服务最流行的两种方法,这两者都基于 XML。

一个例子

比如说,通过将这个 SOAP 文档作为 Web 请求发送,可以向 Google Web 服务提出请求。(如清单 2 所示) 清单 2. 通过发送 SOAP 文档向 Google Web 服务提出请求
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=
"http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:doGoogleSearch xmlns:ns1="urn:GoogleSearch"
SOAP-ENV:encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/">
<key xsi:type="xsd:string">00000000000000000000000000000000</key>
<q xsi:type="xsd:string">death star trash compactor</q>
<start xsi:type="xsd:int">0</start>
<maxResults xsi:type="xsd:int">10</maxResults>
<filter xsi:type="xsd:boolean">true</filter>
<restrict xsi:type="xsd:string"></restrict>
<safeSearch xsi:type="xsd:boolean">false</safeSearch>
<lr xsi:type="xsd:string"></lr>
<ie xsi:type="xsd:string">latin1</ie>
<oe xsi:type="xsd:string">latin1</oe>
</ns1:doGoogleSearch>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

此处我们可以看到 SOAP 信封(envelope),它是 Web 服务引擎能够理解的标准格式。这个消息的内容(在本例中为 doGoogleSeaerch 元素)被认作是 有效载荷(payload),由即将被 Web 服务处理的信息所组成。

Web 服务概览

事实上,大多数围绕 Web 服务的标准(存在很多)在本质上都是 XML 词汇。比如说,Web 服务描述语言(Web Service Description Language)就是一个用于描述服务的 XML 文件。

要了解 XML 和 Web 服务,请阅读下列文章:

ETTK for Web Services(英文) 是一种 alphaWorks 技术,使用该技术可以轻松地建立 Web 服务环境,包括服务器。

通过 SOA and Web services 新手入门 可以获得更多有关 XML 和 Web 服务的信息。

XML 在未来所扮演的角色

XML 是当今许多新生技术的核心。比如说,随着搜索引擎的改进以及向 Semantic Web 的迈进,XML 成了 Web 站点管理员在页面中添加有意义信息的利器。网格计算和自主计算在不断发展,XML 在这些技术中的应用也非常显著。数据库供应商在不断探索更加高效存储 XML 的方法,XML 查询语言(XML Query Language,XQuery)也在蓬勃发展。

通过阅读下节中的文章可以帮助您了解 XML 的未来:

RDF、微格式 和其他语义技术

语义 Web 并不需要 XML,但是从当前的技术方式来说这也是众望所归的趋势。大多数信息都是以某种 XML 的形式编码的,不论是资源描述框架(Resource Description Framework,RDF)还是独立的微格式。这是因为 XML 的可读性和可理解性几乎是通用的。

网格和自主计算

世界越来越小,计算机系统却日益庞大。尤其是一些研究人员、公司和其他组织开始发现,将他们的系统整合为一个单一的大型系统可以带来巨大的好处,不仅能提供更强的计算能力还可以通过消除浪费节省资金。由于 XML 具有平台无关性,因此对于在种类各异的系统之间交换信息,XML 是完美的选择。

异步的 JavaScript 和 XML(Ajax)

随着 Web 所提供的功能日益多样,因此用户也对日常处理中必不可少的应用程序寄予了相同的期望。通过在后台中请求信息(XML 中时常如此),并且只替换页面的一部分内容(而不是强制用户请求整个新 Web 页面),Asynchronous JavaScript with XML(Ajax)能为用户提供更加无缝的体验。结果,大约在去年期间 Web 便在这一领域取得了跨越式的进展。

Mashups

随着越来越多的信息可以通过 Web 服务获得,企业开发人员也发现这些信息还有其他的用途。利用这一数据的方法之一就是 e Mashup,它是一种正在发展的应用程序,可以将来自多个源的数据结合到一个单一的视图中。

改进 XML 技能的最佳方式

如果想要改进您的 XML 技能,最佳的方式就是打下坚实的基础,然后只需使用它就行了。要获得入门知识,请阅读 什么是 XML? 一节中所列出的文章,然后再阅读 XML 可用于应用程序开发吗? 一节中的文章。有了这些基础之后,您便可以学习自己感兴趣的领域了。

您还可以努力获得 IBM 的 XML 认证,要准备该认证请阅读 准备 XML 及相关技术认证,第 1 部分: 体系结构 和其他的 XML 及相关技术认证系列教程

结束语

XML 为我们提供了强大的功能和力量,不过幸运的是它本身也是相当简单和易懂的技术。掌握基础知识之后(这并不会花多长时间),您就可以选择学习的方向了。如果您是程序员,那么可以专注于编程和各种 API。如果不是程序员,则可以专注于各种与编程无关的应用。总之,您都可以在当今世界找到 XML 的一席之地。