Skip to main content

A tool to check whether a JSON schema is subset/subschema of another JSON schema

Project description

jsonsubschema

CI

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.

The details of JSON subschema are covered in our ISSTA 2021 paper, which received a Distinguished Artifact Award:

@InProceedings{issta21JSONsubschema,
  author    = {Habib, Andrew and Shinnar, Avraham and Hirzel, Martin and Pradel, Michael},
  title     = {Finding Data Compatibility Bugs with JSON Subschema Checking},
  booktitle = {The ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA)},
  year      = {2021},
  pages     = {620--632},
  url       = {https://doi.org/10.1145/3460319.3464796},
}

I) Obtaining the tool

Requirements

  • Python 3.8 or higher
  • Other python dependencies will be installed during the installation process

You can either install jsonsubschema from PyPI or from the source code on GitHub.

A) Install from PyPI

Execute the following:

pip install jsonsubschema

B) Install from GitHub source code

Execute the following:

git clone https://github.com/IBM/jsonsubschema.git
cd jsonsubschema
pip install .

For development installation (editable mode):

pip install -e .

II) Running subschema

JSON subschema provides two usage interfaces:

A) CLI interface

  1. Create two JSON schema examples by executing the following:
echo '{"type": ["null", "string"]}' > s1.json
echo '{"type": ["string", "null"], "not": {"enum": [""]}}' > s2.json
  1. Invoke the CLI by executing:
python -m jsonsubschema.cli s2.json s1.json

B) python API

from jsonsubschema import isSubschema

def main():
	s1 = {'type': "integer"}
	s2 = {'type': ["integer", "string"]}
	
	print(f'LHS <: RHS {isSubschema(s1, s2)}')

if __name__ == "__main__":
	main()

License

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

Contributions

json-subschema is still at an early phase of development and we welcome contributions. Contributors are expected to submit a 'Developer's Certificate of Origin', which can be found in DCO1.1.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

jsonsubschema-0.0.8.tar.gz (44.5 kB view details)

Uploaded Source

Built Distribution

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

jsonsubschema-0.0.8-py3-none-any.whl (28.5 kB view details)

Uploaded Python 3

File details

Details for the file jsonsubschema-0.0.8.tar.gz.

File metadata

  • Download URL: jsonsubschema-0.0.8.tar.gz
  • Upload date:
  • Size: 44.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for jsonsubschema-0.0.8.tar.gz
Algorithm Hash digest
SHA256 39846ece264fe62aae5dd86e71bef8899a5d0869b8be03ab582066acbee7f9d9
MD5 a400fb87d18fb884d49043a25873afa9
BLAKE2b-256 6bb20e2b7fca010d39789e0394170e0ef814ff29fcdc1639ee0db595f3b3ba94

See more details on using hashes here.

Provenance

The following attestation bundles were made for jsonsubschema-0.0.8.tar.gz:

Publisher: release.yml on IBM/jsonsubschema

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jsonsubschema-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: jsonsubschema-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 28.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for jsonsubschema-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 4ab42ad1de7795f5b2abe9842cc797a135a18b24d9ff6b09e4d7ad4a8d2ea4a5
MD5 b9c852834c3c98380ca1597e5c43660a
BLAKE2b-256 2ae3c4721c54f2f28b4b263a007dafe5916ed352af28f44bbd7dcdf676c9b31a

See more details on using hashes here.

Provenance

The following attestation bundles were made for jsonsubschema-0.0.8-py3-none-any.whl:

Publisher: release.yml on IBM/jsonsubschema

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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