在XML出现之前,我们一般都是通过HTML语言来显示数据,为了能够更好的显示信息,HTML 可以和 CSS 一起用于格式化和表示超文本页面。当时随着Web的发展,静态的HTML已经不能满足人们的需要,人们需要在客户端能够对HTML剧本进行动态的控制。也就是说,希望能够通过交互的行为来改变HTML显示模式。这样就出现了DHTML(动态 HTML),DHTML通过 文档对象模型(DOM),使 HTML 中的所有元素,都可以通过与语言无关的脚本和其他编程语言来访问,从而在很大程度上提高了客户机端的交互能力,而且不需要对服务器的额外需求。页面的对象模型允许动态更改任何方面的内容(包括增加、删除和移动)。
但是以上的HTML,CSS,DHTML都是着重于对内容表现的处理,而缺少对内容本身的管理。这样就出现了XML标记语言。通过为结构化数据添加 XML,为开发人员提供了构造下一代丰富、灵活 Web 应用程序的技术。使用 XML,他们可以为桌面提供结构化数据,并且用 XML 对象模型计算数据。现在的开发人员可以在浏览器或者其他应用程序中,通过脚本显示基于 XML 的数据。
XML按照它字面的意思来说,就是扩展的文本标记语言的意思。也就是说它首先是一种文本标记语言,但是它不同于HTML,它是一个可扩展的文本标记语言。为了说明问题,我们举一个最简单的用XML编写的文本。例子如下(不妨命名为SimpleSample.xml):
<?xml version="1.0" encoding="GB2312"?>
<!-- 注意在?和xml之间不准有空格,这就是xml语法严格性的一个体现 -->
<?xml-stylesheet type="text/css" href="SimpleSample.css"?>
<2000年阅读书籍>
<书籍>
<书名>ATL开发指南
<作者>Tom Armstrong
<作者>Ron Patton
<出版社>
<名称>电子工业出版社
<地址>北京市海淀区万寿路173信箱
<出版日期>2000-11
<价格>56元
<评论>
呵呵,让您失望了,我还在阅读,不过感觉讲到了一些技术细节。
要不,你也搞一本自己去看看?
<书籍>
<书名>Inside Server-Based Application
<作者>Douglas J.Reilly
<出版社>
<名称>北京大学出版社
<地址>北京市海淀区中关村北京大学校内
<出版日期>2000-09
<价格>98元
<评论>
贵是贵了一点,不过你要真成了服务器端编程的牛人,钱还不<BR>是大大的?呵呵,这是书评么?
首先注意第一行,<?xml version="1.0" encoding="GB2312"?>,version表示XML的版本,因为解析器对不同的版本的解析肯定会有区别,尽管现在还没有正式的2.0版本。encoding表示解码方式,这里采用的汉字国标的解码方式,但是你也可以省略这个字段,如果省略的话,你就必须采用UNICODE的编码方式,也就是说要以UTF-8或者是UTF-16作为编码。一般推荐指定编码方式,以免产生乱码,这个在下面的章节会有更加详细的介绍。
第二行实际上是一个批注,也就是相当于C++中的注释,在C++中,我们是用"//"做起始符号表示注释的开始的。而在XML语言中,是用""做为结束的。
然后,我们注意第三行,<?xml-stylesheet type="text/css" href="SimpleSample.css"?>,因为XML是内容和表示形式分离的,类似MFC中的文档/视图结构,文档只关心内容,视图表示对内容的表现形式,这行代码就规定了内容的表现形式是由SimpleSample.css这个CSS来控制的,当然更加正宗的是用XSL作为XML的表现形式。
需要注意的是,以""结尾的标注被称为PI,它是Processing Instruction的缩写。PI的作用是用来告诉解析器这个文档的一些相关的信息的。比如上面示例文档的第一句就告诉解析器,我这个文档使用的是XML1.0的规范。第三句告诉解析器,请用SimpleSample.css来装饰并显示我的内容。
另外,从上面这个示例文档中,我们可以看到:与HTML一样,XML也是一个基于文本的标记语言,用标记(一对尖括号)来表示数据。不同的是,XML的标记说明了数据的含义,而不是如何显示它。例如,HTML用标记(< b >...< /b >)表示"粗体",而XML用标记(< message >...< /message >)表示信息的内容。比如<价格>里面的内容就表示是该书的价格。
另外需要注意的是,XML的标记由一对尖括号组成(< tag >...< /tag >),在它们之间是XML数据的一个元素。一个元素可以完全包含在另一个元素之中,这样就可以表示层次结构。XML与HTML的一个重大区别就是XML文档必须是格式良好(well-formed)的,它必须满足一些规则,比如标记不能交错嵌套等。如果没有DTD(Document Type Definition,文档类型定义),文档可以包含任何类型的标记。但如果XML文档有相应的DTD,那么它还需满足DTD所规定的语义。DTD规定在XML文档中可以包含的标记种类和有效布置。只有其结构、数据类型和数据关联等均满足DTD要求的XML文档,才能被称为有效的(validity)XML文档。
每个XML文档都有一个逻辑结构和物理结构。从物理角度来看,文档由实体单元组成,一个实体也可以在其他文档的实体中被引用。一个文档以一个根元素或文档实体来开始。从逻辑上讲,文档由声明(declaration)、元素(element)、注释(comment)、字符引用(character reference)和处理说明(processing instruction)组成。这些组成部分在文档的标记中必须明确规定。 物理结构从另一角度来规范XML文档。文档的起始标记和结束标记对数据进行结构化组织,并确定了元素的范围和相互之间的关系。
在XML文档中,除标记之外就是字符数据。一般的字符用其本身来表示,但这不适用于XML中的保留字符。例如,字符"&"和"<"只能作为标记定界符,或在注释、处理指令和CDATA字段中直接使用,其他情况下则需要用字符引用或特定的字符串来表示。这类字符是XML的预定义实体。比如用<来表示"<",用&gt来表示">"。
实际上,为了能够在不同的组织或单位之间进行信息的传递,就需要使用XML来创建特殊团体之间进行通讯的标准,当前已经存在的标记语言有开放式金融交换标记语言(Open Financial Exchange markup language),它为客户和银行之间的数据传送提供了一个框架结构。