diff --git a/project/excel/omni_schema.xlsx b/project/excel/omni_schema.xlsx index 002a3ef..c443d46 100644 Binary files a/project/excel/omni_schema.xlsx and b/project/excel/omni_schema.xlsx differ diff --git a/project/graphql/omni_schema.graphql b/project/graphql/omni_schema.graphql index 54a02a3..259895d 100644 --- a/project/graphql/omni_schema.graphql +++ b/project/graphql/omni_schema.graphql @@ -1,3 +1,4 @@ +# metamodel_version: 1.7.0 type Benchmark { id: Uriorcurie! @@ -5,7 +6,7 @@ type Benchmark description: String version: String! benchmarker: String! - softwareBackend: String! + softwareBackend: SoftwareBackendEnum! storage: String! storageApi: StorageAPIEnum! softwareEnvironments: [SoftwareEnvironment]! diff --git a/project/jsonld/omni_schema.context.jsonld b/project/jsonld/omni_schema.context.jsonld index e4f5dec..05ab8d6 100644 --- a/project/jsonld/omni_schema.context.jsonld +++ b/project/jsonld/omni_schema.context.jsonld @@ -1,63 +1,142 @@ { "comments": { "description": "Auto generated by LinkML jsonld context generator", - "generation_date": "2024-08-06T14:53:16", + "generation_date": "2024-08-27T15:30:28", "source": "omni_schema.yaml" }, "@context": { + "xsd": "http://www.w3.org/2001/XMLSchema#", "example": "https://example.org/", "linkml": "https://w3id.org/linkml/", "omni_schema": "https://w3id.org/omnibenchmark/omni-schema/", "schema": "http://schema.org/", "skos": "http://www.w3.org/2004/02/skos/core#", "@vocab": "https://w3id.org/omnibenchmark/omni-schema/", + "apptainer": { + "@id": "apptainer" + }, + "benchmark_yaml_spec": { + "@id": "benchmark_yaml_spec" + }, + "benchmarker": { + "@id": "benchmarker" + }, + "commit": { + "@id": "commit" + }, + "conda": { + "@id": "conda" + }, "description": { "@id": "schema:description" }, + "easyconfig": { + "@id": "easyconfig" + }, "entries": { - "@type": "@id" + "@type": "@id", + "@id": "entries" + }, + "envmodule": { + "@id": "envmodule" }, "exclude": { - "@type": "@id" + "@type": "@id", + "@id": "exclude" }, "id": "@id", "inputs": { - "@type": "@id" + "@type": "@id", + "@id": "inputs" }, "modules": { - "@type": "@id" + "@type": "@id", + "@id": "modules" }, "name": { "@id": "schema:name" }, "outputs": { - "@type": "@id" + "@type": "@id", + "@id": "outputs" }, "parameters": { - "@type": "@id" + "@type": "@id", + "@id": "parameters" + }, + "path": { + "@id": "path" }, "repository": { - "@type": "@id" + "@type": "@id", + "@id": "repository" + }, + "software_backend": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "software_backend" }, "software_environment": { - "@type": "@id" + "@type": "@id", + "@id": "software_environment" }, "software_environments": { - "@type": "@id" + "@type": "@id", + "@id": "software_environments" }, "stages": { - "@type": "@id" + "@type": "@id", + "@id": "stages" + }, + "storage": { + "@id": "storage" }, "storage_api": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" - } + }, + "@id": "storage_api" + }, + "url": { + "@id": "url" + }, + "values": { + "@id": "values" + }, + "version": { + "@id": "version" + }, + "Benchmark": { + "@id": "Benchmark" }, "IdentifiableEntity": { "@id": "schema:Thing" + }, + "InputCollection": { + "@id": "InputCollection" + }, + "IOFile": { + "@id": "IOFile" + }, + "Module": { + "@id": "Module" + }, + "Parameter": { + "@id": "Parameter" + }, + "Repository": { + "@id": "Repository" + }, + "SoftwareEnvironment": { + "@id": "SoftwareEnvironment" + }, + "Stage": { + "@id": "Stage" } } } diff --git a/project/jsonld/omni_schema.jsonld b/project/jsonld/omni_schema.jsonld index 1e776f1..998c905 100644 --- a/project/jsonld/omni_schema.jsonld +++ b/project/jsonld/omni_schema.jsonld @@ -350,6 +350,22 @@ "text": "S3" } ] + }, + { + "name": "SoftwareBackendEnum", + "definition_uri": "https://w3id.org/omnibenchmark/omni-schema/SoftwareBackendEnum", + "from_schema": "https://w3id.org/omnibenchmark/omni-schema", + "permissible_values": [ + { + "text": "apptainer" + }, + { + "text": "envmodules" + }, + { + "text": "conda" + } + ] } ], "slots": [ @@ -441,7 +457,7 @@ "domain_of": [ "Benchmark" ], - "range": "string", + "range": "SoftwareBackendEnum", "required": true, "@type": "SlotDefinition" }, @@ -478,13 +494,13 @@ "definition_uri": "https://w3id.org/omnibenchmark/omni-schema/stages", "from_schema": "https://w3id.org/omnibenchmark/omni-schema", "slot_uri": "https://w3id.org/omnibenchmark/omni-schema/stages", - "multivalued": true, "owner": "Benchmark", "domain_of": [ "Benchmark" ], "range": "Stage", "required": true, + "multivalued": true, "inlined": true, "inlined_as_list": true, "@type": "SlotDefinition" @@ -494,13 +510,13 @@ "definition_uri": "https://w3id.org/omnibenchmark/omni-schema/modules", "from_schema": "https://w3id.org/omnibenchmark/omni-schema", "slot_uri": "https://w3id.org/omnibenchmark/omni-schema/modules", - "multivalued": true, "owner": "Stage", "domain_of": [ "Stage" ], "range": "Module", "required": true, + "multivalued": true, "inlined": true, "inlined_as_list": true, "@type": "SlotDefinition" @@ -510,12 +526,12 @@ "definition_uri": "https://w3id.org/omnibenchmark/omni-schema/inputs", "from_schema": "https://w3id.org/omnibenchmark/omni-schema", "slot_uri": "https://w3id.org/omnibenchmark/omni-schema/inputs", - "multivalued": true, "owner": "Stage", "domain_of": [ "Stage" ], "range": "InputCollection", + "multivalued": true, "inlined": true, "inlined_as_list": true, "@type": "SlotDefinition" @@ -525,12 +541,12 @@ "definition_uri": "https://w3id.org/omnibenchmark/omni-schema/outputs", "from_schema": "https://w3id.org/omnibenchmark/omni-schema", "slot_uri": "https://w3id.org/omnibenchmark/omni-schema/outputs", - "multivalued": true, "owner": "Stage", "domain_of": [ "Stage" ], "range": "IOFile", + "multivalued": true, "inlined": true, "inlined_as_list": true, "@type": "SlotDefinition" @@ -541,12 +557,12 @@ "description": "Ignore these module's outputs as input.", "from_schema": "https://w3id.org/omnibenchmark/omni-schema", "slot_uri": "https://w3id.org/omnibenchmark/omni-schema/exclude", - "multivalued": true, "owner": "Module", "domain_of": [ "Module" ], "range": "Module", + "multivalued": true, "@type": "SlotDefinition" }, { @@ -569,12 +585,12 @@ "definition_uri": "https://w3id.org/omnibenchmark/omni-schema/parameters", "from_schema": "https://w3id.org/omnibenchmark/omni-schema", "slot_uri": "https://w3id.org/omnibenchmark/omni-schema/parameters", - "multivalued": true, "owner": "Module", "domain_of": [ "Module" ], "range": "Parameter", + "multivalued": true, "inlined": true, "@type": "SlotDefinition" }, @@ -584,13 +600,13 @@ "description": "Dictionary of software environments keyed by their identifiers", "from_schema": "https://w3id.org/omnibenchmark/omni-schema", "slot_uri": "https://w3id.org/omnibenchmark/omni-schema/software_environments", - "multivalued": true, "owner": "Benchmark", "domain_of": [ "Benchmark" ], "range": "SoftwareEnvironment", "required": true, + "multivalued": true, "inlined": true, "inlined_as_list": true, "@type": "SlotDefinition" @@ -655,12 +671,12 @@ "definition_uri": "https://w3id.org/omnibenchmark/omni-schema/values", "from_schema": "https://w3id.org/omnibenchmark/omni-schema", "slot_uri": "https://w3id.org/omnibenchmark/omni-schema/values", - "multivalued": true, "owner": "Parameter", "domain_of": [ "Parameter" ], "range": "string", + "multivalued": true, "@type": "SlotDefinition" }, { @@ -668,12 +684,12 @@ "definition_uri": "https://w3id.org/omnibenchmark/omni-schema/entries", "from_schema": "https://w3id.org/omnibenchmark/omni-schema", "slot_uri": "https://w3id.org/omnibenchmark/omni-schema/entries", - "multivalued": true, "owner": "InputCollection", "domain_of": [ "InputCollection" ], "range": "IOFile", + "multivalued": true, "@type": "SlotDefinition" }, { @@ -897,9 +913,9 @@ ], "metamodel_version": "1.7.0", "source_file": "omni_schema.yaml", - "source_file_date": "2024-08-06T14:49:47", - "source_file_size": 5054, - "generation_date": "2024-08-06T14:53:16", + "source_file_date": "2024-08-27T15:15:07", + "source_file_size": 5231, + "generation_date": "2024-08-27T15:30:28", "@type": "SchemaDefinition", "@context": [ "project/jsonld/omni_schema.context.jsonld", diff --git a/project/jsonschema/omni_schema.schema.json b/project/jsonschema/omni_schema.schema.json index 9426147..5035a0a 100644 --- a/project/jsonschema/omni_schema.schema.json +++ b/project/jsonschema/omni_schema.schema.json @@ -6,7 +6,10 @@ "properties": { "benchmark_yaml_spec": { "description": "Benchmark Specification version.", - "type": "string" + "type": [ + "string", + "null" + ] }, "benchmarker": { "description": "The name and contact details of the person responsible for this benchmark.", @@ -14,7 +17,10 @@ }, "description": { "description": "A human-readable description for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for a thing", @@ -22,11 +28,14 @@ }, "name": { "description": "A human-readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "software_backend": { - "description": "The software backend used to run the benchmark, e.g. whether apptainer, envmodules, or conda.", - "type": "string" + "$ref": "#/$defs/SoftwareBackendEnum", + "description": "The software backend used to run the benchmark, e.g. whether apptainer, envmodules, or conda." }, "software_environments": { "description": "Dictionary of software environments keyed by their identifiers", @@ -73,7 +82,10 @@ "properties": { "description": { "description": "A human-readable description for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for a thing", @@ -81,11 +93,17 @@ }, "name": { "description": "A human-readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "path": { "description": "The output path pattern for the IO file.", - "type": "string" + "type": [ + "string", + "null" + ] } }, "required": [ @@ -102,7 +120,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "title": "InputCollection", @@ -114,14 +135,20 @@ "properties": { "description": { "description": "A human-readable description for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "exclude": { "description": "Ignore these module's outputs as input.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for a thing", @@ -129,13 +156,19 @@ }, "name": { "description": "A human-readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "parameters": { "items": { "$ref": "#/$defs/Parameter" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "repository": { "$ref": "#/$defs/Repository", @@ -162,7 +195,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "title": "Parameter", @@ -188,29 +224,54 @@ "title": "Repository", "type": "object" }, + "SoftwareBackendEnum": { + "description": "", + "enum": [ + "apptainer", + "envmodules", + "conda" + ], + "title": "SoftwareBackendEnum", + "type": "string" + }, "SoftwareEnvironment": { "additionalProperties": false, "description": "Contains snapshots of the software environment required for the modules to run.", "properties": { "apptainer": { "description": "Apptainer image static ORAS url, including name:tag.", - "type": "string" + "type": [ + "string", + "null" + ] }, "conda": { "description": "Conda environment file.", - "type": "string" + "type": [ + "string", + "null" + ] }, "description": { "description": "A human-readable description for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "easyconfig": { "description": "Easybuild configuration file.", - "type": "string" + "type": [ + "string", + "null" + ] }, "envmodule": { "description": "Environment module name.", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for a thing", @@ -218,7 +279,10 @@ }, "name": { "description": "A human-readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] } }, "required": [ @@ -233,7 +297,10 @@ "properties": { "description": { "description": "A human-readable description for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for a thing", @@ -243,7 +310,10 @@ "items": { "$ref": "#/$defs/InputCollection" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "modules": { "items": { @@ -253,13 +323,19 @@ }, "name": { "description": "A human-readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "outputs": { "items": { "$ref": "#/$defs/IOFile" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -286,7 +362,10 @@ "properties": { "benchmark_yaml_spec": { "description": "Benchmark Specification version.", - "type": "string" + "type": [ + "string", + "null" + ] }, "benchmarker": { "description": "The name and contact details of the person responsible for this benchmark.", @@ -294,7 +373,10 @@ }, "description": { "description": "A human-readable description for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for a thing", @@ -302,11 +384,14 @@ }, "name": { "description": "A human-readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "software_backend": { - "description": "The software backend used to run the benchmark, e.g. whether apptainer, envmodules, or conda.", - "type": "string" + "$ref": "#/$defs/SoftwareBackendEnum", + "description": "The software backend used to run the benchmark, e.g. whether apptainer, envmodules, or conda." }, "software_environments": { "description": "Dictionary of software environments keyed by their identifiers", diff --git a/project/owl/omni_schema.owl.ttl b/project/owl/omni_schema.owl.ttl index 7a28243..391716d 100644 --- a/project/owl/omni_schema.owl.ttl +++ b/project/owl/omni_schema.owl.ttl @@ -2,6 +2,7 @@ @prefix linkml: . @prefix omni_schema: . @prefix owl: . +@prefix rdf: . @prefix rdfs: . @prefix schema1: . @prefix skos: . @@ -11,71 +12,71 @@ omni_schema:Benchmark a owl:Class, linkml:ClassDefinition ; rdfs:label "Benchmark" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty omni_schema:stages ], - [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty omni_schema:storage ], + [ a owl:Restriction ; + owl:minCardinality 1 ; owl:onProperty omni_schema:software_backend ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty omni_schema:storage_api ], + owl:minCardinality 0 ; + owl:onProperty omni_schema:benchmark_yaml_spec ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty omni_schema:storage ], + owl:onProperty omni_schema:benchmarker ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty omni_schema:benchmark_yaml_spec ], + owl:onProperty omni_schema:storage_api ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:benchmark_yaml_spec ], + owl:minCardinality 1 ; + owl:onProperty omni_schema:storage_api ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty omni_schema:benchmarker ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty omni_schema:software_environments ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty omni_schema:version ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom omni_schema:SoftwareBackendEnum ; + owl:onProperty omni_schema:software_backend ], + [ a owl:Restriction ; + owl:allValuesFrom omni_schema:Stage ; + owl:onProperty omni_schema:stages ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty omni_schema:benchmark_yaml_spec ], [ a owl:Restriction ; - owl:allValuesFrom omni_schema:SoftwareEnvironment ; - owl:onProperty omni_schema:software_environments ], + owl:maxCardinality 1 ; + owl:onProperty omni_schema:benchmark_yaml_spec ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty omni_schema:software_backend ], - [ a owl:Restriction ; - owl:allValuesFrom omni_schema:StorageAPIEnum ; - owl:onProperty omni_schema:storage_api ], + owl:onProperty omni_schema:storage ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty omni_schema:version ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; owl:onProperty omni_schema:software_backend ], [ a owl:Restriction ; - owl:allValuesFrom omni_schema:Stage ; - owl:onProperty omni_schema:stages ], + owl:minCardinality 1 ; + owl:onProperty omni_schema:version ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty omni_schema:storage ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty omni_schema:version ], + owl:onProperty omni_schema:software_environments ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:allValuesFrom omni_schema:StorageAPIEnum ; owl:onProperty omni_schema:storage_api ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:benchmarker ], + owl:maxCardinality 1 ; + owl:onProperty omni_schema:version ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty omni_schema:benchmarker ], + owl:onProperty omni_schema:stages ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:storage ], + owl:onProperty omni_schema:benchmarker ], + [ a owl:Restriction ; + owl:allValuesFrom omni_schema:SoftwareEnvironment ; + owl:onProperty omni_schema:software_environments ], omni_schema:IdentifiableEntity ; skos:definition "A multi-stage workflow to evaluate processing stage for a specific task." ; skos:inScheme . @@ -89,10 +90,10 @@ omni_schema:InputCollection a owl:Class, linkml:ClassDefinition ; rdfs:label "InputCollection" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom omni_schema:IOFile ; owl:onProperty omni_schema:entries ], [ a owl:Restriction ; - owl:allValuesFrom omni_schema:IOFile ; + owl:minCardinality 0 ; owl:onProperty omni_schema:entries ] ; skos:definition "A holder for valid input combinations." ; skos:inScheme . @@ -101,10 +102,10 @@ omni_schema:Parameter a owl:Class, linkml:ClassDefinition ; rdfs:label "Parameter" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty omni_schema:values ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty omni_schema:values ] ; skos:definition "A parameter and its scope." ; skos:inScheme . @@ -113,47 +114,62 @@ omni_schema:Repository a owl:Class, linkml:ClassDefinition ; rdfs:label "Repository" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; owl:onProperty omni_schema:url ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:url ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; owl:onProperty omni_schema:commit ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty omni_schema:commit ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty omni_schema:commit ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; + owl:onProperty omni_schema:url ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty omni_schema:url ] ; skos:definition "A reference to code repository containing the module's executable code." ; skos:inScheme . + a owl:Class, + omni_schema:SoftwareBackendEnum ; + rdfs:label "apptainer" ; + rdfs:subClassOf omni_schema:SoftwareBackendEnum . + + a owl:Class, + omni_schema:SoftwareBackendEnum ; + rdfs:label "conda" ; + rdfs:subClassOf omni_schema:SoftwareBackendEnum . + + a owl:Class, + omni_schema:SoftwareBackendEnum ; + rdfs:label "envmodules" ; + rdfs:subClassOf omni_schema:SoftwareBackendEnum . + omni_schema:Stage a owl:Class, linkml:ClassDefinition ; rdfs:label "Stage" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom omni_schema:IOFile ; + owl:minCardinality 0 ; owl:onProperty omni_schema:outputs ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty omni_schema:modules ], + owl:allValuesFrom omni_schema:InputCollection ; + owl:onProperty omni_schema:inputs ], [ a owl:Restriction ; - owl:allValuesFrom omni_schema:Module ; + owl:minCardinality 1 ; owl:onProperty omni_schema:modules ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty omni_schema:inputs ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom omni_schema:IOFile ; owl:onProperty omni_schema:outputs ], [ a owl:Restriction ; - owl:allValuesFrom omni_schema:InputCollection ; - owl:onProperty omni_schema:inputs ], + owl:allValuesFrom omni_schema:Module ; + owl:onProperty omni_schema:modules ], omni_schema:IdentifiableEntity ; skos:definition "A benchmark subtask with equivalent and independent modules." ; skos:inScheme . @@ -299,7 +315,7 @@ omni_schema:repository a owl:ObjectProperty, omni_schema:software_backend a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "software_backend" ; - rdfs:range linkml:String ; + rdfs:range omni_schema:SoftwareBackendEnum ; skos:definition "The software backend used to run the benchmark, e.g. whether apptainer, envmodules, or conda." ; skos:inScheme . @@ -342,14 +358,14 @@ omni_schema:IOFile a owl:Class, linkml:ClassDefinition ; rdfs:label "IOFile" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:path ], - [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty omni_schema:path ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty omni_schema:path ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty omni_schema:path ], omni_schema:IdentifiableEntity ; skos:definition "Represents an input / output file." ; skos:inScheme . @@ -358,35 +374,35 @@ omni_schema:Module a owl:Class, linkml:ClassDefinition ; rdfs:label "Module" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty omni_schema:exclude ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty omni_schema:repository ], + owl:allValuesFrom omni_schema:Parameter ; + owl:onProperty omni_schema:parameters ], [ a owl:Restriction ; owl:allValuesFrom omni_schema:SoftwareEnvironment ; owl:onProperty omni_schema:software_environment ], [ a owl:Restriction ; - owl:allValuesFrom omni_schema:Parameter ; - owl:onProperty omni_schema:parameters ], + owl:minCardinality 1 ; + owl:onProperty omni_schema:software_environment ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty omni_schema:repository ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty omni_schema:repository ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty omni_schema:parameters ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty omni_schema:software_environment ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty omni_schema:software_environment ], + owl:allValuesFrom omni_schema:Module ; + owl:onProperty omni_schema:exclude ], [ a owl:Restriction ; owl:allValuesFrom omni_schema:Repository ; owl:onProperty omni_schema:repository ], [ a owl:Restriction ; - owl:allValuesFrom omni_schema:Module ; + owl:minCardinality 0 ; owl:onProperty omni_schema:exclude ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty omni_schema:software_environment ], omni_schema:IdentifiableEntity ; skos:definition "A single benchmark component assigned to a specific stage." ; skos:inScheme . @@ -396,40 +412,40 @@ omni_schema:SoftwareEnvironment a owl:Class, rdfs:label "SoftwareEnvironment" ; rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:envmodule ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:conda ], + owl:onProperty omni_schema:easyconfig ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:apptainer ], + owl:minCardinality 0 ; + owl:onProperty omni_schema:envmodule ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty omni_schema:easyconfig ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty omni_schema:envmodule ], + owl:minCardinality 0 ; + owl:onProperty omni_schema:conda ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty omni_schema:easyconfig ], + owl:onProperty omni_schema:envmodule ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty omni_schema:conda ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty omni_schema:apptainer ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty omni_schema:apptainer ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty omni_schema:apptainer ], + owl:onProperty omni_schema:easyconfig ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty omni_schema:conda ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty omni_schema:envmodule ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:easyconfig ], + owl:maxCardinality 1 ; + owl:onProperty omni_schema:apptainer ], omni_schema:IdentifiableEntity ; skos:definition "Contains snapshots of the software environment required for the modules to run." ; skos:inScheme . @@ -444,34 +460,41 @@ omni_schema:IdentifiableEntity a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty omni_schema:description ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty omni_schema:description ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty omni_schema:id ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty omni_schema:id ], + owl:onProperty omni_schema:name ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:description ], + owl:onProperty omni_schema:name ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty omni_schema:name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty omni_schema:id ], + owl:allValuesFrom linkml:String ; + owl:onProperty omni_schema:description ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty omni_schema:name ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty omni_schema:description ], + owl:onProperty omni_schema:id ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty omni_schema:name ] ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty omni_schema:id ] ; skos:definition "A generic grouping for any identifiable entity" ; skos:exactMatch schema1:Thing ; skos:inScheme . +omni_schema:SoftwareBackendEnum a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( ) ; + linkml:permissible_values , + , + . + a owl:Ontology ; rdfs:label "omni-schema" ; dcterms:license "Apache Software License 2.0" ; diff --git a/project/prefixmap/omni_schema.yaml b/project/prefixmap/omni_schema.yaml index de1b952..47e03f1 100644 --- a/project/prefixmap/omni_schema.yaml +++ b/project/prefixmap/omni_schema.yaml @@ -6,4 +6,4 @@ "IdentifiableEntity": { "@id": "schema:Thing" } -} +} \ No newline at end of file diff --git a/project/protobuf/omni_schema.proto b/project/protobuf/omni_schema.proto index e7b9674..a407077 100644 --- a/project/protobuf/omni_schema.proto +++ b/project/protobuf/omni_schema.proto @@ -1,3 +1,6 @@ + syntax="proto3"; + package +// metamodel_version: 1.7.0 // A multi-stage workflow to evaluate processing stage for a specific task. message Benchmark { @@ -6,7 +9,7 @@ message Benchmark string description = 0 string version = 0 string benchmarker = 0 - string softwareBackend = 0 + softwareBackendEnum softwareBackend = 0 string storage = 0 storageAPIEnum storageApi = 0 repeated softwareEnvironment softwareEnvironments = 0 diff --git a/project/shacl/omni_schema.shacl.ttl b/project/shacl/omni_schema.shacl.ttl index 92f0b31..dae08e4 100644 --- a/project/shacl/omni_schema.shacl.ttl +++ b/project/shacl/omni_schema.shacl.ttl @@ -1,95 +1,84 @@ @prefix omni_schema: . @prefix rdf: . +@prefix rdfs: . @prefix schema1: . @prefix sh: . @prefix xsd: . -schema1:Thing a sh:NodeShape ; - sh:closed false ; - sh:description "A generic grouping for any identifiable entity" ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a thing" ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path schema1:name ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a thing" ; - sh:maxCount 1 ; - sh:order 2 ; - sh:path schema1:description ] ; - sh:targetClass schema1:Thing . - omni_schema:Benchmark a sh:NodeShape ; + rdfs:subClassOf schema1:Thing ; sh:closed true ; sh:description "A multi-stage workflow to evaluate processing stage for a specific task." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class omni_schema:SoftwareEnvironment ; - sh:description "Dictionary of software environments keyed by their identifiers" ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 5 ; - sh:path omni_schema:software_environments ], - [ sh:description "A unique identifier for a thing" ; + sh:property [ sh:datatype xsd:string ; + sh:description "Benchmark Specification version." ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 8 ; - sh:path schema1:identifier ], + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path omni_schema:benchmark_yaml_spec ], [ sh:datatype xsd:string ; - sh:description "The software backend used to run the benchmark, e.g. whether apptainer, envmodules, or conda." ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 9 ; + sh:path schema1:name ], + [ sh:description "The software backend used to run the benchmark, e.g. whether apptainer, envmodules, or conda." ; + sh:in ( "apptainer" "envmodules" "conda" ) ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 2 ; sh:path omni_schema:software_backend ], [ sh:datatype xsd:string ; - sh:description "The version of the benchmark." ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path omni_schema:version ], - [ sh:datatype xsd:string ; - sh:description "The place hosting all benchmark data." ; + sh:description "A human-readable description for a thing" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 3 ; - sh:path omni_schema:storage ], + sh:nodeKind sh:Literal ; + sh:order 10 ; + sh:path schema1:description ], [ sh:datatype xsd:string ; sh:description "The name and contact details of the person responsible for this benchmark." ; sh:maxCount 1 ; sh:minCount 1 ; + sh:nodeKind sh:Literal ; sh:order 1 ; sh:path omni_schema:benchmarker ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 8 ; + sh:path schema1:identifier ], [ sh:datatype xsd:string ; - sh:description "A human-readable description for a thing" ; + sh:description "The place hosting all benchmark data." ; sh:maxCount 1 ; - sh:order 10 ; - sh:path schema1:description ], + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path omni_schema:storage ], [ sh:description "The type of the storage API, i.e. S3." ; sh:in ( "S3" ) ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 4 ; sh:path omni_schema:storage_api ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a thing" ; - sh:maxCount 1 ; - sh:order 9 ; - sh:path schema1:name ], - [ sh:datatype xsd:string ; - sh:description "Benchmark Specification version." ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path omni_schema:benchmark_yaml_spec ], [ sh:class omni_schema:Stage ; sh:minCount 1 ; sh:nodeKind sh:IRI ; sh:order 7 ; - sh:path omni_schema:stages ] ; + sh:path omni_schema:stages ], + [ sh:class omni_schema:SoftwareEnvironment ; + sh:description "Dictionary of software environments keyed by their identifiers" ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 5 ; + sh:path omni_schema:software_environments ], + [ sh:datatype xsd:string ; + sh:description "The version of the benchmark." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path omni_schema:version ] ; sh:targetClass omni_schema:Benchmark . omni_schema:InputCollection a sh:NodeShape ; @@ -107,6 +96,7 @@ omni_schema:Parameter a sh:NodeShape ; sh:description "A parameter and its scope." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; + sh:nodeKind sh:Literal ; sh:order 0 ; sh:path omni_schema:values ] ; sh:targetClass omni_schema:Parameter . @@ -119,32 +109,34 @@ omni_schema:Repository a sh:NodeShape ; sh:description "The git compatible url." ; sh:maxCount 1 ; sh:minCount 1 ; + sh:nodeKind sh:Literal ; sh:order 0 ; sh:path omni_schema:url ], [ sh:datatype xsd:string ; sh:description "The commit hash." ; sh:maxCount 1 ; sh:minCount 1 ; + sh:nodeKind sh:Literal ; sh:order 1 ; sh:path omni_schema:commit ] ; sh:targetClass omni_schema:Repository . omni_schema:Stage a sh:NodeShape ; + rdfs:subClassOf schema1:Thing ; sh:closed true ; sh:description "A benchmark subtask with equivalent and independent modules." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "A human-readable name for a thing" ; + sh:description "A human-readable description for a thing" ; sh:maxCount 1 ; - sh:order 4 ; - sh:path schema1:name ], - [ sh:class omni_schema:IOFile ; - sh:nodeKind sh:IRI ; - sh:order 2 ; - sh:path omni_schema:outputs ], - [ sh:description "A unique identifier for a thing" ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:description ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; + sh:nodeKind sh:Literal ; sh:order 3 ; sh:path schema1:identifier ], [ sh:class omni_schema:Module ; @@ -152,125 +144,175 @@ omni_schema:Stage a sh:NodeShape ; sh:nodeKind sh:IRI ; sh:order 0 ; sh:path omni_schema:modules ], - [ sh:class omni_schema:InputCollection ; - sh:nodeKind sh:BlankNode ; - sh:order 1 ; - sh:path omni_schema:inputs ], [ sh:datatype xsd:string ; - sh:description "A human-readable description for a thing" ; + sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; - sh:order 5 ; - sh:path schema1:description ] ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path schema1:name ], + [ sh:class omni_schema:IOFile ; + sh:nodeKind sh:IRI ; + sh:order 2 ; + sh:path omni_schema:outputs ], + [ sh:class omni_schema:InputCollection ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 1 ; + sh:path omni_schema:inputs ] ; sh:targetClass omni_schema:Stage . omni_schema:IOFile a sh:NodeShape ; + rdfs:subClassOf schema1:Thing ; sh:closed true ; sh:description "Represents an input / output file." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "The output path pattern for the IO file." ; + sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; - sh:order 0 ; - sh:path omni_schema:path ], + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "A human-readable description for a thing" ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; sh:order 3 ; sh:path schema1:description ], [ sh:datatype xsd:string ; - sh:description "A human-readable name for a thing" ; + sh:description "The output path pattern for the IO file." ; sh:maxCount 1 ; - sh:order 2 ; - sh:path schema1:name ], - [ sh:description "A unique identifier for a thing" ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path omni_schema:path ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; + sh:nodeKind sh:Literal ; sh:order 1 ; sh:path schema1:identifier ] ; sh:targetClass omni_schema:IOFile . omni_schema:Module a sh:NodeShape ; + rdfs:subClassOf schema1:Thing ; sh:closed true ; sh:description "A single benchmark component assigned to a specific stage." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class omni_schema:SoftwareEnvironment ; - sh:description "Reference to a software environment by key." ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable description for a thing" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path omni_schema:software_environment ], + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path schema1:description ], [ sh:class omni_schema:Repository ; sh:description "The code repository hosting the module." ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:BlankNode ; + sh:nodeKind sh:BlankNodeOrIRI ; sh:order 1 ; sh:path omni_schema:repository ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a thing" ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path schema1:description ], - [ sh:description "A unique identifier for a thing" ; + [ sh:class omni_schema:SoftwareEnvironment ; + sh:description "Reference to a software environment by key." ; sh:maxCount 1 ; sh:minCount 1 ; - sh:order 4 ; - sh:path schema1:identifier ], + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path omni_schema:software_environment ], + [ sh:class omni_schema:Parameter ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 3 ; + sh:path omni_schema:parameters ], [ sh:class omni_schema:Module ; sh:description "Ignore these module's outputs as input." ; sh:nodeKind sh:IRI ; sh:order 2 ; sh:path omni_schema:exclude ], - [ sh:class omni_schema:Parameter ; - sh:nodeKind sh:BlankNode ; - sh:order 3 ; - sh:path omni_schema:parameters ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; sh:order 5 ; sh:path schema1:name ] ; sh:targetClass omni_schema:Module . omni_schema:SoftwareEnvironment a sh:NodeShape ; + rdfs:subClassOf schema1:Thing ; sh:closed true ; sh:description "Contains snapshots of the software environment required for the modules to run." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; sh:description "A human-readable description for a thing" ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; sh:order 6 ; sh:path schema1:description ], - [ sh:description "A unique identifier for a thing" ; + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Apptainer image static ORAS url, including name:tag." ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path omni_schema:apptainer ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; + sh:nodeKind sh:Literal ; sh:order 4 ; sh:path schema1:identifier ], [ sh:datatype xsd:string ; - sh:description "Environment module name." ; + sh:description "Easybuild configuration file." ; sh:maxCount 1 ; - sh:order 1 ; - sh:path omni_schema:envmodule ], + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path omni_schema:easyconfig ], [ sh:datatype xsd:string ; sh:description "Conda environment file." ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; sh:order 2 ; sh:path omni_schema:conda ], [ sh:datatype xsd:string ; - sh:description "Easybuild configuration file." ; + sh:description "Environment module name." ; sh:maxCount 1 ; - sh:order 0 ; - sh:path omni_schema:easyconfig ], - [ sh:datatype xsd:string ; - sh:description "Apptainer image static ORAS url, including name:tag." ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path omni_schema:envmodule ] ; + sh:targetClass omni_schema:SoftwareEnvironment . + +schema1:Thing a sh:NodeShape ; + sh:closed false ; + sh:description "A generic grouping for any identifiable entity" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable description for a thing" ; sh:maxCount 1 ; - sh:order 3 ; - sh:path omni_schema:apptainer ], + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:description ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; - sh:order 5 ; - sh:path schema1:name ] ; - sh:targetClass omni_schema:SoftwareEnvironment . + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:identifier ] ; + sh:targetClass schema1:Thing . diff --git a/project/shex/omni_schema.shex b/project/shex/omni_schema.shex index b12496b..04c90af 100644 --- a/project/shex/omni_schema.shex +++ b/project/shex/omni_schema.shex @@ -1,3 +1,4 @@ +# metamodel_version: 1.7.0 BASE PREFIX rdf: PREFIX xsd: @@ -48,7 +49,9 @@ linkml:Sparqlpath xsd:string rdf:type [ schema1:Thing ] ? ; @linkml:String ; @linkml:String ; - @linkml:String ; + [ + + ] ; @linkml:String ; [ ] ; @ + ; @@ -135,4 +138,3 @@ linkml:Sparqlpath xsd:string ) } - diff --git a/project/sqlschema/omni_schema.sql b/project/sqlschema/omni_schema.sql index 09e0633..a80a5d3 100644 --- a/project/sqlschema/omni_schema.sql +++ b/project/sqlschema/omni_schema.sql @@ -1,76 +1,165 @@ +-- # Class: "IdentifiableEntity" Description: "A generic grouping for any identifiable entity" +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: description Description: A human-readable description for a thing +-- # Class: "Benchmark" Description: "A multi-stage workflow to evaluate processing stage for a specific task." +-- * Slot: version Description: The version of the benchmark. +-- * Slot: benchmarker Description: The name and contact details of the person responsible for this benchmark. +-- * Slot: software_backend Description: The software backend used to run the benchmark, e.g. whether apptainer, envmodules, or conda. +-- * Slot: storage Description: The place hosting all benchmark data. +-- * Slot: storage_api Description: The type of the storage API, i.e. S3. +-- * Slot: benchmark_yaml_spec Description: Benchmark Specification version. +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: description Description: A human-readable description for a thing +-- # Class: "Stage" Description: "A benchmark subtask with equivalent and independent modules." +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: description Description: A human-readable description for a thing +-- * Slot: Benchmark_id Description: Autocreated FK slot +-- # Class: "Module" Description: "A single benchmark component assigned to a specific stage." +-- * Slot: software_environment Description: Reference to a software environment by key. +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: description Description: A human-readable description for a thing +-- * Slot: Stage_id Description: Autocreated FK slot +-- * Slot: repository_id Description: The code repository hosting the module. +-- # Class: "IOFile" Description: "Represents an input / output file." +-- * Slot: path Description: The output path pattern for the IO file. +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: description Description: A human-readable description for a thing +-- * Slot: Stage_id Description: Autocreated FK slot +-- # Class: "InputCollection" Description: "A holder for valid input combinations." +-- * Slot: id Description: +-- * Slot: Stage_id Description: Autocreated FK slot +-- # Class: "Repository" Description: "A reference to code repository containing the module's executable code." +-- * Slot: id Description: +-- * Slot: url Description: The git compatible url. +-- * Slot: commit Description: The commit hash. +-- # Class: "Parameter" Description: "A parameter and its scope." +-- * Slot: id Description: +-- # Class: "SoftwareEnvironment" Description: "Contains snapshots of the software environment required for the modules to run." +-- * Slot: easyconfig Description: Easybuild configuration file. +-- * Slot: envmodule Description: Environment module name. +-- * Slot: conda Description: Conda environment file. +-- * Slot: apptainer Description: Apptainer image static ORAS url, including name:tag. +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: description Description: A human-readable description for a thing +-- * Slot: Benchmark_id Description: Autocreated FK slot +-- # Class: "Module_exclude" Description: "" +-- * Slot: Module_id Description: Autocreated FK slot +-- * Slot: exclude_id Description: Ignore these module's outputs as input. +-- # Class: "Module_parameters" Description: "" +-- * Slot: Module_id Description: Autocreated FK slot +-- * Slot: parameters_id Description: +-- # Class: "InputCollection_entries" Description: "" +-- * Slot: InputCollection_id Description: Autocreated FK slot +-- * Slot: entries_id Description: +-- # Class: "Parameter_values" Description: "" +-- * Slot: Parameter_id Description: Autocreated FK slot +-- * Slot: values Description: - -CREATE TABLE "Benchmark" ( +CREATE TABLE "IdentifiableEntity" ( id TEXT NOT NULL, name TEXT, description TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Benchmark" ( version TEXT NOT NULL, benchmarker TEXT NOT NULL, - software_backend TEXT NOT NULL, + software_backend VARCHAR(10) NOT NULL, storage TEXT NOT NULL, storage_api VARCHAR(2) NOT NULL, - software_environments TEXT NOT NULL, benchmark_yaml_spec TEXT, - PRIMARY KEY (id) -); - -CREATE TABLE "IOFile" ( id TEXT NOT NULL, name TEXT, description TEXT, - path TEXT, PRIMARY KEY (id) ); - CREATE TABLE "Repository" ( + id INTEGER NOT NULL, url TEXT NOT NULL, "commit" TEXT NOT NULL, - PRIMARY KEY (url, "commit") + PRIMARY KEY (id) ); - -CREATE TABLE "SoftwareEnvironment" ( +CREATE TABLE "Parameter" ( + id INTEGER NOT NULL, + PRIMARY KEY (id) +); +CREATE TABLE "Stage" ( id TEXT NOT NULL, name TEXT, description TEXT, + "Benchmark_id" TEXT, + PRIMARY KEY (id), + FOREIGN KEY("Benchmark_id") REFERENCES "Benchmark" (id) +); +CREATE TABLE "SoftwareEnvironment" ( easyconfig TEXT, envmodule TEXT, conda TEXT, apptainer TEXT, - PRIMARY KEY (id) + id TEXT NOT NULL, + name TEXT, + description TEXT, + "Benchmark_id" TEXT, + PRIMARY KEY (id), + FOREIGN KEY("Benchmark_id") REFERENCES "Benchmark" (id) +); +CREATE TABLE "Parameter_values" ( + "Parameter_id" INTEGER, + "values" TEXT, + PRIMARY KEY ("Parameter_id", "values"), + FOREIGN KEY("Parameter_id") REFERENCES "Parameter" (id) ); - CREATE TABLE "Module" ( + software_environment TEXT NOT NULL, id TEXT NOT NULL, name TEXT, description TEXT, - software_environment TEXT NOT NULL, - repository TEXT NOT NULL, - exclude TEXT, + "Stage_id" TEXT, + repository_id INTEGER NOT NULL, PRIMARY KEY (id), - FOREIGN KEY(software_environment) REFERENCES "SoftwareEnvironment" (id) + FOREIGN KEY(software_environment) REFERENCES "SoftwareEnvironment" (id), + FOREIGN KEY("Stage_id") REFERENCES "Stage" (id), + FOREIGN KEY(repository_id) REFERENCES "Repository" (id) ); - -CREATE TABLE "Stage" ( +CREATE TABLE "IOFile" ( + path TEXT, id TEXT NOT NULL, name TEXT, description TEXT, - modules TEXT NOT NULL, - outputs TEXT, - "Benchmark_id" TEXT, + "Stage_id" TEXT, PRIMARY KEY (id), - FOREIGN KEY("Benchmark_id") REFERENCES "Benchmark" (id) + FOREIGN KEY("Stage_id") REFERENCES "Stage" (id) ); - CREATE TABLE "InputCollection" ( - entries TEXT, + id INTEGER NOT NULL, "Stage_id" TEXT, - PRIMARY KEY (entries, "Stage_id"), + PRIMARY KEY (id), FOREIGN KEY("Stage_id") REFERENCES "Stage" (id) ); - -CREATE TABLE "Parameter" ( - "values" TEXT, +CREATE TABLE "Module_exclude" ( + "Module_id" TEXT, + exclude_id TEXT, + PRIMARY KEY ("Module_id", exclude_id), + FOREIGN KEY("Module_id") REFERENCES "Module" (id), + FOREIGN KEY(exclude_id) REFERENCES "Module" (id) +); +CREATE TABLE "Module_parameters" ( "Module_id" TEXT, - PRIMARY KEY ("values", "Module_id"), - FOREIGN KEY("Module_id") REFERENCES "Module" (id) + parameters_id INTEGER, + PRIMARY KEY ("Module_id", parameters_id), + FOREIGN KEY("Module_id") REFERENCES "Module" (id), + FOREIGN KEY(parameters_id) REFERENCES "Parameter" (id) ); +CREATE TABLE "InputCollection_entries" ( + "InputCollection_id" INTEGER, + entries_id TEXT, + PRIMARY KEY ("InputCollection_id", entries_id), + FOREIGN KEY("InputCollection_id") REFERENCES "InputCollection" (id), + FOREIGN KEY(entries_id) REFERENCES "IOFile" (id) +); \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index e673eb9..5dfde88 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,8 +1,8 @@ [tool.poetry] name = "omni_schema" version = "0.0.1" -description = "Data model foromnibenchmark." -authors = ["Almut Luetge "] +description = "Data model for omnibenchmark." +authors = ["Almut Luetge ", "Daniel Incicau "] license = "Apache Software License 2.0" readme = "README.md" include = ["README.md", "src/omni_schema/schema", "project"] diff --git a/src/omni_schema/datamodel/omni_schema.py b/src/omni_schema/datamodel/omni_schema.py new file mode 100644 index 0000000..7e9affe --- /dev/null +++ b/src/omni_schema/datamodel/omni_schema.py @@ -0,0 +1,489 @@ +# Auto generated from omni_schema.yaml by pythongen.py version: 0.0.1 +# Generation date: 2024-08-27T15:30:28 +# Schema: omni-schema +# +# id: https://w3id.org/omnibenchmark/omni-schema +# description: Data model for omnibenchmark. +# license: Apache Software License 2.0 + +import dataclasses +import re +from jsonasobj2 import JsonObj, as_dict +from typing import Optional, List, Union, Dict, ClassVar, Any +from dataclasses import dataclass +from datetime import date, datetime, time +from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue, PvFormulaOptions + +from linkml_runtime.utils.slot import Slot +from linkml_runtime.utils.metamodelcore import empty_list, empty_dict, bnode +from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str, extended_float, extended_int +from linkml_runtime.utils.dataclass_extensions_376 import dataclasses_init_fn_with_kwargs +from linkml_runtime.utils.formatutils import camelcase, underscore, sfx +from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from rdflib import Namespace, URIRef +from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.linkml_model.types import String, Uriorcurie +from linkml_runtime.utils.metamodelcore import URIorCURIE + +metamodel_version = "1.7.0" +version = None + +# Overwrite dataclasses _init_fn to add **kwargs in __init__ +dataclasses._init_fn = dataclasses_init_fn_with_kwargs + +# Namespaces +EXAMPLE = CurieNamespace('example', 'https://example.org/') +LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/') +OMNI_SCHEMA = CurieNamespace('omni_schema', 'https://w3id.org/omnibenchmark/omni-schema/') +SCHEMA = CurieNamespace('schema', 'http://schema.org/') +DEFAULT_ = OMNI_SCHEMA + + +# Types + +# Class references +class IdentifiableEntityId(URIorCURIE): + pass + + +class BenchmarkId(IdentifiableEntityId): + pass + + +class StageId(IdentifiableEntityId): + pass + + +class ModuleId(IdentifiableEntityId): + pass + + +class IOFileId(IdentifiableEntityId): + pass + + +class SoftwareEnvironmentId(IdentifiableEntityId): + pass + + +@dataclass(repr=False) +class IdentifiableEntity(YAMLRoot): + """ + A generic grouping for any identifiable entity + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = SCHEMA["Thing"] + class_class_curie: ClassVar[str] = "schema:Thing" + class_name: ClassVar[str] = "IdentifiableEntity" + class_model_uri: ClassVar[URIRef] = OMNI_SCHEMA.IdentifiableEntity + + id: Union[str, IdentifiableEntityId] = None + name: Optional[str] = None + description: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, IdentifiableEntityId): + self.id = IdentifiableEntityId(self.id) + + if self.name is not None and not isinstance(self.name, str): + self.name = str(self.name) + + if self.description is not None and not isinstance(self.description, str): + self.description = str(self.description) + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class Benchmark(IdentifiableEntity): + """ + A multi-stage workflow to evaluate processing stage for a specific task. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = OMNI_SCHEMA["Benchmark"] + class_class_curie: ClassVar[str] = "omni_schema:Benchmark" + class_name: ClassVar[str] = "Benchmark" + class_model_uri: ClassVar[URIRef] = OMNI_SCHEMA.Benchmark + + id: Union[str, BenchmarkId] = None + version: str = None + benchmarker: str = None + software_backend: Union[str, "SoftwareBackendEnum"] = None + storage: str = None + storage_api: Union[str, "StorageAPIEnum"] = None + software_environments: Union[Dict[Union[str, SoftwareEnvironmentId], Union[dict, "SoftwareEnvironment"]], List[Union[dict, "SoftwareEnvironment"]]] = empty_dict() + stages: Union[Dict[Union[str, StageId], Union[dict, "Stage"]], List[Union[dict, "Stage"]]] = empty_dict() + benchmark_yaml_spec: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, BenchmarkId): + self.id = BenchmarkId(self.id) + + if self._is_empty(self.version): + self.MissingRequiredField("version") + if not isinstance(self.version, str): + self.version = str(self.version) + + if self._is_empty(self.benchmarker): + self.MissingRequiredField("benchmarker") + if not isinstance(self.benchmarker, str): + self.benchmarker = str(self.benchmarker) + + if self._is_empty(self.software_backend): + self.MissingRequiredField("software_backend") + if not isinstance(self.software_backend, SoftwareBackendEnum): + self.software_backend = SoftwareBackendEnum(self.software_backend) + + if self._is_empty(self.storage): + self.MissingRequiredField("storage") + if not isinstance(self.storage, str): + self.storage = str(self.storage) + + if self._is_empty(self.storage_api): + self.MissingRequiredField("storage_api") + if not isinstance(self.storage_api, StorageAPIEnum): + self.storage_api = StorageAPIEnum(self.storage_api) + + if self._is_empty(self.software_environments): + self.MissingRequiredField("software_environments") + self._normalize_inlined_as_list(slot_name="software_environments", slot_type=SoftwareEnvironment, key_name="id", keyed=True) + + if self._is_empty(self.stages): + self.MissingRequiredField("stages") + self._normalize_inlined_as_list(slot_name="stages", slot_type=Stage, key_name="id", keyed=True) + + if self.benchmark_yaml_spec is not None and not isinstance(self.benchmark_yaml_spec, str): + self.benchmark_yaml_spec = str(self.benchmark_yaml_spec) + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class Stage(IdentifiableEntity): + """ + A benchmark subtask with equivalent and independent modules. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = OMNI_SCHEMA["Stage"] + class_class_curie: ClassVar[str] = "omni_schema:Stage" + class_name: ClassVar[str] = "Stage" + class_model_uri: ClassVar[URIRef] = OMNI_SCHEMA.Stage + + id: Union[str, StageId] = None + modules: Union[Dict[Union[str, ModuleId], Union[dict, "Module"]], List[Union[dict, "Module"]]] = empty_dict() + inputs: Optional[Union[Union[dict, "InputCollection"], List[Union[dict, "InputCollection"]]]] = empty_list() + outputs: Optional[Union[Dict[Union[str, IOFileId], Union[dict, "IOFile"]], List[Union[dict, "IOFile"]]]] = empty_dict() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, StageId): + self.id = StageId(self.id) + + if self._is_empty(self.modules): + self.MissingRequiredField("modules") + self._normalize_inlined_as_list(slot_name="modules", slot_type=Module, key_name="id", keyed=True) + + if not isinstance(self.inputs, list): + self.inputs = [self.inputs] if self.inputs is not None else [] + self.inputs = [v if isinstance(v, InputCollection) else InputCollection(**as_dict(v)) for v in self.inputs] + + self._normalize_inlined_as_list(slot_name="outputs", slot_type=IOFile, key_name="id", keyed=True) + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class Module(IdentifiableEntity): + """ + A single benchmark component assigned to a specific stage. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = OMNI_SCHEMA["Module"] + class_class_curie: ClassVar[str] = "omni_schema:Module" + class_name: ClassVar[str] = "Module" + class_model_uri: ClassVar[URIRef] = OMNI_SCHEMA.Module + + id: Union[str, ModuleId] = None + software_environment: Union[str, SoftwareEnvironmentId] = None + repository: Union[dict, "Repository"] = None + exclude: Optional[Union[Union[str, ModuleId], List[Union[str, ModuleId]]]] = empty_list() + parameters: Optional[Union[Union[dict, "Parameter"], List[Union[dict, "Parameter"]]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ModuleId): + self.id = ModuleId(self.id) + + if self._is_empty(self.software_environment): + self.MissingRequiredField("software_environment") + if not isinstance(self.software_environment, SoftwareEnvironmentId): + self.software_environment = SoftwareEnvironmentId(self.software_environment) + + if self._is_empty(self.repository): + self.MissingRequiredField("repository") + if not isinstance(self.repository, Repository): + self.repository = Repository(**as_dict(self.repository)) + + if not isinstance(self.exclude, list): + self.exclude = [self.exclude] if self.exclude is not None else [] + self.exclude = [v if isinstance(v, ModuleId) else ModuleId(v) for v in self.exclude] + + if not isinstance(self.parameters, list): + self.parameters = [self.parameters] if self.parameters is not None else [] + self.parameters = [v if isinstance(v, Parameter) else Parameter(**as_dict(v)) for v in self.parameters] + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class IOFile(IdentifiableEntity): + """ + Represents an input / output file. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = OMNI_SCHEMA["IOFile"] + class_class_curie: ClassVar[str] = "omni_schema:IOFile" + class_name: ClassVar[str] = "IOFile" + class_model_uri: ClassVar[URIRef] = OMNI_SCHEMA.IOFile + + id: Union[str, IOFileId] = None + path: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, IOFileId): + self.id = IOFileId(self.id) + + if self.path is not None and not isinstance(self.path, str): + self.path = str(self.path) + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class InputCollection(YAMLRoot): + """ + A holder for valid input combinations. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = OMNI_SCHEMA["InputCollection"] + class_class_curie: ClassVar[str] = "omni_schema:InputCollection" + class_name: ClassVar[str] = "InputCollection" + class_model_uri: ClassVar[URIRef] = OMNI_SCHEMA.InputCollection + + entries: Optional[Union[Union[str, IOFileId], List[Union[str, IOFileId]]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if not isinstance(self.entries, list): + self.entries = [self.entries] if self.entries is not None else [] + self.entries = [v if isinstance(v, IOFileId) else IOFileId(v) for v in self.entries] + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class Repository(YAMLRoot): + """ + A reference to code repository containing the module's executable code. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = OMNI_SCHEMA["Repository"] + class_class_curie: ClassVar[str] = "omni_schema:Repository" + class_name: ClassVar[str] = "Repository" + class_model_uri: ClassVar[URIRef] = OMNI_SCHEMA.Repository + + url: str = None + commit: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.url): + self.MissingRequiredField("url") + if not isinstance(self.url, str): + self.url = str(self.url) + + if self._is_empty(self.commit): + self.MissingRequiredField("commit") + if not isinstance(self.commit, str): + self.commit = str(self.commit) + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class Parameter(YAMLRoot): + """ + A parameter and its scope. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = OMNI_SCHEMA["Parameter"] + class_class_curie: ClassVar[str] = "omni_schema:Parameter" + class_name: ClassVar[str] = "Parameter" + class_model_uri: ClassVar[URIRef] = OMNI_SCHEMA.Parameter + + values: Optional[Union[str, List[str]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if not isinstance(self.values, list): + self.values = [self.values] if self.values is not None else [] + self.values = [v if isinstance(v, str) else str(v) for v in self.values] + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class SoftwareEnvironment(IdentifiableEntity): + """ + Contains snapshots of the software environment required for the modules to run. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = OMNI_SCHEMA["SoftwareEnvironment"] + class_class_curie: ClassVar[str] = "omni_schema:SoftwareEnvironment" + class_name: ClassVar[str] = "SoftwareEnvironment" + class_model_uri: ClassVar[URIRef] = OMNI_SCHEMA.SoftwareEnvironment + + id: Union[str, SoftwareEnvironmentId] = None + easyconfig: Optional[str] = None + envmodule: Optional[str] = None + conda: Optional[str] = None + apptainer: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SoftwareEnvironmentId): + self.id = SoftwareEnvironmentId(self.id) + + if self.easyconfig is not None and not isinstance(self.easyconfig, str): + self.easyconfig = str(self.easyconfig) + + if self.envmodule is not None and not isinstance(self.envmodule, str): + self.envmodule = str(self.envmodule) + + if self.conda is not None and not isinstance(self.conda, str): + self.conda = str(self.conda) + + if self.apptainer is not None and not isinstance(self.apptainer, str): + self.apptainer = str(self.apptainer) + + super().__post_init__(**kwargs) + + +# Enumerations +class StorageAPIEnum(EnumDefinitionImpl): + + S3 = PermissibleValue(text="S3") + + _defn = EnumDefinition( + name="StorageAPIEnum", + ) + +class SoftwareBackendEnum(EnumDefinitionImpl): + + apptainer = PermissibleValue(text="apptainer") + envmodules = PermissibleValue(text="envmodules") + conda = PermissibleValue(text="conda") + + _defn = EnumDefinition( + name="SoftwareBackendEnum", + ) + +# Slots +class slots: + pass + +slots.id = Slot(uri=SCHEMA.identifier, name="id", curie=SCHEMA.curie('identifier'), + model_uri=OMNI_SCHEMA.id, domain=None, range=URIRef) + +slots.name = Slot(uri=SCHEMA.name, name="name", curie=SCHEMA.curie('name'), + model_uri=OMNI_SCHEMA.name, domain=None, range=Optional[str]) + +slots.description = Slot(uri=SCHEMA.description, name="description", curie=SCHEMA.curie('description'), + model_uri=OMNI_SCHEMA.description, domain=None, range=Optional[str]) + +slots.version = Slot(uri=OMNI_SCHEMA.version, name="version", curie=OMNI_SCHEMA.curie('version'), + model_uri=OMNI_SCHEMA.version, domain=None, range=str) + +slots.benchmarker = Slot(uri=OMNI_SCHEMA.benchmarker, name="benchmarker", curie=OMNI_SCHEMA.curie('benchmarker'), + model_uri=OMNI_SCHEMA.benchmarker, domain=None, range=str) + +slots.software_backend = Slot(uri=OMNI_SCHEMA.software_backend, name="software_backend", curie=OMNI_SCHEMA.curie('software_backend'), + model_uri=OMNI_SCHEMA.software_backend, domain=None, range=Union[str, "SoftwareBackendEnum"]) + +slots.storage = Slot(uri=OMNI_SCHEMA.storage, name="storage", curie=OMNI_SCHEMA.curie('storage'), + model_uri=OMNI_SCHEMA.storage, domain=None, range=str) + +slots.storage_api = Slot(uri=OMNI_SCHEMA.storage_api, name="storage_api", curie=OMNI_SCHEMA.curie('storage_api'), + model_uri=OMNI_SCHEMA.storage_api, domain=None, range=Union[str, "StorageAPIEnum"]) + +slots.stages = Slot(uri=OMNI_SCHEMA.stages, name="stages", curie=OMNI_SCHEMA.curie('stages'), + model_uri=OMNI_SCHEMA.stages, domain=None, range=Union[Dict[Union[str, StageId], Union[dict, Stage]], List[Union[dict, Stage]]]) + +slots.modules = Slot(uri=OMNI_SCHEMA.modules, name="modules", curie=OMNI_SCHEMA.curie('modules'), + model_uri=OMNI_SCHEMA.modules, domain=None, range=Union[Dict[Union[str, ModuleId], Union[dict, Module]], List[Union[dict, Module]]]) + +slots.inputs = Slot(uri=OMNI_SCHEMA.inputs, name="inputs", curie=OMNI_SCHEMA.curie('inputs'), + model_uri=OMNI_SCHEMA.inputs, domain=None, range=Optional[Union[Union[dict, InputCollection], List[Union[dict, InputCollection]]]]) + +slots.outputs = Slot(uri=OMNI_SCHEMA.outputs, name="outputs", curie=OMNI_SCHEMA.curie('outputs'), + model_uri=OMNI_SCHEMA.outputs, domain=None, range=Optional[Union[Dict[Union[str, IOFileId], Union[dict, IOFile]], List[Union[dict, IOFile]]]]) + +slots.exclude = Slot(uri=OMNI_SCHEMA.exclude, name="exclude", curie=OMNI_SCHEMA.curie('exclude'), + model_uri=OMNI_SCHEMA.exclude, domain=None, range=Optional[Union[Union[str, ModuleId], List[Union[str, ModuleId]]]]) + +slots.repository = Slot(uri=OMNI_SCHEMA.repository, name="repository", curie=OMNI_SCHEMA.curie('repository'), + model_uri=OMNI_SCHEMA.repository, domain=None, range=Union[dict, Repository]) + +slots.parameters = Slot(uri=OMNI_SCHEMA.parameters, name="parameters", curie=OMNI_SCHEMA.curie('parameters'), + model_uri=OMNI_SCHEMA.parameters, domain=None, range=Optional[Union[Union[dict, Parameter], List[Union[dict, Parameter]]]]) + +slots.software_environments = Slot(uri=OMNI_SCHEMA.software_environments, name="software_environments", curie=OMNI_SCHEMA.curie('software_environments'), + model_uri=OMNI_SCHEMA.software_environments, domain=None, range=Union[Dict[Union[str, SoftwareEnvironmentId], Union[dict, SoftwareEnvironment]], List[Union[dict, SoftwareEnvironment]]]) + +slots.software_environment = Slot(uri=OMNI_SCHEMA.software_environment, name="software_environment", curie=OMNI_SCHEMA.curie('software_environment'), + model_uri=OMNI_SCHEMA.software_environment, domain=None, range=Union[str, SoftwareEnvironmentId]) + +slots.path = Slot(uri=OMNI_SCHEMA.path, name="path", curie=OMNI_SCHEMA.curie('path'), + model_uri=OMNI_SCHEMA.path, domain=None, range=Optional[str]) + +slots.url = Slot(uri=OMNI_SCHEMA.url, name="url", curie=OMNI_SCHEMA.curie('url'), + model_uri=OMNI_SCHEMA.url, domain=None, range=str) + +slots.commit = Slot(uri=OMNI_SCHEMA.commit, name="commit", curie=OMNI_SCHEMA.curie('commit'), + model_uri=OMNI_SCHEMA.commit, domain=None, range=str) + +slots.values = Slot(uri=OMNI_SCHEMA.values, name="values", curie=OMNI_SCHEMA.curie('values'), + model_uri=OMNI_SCHEMA.values, domain=None, range=Optional[Union[str, List[str]]]) + +slots.entries = Slot(uri=OMNI_SCHEMA.entries, name="entries", curie=OMNI_SCHEMA.curie('entries'), + model_uri=OMNI_SCHEMA.entries, domain=None, range=Optional[Union[Union[str, IOFileId], List[Union[str, IOFileId]]]]) + +slots.easyconfig = Slot(uri=OMNI_SCHEMA.easyconfig, name="easyconfig", curie=OMNI_SCHEMA.curie('easyconfig'), + model_uri=OMNI_SCHEMA.easyconfig, domain=None, range=Optional[str]) + +slots.envmodule = Slot(uri=OMNI_SCHEMA.envmodule, name="envmodule", curie=OMNI_SCHEMA.curie('envmodule'), + model_uri=OMNI_SCHEMA.envmodule, domain=None, range=Optional[str]) + +slots.conda = Slot(uri=OMNI_SCHEMA.conda, name="conda", curie=OMNI_SCHEMA.curie('conda'), + model_uri=OMNI_SCHEMA.conda, domain=None, range=Optional[str]) + +slots.apptainer = Slot(uri=OMNI_SCHEMA.apptainer, name="apptainer", curie=OMNI_SCHEMA.curie('apptainer'), + model_uri=OMNI_SCHEMA.apptainer, domain=None, range=Optional[str]) + +slots.benchmark_yaml_spec = Slot(uri=OMNI_SCHEMA.benchmark_yaml_spec, name="benchmark_yaml_spec", curie=OMNI_SCHEMA.curie('benchmark_yaml_spec'), + model_uri=OMNI_SCHEMA.benchmark_yaml_spec, domain=None, range=Optional[str]) \ No newline at end of file