跳至内容

StrictYAML 去掉了哪些 YAML 功能?

StrictYAML 限制你解析 YAML 规范中说应该解析的一些内容。David Seaward 在官方 YAML 存储库中 提出了关于此批评的问题。

本文档列出了这些功能

隐式类型化 (为什么?)

x: yes
y: null

pyyaml/ruamel/poyo 示例

load(yaml) == {"x": True, "y": None}

没有模式的 StrictYAML 示例

load(yaml) == {"x": "yes", "y": "null"}

带有模式的 StrictYAML 示例

load(yaml, Map({"x": Bool(), "y": Str()})) == {"x": True, "y": "null"}

对象的直接表示 (为什么?)

--- !python/hash:UnsafeUserObject
email: [email protected]
password: passwordtoset
type: admin

pyyaml/ruamel 示例

load(yaml) == {'evil': b'z\xf8\xa5u\xabZ'}

StrictYAML 示例

raises TagTokenDisallowed

不允许重复键 (为什么?)

x: 1
x: 2

pyyaml/poyo 示例

load(yaml) == {'x': 2}

StrictYAML 示例

raises DuplicateKeysDisallowed

显式标签 (为什么?)

x: !!int 5

pyyaml/ruamel/poyo 示例

load(yaml) == load(yaml) == {"x": 5}

StrictYAML 示例

raises TagTokenDisallowed

节点锚点和引用 (为什么?)

x: &id001
  a: 1
y: *id001

pyyaml/ruamel/poyo 示例

load(yaml) == {'x': {'a': 1}, 'y': {'a': 1}}

StrictYAML 示例

raises NodeAnchorDisallowed

要在 StrictYAML 中逐字解析上面的 YAML,请执行以下操作

x: '&id001'
  a: 1
y: '*id001'

流式风格 (为什么?)

x: 1
b: {c: 3, d: 4}

pyyaml/ruamel/poyo 示例

load(yaml) == {'x': 1, 'b': {'c': 3, 'd': 4}}

StrictYAML 示例

raises FlowStyleDisallowed