XML的英文全称:Extensible Markup Language ,中文含义为可扩展的标记语言。
下文是一个简单的XML文件:
<root><hello>world</hello></root>
学习过HTML的朋友看到上文的XML后,会发现两者的相似性。
XML是一个标签(TAG)的集合,每个标签总是以“<”开头,以“>”结束。
与HTML不同,XML对格式的要求更为严厉,下文中的HTML片段,被浏览器所支持,不过作为XML的话,会被任何一个XML的解析器(parser)认为是非法。
<html><body>test xml<br>test is ok</body></html>
练习一:新建2个文件,一个扩展名为html,一个扩展名为xml,内容为上文提到的xml范例,分别在IE浏览器中执行,查看结果。
XML的起源
时光倒流到50年前,美国军方搞了一个科研计划,用于让计算机相互通讯,后来这计划孕育出了Internet。
那时候是冷战时代,美国人总担心爆发核战争,军方担心当前苏联的核弹打来的时候,美国总统不能及时下令核弹反击,于是呢就想搞一个核手提箱。
最开始呢,这核手提箱啊,一按按钮,就向卫星发个指令,假设是“001”,卫星就把这个指令转发给每个导弹基地、核潜艇啥的,然后核弹就冲预定目标打过去了。
过了一段时间,美国军方又寻思了,这样不太灵活,万一古巴发射核弹咋整,所有的预定目标都没有包括古巴啊。所以呢,就把通信指令改了一下,改成一种数组结构,“{999,001,cuba;988,001,ussr}”,999呢是指导弹基地编号,001你就是发射核弹,cuba就是古巴了。
又过了一段时间,美国核潜艇升级了,一次巡逻能携带最多48枚核弹,军方希望能发出类似这样的指令:010号核潜艇,向古巴首都打2颗核弹,向莫斯科打4颗核弹,再向位于北冰洋底的前苏联核潜艇打8颗核弹。另外呢,还希望966号核弹基地所有核弹按预定目标发射。这个通信指令就复杂一些了。我们用上文提到的数组结构设计一下通信指令:{010,001,2,cuba#001,4,moscow#001,8,bmms;966,001,-1,null}
经过这几次软件升级,暴露了几个问题:
一,通信协议扩展性极差,数组的维数是固定的,一旦数据项目增减,程序员就被迫增加分割符;
二,程序的升级难度也非常大,每次都需要重新编译新的程序,然后把程序拷贝到每个导弹基地和核潜艇上。
于是,程序员就决定设计一个可灵活扩展的通信协议。这个协议分为两部分,一部分是支持随意增删数据项目的数据存储格式,另外一部分是无论怎么扩展,都能正确解析刚才提到的数据存储格式。
于是乎,XML和XSL就诞生了。
练习二:以上文提到的故事,使用XML设计一个核手提箱的通信协议。
思路:首先要了解业务,从中提取出业务逻辑。
然后,根据业务逻辑,去分析出哪些地方是容易被扩展的,哪些是固定不变的。
最后,要根据上面的故事,将可能出现的发射情况想全,用这些发射情况去验证你写的XML是否能满足这些情况。
学习总结:
XML是树状结构;
XML一定有一个根结点;
XML的结点可以有文本,可以有属性;
XML任意两个结点都可以用父子关系来描述;
除了父子关系,还可以分析出兄弟关系,及兄弟的排行