模式验证 YAML? ?

YAML 有模式验证语言吗? 我谷歌过,但是没有找到任何有用的东西。

像 XSD 格式这样的格式,使用语言本身来描述模式,将是我的最佳选择。

55668 次浏览

Try Kwalify (Ruby and Java only), or Rx (many languages)

I wonder if it would make sense to reuse JSON schema for this. YAML can be easily converted to JSON without loosing any information (?), so in theory YAML could be validated by the same tool chain, allowing open source community to concentrate on one good schema tool chain. The schema itself could also be written in YAML and converted to JSON.

JSON Schema can be used with most YAML documents resulting in a more portable and better documented solution than Rx or Kwalify. JSON Schema is the only of the three for which I have been able to find editor support.

More information on using YAML and JSON Schema including tools and editor support is tracked on this page. At the time of writing, there is editor support in Visual Studio Code and a command-line based validation tool available via npm.


Full Disclosure: I authored the web site linked above to try to make the application of JSON Schema to YAML more discoverable. I also wrote an editor extension for VS Code that has since been superseded by the RedHat extension linked above.

Good idea. Googled this up because I was looking for the same.

It's possible to convert YAML to XML in a defined manner (similarly to JSON <-> XML) and validate with a standard XML validator.

Depending on your platform, there are tools or snippets for that conversion: JavaScript (NPM), Ruby, Java (Jackson), Java (TestNG) (you'll need to see the source for what parameters it wants).

If done using an API, the error positions can even be mapped back to the original YAML file.

You can use this python ysd project to validate your yaml files. https://github.com/yonahd/ysd Super simple to use

python yaml-validator/main.py -v yamls/example-values.yaml -r yamls/example-rules.yaml

Example rule file:

required: // field must exist and type must match
env: str
enabled: bool
replicas: int
optional: // if field exists type must match
disk: str

Example yaml file (helm values file):

network:
service:
port: 8060
enabled: true
image:
app: my-app:build
replicas: 1
env: dev
disk: local

If your project is in C++, you can also use the yaml-schema-cpp library. It allows to validate (and complete) the .yaml input files using schema files (YAML files with extension .schema) from your C++ code.