Schemapack
Make your JSON Schemas sociable and create linked data models.
Description
Schemapack is a library that defines a lightweight data modeling framework based on a schema description, a compatible data instance format, and the tooling that supports them. It introduces two main components: the schemapack, which describes linked data structures, and the datapack, which represents the data conforming to those structures. The tooling around schemapack and datapack focuses on loading, extraction, and validation, and supports partial extraction and data embedding operations. The Schemapack library includes a CLI component that provides access to core functionality via the command line.
Installation
This package is available at PyPI: https://pypi.org/project/schemapack
Install:
bash
pip install schemapack
Upgrade:
pip install --upgrade schemapack
Usage
bash
schemapack --help
Usage: schemapack [OPTIONS] COMMAND [ARGS]...
Common arguments and options.
╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --version Show the version of the library and exit. │
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it or customize the installation. │
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ validate Validate a datapack against a schemapack. │
│ check-schemapack Check if the provided JSON/YAML document complies with the schemapack specs. │
│ check-datapack Check if the provided JSON/YAML document complies with the datapack specs. │
│ condense-schemapack Writes a version of the provided schemapack with embedded content schemas to │
│ stdout. │
│ isolate-resource Isolate a resource from the given datapack and write a datapack that is rooted to │
│ this resource to stdout. │
│ isolate-class Isolate a class from the given schemapack and write a condensed (with content │
│ schemas being embedded) schemapack that is rooted to this class to stdout. │
│ export-mermaid Generate an entity relationship diagram based on the mermaid markup from the │
│ provided schemapack. │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Quick Start
This example shows how to validate a datapack.yaml file against a schemapack.yaml using the schemapack Python library. The schemapack defines the schema and validation rules, while the datapack contains the actual data to be validated. The steps below demonstrate how to load both files and run validation with SchemaPackValidator.
from pathlib import Path
from schemapack import SchemaPackValidator, load_datapack, load_schemapack
schemapack_path = Path("path/to/schemapack.yaml")
datapack_path = Path("path/to/datapack.yaml")
# load schemapack
schemapack = load_schemapack(schemapack_path)
# load datapack
datapack = load_datapack(datapack_path)
# validate datapack against schemapack
validator = SchemaPackValidator(schemapack=schemapack)
validator.validate(datapack=datapack)
Documentation
Development
This package is a member of the GHGA monorepo and is
developed from the repository root rather than on its own. The repository ships a
devcontainer with the whole toolchain: open it in VS Code and run
Remote-Containers: Reopen in Container, or set the environment up directly with
just sync.
The usual tasks, run from the repository root (see ADR-0034 for the full recipe list):
just sync # install every member plus the shared dev toolchain
just test libs/schemapack # this member's test suite
just lint # ruff check + format check across the workspace
License
This repository is free to use and modify according to the Apache 2.0 License.
Metadata
Release files for schemapack 4.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| schemapack-4.4.1.tar.gz | 46.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| schemapack-4.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 120.6 kB
Release files / schemapack-4.4.1.tar.gz
| Download URL | schemapack-4.4.1.tar.gz |
|---|---|
| Size | 46.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0c7cfa438ac019d9e7c9ad4f147e859f2b8fe092cf22a4deda13f9054a45a937
|
|
BLAKE2b-256 checksum How to use checksums |
55aac28ba144cca364f36e9f46e2a424a245f3092855db558aad2e71578962e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / schemapack-4.4.1-py3-none-any.whl
| Download URL | schemapack-4.4.1-py3-none-any.whl |
|---|---|
| Size | 74.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6222ad364c612542b35769a6010bd5f754f8529c03f26bec99940ff609cc3ecc
|
|
BLAKE2b-256 checksum How to use checksums |
c568b6245f67423c9c046c285d2509dc0b114d51bb5ef1e52cc0397c18b1ad3e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|