当前位置: 首页 > news >正文

XML已死 ?

近十几年来唱衰XML的声音一直不曾间断过,作为曾经风靡一时的可扩展标记语言,似乎真的江河日下了。近期在跨部门合作过程中,有幸得以接触到以XML作为通用配置的大型工程项目,然而在开发过程中逐渐感受到这种面向xml配置的编程方式使得简单的问题变得复杂。同时,这种自定义的高度可配置化的方式对于项目管理又特别清晰高效。于是对关于如何正确看待XML这个问题陷入了思考….

1、XML发展历史

首先来简单回顾下XML几个重要发展节点:

  • 1978 年,ANSI 将 IBM二十世纪60年代发展起来的GML(Generalized Markup Language)标准化后,发布成为 SGML(The Standard Generalized Markup Language),这成为XML的前身。
  • 1986年,SGML作为一种通用标记语言,为国际标准化组织ISO所采用,但由于SGML定义过于复杂,无法普及。
  • 1995年,考虑到当时HTML的缺陷,作为简化与优化的XML雏形已经形成,并向W3C提案
  • 1998年2月,XML1.0发布,正式成为W3C的标准。

虽然XML生而是为解决HTML的一些弊病,并取而代之。但事与愿违,众所周知XML并没有取代HTML成为新的超文本标记语言。
不过这丝毫不妨碍XML不断发展演化并被广泛用作跨平台数据交换的格式:主要针对数据的内容,通过不同的格式化描述手段(XSLT,CSS等)可以完成最终的形式表达(生成对应的HTML,PDF或者其他的文件格式)。

:HTML也是基于SGML,准确来说HTML是SGML的一个应用(基于SGML的超文本版本)。

没错,JSON是一种优秀的数据交换格式,但是它仅仅是一种数据交换格式(与XML对比)。

2、XML VS JSON

很多开发者唱衰XML也并不是空穴来风,在WEB技术如此炙热的年代,JSON似乎已经成为了一种事实上的WEB交换数据格式标准。

如果严格地从定义上来讲,XML与JSON并不是同一样东西。XML是一种标记元语言,而JSON则是一种轻量级的数据交换格式。从这个点上说,XML与JSON是无法比较的。很多时候时候我们在说XML VS JSON,实际上是指XML作为数据交换格式与JSON这种数据交换格式的比较。

虽然JSON是作为JavsScript的一个子集诞生的,但是它独立于语言。JSON得益于其本身的小巧、简单以及浏览器内建快速解析支持的特性,使得其更适用于网络数据传输领域,在web2.0时代更是一路高歌猛进。

下面是Google Trends和StackOverflow Insights上的数据:

Google Trends:
clipboard.png

StackOverflow Insights:
clipboard.png

可以看出,在2013年左右JSON热度逐渐超过XML。

尽管,JSON在语义表达、数据存储以及检索方面远不及XML,但就是因为其简单、轻量使得其大肆流行于市场。

:从这个点上的启发是简单好用比全面更容易普及。比如当年的OSI七层网络协议与TCP/IP四层协议之争,同样的道理:简单是流行的前提。

3、XML真的死了吗?

看着如此趋势,不免会心生疑问:XML真的死了吗?
答案当然是否定的。
这其实是一种认知偏见,见得少不代表事实上不多。比如segmentfault上大都是偏前端类的技术文章,这说明难道后端技术都消失了嘛?明显不是。

曲线只能说明某种场景下未来的一种趋势,比如在web领域的确xml是不如json使用的广泛。但是在面向SOA架构的企业级软件应用中,XML仍是信息交换的事实标准。XML作为一个可以自定义标签的元标记语言,在描述复杂的业务逻辑时尤其特别适用。
并且, 在当今的出版业中,整个文档处理工作流程都要使用XML。它也是标准的Office文件格式,例如Word、Excel、PowerPoint或Google Docs等。

故,XML并没有死,只是某些领域应用减少,但是其他领域特别是企业级仍然有很多应用。

References

https://www.quora.com/Is-XML-...
https://zh.wikipedia.org/zh-h...
https://www.itcodemonkey.com/...
http://www.cftea.com/c/444.asp
http://siddim.com/archives/47...
https://zh.wikipedia.org/zh-h...

相关文章:

  • 如何查看Oracle官方文档
  • 开发常用的小软件
  • 香港股市大涨 创逾1个月新高
  • 程序员工作法
  • 三分钟了解实时流式大数据分析
  • 韩国企业入驻沈阳跨境电商产业园区
  • Windows 10 的 October 2018 更新开启自动推送
  • git commit的信息如何修改,如何退出修改
  • 驰骋工作流-实验室管理系统cclims
  • 译自由幺半群
  • rabbitmq远程消费者生产者发送端接收端实例
  • Vuex and Typescript
  • shell日志搜索命令
  • 毕玄:我在阿里的十年技术感悟
  • NLPIR智能语义技术让大数据挖掘更简单
  • C++11: atomic 头文件
  • ECMAScript6(0):ES6简明参考手册
  • express + mock 让前后台并行开发
  • JS学习笔记——闭包
  • laravel5.5 视图共享数据
  • Redux 中间件分析
  • Zsh 开发指南(第十四篇 文件读写)
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 大型网站性能监测、分析与优化常见问题QA
  • 对JS继承的一点思考
  • 如何实现 font-size 的响应式
  • 使用parted解决大于2T的磁盘分区
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 以太坊客户端Geth命令参数详解
  • Mac 上flink的安装与启动
  • MyCAT水平分库
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​渐进式Web应用PWA的未来
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 计算机视觉入门
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)(1.11) SiK Radio v2(一)
  • (1)(1.13) SiK无线电高级配置(六)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (四)库存超卖案例实战——优化redis分布式锁
  • (五)IO流之ByteArrayInput/OutputStream
  • (学习日记)2024.01.19
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • . Flume面试题
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET 解决重复提交问题
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET6 命令行启动及发布单个Exe文件