跳转到主要内容

链接Avro数据模式注释(SALAD)

项目描述

Linux Build Status Code coverage Documentation Status CII Best Practices

Schema Salad

沙拉是一种用于描述JSON或YAML结构化链接数据文档的模式语言。沙拉模式描述了用于预处理、结构验证和超链接检查的规则,这些规则适用于由沙拉模式描述的文档。沙拉支持具有继承、模板专用化、对象标识符、对象引用、文档生成、代码生成以及转换为RDF的丰富数据建模。沙拉为面向文档和面向记录的数据建模与语义网之间提供了一个桥梁。

Schema Salad库仅支持Python 3.8及以上版本。

安装

pip3 install schema_salad

如果您打算使用schema-salad-tool –codegen=python功能,请包含额外组件[pycodegen]

pip3 install schema_salad[pycodegen]

从源代码安装

git clone https://github.com/common-workflow-language/schema_salad
cd schema_salad
pip3 install .
# or pip3 install .[pycodegen] if needed

命令

Schema salad可以用作命令行工具或作为Python模块导入。

$ schema-salad-tool
usage: schema-salad-tool [-h] [--rdf-serializer RDF_SERIALIZER] [--skip-schemas]
                      [--strict-foreign-properties] [--print-jsonld-context]
                      [--print-rdfs] [--print-avro] [--print-rdf] [--print-pre]
                      [--print-index] [--print-metadata] [--print-inheritance-dot]
                      [--print-fieldrefs-dot] [--codegen language] [--codegen-target CODEGEN_TARGET]
                      [--codegen-examples directory] [--codegen-package dotted.package]
                      [--codegen-copyright copyright_string] [--print-oneline]
                      [--print-doc] [--strict | --non-strict]
                      [--verbose | --quiet | --debug] [--only ONLY] [--redirect REDIRECT]
                      [--brand BRAND] [--brandlink BRANDLINK] [--brandstyle BRANDSTYLE]
                      [--brandinverse] [--primtype PRIMTYPE] [--version]
                      [schema] [document]

$ python
>>> import schema_salad

验证模式

$ schema-salad-tool myschema.yml

使用模式验证文档

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

生成HTML文档

$ schema-salad-tool --print-doc myschema.yml > myschema.html
$ # or
$ schema-salad-doc myschema.yml > myschema.html

获取JSON-LD上下文

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

将文档转换为JSON-LD

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

为描述模式中文档的Python类生成加载/生成代码(需要额外组件[cite][pycodegen])

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

将类之间的继承关系显示为graphviz 'dot'文件,并渲染为SVG

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

代码生成示例

下表中的示例有助于了解如何在不同语言中加载和/或创建/编辑/保存对象,以使用schema-salad-tool –codegen的输出。

以下示例使用CWL v1.2模式

语言

仓库

序列化示例 | 反序列化示例

Python

https://github.com/common-workflow-language/cwl-utils/

create_cwl_from_objects.py

load_document()

Java

https://github.com/common-workflow-language/cwljava/

(尚未实现)

PackedWorkflowClassTest.java

TypeScript

https://github.com/common-workflow-lab/cwl-ts-auto

使用TypeScript创建、编辑和保存CWL文档

使用TypeScript加载CWL文档

.Net

https://github.com/common-workflow-lab/CWLDotNet

使用.NET创建、编辑和保存CWL文档

使用.NET加载CWL文档

C++

https://github.com/common-workflow-lab/cwl-cpp-auto

cwl_output_example.cpp

cwl_input_example.cpp

D

https://github.com/common-workflow-lab/cwl-d-auto

如何使用

如何使用

以下示例是针对Galaxy Workflow Format 2模式的

语言

路径

Python

https://github.com/galaxyproject/gxformat2/blob/master/gxformat2/schema/v19_09.py

Java

https://github.com/galaxyproject/gxformat2/tree/master/java

TypeScript

https://github.com/galaxyproject/gxformat2/tree/master/typescript

快速入门

假设您有一个可以包含按重量或按计数测量的项目“篮子”记录。以下是一个示例

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

我们希望验证所有预期的字段都存在,测量已知,以及“计数”不能是分数值。以下是一个执行此操作的示例模式

- 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

您可以在schema_salad/tests/basket_schema.yml和schema_salad/tests/basket.yml中检查模式和文档

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

文档

请参阅规范元模式(沙拉模式用于自身)。有关Schema Salad的示例应用,请参阅通用工作流语言

理由

JSON数据模型是表示结构化数据的一种流行方式。它吸引人是因为其相对简单,并且与许多编程语言的标准化类型自然兼容。然而,这种简单性是以基本JSON缺乏表达性特征为代价的,这些特征对于处理复杂数据结构和文档格式(如模式、对象引用和命名空间)非常有用。

JSON-LD是一种W3C标准,它通过“上下文”提供了一种将JSON文档解释为链接数据的方法。JSON-LD提供了一种强大的解决方案,用于在基于标准Web URI的JSON中表示对象引用和命名空间,但它本身并不是一种模式语言。没有提供良好定义结构的模式,很难将任意的JSON-LD文档作为习惯性的JSON进行处理,因为存在许多逻辑上等效但结构上不同的数据表达方式。

