LinkML Validator
项目描述
LinkML Validator
LinkML Validator是一个库,用于对符合给定LinkML架构的数据对象执行验证。
验证器使用LinkML架构YAML进行初始化,并设计为允许灵活的验证,其中每种类型的验证都由插件执行。
例如,JSONSchema验证由JsonSchemaValidationPlugin执行。
动机
LinkML Validator的构建有以下目标
- 验证器应该以可解析的验证消息响应
- 即使列表中的一个对象验证失败,验证器也不应中断验证过程
- 验证器应提供对对象执行多种类型验证的能力
安装
python setup.py install
要安装开发依赖项(如pytest
、mkdocs
等)
pip install -e ".[dev]"
通过CLI运行LinkML Validator
要运行LinkML Validator,
linkml-validator --inputs <INPUT JSON> \
--schema <SCHEMA YAML> \
--output <OUTPUT>
您可以传递文件路径或指向LinkML架构YAML的URL。
以对象字典的形式输入数据
输入JSON可以是一个以对象类型为键的对象字典。
{
"<OBJECT_TYPE>": [
{
}
]
}
其中<OBJECT_TYPE>
是schema YAML中定义的类的Python表示。
例如,考虑examples/example_data1.json
{
"NamedThing": [
{
"id": "obj1",
"name": "Object 1",
"type": "X"
},
{
"id": "obj2",
"name": "Object 2",
"type": "Y"
}
]
}
在上面的例子中,NamedThing
是target_class
,它是examples/example_schema.yaml中定义的类named thing
的Python表示。
您可以使用以下命令在上述数据上运行验证器
linkml-validator --inputs examples/example_data1.json \
--schema examples/example_schema.yaml \
--output examples/example_data1_validation_report.json
以对象数组的形式输入数据
输入的JSON也可以是一个对象数组
[
{},
{}
]
在这种情况下,还必须通过CLI中的--target-class
参数指定对象类型。
例如,考虑examples/example_data2.json
[
{
"id": "obj1",
"name": "Object 1",
"type": "X"
},
{
"id": "obj2",
"name": "Object 2",
"type": "Y"
}
]
您可以使用以下命令在上述数据上运行验证器
linkml-validator --inputs examples/example_data2.json \
--schema examples/example_schema.yaml \
--output examples/example_data2_validation_report.json \
--target-class NamedThing
运行所选插件
要仅运行部分插件作为验证的一部分,
linkml-validator --inputs data.json \
--schema schema.yaml \
--output validation_results.json \
--plugins JsonSchemaValidationPlugin
要执行严格验证,
linkml-validator --inputs data.json \
--schema schema.yaml \
--output validation_results.json \
--plugins JsonSchemaValidationPlugin \
--strict
在正常(默认)模式下,验证器将在给定对象上运行所有引用插件中定义的所有检查。
在严格模式下,如果任何一个插件报告验证失败,验证器将停止对对象的验证。
使用验证器(通过CLI)运行您自己的插件
要运行您的自定义插件作为验证的一部分,
linkml-validator --inputs data.json \
--schema schema.yaml \
--output validation_results.json \
--plugins JsonSchemaValidationPlugin \
--plugins <CUSTOM_PLUGIN_CLASS>
其中<CUSTOM_PLUGIN_CLASS>
是自定义插件类的引用。
注意:自定义插件类必须是linkml_validator.plugins.base.BasePlugin
的子类,并且必须实现BasePlugin
类中定义的所有方法。
将LinkML验证器作为模块使用
您可以直接在您的代码库中使用linkml_validator.validator.Validator
类来对您正在处理的对象执行验证。
以下代码片段提供了一种快速实例化验证器类并在对象上执行验证的方法
from linkml_validator.validator import Validator
data_obj = {
"id": "obj1",
"name": "Object 1",
"type": "X"
}
validator = Validator(schema="examples/example_schema.yaml")
validator.validate(obj=data_obj, target_class="NamedThing")
注意:上面的代码假设在examples/example_schema.yaml中定义了一个名为thing
的类,并且NamedThing
是其Python表示形式。
您还可以提供自己的自定义插件类与验证器一起运行,
from linkml_validator.validator import Validator
from linkml_validator.plugins.base import BasePlugin
from linkml_validator.models import ValidationResult
class MyCustomPlugin(BasePlugin):
NAME = "MyCustomPlugin"
def __init__(self, schema: str, **kwargs) -> None:
super().__init__(schema)
def process(self, obj: dict, **kwargs) -> ValidationResult:
# Add your custom logic for processing and validating the incoming object
valid = False
print("In MyCustomPlugin.process method")
result = ValidationResult(
plugin_name=self.NAME,
valid=valid,
validation_messages=[]
)
return result
data_obj = {
"id": "obj1",
"name": "Object 1",
"type": "X"
}
validator = Validator(schema="examples/example_schema.yaml", plugins=[{"plugin_class": "MyCustomPlugin", "args": {}])
validator.validate(obj=data_obj, target_class="NamedThing")
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
linkml_validator-0.4.5.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | bce72053c1593a678ccefd28ed5cf4b39a878e78da884b5b41fef65610a23867 |
|
MD5 | 5a07b109dd32dc34e1dd8f048e49fbe2 |
|
BLAKE2b-256 | d6d72b67879fdd0b77e2451e073ac62d1284b6e88c85ceb919dbad2bf487d6b9 |
linkml_validator-0.4.5-py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 7a9799830cba3e1df203cde86263d8ea85f9ed9f6a45a218e3f752483abac030 |
|
MD5 | 7c14e8848bf595b56a4bd4b3bec4ae73 |
|
BLAKE2b-256 | 87e14a9473997ae94d899008b9ae0c5da0702c7dfdc9ee1dd53c0a00c86873cf |