A tool to check whether a JSON schema is subset/subschema of another JSON schema.
Project description
GHGA JSON Subschema
Note: This is a fork of IBM/jsonsubschema maintained by the German Human Genome-Phenome Archive (GHGA). It was created to bring in necessary fixes, updates, and functionality required by GHGA-related projects.
ghga-jsonsubschema checks if one JSON schema is a subschema (subtype) of another.
For any two JSON schemas s1 and s2, s1 <: s2 (reads s1 is subschema/subtype of s2) if every JSON document instance that validates against s1 also validates against s2.
jsonsubschema is very useful in analysing schema evolution and ensuring that newer schema versions are backward compatible. jsonsubschema also enables static type checking on different components of a system that uses JSON schema to describe data interfaces among the system's different components.
For a practical overview of the architecture, purpose, and usage of this library, please see DETAILS.md. For the formal foundations and deep technical details, please refer to the ISSTA 2021 paper by Andrew Habib, Avraham Shinnar, Martin Hirzel, and Michael Pradel, the original authors of this library.
Installation
Requirements
- Python 3.13+
Install from PyPI
pip install ghga-jsonsubschema
Install from source
git clone https://github.com/ghga-de/ghga-jsonsubschema.git
cd ghga-jsonsubschema
uv sync
Running subschema
JSON subschema provides two usage interfaces:
CLI interface
First, create two JSON schema examples by executing the following:
echo '{"type": ["null", "string"]}' > s1.json
echo '{"type": ["string", "null"], "not": {"enum": [""]}} > s2.json
Then, invoke the CLI by executing:
python -m jsonsubschema s2.json s1.json
Python API
from jsonsubschema import is_subschema
def main():
s1 = {'type': "integer"}
s2 = {'type': ["integer", "string"]}
print(f'LHS <: RHS {is_subschema(s1, s2)}')
if __name__ == "__main__":
main()
Development
Set up a local development environment:
uv sync --extra dev
uv run pre-commit install
Run the test suite:
uv run pytest tests/
Run the test suite with coverage:
uv run coverage run -m pytest tests/
uv run coverage report
Changes made by GHGA
This fork introduces several key updates compared to the original ibm/jsonsubschema repository:
- Public API names have been changed to align with PEP 8.
- The minimum required Python version is now 3.13.
- Packaging uses more modern conventions.
- Tests have been converted from
unittesttopytest.
License
This repository is distributed under the terms of the Apache 2.0 License, see LICENSE.txt.
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 ghga_jsonsubschema-0.1.0.tar.gz.
File metadata
- Download URL: ghga_jsonsubschema-0.1.0.tar.gz
- Upload date:
- Size: 46.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7153fc532f1cbcdaf08929cc146c94a7b9ff9d80f98ec964de0b0391befd18c8
|
|
| MD5 |
449659fd44511347df13ce6ee0fdf085
|
|
| BLAKE2b-256 |
fffbc4c8f78a1f5d81670787007b5a5835c8f7977001d6a348757c6f3da8c569
|
File details
Details for the file ghga_jsonsubschema-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ghga_jsonsubschema-0.1.0-py3-none-any.whl
- Upload date:
- Size: 29.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
255720ee1aba01f5de139e699838ff1f969e6d9eb9cd9927674079567a7f93ff
|
|
| MD5 |
3bad74180af6ced722b4cacc0136423d
|
|
| BLAKE2b-256 |
12d5b8b54e1635e5ae1824c5afd3e3789a953c99ee571ebf0c2e059c5c77eb3f
|