23

用例是以文本格式对复杂对象图进行长期序列化。

4

4 回答 4

37

简短的回答

如果您希望人类创建/阅读文档(配置文件、报告等),那么您可以考虑 YAML,否则选择 XML(用于机器对机器的通信)。

长答案

长度

XML 和 YAML 大致相同。好的 XML 库可以跳过所有空格,而对于 YAML,它是必需的。一个复杂的 YAML 包含很多缩进空间(不要使用制表符!)

网络故障

YAML 文档的一部分通常是有效文档,因此如果 YAML 文档不完整,则无法自动检测它。XML 解析器将始终检查文档是否至少格式正确,并且可以根据模式自动检查有效性。

语言支持

许多主要的编程语言都支持YAML和 XML。

基本知识

您无需向开发人员(即使是初级)解释什么是 XML。YAML 还没有被广泛使用。

架构

使用 XML,生产者和消费者都可以就 Schema 达成一致,以建立可靠的数据交换格式。

句法

XML 非常丰富:名称空间、实体、属性。

外部依赖

Java 和 Python 在标准库中支持 XML。YAML 需要这些语言的外部依赖项。

到期

XML 规范较旧,而且坚如磐石;而 YAML 仍在建设中。YAML 1.1 包含不一致的地方(甚至有一个wiki来维护错误列表)。

XSLT

如果您需要将 XML 文档转换为另一种格式(XML、HTML、YAML、PDF),您可以使用 XSLT,而对于 YAML,您必须编写程序。

于 2009-02-18T21:36:58.783 回答
3

我同意:YAML 更具可读性,并且似乎非常适合开发读/写配置文件。但是机器对机器的通信几乎没有什么好处。此外,对于文本标记(xml 的传统优势,如 xhtml、docbook),xml 更好。

特别是对于对象序列化,我想不出使用 YAML 的充分理由。

事实上,我建议改为考虑 JSON:它基于对象(或结构,因为没有行为)模型,而不是分层 (xml) 或关系 (SQL) 模型。因此,它更适合对象数据。但是 XML 也可以正常工作,并且有很多很好的工具。

最后一件事:术语“长期”和“对象序列化”不能混用。后者意味着紧密耦合:您的对象会发生变化,序列化也会发生变化。实际对象序列化不应该用于存储数据,数据绑定/映射更合适。但可能是您在“使用方便的对象包装器存储/恢复数据”的意义上使用序列化;如果是这样,那很好。

于 2009-02-24T20:38:12.620 回答
3

XML 有 xpath 和 xquery。

但是 YAML 具有复杂的键,并允许您使用别名(& * 语法)将一个值复制到许多地方。

我认为 YAML 的优势不是人类可读性,就像他们说的那样……我可以很好地阅读格式正确的 XML。

实际上 YAML 的强项是人类可写性。如果您在构建数据模型等时在 iPhone 上快速输入一些数据,则 YAML 更容易输入。别名非常棒。

然后你可以把它转换成任何东西。

YAML 的更高级的特性,比如严格的类型和标签,我从来没有使用过。YAML 人目前正在讨论发布一个“微型 YAML”来与 JSON 竞争,对于我们这些使用它的人来说,基本上就像使用带有别名的更干净的 JSON 一样。

但是正如其他人指出的那样,XML 作为一种标记语言更好,您希望在其中直观地区分数据的哪些部分对最终用户可见。

于 2014-11-14T06:40:09.587 回答
2

如果您使用 YAML,则通过网络传输的字节数可能会稍微少一些。我认为还不够重要,但在某些情况下它可能是相关的。我还认为 YAML 更易于在文本编辑器中阅读和使用,但这确实有点主观,如果这不是正常的使用场景,这并不重要。

如果带宽不是一个因素,并且您不会经常在文本编辑器中使用 YAML/XML,我认为您使用哪个并不重要。

于 2009-02-18T17:02:20.800 回答