用例是以文本格式对复杂对象图进行长期序列化。
答案 0 :(得分:36)
如果您希望人类创建/阅读文档(配置文件,报告等),那么您可以考虑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来维护错误列表。)
如果您需要将XML文档转换为其他格式(XML,HTML,YAML,PDF),您可以使用XSLT,而对于YAML,您必须编写程序。
答案 1 :(得分:3)
我同意:YAML更具可读性,并且似乎非常适合dev-read / writable配置文件。但机器对机器通信几乎没有什么好处。此外,对于文本标记(xml的传统强项,如xhtml,docbook),xml更好。
特别是对于对象序列化,我想不出使用YAML的充分理由。
事实上,我建议改为考虑JSON:它基于对象(或结构,因为没有行为)模型,而不是分层(xml)或关系(SQL)模型。因此,它更适合对象数据。但XML也可以正常工作,并且有许多好的工具。
最后一件事:术语“长期”和“对象序列化”不混合。后者意味着紧密耦合:您的对象发生变化,序列化也发生变化。实际对象序列化不应该用于存储数据,数据绑定/映射更合适。但是,您可能正在使用“使用方便的对象包装器存储/恢复数据”的序列化;如果是的话,那很好。
答案 2 :(得分:3)
XML有xpath和xquery。
但YAML具有复杂的键,允许您使用别名(& * syntax)将一个值复制到许多地方。
我认为YAML的优势不是人类可读性,就像他们说的那样......我可以正确阅读格式正确的XML。
实际上YAML的优势在于人类可写性。如果你正在使用iPhone在构建数据模型等时输入一些数据,那么YAML就更容易输入。这些别名非常棒。
然后你可以把它转换成任何东西。
YAML的更高级功能,如严格的输入和标签,我从不使用它。 YAML人员目前正在讨论发布一个“微YAML”来与JSON竞争,对于我们这些使用它的人来说基本上就像使用别名一样清洁的JSON。
但是,XML更好地作为一种标记语言,您希望在视觉上区分数据的哪些部分对最终用户可见,正如其他人所指出的那样。
答案 3 :(得分:2)
如果使用YAML,则线路上的字节数可能略少。我认为不够重要,但在某些情况下它可能是相关的。我也认为YAML在文本编辑器中更易于阅读和使用,但这确实是主观的,如果这不是正常的使用场景,那就不重要了。
如果带宽不是一个因素,并且你不经常在文本编辑器中使用YAML / XML,我认为你使用它并不重要。