为何使用XML? |
|
|
2004-10-14 10:46:02 |
XML 代表了由全球信息网协会(World Wide Web Consortium;W3C)的XML 工作小组所定义的可延伸标记语言。该小组将XML 描述如下:
「可延伸标记语言(eXtensible Markup Language;XML)是SGML 的一个子集......其目标是让一般的SGML 能够在网站上被服务、接收与处理。如同HTML 一样,XML 被设计成容易实作,并且能够与SGML 及HTML 共同合作。」
这段引言是从官方的XML 规格书1.0 版中摘录下来的,该规格是XML 工作小组于1998 年二月所完成。你可以从http://www.w3.org/TR/REC-xml 的W3C 网站上阅读整份文件。
如你所见,XML 是特别设计来用在全球信息网上传送信息的标记语言,就像HTML(HyperText
Markup Language:超文字标记语言)一样,已成为用来建构网页的标准语言。既然我们已经拥有正在发展中的HTML,而且它彷佛符合你能够想象到的任何需求。你可能会疑惑,为何我们还需要一种针对Web 的全新语言?XML 有何不同之处?其独特的优点与长处为何?与HTML的关系为何?是要取代HTML 亦或增加它的能力?最后,XML 是何种SGML 的子集?为何无法只用SGML 来建立Web 网页?本章将试着告诉你所有答案。
需要XML 的时机
HTML 提供了一组固定的、预先定义好的元素让你可以用来标记典型的、一般用途的网页组件。以元素举例有标题、段落、列表、表格、影像与链接等。例如,HTML 在建构个人的首页上成效良好,如下面的HTML 范例网页所示:
<HTML>
<HEAD>
<TITLE>Home Page</TITLE>
</HEAD>
<BODY>
<H1><IMG SRC="MainLogo.gif">Michael Young's Home Page</H1>
<P><EM>Welcome to my Web site!</EM></P>
<H2>Web Site Contents</H2>
<P>Please choose one of the following topics:</P>
<UL>
<LI><A HREF="Writing.htm"><B>Writing</B></A></LI>
<LI><A HREF="Family.htm"><B>Family</B></A></LI>
<LI><A HREF="Photos.htm"><B>Photo Gallery</B></A></LI>
</UL>
<H2>Other Interesting Web Sites</H2>
<P>Click one of the following to explore another Web site:</P>
<UL>
<LI>
<A HREF="http://www.yahoo.com/">Yahoo Search Engine</A>
</LI>
<LI>
<A HREF="http://www.amazon.com/">Amazon Bookstore</A> </LI>
<LI>
<A HREF="http://mspress.microsoft.com/">Microsoft
Press</A>
</LI>
</UL>
</BODY>
</HTML> |
使用Microsoft Internet Explorer 5 显示上例的范例网页如下图:

每一个元素都是以一个起始标签开始:起始卷标是一大段文字,前面伴随者(<)符号,后面则是跟着(>)符号作为卷标的结尾,中间包含元素的名字及其它的信息。大多数的元素是以结束卷标来作结束,结束标签与相对应的起始标签类似,除了多了一个(/)符号于元素名称之前。
元素的内容则是那些位于起始卷标与结束卷标之间的文字(如果有的话)。请注意,前面范例网页中许多数元素都包含了巢状的元素结构。

