Skip to main content

Schema Annotations for Linked Avro Data (SALAD)

Project description

Linux Build Status Code coverage CII Best Practices

Schema Salad

Salad is a schema language for describing JSON or YAML structured linked data documents. Salad schema describes rules for preprocessing, structural validation, and hyperlink checking for documents described by a Salad schema. Salad supports rich data modeling with inheritance, template specialization, object identifiers, object references, documentation generation, code generation, and transformation to RDF. Salad provides a bridge between document and record oriented data modeling and the Semantic Web.

The Schema Salad library is Python 3.6+ only.

Usage

$ pip install schema_salad

To install from source:

git clone https://github.com/common-workflow-language/schema_salad
cd schema_salad
python3 setup.py install

Commands

Schema salad can be used as a command line tool or imported as a Python module:

$ schema-salad-tool
usage: schema-salad-tool [-h] [--rdf-serializer RDF_SERIALIZER]
                      [--print-jsonld-context | --print-rdfs | --print-avro
                      | --print-rdf | --print-pre | --print-index
                      | --print-metadata | --print-inheritance-dot
                      | --print-fieldrefs-dot | --codegen language
                      | --print-oneline]
                      [--strict | --non-strict] [--verbose | --quiet
                      | --debug]
                      [--version]
                      [schema] [document]

$ python
>>> import schema_salad

Validate a schema:

$ schema-salad-tool myschema.yml

Validate a document using a schema:

$ schema-salad-tool myschema.yml mydocument.yml

Generate HTML documentation:

$ schema-salad-tool myschema.yml > myschema.html

Get JSON-LD context:

$ schema-salad-tool --print-jsonld-context myschema.yml mydocument.yml

Convert a document to JSON-LD:

$ schema-salad-tool --print-pre myschema.yml mydocument.yml > mydocument.jsonld

Generate Python classes for loading/generating documents described by the schema:

$ schema-salad-tool --codegen=python myschema.yml > myschema.py

Display inheritance relationship between classes as a graphviz ‘dot’ file and render as SVG:

$ schema-salad-tool --print-inheritance-dot myschema.yml | dot -Tsvg > myschema.svg

Quick Start

Let’s say you have a ‘basket’ record that can contain items measured either by weight or by count. Here’s an example:

basket:
  - product: bananas
    price: 0.39
    per: pound
    weight: 1
  - product: cucumbers
    price: 0.79
    per: item
    count: 3

We want to validate that all the expected fields are present, the measurement is known, and that “count” cannot be a fractional value. Here is an example schema to do that:

- name: Product
  doc: |
    The base type for a product.  This is an abstract type, so it
    can't be used directly, but can be used to define other types.
  type: record
  abstract: true
  fields:
    product: string
    price: float

- name: ByWeight
  doc: |
    A product, sold by weight.  Products may be sold by pound or by
    kilogram.  Weights may be fractional.
  type: record
  extends: Product
  fields:
    per:
      type:
        type: enum
        symbols:
          - pound
          - kilogram
      jsonldPredicate: '#per'
    weight: float

- name: ByCount
  doc: |
    A product, sold by count.  The count must be a integer value.
  type: record
  extends: Product
  fields:
    per:
      type:
        type: enum
        symbols:
          - item
      jsonldPredicate: '#per'
    count: int

- name: Basket
  doc: |
    A basket of products.  The 'documentRoot' field indicates it is a
    valid starting point for a document.  The 'basket' field will
    validate subtypes of 'Product' (ByWeight and ByCount).
  type: record
  documentRoot: true
  fields:
    basket:
      type:
        type: array
        items: Product

You can check the schema and document in schema_salad/tests/basket_schema.yml and schema_salad/tests/basket.yml:

$ schema-salad-tool basket_schema.yml basket.yml
Document `basket.yml` is valid

Documentation

See the specification and the metaschema (salad schema for itself). For an example application of Schema Salad see the Common Workflow Language.

Rationale

The JSON data model is an popular way to represent structured data. It is attractive because of it’s relative simplicity and is a natural fit with the standard types of many programming languages. However, this simplicity comes at the cost that basic JSON lacks expressive features useful for working with complex data structures and document formats, such as schemas, object references, and namespaces.

JSON-LD is a W3C standard providing a way to describe how to interpret a JSON document as Linked Data by means of a “context”. JSON-LD provides a powerful solution for representing object references and namespaces in JSON based on standard web URIs, but is not itself a schema language. Without a schema providing a well defined structure, it is difficult to process an arbitrary JSON-LD document as idiomatic JSON because there are many ways to express the same data that are logically equivalent but structurally distinct.

Several schema languages exist for describing and validating JSON data, such as JSON Schema and Apache Avro data serialization system, however none understand linked data. As a result, to fully take advantage of JSON-LD to build the next generation of linked data applications, one must maintain separate JSON schema, JSON-LD context, RDF schema, and human documentation, despite significant overlap of content and obvious need for these documents to stay synchronized.

Schema Salad is designed to address this gap. It provides a schema language and processing rules for describing structured JSON content permitting URI resolution and strict document validation. The schema language supports linked data through annotations that describe the linked data interpretation of the content, enables generation of JSON-LD context and RDF schema, and production of RDF triples by applying the JSON-LD context. The schema language also provides for robust support of inline documentation.

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

schema-salad-8.2.20210914115719.tar.gz (436.0 kB view details)

Uploaded Source

Built Distributions

schema_salad-8.2.20210914115719-py3-none-any.whl (475.7 kB view details)

Uploaded Python 3

schema_salad-8.2.20210914115719-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

schema_salad-8.2.20210914115719-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

schema_salad-8.2.20210914115719-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

schema_salad-8.2.20210914115719-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

