具有有效范围的 YAML 配置

YAML configuration with validity range

我有一个 YAML 文件,其中包含我的应用程序的一些配置。现在,一些配置需要及时更改。例如:

2020 年的值为:

tax:
    federal: 9
    provincial: 7

但是对于 2021 年,我们需要的是:

tax:
    federal: 9.5
    provincial: 7.5

如果我只能通过时间切换yml文件会很容易,但是yaml文件包含许多配置,这些配置会在不同的时间点发生变化。另外,我只分配了 1 个 yml 文件来配置我的应用程序,所以这不是一个真正的选择。

所以我的问题是,使用 YAML 表示它的最干净的方法是什么?

我能想到的唯一方法如下,但我可以看到这变得非常混乱。

tax:
    federal: [20200101-20201231]9;[20210101-20211231]9.5
    provincial:  [20200101-20201231]7;[20210101-20211231]7.5;

您的语法不合法,您需要将其括在引号中,将其解析为单个标量,然后post对其进行处理。

我建议使用 YAML 的标签系统:你使用像 !datedep 这样的标签来标记值,例如:

tax:
    federal: !datedep { [20200101, 20210101, 20220101]: [9, 7.5] }
    provincial: !datedep { [20200101, 20210101, 20220101]: [7, 7.5] }

我将具有单个键值对的 YAML 映射作为值。关键是日期列表,在两者之间建立范围。该值是应映射到日期之间范围的值列表。

加载 YAML 时,您必须为标签 !datedep 提供构造函数。这如何工作取决于您的实施。构造函数应该 select 基于当前日期的适当值。您可以使用 YAML 锚点和别名来引用重复的日期范围,例如:

tax:
    federal: !datedep { &y2021 [20200101, 20210101, 20220101]: [9, 7.5] }
    provincial: !datedep { *y2021 : [7, 7.5] }