如果你已经有了自己的个人网站或自己的公司网站,或者你已对Web有了相当的了解,那你可能已经注意到了有关一门新的Web技术的疯狂地讨论---XML。在今年早些微软公司发布了IE5(第一个商业化的支持XML标准的浏览器)后,这种疯狂的热情已经变成了大家争相参与的事实。在这里,你也许会问自己一个很重要的问题:
1.什么是XML?
XML是可扩展标志语言(eXtensible Markup Language)的简称.象HTML一样,XML是从所有标志语言的元语---标准通用标志语言SGML(Standard
Generalized Markup Language)那里派生出来的.SGML是一种元语言,也可以称为一个定义诸如HTML等标志语言的系统.XML也是一种元语言,一个定义Web应用的SGML的子集.和SGML一样,你也可以用XML来定义种种不同的标志语言满足不同的需要,特别在数据表现方面.
随着Web应用的不断发展,HTML的局限性也越来越明显的体现出来了:
首先,HTML是一种界面技术:它把数据和数据的表现形式混在了一起,这使得分开两者变得相当的困难.
它有一个复杂的标签集:你不能用你自己的特定应用标签来扩展它.
它是"平面型"的:你不能指定一种数据的层次结构来表现数据间诸如包含,重要性等这些细节.
它不能把数据简单地传送给客户端让客户端自行进行进一步的处理.事实上,HTML总是在服务器端产生,客户端只是一个显示机器.
它只能提供一种显示方式给你的数据.如果你想提供不同的显示方式,你就不得不在服务器端重新产生这些数据和完整的HTML页,这样才能在客户端显示出来.如果数据和显示形式是分离的话,那你就可以把数据下载到客户端,之后根据你的需要随意发送有关这些数据的不同的显示方式.
它的可读性不强,无论是人读还是计算机读都是一样.HTML也不是很严谨.有些标签需要匹配开始符和结束符
(象<body>和</body>),但是也有一些只有开始符没有结束符(象<p>和<b>).HTML解释器不得不处理这些有点随机的格式.
HTML和XML是World Wide Web Consortium,简称W3C 制定的标准.W3C的成员意识到随着互联网的飞速发展,必须要找到一种办法将数据和网页的表现方式分离开来----因此XML诞生了.为什么不就用SGML呢?这里我不想列举那些恼人的细节,反正有足够的理由来证明SGML相当的复杂(它的说明有500多页);XML标准远比它简单(只有少少的26页).
尽管严格地讲,XML只是一种数据标志说明语言,但它已经开始渐渐地把一系列相关的技术包含进来了,象XML DOM,XSL,XLL,XML
命名空间和VML.在本文中,我们将看到XML,XSL(eXtensible Style Language可扩展形式语言),和XML
DOM (Document Object Model文档对象模型)这几种先进的技术,我们还会介绍其他的标准.
2.剖析一个XML文件
XML 1.0标准可以在www.w3.org/TR/REC-xml这个网址上找到.不过要注意,虽然那不是学习XML的最好去处,但在你看完这篇文章后,请再看看它,相信你会有更深的体会.
在看第一个例子之前,让我们先熟悉一下XML的命名系统.与HTML类似,一个XML的开始标签是这样声明的<标签>.结束标签也类似,不过在小于号后面要加一个前斜杠</标签>.一个标签对和它中包含的内容,象<movie>Gone
with the Wind</movie>,被称为一个元素.所有在一个开始标签和一个结束标签中的东西都被称为一个元素的内容.在上面的例子中,Gone
with the Wind是movie这个元素的内容.XML的开始标签也可以是属性列表,象<tag attribute1="100"
attribute2="200">.
如果XML文件遵循了基本的标准规则(以后会详细介绍),那么它们就是格式正确的XML文件.而所要遵循的最基本的规则就是每一个有开始标签的元素都要有一个相应的结束标签,而且子元素的结束标签一定要在包含它的母元素的结束标签之前.
例如,这就是不和规则的形式:
<auction_item>
<description>
</auction_item>
</description>
而这是合乎规则的形式:
<auction_item>
<description>
</description>
</auction_item>
在W3C的XML标准中有完整而详细的规则列表.一个格式正确的XML文件必须至少包含一个元素.也就是说,文件中必须有根元素(不在其他任何一个元素中的元素).这使得每一个XML文件都是一个层次分明的元素列表.XML文件通过把元素置于其他标签对中,来定义产生这种元素间的层次关系(父子,兄弟关系).
为了说明这一点,让我们来看一个例子:
表 A: XML格式的航空公司的航线数据示例
<?xml version='1.0'?>
<!-- This is an example of airline flights in XML -->
<flight_schedule>
<flight flight_number="1073/61">
<origination>
<city> Raleigh, NC </city>
<airport> RDU (Raleigh Durham Intl.)</airport>
</origination>
<destination>
<city> San Francisco </city>
<airport> SFO (San Francisco Intl.)</airport>
</destination>
<connection>
<city> Charlotte, NC </city>
<airport> CLT </airport>
</connection>
<airline> US Airways </airline>
<price>1492.00</price>
<aircraft>
<manufacturer> Boeing </manufacturer>
<model> 747 </model>
</aircraft>
<movie> No </movie>
<meal> dinner </meal>
<departure_time> 11:00 </departure_time>
<arrival_time> 14:00 </arrival_time>
</flight>
<!-- More flights would go here, check the data file for
an example -->
</flight_schedule>
表A是一些以XML格式表述的航空公司的航线数据.你可以看到XML相对来说可读性比较强.标签和它们的内容都具有相当的自释性.如果在一个HTML表单中又会是怎样的呢?
你几乎不可能把数据从网页中分离出来.但在XML格式下,我们可以轻松地用一个旅行代理程序得到这些数据,把它们存到一个数据库中,或重新格式它的显示方式.
现在让我们进一步剖析这个例子.第一行是XML的标准标题:
<?xml version="1.0" ?>
这个标题告诉处理程序(在这里指IE5 XML解释器和浏览器)这是一个XML文件,同时声明这个文件遵从哪一个XML版本(到现在为止只有1.0版).
文件的下一行是一个注释:
<!--An example of airline flights in XML-->
XML的注释格式和HTML一样,你可能对此早已熟悉.但是与HTML不同的是,XML文件中所有的开始标签都必须匹配一个结束标签,所以在层次结构首部的开始标签<flight_schedule>,必须有一个匹配的结束标签,</flight_schedule>,在文件的结尾.
剩下的则是一系列被开始标签和结束标签定义的元素.这个例子描述了一个有两个航班的航班时间表.每一个航班都包含了下面所示的层次化的数据:
Origination
City
Airport
Destination
City
Airport
Connection
City
State
Airport
Airline
Price
Aircraft
Manufacturer
Model
Departure_time
Arrival_time
摘自《赛迪网》 Scot Wingo/文