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

 

相关文章
|
4月前
|
API C++
甩开卡顿!HarmonyOS丢帧问题超详细拆解手册
这是一本针对HarmonyOS丢帧问题的超详细调优指南,从渲染流水线原理到实战优化全面解析。文章拆解了应用侧、Render Service和屏幕显示三大核心模块,结合60Hz/90Hz/120Hz帧率要求,深入分析卡顿原因。通过四步法(识别、录制、定位、优化),提供核弹级性能优化方案,涵盖列表卡顿、动画掉帧、布局臃肿等常见问题,并总结避坑圣经,助你轻松甩开卡顿,打造丝滑体验!
264 1
|
传感器 机器学习/深度学习 人工智能
仿生机器人:自然界灵感的工程应用
【10月更文挑战第14天】仿生机器人作为自然界灵感与工程技术的完美结合,正逐步改变着我们的生活和工作方式。通过深入了解其设计原理、关键技术、应用领域以及未来的发展趋势,我们可以更加清晰地看到仿生机器人在推动科技创新和社会发展中的重要作用。让我们共同期待仿生机器人在未来带来的更多惊喜和变革!
|
9月前
|
JavaScript Linux iOS开发
Motrix:Star46.4k,有了这个开源项目你的烦恼基本少了一半?一款开源功能全面的下载管理器,用上它妈妈再也不用担心下载速度啦~~~
嗨,大家好,我是小华同学。今天为大家介绍一款全能下载管理器——Motrix。它支持HTTP、FTP、BitTorrent等多种协议,拥有简洁易用的界面和强大的下载功能,包括选择性下载、多线程加速、自动更新Tracker列表等,适用于工作、学习和娱乐场景。欢迎关注我们,获取更多优质开源项目和高效工具。
412 15
Motrix:Star46.4k,有了这个开源项目你的烦恼基本少了一半?一款开源功能全面的下载管理器,用上它妈妈再也不用担心下载速度啦~~~
|
11月前
|
JavaScript 前端开发 开发者
call、bind、apply区别
【10月更文挑战第26天】`call`、`bind` 和 `apply` 方法在改变函数 `this` 指向和参数传递方面各有特点,开发者可以根据具体的需求和使用场景选择合适的方法来实现更灵活和高效的JavaScript编程。
191 1
序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】
这篇文章介绍了Java中ObjectInputStream和ObjectOutputStream类的基本使用,这两个类用于实现对象的序列化和反序列化。文章解释了序列化的概念、如何通过实现Serializable接口来实现序列化,以及如何使用transient关键字标记不需要序列化的属性。接着,通过示例代码演示了如何使用ObjectOutputStream进行对象的序列化和ObjectInputStream进行反序列化。
序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】
|
12月前
|
搜索推荐 前端开发 数据安全/隐私保护
改善用户体验方法
【10月更文挑战第9天】改善用户体验方法
854 3
|
存储 缓存 Linux
Linux 根目录下的目录都是什么作用
【6月更文挑战第22天】Linux 根目录下的目录都是什么作用
413 56
|
安全 量子技术 数据安全/隐私保护
探索未来:量子计算在现代科技中的应用与挑战
本文旨在探讨量子计算技术在当前科技领域的应用前景及其所面临的挑战。通过分析量子计算的基本原理、技术发展现状以及在不同行业中的应用案例,本文揭示了量子计算技术的巨大潜力和实际应用中的限制因素。文章进一步讨论了量子计算技术发展过程中的主要技术障碍、安全性问题以及伦理法律挑战,并对未来研究方向提出了展望。
290 29
|
机器学习/深度学习 数据采集 算法
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
在数据爆炸时代,机器学习成为挖掘数据价值的关键技术,而Scikit-learn作为Python中最受欢迎的机器学习库之一,凭借其丰富的算法集、简洁的API和高效性能,引领着机器学习的新纪元。本文通过一个实际案例——识别垃圾邮件,展示了如何使用Scikit-learn进行精准模型选择。从数据预处理、模型训练到交叉验证和性能比较,最后选择最优模型进行部署,详细介绍了每一步的操作方法。通过这个过程,我们不仅可以看到如何利用Scikit-learn的强大功能,还能了解到模型选择与优化的重要性。希望本文能为你的机器学习之旅提供有价值的参考。
186 0
|
弹性计算
阿里云2核2G服务器租用费用,轻量和ECS服务器价格对比
阿里云2核2G服务器,ECS经济型e实例99元/年,轻量应用服务器则为82元/年。ECS还提供其他类型如u1和t6实例。99元的ecs.e-c1m1.large适合新老用户,具有2核2G内存,基础带宽0.2Gbps,最高可达2Gbps。
466 3

热门文章

最新文章