Файл YAML анализируется парсером как поток YAML. Поток YAML может содержать несколько документов. Определение этого потока в spe c выглядит следующим образом:
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, содержащий один документ который содержит пустой скаляр как узел root, у вас есть следующие варианты:
- пустые скаляры в кавычках (
""
или ''
) - лучше всего, если вы хотите, чтобы скаляр загружался как строка, поскольку пустой скаляр без кавычек должен быть разрешен до !!null
в соответствии со схемой, определенной в явном документе spe c. - (
---
). Поскольку документ явно начинается с маркера конца директив, ему разрешено не иметь содержимого, которое интерпретируется как пустой скаляр на верхнем уровне. - явный документ с тегом (
--- !!str
) гарантирует, что пустой скаляр загружается как строка.
Изменить: Примечание на этом сайте YAMLlint: не используйте его. Он не сообщает вам, какую реализацию он использует, какую версию YAML ожидает et c. Его выходные данные показывают, что он анализирует пустой ввод как отдельный документ с пустым скаляром и анализирует этот скаляр как логическое значение false
. Хотя это разрешено SPE c (поскольку SPE c не навязывает какую-либо конкретную схему c при реализации), это не соответствует какой-либо официальной схеме.