所以,我知道我可以做这样的事情:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
并且有sitelist
and anotherlist
两者都包含www.foo.com
and www.bar.com
。然而,我真正想要的是anotherlist
to also包含www.baz.com
,无需重复www.foo.com
and 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 规范,并且找不到任何东西,所以我怀疑答案只是“不,你不能这样做”。但如果有人有任何想法那就太好了。
EDIT:由于没有答案,我假设没有人发现我在 YAML 规范中没有发现的任何内容,并且这无法在 YAML 层完成。因此,我将这个问题开放给对 YAML 进行后处理的想法来帮助解决这个问题,以防将来有人发现这个问题。