是" on"和"关"应该在YAML 1.2中被解释为真或假?

时间:2017-02-16 20:15:29

标签: yaml

YAML 1.1

  

典型:

     

Y | N

     

正则表达式:

     

Y | Y |是|是| YES | N | N |没有|没有| NO   | true | True | TRUE | false | False | FALSE | on | On | ON | off | Off | OFF

YAML 1.2

  

定义:

     

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

     

规范形式:

     

truefalse

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

2 个答案:

答案 0 :(得分:6)

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

  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模式时,只有标量truefalse是隐式布尔值(tag:yaml.org,2002:bool)。

    但是,规范建议YAML解析器默认使用Core schema,而不是JSON模式。 Core架构是“JSON架构的扩展,允许更多人类可读的相同类型的表示。”

    使用Core架构时,标量trueTrueTRUEfalseFalseFALSE都是布尔值

答案 1 :(得分:4)

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

在ruamel.yaml中,我的PyYAML升级(主要是YAML 1.1并支持Yes / No / On / Off)如果YAML文件指定为YAML 1.1(使用加载参数),我只将这些值表示为布尔值或者一个起始行%YAML 1.1。然后这些标量被解释为字符串。我还没有听到有人抱怨,所以我假设我做的是正确的(即每个人都希望基于1.2规范)的事情; - 。)