schema_salad-8.2.20210914115719-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

schema_salad-8.2.20210914115719-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

schema_salad-8.2.20210914115719-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

schema_salad-8.2.20210914115719-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

schema_salad-8.2.20210914115719-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

schema_salad-8.2.20210914115719-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ARM64

schema_salad-8.2.20210914115719-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

schema_salad-8.2.20210914115719-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

File details

Details for the file schema-salad-8.2.20210914115719.tar.gz.

File metadata

  • Download URL: schema-salad-8.2.20210914115719.tar.gz
  • Upload date:
  • Size: 436.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7

File hashes

Hashes for schema-salad-8.2.20210914115719.tar.gz
Algorithm Hash digest
SHA256 928a8fd96e30bcb9c364d79126f5537a64fee1ae491d4860308f3e03cb1d038b
MD5 57032ad2ee338e830322dd0e458414bd
BLAKE2b-256 defe6e9c1c94d5ece937b74adedfbbd6dd3d5b7f76fb1370c916e1587a36a122

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-py3-none-any.whl.

File metadata

  • Download URL: schema_salad-8.2.20210914115719-py3-none-any.whl
  • Upload date:
  • Size: 475.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7

File hashes

Hashes for schema_salad-8.2.20210914115719-py3-none-any.whl
Algorithm Hash digest
SHA256 f7e719e988b09bbf297f14268ed79a0dcd76536624bace1483fbfa183d32505d
MD5 286100faa789e18edfa17b9d50f6ec6c
BLAKE2b-256 173ff72216d6f63b21e3b246205189ab4e7b937e3dbe5ef7c861cc2e7cc61e0f

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f305bfaec4eb8fa03cd32dc88637858382687db65ea8ebe4bd8c461f3407723f
MD5 69b561f958dad87dbe780ef1f587f98f
BLAKE2b-256 8571d59787b0fbd6aef6f4764405eeed8841d763a6a59147840540ceb46f2277

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 91f4afb5abcdc2b545d4491794c558f5bf54e75cf1b8bc99436011f563a9d0cd
MD5 afb1b3a05e993ada215222bb9c425764
BLAKE2b-256 9ea47d2bd780851a8c679f8eaa146f72fab54b21444d2530cf51a8d3973819ef

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 8669e0bbd2a4ac4750a05bb0dc3f7038766eaddd1f40957979b1ee42a6543586
MD5 0ab83d85a0ac1305c37fd00756d8d13f
BLAKE2b-256 dcbf4d8c9c593bbfb484220d6135d1fea8e18d3ee3a300eb8fbedd3a60a8bb4b

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3e76e678c8190be4ef3267f2bfa9a50c5ba3ffc60ae13eff4cb9c46e2f3eac52
MD5 7323bd876e7551dc6d7ed130d9eb7e8d
BLAKE2b-256 96bf6b6e94257a509c794087f915ccd5e687abde4d148dedf8215732092914ed

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c8587b9f788015b6b3db51b7834ba1fa3cdf0ece9acaba5b70083ec9f8f85749
MD5 56413644aa2f2787159b99ade9418c81
BLAKE2b-256 9c4ae2c6959f6bdca6b21223718af8be79cf046b2255a2ab19d7a2e40b2a0b2b

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 81d16556d99f70aaa057c5955dad31f3a7185a845c0fd12a899ad6f15a76e55b
MD5 2d8ffb4988ccd4c51a6c886fcdc204d1
BLAKE2b-256 db2f712e69fd8ba3a481876be2bfa2893fa86e100e2832d11df79d3a052942a3

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9b0742be11058e515af8cdf29916ded2ddbe65609efcc6ace7650cc269dc6619
MD5 5c86c1ddc7e75ed457d5da3386df13fb
BLAKE2b-256 18a3baf6287f1470a81438df8f2d0b2d7c6303c1efb99270f9f97e7a61da3d15

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 872cff6a08a05c9597e56c0b4737b702a62bc6dcbde3c87a42cd973070437aab
MD5 e92dd71667abff7e5655eda456b68c6a
BLAKE2b-256 8f7963eb80f972f8f43390fd37abf89311a39868a3640925aac2ba0e7e36fb33

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 89fc810a2039ff9956a6ca9b6bdc5c7a1cb5783cf3bb4c9ac0596aa71c3b85c0
MD5 24b0b4486a3b925b2f2b3134166ac7b5
BLAKE2b-256 2646fe84f828d88ab64a9890e66d6c71f5c5e2a1cb34dfa1e2decb2bf319d35a

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 51eb9cdb7e5ad286ed99c3784e9a5085f58be3d2e3f3395a7e8a5fc0dfa4b6f5
MD5 0c160ae1e64b75360fb26ba3bb0cfdd4
BLAKE2b-256 89ed807fc7623293d1b3f82fd8fe150d7bfa0f8075a46753307451986cd6e979

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 80c9bbf5a5425d0ebc3f87000d1b671d677416726d976df99fc7333710bb2cc6
MD5 34ffaf579306257e4c940d97c5ec276b
BLAKE2b-256 f991cd558b3beffb3ae82afaedf96f64c54d80dc57d6b5342db169e16cfd461a

See more details on using hashes here.

Provenance

File details

Details for the file schema_salad-8.2.20210914115719-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for schema_salad-8.2.20210914115719-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 2d17add932927ea715abf80a46fe65609cd77afa7e67d165477b5df94a796916
MD5 810fb288db617bfa2437ef2229cf7c36
BLAKE2b-256 68eff1dd9feb92bfd5ebd73b116b1fc9a9909d7c0d4c11598a3e12e8dac243e3

See more details on using hashes here.

Provenance

Supported by

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