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