diff --git a/biocompute/services.py b/biocompute/services.py index 15125024..fe6bc154 100644 --- a/biocompute/services.py +++ b/biocompute/services.py @@ -50,12 +50,16 @@ def load_schema(schema_uri): Returns: - dict: The loaded JSON schema. """ - - if schema_uri == \ - "https://w3id.org/ieee/ieee-2791-schema/2791object.json": - return jsonref.load_uri( - f"file://{BASE_DIR}/config/IEEE/2791object.json" - ) + schema_mapping = { + "https://w3id.org/ieee/ieee-2791-schema/2791object.json": f"{BASE_DIR}/config/schemas/2791object.json", + "https://raw.githubusercontent.com/biocompute-objects/extension_domain/1.1.0/dataset_extension.json": f"{BASE_DIR}/config/schemas/dataset_extension.json", + "https://raw.githubusercontent.com/biocompute-objects/extension_domain/1.1.0/fhir_extension.json": f"{BASE_DIR}/config/schemas/fhir_extension.json", + "https://raw.githubusercontent.com/biocompute-objects/extension_domain/1.1.0/galaxy_extension.json": f"{BASE_DIR}/config/schemas/galaxy_extension.json", + "https://raw.githubusercontent.com/biocompute-objects/extension_domain/1.1.0/license_extension.json": f"{BASE_DIR}/config/schemas/license_extension.json", + "https://raw.githubusercontent.com/biocompute-objects/extension_domain/1.1.0/scm_extension.json": f"{BASE_DIR}/config/schemas/scm_extension.json" + } + if schema_uri in schema_mapping: + return jsonref.load_uri(f"file://{schema_mapping[schema_uri]}") try: return jsonref.load_uri(schema_uri) except (JSONDecodeError, TypeError, RequestsConnectionError) as e: diff --git a/config/IEEE/2791object.json b/config/schemas/2791object.json similarity index 100% rename from config/IEEE/2791object.json rename to config/schemas/2791object.json diff --git a/config/schemas/dataset_extension.json b/config/schemas/dataset_extension.json new file mode 100644 index 00000000..f71efaa4 --- /dev/null +++ b/config/schemas/dataset_extension.json @@ -0,0 +1,78 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://www.w3id.org/biocompute/extension_domain/1.1.0/dataset/dataset_extension.json", + "title": "dataset_extension", + "type": "object", + "description": "The external references extension to list additional licenses and dataset catagories for a dataset BCO (dsBCO).", + "required": ["dataset_extension", "extension_schema"], + "additionalProperties": false, + "properties": { + "dataset_extension": { + "type": "object", + "additionalProperties": false, + "required": ["dataset_categories"], + "properties": { + "additional_license": { + "type": "object", + "description": "The additional license property contains the details about the licenses applied to the dataset and the script or tool/software used to process the given dataset.", + "additionalProperties": false, + "properties": { + "data_license": { + "title": "data_license", + "type": "string", + "description": "The license applied to the data or the dataset by the author", + "examples": ["https://creativecommons.org/licenses/by/4.0/"] + }, + "script_license": { + "title": "script_license", + "type": "string", + "description": "The license applied to the computational script or the tool/software developed to process (parse, QC, align) the input dataset for a final output dataset.", + "examples": ["https://www.gnu.org/licenses/gpl-3.0.en.html"] + } + } + }, + "dataset_categories": { + "title": "dataset_categories", + "type": "array", + "description": "Dataset categories describe and provide more information about the dataset which can be used to classify, group, sort and filter datasets.", + "items": { + "required": ["category_value", "category_name"], + "additionalProperties": false, + "properties": { + "category_value": { + "type": "string", + "title": "category_value", + "description": "An explanation about the purpose of this instance.", + "examples": ["Homo sapiens"] + }, + "category_name": { + "type": "string", + "title": "category_name", + "description": "An explanation about the purpose of this instance.", + "enum": [ + "species", + "molecule", + "tag", + "tags", + "priority", + "file_type", + "status", + "scope" + ] + } + } + } + } + } + }, + "extension_schema": { + "title": "extension_schema", + "type": "string", + "format": "uri", + "description": "The schema applied to the extension object", + "examples": [ + "http://www.w3id.org/biocompute/extension_domain/example.json" + ] + } + } +} diff --git a/config/IEEE/description_domain.json b/config/schemas/description_domain.json similarity index 100% rename from config/IEEE/description_domain.json rename to config/schemas/description_domain.json diff --git a/config/IEEE/error_domain.json b/config/schemas/error_domain.json similarity index 100% rename from config/IEEE/error_domain.json rename to config/schemas/error_domain.json diff --git a/config/IEEE/execution_domain.json b/config/schemas/execution_domain.json similarity index 100% rename from config/IEEE/execution_domain.json rename to config/schemas/execution_domain.json diff --git a/config/schemas/fhir_extension.json b/config/schemas/fhir_extension.json new file mode 100644 index 00000000..0eb9da95 --- /dev/null +++ b/config/schemas/fhir_extension.json @@ -0,0 +1,57 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://w3id.org/biocompute/extension_domain/1.1.0/fhir/fhir_extension.json", + "title": "fhir_extension", + "type": "object", + "description": "The external references extension to FHIR resource", + "required": ["fhir_extension", "extension_schema"], + "additionalProperties": false, + "properties": { + "extension_schema": { + "title": "extension_schema", + "type": "string", + "format": "uri", + "description": "The schema applied to the extension object", + "examples": [ + "http://www.w3id.org/biocompute/extension_domain/example.json" + ] + }, + "fhir_extension": { + "title": "", + "type": "array", + "decription": "", + "items": { + "required": ["fhir_endpoint", "fhir_version", "fhir_resources"], + "properties": { + "fhir_endpoint": { + "type": "string", + "description": "Base URI of FHIR server where the resources are stored", + "examples": ["http://fhirtest.uhn.ca/baseDstu3"], + "format": "uri" + }, + "fhir_version": { + "type": "string", + "description": "FHIR version of the server endpoint" + }, + "fhir_resources": { + "type": "array", + "items": { + "type": "object", + "required": ["fhir_resource", "fhir_id"], + "properties": { + "fhir_resource": { + "type": "string", + "description": "Type of FHIR resource used" + }, + "fhir_id": { + "type": "string", + "description": "Server-specific identifier string" + } + } + } + } + } + } + } + } +} diff --git a/config/schemas/galaxy_extension.json b/config/schemas/galaxy_extension.json new file mode 100644 index 00000000..7367d546 --- /dev/null +++ b/config/schemas/galaxy_extension.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://www.w3id.org/biocompute/extension_domain/1.1.0/galaxy/galaxy_extension.json", + "title": "galaxy_extension", + "type": "object", + "description": "The external references **example** extension for a Galaxy BCO.", + "required": ["galaxy_extension", "extension_schema"], + "additionalProperties": false, + "properties": { + "extension_schema": { + "type": "string", + "format": "uri", + "description": "The schema applied to the extension object", + "examples": [ + "http://www.w3id.org/biocompute/extension_domain/example.json" + ] + }, + "galaxy_extension": { + "type": "object", + "required": ["galaxy_url", "galaxy_version"], + "properties": { + "galaxy_url": { + "type": "string", + "description": "The base url for the galaxy instance used to create the BioCompute Object.", + "examples": ["https://galaxy.aws.biochemistry.gwu.edu/"], + "format": "uri" + }, + "galaxy_version": { + "type": "string", + "description": "The specific version of the Galaxy software used to generate the BioCompute Object.", + "examples": ["20.01"] + } + } + } + } +} diff --git a/config/IEEE/io_domain.json b/config/schemas/io_domain.json similarity index 100% rename from config/IEEE/io_domain.json rename to config/schemas/io_domain.json diff --git a/config/schemas/license_extension.json b/config/schemas/license_extension.json new file mode 100644 index 00000000..118c7585 --- /dev/null +++ b/config/schemas/license_extension.json @@ -0,0 +1,34 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://www.w3id.org/biocompute/extension_domain/1.1.0/license/license_extension.json", + "type": "object", + "description": "The extension to add additional licenses.", + "required": ["licence_extension", "extension_schema"], + "additionalProperties": false, + "properties": { + "extension_schema": { + "title": "extension_schema", + "type": "string", + "format": "uri", + "description": "The schema applied to the extension object", + "examples": [ + "http://www.w3id.org/biocompute/extension_domain/example.json" + ] + }, + "licence_extension": { + "required": ["data_license", "scripts_license"], + "properties": { + "data_license": { + "type": "string", + "examples": ["https://github.com/example/repo1"], + "format": "uri" + }, + "scripts_license": { + "type": "string", + "examples": ["https://github.com/example/repo1"], + "format": "uri" + } + } + } + } +} diff --git a/config/IEEE/parametric_domain.json b/config/schemas/parametric_domain.json similarity index 100% rename from config/IEEE/parametric_domain.json rename to config/schemas/parametric_domain.json diff --git a/config/IEEE/provenance_domain.json b/config/schemas/provenance_domain.json similarity index 100% rename from config/IEEE/provenance_domain.json rename to config/schemas/provenance_domain.json diff --git a/config/schemas/scm_extension.json b/config/schemas/scm_extension.json new file mode 100644 index 00000000..af0f8c7f --- /dev/null +++ b/config/schemas/scm_extension.json @@ -0,0 +1,50 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://w3id.org/biocompute/extension_domain/1.1.0/scm/scm_extension.json", + "title": "scm_extension", + "type": "object", + "description": "The external references extension to a SCM repository", + "required": ["scm_extension", "extension_schema"], + "additionalProperties": false, + "properties": { + "extension_schema": { + "title": "extension_schema", + "type": "string", + "format": "uri", + "description": "The schema applied to the extension object", + "examples": [ + "http://www.w3id.org/biocompute/extension_domain/example.json" + ] + }, + "scm_extension": { + "required": ["scm_repository", "scm_type", "scm_commit", "scm_path"], + "properties": { + "scm_repository": { + "type": "string", + "examples": ["https://github.com/example/repo1"], + "format": "uri" + }, + "scm_type": { + "type": "string", + "enum": ["git", "svn", "hg", "other"] + }, + "scm_commit": { + "type": "string", + "examples": ["c9ffea0b60fa3bcf8e138af7c99ca141a6b8fb21"] + }, + "scm_path": { + "type": "string", + "examples": ["workflow/hive-viral-mutation-detection.cwl"], + "format": "string" + }, + "scm_preview": { + "type": "string", + "examples": [ + "https://github.com/example/repo1/blob/c9ffea0b60fa3bcf8e138af7c99ca141a6b8fb21/workflow/hive-viral-mutation-detection.cwl" + ], + "format": "uri" + } + } + } + } +} diff --git a/config/IEEE/usability_domain.json b/config/schemas/usability_domain.json similarity index 100% rename from config/IEEE/usability_domain.json rename to config/schemas/usability_domain.json