在YAML 1.2中,"on"和"off"应该被解释为真或假吗?

Jas*_*n S 9 yaml

YAML 1.1

典范:

Y | N

正则表达式:

y | Y |是|是| YES | n | N | no | No | NO | true | True | TRUE | false | False | FALSE | on | On | ON | off | Off | OFF

YAML 1.2

定义:

表示真/假值.在没有本机布尔类型(例如C)的语言中,通常绑定到本机整数类型,使用一个用于true,使用零用于false.

规范形式:

无论是truefalse.

这是否意味着1.1中的所有替代形式应该在1.2中被解释为反序列化中的字符串(而不是布尔值)?

Jor*_*ing 9

你问过两个不同的问题,所以我会依次回答:

  1. 在YAML 1.2中,"on"和"off"应该被解释为真或假吗?

    不,标量onoff应被解释为字符串(tag:yaml.org,2002:str).

  2. 这是否意味着1.1中的所有替代形式应该在1.2中被解释为反序列化中的字符串(而不是布尔值)?

    其中有些是肯定的,有些只是有时候.

    值得注意的是,您引用的YAML 1.2规范部分来自10.2 JSON Schema.根据其介绍:

    JSON模式是最现代化的计算机语言的最小公分母,并允许解析JSON文件.因此,YAML处理器应该支持这种模式,至少作为一种选择.强烈建议其他模式应该基于它.

    实际上,在使用JSON模式时,只有标量true并且false是隐式boolean(tag:yaml.org,2002:bool)值.

    但是,规范建议默认情况下YAML解析器使用Core架构,而不是JSON架构.Core架构是"JSON架构的扩展,允许更多人类可读的相同类型的表示."

    当使用核心架构,标量true,True,TRUE,false,False,和FALSE都是布尔值.


Ant*_*hon 6

在 YAML 1.2 规范中不再提及它们,但我不记得它在任何地方说明了它们被删除的原因以及它们是。然而,在实际情况下,这些额外的“布尔值”引起了混乱,这就是为什么它们可能从规范中删除的原因。

在 ruamel.yaml 中,我升级了 PyYAML(主要是 YAML 1.1 并支持 Yes/No/On/Off )如果 YAML 文件被指定为 YAML 1.1(使用加载参数,或起跑线%YAML 1.1。然后这些标量被解释为字符串。我还没有听到任何人抱怨,所以我认为我做的是正确的(即每个人都期望基于 1.2 规范)事情;-)。

  • “我认为我在做正确的 [...] 事情”——来自用户,ruamel.yaml 符合我的预期。非常感激; 谢谢你。 (2认同)