Więc wiem, że mogę zrobić coś takiego:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
I mają sitelist
i anotherlist
oba zawierają www.foo.com
i www.bar.com
. Jednak naprawdę chcę, anotherlist
aby zawierał równieżwww.baz.com
, bez konieczności powtarzania www.foo.com
i www.baz.com
.
W ten sposób otrzymuję błąd składni w parserze YAML:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
- www.baz.com
Samo użycie kotwic i aliasów wydaje się niemożliwe, aby zrobić to, co chcę, bez dodania kolejnego poziomu podstruktury, na przykład:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist:
- *sites
- www.baz.com
Co oznacza, że konsument tego pliku YAML musi być tego świadomy.
Czy istnieje czysty sposób YAML na zrobienie czegoś takiego? A może będę musiał użyć przetwarzania post-YAML, takiego jak zaimplementowanie zastępowania zmiennych lub automatyczne podnoszenie niektórych rodzajów podstruktury? Robię już tego rodzaju przetwarzanie końcowe, aby obsłużyć kilka innych przypadków użycia, więc nie jestem do tego całkowicie przeciwny. Ale moje pliki YAML będą pisane przez ludzi, a nie generowane maszynowo, więc poza standardową składnią YAML chciałbym zminimalizować liczbę reguł, które muszą być zapamiętane przez moich użytkowników.
Chciałbym również móc zrobić analogiczną rzecz z mapami:
namedsites: &sites
Foo: www.foo.com
Bar: www.bar.com
moresites: *sites
Baz: www.baz.com
Przeszukałem specyfikację YAML i nie mogłem niczego znaleźć, więc podejrzewam, że odpowiedź brzmi „nie, nie możesz tego zrobić”. Ale jeśli ktoś ma jakieś pomysły, byłoby świetnie.
EDYCJA: Ponieważ nie było odpowiedzi, przypuszczam, że nikt nie zauważył niczego, czego nie mam w specyfikacji YAML i że nie można tego zrobić w warstwie YAML. Otwieram więc pytanie od pomysłu na przetwarzanie końcowe YAML, aby pomóc w tym, na wypadek, gdyby ktoś znalazł to pytanie w przyszłości.