### XML 技术入门

应用与开发

编者按：XML（eXtensible Markup Language，可扩展置标语言）是由 W3C（World Wide Web Consortium，互联网联合组织）于 1998 年 2 月发布的一种标准，同 HTML 一样是 SGML（Standard Generalized Markup Language，标准通用置标语言）的一个简化子集。由于它将 SGML 的丰富功能与 HTML 的易用性结合到了 Web 的应用中，自推出以来，迅速得到软件开发商的支持和程序开发人员的喜爱，显示出强大的生命力。

由于 XML 较好地解决了 HTML 无法表达数据内容等问题，使它在政府、金融、证券、邮电、保险、税务、司法、出版以及电子商务等方面得到了广泛的应用。

本报在 XML 编程方面曾经刊登过多篇文章，许多读者对其已经有了一定的了解。但是由于文章的独立性，读者很难从整体上把握 XML 技术。为进一步帮助读者更好地理解和掌握 XML 技术，本报与微软（中国）公司合作，特别邀请北京邮电大学张健，共同开办“XML 技术”系列讲座。从本期开始，本报将大约分 8 期在“技术讲座”栏目里详细介绍 XML 技术的开发和应用。

XML 与 HTML 的比较

Internet 提供了全球范围的网络互连与通信功能，Web 技术的发展更是一日千里，其丰富的信息资源给人们的学习和生活带来了极大的便利。特别是应运而生的 HTML（超文本置标语言），以简单易学、灵活通用的特性，使人们发布、检索、交流信息都变得非常简单，从而使 Web 成了最大的环球信息资源库。然而，电子商务、电子出版、远程教育等基于 Web 的新兴领域的全面兴起使得传统的 Web 资源更加复杂化、多样化，数据量的日趋庞大对网络的传输能力也提出更高的要求。同时，人们对 Web 服务功能的需求也达到更高的标准，比如: 用户需要对 Web 进行智能化的语义搜索和对数据按照不同的需求进行多样化显示等个性化服务; 公司和企业要为客户创建和分发大量有价值的文档信息，以降低生产成本，以及对不同平台、不同格式的数据源进行数据集成和数据转化等等，这些需求越来越广泛和迫切。

传统的 HTML 由于自身特点的限制，不能有效地解决上述问题：作为一种简单的表示性语言，它只能显示内容而无法表达数据内容。而这一点恰恰是电子商务、智能搜索引擎所必需的。另外，HTML 语言不能描述矢量图形、数学公式、化学符号等特殊对象，在数据显示方面的描述能力也不尽如人意。最重要的是：HTML 只是 SGML（Standard Generalized Markup Language，标准通用置标语言）的一个实例化的子集，可扩展性差，用户根本不能自定义有意义的置标供他人使用。这一切都成为 Web 技术进一步发展的障碍。

SGML 是一种通用的文档结构描述置标语言，为语法置标提供了异常强大的工具，同时具有极好的扩展性，因此在数据分类和索引中非常有用。但 SGML 复杂度太高，不适合网络的日常应用，加上开发成本高、不被主流浏览器所支持等原因，使得 SGML 在 Web 上的推广受到阻碍。在这种情况下，开发一种兼具 SGML 的强大功能、可扩展性以及 HTML 的简单性的语言势在必行。由此诞生了 XML 语言。

XML（eXtensible Markup Language，可扩展置标语言）是由 W3C 于 1998 年 2 月发布的一种标准。它同样是 SGML 的一个简化子集，它将 SGML 的丰富功能与 HTML 的易用性结合到 Web 的应用中，以一种开放的自我描述方式定义了数据结构，在描述数据内容的同时能突出对结构的描述，从而体现出数据之间的关系。这样所组织的数据对于应用程序和用户都是友好的、可操作的。

XML 的优缺点

XML 的优势之一是它允许各个组织、个人建立适合自己需要的置标集合，并且这些置标可以迅速地投入使用。这一特征使得 XML 可以在电子商务、政府文档、司法、出版、CAD/CAM、保险机构、厂商和中介组织信息交换等领域中一展身手，针对不同的系统、厂商提供各具特色的独立解决方案。

XML 的最大优点在于它的数据存储格式不受显示格式的制约。一般来说，一篇文档包括三个要素: 数据、结构以及显示方式。对于 HTML 来说，显示方式内嵌在数据中，这样在创建文本时，要时时考虑输出格式，如果因为需求不同而需要对同样的内容进行不同风格的显示时，要从头创建一个全新的文档，重复工作量很大。此外 HTML 缺乏对数据结构的描述，对于应用程序理解文档内容、抽取语义信息都有诸多不便。

