简介
最初设想的可扩展标记语言 (XML) 用于为 Web 定义新文档的格式。XML 由标准通用标记语言 (SGML) 衍生而来,可以认为它是一种元语言,即一种定义标记语言的语言。SGML 和 XML 都是基于文本的格式,提供了一种使用标记(文字由‘<’和‘>’括起)描述文档结构的机制。Web 开发人员可能会注意到,XML 与 HTML 有一些相似,这是因为这二者都是由 SGML 衍生而来的。
随着 XML 的应用日益普及,现在人们已普遍认同,XML 不仅有助于为 Web 描述新文档的格式,而且也适用于描述结构化的数据。所谓结构化的数据包括那些电子表格、程序配置文件和网络协议中通常所包含的信息。
XML 要优于早期的数据格式,因为 XML 可以很轻松地表示表格式的数据(如数据库中的关系数据或电子表格)和半结构化的数据(如 Web 页面或业务文档)。早已存在且应用广泛的一些格式(如逗号分隔值 [CSV] 文件)可以有效地处理表格式数据,却不能很好地处理半结构化数据,而 RTF 等则只能专门用于半结构化的文本文档。因此,XML 作为信息交换的通用语言被广泛接受。
无处不在的 XML
除了可以表示结构化和半结构化的数据之外,XML 还有许多其他特性,使其成为一种被广泛采用的数据表示格式。XML 是可扩展的,与平台无关的,并且由于其完全采用 Unicode 而支持国际化。XML 是基于文本的格式,因此,用户可以根据需要使用标准的文本编辑工具读取和编辑 XML 文档。
XML 的可扩展性表现在多个方面。首先,与 HTML 不同,XML 没有固定的词汇表。相反,用户可以使用 XML 定义特定的应用程序或行业专用的词汇表。其次,与使用其他格式的应用程序相比,处理或使用 XML 格式的应用程序对 XML 结构的更改更具“抵抗力”,只要这些更改是附加的。例如,如果某个应用程序主要处理具有
customer-id
属性的
<Customer>
元素,如果再向
<Customer>
元素添加一个
last-purchase-date
属性,该应用程序通常也不会被破坏。这样的适应性在其他的数据格式中很少见,这也成为使用 XML 的一个显著优势。
XML 不依赖于任何编程语言、操作系统或软件供应商。事实上,使用各种编程语言都可以很容易地生成或使用 XML。而平台独立性使得 XML 有助于在不同编程平台和操作系统之间实现互操作。
很多人已经意识到将数据发布为 XML 有很多优势,由此也推动了 XML 数据源的大量应用。人们正在或者已经将业务文档、数据库和业务间的通讯等信息源转换为使用 XML 作为表示格式。Microsoft 的产品,如 Microsoft Office®、Microsoft SQL Server™ 和 Microsoft .NET Framework,都能使最终用户和开发人员将文档、网络信息和其他数据生成为 XML 或作为 XML 使用。
XML 1.0 语法
如前所述,W3C XML 1.0 推荐描述了一种基于文本的格式,使用类似于 HTML 的语法来描述结构化和半结构化的数据。
XML 和 HTML 的对比
HTML 和 XML 文档都由元素组成,每个元素都包含一个“起始标记”(例如<order>)、一个“结束标记”(例如</order>),以及两个标记之间的信息(指元素的内容)。元素可以使用属性进行注解,属性包含了关于元素及其内容的元数据。
但是,HTML 与 XML 之间存在一个显著的差别,即 XML 区分大小写,而 HTML 不区分大小写。也就是说,在 XML 中,起始标记<Table>和<table>
是不同的,而在 HTML 中则是相同的。HTML 与 XML 之间的另一个差别是,XML 引入了“良好结构”的概念。XML 的“良好结构”规则通过强制规定一些规则来消除在处理 HTML 等标记语言时存在的一些固有的模糊性,如它强制规定了所有属性都必须用括号括起,所有元素都必须具有一对起始标记和结束标记,或者明确指出其为空元素。有关良好结构的简短说明,请参阅“XML FAQ”的 D.2 部分。
HTML 与 XML 之间最显著的区别在于,HTML 已预先定义了元素和属性,元素和属性的行为已完全指定,而 XML 则不是这样。相反,文档作者可以创建自己的特定于其应用程序或业务需求的 XML 词汇表。目前已有的 XML 词汇表适用于许多行业和应用程序,从财务信息报告 (XBRL)、金融服务 (FpML) 到 Web 文档 (XHTML)、网络协议 (SOAP)。由于不必关注那些用来指定如何呈现或显示 XML 文档的预定义元素和属性,因此文档作者在创建文档时就可以将重点放在与其特定问题领域相关的语义信息上。XML 词汇表带来了内容与形式的分离,使得信息和内容可以得到更大规模的重复利用。
XML 文档剖析
以下示例是一个表示音像商店客户订单的 XML 文档。请注意,此文档既表示了严谨的结构化数据(用来描述光盘信息),也表示了半结构化数据(用来说明有关特定顾客的特殊说明和注释),而其表示方式非常简单。
以下为引用的内容:
<?XML version="1.0" encoding="iso-8859-1" ?>
<?XML-stylesheet href="orders.xsl"?>
<order id="ord123456">
<customer id="cust0921">
<first-name>Dare</first-name>
<last-name>Obasanjo</last-name>
<address>
<street>One Microsoft Way</street>
<city>Redmond</city>
<state>WA</state>
<zip>98052</zip>
</address>
</customer>
<items>
<compact-disc>
<price>16.95</price>
<artist>Nelly</artist>
<title>Nellyville</title>
</compact-disc>
<compact-disc>
<price>17.55</price>
<artist>Baby D</artist>
<title>Lil Chopper Toy</title>
</compact-disc>
</items>
<!-- 要多走几英里找到顾客 -->
<special-instructions XMLns:html="">
<html:p>If customer is not available at the address then attempt
leave package at one of the following locations listed in order of
which should be attempted first
<html:ol>
<html:li>Next Door</html:li>
<html:li>Front Desk</html:li>
<html:li>On Doorstep</html:li>
</html:ol>
<html:b>Note</html:b> Remember to leave a note detailing where
to pick up the package.
</html:p>
</special-instructions>
</order>
文档的开头是可选的 XML 声明,用以指定所使用的 XML 版本,然后是文档所使用的字符编码。接下来是 XML 样式表处理指令,用来绑定样式表。样式表中包含的 XML 文档的格式化指令可以用更生动的方式在用户应用程序(例如 Web 浏览器)中呈现 XML 文档。处理指令通常用来在 XML 文档中嵌入特定于应用程序的信息。例如,处理以上文档的大多数应用程序都会忽略 XML 样式表处理指令,而用于显示 XML 文档的应用程序(例如 Web 浏览器)则会使用处理指令中的信息,以确定将包含了用于显示文档的特殊指令的样式表定位在哪里。
Unicode + 尖括号 = 互操作
XML 1.0 语法是基于文本的,而且可以很容易地进行分析,这使得 XML 在需要跨平台进行交互操作时,成为首选的数据交换格式。在多种常用的操作系统中都可以使用 XML 分析器,因此,不同平台上完全不同的部件在需要共享信息时,可以很容易地进行标准化,采用 XML 作为交换格式。
以 Unicode 为基础的 XML 也适用于在全球网络中共享信息,例如在 Web 上。
信息集 (Infoset) 和 XML 系列技术
尽管使用 XML 作为数据表示格式可以带来一个极大的优势:通过使用基于文本的 XML 语法获得平台互操作性和可扩展性,但这只是 XML 为应用程序开发人员带来的益处之一。使用 XML 的另一个主要好处在于,用户可以访问各种数据处理、构建、转换和查询技术。