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

简介:

                 刨根究底: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会取代其它各种各样的非标准的文本格式了。

 

相关文章
|
算法 Python
请解释Python中的关联规则挖掘以及如何使用Sklearn库实现它。
使用Python的mlxtend库,可以通过Apriori算法进行关联规则挖掘。首先导入TransactionEncoder和apriori等模块,然后准备数据集(如购买行为列表)。对数据集编码并转换后,应用Apriori算法找到频繁项集(设置最小支持度)。最后,生成关联规则并计算置信度(设定最小置信度阈值)。通过调整这些参数可以优化结果。
700 9
|
监控 Python
手把手教你用 Python 制作一场炫酷烟花秀
本篇文章,带大家用 Python 制作一个炫酷烟花秀,来迎接即将到来的元旦佳节。开始之前先看一下最终效果
手把手教你用 Python 制作一场炫酷烟花秀
|
编解码 算法 文件存储
浅谈动图文件格式 - GIF
介绍动图的文件格式,及其优劣
3817 0
浅谈动图文件格式 - GIF
|
12月前
|
存储 人工智能 监控
信息化≠数字化,盘点二者的主要区别
信息化重在“流程线上化”,提升效率;数字化则以数据驱动,重塑业务模式与价值。前者让流程更规范,后者用数据创造新可能,二者承前启后,共同推动企业转型升级。
信息化≠数字化,盘点二者的主要区别
|
存储 SQL 分布式计算
MaxCompute 聚簇优化推荐原理
基于历史查询智能推荐Clustered表,显著降低计算成本,提升数仓性能。
646 4
MaxCompute 聚簇优化推荐原理
|
机器学习/深度学习 缓存 自然语言处理
30_情感分析变体详解:从极性到细粒度 - 深度解析与教学
情感分析(Sentiment Analysis),又称意见挖掘(Opinion Mining),是自然语言处理(NLP)领域的核心任务之一,旨在自动识别和提取文本中的情感信息。随着社交媒体的普及和用户生成内容的爆炸式增长,情感分析技术在商业决策、舆情监测、产品开发等领域发挥着越来越重要的作用。
889 1
|
jenkins 持续交付 开发工具
利用Dockerfile自主构建Jenkins镜像
希望这个过程能善用你的野马般想象,把自己置身于和计算机的卓尔不凡的对话中,让编程的过程充满趣味。
583 36
|
Ubuntu 定位技术 TensorFlow
源码编译安装ROCm以运行tensorflow-rocm(适用于Ubuntu 23.04)
总结一番,完成这趟奇妙的技术之旅后,乐趣多多,还能享受 tensorflow-rocm 带来的便利和速度。这趟旅程需要耐心,勇气,以及对技术的热爱。朋友,做好准备,让你的Ubuntu系统展翅高飞吧!
770 9
|
云安全 人工智能 安全
构建云上安全共同体 | 阿里云亮相2024年(第十三届)电信和互联网行业网络安全年会
构建云上安全共同体 | 阿里云亮相2024年(第十三届)电信和互联网行业网络安全年会
|
存储 SQL 缓存
PostgreSQL DirectIO开发实践
在数据库开源的背景下,基于PG的DirectIO的研发方案分享。
PostgreSQL DirectIO开发实践