Skip to main content

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 unittest to pytest.

License

This repository is distributed under the terms of the Apache 2.0 License, see LICENSE.txt.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ghga_jsonsubschema-0.1.0.tar.gz (46.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ghga_jsonsubschema-0.1.0-py3-none-any.whl (29.6 kB view details)

Uploaded Python 3

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

Hashes for ghga_jsonsubschema-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7153fc532f1cbcdaf08929cc146c94a7b9ff9d80f98ec964de0b0391befd18c8
MD5 449659fd44511347df13ce6ee0fdf085
BLAKE2b-256 fffbc4c8f78a1f5d81670787007b5a5835c8f7977001d6a348757c6f3da8c569

See more details on using hashes here.

File details

Details for the file ghga_jsonsubschema-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ghga_jsonsubschema-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 255720ee1aba01f5de139e699838ff1f969e6d9eb9cd9927674079567a7f93ff
MD5 3bad74180af6ced722b4cacc0136423d
BLAKE2b-256 12d5b8b54e1635e5ae1824c5afd3e3789a953c99ee571ebf0c2e059c5c77eb3f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page