6个版本
0.1.1 | 2023年11月13日 |
---|---|
0.1.0 | 2020年2月8日 |
0.0.3 | 2020年1月26日 |
0.0.2 | 2020年1月25日 |
0.0.1 | 2020年1月25日 |
#341 in 数据库接口
145KB
4.5K SLoC
yaml-validator-cli
使用yaml编写的模式验证YAML文件的命令行界面
快速链接
命令行帮助信息
yaml-validator-cli 0.1.0
Command-line interface to the yaml-validator library.
Use it to validate YAML files against a context of any number of cross-referencing schema files.
The schema format is proprietary, and does not offer compatibility with any other known YAML tools
USAGE:
yaml-validator-cli [OPTIONS] --uri <uri> [--] [files]...
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-s, --schema <schemas>... Schemas to include in context to validate against. Schemas are added in order, but do
not validate references to other schemas upon loading.
-u, --uri <uri> URI of the schema to validate the files against.
ARGS:
<files>... Files to validate against the selected schemas.
当前支持的数据类型
模式格式支持非常有限的数量类型,这些类型与YAML规范非常接近
string
utf8兼容的字符串integer
i64整数real
f64浮点值hash
(也称为dictionary
或hashmap
)映射string ➞ <类型>
,如items
中定义items: <type>
(可选)哈希中值的类型
array
类型为<type>
的项目数组items: <type>
(可选)数组中值的类型。
object
具有已知字段的结构(与哈希不同)。items
字段和它们的类型数组,如下所示<名称>: <类型>
$ref: <uri>
同一上下文中schema的引用,由<uri>
标识
示例
以下所有示例也可在examples/目录中找到。
使用引用避免深度嵌套和非可重用结构
我们可以定义一个 person
对象,并在不同的模式 phonebook
中通过其 uri 来引用它
# phonebook.yaml
---
uri: person
schema:
type: object
items:
name:
type: string
phone:
type: integer
---
uri: phonebook
schema:
type: object
items:
phonebook:
type: array
items:
$ref: person
来源:examples/nesting/schema.yaml
然后我们可以使用上述模式来验证在此定义的 yaml 文档
# mybook.yaml
---
phonebook:
- name: timmy
phone: 123456
- name: tammy
phone: 987654
来源:examples/nesting/mybook.yaml
... 使用以下方式 yaml-validator-cli
$ yaml-validator-cli --schema phonebook.yaml --uri phonebook -- mybook.yaml
all files validated successfully!
跨文件边界引用模式
使用 --schema
命令行选项提供的所有模式都加载到同一个上下文中,因此引用在单独文件中定义的模式与它们在同一个文件中定义完全相同。
# person-schema.yaml
---
uri: person
schema:
type: object
items:
name:
type: string
phone:
type: integer
来源:examples/multiple-schemas/person-schema.yaml
# phonebook-schema.yaml
---
uri: phonebook
schema:
type: object
items:
phonebook:
type: array
items:
$ref: person
来源:examples/multiple-schemas/phonebook-schema.yaml
验证以下 yaml 文档与我们上面的模式
# mybook.yaml
---
phonebook:
- name: timmy
phone: 123456
- name: tammy
phone: 987654
来源:examples/multiple-schemas/mybook.yaml
... 使用以下方式 yaml-validator-cli
$ yaml-validator-cli \
--schema phonebook-schema.yaml \
--schema person-schema.yaml \
--uri phonebook \
mybook.yaml
all files validated successfully!
将所有不同类型与嵌套引用结合
我们可以按以下3级定义一个模式,其中 customer-list 定义为一个客户数组,这些客户又包含自己的元素,以及引用第三个模式 'car'
# schema.yaml
---
uri: car
schema:
type: object
items:
year:
type: integer
model:
type: string
extra features:
type: array
items:
type: string
price:
type: real
---
uri: customer
schema:
type: object
items:
name:
type: string
cars:
type: hash
items:
$ref: car
---
uri: customer-list
schema:
type: array
items:
$ref: customer
来源:examples/all-types/schema.yaml
验证以下客户列表文档与定义的方案
# customers.yaml
---
- name: Teodor Fælgen
cars:
work:
model: Ford T
extra features:
- gps
- heated seats
price: 200.00
racing:
model: Il Tempo Gigante
extra features:
- blood bank
- radar
price: 3000.00
- name: Lightning McQueen
cars:
himself:
model: Stock
extra features:
- massive eyes instead of windows
- arrogance
price: 0.00
来源:examples/all-types/customers.yaml
... 使用以下方式 yaml-validator-cli
$ yaml-validator-cli \
--schema schema.yaml \
--uri customer-list \
customers.yaml
all files validated successfully!
定位文档中的错误
错误消息始终包含文档中的完整路径,以及发生验证错误时所在的文档名。这使得您可以轻松跟踪错误的精确来源。
以下是一个电话簿模式
# schema.yaml
---
uri: person
schema:
type: object
items:
name:
type: string
age:
type: integer
---
uri: phonebook
schema:
type: array
items:
$ref: person
来源:examples/locating-errors/schema.yaml
我们可以验证以下非常不符合规范的文档,如下定义
# phonebook.yaml
- name: John
age: 52
- name: Karen
age: 12.5
- name: 200
age: Jimmy
来源:examples/locating-errors/phonebook.yaml
使用以下方式 yaml-validator-cli
$ yaml-validator-cli \
--schema schema.yaml \
--uri phonebook \
phonebook.yaml
phonebook.yaml:
#[1].age: wrong type, expected integer got real
#[2].age: wrong type, expected integer got string
#[2].name: wrong type, expected string got integer
错误消息正确地告诉我们提供的文档 phonebook.yaml
存在问题。Karen 的年龄是实数,不是整数,而 Jimmy 的年龄和名字已被调换。
注意: #
表示文档的根,在此情况下为 phonebook.yaml
。
依赖项
~6.5MB
~111K SLoC