【问题标题】:Are "on" and "off" supposed to be interpreted as true or false in YAML 1.2?在 YAML 1.2 中,“on”和“off”应该被解释为 true 还是 false?
【发布时间】:2017-02-16 20:15:28
【问题描述】:

YAML 1.1

规范:

y|n

正则表达式:

y|Y|是|是|是|n|N|否|否|否 |true|True|TRUE|false|False|FALSE |on|On|ON|off|Off|OFF

YAML 1.2

定义:

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

规范形式:

truefalse

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

【问题讨论】:

    标签: yaml


    【解决方案1】:

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

    1. 在 YAML 1.2 中,“on”和“off”应该被解释为 true 还是 false?

      不,标量 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 模式。核心模式是“JSON 模式的扩展,允许以更易读的方式呈现相同类型。”

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • “我认为我在做正确的 [...] 事情”——来自用户,ruamel.yaml 符合我的预期。非常感激;谢谢。
      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多