刨根究底:XML的本质和作用探讨

简介:

                 刨根究底:XML的本质和作用探讨

要是有人和你说起“XML”而你却一脸茫然的话,那么真的就要被人狠狠的鄙视一把了,真是“平生不识XML,就称高手也枉然”!

 

XML到底有哪些用途呢?下面是网上搜索的一篇比较详细的文章(原文较多,以下仅摘录,原文地址:http://www.webjx.com/xml/20080104/xml_xslt_2806.html ):

1XML可以将HTML与数据分离

通过使用XML,您的数据可存储于HTML之外。

2XML用于交换数据

通过使用XML,可以在互不兼容的系统间交换数据。

3XML可被用来共享数据

通过使用XML,纯文本文件可用于共享数据。

4XML可用于存储数据

通过使用XML,纯文本文件可用于存储数据。

5XML使您的数据更有用

通过使用XML,您的数据可供更多的用户使用。

6XML可被用来创建新的语言

XMLWAPWML之母。

 

除了第一条比较容易理解外,其它看起来都很正确,但我细思考了一下,发现事情没有描述的这么简单:这些作用不是XML的用途,而是纯文本的用途,只要是纯文本,不管是XML,还是Windowsini,还是Javaproperties文件,都有这些用途。你能说XML能够来交换数据,难道我随便写一个文本文件不能交换数据吗?说白了,不是XML太牛,而是因为XML是纯文本,所以才这么牛!

 

啊哈,我一棍子就把XML打死了,难道其他人都是傻瓜吗?

当然不是,既然这么流行,自然有它的原因,而且原因一直隐藏在你视而不见的地方,那就是它的名称所包含的信息:

1X:可扩展。

熟悉HTML的人应该能够很容易理解这个“X”的意思,因为HTML中的标签和结构是不可扩展的,是固定的。

 

可扩展的好处就是任何人都可以根据自己的需要定义标签和结构,而且随便你怎么定义。比如说“父亲”,张三可以定义为“father”,李四可以定义为“dad”,王五可以定义为“爸爸”。。。。。。等等,而如果是HTML,那么可能就只能定义为“father”。

 

当然,也不是说可扩展就完美无缺了,它的缺点在于XML的含义是由定义者决定的,而不是通用的。

 

2M:标记

标记就是用来描述“内容”(在此我不用通常所说的“数据”,后面会进行解释)的,与普通的文本文件或者二进制文件相比,标记的好处就是“容易书写、容易理解”。例如,不管“父亲”是定义成“father”、“dad”还是“爸爸”,都是很容易理解和书写的,而如果用二进制表示,无论是“0101010101”还是“1100110101”都是很难书写和理解的。

 

不要小看了“容易”这两个字,历史已经证明,活下来的不是最优秀的,而是最容易使用的,TCP/IPATMUNIXWindows都是很好的例子。

 

请注意这里只是容易理解,不是说看到标签就完全理解了,在上面的“X”部分已经说了:标签的含义是由定义者决定的。

 

3L:语言

这个才是XML的关键特性:XML本质上和C++Java,甚至英语等一样,都是语言

 

什么是“语言”?简单来说就是描述内容:将你想的东西说出来给别人听,写出来给别人看。只要是一门语言,就应该具备“描述内容”这个作用。

 

既然XML是一门语言,那么它肯定具备“描述内容”这个作用,这也是我在第2部分“M”部分特别说明的不是指“数据”,因为“数据”很容易迷惑人,一说到数据,大家基本上想到了数据库表的一条条记录,或者配置数据(例如“price=100”),如果XML仅仅是用来记录这些数据,那XML作用也太小了,而如果是“内容”,那范围就广了。

 

既然是描述内容,那么毫不夸张的说:XML可以做任何事情!但关键是你需要让它做什么:XML只是一个语言,具体描述什么,是由你来决定的;你定义出XML后,怎么解释也是你的事情。如果你要使用XML,关键不在XML本身,而是你要决定两件事:如何用XML描述你要的东东、如何解释你定义的XML

 

我们看一些XML应用实例,来说明是“内容”而不是单纯的“数据”(当然,如果你硬要说内容也是数据的话,那我就没有办法了):

1AndroidXML来定义一个GUI界面;

2AntXML来定义一个编译流程;

3SpringXML来定义依赖注入;

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

有人说,XML不像C++Java那样,不能编译成可执行程序。其实不然,只要你愿意,你完全可以写一个基于XML的编译器,将你规定的XML文档编译成可执行程序。

 

再加上XML已经形成了标准,全世界都来遵守和使用XML,理所当然的XML会取代其它各种各样的非标准的文本格式了。

 

相关文章
|
7月前
|
XML 存储 数据格式
XML概念和体系
XML概念和体系
33 0
XML概念和体系
|
10月前
|
XML 数据格式
|
XML JavaScript 前端开发
具备spring环境的测试头注解;xml 规则;JavaScript:改变 HTML 内容案例
具备spring环境的测试头注解 具备spring环境的测试头注解 test
119 1
具备spring环境的测试头注解;xml 规则;JavaScript:改变 HTML 内容案例
|
XML JSON IDE
C#复杂XML反序列化为实体对象两种方式 (上)
C#复杂XML反序列化为实体对象两种方式
182 0
C#复杂XML反序列化为实体对象两种方式 (上)
|
XML 程序员 数据格式
轻松搞定XML和对象之间的互转,就它了!
轻松搞定XML和对象之间的互转,就它了!
481 1
轻松搞定XML和对象之间的互转,就它了!
|
XML 数据格式
【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 )
【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 )
299 0
【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 )
|
XML 数据格式 开发者
|
XML 数据安全/隐私保护 数据格式