yaml 与 xml 在 Object graph de/serialization 方面有哪些优点和缺点?

2022-09-01 22:42:04

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


答案 1

简短的回答

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

长答案

长度

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

网络故障

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

语言支持

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

常识

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

图式

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

语法

XML非常丰富:命名空间,实体,属性。

外部依赖关系

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

成熟

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

断续器

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


答案 2

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

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

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

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