21 documents

The specification

Overview

Design principles and a reading order.

spec/

XML

The XML parser and its data model.

spec/xml/

XPath 1.0

The XPath 1.0 engine: axes, functions, conversions.

spec/xpath/

XPath 2.0 subset

What is in, what is out, and where 1.0 semantics still apply.

spec/xpath2/

XPath 3.0 subset

Function items, =>, ||, !, let, and the higher-order sequence functions.

spec/xpath3/

Data model

Every Schematron element and its Rust type.

spec/data-model/

Parsing

The five schema compilation passes.

spec/parsing/

Validation

The validation algorithm, exactly.

spec/validation/

SVRL

The report format, read and written.

spec/svrl/

Keys

Keys, and why a cross-reference check needs one.

spec/keys/

Streaming validation

One repeating record at a time, in bounded memory, for schemas local to it.

spec/streaming/

Linting

Catching schemas that silently do nothing.

spec/linting/

API

The library surface.

spec/api/

CLI

Every option, and every exit code.

spec/cli/

Errors

The error taxonomy, and error versus finding.

spec/errors/

Testing

Tests, fuzzing, benchmarks, lints.

spec/testing/

Conformance

Limits and divergences, stated up front.

spec/conformance/

MSRV policy

Current stable minus two.

spec/rust-msrv-n-minus-2/

Agents directory naming

Why the agent documentation directory is lowercase.

spec/agents-directory-name-is-lowercase/

Tutorial

Eighteen steps from one rule to a real schema.

spec/tutorial/

Roadmap

Shipped, next, and not planned.

spec/roadmap/

How it stays true

The documentation is machine-checked

tests/docs.rs compiles every schema shown in the docs, resolves every relative link, and ties duplicated facts — the MSRV, the CLI flags, the XPath function list — back to their single source. A document that drifts from the code fails the test suite.

cargo test --all-features
cargo clippy --all-targets --all-features -- -D warnings
cargo doc --no-deps --all-features
cargo +1.96 test --all-features

The conformance suite lives in tests/corpus/. Each case is a directory holding schema.sch, input.xml, and expected.txt; adding a case means adding a directory, with no Rust to change.

Browse the repository Conformance summary Roadmap