是";关于;及;关「;在YAML 1.2中应该被解释为真还是假?

是";关于;及;关「;在YAML 1.2中应该被解释为真还是假?,yaml,Yaml,说 规范的: y | n Regexp: y | y |是|是|是| n | n |否|否|否 |真|真|真|假|假|假|开|开|关|关| 说 定义: 表示真/假值。在没有本机布尔值的语言中 类型(如C)通常绑定到本机整数类型,使用 为真,为假为零 标准形式: true或false 这是否意味着1.1中的所有替代形式都应该在1.2中解释为反序列化中的字符串(而不是布尔值)?在YAML 1.2规范中,它们不再被提及,但我想不起来它在任何地方都说明了它们被删除的原因以及它们被删除的原因。然而,在实际

规范的:

y | n

Regexp:

y | y |是|是|是| n | n |否|否|否 |真|真|真|假|假|假|开|开|关|关|

定义:

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

标准形式:

true
false


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

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


在ruamel.yaml中,我对PyYAML的升级(主要是yaml 1.1,支持Yes/No/On/Off)仅当yaml文件指定为yaml 1.1时,才将这些值表示为布尔值(使用加载参数,或起始行
%YAML 1.1
。然后这些标量被解释为字符串。我还没有听到任何人抱怨,所以我认为我做的是正确的(即,根据1.2规范,每个人都期望做的事;-)。

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

  • YAML 1.2中的“开”和“关”应该解释为真还是假

    不,标量
    on
    off
    应该解释为字符串(
    tag:yaml.org,2002:str

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

    有些是的,但有些只是偶尔

    需要注意的是,您引用的YAML 1.2规范部分来自本节。根据其介绍:

    JSON模式是大多数现代计算机语言的最低公分母,允许解析JSON文件。因此,YAML处理器应支持此模式,至少作为一个选项。强烈建议其他模式应基于此模式

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

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

    使用核心模式时,标量
    true
    true
    true
    false
    false
    false
    都是布尔值


  • “我假设我做的是正确的[…]事情”--从一个用户那里,ruamel.yaml做了我期望的事情。非常感谢;谢谢。