Я знаю, что могу сделать что-то вроде этого:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
И иметь список сайтов
и другой список
оба содержат www.foo.com
и www.bar.com
.Однако мне действительно нужно, чтобы anotherlist
- также содержали www.baz.com
, без необходимости повторять www.foo.com
и www.baz.com
.
Это дает мне синтаксическую ошибку в анализаторе YAML:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
- www.baz.com
Просто используя якоря и псевдонимы, мне кажется невозможным делать то, что я хочу, без добавления другого уровня подструктуры, например:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist:
- *sites
- www.baz.com
Что означает потребитель этого файла YAML должен знать об этом.
Есть ли способ сделать что-то вроде этого на чистом YAML? Или мне придется использовать некоторую пост-YAML-обработку, такую как реализация подстановки переменных или автоподъем определенных видов подструктуры? Я уже занимаюсь такой постобработкой, чтобы справиться с парой других вариантов использования, так что я не против этого. Но мои файлы YAML будут написаны людьми, а не сгенерированы машиной, поэтому я хотел бы минимизировать количество правил, которые мои пользователи должны запоминать поверх стандартного синтаксиса YAML.
Я также хотел бы иметь возможность проделать то же самое с картами:
namedsites: &sites
Foo: www.foo.com
Bar: www.bar.com
moresites: *sites
Baz: www.baz.com
Я просмотрел спецификацию YAML и ничего не нашел, поэтому подозреваю, что ответ просто «нет, ты не можешь этого сделать». Но если у кого-то есть идеи, это было бы здорово.
РЕДАКТИРОВАТЬ: Поскольку ответов не было, я предполагаю, что никто не заметил ничего, чего у меня нет в спецификации YAML, и что это невозможно сделать на уровне YAML. Итак, я открываю вопрос к идее пост-обработки YAML, чтобы помочь с этим, на случай, если кто-то найдет этот вопрос в будущем.