Source code for linkml.utils.validation
import json
from typing import TextIO, Type, Union
import jsonschema
from linkml_runtime.dumpers import json_dumper
from linkml_runtime.linkml_model import SchemaDefinition
from linkml_runtime.utils.yamlutils import YAMLRoot
from linkml.generators.jsonschemagen import JsonSchemaGenerator
def _as_dict(inst):
# TODO: replace this with linkml_runtime.dictutils when 1.0.14 is released
inst_dict = json.loads(json_dumper.dumps(element=inst))
del inst_dict["@type"]
return inst_dict
# Deprecated: use validators module
[docs]def validate_object(
data: YAMLRoot,
schema: Union[str, TextIO, SchemaDefinition],
target_class: Type[YAMLRoot] = None,
closed: bool = True,
):
"""
validates instance data against a schema
:param data: LinkML instance to be validates
:param schema: LinkML schema
:param target_class: class in schema to validate against
:param closed:
:return:
"""
if target_class is None:
target_class = type(data)
inst_dict = _as_dict(data)
not_closed = not closed
jsonschemastr = JsonSchemaGenerator(
schema,
mergeimports=True,
top_class=target_class.class_name,
not_closed=not_closed,
).serialize(not_closed=not_closed)
jsonschema_obj = json.loads(jsonschemastr)
return jsonschema.validate(
inst_dict, schema=jsonschema_obj, format_checker=jsonschema.Draft7Validator.FORMAT_CHECKER
)