PREFIX omni_schema: <https://w3id.org/omnibenchmark/omni-schema/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

omni_schema:Parameter a rdfs:Class ;
  rdfs:comment "A parameter and its scope." .

omni_schema:values a rdf:Property ;
  rdfs:range xsd:string .

<http://schema.org/Thing> a rdfs:Class ;
  rdfs:comment "A generic grouping for any identifiable entity" .

<http://schema.org/name> a rdf:Property ;
  rdfs:comment "A human-readable name for a thing" ;
  rdfs:range xsd:string .

<http://schema.org/description> a rdf:Property ;
  rdfs:comment "A human-readable description for a thing" ;
  rdfs:range xsd:string .

omni_schema:MetricCollector a rdfs:Class ;
  rdfs:comment "Describes a module collecting/gathering multiple metrics and generating (potentially single) aggregated files collecting these metrics." ;
  rdfs:subClassOf <http://schema.org/Thing> .

omni_schema:repository a rdf:Property ;
  rdfs:comment "The code repository hosting the module." ;
  rdfs:range omni_schema:Repository .

omni_schema:outputs a rdf:Property ;
  rdfs:range omni_schema:IoFile .

omni_schema:software_environment a rdf:Property ;
  rdfs:comment "Reference to a software environment by key." ;
  rdfs:range omni_schema:SoftwareEnvironment .

omni_schema:inputs a rdf:Property ;
  rdfs:range omni_schema:IoFile , omni_schema:InputCollection .

omni_schema:IoFile a rdfs:Class ;
  rdfs:comment "Represents an input / output file." ;
  rdfs:subClassOf <http://schema.org/Thing> .

omni_schema:path a rdf:Property ;
  rdfs:comment "The output path pattern for the IO file." ;
  rdfs:range xsd:string .

omni_schema:InputCollection a rdfs:Class ;
  rdfs:comment "A holder for valid input combinations." .

omni_schema:entries a rdf:Property ;
  rdfs:range omni_schema:IoFile .

omni_schema:SoftwareEnvironment a rdfs:Class ;
  rdfs:comment "Contains snapshots of the software environment required for the modules to run." ;
  rdfs:subClassOf <http://schema.org/Thing> .

omni_schema:envmodule a rdf:Property ;
  rdfs:comment "Environment module name." ;
  rdfs:range xsd:string .

omni_schema:apptainer a rdf:Property ;
  rdfs:comment "Apptainer image static ORAS url, including name:tag." ;
  rdfs:range xsd:string .

omni_schema:easyconfig a rdf:Property ;
  rdfs:comment "Easybuild configuration file." ;
  rdfs:range xsd:string .

omni_schema:conda a rdf:Property ;
  rdfs:comment "Conda environment file." ;
  rdfs:range xsd:string .

omni_schema:Stage a rdfs:Class ;
  rdfs:comment "A benchmark subtask with equivalent and independent modules." ;
  rdfs:subClassOf <http://schema.org/Thing> .

omni_schema:modules a rdf:Property ;
  rdfs:range omni_schema:Module .

omni_schema:Module a rdfs:Class ;
  rdfs:comment "A single benchmark component assigned to a specific stage." ;
  rdfs:subClassOf <http://schema.org/Thing> .

omni_schema:exclude a rdf:Property ;
  rdfs:comment "Ignore these module's outputs as input." ;
  rdfs:range omni_schema:Module .

omni_schema:parameters a rdf:Property ;
  rdfs:range omni_schema:Parameter .

omni_schema:Repository a rdfs:Class ;
  rdfs:comment "A reference to code repository containing the module's executable code." .

omni_schema:url a rdf:Property ;
  rdfs:comment "The git compatible url." ;
  rdfs:range xsd:string .

omni_schema:commit a rdf:Property ;
  rdfs:comment "The commit hash." ;
  rdfs:range xsd:string .

omni_schema:Benchmark a rdfs:Class ;
  rdfs:comment "A multi-stage workflow to evaluate processing stage for a specific task." ;
  rdfs:subClassOf <http://schema.org/Thing> .

omni_schema:stages a rdf:Property ;
  rdfs:range omni_schema:Stage .

omni_schema:benchmarker a rdf:Property ;
  rdfs:comment "The name and contact details of the person responsible for this benchmark." ;
  rdfs:range xsd:string .

omni_schema:storage_bucket_name a rdf:Property ;
  rdfs:comment "The name of the bucket (i.e. for S3)" ;
  rdfs:range xsd:string .

omni_schema:storage_api a rdf:Property ;
  rdfs:comment "The type of the storage API, i.e. S3." ;
  rdfs:range omni_schema:StorageApiEnum .

omni_schema:benchmark_yaml_spec a rdf:Property ;
  rdfs:comment "Benchmark Specification version." ;
  rdfs:range xsd:string .

omni_schema:software_environments a rdf:Property ;
  rdfs:comment "Dictionary of software environments keyed by their identifiers" ;
  rdfs:range omni_schema:SoftwareEnvironment .

omni_schema:software_backend a rdf:Property ;
  rdfs:comment "The software backend used to run the benchmark, e.g. whether apptainer, envmodules, or conda." ;
  rdfs:range omni_schema:SoftwareBackendEnum .

omni_schema:version a rdf:Property ;
  rdfs:comment "The version of the benchmark." ;
  rdfs:range xsd:string .

omni_schema:storage a rdf:Property ;
  rdfs:comment "The place hosting all benchmark data." ;
  rdfs:range xsd:string .

omni_schema:metric_collectors a rdf:Property ;
  rdfs:comment "Metric collecting/gathering module(s)" ;
  rdfs:range omni_schema:MetricCollector .

omni_schema:StorageApiEnum a rdfs:Class .

omni_schema:StorageApiEnum.S_3 a omni_schema:StorageApiEnum .

omni_schema:SoftwareBackendEnum a rdfs:Class .

omni_schema:SoftwareBackendEnum.APPTAINER a omni_schema:SoftwareBackendEnum .

omni_schema:SoftwareBackendEnum.ENVMODULES a omni_schema:SoftwareBackendEnum .

omni_schema:SoftwareBackendEnum.CONDA a omni_schema:SoftwareBackendEnum .

omni_schema:SoftwareBackendEnum.DOCKER a omni_schema:SoftwareBackendEnum .

omni_schema:SoftwareBackendEnum.HOST a omni_schema:SoftwareBackendEnum .