前面的范例网页中包含了下列元素:
| HTML 元素 |
网页组件卷标 |
| HTML |
整个网页 |
| HEAD |
标题信息,如网页标题 |
| TITLE |
网页标题,会出现在浏览器的标题列 |
| BODY |
浏览器显示文字的主要部份 |
| H1 |
最上层的标题 |
| H2 |
第二层的标题 |
| P |
文字段落 |
| UL |
设定项目列表(无顺序编号的列表) |
| LI |
列表中的个别项目(列表项目) |
| IMG |
影像 |
| A |
连结到其它位置或网页的链接(Anchor 元素) |
| EM |
斜体(加强的)文字区块 |
| B |
粗体文字区块 |
负责显示HTML 网页的浏览器能够识别出每一个标准元素,并且知道该如何来安排与显示它们。例如,浏览器通常会以最大字型来显示H1 标题,以较小字型来显示H2 标题,以及更小的字型来显示P 元素。浏览器会将包含在无顺序编号列表中的LI 元素以实心圆(●)作为项目符号以内缩的段落来显示。并且会把A 元素转换成含有底线的链接,让使用者可以点选以进入不同的位置。
虽然从第一版的HTML 以来,这些预先定义好的HTML 元素已经有了相当大的扩充,HTML 仍然不适合用来定义多种型式的文件。下面所列的就是一些无法使用HTML 来做适当描述的文件范例:
非传统组件(标题、段落、串行、表格等等)所组成的文件 。例如,HTML 缺乏用来标记音乐乐谱或数学方程式所需的元素。
数据库数据,如书籍的存货清单 。你可以使用HTML 网页来储存并显示静态的数据库信息(如书籍叙述的列表)。然而,如果你希望进行排序、筛选、搜寻以及利用其它方法来处理这些信息,那么信息的每一个个别区段都需要被标示(如同数据库程序中所做像的一样,例如:Microsoft Access)。HTML 缺乏完成这项工作所需的元素。
以树状的阶层式结构来进行组织的文件 。假设你正在撰写一本书,而且想要将书籍的内容标记成篇、章、A 段、B 段、C 段等等。应用软件可以利用这种结构化的文件来产生内容的目录,产生不同详尽程度的概要,摘录特定区段,并以其它方式来运用这些信息。然而,HTML 的标题元素,只能标记标题本身的文字部份。例如:
<H2>Web Site Contents</H2>
因为你无法将实际文字与属于文件区段的元素套到标题元素中建立套巢状结构,所以这些元素不能被用来明确地表明文件的阶层结构。这些限制的解决之道就是XML。
XML 解决方案
XML 的定义部份是由基础的语法组成。当你建立XML 文件时,你可以建立自己的元素并以任何你喜爱的名字为它们命名,而不是只能使用那些受限制的预先定义好的元素群组,因而达成了可延伸卷标语言中的「可延伸(extensible)」的特性。所以你几乎可以使用XML 来描述所有形式的文件,从音乐乐谱到数据库。例如,你可以描述书籍的列表,如下面的XML 文件中所示。
<?xml version="1.0"?>
<INVENTORY>
<BOOK>
<TITLE>The Adventures of Huckleberry Finn</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
<BOOK>
<TITLE>Moby-Dick</TITLE>
<AUTHOR>Herman Melville</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>605</PAGES>
<PRICE>$4.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The Scarlet Letter</TITLE>
<AUTHOR>Nathaniel Hawthorne</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>253</PAGES>
<PRICE>$4.25</PRICE>
</BOOK>
</INVENTORY>
注意
当被用来描述数据库时,XML 拥有两项凌驾于专有格式(如Access .mdb 或dBase .dbf 格式)的优点:XML 是人类易读的,而且它是根据众所周知、开放式的标准所建立的。
很重要的一点是,你必须要知道,在XML 文件中的元素名称(例如在这个范例中,元素的名称是INVENTORY、BOOK 与TITLE)并不是XML 定义中的一部份。不如说,当你建立特定文件时,你会编造这些元素名称。而且你可以为元素选择任何正确的名称(如,LIST 而不是INVENTORY,或者是ITEM 而不是BOOK)。
提示
当你为XML 文件中的元素命名时,试着选择具描述性的名字-例如宁可取BOOK 或ITEM 而不是FOO 或BAR。XML 文件的一项优点是它可以自我描述,意即每一段信息可以拥有描述性的卷标附属在信息之上。
如同你在前面范例中所见到的,XML 文件在组织上是利用树状阶层结构,里面的元素完全地套在其它元素与一个单一顶层(根)元素(在这个范例中是INVENTORY)之中-该元素被称之为文件元素(document element)或根元素(root element)-包含了所有其它元素。该范例XML 文件的结构可以绘制如下:

