TL: DR: документация docker-compose
вводит в заблуждение при цитировании функции YAML 1.2, когда они используют загрузчик на основе YAML 1.1 для загрузки своих файлов .yml
.
Что работает при удаленииTAB объясняется тем, что по сути вы можете иметь очень компактный JSON: {"a":[1,2,3]}
без каких-либо пробелов между узлами.
Да YAML - это расширенный набор JSON для всех практических целей, но есть несколько вещейчто вы должны иметь в виду.
Прежде всего вы должны взять документацию, которая не правильно пишет акроним (Yaml вместо YAML) и не ссылается непосредственно на spec ,но ссылки на неавторизованный с зерном соли.Кроме того, документация использует расширение .yml
для файла docker-compose.yml
, хотя рекомендуемое расширение файла для файлов YAML, согласно часто задаваемым вопросам на yaml.org, с сентября 2006 года .yaml
.
Спецификация YAML 1.2 гласит, что он задуман как расширенный набор JSON, но docker-compose
использует PyYAML для анализа / загрузки файла YAML и загружает только подмножество YAML 1.1.В YAML были внесены конкретные изменения с 1.1 до 1.2, чтобы сделать YAML 1.2 больше, но не на 100%, надмножеством JSON.
Символы TAB допускаются в YAML 1.2 для пробелов, если этоне пробел, который определяет отступ.Поскольку JSON - это YAML в стиле потока, в котором отступ не должен быть значительным, вы можете прочитать его, так как не должно быть табуляции перед начальными {
или [
.
В YAML 1.1 ограничение на использование TAB более строгое :
Символ игнорируемого пробела вне скалярного содержимого.Такие пространства используются для отступа и разделения между жетонами.Для обеспечения переносимости символы табуляции не должны использоваться в этих случаях, поскольку разные системы обрабатывают табуляцию по-разному.
(т. Е. Вы можете использовать символы TAB в непростых скалярах в YAML 1.1).