Skip to content
Registry stack docs v0 · draft

Validate and render a manifest

Check a metadata.yaml file for errors, inspect individual rendered artifacts (service catalogues, catalog metadata, validation shapes, JSON Schemas, form schemas, and policies), or produce a complete static publication bundle for hosting.

The validator collects all errors across every validation pass before reporting, so a single run surfaces every problem in the file. You do not need to fix one error at a time and re-run.

For profile fixture validation, see the profile fixtures how-to instead.

  • Rust toolchain installed (the workspace uses stable Rust).
  • The registry-manifest repository cloned locally.

Build the CLI before running commands:

Terminal window
cargo build -p registry-manifest-cli

The commands in this page use cargo run -p registry-manifest-cli -- as a prefix. If you have installed the binary directly, replace that prefix with registry-manifest-cli.

The four example profile fixtures in the repository serve as ready-made manifest inputs. The commands in this how-to use profiles/example-civil-registration/fixtures/metadata.yaml as the example path. Substitute your own manifest path as needed.

Terminal window
cargo run -p registry-manifest-cli -- validate \
profiles/example-civil-registration/fixtures/metadata.yaml

On success, the CLI prints:

metadata manifest valid: profiles/example-civil-registration/fixtures/metadata.yaml

On failure, all validation errors are printed together.

Validation checks include:

  • schema_version equals "registry-manifest/v1".
  • Catalog base_url is a valid HTTP URL.
  • Entity names match the required identifier pattern.
  • Cardinality strings are well-formed ("0..1", "1..n", "1..1").
  • Codelist references resolve to defined codelists.
  • Grouped evidence type lists reference known evidence types that prove the owning requirement.
  • Public service, authority, channel, form, and data-service references resolve.
  • ODRL policy terms use recognized action and operator values.
  • Evidence offering references are internally consistent.

Use render to write one renderer’s output to stdout. The --format flag selects the renderer.

Render the catalog JSON:

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format catalog

Render base DCAT JSON-LD:

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format dcat

Render a Core Public Service Vocabulary Application Profile (CPSV-AP) service catalogue:

Terminal window
cargo run -p registry-manifest-cli -- render \
fixtures/cpsv-ap/health-linked-child-support.metadata.yaml \
--format cpsv-ap

To render the BRegDCAT-AP profile variant via --format dcat, pass --profile bregdcat-ap. Alternatively, use the --format bregdcat-ap shorthand:

Render BRegDCAT-AP 2.00 JSON-LD:

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format bregdcat-ap

Render SHACL (Shapes Constraint Language) node shapes:

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format shacl

Render a JSON Schema Draft 2020-12 for a specific dataset and entity. The civil-registration fixture has dataset vital-events with entities person and vital_event. Substitute accordingly for your manifest:

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format json-schema \
--dataset vital-events \
--entity person

Render a form JSON Schema Draft 2020-12 document:

Terminal window
cargo run -p registry-manifest-cli -- render \
fixtures/cpsv-ap/health-linked-child-support.metadata.yaml \
--format form-json-schema \
--form child-support-review-form

Render OGC API Records item bodies:

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format ogc-records

Render the ODRL (Open Digital Rights Language) policy collection:

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format policies

Render a per-dataset ODRL policy document (substitute your dataset ID for vital-events):

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format policy \
--dataset vital-events

Render evidence offerings:

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format evidence-offerings

Render a single evidence offering by ID (substitute the offering ID defined in your manifest’s evidence_offerings list):

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format evidence-offering \
--offering <offering-id>

All render output goes to stdout. Redirect to a file when you want to inspect or diff it:

Terminal window
cargo run -p registry-manifest-cli -- render \
profiles/example-civil-registration/fixtures/metadata.yaml \
--format bregdcat-ap > /tmp/breg.jsonld

publish runs every renderer, writes all artifacts to a directory, and creates an index.json that lists every artifact with its relative path.

Terminal window
cargo run -p registry-manifest-cli -- publish \
profiles/example-civil-registration/fixtures/metadata.yaml \
--out target/metadata/public

The output directory will contain catalog.json, dcat.jsonld, cpsv-ap.jsonld when the manifest declares the profile, shacl.jsonld, per-entity JSON Schema files, form JSON Schema files, OGC Records output, evidence-offering files, and per-dataset policy documents. See the reference page for the full artifact list.

The index.json at the root of the output directory carries schema version registry-manifest-index/v1 and links to every artifact.

After validate, confirm the exit code is zero:

Terminal window
cargo run -p registry-manifest-cli -- validate \
profiles/example-civil-registration/fixtures/metadata.yaml
echo "exit code: $?"

After publish, confirm the key artifacts are present:

Terminal window
ls target/metadata/public/catalog.json \
target/metadata/public/dcat.jsonld \
target/metadata/public/cpsv-ap.jsonld \
target/metadata/public/shacl.jsonld \
target/metadata/public/index.json

”schema_version mismatch” or validation error on schema_version

Section titled “”schema_version mismatch” or validation error on schema_version”

The manifest root must declare schema_version: registry-manifest/v1. Check the first line of your YAML.

Validation prints errors about cardinality strings

Section titled “Validation prints errors about cardinality strings”

Cardinality values must match the pattern "0..1", "1..1", or "1..n". Check your cardinality_expectations blocks.

--format json-schema produces no output or errors

Section titled “--format json-schema produces no output or errors”

The json-schema format requires both --dataset <id> and --entity <name>. Confirm both flags are present and match IDs defined in your manifest.

--format policy errors on dataset not found

Section titled “--format policy errors on dataset not found”

The policy format requires --dataset <id>. The ID must match a DatasetManifest entry in your manifest.

publish writes an empty or partial directory

Section titled “publish writes an empty or partial directory”

A validation failure inside publish aborts the run. Run validate first to confirm the manifest is clean before running publish.