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