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