Commonmeta JSON Schemas and conformance fixtures
Project description
commonmeta-schema
Language-neutral JSON Schema definitions and conformance fixtures for Commonmeta, the scholarly metadata interchange format.
This repository is the shared source of truth consumed by the following Commonmeta implementations:
- commonmeta-rs (Rust)
- commonmeta-py (Python)
Keeping the schema and the golden fixtures in one place lets every implementation validate against the same contract and run the same cross-format conformance tests.
Layout
schemas/
commonmeta_v1.0rc2.json # the Commonmeta JSON Schema (current: v1.0rc2)
fixtures/
commonmeta/ # canonical Commonmeta records (round-trip + expected output)
<format>/ # input fixtures in a given source format
<format>_out/ # expected writer output (Commonmeta -> format)
<format>_commonmeta/ # expected reader output for non-JSON inputs
Schema versions
Schemas are versioned by filename. The current version is
commonmeta_v1.0rc2.json; new versions are added alongside it rather than
replacing existing files, so implementations can pin a version. The
schema_version field of a Commonmeta record is the URL
https://commonmeta.org/commonmeta_v1.0rc2.json.
Fixture conventions
The conformance harness in each implementation follows these naming rules (a missing pair is skipped, so partial coverage is fine):
| Test kind | Input | Expected |
|---|---|---|
| Round-trip | fixtures/commonmeta/<name>.json |
itself (re-serialized, semantically equal) |
| Reader (JSON input) | fixtures/<format>/<name>.json |
fixtures/commonmeta/<name>.json |
| Reader (text input) | fixtures/<format>/<name>.<ext> |
fixtures/<format>_commonmeta/<name>.json |
| Writer | fixtures/commonmeta/<name>.json |
fixtures/<format>_out/<name>.<ext> |
Formats currently covered: crossref, crossref_xml, datacite,
datacite_xml, schemaorg, csl, bibtex, cff, ris, jsonfeed,
inveniordm, codemeta.
Semantic comparison
Fixtures are compared as parsed JSON trees, not as strings, using an
omitempty-aware and numeric-aware diff: key order and whitespace are
irrelevant, an absent field equals an empty/zero/null value, and 52
equals 52.0. This keeps hand-authored fixtures robust across
implementations.
Using this repository
Each implementation vendors (copies) the schema and fixtures it needs from
here. Update the canonical files in this repository first, then sync them
into commonmeta-rs and commonmeta-py.
Packaging and publishing
This repository can be published as both:
- a Python package on PyPI (
commonmeta-schema) - a Rust crate on crates.io (
commonmeta-schema)
For the initial release, publish explicitly via CLI (not CI automation).
Package versions follow the schema version:
- PyPI uses PEP 440 form:
1.0rc2 - crates.io uses SemVer form:
1.0.0-rc.2
Python (PyPI) via uv publish
- Ensure you are authenticated for PyPI (recommended: trusted publisher or API token).
- Build distribution artifacts:
uv build
- Optionally validate the build metadata:
uvx twine check dist/*
- Publish to PyPI:
uv publish
Rust (crates.io) via cargo publish
- Log in once with a crates.io token:
cargo login
- Validate package contents from the crate directory:
cargo package --manifest-path rust/Cargo.toml --allow-dirty
- Publish:
cargo publish --manifest-path rust/Cargo.toml
Recommended first-release order
- Publish
1.0rc2to PyPI withuv publish. - Publish
1.0.0-rc.2to crates.io withcargo publish. - Create a git tag
v1.0rc2after both uploads succeed.
License
MIT © 2026 Front Matter
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file commonmeta_schema-1.0rc2.dev8.tar.gz.
File metadata
- Download URL: commonmeta_schema-1.0rc2.dev8.tar.gz
- Upload date:
- Size: 181.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
998f1692e628205ad6e9fb4d1cc1a599a582b6c0954e8b397a006fed7182aaf5
|
|
| MD5 |
e50096dd466eec1658a6d46b7d43b85d
|
|
| BLAKE2b-256 |
ac6ab73b2249c7b701b2b8b22a82d55646d09d03a642deeb6b45c9102f568243
|
File details
Details for the file commonmeta_schema-1.0rc2.dev8-py3-none-any.whl.
File metadata
- Download URL: commonmeta_schema-1.0rc2.dev8-py3-none-any.whl
- Upload date:
- Size: 241.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5cfa06773952ef70c20dcb60fba80f9832f47a3961259b249c30b52701554e61
|
|
| MD5 |
32f19e0caa2be1cf40f0b782d993d644
|
|
| BLAKE2b-256 |
ce95bcd6505eda899836327dd440f34c405b11e2a05afeaa5841b30d0891a451
|