yaml-validator
YAML validation using schemas written in yaml
yaml-validator-cli 0.0.2
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] [--] [files]...
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-s, --schemas <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. If not supplied, the last schema
added will be used for validation.
ARGS:
<files>... Files to validate against the selected schemas.
Examples
All the example yaml files and schemas below can be found in the yaml-validator-cli/examples directory.
Validating a single YAML file against a single schema
You can use the command line tool to test a single yaml file against a single schema, by first defining a schema file and a yaml file to test it against:
Schema: examples/person.yaml
---
schema:
- name: firstname
type: string
- name: age
type: number
YAML-file: johnsmith.yaml
---
firstname: John
age: 58
Run the command with the above schema and user file:
Validating multiple files against a single schema
For this example, we'll re-use the files from before, but add some more people
YAML-file: janedoe.yaml
---
firstname: Jane
age: 33
YAML-file: malfoy.yaml
---
firstname: Malfoy
age: Thirty-five
Running the same command, but with the other people appended:
We see that malfoy.yaml does not conform to the provided schema, and our program has exited with an error.
Validating against a context containing interdependent schemas
In this example we'll make use of the reference data type, which means we'll need to provide schemas we'll be referring to with a uri we can locate them by.
The person.yaml file from the first examples is already has a uri defined, it was just ommitted from the examples for simplicity's sake. You can inspect the file yourself:
---
uri: examples/0.0.3/person
schema:
- name: firstname
type: string
- name: age
type: number
We can therefore go on to define our other schema, which will contain a list of persons:
Schema: listofpeople.yaml
---
schema:
- name: people
type: list
inner:
type: reference
uri: examples/0.0.3/person
Now we have to define a test file we can validate using the above schema:
YAML-file: contacts.yaml
---
people:
- firstname: John
age: 58
- firstname: Jane
age: 33
- firstname: Malfoy
age: Thirty-five
We can validate our contacts list, by specifying both the schemas necessary to validate it in order:
once again Malfoy violates our schema with his stringified age, as we can tell from the error message telling us that the 3rd (because of zero-indexed arrays) entry in our $.people value is malformed.
Note: This "just works", because we supplied our "listofpeople.yaml" file last, which means it will be used as the schema to validate against by default. If we had reversed the order of the schemas, or if we are not sure about the order the will be loaded in, we can give our listofpeople.yaml struct a uri too, and specify it on the command line to make it explicit which schema we want our contacts.yaml file to validate against:
Schema: listofpeople.yaml
---
schema:
- name: people
type: list
inner:
type: reference
uri: examples/0.0.3/person
Now in any order:
We of course still get the Malfoy error, since we haven't fixed our contacts.yaml list, but if you remove the --uri argument from our command, you'll be met with a completely different error:
The message claims there's a missing firstname field in our root document, because it thinks contacts.yaml is supposed to conform to the person.yaml schema.