【问题标题】:Have any simplified YAML formats become widespread?是否有任何简化的 YAML 格式变得普遍?
【发布时间】:2015-05-02 18:15:11
【问题描述】:

我喜欢 YAML。

等等,让我备份。我喜欢这样的 YAML,甚至超过 JSON:

Projects:
  C/C++ Libraries:
  - libyaml       # "C" Fast YAML 1.1
  - Syck          # (dated) "C" YAML 1.0
  - yaml-cpp      # C++ YAML 1.2 implementation
  Ruby:
  - psych         # libyaml wrapper (in Ruby core for 1.9.2)
  - RbYaml        # YAML 1.1 (PyYaml Port)
  - yaml4r        # YAML 1.0, standard library syck binding
  ...

我也喜欢 YAML 锚点和引用,有时希望 JSON 拥有它们。

但我希望我们中的大多数人都同意以下内容不太适合人类阅读(我知道这个示例是说教的,但重点是因为它是有效的 YAML,因此您正在与之合作的人这些功能可能会污染您的数据):

!!map {
  ? !!str "sequence"
  : !!seq [ !!str "one", !!str "two" ],
  ? !!str "mapping"
  : !!map {
    ? !!str "sky" : !!str "blue",
    ? !!str "sea" : !!str "green",
  },
}

所以我很失望,我找不到任何广泛使用的方法来标准化 YAML 的简化子集,至少通过粗略的 Google 搜索。

有人知道吗?

【问题讨论】:

  • StrictYAML 不完全是 YAML 子集(它违反了规范的某些部分,原因是其文档中的 well explained),仅限 Python,并且是一个库而不是实际语言规格;即便如此,它可能是最接近的一个(假设您真的指的是 YAML 子集,而不是 TOML 等替代语法)。

标签: yaml simplify simplification


【解决方案1】:

有很多这样的子集。几乎每个 YAML 库都通过往返(将 YAML 加载到内部数据并将数据序列化回 YAML)产生的格式隐式定义了一个。

您通常可以影响这些子集,但它们往往具有有用的默认值,对于较大的集合具有块结构,对于较小的集合具有流样式(每个都根据库开发人员认为的可读性)。

IMO 处理流氓编辑器的方法是通过ruamel.yaml 解析器附带的yaml 实用程序(我是该实用程序的作者)往返代码,然后使用它。如果您不喜欢它强加给您的子集,那么通过试验来更改其序列化程序设置应该相对容易。在修订控制系统中存储/更新任何 YAML 文件之前,这种“规范化”是 IMO 必须的。

【讨论】:

  • 哦,酷,这太简单了,我什至没有想过要这样往返!
猜你喜欢
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 2011-07-19
  • 1970-01-01
  • 2023-04-08
  • 2014-03-14
相关资源
最近更新 更多