#yaml
#yaml
Вопрос:
Я пишу несколько шаблонов yaml для конфигураций, и они начинают иметь много степеней вложенности.
Какова максимально возможная и максимально рекомендуемая глубина вложенности в yaml?
Ответ №1:
Начиная с YAML 1.2, единственное ограничение, налагаемое спецификацией, составляет 1024 символа для неявных ключей:
foo: bar # okay
[ foo ]: bar # also okay
<<more-than-1024-characters-here>>: bar # not okay
Это запрещено независимо от того, является ли ключ скалярным (первая строка) или узлом сбора (вторая строка). Следовательно, это практически ограничивает вложенность в неявных ключах. Однако вместо этого вы можете просто использовать явные ключи:
? foo
: bar
? [ foo ]
: bar
? <<more-than-1024-characters-here>>
: bar
Помимо этого, вам не нужно беспокоиться о вложенности, поскольку рукописные файлы вряд ли достигнут пределов, налагаемых реализацией. Конечно, вы могли бы протестировать используемую вами реализацию на предмет ее ограничений, например, PyYAML:
import yaml, traceback
from yaml.constructor import ConstructorError
for i in range(128, 1024):
open, close = "", ""
for j in range(0, i):
open, close = open "[", close "]"
try: yaml.load(open close)
except:
traceback.print_exc()
print("failed at depth " str(i))
exit(1)
Это дает (через некоторое время):
[…]
RecursionError: maximum recursion depth exceeded
failed at depth 496
Возможная глубина в 495 уровней кажется достаточной.
Ответ №2:
В YAML нет ограничений на вложенность.
Но в программном обеспечении, с которым вы его используете, могут быть ограничения, чаще всего вы столкнетесь с ограничениями памяти или процессора. Я не знаю ни о каких недавних библиотеках, которые имеют жесткие ограничения, если только вы не начнете сталкиваться с ограничениями, возникающими из-за того, что отступы переполняют целое число 😉