我倾向于成为一个有点可疑的 XML 拥护者。尽管我每天都在使用它,并且基于 XML 的 Web 服务已成为我职业生涯的重要组成部分(也是我写这本书的基础),但我认为它被广泛过度使用。我倾向于相信你的工具箱里应该有很多工具,你应该使用最好的工具来完成工作。对于很多事情来说,XML 是一个很好的解决方案。但是有很多事情不是这样,有些事情可能是一个糟糕的选择。
就像有些人热衷于批评和回避 XML 一样,有些人同样热衷于(或更多地)赞美和使用它。在您上面随便提到的情况下,您所谈论的大部分是基于 Web 的技术。在这些情况下,您通常已经有一个 XML 解析器和/或 DOM 操作器可供您使用,因此使用它并没有什么坏处。你没有增加复杂性,因为它已经存在了。Flash 和 AIR 大量使用 XML 来实现功能,但它们的目标是解析 XML-ish 标记(如果不是 XML 本身,那么 HTML 或 XHTML)是每个应用程序的核心部分的环境。对于这些技术,引入不同类型的数据表达语言会增加复杂性。使用 XML 非常有意义。
这是一个例子......这里有问题的语言是 Perl,因为这是我主要使用的语言,但它的 Perl 方面与这一点无关:我一直在研究转储深度数据的现有模块的扩展结构。对很多事情都很有用——序列化、跨平台的可移植性等。也是一种流行的调试工具。我想要扩展它的原因是真正庞大而复杂的结构(例如那些由 ORM 或 MOP 框架生成的结构)可能会变得非常复杂。所以我的第一个想法是做一个扩展,让我以一种我可以控制的方式将数据转换为 HTML。然后我想,如果我能创建图表来显示各种元素以及哪些元素与哪些元素相关联等等,那就太好了。然后我突然想到,如果我选择一种合理的中性格式,我应该能够相当容易地推导出这两种格式。
那个格式?XML。为什么在这种情况下它一定比原生 Perl 序列化结构更好,或者比使用不同的临时表示(例如 YAML 或 JSON)更好?因为如果我有有效的、格式良好的 XML,我可以轻松地使用 XSLT 将其转换为 (X)HTML 或 SVG。如果需要,我也可以将其转换为纯文本(我已经有 XSLT 样式表,可以根据用户的选择选择发出 HTML 片段或干净的文字包装的纯文本)。
有很多方法可以解决这个特殊问题,但在这种情况下XML 给我的优势使其成为首选(至少,对于我的偏好和需求而言)。XSLT 是一个定义明确、文档齐全(好吧,您可能对 W3C 文档的看法有所不同,但不乏有关该主题的书籍)的工具,用于将 XML 转换为几乎任何东西。对于这个特殊的问题,XML 的表现力加上我的最终目标格式(XHTML 和 SVG)本身就是 XML 的事实,使它成为明确的选择。另一方面,有很多次我(作为顾问)向客户或(作为公司员工/团队成员)向老板/团队推荐 XML 不应该用于某些任务。有时原因很清楚——使用 XML 不会提高数据的(重)可用性,他们还没有在项目中使用 XML,这不是你应该引入依赖的那种事情,等等. 有时原因更微妙;如果您正在尝试决定如何存储/检索应用程序的配置,它真的需要在 XML 中吗?任何其他应用程序都不太可能需要读取/解析它,因此数据的可移植性/重用性不是问题。如果数据本质上相当平坦,您可能可以使用键/值对文件进行管理。如果数据更复杂和/或更复杂,您可能会使用 YAML。
通常,XML 是数据表达的最差选择,除非它是最佳选择。JSON 和 YAML 也是如此,充分利用这些方法的最佳方法是熟悉并熟悉所有这些方法,并知道哪一种是最适合您面前工作的工具你。