Есть ли синтаксис YAML для совместного использования части списка или карты?

Я знаю, что могу сделать что-то вроде этого:

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, чтобы помочь с этим, на случай, если кто-то найдет этот вопрос в будущем.

81
задан dreftymac 22 October 2017 в 04:20
поделиться