Skip to main content

An up-to-date fork of jsonsubschema synced with the latest master branch

Project description

📦 This is an updated fork of jsonsubschema, synced with the latest master branch. Published under a new name (jsonsubschema-master) for compatibility and continued development.

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.*
  • Other python dependencies will be installed during the below setup process

You can either install subschema from the source code from github or the pypy package.

A) Install from github source code

Execute the following:

git clone https://github.com/IBM/jsonsubschema.git 
cd jsonsubschema
python setup.py install
cd ..

B) Install from pypy

Execute the following:

pip install jsonsubschema

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_master-0.0.7.tar.gz (44.7 kB view details)

Uploaded Source

Built Distribution

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

jsonsubschema_master-0.0.7-py3-none-any.whl (28.7 kB view details)

Uploaded Python 3

File details

Details for the file jsonsubschema_master-0.0.7.tar.gz.

File metadata

  • Download URL: jsonsubschema_master-0.0.7.tar.gz
  • Upload date:
  • Size: 44.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.7

File hashes

Hashes for jsonsubschema_master-0.0.7.tar.gz
Algorithm Hash digest
SHA256 958839c9b137105b8711495be723e326e1b013f13ee143c3333a927fd5f5eb81
MD5 e6556594bd493f7a67ceed2477cdc8ac
BLAKE2b-256 a5094b2c7c1bf25723f721d91205eae0da27a329c230045c0f65868022022ed1

See more details on using hashes here.

File details

Details for the file jsonsubschema_master-0.0.7-py3-none-any.whl.

File metadata

File hashes

Hashes for jsonsubschema_master-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 43ed2821b3b629429beaa7665be1dbc3f89f9a12262891bee0a8811ff8f051b4
MD5 87eb9606b9fb48733430b2b61ce9e49c
BLAKE2b-256 be64eab5f673d71a1deb2138e1037f885551ffe59c3f51a9f75ea58d62d85bfa

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