Итак, я знаю, что могу сделать что-то вроде этого:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
И иметь, sitelist
и anotherlist
оба содержат 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, чтобы помочь с этим, на случай, если кто-то найдет этот вопрос в будущем.