XML 把文档的三要素独立开来，分别处理。首先把显示格式从数据内容中独立出来，保存在样式单文件（Style Sheet）中，这样如果需要改变文档的显示方式，只要修改样式单文件就行了。XML 的自我描述性质能够很好地表现许多复杂的数据关系，使得基于 XML 的应用程序可以在 XML 文件中准确高效地搜索相关的数据内容，忽略其他不相关部分。XML 还有其他许多优点，比如它有利于不同系统之间的信息交流，完全可以充当网际语言，并有希望成为数据和文档交换的标准机制。

当然，XML 作为一个新建立的标准，还有许多不足之处: 它在强调了数据结构的同时，语义表达能力上略显不足，例如定义了<地址>这样一个置标，如果不是在文档中实际定义内容，我们就无法知道是要表达家庭住址还是 E-mail 地址。另外，XML 的有些技术尚未形成统一的标准，充分支持 XML 的应用处理程序很少，甚至浏览器对 XML 的支持也是有限的。

所以，XML 还并不能完全取代 HTML，毕竟 HTML 是最为方便、快捷的网上信息发布方式。况且 HTML 是描述数据显示的语言，而 XML 是描述数据及其结构的语言，二者在功能上也是截然不同的。

XML 的使用前景

不管怎样，Web 的应用将随着 XML 的发展而更加精彩：

1. 商务的自动化处理

XML 的丰富置标完全可以描述不同类型的单据，例如信用证、保险单、索赔单以及各种发票等。结构化的 XML 文档发送至 Web 的数据可以被加密，并且很容易附加上数字签名。因此，XML 有希望推动 EDI（Electronic Data Interchange）技术在电子商务领域的大规模应用。有兴趣的读者可以访问网站 http://www.xmledi.org。

2. 信息发布

信息发布在企业的竞争发展中起着重要作用。服务器只需发出一份 XML 文件，客户可根据自己的需求选择和制作不同的应用程序以处理数据。加上 XSL（eXtensible Stylesheet Language）的帮助，使广泛的、通用的分布式计算成为可能。

3. 智能化的 Web 应用程序和数据集成

XML 能够更准确地表达信息的真实内容，其严格的语法降低了应用程序的负担，也使智能工具的开发更为便捷。来自不同应用程序的数据也能够转化到 XML 这个统一的框架中，进行交互、转化和进一步的加工。

XML 的优点备受瞩目，它的发展方兴未艾，未来的 Web 将是 XML 的 Web！

XML 的开发工具

开发 XML 有许多工具可以使用：

● Notepad：最直接、最简单的文本编辑工具，在 Windows 附件中就可找到。

● Microsoft XML Notepad: 微软专门为设计 XML 文档而提供的编辑软件，可以借助它验证 XML 文档的有效性，详细说明和下载地址: http://msdn.microsoft.com/xml/NOTEPAD/intro.asp。

● Visual InterDev：该软件是用来开发 Web 应用程序的，不仅仅局限于 XML，还可以开发 ASP、HTML、XSL 样式单等等。

● Microsoft XML Tree Viewer: 利用这个软件可以把 XML 文档的内容用树的结构形式显示出来: http://msdn.microsoft.com/xml/demos/default.asp。

● Microsoft XML Validator: 该软件可以检查 XML 文档是否是“格式良好的”以及其有效性，并对错误发出警告，它的下载地址是：http://msdn.microsoft.com/xml/demos/default.asp。

● Microsoft XSL Debugger: 样式单文件的复杂性使开发人员在编写时容易出现错误，这个软件就是帮助用户调试样式单文件的，把复杂枯燥的调试过程用可视化界面显示出来。下载地址 ：http://msdn.microsoft.com/xml/_archive/xsl-debugger/xsl-debugger.htm。

● WordPerfect: 一种对开发 XML 和 SGML 提供高级支持的文字处理器，具有所见即所得的开发环境，提供向导、自动化控件的插入和文档的自动生成等功能，它是一款收费的商业产品，支持 Windows 95/98/2000 和 Linux 平台。详情请访问 http://www.corel.com/。

● SixPack: 为 XML 的解析和开发提供简洁的界面，支持 Macintosh 平台，并公开源代码，详情请访问 http://www.trafficstudio.com/sixpack/info.htm。

● Xray: 一种具有实时错误检查的 XML 编辑器。它根据 DTD 或者 XML Schema，允许用户创建格式良好的 XML 文档或验证文档的有效性，并且支持多文档编辑，是一款免费软件，支持 Windows 95/98/NT/2000 平台。详情请访问 http://architag.com/xray/。

XML 的文档格式

首先介绍 XML 文档内容的基本单元——元素，它的语法格式如下：

〈标签〉文本内容〈/标签〉

元素是由起始标签、元素内容和结束标签组成。用户把要描述的数据对象放在起始标签和结束标签之间。例如:

<姓名>王平</姓名>

无论文本内容有多长或者多么复杂，XML 元素中还可以再嵌套别的元素，这样使相关信息构成等级结构。下面的例子中，在<employees>的元素中包括了所有职员的信息，每位职员都由<employee>元素来描述，?lt;employee>元素中又嵌套了<name>和<salary>元素。