存在几种用于描述和验证JSON数据的模式语言,例如JSON Schema和Apache Avro数据序列化系统,但它们都不理解链接数据。因此,为了充分利用JSON-LD来构建下一代链接数据应用,必须维护单独的JSON模式、JSON-LD上下文、RDF模式和人类文档,尽管这些文档内容存在显著重叠,并且显然需要保持这些文档同步。

Schema Salad旨在填补这一空白。它提供了一种模式语言和处理规则,用于描述结构化JSON内容,允许URI解析和严格的文档验证。该模式语言通过描述内容的链接数据解释来支持链接数据,能够生成JSON-LD上下文和RDF模式,并通过应用JSON-LD上下文生成RDF三元组。该模式语言还提供了对内联文档的强大支持。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息

源代码分发

schema_salad-8.7.20240905150001.tar.gz (593.3 kB 查看哈希值)

上传时间 源代码

构建的分发

schema_salad-8.7.20240905150001-py3-none-any.whl (636.1 kB 查看哈希值)

上传时间 Python 3

schema_salad-8.7.20240905150001-cp312-cp312-musllinux_1_2_x86_64.whl (1.5 MB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.2+ x86-64

schema_salad-8.7.20240905150001-cp312-cp312-musllinux_1_2_aarch64.whl (1.5 MB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.2+ ARM64

schema_salad-8.7.20240905150001-cp312-cp312-musllinux_1_1_x86_64.whl (1.6 MB 查看哈希值)

上传于 CPython 3.12 musllinux: musl 1.1+ x86-64

schema_salad-8.7.20240905150001-cp312-cp312-musllinux_1_1_aarch64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.12 musllinux: musl 1.1+ ARM64

schema_salad-8.7.20240905150001-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

schema_salad-8.7.20240905150001-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

schema_salad-8.7.20240905150001-cp312-cp312-macosx_11_0_arm64.whl (1.3 MB 查看哈希值)

上传于 CPython 3.12 macOS 11.0+ ARM64

schema_salad-8.7.20240905150001-cp312-cp312-macosx_10_9_x86_64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ x86-64

schema_salad-8.7.20240905150001-cp311-cp311-musllinux_1_2_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ x86-64

schema_salad-8.7.20240905150001-cp311-cp311-musllinux_1_2_aarch64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ ARM64

schema_salad-8.7.20240905150001-cp311-cp311-musllinux_1_1_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.1+ x86-64

schema_salad-8.7.20240905150001-cp311-cp311-musllinux_1_1_aarch64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.1+ ARM64

schema_salad-8.7.20240905150001-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

schema_salad-8.7.20240905150001-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

schema_salad-8.7.20240905150001-cp311-cp311-macosx_11_0_arm64.whl (1.3 MB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

schema_salad-8.7.20240905150001-cp311-cp311-macosx_10_9_x86_64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

schema_salad-8.7.20240905150001-cp310-cp310-musllinux_1_2_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ x86-64

schema_salad-8.7.20240905150001-cp310-cp310-musllinux_1_2_aarch64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ ARM64

schema_salad-8.7.20240905150001-cp310-cp310-musllinux_1_1_x86_64.whl (1.6 MB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ x86-64

schema_salad-8.7.20240905150001-cp310-cp310-musllinux_1_1_aarch64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ ARM64

schema_salad-8.7.20240905150001-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

schema_salad-8.7.20240905150001-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

schema_salad-8.7.20240905150001-cp310-cp310-macosx_11_0_arm64.whl (1.3 MB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

schema_salad-8.7.20240905150001-cp310-cp310-macosx_10_9_x86_64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ x86-64

schema_salad-8.7.20240905150001-cp39-cp39-musllinux_1_2_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.2+ x86-64

schema_salad-8.7.20240905150001-cp39-cp39-musllinux_1_2_aarch64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.2+ ARM64

schema_salad-8.7.20240905150001-cp39-cp39-musllinux_1_1_x86_64.whl (1.6 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ x86-64

schema_salad-8.7.20240905150001-cp39-cp39-musllinux_1_1_aarch64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ ARM64

schema_salad-8.7.20240905150001-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

schema_salad-8.7.20240905150001-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

schema_salad-8.7.20240905150001-cp39-cp39-macosx_11_0_arm64.whl (1.3 MB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

schema_salad-8.7.20240905150001-cp39-cp39-macosx_10_9_x86_64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

schema_salad-8.7.20240905150001-cp38-cp38-musllinux_1_2_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.2+ x86-64

schema_salad-8.7.20240905150001-cp38-cp38-musllinux_1_2_aarch64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.2+ ARM64

schema_salad-8.7.20240905150001-cp38-cp38-musllinux_1_1_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ x86-64

schema_salad-8.7.20240905150001-cp38-cp38-musllinux_1_1_aarch64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ ARM64

schema_salad-8.7.20240905150001-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

schema_salad-8.7.20240905150001-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

schema_salad-8.7.20240905150001-cp38-cp38-macosx_11_0_arm64.whl (1.3 MB 查看哈希值)

上传于 CPython 3.8 macOS 11.0+ ARM64

schema_salad-8.7.20240905150001-cp38-cp38-macosx_10_9_x86_64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ x86-64

由以下机构支持