因此你可以很快地使用XML 来定义阶层式结构化的文件,例如内含部、章以及不同等级的区段的书籍,如之前所提到的。
撰写XML 文件
因为XML 并未包含预先定义好的元素,所以两相比较之下它可能看起来像一个非正式的标准。然而,XML 是拥有严格定义的语法的。例如,不像HTML,每一个XML 元素必须拥有一个起始卷标与结束卷标(或者是一个特别的空白标签,后面的章节中将介绍这部份)。而且任何巢状的元素必须完全地包含在自己的元素之中。
事实上,建立个人元素的强大弹性需要严格的语法。这是因为XML 文件的自订功能要求各种自订程序能够处理并显示XML 文件中所包含的信息。这种严格的XML 语法赋予XML 文件一种可以预期的格式,并且让程序更容易撰写。如本章开始时所引用的引言,「容易实作」是XML语言的一项主要目标。
本书的第二篇探讨建立符合语法规则的XML 文件。你可以学会撰写两种不同严谨要求的任一种符合语法的XML 文件。文件会根据它符合标准的等级被区分为「格式正确的」或「有效的」。
显示XML 文件
例如,在HTML 网页中,浏览器认识H1 元素是最顶层的标题,并且根据规则来安排与显示元素。因为H1 这个元素是HTML 标准的一部份,所以这是可能的。但是浏览器或其它程序如何能够知道要如何处理与显示你所建立的XML 文件中的各个元素(如范例文件中的BOOK 或BINDING
两元素)?因为这些元素是你自己定义的。
有三种基本的方法可以用来告诉浏览器(特别是Microsoft Internet Explorer 5)如何处理与显示你的每一个XML 元素。(本书的第三部将详细讨论这些技术。)
样式表链接 。利用这项技术,你可以将样式表链接到XML 文件上。样式表是一个内含安排各个XML 元素指令的个别档案。你可以使用串接样式表(CSS)-它也用在HTM 网页中-或延伸样式表语言(XSL)-拥有较CSS 强大的威力而且是特别为XML 文件所设计。第二、七、十章中将讨论这些技术。
数据链路 。这个选项会要求你建立一份HTML 网页,将XML 文件链接到该网页,并且将网页中的标准HTML 元素,如SPAN 或TABLE 元素,连结到XML 元素。这些HTML 元素接着会自动地显示从它们连结到的XML 元素而来的信息。你将在第八章中学到这项技术。
Scripting 。利用这项技术,你将建立HTML 网页,将XML 文件链接到该网页,并且借着撰写script 程序(JavaScript 或Microsoft Visual Basic Scripting Edition:VBScript)来使用与显示个别的XML 元素。浏览器会将XML 文件以文件对象模型(DOM)显示,该模型提供了一组庞大的对象、属性与模型的集合,让script 可以用来存取、管理与显示XML 元素。第九章将讨论这项技术。
SGML、HTML 与XML
SGML(Structured Generalized Markup Language),为结构化通用卷标语言的缩写,是所有卷标语言的起源。HTML 与XML 都是由SGML 衍生而来(虽然根本上是利用不同的方法)。SGML定义了基本的语法,但也允许你建立自己的元素(因此才有「通用」二字)。要利用SGML 来描述特定文件,你必须创造出一组适当的元素与文件结构。例如,要描述书籍,你可能会使用命名为BOOK、PART、 CHAPTER、 INTRODUCTION、 A-SECTION、 B-SECTION、 C-SECTION 等等元素。
用来描述特殊型态文件的一般用途元素集称为SGML 应用程序。(SGML 应用程序也包含了指定元素以何种方式被安排的规则-以及其它特性-这是第五章将讨论的技术。)你可以定义自己的SGML 应用程序来描述你正在进行的特殊型态文件,或建立一个标准主体,它可以定义SGML应用程序来描述被广泛使用的文件型态。后者(即标准实体)最著名的例子便是HTML,为1991年开发出来描述网站网页的SGML 应用程序。
表面上看来 ,SGML 似乎是描述网站文件的完美延伸语言。然而,W3C 中的成员却认为SGML太过复杂而且太过麻烦,无法有效率地在网站上传递信息。SGML 所提供的弹性与其它特性,让撰写负责在网页浏览器中处理与显示SGML 信息的软件变得非常困难。我们所需要的是特别针对在网站上传输信息所设计的一组有效率的SGML 子集。1996 年,W3C 中的XML 工作小组开发出这套子集,命名为可延伸卷标语言(XML)。如同本章一开始所引用的话,XML 是为了达成SGML 中所缺乏的「容易实作」特性而设计的。
因此XML 是针对网站进行最佳化的SGML 的简化版本。如同SGML 一样,XML 让你在描述特殊文件时可以创造自己的元素集。就像SGML 一样,个别的或标准的主体都可以定义XML 应用程序(也可以称为字汇(vocabulary),为一组一般用途的元素与文件结构,可以用来描述特殊型态的文件(例如,包含数学方程式或向量图形的文件)。你将在本章中学到更多有关XML 应用程序的知识。
XML 的语法提供了较SGML 少的语法选项,让它可以更容易让人们阅读,并且让程序设计人员更容易撰写与显示文件信息的浏览器、script,以及网站的网页。
XML 能够取代HTML 吗?
就目前来说,这个问题的答案是不能。HTML 仍然是用来告诉浏览器如何在网站上显示信息的主要语言。
在Internet Explorer 5 中,你可以在浏览器中直接开启一个附样式表的XML 文件,而不必使用HTML 网页来显示XML 文件。
然而,另两种显示XML 文件的主要方法是:数据链路与DOM script-都是使用HTML 网页做为媒介来显示XML 文件。(即使是利用样式表的方法也一样,如果你利用XSL,最终还是需要利用HTML 来告诉浏览器如何安排XML 数据。)
XML 不是要用来取代HTML,XML 目前是用来与HTML 合作以扩展网站网页的功能,来达成:
传输任何型态的文件。
以其它方式来排序、筛选、重新安排、搜寻与管理信息。
呈现高度结构化信息。
如同本章一开始所引用的话,XML 是设计来与HTML 共同合作的。
XML 的官方目标
接下来介绍的是公布在W3C 网站( http://www.w3.org/TR/REC-xml )上的官方XML 规格书中所阐述的XML 的十个设计目标:
1. XML 应该在因特网上直接可用 。
如同你在本章中已看到的,XML 主要是设计来在网站上储存与传输信息。
2. XML 应该支持各类不同的应用程序 。
虽然XML 的主要目的是在网站上透过服务器与浏览器程序来传输信息,XML 也被设计来供其它型式的软件使用。例如,XML 已被用来在金融软件间往来信息、分发与更新软件,以及被用来撰写声音script 以便能透过电话传输。
3. XML 应该与SGML 兼容 。
如同之前解释过的,XML 是SGML 的一组特殊用途的子集。这项特点的好处是SGML 软件工具可以轻易地加入来和XML 共同运作。
4. 应该很容易撰写处理XML 文件的程序 。
如果XML 要能够广泛地被实作,那么浏览器与其它负责处理XML 文件的程序应该要很容易撰写。事实上,推衍出SGML 的XML 子集的主要原因是撰写负责处理SGML 文件程序的不方便。
接下来所提的设计目标主要都是为了支持这项基础目标。
5. XML 中的选择性功能的数目应该维持在最小值,理想情况是零。
在XML 中使用最少数目的选择性功能让开发人员在撰写程序来处理XML 文件时变得较为容易。在SGML 中丰富的选择性功能就是SGML 被认为无法定义网站文件的主因。这些选择性的SGML 功能包含了在卷标中重新定义限定字符(一般是「<」与「>」)以及当处理程序可以指出元素在那里结束时,可以省略结束标签。一个用来处理SGML 文件功能的完整应用软件,必须对所有选择性功能负责,即使是那些不常使用的功能。
6. XML 文件应该是易读且合理清楚的 。
XML 是为了成为世界上使用者与应用程序之间往来信息的通用媒介而设计的。易读的特性让人们和某些特定的软件程序可以容易地撰写及阅读XML 文件。XML的易读性将XML 从用于数据库与文字处理文件的大多数专有格式中区别出来。因为XML 文件是以纯文字撰写且拥有逻辑的树状结构,所以人们可以轻易地阅读XML 文件。你可以藉由它为你文件的元素、属性与实体选择有意义的名称,并加入有用的批注来加强XML 的可读性。(笔者将在后面的章节中解释元素、属性、实体与批注。)
7. XML 的设计应该能迅速地完成准备 。
当然,XML 只有在程序设计人员与使用者族群愿意接受它的情况下才能成为可实行的标准。因而该标准必须在族群开始接受其它替代标准之前完成,因为软件公司当然希望能快速的产生成品。
8. XML 的设计应该合乎格式并且简洁 。
XML 的规格以用来定义计算机语言的正规语言撰写,一般称之为Extended
Backus-Naur Form(EBNF)标签法。这种正规语言,虽然有时难以阅读,但是它解决了意义不明确的问题,并在最后让撰写XML 文件与(尤其是)XML 处理软件变得更为容易,进而促进了XML 被接受的可能性。
9. XML 文件应该容易建立 。
为了让XML 成为网站文件实际应用的卷标语言,不只是XML 的处理程序必须容易撰写,而且XML 文件本身也必须容易建立。
10. 将XML 标签简化是最不重要的 。
为了与目标6 一致(XML 文件应该是易读的且合理清楚的),XML 标签必须不能太过简洁以免变得难以阅读。
标准的XML 应用程序
如你所见,你不但可以利用XML 来描述个别的文件,同时个人、公司,或标准委员会也可以定义一组一般用途的XML 元素集以及文件结构,以提供针对特殊类别的文件使用。一般用途的元素集与文件结构通常称之为XML 应用程序(XML application)或XML 字汇(XML vocabulary)。
例如,企业可以建立XML 应用程序,该程序可以建立定义分子结构的文件、描述人力资源的文件、编排多媒体方式呈现的文件,或储存向量图形的文件等。在本章的结尾部份,笔者会列出某些已经建构完成或已经被提出可以公开取得的XML 应用程序。
XML 应用程序通常藉由建立文件型态定义(DTD:document type definition)来进行定义,DTD是XML 文件的选择性组件。DTD 就像数据库的概要:它用在当你为文件中的元素进行定义并命名、安排元素出现的顺序、可以使用的元素属性,以及其它文件的特性时。要使用特殊的XML应用程序,你通常会含括DTD 到你的XML 文件中,在文件中加入DTD 限制你可以使用的元素与结构,如此你的文件会被强迫符合应用程序的标准。你在本章前面所看到的XML 文件并未包括DTD。你将在第五章学习如何定义与使用DTD。
使用标准XML 应用程序来发展文件的优点是你可以将文件分享给应用程序的其它使用者使用,而且文件可以使用针对该应用程序已经开发完成的各类软件来进行处理与显示。
加强XML 文件的XML 应用程序
除了XML 应用程序可以描述特定类型的文件外,还有数个已经定义完成的XML 应用程序让你可以用在任何型态的XML 文件之中。这些应用程序让建立文件变得更容易而且允许你强化文件的功能。
这些应用程序包括有:
延伸样式表语言(XSL) 允许你利用XML 语法建立更具威力的文件样式表。
XML Schema 让你为你的XML 文件使用标准的语法撰写结构的细节。它提供了另一种更具威力的方式来撰写DTD。
XML 链接语言(XLink) 允许你链接XML 文件。它允许多个链接目标以及其它先进的特性,而且较HTML 的链接机制具有更强大的效能。
XML 指针语言(XPointer) 让你定义具有弹性的链接目标。你可以使用Xpointer结合XLink 并链接到目标文件的任何位置,而不是只局限于卷标的链接目标。
第十章将探讨XSL 的相关事项。其它的XML 应用程序仍然在持续发展 而且也已经超过本书的范围。(XLink 与XPointer 在Internet Explorer 5 中并不被支援。)
你可以发现,XML 不但是定义文件的立即有效工具,它同时也能用来建立应用程序,并随着因特网不断发展强化其架构。
XML 在实际例子中的使用概况
虽然XML 看起来似乎是一个很有趣的观念,但是你可能会怀疑在实际例子中你到底可以利用XML 来做哪些事。在这一节中,列出了一些XML 实际用途的范例。包含目前XML 被使用的方式,以及其它不同团体所建议的用途。如果某些XML 应用程序是针对特定用途被定义,它们将会被括号起来。例如,从下面列表中你可以判断MathML 是一个XML 应用程序,让你可以格式化数学方程式。
提示
有关目前正在使用与各界建议的XML 应用程序的列表,包含每一个应用程序的详尽叙述,请参阅Oasis SGML / XML Web 的网页( http://www.oasisopen.org/cover/xml.html#applications )。
储存数据库 。就像专有的数据库格式,XML 可以用来标记数据库记录中的每一个字段。(例如,XML 可以标记地址列表数据库中每一笔数据记录的名字、住址与电话号码。)标记每一个信息的片段让你可以用不同的方式来显示数据,并且以其它方式来对资料进行搜寻、排序、筛选与处理。
组织文件 。XML 文件的树状结构让XML 更适合制作文件,如小说、非文学类小说,以及剧本等结构。例如,你可以使用XML 来标记剧本中的幕、镜头、旁白、台词、舞台方向等等。XML 的卷标允许软件根据喜爱的格式来显示或打印文件;来搜寻、摘要或管理文件的信息;来产生内容、纲要,与概要的表格,并以其它方式来处理信息。
储存向量图形 。(VML(Vector Markup Language:向量卷标语言))
描述多媒体呈现模式 。(SMIL:多媒体同步整合语言,或者是HTML+TIME、HTML,以及Timed Interactive Multimedia Extensions)
定义频道 。频道是推销给(自动传送)订阅者的网页。(CDF;Channel Definition
Format:频道定义格式)
描述软件包与其相互依赖性 。这些叙述让软件包可以在网络上部署与更新。(OSD;Open Software Description:开放式软件描述)
在一种开放与可扩充的方式中使用以XML 为基础的讯息,跨网络来对应用程序进行通信 。这些讯息独立于操作系统、对象模型,与使用的计算机语言。(SOAP;Simple Object Access Protocol:简单对象使用协议)
透过电子邮件来传送电子商务名片 。
往来金融信息 。该信息是以开放的、人类可读的格式,在金融软件(如Quicken
与Microsoft Money)与金融机构(如银行与共同基金)间进行往来。(OFX;Open Financial Exchange:开放式的金融往来)
为因特网上的商业交易建立、管理,与使用复杂的数字格式 。这些窗体可以包含数字签名,让窗体成为可以合法连结的。(XFDL;Extensible Forms Description
Language:延伸窗体描述语言)
转换职务说明与个人简历 。(HRMML;Human Resource Management Markup
Language:人力资源管理卷标语言)
为网站上的数学方程式与科学内容格式化 。(MathML;Mathematical Markup
Language:数学卷标语言)
描述分子结构 。(CML;Chemical Markup Language:化学卷标语言)
编码并显示DNA、RNA、蛋白质串接信息 。(BSML;Bioinformatic Sequence
Markup Language:生物信息串接卷标语言)
宗谱数据编码 。(GedML;Bioinformatic Sequence Markup Language:宗谱数据卷标语言)
转换天文学数据 。(AML;Astronomical Markup Language:天文学卷标语言)
撰写乐谱表 。(MusicML;Music Markup Language:音乐卷标语言)
为透过电话传输储存声音script 。例如,声音script 可以被用来产生有声邮件、股市报价,以及天气报告。(VoxML)
利用信差服务来储存追踪信息 。例如,联邦快递目前就是使用XML 来达成这个项目的。
以数字格式发送全国性的报纸广告 。( Ad Markup)
以电子方式为合法文件建档与往来合法文件 。(XCI,或XML 法庭界面)
气象观测报告编码 。(OMF;Weather Obser-vation Markup Format:气象观测标签格式)
转换不动产交易信息 。(RETS;Real Estate Transaction Standard:不动产交易标准)
转换保险相关数据 。
使用开放式网站标准来转换新闻与信息 。(XMLNews)
呈现神学信息与卷标礼拜仪式文字 。(ThML;Theological Markup Language:神学卷标语言,与LitML;Liturgical Markup Language:礼拜仪式卷标语言)
|
| 内容为网上收集,并不代表本站同意或者赞同其观点,如果有任何版权,内容问题,请联系本站,我们将在第一时间处理. |
|
|
|