【问题标题】:What are the advantages and disadvantes of yaml vs xml for Object graph de/serialization?yaml vs xml 用于对象图反序列化的优缺点是什么?
【发布时间】:2010-10-08 08:36:06
【问题描述】:

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

【问题讨论】:

    标签: java xml serialization yaml


    【解决方案1】:

    简答

    如果您希望人工创建/读取文档(配置文件、报告等),那么您可以考虑 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,您必须编写程序。

    【讨论】:

    • +1,虽然我不同意网络故障:有足够多的层能够在涉及解析器之前检测到错误,即使它们失败,解析器也只会检测到那些破坏的少数错误xml-well-formedness(基本上:弄乱 、=、' 或标签名称)。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      XML 有 xpath 和 xquery。

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

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

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

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-23
          • 2020-11-06
          • 1970-01-01
          • 2010-10-09
          • 2013-08-21
          • 2013-05-26
          • 2014-11-10
          • 1970-01-01
          相关资源
          最近更新 更多