''
)时不返回任何文档,我想知道这是否是一个错误。--- false
,这引发了一个问题,即空字符串是否实际上是输入。因此,通常来说,空字符串是有效的YAML文档吗?
答案 0 :(得分:2)
解析器将YAML文件解析为 YAML流。一个YAML流可以包含多个文档。规范中对此流的定义如下:
l-yaml-stream ::= l-document-prefix* l-any-document?
( l-document-suffix+ l-document-prefix* l-any-document?
| l-document-prefix* l-explicit-document? )*
如您所见,由于l-document-prefix
和l-any-document
都是可选的,因此空的YAML流有效-但不包含文档。
如果您要问l-any-document
是否可以产生空字符串,答案是否定的。如果没有起始---
,则您有一个l-bare-document
,其中必须至少包含一个节点。普通标量由ns-plain(n,c)
产生,如果您降入该标量,您将注意到它必须至少包含ns-plain-first(c)
产生的一个字符。
如果要让YAML流包含一个文档,该文档包含一个空标量作为根节点,则可以使用以下选项:
""
或''
)–如果希望将标量作为字符串加载,则最好,因为按照以下说明,无引号的空标量应解析为!!null
规范中定义的架构。---
)。由于文档是从指令结束标记显式开始的,因此它可以不包含任何内容,该内容在顶层被解释为空标量。--- !!str
)的显式文档可确保将空标量作为字符串加载。编辑:YAMLlint网站上的一条注释:不要使用它。它不会告诉您正在使用哪个实现,期望使用哪个YAML版本等。其输出表明,它将空输入解析为具有空标量的单个文档,并将该标量解析为布尔值false
。尽管规范允许这样做(因为规范不会在实现时强制使用任何特定的架构),但它不符合任何正式方案。