我正在为我的应用程序创建配置文件。为此,我决定使用YAML的简单性和可靠性。
我目前正在设计我的应用程序的一个特殊部分:在这一部分中,我必须列出并配置我想在模块中使用的所有数据集。为此,我写了这个:
// Other stuff
datasets:
rate_variation:
name: Rate variation over time # Optional
description: Description here # Optional
type: POINTS_2D
options:
REFRESH_TIME: 5 # Time of refresh in second
frequency_variation:
name: Frequency variation over time
description: Description here # Optional
type: POINTS_2D
但是,经过一番反思,我对此表示怀疑。因为这样的事情可能更好:
datasets:
- id: rate_variation
name: Rate variation over time # Optional
description: Description here # Optional
type: POINTS_2D
options:
REFRESH_TIME: 5 # Time of refresh in second
- id: frequency_variation
name: Frequency variation over time
description: Description here # Optional
type: POINTS_2D
我使用ID来识别脚本中的每个数据集(两个数据集必须具有不同的ID)并为每个数据集生成输出文件。但现在,我真的不知道什么是最好的解决方案......
你会建议使用什么?出于什么原因?
使用第一个选项,YAML强制执行没有重复的ID。因此,支持YAML的编辑器可能会通过在这种情况下显示错误来支持您的用户。使用第二个选项,您需要检查代码中的唯一性,并且用户只有在将语法正确的YAML加载到应用程序时才会看到错误。
但是,还有其他因素需要考虑。例如,您可能偏好生成的内存数据结构。如果您使用反序列化为本机数据结构的标准YAML实现(PyYAML,SnakeYAML等),则YAML结构强制使用内存中数据结构的类型(您可以通过编写自定义构造函数进行自定义,但这并非易事)。例如,如果要向数据集对象询问其ID,那么只能直接使用第二个结构 - 如果使用第一个结构,则需要在父表中搜索要获取其ID的数据集值。
所以,最终答案是(一如既往):这取决于。想想你想用它做什么。对于简单的配置文件,我的第二个参数可能比我的第一个参数弱,但我不知道你想要对数据做什么。
ddconfig
格式,可以非常干净地以简单的方式对YAML进行标准化ddconfig
格式的数据规范化(也称为YAML模式定义)
(标签:dreftymac @ dreftymac.org,2017年:ddconfig
)ddconfig
格式的简单配置文件
dataroot:
file_metadata_str: |
### <beg-block>
### - caption: "my first project"
### notes: |
### * href="//home/sm/docs/workup/my_first_project.txt"
### <end-block>
project_info:
prj_name_nice: StackOverflow Demo Answer Project
prj_name_mach: stackoverflow_demo_001a
prj_sponsor_url: https://stackoverflow.com/questions/54349286
prj_dept_url: https://demo-university.edu/dept/basketweaving
dataset_recipient_list:
- [email protected]
- [email protected]
- [email protected]
dataset_variations_table:
- dvar_id: rate_variation
dvar_name: Rate variation over time # Optional
dvar_description: Description here # Optional
dvar_type: POINTS_2D
dvar_opt_refresh_per_second: 5 # Time in seconds
- dvar_id: frequency_variation
dvar_name: Frequency variation over time
dvar_description: Description here # Optional
dvar_type: POINTS_2D
dataroot
的顶层键下(这是可选的)。
包含dataroot
密钥使YAML结构更易于理解,但不是必需的。
使用文件系统类比,您可以将dataroot
视为根级目录。
使用XML类比,您可以将其视为根级XML标记。dataroot
的第一级子级(如果省略dataroot,则为顶级子级)。_str
)表示映射的值是字符串(也称为标量)值。
列表:(后缀_list
)表示映射值是一个列表(也称为序列)。
信息:(后缀_info
)表示映射值是映射(又名字典)(也称为关联数组)。
表:(后缀_table
)表示映射值是映射序列(aka表)。ddconfig
格式与许多不同的上下文和工具很吻合。_list
映射由一系列没有嵌套的标量值项组成。_info
映射由标量键和标量值(名称 - 值对)组成,没有嵌套。_table
映射只是一系列_info
映射。ddconfig
_info
映射视为关系数据库中标准表的单个记录。ddconfig
_table
映射视为关系数据库表中的表。ddconfig
格式适用于YAML锚点和别名。_info
映射可以通过别名轻松转换为_table
映射。_info
映射组合到另一个_info
映射中。