How it checks
Four layers, in order
A file passes through bytes, syntax, schema and rules. When a layer fails, the deeper ones are reported as not_run instead of piling up follow-up errors.
- Bytes: valid UTF-8, byte order mark, line endings, invisible and bidi control characters.
- Syntax and schema: well-formed and parseable, then RELAX NG, XSD or JSON Schema.
- Rules: Schematron business rules such as EN 16931, XRechnung and Peppol, and your own rules.