刨根究底:XML的本质和作用探讨
要是有人和你说起“XML”而你却一脸茫然的话,那么真的就要被人狠狠的鄙视一把了,真是“平生不识XML,就称高手也枉然”!
XML到底有哪些用途呢?下面是网上搜索的一篇比较详细的文章(原文较多,以下仅摘录,原文地址:http://www.webjx.com/xml/20080104/xml_xslt_2806.html ):
1)XML可以将HTML与数据分离
通过使用XML,您的数据可存储于HTML之外。
2)XML用于交换数据
通过使用XML,可以在互不兼容的系统间交换数据。
3)XML可被用来共享数据
通过使用XML,纯文本文件可用于共享数据。
4)XML可用于存储数据
通过使用XML,纯文本文件可用于存储数据。
5)XML使您的数据更有用
通过使用XML,您的数据可供更多的用户使用。
6)XML可被用来创建新的语言
XML是WAP和WML之母。
除了第一条比较容易理解外,其它看起来都很正确,但我细思考了一下,发现事情没有描述的这么简单:这些作用不是XML的用途,而是纯文本的用途,只要是纯文本,不管是XML,还是Windows的ini,还是Java的properties文件,都有这些用途。你能说XML能够来交换数据,难道我随便写一个文本文件不能交换数据吗?说白了,不是XML太牛,而是因为XML是纯文本,所以才这么牛!
啊哈,我一棍子就把XML打死了,难道其他人都是傻瓜吗?
当然不是,既然这么流行,自然有它的原因,而且原因一直隐藏在你视而不见的地方,那就是它的名称所包含的信息:
1)X:可扩展。
熟悉HTML的人应该能够很容易理解这个“X”的意思,因为HTML中的标签和结构是不可扩展的,是固定的。
可扩展的好处就是任何人都可以根据自己的需要定义标签和结构,而且随便你怎么定义。比如说“父亲”,张三可以定义为“father”,李四可以定义为“dad”,王五可以定义为“爸爸”。。。。。。等等,而如果是HTML,那么可能就只能定义为“father”。
当然,也不是说可扩展就完美无缺了,它的缺点在于XML的含义是由定义者决定的,而不是通用的。
2)M:标记
标记就是用来描述“内容”(在此我不用通常所说的“数据”,后面会进行解释)的,与普通的文本文件或者二进制文件相比,标记的好处就是“容易书写、容易理解”。例如,不管“父亲”是定义成“father”、“dad”还是“爸爸”,都是很容易理解和书写的,而如果用二进制表示,无论是“0101010101”还是“1100110101”都是很难书写和理解的。
不要小看了“容易”这两个字,历史已经证明,活下来的不是最优秀的,而是最容易使用的,TCP/IP和ATM、UNIX和Windows都是很好的例子。
请注意这里只是容易理解,不是说看到标签就完全理解了,在上面的“X”部分已经说了:标签的含义是由定义者决定的。
3)L:语言
这个才是XML的关键特性:XML本质上和C++,Java,甚至英语等一样,都是语言!
什么是“语言”?简单来说就是描述内容:将你想的东西说出来给别人听,写出来给别人看。只要是一门语言,就应该具备“描述内容”这个作用。
既然XML是一门语言,那么它肯定具备“描述内容”这个作用,这也是我在第2部分“M”部分特别说明的不是指“数据”,因为“数据”很容易迷惑人,一说到数据,大家基本上想到了数据库表的一条条记录,或者配置数据(例如“price=100”),如果XML仅仅是用来记录这些数据,那XML作用也太小了,而如果是“内容”,那范围就广了。
既然是描述内容,那么毫不夸张的说:XML可以做任何事情!但关键是你需要让它做什么:XML只是一个语言,具体描述什么,是由你来决定的;你定义出XML后,怎么解释也是你的事情。如果你要使用XML,关键不在XML本身,而是你要决定两件事:如何用XML描述你要的东东、如何解释你定义的XML。
我们看一些XML应用实例,来说明是“内容”而不是单纯的“数据”(当然,如果你硬要说内容也是数据的话,那我就没有办法了):
1)Android用XML来定义一个GUI界面;
2)Ant用XML来定义一个编译流程;
3)Spring用XML来定义依赖注入;
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
有人说,XML不像C++和Java那样,不能编译成可执行程序。其实不然,只要你愿意,你完全可以写一个基于XML的编译器,将你规定的XML文档编译成可执行程序。
再加上XML已经形成了标准,全世界都来遵守和使用XML,理所当然的XML会取代其它各种各样的非标准的文本格式了。