例 1：

<employees>

<employee>

<name>Lars Peterson</name>

<salary>25000</salary>

</employee>

<employee>

<name>Charlotte M. Cooper</name>

<salary>34500</salary>

</employee>

</employees>

除了元素，XML 文档中能出现的有效对象是：处理指令、注释、根元素、子元素和属性。

● 处理指令

处理指令给 XML 解析器提供信息，使其能够正确解释文档内容，它的起始标识是“<?”，结束标识是“?>”。常见的 XML 声明就是一个处理指令：

<?xml version=“1.0”?>

处理指令还可以有其他的用途，比如定义文档的编码方式是 GB 码还是 Unicode 编码方式，或是把一个样式单文件应用到 XML 文档上用以显示。

● 注释

注释是 XML 文件中用作解释的字符数据，XML 处理器不对它们进行任何处理。注释是用“<!--”和“ --> ”引起来的，可以出现在 XML 元素间的任何地方，但是不可以嵌套：

<!--这是一个注释-->

● 根元素和子元素

如果一个元素从文件头的序言部分之后开始一直到文件尾，包含了文件中所有的数据信息，我们称之为根元素。

XML 元素是可以嵌套的，那么被嵌套在内的元素称为子元素。在前面的例子中，<employee>就是<employees>的子元素。

● 属性

属性给元素提供进一步的说明信息，它必须出现在起始标签中。属性以名称/取值对出现，属性名不能重复，名称与取值之间用等号“=”分隔，并用引号把取值引起来。例如：

<salary currency=“US$”> 25000 </salary>

上例中的属性说明了薪水的货币单位是美元。

XML 的语法

XML 文档的基本结构由序言部分和一个根元素组成。序言包括了 XML 声明和 DTD（或者是 XML Schema），DTD（Document Type Define，文档定义类型）和 XML Schema 都是用来描述 XML 文档结构的，也就是描述元素和属性是如何联系在一起的。

例如，在例 1 的文档前面加上如下的序言部分，就构成了一个完整的 XML 文档：

<?xml version=“1.0”?>

<!DOCTYPE employees SYSTEM“employees.dtd”>

一个 XML 文档中有且仅有一个根元素，其他所有的元素都是它的子元素，在例 1 中，<employees>就是根元素。

一个 XML 文档首先应当是“格式良好的”（Well-Formed），该规定的正式定义位于：

http://www.w3.org/TR/REC-xml

“格式良好的”XML 文档除了要满足根元素唯一的特性之外，还包括：

● 起始标签和结束标签应当匹配：结束标签是必不可少的；

● 大小写应一致：XML 对字母的大小写是敏感的，<employee>和<Employee>是完全不同的两个标签，所以结束标签在匹配时一定要注意大小写一致；

● 元素应当正确嵌套：子元素应当完全包括在父辈元素中，下面的例子就是嵌套错误：

<A>

<B>

</A>

</B>

正确的嵌套方式如下：

<A>

<B>

</B>

</A>

● 属性必须包括在引号中；

● 元素中的属性是不允许重复的。

XML 文档的“有效性”是指一个 XML 文档应当遵守 DTD 文件或是 Schema 的规定，“有效的”XML 文档肯定是“格式良好的”，有关内容我们会在以后详细说明。

XML 的名称空间

XML 文档中很可能会定义许多名字相同而意义不同的元素或属性，尤其在把不同的 XML 文档合而为一时，更容易产生冲突。名称空间就是为了解决这个问题而提出的。它用 URI（Uniform Resource Indicator，统一资源指示器）加以区别，是在 XML 文件的元素和属性中出现的所有名称的集合。如下例：

<pr:payment xmlns:pr=“http://www. microsoft.com/payroll”>

<pr:employee>Lars Peterson</pr:employee>

<pr:description>Reimburse expenses</pr:description>

<pr:total>199.76</pr:total>

</pr:payment>

有了名称空间，用户就可以保证在文件中使用的名称是唯一的。对元素的属性 xmlns 进行定义就表示对该元素指定了一个名称空间。namespace_name 必须是一个有效的 URI。

如果省略 local_prefix（本地前缀），这时就构成了缺省名称空间： <payment xmlns=“http://www.microsoft.com/acct”>

<customer>1234</customer>

<amount>500.00</amount>

<date_received>12-03-2000</date_received> </payment>

如果对一个元素定义了缺省名称空间，那么该元素及其子元素，包括它们的属性都会自动地成为该名称空间的一部分，不用再在每一个元素和属性前面一一标明了。

在本文开始部分，我们对 XML 这个新兴的技术做了一个概述，对它的优缺点进行了分析，并对其美好的应用前景进行了展望。在本文后半部分则对 XML 文档的相关语法、格式做了简要的描述，并介绍了几种有用的开发工具。在以后的内容中，我们会全面展开，深入到 XML 技术内部，去探索一下这个美妙的世界！