Skip to main content
版本: 0.8

校验

简介

验证是校验数据是否准确、可靠并满足某些要求或限制的过程,包括检查数据的完整性、一致性、准确性和相关性。进行数据验证是为了确保数据符合其预期目的,并能有效使用。

我们可以使用 KCL 及其校验工具手动或自动进行数据验证,以确保数据的一致性。

使用 KCL 校验数据

除了使用 KCL 代码生成 JSON/YAML 等配置格式,KCL 还支持对 JSON/YAML 数据进行格式校验。作为一种配置语言,KCL 在验证方面几乎涵盖了 OpenAPI 的所有功能。在 KCL 中可以通过一个结构定义来约束配置数据,同时支持通过 check 块自定义约束规则,在 schema 中书写校验表达式对 schema 定义的属性进行校验和约束。通过 check 表达式可以非常清晰简单地校验输入的 JSON/YAML 是否满足相应的 schema 结构定义与 check 约束。

0. 先决条件

1. 获得示例

git clone https://github.com/kcl-lang/kcl-lang.io.git/
cd ./kcl-lang.io/examples/validation

我们可以执行如下命令显示配置

cat schema.k

输出为

schema User:
name: str
age: int
message?: str
data: Data
labels: {str:}
hc: [int]

check:
age > 10, "age must > 10"

schema Data:
id: int
value: str

在 schema 中,我们可以使用 check 关键字来编写每个 schema 属性的验证规则。check 块中的每一行都对应于一个条件表达式。当满足条件时,验证成功。条件表达式后面可以跟 , "报错信息",以指示检查失败时要给用户显示的消息。

综上所述,KCL Schema 中支持的校验类型为:

校验类型使用方法
范围校验使用 <, > 等比较运算符
正则校验使用 regex 系统库中的 match 等方法
长度校验使用 len 内置函数,可以求 list/dict/str 类型的变量长度
枚举校验使用字面值联合类型
非空校验使用 schema 的可选/必选属性
条件校验使用 check if 条件表达式

2. 验证数据

新建一个名为 data.json 的 JSON 配置文件:

{
"name": "Alice",
"age": 18,
"message": "This is Alice",
"data": {
"id": 1,
"value": "value1"
},
"labels": {
"key": "value"
},
"hc": [1, 2, 3]
}

执行如下命令获得校验结果

kcl vet data.json schema.k

小结

KCL 是一种配置语言,通过其结构定义和用户定义的约束规则来支持数据验证。KCL Schema 中支持的验证类型包括范围、正则表达式、长度、枚举、可选/必需和条件。并且可以使用 KCL 验证工具或在此基础上构建的可视化产品来验证数据。

未来计划

KCL 校验能力的提升将逐渐围绕"静态化"方面展开工作,即在编译时,结合形式化验证的能力直接分析得出数据是否满足约束条件、约束条件是否冲突等结论,并且可以通过 IDE 实时透出约束错误,而无需在运行时发现错误。

我们还期望 KCL Schema 和约束可以作为一个包来管理(这个包只有 KCL 文件)。例如,Kubernetes 模型和约束可以开箱即用。用户可以生成配置或验证现有配置,并且可以通过 KCL 继承简单地扩展用户想要的模型和约束。