文章摘要
文章认为XML被低估和遗弃并非因其不足,而是因JavaScript和浏览器的胜利导致人们追求便利。XML提供了严格的模式定义、类型检查等优势,这些在追求简约的潮流中被牺牲了。作者呼吁重新审视XML的价值。
文章总结
被遗忘的XML艺术
在软件工程领域,人们对XML存在一种奇特的集体失忆。如今提起XML,往往会收获心照不宣的微笑或敷衍的挥手——这种对待过时技术般的宽容态度实则荒谬。XML并非因自身缺陷被淘汰,而是随着JavaScript的胜利被我们主动抛弃。
XML的核心价值
我们为追求极简主义牺牲了XML的诸多优势:
严谨的校验机制
XML Schema Definition (XSD) 提供文档级类型检查,可强制规定元素类型、出现次数及必需属性。这种结构化验证是工程规范的基础,而JSON仅能通过事后添加的JSON Schema实现类似功能,且普及度有限。
命名空间支持
XML允许不同语义域的词汇表共存,这是SVG、MathML等标准得以实现的基础。JSON面对键名冲突时只能依赖临时解决方案。
原生注释功能
XML将注释作为一等公民,而JSON规范明确禁止注释,理由是"会增加解析复杂度"。
自描述特性
XML文档通过模式定义自我说明数据结构,而JSON的嵌套字典缺乏类型标识,必须依赖外部文档解释。
与S表达式的渊源
XML本质上是用尖括号替代括号的S表达式,其嵌套标签结构与Lisp的数据即代码哲学一脉相承。相比之下,JSON只是JavaScript对象字面量的副产品,从未被设计为数据交换格式。
错误选择背后的逻辑
开发者以"XML冗长"为由选择JSON/YAML,实则是将审美偏好伪装成技术判断。XML的闭合标签虽增加字符量,却使结构显式化;而YAML的缩进语法和隐式类型反而带来更多歧义。
这种选择暴露了行业的认知误区:将开发便利性与技术正确性混为一谈。我们宁愿花费数十亿优化错误选择(如将JVM玩具改造成企业平台),也不愿从一开始就采用合适方案。同样,为弥补JSON的缺陷,我们不得不创建TypeScript等类型系统,重造XML早已提供的轮子。
物理与逻辑的混淆
XML的实质是其信息集模型,而尖括号文本仅是序列化方式之一。Fast Infoset和EXI等二进制编码早已解决传输效率问题。但行业却因厌恶表面语法,将整个模型连同其模式验证、命名空间等核心价值一并抛弃。
我们失去了什么
放弃XML意味着失去: - 基于模式的前置验证 - 文档组合能力 - 自解释特性 - 结构/内容分离设计 - 运行时前验证工具
换来的仅是: - 更短的字符量 - JavaScript原生解析
这种交换堪称本末倒置。微软在MSBuild、WPF等关键系统中坚持使用XML,正是认识到复杂系统需要严谨的表达形式。当前将XML视为"过时"的偏见,恰恰反映了我们重表面轻实质的行业现状。
(保留原文核心论证结构,删减了部分重复性例证和过渡性语句,压缩了关于JVM的类比段落,使论点更聚焦。保留关键技术概念如XSD、Fast Infoset等的专业术语,同时确保中文表达流畅。)
评论总结
以下是评论内容的总结,平衡呈现正反观点:
反对XML的主要观点:
冗长低效
- "XML was abandoned because we realized bandwidth costs money... unnecessarily chatty" (shadowgovt)
- "XML is violently wordy... 50% of CPU用于解析XML" (com2kid)
复杂性与工具链问题
- "XSD是难以理解的怪物... 真正的XML爱好者推崇RELAX NG" (mkozlows)
- "XML生态存在建模模糊性,必须依赖笨重的DOM对象" (inasociety)
机器间通信不适用
- "XML设计初衷是文档,JSON为数据结构... 用XML传API数据是历史错误" (lighthouse1212)
- "属性(attributes)和命名空间使自动映射到语言数据结构变得不可能" (acabal)
支持XML的主要观点:
强类型与结构化优势
- "银行系统集成中,XSD/WSDL能1:1映射类型系统,生产力无可替代" (bob1029)
- "XML核心特性(元素/属性/命名空间)仍具价值,只是被企业滥用" (g-b-r)
文档处理场景不可替代
- "XML本质是人类与机器间的中介格式,适合文档和标记场景" (Mikhail_Edoshin)
- "所有XML方言可用相同工具处理,这是JSON不具备的" (Mikhail_Edoshin)
历史贡献与特定优势
- "XML解决了REST曾解决的问题,现在JSON RPC被迫重新发明轮子" (_heimdall)
- "XSLT是真正的失落艺术,虽然同时令人爱恨交加" (cgio)
中立/其他观点:
- 格式选择应基于场景:
"不同格式适合不同用途,XML/JSON/ASN.1各有优劣" (zzo38computer) - 技术演进本质:
"Worse is better. Better往往更糟" (edbaskerville) - 开发者体验差异:
"多数开发者仅通过二手恐怖故事了解XML,实际体验可能不同" (Devasta)
关键分歧点:XML在强类型系统集成和文档处理领域的价值仍被部分开发者认可,但其在API通信中的冗长和复杂性已成主流弃用原因。JSON的胜利更多源于"够用就好"的实用主义(如"解析即验证"的哲学),而非技术优越性。