根据 YAML 1.1 规范,“yes”真的是“true”的别名吗?1.2 规格?

jbe*_*man 7 python yaml pyyaml ruamel.yaml

我正在尝试调试一个问题,它归结为......

>>> import yaml as pyyaml
>>> import ruamel.yaml as ruamel
>>> ruamel.load("x: yes") == ruamel.load("x: true")
False
>>> pyyaml.safe_load("x: yes") == pyyaml.safe_load("x: true")
True
Run Code Online (Sandbox Code Playgroud)

互联网上有传言称“yes”和“no”是保留词,分别是和 的同义词。truefalse

但 1.1 规范中只是顺便提及,但没有详细说明,并且字符串“yes”根本没有出现在1.2 规范中。

事实上,仔细查看规范的每个草案,它只会以合法的方式以任何合法的方式出现在https://yaml.org/spec/history/2002-09-01.html中,并在之后的修订中被删除。

我怀疑我在写它的过程中已经回答了我自己的问题,但是......这个关于“是/否”的事情只是胡说八道吗?它进入了实现(我的编辑甚至强调“是/否”作为特殊),或者我误解或遗漏了规范的一部分?

Pre*_*and 6

yes在 yaml 规范 1.1 中将/解释notrue/false是有意设计的,并且已记录在案。然而,在 yaml 规范 1.2 中,将yes/解释notrue/false被删除。

PyYAML 文档中,

PyYAML 支持 YAML 1.1 标准,ruamel.yaml支持 2009 年发布的 YAML 1.2。

YAML 1.2 放弃了对未引用的多个功能的支持Yes, No, On,Off


Ant*_*hon 3

在这方面很难比较 YAML 1.2 和 YAML 1.1。YAML 1.2具有 YAML 1.1 中没有的架构。

YAML 1.2 规范(base、json、core)中没有提到任何模式Yes作为布尔类型,并且示例不再使用这些,而 YAML 1.1 仍然有这些。

然而,YAML 1.2 规范确实提到了核心架构之外的可能架构,包括语言独立类型存储库的部分 内容。不幸的是,该存储库中的某些区域与 YAML 1.2 相矛盾(例如八进制的表示方式)。因此,在 YAML 1.2 中完全兼容 1.1 的通用是不可能的。

鉴于没有提及Yes为布尔值,以及它引起的普遍混乱(有人质疑为什么Yes在此处转储时引用了 SO),当我在ruamel.yaml. 其他不那么令人困惑(IMO)和有用的东西,如合并键 ( <<) 都在其中ruamel.yaml(还有不太有用的元素,如值键)。

然而,PyYAML 仅支持 YAML 1.1 标准(于 2009 年被替换)。

如果您的文档不是隐式的,但有标题:

%YAML 1.1
---
x: yes
Run Code Online (Sandbox Code Playgroud)

然后也ruamel.yaml将加载yes为布尔值,ruamel.yaml默认情况下加载 YAML 1.2,而 PyYAML 仍然仅(部分)支持加载 YAML 1.1