diff --git a/openapi/ogcapi-processes.bundled.json b/openapi/ogcapi-processes.bundled.json index b4d69698..b04dacbe 100644 --- a/openapi/ogcapi-processes.bundled.json +++ b/openapi/ogcapi-processes.bundled.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "version": "0.1", + "version": "2.0rc1", "title": "OGC API - Processes", "description": "Example API Definition for OGC API - Processes", "contact": { @@ -160,12695 +160,6342 @@ }, "application/cwl": { "schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "$author": "Francis Charette-Migneault ", - "$id": "https://raw.githubusercontent.com/common-workflow-language/cwl-v1.2/1.2.1_proposed/json-schema/cwl.yaml", - "$defs": { - "CWL": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLAtomic" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLGraph" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflow" - } - ] - }, - "CWLKeywordList": { - "type": "array", - "title": "KeywordList", - "description": "Keywords applied to the process for search and categorization purposes.", - "items": { - "type": "string", - "title": "keyword", - "minLength": 1 - } - }, - "CWLTextPatternID": { - "$comment": "Identifier with text pattern that can allow additional non-ASCII characters depending on regex implementation.\nThe identifier allows a '#' or a relative 'sub/part#ref' prefix, to support references to other definitions\nin the CWL document, such as when using 'SchemaDefRequirement'.\n\nJSON spec regex does not include '\\w' in its default subset to allow all word-like unicode characters\n(see reference: https://json-schema.org/understanding-json-schema/reference/regular_expressions.html).\n\nSince support is implementation specific, add both the ASCII-only and '\\w' representation simultaneously\nand let the parser reading this document apply whichever is more relevant or supported\n(see discussion: https://github.com/common-workflow-language/cwl-v1.2/pull/256#discussion_r1234037814).\n", - "pattern": "^([A-Za-z0-9\\w]+(/[A-Za-z0-9\\w]+)*)?[#.]?[A-Za-z0-9\\w]+(?:[-_.][A-Za-z0-9\\w]+)*$", - "type": "string", - "description": "Generic identifier name pattern." - }, - "CWLIdentifier": { - "anyOf": [ - { - "type": "string", - "title": "UUID", - "description": "Unique identifier.", - "format": "uuid", - "pattern": "^[a-f0-9]{8}(?:-?[a-f0-9]{4}){3}-?[a-f0-9]{12}$" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTextPatternID" - } - ], - "title": "CWLIdentifier", - "description": "Reference to the process identifier." - }, - "CWLIntent": { - "type": "array", - "title": "CWLIntent", - "items": { - "type": "string", - "title": "item", - "description": "Identifier URL to a concept for the type of computational operation accomplished by this process\n(see example operations: http://edamontology.org/operation_0004).\n", - "format": "url", - "pattern": "^((?:http|ftp)s?://)?(?!.*//.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:/?|[/?]\\S+)$" - } - }, - "CWLImport": { - "description": "Represents an '$import' directive that should point toward another compatible CWL file to import where specified.\nThe contents of the imported file should be relevant contextually where it is being imported.\n", - "$comment": "The schema validation of the CWL will not itself perform the '$import' to resolve and validate its contents.\nTherefore, the complete schema will not be validated entirely, and could still be partially malformed.\nTo ensure proper and exhaustive validation of a CWL definition with this schema, all '$import' directives\nshould be resolved and extended beforehand.\n", - "type": "object", - "properties": { - "$import": { - "type": "string" - } - }, - "required": [ - "$import" - ], - "additionalProperties": false - }, - "CWLRequirements": { - "title": "CWLRequirements", - "description": "Explicit requirement to execute the application package.", - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLRequirementsMap" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLRequirementsList" - } - ] - }, - "CWLRequirementsMap": { - "title": "CWLRequirementsMap", - "type": "object", - "properties": { - "cwltool:CUDARequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/cwltool%3ACUDARequirement" - }, - "DockerRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/DockerRequirement" - }, - "SoftwareRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/SoftwareRequirement" - }, - "ShellCommandRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ShellCommandRequirement" - }, - "EnvVarRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/EnvVarRequirement" - }, - "SchemaDefRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/SchemaDefRequirement" - }, - "InitialWorkDirRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InitialWorkDirRequirement" - }, - "InlineJavascriptRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InlineJavascriptRequirement" - }, - "InplaceUpdateRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InplaceUpdateRequirement" - }, - "LoadListingRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/LoadListingRequirement" - }, - "NetworkAccess": { - "$comment": "Not 'NetworkAccessRequirement'", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/NetworkAccessRequirement" - }, - "ResourceRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceRequirement" - }, - "ScatterFeatureRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ScatterFeatureRequirement" - }, - "ToolTimeLimit": { - "$comment": "Not 'ToolTimeLimitRequirement'.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ToolTimeLimitRequirement" - }, - "WorkReuse": { - "$comment": "Not 'WorkReuseRequirement'.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/WorkReuseRequirement" - }, - "MultipleInputFeatureRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/MultipleInputFeatureRequirement" - }, - "StepInputExpressionRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/StepInputExpressionRequirement" - }, - "SubworkflowFeatureRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/SubworkflowFeatureRequirement" - } - }, - "additionalProperties": false - }, - "DockerRequirement": { - "type": "object", - "title": "DockerRequirement", - "properties": { - "class": { - "type": "string", - "enum": [ - "DockerRequirement" - ] - }, - "dockerPull": { - "type": "string", - "title": "Docker pull reference", - "description": "Reference package that will be retrieved and executed by CWL.", - "example": "docker-registry.host.com/namespace/image:1.2.3" - }, - "dockerImport": { - "type": "string" - }, - "dockerLoad": { - "type": "string" - }, - "dockerFile": { - "type": "string" - }, - "dockerImageId": { - "type": "string" - }, - "dockerOutputDirectory": { - "type": "string" - } - }, - "oneOf": [ - { - "required": [ - "dockerPull" - ] - }, - { - "required": [ - "dockerImport" - ] - }, - { - "required": [ - "dockerLoad" - ] - }, - { - "required": [ - "dockerFile" - ] - } - ], - "additionalProperties": false - }, - "InitialWorkDirListing": { - "title": "InitialWorkDirListing", - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - { - "type": "array", - "title": "InitialWorkDirListingItems", - "items": { - "oneOf": [ - { - "type": "null" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/DirectoryListingDirent" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/DirectoryListingFileOrDirectory" - }, - { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/DirectoryListingFileOrDirectory" - } - } - ] - } - } - ] - }, - "DirectoryListingFileOrDirectory": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "File", - "Directory" - ] - }, - "location": { - "type": "string" - }, - "checksum": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/Checksum" - }, - "size": { - "type": "integer", - "minimum": 0 - } - }, - "required": [ - "class", - "location" - ], - "additionalProperties": false - }, - "DirectoryListingDirent": { - "$comment": "Called 'Dirent' in documentation.", - "type": "object", - "title": "DirectoryListingDirent", - "properties": { - "entry": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - "entryname": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - "writable": { - "type": "boolean" - } - }, - "required": [ - "entry" - ], - "additionalProperties": false - }, - "InitialWorkDirRequirement": { - "type": "object", - "title": "InitialWorkDirRequirement", - "properties": { - "class": { - "type": "string", - "enum": [ - "InitialWorkDirRequirement" - ] - }, - "listing": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InitialWorkDirListing" - } - }, - "required": [ - "listing" - ], - "additionalProperties": false - }, - "InlineJavascriptLibObject": { - "type": "object", - "properties": { - "$include": { - "type": "string" - } - }, - "required": [ - "$include" - ], - "additionalProperties": false - }, - "InlineJavascriptLibItem": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InlineJavascriptLibObject" - } - ] - }, - "InlineJavascriptLibraries": { - "type": "array", - "title": "InlineJavascriptLibraries", - "description": "Additional code fragments that will also be inserted before executing the expression code.\nAllows for function definitions that may be called from CWL expressions.\n", - "items": { - "title": "exp_lib", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InlineJavascriptLibItem" - } - }, - "InlineJavascriptRequirement": { - "type": "object", - "title": "InlineJavascriptRequirement", - "description": "Indicates that the workflow platform must support inline Javascript expressions.\n\nIf this requirement is not present, the workflow platform must not perform expression interpolation\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#InlineJavascriptRequirement).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "InlineJavascriptRequirement" - ] - }, - "expressionLib": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InlineJavascriptLibraries" - }, - "required": [ - "expressionLib" - ] - }, - "additionalProperties": false - }, - "InplaceUpdateRequirement": { - "type": "object", - "title": "InplaceUpdateRequirement", - "description": "If 'inplaceUpdate' is true, then an implementation supporting this feature may permit tools to directly\nupdate files with 'writable: true' in 'InitialWorkDirRequirement'. That is, as an optimization,\nfiles may be destructively modified in place as opposed to copied and updated\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#InplaceUpdateRequirement).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "InplaceUpdateRequirement" - ] - }, - "inplaceUpdate": { - "type": "boolean", - "title": "inplaceUpdate" - } - }, - "required": [ - "inplaceUpdate" - ], - "additionalProperties": false - }, - "LoadListingEnum": { - "type": "string", - "title": "LoadListingEnum", - "enum": [ - "no_listing", - "shallow_listing", - "deep_listing" - ] - }, - "LoadListingRequirement": { - "type": "object", - "title": "LoadListingRequirement", - "description": "Specify the desired behavior for loading the listing field of a 'Directory' object for use by expressions\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#LoadListingRequirement).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "LoadListingRequirement" - ] - }, - "loadListing": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/LoadListingEnum" - } - }, - "required": [ - "loadListing" - ], - "additionalProperties": false - }, - "NetworkAccess": { - "title": "NetworkAccess", - "description": "Indicate whether a process requires outgoing IPv4/IPv6 network access.", - "example": true, - "oneOf": [ - { - "type": "boolean" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ] - }, - "NetworkAccessRequirement": { - "type": "object", - "title": "NetworkAccessRequirement", - "properties": { - "class": { - "type": "string", - "$comment": "Not 'NetworkAccessRequirement'", - "enum": [ - "NetworkAccess" - ] - }, - "networkAccess": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/NetworkAccess" - } - }, - "required": [ - "networkAccess" - ], - "additionalProperties": false - }, - "CWLExpression": { - "$comment": "Whenever this option is applicable for a parameter, any other 'normal' string should not be specified.\nFor JSON schema validation, there is no easy way to distinguish them unless using complicated string patterns.\n", - "type": "string", - "title": "CWLExpression", - "description": "When combined with 'InlineJavascriptRequirement', this field allows runtime parameter references\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression).\n" - }, - "ResourceQuantityOrFractional": { - "description": "An item quantity that can also represent a proportion of use by resources.", - "$comment": "Technically should be minimum=1, but fractional for scheduling algorithms are allowed.\nThere is no way to distinguish between float/long simultaneously in JSON schema (multi-match oneOf).\nTherefore, only validate that it is greater than zero.\n", - "type": "number", - "exclusiveMinimum": 0, - "default": 1 - }, - "ResourceCoresMinimum": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceQuantityOrFractional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ], - "title": "ResourceCoresMinimum", - "summary": "Minimum reserved number of CPU cores.", - "description": "Minimum reserved number of CPU cores.\n\nMay be a fractional value to indicate to a scheduling algorithm that one core can be allocated to\nmultiple jobs. For example, a value of 0.25 indicates that up to 4 jobs\nmay run in parallel on 1 core. A value of 1.25 means that up to 3 jobs\ncan run on a 4 core system (4/1.25 ~ 3).\n\nProcesses can only share a core allocation if the sum of each of their 'ramMax', 'tmpdirMax', and\n'outdirMax' requests also do not exceed the capacity of the node.\n\nProcesses sharing a core must have the same level of isolation (typically a container\nor VM) that they would normally have.\n\nThe reported number of CPU cores reserved for the process, which is available to expressions \non the 'CommandLineTool' as 'runtime.cores', must be a non-zero integer, and may be calculated by\nrounding up the cores request to the next whole number.\n\nScheduling systems may allocate fractional CPU resources by setting quotas or scheduling weights.\nScheduling systems that do not support fractional CPUs may round up the request to the next whole number.\n", - "default": 1 - }, - "ResourceCoresMaximum": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceQuantityOrFractional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ], - "title": "ResourceCoresMaximum", - "summary": "Maximum reserved number of CPU cores.", - "description": "Maximum reserved number of CPU cores.\nSee 'coresMin' for discussion about fractional CPU requests.\n" - }, - "ResourceRAMMinimum": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceQuantityOrFractional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ], - "title": "ResourceRAMMinimum", - "summary": "Minimum reserved RAM in mebibytes.", - "description": "Minimum reserved RAM in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual RAM request must be rounded up\nto the next whole number.\n\nThe reported amount of RAM reserved for the process, which is available to\nexpressions on the 'CommandLineTool' as 'runtime.ram', must be a non-zero integer.\n", - "default": 256 - }, - "ResourceRAMMaximum": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceQuantityOrFractional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ], - "title": "ResourceRAMMaximum", - "summary": "Maximum reserved RAM in mebibytes.", - "description": "Maximum reserved RAM in mebibytes (2**20).\nSee 'ramMin' for discussion about fractional RAM requests.\n" - }, - "ResourceTmpDirMinimum": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceQuantityOrFractional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ], - "title": "ResourceTmpDirMinimum", - "summary": "Minimum reserved filesystem based storage for the designated temporary directory in mebibytes.", - "description": "Minimum reserved filesystem based storage for the designated temporary\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.tmpdirSize', must be a non-zero integer.\n", - "default": 1024 - }, - "ResourceTmpDirMaximum": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceQuantityOrFractional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ], - "title": "ResourceTmpDirMaximum", - "summary": "Maximum reserved filesystem based storage for the designated temporary directory in mebibytes.", - "description": "Maximum reserved filesystem based storage for the designated temporary directory in mebibytes (2**20).\nSee 'tmpdirMin' for discussion about fractional storage requests.\n" - }, - "ResourceOutDirMinimum": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceQuantityOrFractional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ], - "title": "ResourceOutDirMinimum", - "summary": "Minimum reserved filesystem based storage for the designated output directory in mebibytes.", - "description": "Minimum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.outdirSize', must be a non-zero integer.\n", - "default": 1024 - }, - "ResourceOutDirMaximum": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceQuantityOrFractional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ], - "title": "ResourceOutDirMaximum", - "summary": "Maximum reserved filesystem based storage for the designated output directory in mebibytes.", - "description": "Maximum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\nSee 'outdirMin' for discussion about fractional storage requests.\n", - "default": 1 - }, - "ResourceRequirement": { - "type": "object", - "title": "ResourceRequirement", - "description": "Specify basic hardware resource requirements\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#ResourceRequirement).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "ResourceRequirement" - ] - }, - "coresMin": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceCoresMinimum" - }, - "coresMax": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceCoresMaximum" - }, - "ramMin": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceRAMMinimum" - }, - "ramMax": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceRAMMaximum" - }, - "tmpdirMin": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceTmpDirMinimum" - }, - "tmpdirMax": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceTmpDirMaximum" - }, - "outdirMin": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceOutDirMinimum" - }, - "outdirMax": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceOutDirMaximum" - } - }, - "additionalProperties": false - }, - "Scatter": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTextPatternID" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/IdentifierArray" - } - ], - "title": "Scatter", - "description": "The scatter field specifies one or more input parameters which will be scattered.\n\nAn input parameter may be listed more than once. The declared type of each\ninput parameter implicitly becomes an array of items of the input parameter type.\nIf a parameter is listed more than once, it becomes a nested array. As a result,\nupstream parameters which are connected to scattered parameters must be arrays.\n\nAll output parameter types are also implicitly wrapped in arrays. Each job\nin the scatter results in an entry in the output array.\n\nIf any scattered parameter runtime value is an empty array, all outputs are\nset to empty arrays and no work is done for the step, according to applicable scattering rules.\n" - }, - "IdentifierArray": { - "type": "array", - "title": "IdentifierArray", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTextPatternID" - }, - "minItems": 1 - }, - "ScatterFeatureRequirement": { - "type": "object", - "title": "ScatterFeatureRequirement", - "description": "A 'scatter' operation specifies that the associated Workflow step should execute separately over a list of\ninput elements. Each job making up a scatter operation is independent and may be executed concurrently\n(see also: https://www.commonwl.org/v1.2/Workflow.html#WorkflowStep).\n", - "$comment": "Fields 'scatter' and 'scatterMethod' at the root of a 'WorkflowStep', not within the requirement.", - "properties": { - "class": { - "type": "string", - "description": "CWL requirement class specification.", - "enum": [ - "ScatterFeatureRequirement" - ] - } - }, - "additionalProperties": false - }, - "MultipleInputFeatureRequirement": { - "type": "object", - "title": "MultipleInputFeatureRequirement", - "description": "Indicates that the 'Workflow' must support multiple inbound data links listed in the 'source'\nfield of 'WorkflowStepInput'.\n", - "properties": { - "class": { - "type": "string", - "description": "CWL requirement class specification.", - "enum": [ - "MultipleInputFeatureRequirement" - ] - } - }, - "additionalProperties": false - }, - "StepInputExpressionRequirement": { - "type": "object", - "title": "StepInputExpressionRequirement", - "description": "Indicates that the 'Workflow' must support the 'valueFrom' field of 'WorkflowStepInput'.", - "properties": { - "class": { - "type": "string", - "description": "CWL requirement class specification.", - "enum": [ - "StepInputExpressionRequirement" - ] - } - }, - "additionalProperties": false - }, - "SubworkflowFeatureRequirement": { - "type": "object", - "title": "SubworkflowFeatureRequirement", - "description": "Indicates that the 'Workflow' must support nested workflows in the 'run' field of 'WorkflowStep'.", - "properties": { - "class": { - "type": "string", - "description": "CWL requirement class specification.", - "enum": [ - "SubworkflowFeatureRequirement" - ] - } - }, - "additionalProperties": false - }, - "CWLFileOnlyParameters": { - "type": "object", - "properties": { - "secondaryFiles": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordSecondaryFiles" - }, - "streamable": { - "type": "boolean" - }, - "format": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLFormat" - }, - "loadContents": { - "type": "boolean" - } - } - }, - "CWLFileOnlyParametersConditional": { - "description": "Parameters that are only valid when 'type' or 'items' evaluates to 'File'.", - "$comment": "Explicitly disallow these parameters when non-File type is detected.\nOtherwise, validate their schema definitions according to what is permitted.\n", - "type": "object", - "if": { - "properties": { - "oneOf": [ - { - "$comment": "Single required or optional 'File'.", - "type": { - "enum": [ - "File", - "File?", - "File[]", - "File[]?" - ] - } - }, - { - "$comment": "Array of required or optional 'File'.", - "type": { - "const": "array" - }, - "items": { - "oneOf": [ - { - "type": [ - { - "const": "File" - }, - { - "const": "File?" - } - ] - }, - { - "type": "array", - "contains": { - "type": [ - { - "const": "File" - }, - { - "const": "File?" - } - ] - } - } - ] - } - } - ] - } - }, - "then": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLFileOnlyParameters" - }, - "else": { - "not": { - "properties": { - "secondaryFiles": {}, - "streamable": {}, - "format": {}, - "loadContents": {} - } - } - } - }, - "CWLDirectoryOnlyParameters": { - "type": "object", - "properties": { - "loadListing": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/LoadListingEnum" - } - } - }, - "CWLDirectoryOnlyParametersConditional": { - "description": "Parameters that are only valid when 'type' or 'items' evaluates to 'Directory'.", - "$comment": "Explicitly disallow these parameters when non-Directory type is detected.\nOtherwise, validate their schema definitions according to what is permitted.\n", - "type": "object", - "if": { - "properties": { - "oneOf": [ - { - "$comment": "Single required or optional 'Directory'.", - "type": { - "enum": [ - "Directory", - "Directory?", - "Directory[]", - "Directory[]?" - ] - } - }, - { - "$comment": "Array of required or optional 'Directory'.", - "type": { - "const": "array" - }, - "items": { - "oneOf": [ - { - "type": [ - { - "const": "Directory" - }, - { - "const": "Directory?" - } - ] - }, - { - "type": "array", - "contains": { - "type": [ - { - "const": "Directory" - }, - { - "const": "Directory?" - } - ] - } - } - ] - } - } - ] - } - }, - "then": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDirectoryOnlyParameters" - }, - "else": { - "not": { - "properties": { - "loadListing": {} - } - } - } - }, - "CWLTypeRecordSecondaryFileSchema": { - "type": "object", - "properties": { - "pattern": { - "$comment": "Either an expression or the regex pattern directly.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - "required": { - "oneOf": [ - { - "type": "boolean" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ] - } - }, - "required": [ - "pattern" - ], - "additionalProperties": false - }, - "CWLTypeRecordSecondaryFiles": { - "oneOf": [ - { - "$comment": "Either an expression or the regex pattern directly.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordSecondaryFileSchema" - }, - { - "type": "array", - "items": { - "$comment": "Either an expression or the regex pattern directly.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - }, - { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordSecondaryFileSchema" - } - } - ] - }, - "CWLTypeRecordFieldDefBase": { - "type": "object", - "properties": { - "name": { - "$comment": "Required if list item. Otherwise, optional since it is the mapping key.\nThis requirement is defined in 'CWLTypeRecordFieldsItem' to allow reuse of this schema.\n", - "type": "string" - }, - "type": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLType" - } - }, - "required": [ - "type" - ] - }, - "CWLTypeRecordFieldDef": { - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordFieldDefBase" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLFileOnlyParametersConditional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDirectoryOnlyParametersConditional" - } - ] - }, - "CWLTypeRecordFieldsMap": { - "type": "object", - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLType" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordFieldDef" - } - ] - } - }, - "CWLTypeRecordFieldsItem": { - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordFieldDef" - }, - { - "required": [ - "name" - ] - } - ] - }, - "CWLTypeRecordFieldsList": { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordFieldsItem" - } - }, - "CWLTypeRecordFields": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordFieldsMap" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordFieldsList" - } - ] - }, - "CWLTypeRecordSchema": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "record" - ] - }, - "fields": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordFields" - }, - "name": { - "type": "string" - } - }, - "required": [ - "type" - ] - }, - "CWLTypeRecordArray": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "array" - ] - }, - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLType" - } - }, - "required": [ - "type", - "items" - ] - }, - "SchemaDefRequirement": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "SchemaDefRequirement" - ] - }, - "types": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeEnum" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordSchema" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordArray" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLImport" - } - ] - } - } - }, - "required": [ - "types" - ], - "additionalProperties": false - }, - "SoftwarePackageSpecs": { - "type": "array", - "items": { - "type": "string" - } - }, - "SoftwarePackage": { - "type": "object", - "properties": { - "package": { - "type": "string" - }, - "version": { - "type": "array", - "items": { - "type": "string" - } - }, - "specs": { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ReferenceURL" - } - } - }, - "required": [ - "package" - ], - "additionalProperties": false - }, - "SoftwareRequirement": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "SoftwareRequirement" - ] - }, - "packages": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/SoftwarePackage" - } - }, - { - "type": "object", - "description": "Mapping of 'package' name to its specifications.", - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/SoftwarePackageSpecs" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/SoftwarePackage" - } - ] - } - } - ] - } - }, - "required": [ - "packages" - ], - "additionalProperties": false - }, - "ShellCommandRequirement": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "ShellCommandRequirement" - ] - } - }, - "additionalProperties": false - }, - "EnvironmentDef": { - "type": "object", - "properties": { - "envName": { - "type": "string", - "minLength": 1 - }, - "envValue": { - "type": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - } - }, - "required": [ - "envName", - "envValue" - ], - "additionalProperties": false - }, - "EnvVarRequirement": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "EnvVarRequirement" - ] - }, - "envDef": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/EnvironmentDef" - } - }, - { - "type": "object", - "description": "Mapping of 'envName' to environment value or definition.", - "additionalProperties": { - "oneOf": [ - { - "description": "The 'envValue' specified directly", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/EnvironmentDef" - } - ] - } - } - ] - } - }, - "required": [ - "envDef" - ], - "additionalProperties": false - }, - "TimeLimitValue": { - "oneOf": [ - { - "type": "number", - "minimum": 0 - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ], - "title": "TimeLimitValue", - "description": "The time limit, in seconds.\n\nA time limit of zero means no time limit.\nNegative time limits are an error.\n" - }, - "ToolTimeLimitRequirement": { - "type": "object", - "title": "ToolTimeLimitRequirement", - "description": "Set an upper limit on the execution time of a CommandLineTool.\n\nA CommandLineTool whose execution duration exceeds the time limit may be preemptively\nterminated and considered failed. May also be used by batch systems to make scheduling decisions.\n\nThe execution duration excludes external operations, such as staging of files,\npulling a docker image etc., and only counts wall-time for the execution of the command line itself.\n", - "properties": { - "class": { - "type": "string", - "$comment": "not 'ToolTimeLimitRequirement'", - "enum": [ - "ToolTimeLimit" - ] - }, - "timelimit": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/TimeLimitValue" - } - }, - "required": [ - "timelimit" - ], - "additionalProperties": false - }, - "EnableReuseValue": { - "oneOf": [ - { - "type": "boolean" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ], - "title": "EnableReuseValue", - "description": "Indicates if reuse is enabled for this tool.\n\nCan be an expression when combined with 'InlineJavascriptRequirement'\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression).\n" - }, - "WorkReuseRequirement": { - "type": "object", - "title": "WorkReuseRequirement", - "description": "For implementations that support reusing output from past work\n(on the assumption that same code and same input produce same results),\ncontrol whether to enable or disable the reuse behavior for a particular tool\nor step (to accommodate situations where that assumption is incorrect).\n\nA reused step is not executed but instead returns the same output as the original execution.\n\nIf 'WorkReuse' is not specified, correct tools should assume it is enabled by default.\n", - "properties": { - "class": { - "type": "string", - "$comment": "Not 'WorkReuseRequirement'.", - "enum": [ - "WorkReuse" - ] - }, - "enableReuse": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/EnableReuseValue" - } - }, - "required": [ - "enableReuse" - ], - "additionalProperties": false - }, - "UnknownRequirement": { - "type": "object", - "description": "Generic schema to allow alternative CWL requirements/hints not explicitly defined in schemas.", - "properties": { - "class": { - "type": "string", - "title": "Requirement Class Identifier", - "description": "CWL requirement class specification.", - "example": "UnknownRequirement", - "not": { - "enum": [ - "cwltool:CUDARequirement", - "DockerRequirement", - "SoftwareRequirement", - "ShellCommandRequirement", - "EnvVarRequirement", - "SchemaDefRequirement", - "InitialWorkDirRequirement", - "InlineJavascriptRequirement", - "InplaceUpdateRequirement", - "LoadListingRequirement", - "NetworkAccess", - "ResourceRequirement", - "ScatterFeatureRequirement", - "ToolTimeLimit", - "WorkReuse", - "MultipleInputFeatureRequirement", - "StepInputExpressionRequirement", - "SubworkflowFeatureRequirement" - ] - } - } - }, - "additionalProperties": {} - }, - "CWLRequirementsList": { - "type": "array", - "title": "CWLRequirementsList", - "items": { - "oneOf": [ - { - "allOf": [ - { - "$comment": "When using the list representation, 'class' is required to indicate which one is being represented.\nWhen using the mapping representation, 'class' is optional since it's the key, but it must match by name.\n", - "required": [ - "class" - ] - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLRequirementsItem" - } - ] - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLImport" - } - ] - } - }, - "CWLRequirementsItem": { - "title": "CWLRequirementsItem", - "$comment": "For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well.\nOtherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition.\n", - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/cwltool%3ACUDARequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/DockerRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/SoftwareRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ShellCommandRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/EnvVarRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/SchemaDefRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InitialWorkDirRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InlineJavascriptRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InplaceUpdateRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/LoadListingRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/NetworkAccessRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ResourceRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ScatterFeatureRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ToolTimeLimitRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/WorkReuseRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/MultipleInputFeatureRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/StepInputExpressionRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/SubworkflowFeatureRequirement" - } - ] - }, - "ScatterMethod": { - "type": "string", - "title": "scatterMethod", - "description": "If 'scatter' declares more than one input parameter, 'scatterMethod'\ndescribes how to decompose the input into a discrete set of jobs.\n\n- dotproduct: specifies that each of the input arrays are aligned and\n one element taken from each array to construct each job. It is an\n error if all input arrays are not the same length.\n\n- nested_crossproduct: specifies the Cartesian product of the inputs, producing \n a job for every combination of the scattered inputs. The output must be nested \n arrays for each level of scattering, in the order that the input arrays\n are listed in the 'scatter' field.\n\n- flat_crossproduct: specifies the Cartesian product of the inputs, producing a \n job for every combination of the scattered inputs. The output arrays must be \n flattened to a single level, but otherwise listed in the order that the input \n arrays are listed in the 'scatter' field.\n", - "default": "dotproduct", - "enum": [ - "dotproduct", - "nested_crossproduct", - "flat_crossproduct" - ], - "required": [ - "timelimit", - "class" - ], - "additionalProperties": false - }, - "CWLHints": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLHintsMap" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLHintsList" - } - ], - "title": "CWLHints", - "description": "Non-failing additional hints that can help resolve extra requirements." - }, - "CWLHintsMapExtras": { - "type": "object", - "properties": { - "BuiltinRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/BuiltinRequirement" - }, - "OGCAPIRequirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/OGCAPIRequirement" - }, - "WPS1Requirement": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/WPS1Requirement" - } - }, - "additionalProperties": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/UnknownRequirement" - } - }, - "CWLHintsMap": { - "title": "CWLHintsMap", - "anyOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLRequirementsMap" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLHintsMapExtras" - } - ] - }, - "BuiltinRequirement": { - "type": "object", - "title": "BuiltinRequirement", - "description": "Hint indicating that the Application Package corresponds to a\nbuiltin process of this instance. (note: can only be an 'hint'\nas it is unofficial CWL specification).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "BuiltinRequirement" - ] - }, - "process": { - "$comment": "Builtin process identifier.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTextPatternID" - } - }, - "required": [ - "process", - "class" - ], - "additionalProperties": false - }, - "CUDAComputeCapability": { - "oneOf": [ - { - "type": "string", - "title": "CUDA compute capability", - "description": "The compute capability supported by the GPU hardware.", - "pattern": "^\\d+\\.\\d+$" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CUDAComputeCapabilityArray" - } - ], - "title": "CUDA compute capability", - "description": "The compute capability supported by the GPU hardware.\n\n* If this is a single value, it defines only the minimum compute capability.\n GPUs with higher capability are also accepted.\n* If it is an array value, then only select GPUs with compute capabilities that explicitly\n appear in the array.\n See https://docs.nvidia.com/deploy/cuda-compatibility/#faq and\n https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#cuda-compute-capability\n for details.\n" - }, - "CUDAComputeCapabilityArray": { - "type": "array", - "title": "CUDAComputeCapabilityArray", - "items": { - "type": "string", - "title": "CUDA compute capability", - "description": "The compute capability supported by the GPU hardware.", - "pattern": "^\\d+\\.\\d+$" - }, - "minItems": 1 - }, - "cwltool:CUDARequirement": { - "type": "object", - "title": "cwltool:CUDARequirement", - "properties": { - "class": { - "type": "string", - "enum": [ - "cwltool:CUDARequirement" - ] - }, - "cudaVersionMin": { - "type": "string", - "title": "CUDA version minimum", - "description": "The minimum CUDA version required to run the software. This corresponds to a CUDA SDK release.\n\nWhen run in a container, the container image should provide the CUDA runtime,\nand the host driver is injected into the container. In this case, because CUDA drivers\nare backwards compatible, it is possible to use an older SDK with a newer driver across major versions.\n\nSee https://docs.nvidia.com/deploy/cuda-compatibility/ for details.\n", - "example": "11.4", - "pattern": "^\\d+\\.\\d+$" - }, - "cudaComputeCapability": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CUDAComputeCapability" - }, - "cudaDeviceCountMin": { - "type": "integer", - "title": "CUDA device count minimum", - "description": "The minimum amount of devices required.", - "default": 1, - "example": 1, - "minimum": 1 - }, - "cudaDeviceCountMax": { - "type": "integer", - "title": "CUDA device count maximum", - "description": "The maximum amount of devices required.", - "default": 1, - "example": 8, - "minimum": 1 - } - }, - "required": [ - "cudaVersionMin", - "cudaComputeCapability" - ], - "additionalProperties": false - }, - "OGCAPIRequirement": { - "type": "object", - "title": "OGCAPIRequirement", - "description": "Hint indicating that the Application Package corresponds to an\nOGC API - Processes provider that should be remotely executed and monitored\nby this instance. (note: can only be an 'hint' as it is unofficial CWL specification).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "OGCAPIRequirement" - ] - }, - "process": { - "description": "Process location.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ReferenceURL" - } - }, - "required": [ - "process" - ], - "additionalProperties": false - }, - "WPS1Requirement": { - "type": "object", - "title": "WPS1Requirement", - "description": "Hint indicating that the Application Package corresponds to a\nWPS-1 provider process that should be remotely executed and monitored by this\ninstance. (note: can only be an ''hint'' as it is unofficial CWL specification).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "WPS1Requirement" - ] - }, - "process": { - "$comment": "Process identifier of the remote WPS provider.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTextPatternID" - }, - "provider": { - "description": "WPS provider endpoint.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ReferenceURL" - } - }, - "required": [ - "process", - "provider" - ], - "additionalProperties": false - }, - "CWLHintsList": { - "type": "array", - "title": "CWLHintsList", - "items": { - "oneOf": [ - { - "allOf": [ - { - "$comment": "When using the list representation, 'class' is required to indicate which one is being represented.\nWhen using the mapping representation, 'class' is optional since it's the key, but it must match by name.\n", - "required": [ - "class" - ] - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLHintsItem" - } - ] - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLImport" - } - ] - } - }, - "CWLHintsItemExtras": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/BuiltinRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/OGCAPIRequirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/WPS1Requirement" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/UnknownRequirement" - } - ] - }, - "CWLHintsItem": { - "title": "CWLHintsItem", - "$comment": "For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well.\nOtherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition.\n", - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLRequirementsItem" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLHintsItemExtras" - } - ] - }, - "CWLCommand": { - "oneOf": [ - { - "type": "string", - "title": "String command." - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CommandParts" - } - ], - "title": "CWLCommand", - "description": "Command called in the docker image or on shell according to requirements\nand hints specifications. Can be omitted if already defined in the docker\nimage.\n" - }, - "CommandParts": { - "type": "array", - "title": "Command Parts", - "items": { - "type": "string", - "title": "cmd" - }, - "additionalProperties": false - }, - "CWLArguments": { - "type": "array", - "title": "CWLArguments", - "description": "Base arguments passed to the command.", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InputBinding" - } - ] - } - }, - "CWLInputStdInDefinition": { - "description": "Indicates that the value passed to this CWL input will be redirected to the standard input stream of the command.\nCan be defined for only one input and must not be combined with 'stdin' at the root of the CWL document.\n", - "type": "string", - "enum": [ - "stdin" - ] - }, - "CWLInputStdInObjectType": { - "type": "object", - "properties": { - "type": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputStdInDefinition" - } - }, - "required": [ - "type" - ] - }, - "CWLInputStdIn": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputStdInDefinition" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputStdInObjectType" - } - ] - }, - "CWLOutputStdOutDefinition": { - "description": "Indicates that the data pushed to the standard output stream by the command will be redirected to this CWL output.\nCan be defined for only one output. If combined with 'stdout' at the root of the CWL document, that definition\nwill indicate the desired name of the output file where the output stream will be written to. A random name will\nbe applied for the file of this output unless otherwise specified.\n", - "type": "string", - "enum": [ - "stdout" - ] - }, - "CWLOutputStdOutObjectType": { - "type": "object", - "properties": { - "type": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdOutDefinition" - } - }, - "required": [ - "type" - ] - }, - "CWLOutputStdOut": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdOutDefinition" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdOutObjectType" - } - ] - }, - "CWLOutputStdErrDefinition": { - "description": "Indicates that the data pushed to the standard error stream by the command will be redirected to this CWL output.\nCan be defined for only one output. If combined with 'stderr' at the root of the CWL document, that definition\nwill indicate the desired name of the output file where the error stream will be written to. A random name will\nbe applied for the file of this output unless otherwise specified.\n", - "type": "string", - "enum": [ - "stderr" - ] - }, - "CWLOutputStdErrObjectType": { - "type": "object", - "properties": { - "type": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdErrDefinition" - } - }, - "required": [ - "type" - ] - }, - "CWLOutputStdErr": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdErrDefinition" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdErrObjectType" - } - ] - }, - "CWLInputsDefinition": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputList" - }, - { - "$comment": "Avoid 'oneOf' conflict of generic mapping key strings as input identifier matching against '$import'.", - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputMap" - }, - { - "not": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLImport" - } - } - ] - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLImport" - } - ], - "title": "CWLInputsDefinition", - "description": "All inputs available to the Application Package." - }, - "CWLInputList": { - "type": "array", - "title": "CWLInputList", - "description": "Package inputs defined as items.", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputItem" - } - }, - "CWLFormat": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - } - ] - }, - "CWLType": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeBase" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeList" - } - ], - "title": "CWL Type" - }, - "CWLTypeDefinition": { - "type": "string", - "title": "CWL type string definition", - "summary": "CWL type string definition.", - "description": "Field type definition.", - "$comment": "Note that 'Any' is equivalent to any of the non-null types.\nTherefore, a nullable 'Any' explicitly specified by 'Any?' or its array-nullable form 'Any[]?' are not equivalent.\n", - "enum": [ - "null", - "Any", - "Any?", - "Any[]", - "Any[]?", - "Directory", - "Directory?", - "Directory[]", - "Directory[]?", - "File", - "File?", - "File[]", - "File[]?", - "boolean", - "boolean?", - "boolean[]", - "boolean[]?", - "double", - "double?", - "double[]", - "double[]?", - "enum?", - "enum[]", - "enum[]?", - "float", - "float?", - "float[]", - "float[]?", - "int", - "int?", - "int[]", - "int[]?", - "integer", - "integer?", - "integer[]", - "integer[]?", - "long", - "long?", - "long[]", - "long[]?", - "string", - "string?", - "string[]", - "string[]?" - ] - }, - "CWLTypeBase": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeDefinition" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeArray" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeEnum" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordRef" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordSchema" - } - ], - "title": "CWLTypeBase" - }, - "CWLTypeArray": { - "type": "object", - "title": "CWLTypeArray", - "summary": "CWL type as list of items.", - "properties": { - "type": { - "type": "string", - "title": "type", - "example": "array", - "enum": [ - "array" - ] - }, - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLType" - } - }, - "required": [ - "type", - "items" - ], - "additionalProperties": {} - }, - "CWLTypeSymbols": { - "type": "array", - "title": "CWLTypeSymbols", - "summary": "Allowed values composing the enum.", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeSymbolValues" - } - }, - "CWLTypeSymbolValues": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "title": "CWLTypeSymbolValues" - }, - "CWLTypeEnum": { - "type": "object", - "title": "CWLTypeEnum", - "summary": "CWL type as enum of values.", - "properties": { - "type": { - "type": "string", - "title": "type", - "example": "enum", - "enum": [ - "enum" - ] - }, - "symbols": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeSymbols" - } - }, - "required": [ - "type", - "symbols" - ], - "additionalProperties": {} - }, - "CWLTypeRecordRef": { - "description": "An IRI with minimally a '{Record}' identifier to look for a schema definition locally or remotely.\n\nThe identifier resolution is performed accordingly to the specified reference and as described in\nhttps://www.commonwl.org/v1.2/SchemaSalad.html#Identifier_resolution.\n", - "$comment": "Avoid 'oneOf' conflict of valid strings between this CWL record reference and the generic CWL types.", - "allOf": [ - { - "not": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeDefinition" - } - }, - { - "not": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputStdInDefinition" - } - }, - { - "not": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdOutDefinition" - } - }, - { - "not": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdErrDefinition" - } - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeRecordRefPattern" - } - ] - }, - "CWLTypeRecordRefPattern": { - "type": "string", - "format": "url", - "pattern": "^(((?:http|ftp)s?:\\/\\/)?(?!.*\\/\\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:\\/?|[\\/?]\\S+))?(?:[A-Za-z0-9\\w\\-.\\/]+)?\\#?[A-Za-z0-9\\w\\-.]+$" - }, - "CWLTypeList": { - "type": "array", - "title": "CWLTypeList", - "summary": "Combination of allowed CWL types.", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeBase" - } - }, - "CWLDefault": { - "title": "CWLDefault", - "description": "Default value of input if not provided for task execution.", - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/AnyLiteralType" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/AnyLiteralList" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDefaultLocation" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDefaultObject" - }, - { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDefaultObject" - } - } - ] - }, - "CWLDefaultTypedConditional": { - "$comment": "Validate that the 'default' value, if specified, is of same type as the CWL 'type'.\nThis avoids over-accepting anything that does not match the intended type.\nHowever, validation limits itself to data literals and arrays.\nNested type and multi-type definitions will validate against 'Any'.\n", - "allOf": [ - { - "$comment": "Object structure with minimally 'type' and 'default'. Otherwise, no point to continue testing.", - "type": "object", - "properties": { - "type": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/AnyType" - }, - "default": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/AnyType" - } - }, - "required": [ - "type" - ] - }, - { - "$comment": "Explicit null.", - "if": { - "properties": { - "type": { - "const": "null" - } - } - }, - "then": { - "properties": { - "default": { - "type": "null" - } - } - } - }, - { - "$comment": "Required string.", - "if": { - "properties": { - "type": { - "const": "string" - } - } - }, - "then": { - "properties": { - "default": { - "type": "string" - } - } - } - }, - { - "$comment": "Optional string.", - "if": { - "properties": { - "type": { - "const": "string?" - } - } - }, - "then": { - "properties": { - "default": { - "type": [ - "string", - "null" - ] - } - } - } - }, - { - "$comment": "Required boolean.", - "if": { - "properties": { - "type": { - "const": "boolean" - } - } - }, - "then": { - "properties": { - "default": { - "type": "boolean" - } - } - } - }, - { - "$comment": "Optional boolean.", - "if": { - "properties": { - "type": { - "enum": [ - "double?", - "float?", - "int?", - "integer?", - "long?" - ] - } - } - }, - "then": { - "properties": { - "default": { - "type": [ - "number", - "null" - ] - } - } - } - }, - { - "$comment": "Required numeric.", - "if": { - "properties": { - "type": { - "enum": [ - "double", - "float", - "int", - "integer", - "long" - ] - } - } - }, - "then": { - "properties": { - "default": { - "type": "number" - } - } - } - }, - { - "$comment": "Optional numeric.", - "if": { - "properties": { - "type": { - "enum": [ - "double?", - "float?", - "int?", - "integer?", - "long?" - ] - } - } - }, - "then": { - "properties": { - "default": { - "type": [ - "number", - "null" - ] - } - } - } - }, - { - "$comment": "Required enum.", - "if": { - "properties": { - "type": { - "const": "enum" - }, - "symbols": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeSymbols" - } - } - }, - "then": { - "properties": { - "default": { - "type": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeSymbolValues" - } - } - } - } - }, - { - "$comment": "Optional enum.", - "if": { - "properties": { - "type": { - "const": "enum?" - }, - "symbols": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeSymbols" - } - } - }, - "then": { - "properties": { - "default": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLTypeSymbolValues" - }, - { - "type": "null" - } - ] - } - } - } - }, - { - "$comment": "Required File or Directory.", - "if": { - "properties": { - "type": { - "enum": [ - "Directory", - "File" - ] - } - } - }, - "then": { - "properties": { - "default": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDefaultLocation" - } - } - } - }, - { - "$comment": "Optional File or Directory.", - "if": { - "properties": { - "type": { - "enum": [ - "Directory?", - "File?" - ] - } - } - }, - "then": { - "properties": { - "default": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDefaultLocation" - }, - { - "type": "null" - } - ] - } - } - } - }, - { - "$comment": "Required array of string.", - "if": { - "oneOf": [ - { - "properties": { - "type": { - "const": "string[]" - } - } - }, - { - "properties": { - "type": { - "const": "array" - }, - "items": { - "const": "string" - } - } - } - ] - }, - "then": { - "properties": { - "default": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - { - "$comment": "Required array of boolean.", - "if": { - "oneOf": [ - { - "properties": { - "type": { - "const": "boolean[]" - } - } - }, - { - "properties": { - "type": { - "const": "array" - }, - "items": { - "const": "boolean" - } - } - } - ] - }, - "then": { - "properties": { - "default": { - "type": "array", - "items": { - "type": "boolean" - } - } - } - } - }, - { - "$comment": "Required array of numeric.", - "if": { - "oneOf": [ - { - "properties": { - "type": { - "enum": [ - "double[]", - "float[]", - "int[]", - "integer[]", - "long[]" - ] - } - } - }, - { - "properties": { - "type": { - "const": "array" - }, - "items": { - "enum": [ - "double", - "float", - "int", - "integer", - "long" - ] - } - } - } - ] - }, - "then": { - "properties": { - "default": { - "type": "array", - "items": { - "type": "number" - } - } - } - } - }, - { - "$comment": "Required anything (single).", - "if": { - "properties": { - "type": { - "const": "Any" - } - } - }, - "then": { - "properties": { - "default": { - "$comment": "Match anything.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/AnyType" - } - } - } - }, - { - "$comment": "Required array of anything.", - "if": { - "properties": { - "type": { - "const": "Any[]" - } - } - }, - "then": { - "properties": { - "default": { - "$comment": "Match anything as long as under array.", - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/AnyType" - } - } - } - } - } - ] - }, - "AnyType": { - "type": [ - "boolean", - "number", - "string", - "array", - "object" - ] - }, - "AnyLiteralType": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "type": "string" - } - ] - }, - "AnyLiteralList": { - "type": "array", - "title": "AnyLiteralList", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/AnyLiteralType" - } - }, - "Checksum": { - "$comment": "Minimal pattern check to know which hash algorithm to apply,\nbut don't check too harshly for the rest (length, allowed characters, etc.).\n", - "type": "string", - "pattern": "^[a-z0-9\\-]+\\$[\\w\\-.]+$" - }, - "ReferenceURL": { - "type": "string", - "format": "url", - "pattern": "^((?:http|ftp)s?:\\/\\/)?(?!.*\\/\\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:\\/?|[/?]\\S+)$" - }, - "CWLDefaultLocation": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "File", - "Directory" - ] - }, - "path": { - "type": "string" - }, - "location": { - "type": "string" - }, - "basename": { - "type": "string" - }, - "nameroot": { - "type": "string" - } - }, - "required": [ - "class" - ], - "oneOf": [ - { - "required": [ - "path" - ] - }, - { - "required": [ - "location" - ] - } - ], - "additionalProperties": false - }, - "CWLDefaultObject": { - "type": "object", - "not": { - "$comment": "Avoid false-positive match of default File or Directory location definition.", - "properties": { - "class": { - "type": "string", - "enum": [ - "File", - "Directory" - ] - } - } - }, - "additionalProperties": {} - }, - "InputBinding": { - "type": "object", - "title": "Input Binding", - "description": "Defines how to specify the input for the command.", - "properties": { - "prefix": { - "type": "string" - }, - "position": { - "oneOf": [ - { - "type": "integer" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - ] - }, - "valueFrom": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - "itemSeparator": { - "type": "string" - }, - "shellQuote": { - "type": "boolean" - } - }, - "additionalProperties": false - }, - "CWLInputItemBase": { - "type": "object", - "properties": { - "type": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLType" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputStdIn" - } - ] - }, - "inputBinding": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InputBinding" - }, - "id": { - "description": "Identifier of the CWL input.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIdentifier" - } - }, - "required": [ - "type", - "id" - ], - "additionalProperties": {} - }, - "CWLInputItem": { - "title": "Input", - "description": "Input specification. Note that multiple formats are supported and\nnot all specification variants or parameters are presented here. Please refer\nto official CWL documentation for more details (https://www.commonwl.org).\n", - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputItemBase" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDefaultTypedConditional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDocumentation" - } - ] - }, - "CWLInputObjectBase": { - "type": "object", - "properties": { - "type": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLType" - }, - "inputBinding": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/InputBinding", - "additionalProperties": {} - } - }, - "required": [ - "type" - ], - "additionalProperties": {} - }, - "CWLInputObject": { - "title": "CWLInputObject", - "summary": "CWL type definition with parameters.", - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputObjectBase" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDefaultTypedConditional" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDocumentation" - } - ] - }, - "CWLInputMap": { - "type": "object", - "title": "CWLInputMap", - "description": "Package inputs defined as mapping.", - "properties": {}, - "required": [], - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLType" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputObject" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputStdIn" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLImport" - } - ] - } - }, - "CWLOutputsDefinition": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputList" - }, - { - "$comment": "Avoid 'oneOf' conflict of generic mapping key strings as output identifier matching against '$import'.", - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputMap" - }, - { - "not": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLImport" - } - } - ] - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLImport" - } - ], - "title": "CWLOutputsDefinition", - "description": "All outputs produced by the Application Package." - }, - "CWLOutputList": { - "type": "array", - "title": "CWLOutputList", - "description": "Package outputs defined as items.", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputItem" - } - }, - "OutputBinding": { - "type": "object", - "title": "OutputBinding", - "description": "Defines how to retrieve the output result from the command.", - "properties": { - "glob": { - "description": "Glob pattern to find the output on disk or mounted docker volume.", - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - } - ] - } - }, - "additionalProperties": {} - }, - "CWLOutputItem": { - "type": "object", - "title": "CWLOutputItem", - "description": "Output specification. Note that multiple formats are supported\nand not all specification variants or parameters are presented here. Please\nrefer to official CWL documentation for more details (https://www.commonwl.org).\n", - "properties": { - "type": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLType" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdOut" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdErr" - } - ] - }, - "outputBinding": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/OutputBinding" - }, - "id": { - "description": "Identifier of the CWL output.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIdentifier" - } - }, - "required": [ - "type", - "id" - ], - "additionalProperties": {} - }, - "CWLOutputObjectBase": { - "type": "object", - "title": "CWLOutputObject", - "summary": "CWL type definition with parameters.", - "properties": { - "type": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLType" - }, - "outputBinding": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/OutputBinding" - } - }, - "required": [ - "type" - ], - "additionalProperties": {} - }, - "CWLOutputObject": { - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDocumentation" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputObjectBase" - } - ] - }, - "CWLOutputMap": { - "type": "object", - "title": "CWLOutputMap", - "description": "Package outputs defined as mapping.", - "properties": {}, - "required": [], - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLType" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputObject" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdOut" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputStdErr" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLImport" - } - ] - } - }, - "CWLScatter": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIdentifier" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLScatterMulti" - } - ], - "title": "CWLScatter", - "description": "One or more input identifier of an application step within a Workflow\nwere an array-based input to that Workflow should be scattered across multiple\ninstances of the step application.\n" - }, - "CWLScatterMulti": { - "type": "array", - "title": "CWLScatterMulti", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIdentifier" - } - }, - "CWLScatterMethod": { - "type": "string", - "title": "scatterMethod", - "description": "Describes how to decompose the scattered input into a discrete\nset of jobs. When 'dotproduct', specifies that each of the input arrays\nare aligned and one element taken from each array to construct each job.\nIt is an error if all input arrays are of different length. When 'nested_crossproduct',\nspecifies the Cartesian product of the inputs, producing a job for every\ncombination of the scattered inputs. The output must be nested arrays\nfor each level of scattering, in the order that the input arrays are listed\nin the scatter field. When 'flat_crossproduct', specifies the Cartesian\nproduct of the inputs, producing a job for every combination of the scattered\ninputs. The output arrays must be flattened to a single level, but otherwise\nlisted in the order that the input arrays are listed in the scatter field.\n", - "enum": [ - "dotproduct", - "nested_crossproduct", - "flat_crossproduct" - ] - }, - "CWLWorkflowStepScatter": { - "type": "object", - "properties": { - "scatter": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/Scatter" - }, - "scatterMethod": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/ScatterMethod" - } - } - }, - "CWLWorkflowStepRun": { - "description": "Nested CWL definition to run as Workflow step.", - "oneOf": [ - { - "description": "File or URL reference to a CWL tool definition.", - "type": "string" - }, - { - "description": "Nested CWL tool definition for the step.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLAtomicNested" - }, - { - "description": "Nested CWL Workflow definition for the step.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowNested" - } - ] - }, - "CWLWorkflowStepWhen": { - "description": "Condition to execute a step that must evaluate to a boolean-like value.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - "LinkMergeMethod": { - "type": "string", - "enum": [ - "merge_nested", - "merge_flattened" - ] - }, - "CWLWorkflowStepInputBase": { - "type": "object", - "properties": { - "source": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "linkMerge": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/LinkMergeMethod" - }, - "valueFrom": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - } - } - }, - "CWLWorkflowStepInputDefault": { - "$comment": "CWL 'type' is not specified at this level for step inputs\n(it is provided by the mapped input of the nested tool instead).\nTherefore, cannot validate against 'CWLDefaultTypedConditional'.\n", - "type": "object", - "properties": { - "default": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDefault" - } - } - }, - "CWLWorkflowStepInput": { - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepInputBase" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepInputDefault" - } - ] - }, - "CWLWorkflowStepInputId": { - "type": "object", - "properties": { - "id": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIdentifier" - } - }, - "required": [ - "id" - ] - }, - "CWLWorkflowStepInItem": { - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepInputId" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepInputBase" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepInputDefault" - } - ] - }, - "CWLWorkflowStepInList": { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepInItem" - } - }, - "CWLWorkflowStepInMap": { - "type": "object", - "additionalProperties": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepInput" - } - ] - } - }, - "CWLWorkflowStepIn": { - "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepInMap" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepInList" - } - ] - }, - "CWLWorkflowStepOutId": { - "type": "object", - "properties": { - "id": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIdentifier" - } - }, - "required": [ - "id" - ], - "additionalProperties": false - }, - "CWLWorkflowStepOut": { - "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIdentifier" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepOutId" - } - ] - } - }, - "CWLWorkflowStepDefinition": { - "type": "object", - "properties": { - "in": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepIn" - }, - "run": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepRun" - }, - "when": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepWhen" - }, - "out": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepOut" - } - }, - "required": [ - "in", - "run", - "out" - ] - }, - "CWLWorkflowStepObject": { - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepDefinition" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepScatter" - } - ] - }, - "CWLWorkflowStepItem": { - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepId" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepObject" - } - ] - }, - "CWLWorkflowStepId": { - "type": "object", - "properties": { - "id": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIdentifier" - } - }, - "required": [ - "id" - ] - }, - "CWLWorkflowStepMap": { - "type": "object", - "additionalProperties": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepObject" - } - }, - "CWLWorkflowStepList": { - "type": "array", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepItem" - } - }, - "CWLWorkflowClass": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "Workflow" - ] - } - } - }, - "CWLWorkflowSteps": { - "oneOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepMap" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowStepList" - } - ] - }, - "CWLWorkflowBase": { - "type": "object", - "properties": { - "steps": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowSteps" - }, - "inputs": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputsDefinition" - }, - "outputs": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputsDefinition" - }, - "requirements": { - "$comment": "Technically a different subset, but lots of redefinitions to be done.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLRequirements" - }, - "hints": { - "$comment": "Technically a different subset, but lots of redefinitions to be done.", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLHints" - } - } - }, - "CWLWorkflowNested": { - "$comment": "Same as 'CWLWorkflow', but 'cwlVersion' not repeated (only at root).", - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLMetadata" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDocumentation" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowClass" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowBase" - } - ] - }, - "CWLWorkflow": { - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLVersion" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLMetadata" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDocumentation" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowClass" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLWorkflowBase" - } - ] - }, - "CWLVersion": { - "type": "object", - "properties": { - "clwVersion": { - "type": "string", - "title": "cwlVersion", - "description": "CWL version of the described application package.", - "pattern": "^v\\d+(\\.\\d+(\\.\\d+)*)*$" - } - }, - "required": [ - "cwlVersion" - ] - }, - "CWLAtomic": { - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLVersion" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLMetadata" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDocumentation" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLAtomicBase" - } - ] - }, - "CWLAtomicNested": { - "$comment": "Same as 'CWLAtomic', but 'cwlVersion' not repeated (only at root).", - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLMetadata" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDocumentation" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLAtomicBase" - } - ] - }, - "CWLAtomicBase": { - "type": "object", - "title": "CWL atomic definition", - "description": "Direct CWL definition instead of the graph representation.", - "properties": { - "id": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIdentifier" - }, - "class": { - "type": "string", - "title": "Class", - "description": "CWL class specification. This is used to differentiate between single Application Package (AP)definitions and Workflow that chains multiple packages.", - "enum": [ - "CommandLineTool", - "ExpressionTool" - ] - }, - "intent": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIntent" - }, - "requirements": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLRequirements" - }, - "hints": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLHints" - }, - "baseCommand": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLCommand" - }, - "arguments": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLArguments" - }, - "inputs": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputsDefinition" - }, - "outputs": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputsDefinition" - }, - "stdin": { - "description": "Source of the input stream. \nTypically, an expression referring to an existing file name or an input of the CWL document.\n", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - "stdout": { - "description": "Destination of the output stream.\nTypically, an expression referring to a desired file name or provided by a CWL input reference.\n", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - "stderr": { - "description": "Destination of the error stream.\nTypically, an expression referring to a desired file name or provided by a CWL input reference.\n", - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLExpression" - }, - "scatter": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLScatter" - }, - "scatterMethod": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLScatterMethod" - } - }, - "required": [ - "class", - "inputs", - "outputs" - ] - }, - "CWLGraphList": { - "type": "array", - "title": "CWLGraphList", - "description": "Graph definition that defines *exactly one* CWL application package represented as list. Multiple definitions simultaneously deployed is NOT supported currently.", - "items": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLGraphItem" - }, - "maxItems": 1, - "minItems": 1 - }, - "CWLGraphItem": { - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLMetadata" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDocumentation" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLGraphItemBase" - } - ] - }, - "CWLGraphItemBase": { - "type": "object", - "title": "CWLGraphItem", - "properties": { - "class": { - "type": "string", - "title": "Class", - "description": "CWL class specification. This is used to differentiate between single Application Package (AP)definitions and Workflow that chains multiple packages.", - "enum": [ - "CommandLineTool", - "ExpressionTool", - "Workflow" - ] - }, - "id": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIdentifier" - }, - "intent": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLIntent" - }, - "requirements": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLRequirements" - }, - "hints": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLHints" - }, - "baseCommand": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLCommand" - }, - "arguments": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLArguments" - }, - "inputs": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLInputsDefinition" - }, - "outputs": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLOutputsDefinition" - }, - "scatter": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLScatter" - }, - "scatterMethod": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLScatterMethod" - } - }, - "required": [ - "class", - "id", - "inputs", - "outputs" - ], - "additionalProperties": {} - }, - "CWLGraphBase": { - "type": "object", - "properties": { - "$graph": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLGraphList" - } - }, - "required": [ - "$graph" - ], - "additionalProperties": {} - }, - "CWLGraph": { - "title": "CWLGraph", - "allOf": [ - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLVersion" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLMetadata" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLDocumentation" - }, - { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLGraphBase" - } - ] - }, - "CWLDocumentation": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "doc": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - } - } - }, - "CWLMetadata": { - "type": "object", - "properties": { - "s:keywords": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema/%24defs/CWLKeywordList" - }, - "version": { - "type": "string", - "title": "version", - "description": "Version of the process.", - "example": "1.2.3", - "pattern": "^\\d+(\\.\\d+(\\.\\d+(\\.[A-Za-z0-9\\-_]+)*)*)*$" - } - } - } - } - } - }, - "application/cwl+json": { - "schema": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema" - } - }, - "application/cwl+yaml": { - "schema": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema" - } - } - } - }, - "responses": { - "201": { - "$ref": "#/components/schemas/processSummary" - }, - "403": { - "$ref": "#/components/responses/ImmutableProcess" - }, - "409": { - "$ref": "#/components/responses/DuplicateProcess" - }, - "500": { - "$ref": "#/components/responses/ServerError" - } - } - } - }, - "/processes/{processID}": { - "get": { - "summary": "retrieve a process description", - "description": "The process description contains information about inputs and outputs and a link to the execution-endpoint for the process. The Core does not mandate the use of a specific process description to specify the interface of a process. That said, the Core requirements class makes the following recommendation:\n\nImplementations SHOULD consider supporting the OGC process description.\n\nFor more information, see [Section 7.8](https://docs.ogc.org/is/18-062r2/18-062r2.html#sc_process_description).\n", - "operationId": "getProcessDescription", - "tags": [ - "Processes" - ], - "parameters": [ - { - "$ref": "#/components/parameters/processID-path" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ProcessDescription" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "put": { - "summary": "replace a process.", - "description": "Replaces a process.\n\nFor more information, see [Section 6.4](http://docs.ogc.org/DRAFTS/20-044.html#_18582f42-ebc6-4284-9333-c089068f62b6).\n", - "operationId": "replace", - "tags": [ - "DRU" - ], - "parameters": [ - { - "$ref": "#/components/parameters/processID-path" - } - ], - "requestBody": { - "description": "An OGC Application Package used to deploy a new process.", - "required": true, - "content": { - "application/ogcapppkg+json": { - "schema": { - "$ref": "#/components/schemas/ogcapppkg" - } - }, - "application/cwl": { - "schema": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema" - } - }, - "application/cwl+json": { - "schema": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema" - } - }, - "application/cwl+yaml": { - "schema": { - "$ref": "#/paths/~1processes/post/requestBody/content/application~1cwl/schema" - } - } - } - }, - "responses": { - "204": { - "$ref": "#/components/responses/EmptyResponse" - }, - "403": { - "$ref": "#/components/responses/ImmutableProcess" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "$ref": "#/components/responses/DuplicateProcess" - }, - "500": { - "$ref": "#/components/responses/ServerError" - } - } - }, - "delete": { - "summary": "undeploy a process.", - "description": "Undeploys a process.\n\nFor more information, see [Section 6.5](http://docs.ogc.org/DRAFTS/20-044.html#_16391f9e-538f-4a84-9710-72a6bab82842).\n", - "operationId": "undeploy", - "tags": [ - "DRU" - ], - "parameters": [ - { - "$ref": "#/components/parameters/processID-path" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/EmptyResponse" - }, - "403": { - "$ref": "#/components/responses/ImmutableProcess" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/ServerError" - } - } - } - }, - "/processes/{processID}/package": { - "get": { - "summary": "retrieve the formal description used to deploy a process", - "description": "Access the formal description that can be used to deploy a process on an OGC API - Processes Server Instance.\n", - "operationId": "getPackage", - "tags": [ - "DRU" - ], - "parameters": [ - { - "$ref": "#/components/parameters/processID-path" - } - ], - "responses": { - "200": { - "description": "The formal used to deploy a process", - "content": { - "application/ogcapppkg+json": { - "schema": { - "$ref": "#/components/schemas/ogcapppkg" - } - }, - "application/cwl": { - "schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "CommandInputArraySchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#CommandInputArraySchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "inputBinding": { - "$ref": "#/definitions/CommandLineBinding", - "description": "Describes how to turn this object into command line arguments." - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Defines the type of the array elements." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "type": { - "const": "array", - "description": "Must be `array`", - "type": "string" - } - }, - "required": [ - "items", - "type" - ], - "type": "object" - }, - "CommandInputEnumSchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#CommandInputEnumSchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "inputBinding": { - "$ref": "#/definitions/CommandLineBinding", - "description": "Describes how to turn this object into command line arguments." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "symbols": { - "description": "Defines the set of valid symbols.", - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "const": "enum", - "description": "Must be `enum`", - "type": "string" - } - }, - "required": [ - "symbols", - "type" - ], - "type": "object" - }, - "CommandInputParameter": { - "additionalProperties": false, - "description": "An input parameter for a CommandLineTool.", - "properties": { - "default": { - "description": "The default value to use for this parameter if the parameter is missing\nfrom the input object, or if the value of the parameter in the input\nobject is `null`. Default values are applied before evaluating expressions\n(e.g. dependent `valueFrom` fields)." - }, - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis must be one or more IRIs of concept nodes\nthat represents file formats which are allowed as input to this\nparameter, preferably defined within an ontology. If no ontology is\navailable, file formats may be tested by exact match." - }, - "id": { - "description": "The unique identifier for this object.", - "type": "string" - }, - "inputBinding": { - "$ref": "#/definitions/CommandLineBinding", - "description": "Describes how to turn the input parameters of a process into\ncommand line arguments." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "loadContents": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nIf true, the file (or each file in the array) must be a UTF-8\ntext file 64 KiB or smaller, and the implementation must read\nthe entire contents of the file (or file array) and place it\nin the `contents` field of the File object for use by\nexpressions. If the size of the file is greater than 64 KiB,\nthe implementation must raise a fatal error.", - "type": "boolean" - }, - "loadListing": { - "description": "Only valid when `type: Directory` or is an array of `items: Directory`.\n\nSpecify the desired behavior for loading the `listing` field of\na Directory object for use by expressions.\n\nThe order of precedence for loadListing is:\n\n 1. `loadListing` on an individual parameter\n 2. Inherited from `LoadListingRequirement`\n 3. By default: `no_listing`", - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "CommandInputRecordField": { - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#CommandInputRecordField", - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis must be one or more IRIs of concept nodes\nthat represents file formats which are allowed as input to this\nparameter, preferably defined within an ontology. If no ontology is\navailable, file formats may be tested by exact match." - }, - "inputBinding": { - "$ref": "#/definitions/CommandLineBinding", - "description": "Describes how to turn this object into command line arguments." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "loadContents": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nIf true, the file (or each file in the array) must be a UTF-8\ntext file 64 KiB or smaller, and the implementation must read\nthe entire contents of the file (or file array) and place it\nin the `contents` field of the File object for use by\nexpressions. If the size of the file is greater than 64 KiB,\nthe implementation must raise a fatal error.", - "type": "boolean" - }, - "loadListing": { - "description": "Only valid when `type: Directory` or is an array of `items: Directory`.\n\nSpecify the desired behavior for loading the `listing` field of\na Directory object for use by expressions.\n\nThe order of precedence for loadListing is:\n\n 1. `loadListing` on an individual parameter\n 2. Inherited from `LoadListingRequirement`\n 3. By default: `no_listing`", - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" - }, - "name": { - "description": "The name of the field", - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - }, - "required": [ - "name", - "type" - ], - "type": "object" - }, - { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - } - ] - }, - "CommandInputRecordSchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#CommandInputRecordSchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "fields": { - "description": "Defines the fields of the record.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/CommandInputRecordField" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "$ref": "#/definitions/CommandInputRecordFieldMap" - } - }, - "type": "object" - } - ] - }, - "inputBinding": { - "$ref": "#/definitions/CommandLineBinding", - "description": "Describes how to turn this object into command line arguments." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "type": { - "const": "record", - "description": "Must be `record`", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "CommandLineBinding": { - "additionalProperties": false, - "description": "When listed under `inputBinding` in the input schema, the term\n\"value\" refers to the corresponding value in the input object. For\nbinding objects listed in `CommandLineTool.arguments`, the term \"value\"\nrefers to the effective value after evaluating `valueFrom`.\n\nThe binding behavior when building the command line depends on the data\ntype of the value. If there is a mismatch between the type described by\nthe input schema and the effective value, such as resulting from an\nexpression evaluation, an implementation must use the data type of the\neffective value.\n\n - **string**: Add `prefix` and the string to the command line.\n\n - **number**: Add `prefix` and decimal representation to command line.\n\n - **boolean**: If true, add `prefix` to the command line. If false, add\n nothing.\n\n - **File**: Add `prefix` and the value of\n [`File.path`](#File) to the command line.\n\n - **Directory**: Add `prefix` and the value of\n [`Directory.path`](#Directory) to the command line.\n\n - **array**: If `itemSeparator` is specified, add `prefix` and the join\n the array into a single string with `itemSeparator` separating the\n items. Otherwise, first add `prefix`, then recursively process\n individual elements.\n If the array is empty, it does not add anything to command line.\n\n - **object**: Add `prefix` only, and recursively add object fields for\n which `inputBinding` is specified.\n\n - **null**: Add nothing.", - "properties": { - "itemSeparator": { - "description": "Join the array elements into a single string with the elements\nseparated by `itemSeparator`.", - "type": "string" - }, - "loadContents": { - "description": "Use of `loadContents` in `InputBinding` is deprecated.\nPreserved for v1.0 backwards compatibility. Will be removed in\nCWL v2.0. Use `InputParameter.loadContents` instead.", - "type": "boolean" - }, - "position": { - "description": "The sorting key. Default position is 0. If a [CWL Parameter Reference](#Parameter_references)\nor [CWL Expression](#Expressions_(Optional)) is used and if the\ninputBinding is associated with an input parameter, then the value of\n`self` will be the value of the input parameter. Input parameter\ndefaults (as specified by the `InputParameter.default` field) must be\napplied before evaluating the expression. Expressions must return a\nsingle value of type int or a null.", - "type": [ - "string", - "number" - ] - }, - "prefix": { - "description": "Command line prefix to add before the value.", - "type": "string" - }, - "separate": { - "description": "If true (default), then the prefix and value must be added as separate\ncommand line arguments; if false, prefix and value must be concatenated\ninto a single command line argument.", - "type": "boolean" - }, - "shellQuote": { - "description": "If `ShellCommandRequirement` is in the requirements for the current command,\nthis controls whether the value is quoted on the command line (default is true).\nUse `shellQuote: false` to inject metacharacters for operations such as pipes.\n\nIf `shellQuote` is true or not provided, the implementation must not\npermit interpretation of any shell metacharacters or directives.", - "type": "boolean" - }, - "valueFrom": { - "description": "If `valueFrom` is a constant string value, use this as the value and\napply the binding rules above.\n\nIf `valueFrom` is an expression, evaluate the expression to yield the\nactual value to use to build the command line and apply the binding\nrules above. If the inputBinding is associated with an input\nparameter, the value of `self` in the expression will be the value of\nthe input parameter. Input parameter defaults (as specified by the\n`InputParameter.default` field) must be applied before evaluating the\nexpression.\n\nIf the value of the associated input parameter is `null`, `valueFrom` is\nnot evaluated and nothing is added to the command line.\n\nWhen a binding is part of the `CommandLineTool.arguments` field,\nthe `valueFrom` field is required.", - "type": "string" - } - }, - "required": [], - "type": "object" - }, - "CommandLineTool": { - "description": "This defines the schema of the CWL Command Line Tool Description document.", - "properties": { - "arguments": { - "description": "Command line bindings which are not directly associated with input\nparameters. If the value is a string, it is used as a string literal\nargument. If it is an Expression, the result of the evaluation is used\nas an argument.", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandLineBinding" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - "baseCommand": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specifies the program to execute. If an array, the first element of\nthe array is the command to execute, and subsequent elements are\nmandatory command line arguments. The elements in `baseCommand` must\nappear before any command line bindings from `inputBinding` or\n`arguments`.\n\nIf `baseCommand` is not provided or is an empty array, the first\nelement of the command line produced after processing `inputBinding` or\n`arguments` must be used as the program to execute.\n\nIf the program includes a path separator character it must\nbe an absolute path, otherwise it is an error. If the program does not\ninclude a path separator, search the `$PATH` variable in the runtime\nenvironment of the workflow runner find the absolute path of the\nexecutable." - }, - "class": { - "const": "CommandLineTool", - "type": "string" - }, - "cwlVersion": { - "description": "CWL document version. Always required at the document root. Not\nrequired for a Process embedded inside another Process.", - "enum": [ - "draft-2", - "draft-3", - "draft-3.dev1", - "draft-3.dev2", - "draft-3.dev3", - "draft-3.dev4", - "draft-3.dev5", - "draft-4.dev1", - "draft-4.dev2", - "draft-4.dev3", - "v1.0", - "v1.0.dev4", - "v1.1", - "v1.1.0-dev1", - "v1.2", - "v1.2.0-dev1", - "v1.2.0-dev2", - "v1.2.0-dev3", - "v1.2.0-dev4", - "v1.2.0-dev5" - ], - "type": "string" - }, - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "hints": { - "description": "Declares requirements that apply to either the runtime environment or the\nworkflow engine that must be met in order to execute this process. If\nan implementation cannot satisfy all requirements, or a requirement is\nlisted which is not recognized by the implementation, it is a fatal\nerror and the implementation must not attempt to run the process,\nunless overridden at user option.", - "oneOf": [ - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - }, - { - "$ref": "#/definitions/InlineJavascriptRequirement" - }, - { - "$ref": "#/definitions/SchemaDefRequirement" - }, - { - "$ref": "#/definitions/LoadListingRequirement" - }, - { - "$ref": "#/definitions/DockerRequirement" - }, - { - "$ref": "#/definitions/SoftwareRequirement" - }, - { - "$ref": "#/definitions/InitialWorkDirRequirement" - }, - { - "$ref": "#/definitions/EnvVarRequirement" - }, - { - "$ref": "#/definitions/ShellCommandRequirement" - }, - { - "$ref": "#/definitions/ResourceRequirement" - }, - { - "$ref": "#/definitions/WorkReuse" - }, - { - "$ref": "#/definitions/NetworkAccess" - }, - { - "$ref": "#/definitions/InplaceUpdateRequirement" - }, - { - "$ref": "#/definitions/ToolTimeLimit" - }, - { - "$ref": "#/definitions/SubworkflowFeatureRequirement" - }, - { - "$ref": "#/definitions/ScatterFeatureRequirement" - }, - { - "$ref": "#/definitions/MultipleInputFeatureRequirement" - }, - { - "$ref": "#/definitions/StepInputExpressionRequirement" - } - ] - }, - "type": "array" - }, - { - "type": "object", - "properties": { - "InlineJavascriptRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InlineJavascriptRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SchemaDefRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SchemaDefRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "LoadListingRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/LoadListingRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "DockerRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/DockerRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SoftwareRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwareRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InitialWorkDirRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InitialWorkDirRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "EnvVarRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/EnvVarRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ShellCommandRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ShellCommandRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ResourceRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ResourceRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "WorkReuse": { - "anyOf": [ - { - "$ref": "#/definitions/WorkReuseMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "NetworkAccess": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkAccessMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InplaceUpdateRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InplaceUpdateRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ToolTimeLimit": { - "anyOf": [ - { - "$ref": "#/definitions/ToolTimeLimitMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SubworkflowFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SubworkflowFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ScatterFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ScatterFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "MultipleInputFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/MultipleInputFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "StepInputExpressionRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/StepInputExpressionRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "additionalProperties": false - } - ] - }, - "id": { - "description": "The unique identifier for this object.\n\nOnly useful for `$graph` at `Process` level. Should not be exposed\nto users in graphical or terminal user interfaces.", - "type": "string" - }, - "inputs": { - "description": "Defines the input parameters of the process. The process is ready to\nrun when all required input parameters are associated with concrete\nvalues. Input parameters include a schema for each parameter which is\nused to validate the input object. It may also be used to build a user\ninterface for constructing the input object.\n\nWhen accepting an input object, all input parameters must have a value.\nIf an input parameter is missing from the input object, it must be\nassigned a value of `null` (or the value of `default` for that\nparameter, if provided) for the purposes of validation and evaluation\nof expressions.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/CommandInputParameter" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "oneOf": [ - { - "$ref": "#/definitions/CommandInputParameter" - }, - { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/CommandInputParameter" - } - ] - } - } - ] - } - }, - "type": "object" - } - ] - }, - "intent": { - "description": "An identifier for the type of computational operation, of this Process.\nEspecially useful for [`Operation`](Workflow.html#Operation), but can also be used for\n[`CommandLineTool`](CommandLineTool.html#CommandLineTool),\n[`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).\n\nIf provided, then this must be an IRI of a concept node that\nrepresents the type of operation, preferably defined within an ontology.\n\nFor example, in the domain of bioinformatics, one can use an IRI from\nthe EDAM Ontology's [Operation concept nodes](http://edamontology.org/operation_0004),\nlike [Alignment](http://edamontology.org/operation_2928),\nor [Clustering](http://edamontology.org/operation_3432); or a more\nspecific Operation concept like\n[Split read mapping](http://edamontology.org/operation_3199).", - "items": { - "type": "string" - }, - "type": "array" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "outputs": { - "description": "Defines the parameters representing the output of the process. May be\nused to generate and/or validate the output object.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/CommandOutputParameter" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "oneOf": [ - { - "$ref": "#/definitions/CommandOutputParameter" - }, - { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/CommandOutputParameter" - } - ] - } - } - ] - } - }, - "type": "object" - } - ] - }, - "permanentFailCodes": { - "description": "Exit codes that indicate the process failed due to a permanent logic error, where executing the process with the same runtime environment and same inputs is expected to always fail.\nIf not specified, all exit codes except 0 are considered permanent failure.", - "items": { - "type": "number" - }, - "type": "array" - }, - "requirements": { - "description": "Declares requirements that apply to either the runtime environment or the\nworkflow engine that must be met in order to execute this process. If\nan implementation cannot satisfy all requirements, or a requirement is\nlisted which is not recognized by the implementation, it is a fatal\nerror and the implementation must not attempt to run the process,\nunless overridden at user option.", - "oneOf": [ - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - }, - { - "$ref": "#/definitions/InlineJavascriptRequirement" - }, - { - "$ref": "#/definitions/SchemaDefRequirement" - }, - { - "$ref": "#/definitions/LoadListingRequirement" - }, - { - "$ref": "#/definitions/DockerRequirement" - }, - { - "$ref": "#/definitions/SoftwareRequirement" - }, - { - "$ref": "#/definitions/InitialWorkDirRequirement" - }, - { - "$ref": "#/definitions/EnvVarRequirement" - }, - { - "$ref": "#/definitions/ShellCommandRequirement" - }, - { - "$ref": "#/definitions/ResourceRequirement" - }, - { - "$ref": "#/definitions/WorkReuse" - }, - { - "$ref": "#/definitions/NetworkAccess" - }, - { - "$ref": "#/definitions/InplaceUpdateRequirement" - }, - { - "$ref": "#/definitions/ToolTimeLimit" - }, - { - "$ref": "#/definitions/SubworkflowFeatureRequirement" - }, - { - "$ref": "#/definitions/ScatterFeatureRequirement" - }, - { - "$ref": "#/definitions/MultipleInputFeatureRequirement" - }, - { - "$ref": "#/definitions/StepInputExpressionRequirement" - } - ] - }, - "type": "array" - }, - { - "type": "object", - "properties": { - "InlineJavascriptRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InlineJavascriptRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SchemaDefRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SchemaDefRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "LoadListingRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/LoadListingRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "DockerRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/DockerRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SoftwareRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwareRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InitialWorkDirRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InitialWorkDirRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "EnvVarRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/EnvVarRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ShellCommandRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ShellCommandRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ResourceRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ResourceRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "WorkReuse": { - "anyOf": [ - { - "$ref": "#/definitions/WorkReuseMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "NetworkAccess": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkAccessMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InplaceUpdateRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InplaceUpdateRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ToolTimeLimit": { - "anyOf": [ - { - "$ref": "#/definitions/ToolTimeLimitMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SubworkflowFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SubworkflowFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ScatterFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ScatterFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "MultipleInputFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/MultipleInputFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "StepInputExpressionRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/StepInputExpressionRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "additionalProperties": false - } - ] - }, - "stderr": { - "description": "Capture the command's standard error stream to a file written to\nthe designated output directory.\n\nIf `stderr` is a string, it specifies the file name to use.\n\nIf `stderr` is an expression, the expression is evaluated and must\nreturn a string with the file name to use to capture stderr. If the\nreturn value is not a string, or the resulting path contains illegal\ncharacters (such as the path separator `/`) it is an error.", - "type": "string" - }, - "stdin": { - "description": "A path to a file whose contents must be piped into the command's\nstandard input stream.", - "type": "string" - }, - "stdout": { - "description": "Capture the command's standard output stream to a file written to\nthe designated output directory.\n\nIf the `CommandLineTool` contains logically chained commands\n(e.g. `echo a && echo b`) `stdout` must include the output of\nevery command.\n\nIf `stdout` is a string, it specifies the file name to use.\n\nIf `stdout` is an expression, the expression is evaluated and must\nreturn a string with the file name to use to capture stdout. If the\nreturn value is not a string, or the resulting path contains illegal\ncharacters (such as the path separator `/`) it is an error.", - "type": "string" - }, - "successCodes": { - "description": "Exit codes that indicate the process completed successfully.\n\nIf not specified, only exit code 0 is considered success.", - "items": { - "type": "number" - }, - "type": "array" - }, - "temporaryFailCodes": { - "description": "Exit codes that indicate the process failed due to a possibly\ntemporary condition, where executing the process with the same\nruntime environment and inputs may produce different results.\n\nIf not specified, no exit codes are considered temporary failure.", - "items": { - "type": "number" - }, - "type": "array" - } - }, - "required": [ - "class", - "inputs", - "outputs" - ], - "type": "object" - }, - "CommandOutputArraySchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#CommandOutputArraySchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Defines the type of the array elements." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "type": { - "const": "array", - "description": "Must be `array`", - "type": "string" - } - }, - "required": [ - "items", - "type" - ], - "type": "object" - }, - "CommandOutputBinding": { - "additionalProperties": false, - "description": "Describes how to generate an output parameter based on the files produced\nby a CommandLineTool.\n\nThe output parameter value is generated by applying these operations in the\nfollowing order:\n\n - glob\n - loadContents\n - outputEval\n - secondaryFiles", - "properties": { - "glob": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Find files or directories relative to the output directory, using POSIX\nglob(3) pathname matching. If an array is provided, find files or\ndirectories that match any pattern in the array. If an expression is\nprovided, the expression must return a string or an array of strings,\nwhich will then be evaluated as one or more glob patterns. Must only\nmatch and return files/directories which actually exist.\n\nIf the value of glob is a relative path pattern (does not\nbegin with a slash '/') then it is resolved relative to the\noutput directory. If the value of the glob is an absolute\npath pattern (it does begin with a slash '/') then it must\nrefer to a path within the output directory. It is an error\nif any glob resolves to a path outside the output directory.\nSpecifically this means globs that resolve to paths outside the output\ndirectory are illegal.\n\nA glob may match a path within the output directory which is\nactually a symlink to another file. In this case, the\nexpected behavior is for the resulting File/Directory object to take the\n`basename` (and corresponding `nameroot` and `nameext`) of the\nsymlink. The `location` of the File/Directory is implementation\ndependent, but logically the File/Directory should have the same content\nas the symlink target. Platforms may stage output files/directories to\ncloud storage that lack the concept of a symlink. In\nthis case file content and directories may be duplicated, or (to avoid\nduplication) the File/Directory `location` may refer to the symlink\ntarget.\n\nIt is an error if a symlink in the output directory (or any\nsymlink in a chain of links) refers to any file or directory\nthat is not under an input or output directory.\n\nImplementations may shut down a container before globbing\noutput, so globs and expressions must not assume access to the\ncontainer filesystem except for declared input and output." - }, - "loadContents": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nIf true, the file (or each file in the array) must be a UTF-8\ntext file 64 KiB or smaller, and the implementation must read\nthe entire contents of the file (or file array) and place it\nin the `contents` field of the File object for use by\nexpressions. If the size of the file is greater than 64 KiB,\nthe implementation must raise a fatal error.", - "type": "boolean" - }, - "loadListing": { - "description": "Only valid when `type: Directory` or is an array of `items: Directory`.\n\nSpecify the desired behavior for loading the `listing` field of\na Directory object for use by expressions.\n\nThe order of precedence for loadListing is:\n\n 1. `loadListing` on an individual parameter\n 2. Inherited from `LoadListingRequirement`\n 3. By default: `no_listing`", - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" - }, - "outputEval": { - "description": "Evaluate an expression to generate the output value. If\n`glob` was specified, the value of `self` must be an array\ncontaining file objects that were matched. If no files were\nmatched, `self` must be a zero length array; if a single file\nwas matched, the value of `self` is an array of a single\nelement. The exit code of the process is\navailable in the expression as `runtime.exitCode`.\n\nAdditionally, if `loadContents` is true, the file must be a\nUTF-8 text file 64 KiB or smaller, and the implementation must\nread the entire contents of the file (or file array) and place\nit in the `contents` field of the File object for use in\n`outputEval`. If the size of the file is greater than 64 KiB,\nthe implementation must raise a fatal error.\n\nIf a tool needs to return a large amount of structured data to\nthe workflow, loading the output object from `cwl.output.json`\nbypasses `outputEval` and is not subject to the 64 KiB\n`loadContents` limit.", - "type": "string" - } - }, - "required": [], - "type": "object" - }, - "CommandOutputEnumSchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#CommandOutputEnumSchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "symbols": { - "description": "Defines the set of valid symbols.", - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "const": "enum", - "description": "Must be `enum`", - "type": "string" - } - }, - "required": [ - "symbols", - "type" - ], - "type": "object" - }, - "CommandOutputParameter": { - "additionalProperties": false, - "description": "An output parameter for a CommandLineTool.", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis is the file format that will be assigned to the output\nFile object.", - "type": "string" - }, - "id": { - "description": "The unique identifier for this object.", - "type": "string" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "outputBinding": { - "$ref": "#/definitions/CommandOutputBinding", - "description": "Describes how to generate this output object based on the files produced by a CommandLineTool" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "CommandOutputRecordField": { - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#CommandOutputRecordField", - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis is the file format that will be assigned to the output\nFile object.", - "type": "string" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The name of the field", - "type": "string" - }, - "outputBinding": { - "$ref": "#/definitions/CommandOutputBinding", - "description": "Describes how to generate this output object based on the files\nproduced by a CommandLineTool" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - }, - "required": [ - "name", - "type" - ], - "type": "object" - }, - { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - } - ] - }, - "CommandOutputRecordSchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#CommandOutputRecordSchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "fields": { - "description": "Defines the fields of the record.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/CommandOutputRecordField" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "$ref": "#/definitions/CommandOutputRecordFieldMap" - } - }, - "type": "object" - } - ] - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "type": { - "const": "record", - "description": "Must be `record`", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "DefaultFetcher": { - "additionalProperties": false, - "type": "object" - }, - "Dictionary": { - "additionalProperties": { - "$ref": "#/definitions/T" - }, - "type": "object" - }, - "Dictionary": { - "additionalProperties": { - "$ref": "#/definitions/T" - }, - "type": "object" - }, - "Directory": { - "additionalProperties": false, - "description": "Represents a directory to present to a command line tool.\n\nDirectories are represented as objects with `class` of `Directory`. Directory objects have\na number of properties that provide metadata about the directory.\n\nThe `location` property of a Directory is a IRI that uniquely identifies\nthe directory. Implementations must support the file:// IRI scheme and may\nsupport other schemes such as http://. Alternately to `location`,\nimplementations must also accept the `path` property on Directory, which\nmust be a filesystem path available on the same host as the CWL runner (for\ninputs) or the runtime environment of a command line tool execution (for\ncommand line tool outputs).\n\nA Directory object may have a `listing` field. This is a list of File and\nDirectory objects that are contained in the Directory. For each entry in\n`listing`, the `basename` property defines the name of the File or\nSubdirectory when staged to disk. If `listing` is not provided, the\nimplementation must have some way of fetching the Directory listing at\nruntime based on the `location` field.\n\nIf a Directory does not have `location`, it is a Directory literal. A\nDirectory literal must provide `listing`. Directory literals must be\ncreated on disk at runtime as needed.\n\nThe resources in a Directory literal do not need to have any implied\nrelationship in their `location`. For example, a Directory listing may\ncontain two files located on different hosts. It is the responsibility of\nthe runtime to ensure that those files are staged to disk appropriately.\nSecondary files associated with files in `listing` must also be staged to\nthe same Directory.\n\nWhen executing a CommandLineTool, Directories must be recursively staged\nfirst and have local values of `path` assigned.\n\nDirectory objects in CommandLineTool output must provide either a\n`location` IRI or a `path` property in the context of the tool execution\nruntime (local to the compute node, or within the executing container).\n\nAn ExpressionTool may forward file references from input to output by using\nthe same value for `location`.\n\nName conflicts (the same `basename` appearing multiple times in `listing`\nor in any entry in `secondaryFiles` in the listing) is a fatal error.", - "properties": { - "basename": { - "description": "The base name of the directory, that is, the name of the file without any\nleading directory path. The base name must not contain a slash `/`.\n\nIf not provided, the implementation must set this field based on the\n`location` field by taking the final path component after parsing\n`location` as an IRI. If `basename` is provided, it is not required to\nmatch the value from `location`.\n\nWhen this file is made available to a CommandLineTool, it must be named\nwith `basename`, i.e. the final component of the `path` field must match\n`basename`.", - "type": "string" - }, - "class": { - "const": "Directory", - "description": "Must be `Directory` to indicate this object describes a Directory.", - "type": "string" - }, - "listing": { - "description": "List of files or subdirectories contained in this directory. The name\nof each file or subdirectory is determined by the `basename` field of\neach `File` or `Directory` object. It is an error if a `File` shares a\n`basename` with any other entry in `listing`. If two or more\n`Directory` object share the same `basename`, this must be treated as\nequivalent to a single subdirectory with the listings recursively\nmerged.", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/Directory" - }, - { - "$ref": "#/definitions/File" - } - ] - }, - "type": "array" - }, - "location": { - "description": "An IRI that identifies the directory resource. This may be a relative\nreference, in which case it must be resolved using the base IRI of the\ndocument. The location may refer to a local or remote resource. If\nthe `listing` field is not set, the implementation must use the\nlocation IRI to retrieve directory listing. If an implementation is\nunable to retrieve the directory listing stored at a remote resource (due to\nunsupported protocol, access denied, or other issue) it must signal an\nerror.\n\nIf the `location` field is not provided, the `listing` field must be\nprovided. The implementation must assign a unique identifier for\nthe `location` field.\n\nIf the `path` field is provided but the `location` field is not, an\nimplementation may assign the value of the `path` field to `location`,\nthen follow the rules above.", - "type": "string" - }, - "path": { - "description": "The local path where the Directory is made available prior to executing a\nCommandLineTool. This must be set by the implementation. This field\nmust not be used in any other context. The command line tool being\nexecuted must be able to access the directory at `path` using the POSIX\n`opendir(2)` syscall.\n\nIf the `path` contains [POSIX shell metacharacters](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02)\n(`|`,`&`, `;`, `<`, `>`, `(`,`)`, `$`,`` ` ``, `\\`, `\"`, `'`,\n``, ``, and ``) or characters\n[not allowed](http://www.iana.org/assignments/idna-tables-6.3.0/idna-tables-6.3.0.xhtml)\nfor [Internationalized Domain Names for Applications](https://tools.ietf.org/html/rfc6452)\nthen implementations may terminate the process with a\n`permanentFailure`.", - "type": "string" - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "Dirent": { - "additionalProperties": false, - "description": "Define a file or subdirectory that must be staged to a particular\nplace prior to executing the command line tool. May be the result\nof executing an expression, such as building a configuration file\nfrom a template.\n\nUsually files are staged within the [designated output directory](#Runtime_environment).\nHowever, under certain circumstances, files may be staged at\narbitrary locations, see discussion for `entryname`.", - "properties": { - "entry": { - "description": "If the value is a string literal or an expression which evaluates to a\nstring, a new text file must be created with the string as the file contents.\n\nIf the value is an expression that evaluates to a `File` or\n`Directory` object, or an array of `File` or `Directory`\nobjects, this indicates the referenced file or directory\nshould be added to the designated output directory prior to\nexecuting the tool.\n\nIf the value is an expression that evaluates to `null`,\nnothing is added to the designated output directory, the entry\nhas no effect.\n\nIf the value is an expression that evaluates to some other\narray, number, or object not consisting of `File` or\n`Directory` objects, a new file must be created with the value\nserialized to JSON text as the file contents. The JSON\nserialization behavior should match the behavior of string\ninterpolation of [Parameter\nreferences](#Parameter_references).", - "type": "string" - }, - "entryname": { - "description": "The \"target\" name of the file or subdirectory. If `entry` is\na File or Directory, the `entryname` field overrides the value\nof `basename` of the File or Directory object.\n\n* Required when `entry` evaluates to file contents only\n* Optional when `entry` evaluates to a File or Directory object with a `basename`\n* Invalid when `entry` evaluates to an array of File or Directory objects.\n\nIf `entryname` is a relative path, it specifies a name within\nthe designated output directory. A relative path starting\nwith `../` or that resolves to location above the designated output directory is an error.\n\nIf `entryname` is an absolute path (starts with a slash `/`)\nit is an error unless the following conditions are met:\n\n * `DockerRequirement` is present in `requirements`\n * The program is will run inside a software container\n where, from the perspective of the program, the root\n filesystem is not shared with any other user or\n running program.\n\nIn this case, and the above conditions are met, then\n`entryname` may specify the absolute path within the container\nwhere the file or directory must be placed.", - "type": "string" - }, - "writable": { - "description": "If true, the File or Directory (or array of Files or\nDirectories) declared in `entry` must be writable by the tool.\n\nChanges to the file or directory must be isolated and not\nvisible by any other CommandLineTool process. This may be\nimplemented by making a copy of the original file or\ndirectory.\n\nDisruptive changes to the referenced file or directory must not\nbe allowed unless `InplaceUpdateRequirement.inplaceUpdate` is true.\n\nDefault false (files and directories read-only by default).\n\nA directory marked as `writable: true` implies that all files and\nsubdirectories are recursively writable as well.\n\nIf `writable` is false, the file may be made available using a\nbind mount or file system link to avoid unnecessary copying of\nthe input file. Command line tools may receive an error on\nattempting to rename or delete files or directories that are\nnot explicitly marked as writable.", - "type": "boolean" - } - }, - "required": [ - "entry" - ], - "type": "object" - }, - "DockerRequirement": { - "additionalProperties": false, - "description": "Indicates that a workflow component should be run in a\n[Docker](https://docker.com) or Docker-compatible (such as\n[Singularity](https://www.sylabs.io/) and [udocker](https://github.com/indigo-dc/udocker)) container environment and\nspecifies how to fetch or build the image.\n\nIf a CommandLineTool lists `DockerRequirement` under\n`hints` (or `requirements`), it may (or must) be run in the specified Docker\ncontainer.\n\nThe platform must first acquire or install the correct Docker image as\nspecified by `dockerPull`, `dockerImport`, `dockerLoad` or `dockerFile`.\n\nThe platform must execute the tool in the container using `docker run` with\nthe appropriate Docker image and tool command line.\n\nThe workflow platform may provide input files and the designated output\ndirectory through the use of volume bind mounts. The platform should rewrite\nfile paths in the input object to correspond to the Docker bind mounted\nlocations. That is, the platform should rewrite values in the parameter context\nsuch as `runtime.outdir`, `runtime.tmpdir` and others to be valid paths\nwithin the container. The platform must ensure that `runtime.outdir` and\n`runtime.tmpdir` are distinct directories.\n\nWhen running a tool contained in Docker, the workflow platform must not\nassume anything about the contents of the Docker container, such as the\npresence or absence of specific software, except to assume that the\ngenerated command line represents a valid command within the runtime\nenvironment of the container.\n\nA container image may specify an\n[ENTRYPOINT](https://docs.docker.com/engine/reference/builder/#entrypoint)\nand/or\n[CMD](https://docs.docker.com/engine/reference/builder/#cmd).\nCommand line arguments will be appended after all elements of\nENTRYPOINT, and will override all elements specified using CMD (in\nother words, CMD is only used when the CommandLineTool definition\nproduces an empty command line).\n\nUse of implicit ENTRYPOINT or CMD are discouraged due to reproducibility\nconcerns of the implicit hidden execution point (For further discussion, see\n[https://doi.org/10.12688/f1000research.15140.1](https://doi.org/10.12688/f1000research.15140.1)). Portable\nCommandLineTool wrappers in which use of a container is optional must not rely on ENTRYPOINT or CMD.\nCommandLineTools which do rely on ENTRYPOINT or CMD must list `DockerRequirement` in the\n`requirements` section.\n\n## Interaction with other requirements\n\nIf [EnvVarRequirement](#EnvVarRequirement) is specified alongside a\nDockerRequirement, the environment variables must be provided to Docker\nusing `--env` or `--env-file` and interact with the container's preexisting\nenvironment as defined by Docker.", - "properties": { - "class": { - "const": "DockerRequirement", - "description": "Always 'DockerRequirement'", - "type": "string" - }, - "dockerFile": { - "description": "Supply the contents of a Dockerfile which will be built using `docker build`.", - "type": "string" - }, - "dockerImageId": { - "description": "The image id that will be used for `docker run`. May be a\nhuman-readable image name or the image identifier hash. May be skipped\nif `dockerPull` is specified, in which case the `dockerPull` image id\nmust be used.", - "type": "string" - }, - "dockerImport": { - "description": "Provide HTTP URL to download and gunzip a Docker images using `docker import.", - "type": "string" - }, - "dockerLoad": { - "description": "Specify an HTTP URL from which to download a Docker image using `docker load`.", - "type": "string" - }, - "dockerOutputDirectory": { - "description": "Set the designated output directory to a specific location inside the\nDocker container.", - "type": "string" - }, - "dockerPull": { - "description": "Specify a Docker image to retrieve using `docker pull`. Can contain the\nimmutable digest to ensure an exact container is used:\n`dockerPull: ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2`", - "type": "string" - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "EnvVarRequirement": { - "additionalProperties": false, - "description": "Define a list of environment variables which will be set in the\nexecution environment of the tool. See `EnvironmentDef` for details.", - "properties": { - "class": { - "const": "EnvVarRequirement", - "description": "Always 'EnvVarRequirement'", - "type": "string" - }, - "envDef": { - "description": "The list of environment variables.", - "oneOf": [ - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/EnvironmentDef" - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "type": "string" - } - } - } - ] - } - }, - "required": [ - "class", - "envDef" - ], - "type": "object" - }, - "EnvironmentDef": { - "additionalProperties": false, - "description": "Define an environment variable that will be set in the runtime environment\nby the workflow platform when executing the command line tool. May be the\nresult of executing an expression, such as getting a parameter from input.", - "properties": { - "envName": { - "description": "The environment variable name", - "type": "string" - }, - "envValue": { - "description": "The environment variable value", - "type": "string" - } - }, - "required": [ - "envName", - "envValue" - ], - "type": "object" - }, - "ExpressionTool": { - "description": "An ExpressionTool is a type of Process object that can be run by itself\nor as a Workflow step. It executes a pure Javascript expression that has\naccess to the same input parameters as a workflow. It is meant to be used\nsparingly as a way to isolate complex Javascript expressions that need to\noperate on input data and produce some result; perhaps just a\nrearrangement of the inputs. No Docker software container is required\nor allowed.", - "properties": { - "class": { - "const": "ExpressionTool", - "type": "string" - }, - "cwlVersion": { - "description": "CWL document version. Always required at the document root. Not\nrequired for a Process embedded inside another Process.", - "enum": [ - "draft-2", - "draft-3", - "draft-3.dev1", - "draft-3.dev2", - "draft-3.dev3", - "draft-3.dev4", - "draft-3.dev5", - "draft-4.dev1", - "draft-4.dev2", - "draft-4.dev3", - "v1.0", - "v1.0.dev4", - "v1.1", - "v1.1.0-dev1", - "v1.2", - "v1.2.0-dev1", - "v1.2.0-dev2", - "v1.2.0-dev3", - "v1.2.0-dev4", - "v1.2.0-dev5" - ], - "type": "string" - }, - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "expression": { - "description": "The expression to execute. The expression must return a plain\nJavascript object which matches the output parameters of the\nExpressionTool.", - "type": "string" - }, - "hints": { - "description": "Declares requirements that apply to either the runtime environment or the\nworkflow engine that must be met in order to execute this process. If\nan implementation cannot satisfy all requirements, or a requirement is\nlisted which is not recognized by the implementation, it is a fatal\nerror and the implementation must not attempt to run the process,\nunless overridden at user option.", - "oneOf": [ - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - }, - { - "$ref": "#/definitions/InlineJavascriptRequirement" - }, - { - "$ref": "#/definitions/SchemaDefRequirement" - }, - { - "$ref": "#/definitions/LoadListingRequirement" - }, - { - "$ref": "#/definitions/DockerRequirement" - }, - { - "$ref": "#/definitions/SoftwareRequirement" - }, - { - "$ref": "#/definitions/InitialWorkDirRequirement" - }, - { - "$ref": "#/definitions/EnvVarRequirement" - }, - { - "$ref": "#/definitions/ShellCommandRequirement" - }, - { - "$ref": "#/definitions/ResourceRequirement" - }, - { - "$ref": "#/definitions/WorkReuse" - }, - { - "$ref": "#/definitions/NetworkAccess" - }, - { - "$ref": "#/definitions/InplaceUpdateRequirement" - }, - { - "$ref": "#/definitions/ToolTimeLimit" - }, - { - "$ref": "#/definitions/SubworkflowFeatureRequirement" - }, - { - "$ref": "#/definitions/ScatterFeatureRequirement" - }, - { - "$ref": "#/definitions/MultipleInputFeatureRequirement" - }, - { - "$ref": "#/definitions/StepInputExpressionRequirement" - } - ] - }, - "type": "array" - }, - { - "type": "object", - "properties": { - "InlineJavascriptRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InlineJavascriptRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SchemaDefRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SchemaDefRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "LoadListingRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/LoadListingRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "DockerRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/DockerRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SoftwareRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwareRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InitialWorkDirRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InitialWorkDirRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "EnvVarRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/EnvVarRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ShellCommandRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ShellCommandRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ResourceRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ResourceRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "WorkReuse": { - "anyOf": [ - { - "$ref": "#/definitions/WorkReuseMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "NetworkAccess": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkAccessMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InplaceUpdateRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InplaceUpdateRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ToolTimeLimit": { - "anyOf": [ - { - "$ref": "#/definitions/ToolTimeLimitMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SubworkflowFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SubworkflowFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ScatterFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ScatterFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "MultipleInputFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/MultipleInputFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "StepInputExpressionRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/StepInputExpressionRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "additionalProperties": false - } - ] - }, - "id": { - "description": "The unique identifier for this object.\n\nOnly useful for `$graph` at `Process` level. Should not be exposed\nto users in graphical or terminal user interfaces.", - "type": "string" - }, - "inputs": { - "description": "Defines the input parameters of the process. The process is ready to\nrun when all required input parameters are associated with concrete\nvalues. Input parameters include a schema for each parameter which is\nused to validate the input object. It may also be used to build a user\ninterface for constructing the input object.\n\nWhen accepting an input object, all input parameters must have a value.\nIf an input parameter is missing from the input object, it must be\nassigned a value of `null` (or the value of `default` for that\nparameter, if provided) for the purposes of validation and evaluation\nof expressions.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/WorkflowInputParameter" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "oneOf": [ - { - "$ref": "#/definitions/WorkflowInputParameter" - }, - { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/WorkflowInputParameter" - } - ] - } - } - ] - } - }, - "type": "object" - } - ] - }, - "intent": { - "description": "An identifier for the type of computational operation, of this Process.\nEspecially useful for [`Operation`](Workflow.html#Operation), but can also be used for\n[`CommandLineTool`](CommandLineTool.html#CommandLineTool),\n[`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).\n\nIf provided, then this must be an IRI of a concept node that\nrepresents the type of operation, preferably defined within an ontology.\n\nFor example, in the domain of bioinformatics, one can use an IRI from\nthe EDAM Ontology's [Operation concept nodes](http://edamontology.org/operation_0004),\nlike [Alignment](http://edamontology.org/operation_2928),\nor [Clustering](http://edamontology.org/operation_3432); or a more\nspecific Operation concept like\n[Split read mapping](http://edamontology.org/operation_3199).", - "items": { - "type": "string" - }, - "type": "array" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "outputs": { - "description": "Defines the parameters representing the output of the process. May be\nused to generate and/or validate the output object.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/ExpressionToolOutputParameter" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "oneOf": [ - { - "$ref": "#/definitions/ExpressionToolOutputParameter" - }, - { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter.\nNote that this field just acts as a hint, as the outputs of an\nExpressionTool process are always considered valid." - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/ExpressionToolOutputParameter" - } - ] - } - } - ] - } - }, - "type": "object" - } - ] - }, - "requirements": { - "description": "Declares requirements that apply to either the runtime environment or the\nworkflow engine that must be met in order to execute this process. If\nan implementation cannot satisfy all requirements, or a requirement is\nlisted which is not recognized by the implementation, it is a fatal\nerror and the implementation must not attempt to run the process,\nunless overridden at user option.", - "oneOf": [ - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - }, - { - "$ref": "#/definitions/InlineJavascriptRequirement" - }, - { - "$ref": "#/definitions/SchemaDefRequirement" - }, - { - "$ref": "#/definitions/LoadListingRequirement" - }, - { - "$ref": "#/definitions/DockerRequirement" - }, - { - "$ref": "#/definitions/SoftwareRequirement" - }, - { - "$ref": "#/definitions/InitialWorkDirRequirement" - }, - { - "$ref": "#/definitions/EnvVarRequirement" - }, - { - "$ref": "#/definitions/ShellCommandRequirement" - }, - { - "$ref": "#/definitions/ResourceRequirement" - }, - { - "$ref": "#/definitions/WorkReuse" - }, - { - "$ref": "#/definitions/NetworkAccess" - }, - { - "$ref": "#/definitions/InplaceUpdateRequirement" - }, - { - "$ref": "#/definitions/ToolTimeLimit" - }, - { - "$ref": "#/definitions/SubworkflowFeatureRequirement" - }, - { - "$ref": "#/definitions/ScatterFeatureRequirement" - }, - { - "$ref": "#/definitions/MultipleInputFeatureRequirement" - }, - { - "$ref": "#/definitions/StepInputExpressionRequirement" - } - ] - }, - "type": "array" - }, - { - "type": "object", - "properties": { - "InlineJavascriptRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InlineJavascriptRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SchemaDefRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SchemaDefRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "LoadListingRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/LoadListingRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "DockerRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/DockerRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SoftwareRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwareRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InitialWorkDirRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InitialWorkDirRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "EnvVarRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/EnvVarRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ShellCommandRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ShellCommandRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ResourceRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ResourceRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "WorkReuse": { - "anyOf": [ - { - "$ref": "#/definitions/WorkReuseMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "NetworkAccess": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkAccessMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InplaceUpdateRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InplaceUpdateRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ToolTimeLimit": { - "anyOf": [ - { - "$ref": "#/definitions/ToolTimeLimitMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SubworkflowFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SubworkflowFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ScatterFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ScatterFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "MultipleInputFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/MultipleInputFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "StepInputExpressionRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/StepInputExpressionRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "additionalProperties": false - } - ] - } - }, - "required": [ - "class", - "expression", - "inputs", - "outputs" - ], - "type": "object" - }, - "ExpressionToolOutputParameter": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#ExpressionToolOutputParameter", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis is the file format that will be assigned to the output\nFile object.", - "type": "string" - }, - "id": { - "description": "The unique identifier for this object.", - "type": "string" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter.\nNote that this field just acts as a hint, as the outputs of an\nExpressionTool process are always considered valid." - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "Fetcher": { - "oneOf": [ - { - "$ref": "#/definitions/DefaultFetcher" - } - ] - }, - "File": { - "additionalProperties": false, - "description": "Represents a file (or group of files when `secondaryFiles` is provided) that\nwill be accessible by tools using standard POSIX file system call API such as\nopen(2) and read(2).\n\nFiles are represented as objects with `class` of `File`. File objects have\na number of properties that provide metadata about the file.\n\nThe `location` property of a File is a IRI that uniquely identifies the\nfile. Implementations must support the `file://` IRI scheme and may support\nother schemes such as `http://` and `https://`. The value of `location` may also be a\nrelative reference, in which case it must be resolved relative to the IRI\nof the document it appears in. Alternately to `location`, implementations\nmust also accept the `path` property on File, which must be a filesystem\npath available on the same host as the CWL runner (for inputs) or the\nruntime environment of a command line tool execution (for command line tool\noutputs).\n\nIf no `location` or `path` is specified, a file object must specify\n`contents` with the UTF-8 text content of the file. This is a \"file\nliteral\". File literals do not correspond to external resources, but are\ncreated on disk with `contents` with when needed for executing a tool.\nWhere appropriate, expressions can return file literals to define new files\non a runtime. The maximum size of `contents` is 64 kilobytes.\n\nThe `basename` property defines the filename on disk where the file is\nstaged. This may differ from the resource name. If not provided,\n`basename` must be computed from the last path part of `location` and made\navailable to expressions.\n\nThe `secondaryFiles` property is a list of File or Directory objects that\nmust be staged in the same directory as the primary file. It is an error\nfor file names to be duplicated in `secondaryFiles`.\n\nThe `size` property is the size in bytes of the File. It must be computed\nfrom the resource and made available to expressions. The `checksum` field\ncontains a cryptographic hash of the file content for use it verifying file\ncontents. Implementations may, at user option, enable or disable\ncomputation of the `checksum` field for performance or other reasons.\nHowever, the ability to compute output checksums is required to pass the\nCWL conformance test suite.\n\nWhen executing a CommandLineTool, the files and secondary files may be\nstaged to an arbitrary directory, but must use the value of `basename` for\nthe filename. The `path` property must be file path in the context of the\ntool execution runtime (local to the compute node, or within the executing\ncontainer). All computed properties should be available to expressions.\nFile literals also must be staged and `path` must be set.\n\nWhen collecting CommandLineTool outputs, `glob` matching returns file paths\n(with the `path` property) and the derived properties. This can all be\nmodified by `outputEval`. Alternately, if the file `cwl.output.json` is\npresent in the output, `outputBinding` is ignored.\n\nFile objects in the output must provide either a `location` IRI or a `path`\nproperty in the context of the tool execution runtime (local to the compute\nnode, or within the executing container).\n\nWhen evaluating an ExpressionTool, file objects must be referenced via\n`location` (the expression tool does not have access to files on disk so\n`path` is meaningless) or as file literals. It is legal to return a file\nobject with an existing `location` but a different `basename`. The\n`loadContents` field of ExpressionTool inputs behaves the same as on\nCommandLineTool inputs, however it is not meaningful on the outputs.\n\nAn ExpressionTool may forward file references from input to output by using\nthe same value for `location`.", - "properties": { - "basename": { - "description": "The base name of the file, that is, the name of the file without any\nleading directory path. The base name must not contain a slash `/`.\n\nIf not provided, the implementation must set this field based on the\n`location` field by taking the final path component after parsing\n`location` as an IRI. If `basename` is provided, it is not required to\nmatch the value from `location`.\n\nWhen this file is made available to a CommandLineTool, it must be named\nwith `basename`, i.e. the final component of the `path` field must match\n`basename`.", - "type": "string" - }, - "checksum": { - "description": "Optional hash code for validating file integrity. Currently, must be in the form\n\"sha1$ + hexadecimal string\" using the SHA-1 algorithm.", - "type": "string" - }, - "class": { - "const": "File", - "description": "Must be `File` to indicate this object describes a file.", - "type": "string" - }, - "contents": { - "description": "File contents literal.\n\nIf neither `location` nor `path` is provided, `contents` must be\nnon-null. The implementation must assign a unique identifier for the\n`location` field. When the file is staged as input to CommandLineTool,\nthe value of `contents` must be written to a file.\n\nIf `contents` is set as a result of a Javascript expression,\nan `entry` in `InitialWorkDirRequirement`, or read in from\n`cwl.output.json`, there is no specified upper limit on the\nsize of `contents`. Implementations may have practical limits\non the size of `contents` based on memory and storage\navailable to the workflow runner or other factors.\n\nIf the `loadContents` field of an `InputParameter` or\n`OutputParameter` is true, and the input or output File object\n`location` is valid, the file must be a UTF-8 text file 64 KiB\nor smaller, and the implementation must read the entire\ncontents of the file and place it in the `contents` field. If\nthe size of the file is greater than 64 KiB, the\nimplementation must raise a fatal error.", - "type": "string" - }, - "dirname": { - "description": "The name of the directory containing file, that is, the path leading up\nto the final slash in the path such that `dirname + '/' + basename ==\npath`.\n\nThe implementation must set this field based on the value of `path`\nprior to evaluating parameter references or expressions in a\nCommandLineTool document. This field must not be used in any other\ncontext.", - "type": "string" - }, - "format": { - "description": "The format of the file: this must be an IRI of a concept node that\nrepresents the file format, preferably defined within an ontology.\nIf no ontology is available, file formats may be tested by exact match.\n\nReasoning about format compatibility must be done by checking that an\ninput file format is the same, `owl:equivalentClass` or\n`rdfs:subClassOf` the format required by the input parameter.\n`owl:equivalentClass` is transitive with `rdfs:subClassOf`, e.g. if\n` owl:equivalentClass ` and ` owl:subclassOf ` then infer\n` owl:subclassOf `.\n\nFile format ontologies may be provided in the \"$schemas\" metadata at the\nroot of the document. If no ontologies are specified in `$schemas`, the\nruntime may perform exact file format matches.", - "type": "string" - }, - "location": { - "description": "An IRI that identifies the file resource. This may be a relative\nreference, in which case it must be resolved using the base IRI of the\ndocument. The location may refer to a local or remote resource; the\nimplementation must use the IRI to retrieve file content. If an\nimplementation is unable to retrieve the file content stored at a\nremote resource (due to unsupported protocol, access denied, or other\nissue) it must signal an error.\n\nIf the `location` field is not provided, the `contents` field must be\nprovided. The implementation must assign a unique identifier for\nthe `location` field.\n\nIf the `path` field is provided but the `location` field is not, an\nimplementation may assign the value of the `path` field to `location`,\nthen follow the rules above.", - "type": "string" - }, - "nameext": { - "description": "The basename extension such that `nameroot + nameext == basename`, and\n`nameext` is empty or begins with a period and contains at most one\nperiod. Leading periods on the basename are ignored; a basename of\n`.cshrc` will have an empty `nameext`.\n\nThe implementation must set this field automatically based on the value\nof `basename` prior to evaluating parameter references or expressions.", - "type": "string" - }, - "nameroot": { - "description": "The basename root such that `nameroot + nameext == basename`, and\n`nameext` is empty or begins with a period and contains at most one\nperiod. For the purposes of path splitting leading periods on the\nbasename are ignored; a basename of `.cshrc` will have a nameroot of\n`.cshrc`.\n\nThe implementation must set this field automatically based on the value\nof `basename` prior to evaluating parameter references or expressions.", - "type": "string" - }, - "path": { - "description": "The local host path where the File is available when a CommandLineTool is\nexecuted. This field must be set by the implementation. The final\npath component must match the value of `basename`. This field\nmust not be used in any other context. The command line tool being\nexecuted must be able to access the file at `path` using the POSIX\n`open(2)` syscall.\n\nAs a special case, if the `path` field is provided but the `location`\nfield is not, an implementation may assign the value of the `path`\nfield to `location`, and remove the `path` field.\n\nIf the `path` contains [POSIX shell metacharacters](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02)\n(`|`,`&`, `;`, `<`, `>`, `(`,`)`, `$`,`` ` ``, `\\`, `\"`, `'`,\n``, ``, and ``) or characters\n[not allowed](http://www.iana.org/assignments/idna-tables-6.3.0/idna-tables-6.3.0.xhtml)\nfor [Internationalized Domain Names for Applications](https://tools.ietf.org/html/rfc6452)\nthen implementations may terminate the process with a\n`permanentFailure`.", - "type": "string" - }, - "secondaryFiles": { - "description": "A list of additional files or directories that are associated with the\nprimary file and must be transferred alongside the primary file.\nExamples include indexes of the primary file, or external references\nwhich must be included when loading primary document. A file object\nlisted in `secondaryFiles` may itself include `secondaryFiles` for\nwhich the same rules apply.", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/Directory" - }, - { - "$ref": "#/definitions/File" - } - ] - }, - "type": "array" - }, - "size": { - "description": "Optional file size (in bytes)", - "type": "number" - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "InitialWorkDirRequirement": { - "additionalProperties": false, - "description": "Define a list of files and subdirectories that must be staged by the workflow platform prior to executing the command line tool.\nNormally files are staged within the designated output directory. However, when running inside containers, files may be staged at arbitrary locations, see discussion for [`Dirent.entryname`](#Dirent). Together with `DockerRequirement.dockerOutputDirectory` it is possible to control the locations of both input and output files when running in containers.", - "properties": { - "class": { - "const": "InitialWorkDirRequirement", - "description": "InitialWorkDirRequirement", - "type": "string" - }, - "listing": { - "anyOf": [ - { - "items": { - "anyOf": [ - { - "anyOf": [ - { - "$ref": "#/definitions/Directory" - }, - { - "$ref": "#/definitions/File" - }, - { - "items": { - "anyOf": [ - { - "anyOf": [ - { - "$ref": "#/definitions/Directory" - }, - { - "$ref": "#/definitions/File" - } - ] - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - }, - { - "$ref": "#/definitions/Dirent" - }, - { - "type": "string" - } - ] - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The list of files or subdirectories that must be staged prior\nto executing the command line tool.\n\nReturn type of each expression must validate as `[\"null\",\nFile, Directory, Dirent, {type: array, items: [File,\nDirectory]}]`.\n\nEach `File` or `Directory` that is returned by an Expression\nmust be added to the designated output directory prior to\nexecuting the tool.\n\nEach `Dirent` record that is listed or returned by an\nexpression specifies a file to be created or staged in the\ndesignated output directory prior to executing the tool.\n\nExpressions may return null, in which case they have no effect.\n\nFiles or Directories which are listed in the input parameters\nand appear in the `InitialWorkDirRequirement` listing must\nhave their `path` set to their staged location. If the same\nFile or Directory appears more than once in the\n`InitialWorkDirRequirement` listing, the implementation must\nchoose exactly one value for `path`; how this value is chosen\nis undefined." - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "InlineJavascriptRequirement": { - "additionalProperties": false, - "description": "Indicates that the workflow platform must support inline Javascript expressions.\nIf this requirement is not present, the workflow platform must not perform expression\ninterpolation.", - "properties": { - "class": { - "const": "InlineJavascriptRequirement", - "description": "Always 'InlineJavascriptRequirement'", - "type": "string" - }, - "expressionLib": { - "description": "Additional code fragments that will also be inserted\nbefore executing the expression code. Allows for function definitions that may\nbe called from CWL expressions.", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "InplaceUpdateRequirement": { - "additionalProperties": false, - "description": "If `inplaceUpdate` is true, then an implementation supporting this\nfeature may permit tools to directly update files with `writable:\ntrue` in InitialWorkDirRequirement. That is, as an optimization,\nfiles may be destructively modified in place as opposed to copied\nand updated.\n\nAn implementation must ensure that only one workflow step may\naccess a writable file at a time. It is an error if a file which\nis writable by one workflow step file is accessed (for reading or\nwriting) by any other workflow step running independently.\nHowever, a file which has been updated in a previous completed\nstep may be used as input to multiple steps, provided it is\nread-only in every step.\n\nWorkflow steps which modify a file must produce the modified file\nas output. Downstream steps which further process the file must\nuse the output of previous steps, and not refer to a common input\n(this is necessary for both ordering and correctness).\n\nWorkflow authors should provide this in the `hints` section. The\nintent of this feature is that workflows produce the same results\nwhether or not InplaceUpdateRequirement is supported by the\nimplementation, and this feature is primarily available as an\noptimization for particular environments.\n\nUsers and implementers should be aware that workflows that\ndestructively modify inputs may not be repeatable or reproducible.\nIn particular, enabling this feature implies that WorkReuse should\nnot be enabled.", - "properties": { - "class": { - "const": "InplaceUpdateRequirement", - "description": "Always 'InplaceUpdateRequirement'", - "type": "string" - }, - "inplaceUpdate": { - "type": "boolean" - } - }, - "required": [ - "class", - "inplaceUpdate" - ], - "type": "object" - }, - "InputArraySchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#InputArraySchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Defines the type of the array elements." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "type": { - "const": "array", - "description": "Must be `array`", - "type": "string" - } - }, - "required": [ - "items", - "type" - ], - "type": "object" - }, - "InputBinding": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#InputBinding", - "properties": { - "loadContents": { - "description": "Use of `loadContents` in `InputBinding` is deprecated.\nPreserved for v1.0 backwards compatibility. Will be removed in\nCWL v2.0. Use `InputParameter.loadContents` instead.", - "type": "boolean" - } - }, - "required": [], - "type": "object" - }, - "InputEnumSchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#InputEnumSchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "symbols": { - "description": "Defines the set of valid symbols.", - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "const": "enum", - "description": "Must be `enum`", - "type": "string" - } - }, - "required": [ - "symbols", - "type" - ], - "type": "object" - }, - "InputRecordField": { - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#InputRecordField", - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis must be one or more IRIs of concept nodes\nthat represents file formats which are allowed as input to this\nparameter, preferably defined within an ontology. If no ontology is\navailable, file formats may be tested by exact match." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "loadContents": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nIf true, the file (or each file in the array) must be a UTF-8\ntext file 64 KiB or smaller, and the implementation must read\nthe entire contents of the file (or file array) and place it\nin the `contents` field of the File object for use by\nexpressions. If the size of the file is greater than 64 KiB,\nthe implementation must raise a fatal error.", - "type": "boolean" - }, - "loadListing": { - "description": "Only valid when `type: Directory` or is an array of `items: Directory`.\n\nSpecify the desired behavior for loading the `listing` field of\na Directory object for use by expressions.\n\nThe order of precedence for loadListing is:\n\n 1. `loadListing` on an individual parameter\n 2. Inherited from `LoadListingRequirement`\n 3. By default: `no_listing`", - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" - }, - "name": { - "description": "The name of the field", - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - }, - "required": [ - "name", - "type" - ], - "type": "object" - }, - { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - } - ] - }, - "InputRecordSchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#InputRecordSchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "fields": { - "description": "Defines the fields of the record.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/InputRecordField" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "$ref": "#/definitions/InputRecordFieldMap" - } - }, - "type": "object" - } - ] - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "type": { - "const": "record", - "description": "Must be `record`", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "LoadListingRequirement": { - "additionalProperties": false, - "description": "Specify the desired behavior for loading the `listing` field of\na Directory object for use by expressions.", - "properties": { - "class": { - "const": "LoadListingRequirement", - "description": "Always 'LoadListingRequirement'", - "type": "string" - }, - "loadListing": { - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "LoadingOptions": { - "additionalProperties": false, - "properties": { - "container": { - "type": "string" - }, - "copyFrom": { - "$ref": "#/definitions/LoadingOptions" - }, - "fetcher": { - "$ref": "#/definitions/Fetcher" - }, - "fileUri": { - "type": "string" - }, - "idx": { - "$ref": "#/definitions/Dictionary" - }, - "namespaces": { - "$ref": "#/definitions/Dictionary" - }, - "noLinkCheck": { - "type": "boolean" - }, - "originalDoc": {}, - "rvocab": { - "$ref": "#/definitions/Dictionary" - }, - "schemas": { - "$ref": "#/definitions/Dictionary" - }, - "vocab": { - "$ref": "#/definitions/Dictionary" - } - }, - "required": [ - "fetcher", - "idx", - "originalDoc", - "rvocab", - "vocab" - ], - "type": "object" - }, - "MultipleInputFeatureRequirement": { - "additionalProperties": false, - "description": "Indicates that the workflow platform must support multiple inbound data links\nlisted in the `source` field of [WorkflowStepInput](#WorkflowStepInput).", - "properties": { - "class": { - "const": "MultipleInputFeatureRequirement", - "description": "Always 'MultipleInputFeatureRequirement'", - "type": "string" - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "NetworkAccess": { - "additionalProperties": false, - "description": "Indicate whether a process requires outgoing IPv4/IPv6 network\naccess. Choice of IPv4 or IPv6 is implementation and site\nspecific, correct tools must support both.\n\nIf `networkAccess` is false or not specified, tools must not\nassume network access, except for localhost (the loopback device).\n\nIf `networkAccess` is true, the tool must be able to make outgoing\nconnections to network resources. Resources may be on a private\nsubnet or the public Internet. However, implementations and sites\nmay apply their own security policies to restrict what is\naccessible by the tool.\n\nEnabling network access does not imply a publicly routable IP\naddress or the ability to accept inbound connections.", - "properties": { - "class": { - "const": "NetworkAccess", - "description": "Always 'NetworkAccess'", - "type": "string" - }, - "networkAccess": { - "type": [ - "string", - "boolean" - ] - } - }, - "required": [ - "class", - "networkAccess" - ], - "type": "object" - }, - "Operation": { - "additionalProperties": false, - "description": "This record describes an abstract operation. It is a potential\nstep of a workflow that has not yet been bound to a concrete\nimplementation. It specifies an input and output signature, but\ndoes not provide enough information to be executed. An\nimplementation (or other tooling) may provide a means of binding\nan Operation to a concrete process (such as Workflow,\nCommandLineTool, or ExpressionTool) with a compatible signature.", - "properties": { - "class": { - "const": "Operation", - "type": "string" - }, - "cwlVersion": { - "description": "CWL document version. Always required at the document root. Not\nrequired for a Process embedded inside another Process.", - "enum": [ - "draft-2", - "draft-3", - "draft-3.dev1", - "draft-3.dev2", - "draft-3.dev3", - "draft-3.dev4", - "draft-3.dev5", - "draft-4.dev1", - "draft-4.dev2", - "draft-4.dev3", - "v1.0", - "v1.0.dev4", - "v1.1", - "v1.1.0-dev1", - "v1.2", - "v1.2.0-dev1", - "v1.2.0-dev2", - "v1.2.0-dev3", - "v1.2.0-dev4", - "v1.2.0-dev5" - ], - "type": "string" - }, - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "hints": { - "description": "Declares requirements that apply to either the runtime environment or the\nworkflow engine that must be met in order to execute this process. If\nan implementation cannot satisfy all requirements, or a requirement is\nlisted which is not recognized by the implementation, it is a fatal\nerror and the implementation must not attempt to run the process,\nunless overridden at user option.", - "oneOf": [ - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - }, - { - "$ref": "#/definitions/InlineJavascriptRequirement" - }, - { - "$ref": "#/definitions/SchemaDefRequirement" - }, - { - "$ref": "#/definitions/LoadListingRequirement" - }, - { - "$ref": "#/definitions/DockerRequirement" - }, - { - "$ref": "#/definitions/SoftwareRequirement" - }, - { - "$ref": "#/definitions/InitialWorkDirRequirement" - }, - { - "$ref": "#/definitions/EnvVarRequirement" - }, - { - "$ref": "#/definitions/ShellCommandRequirement" - }, - { - "$ref": "#/definitions/ResourceRequirement" - }, - { - "$ref": "#/definitions/WorkReuse" - }, - { - "$ref": "#/definitions/NetworkAccess" - }, - { - "$ref": "#/definitions/InplaceUpdateRequirement" - }, - { - "$ref": "#/definitions/ToolTimeLimit" - }, - { - "$ref": "#/definitions/SubworkflowFeatureRequirement" - }, - { - "$ref": "#/definitions/ScatterFeatureRequirement" - }, - { - "$ref": "#/definitions/MultipleInputFeatureRequirement" - }, - { - "$ref": "#/definitions/StepInputExpressionRequirement" - } - ] - }, - "type": "array" - }, - { - "type": "object", - "properties": { - "InlineJavascriptRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InlineJavascriptRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SchemaDefRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SchemaDefRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "LoadListingRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/LoadListingRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "DockerRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/DockerRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SoftwareRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwareRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InitialWorkDirRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InitialWorkDirRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "EnvVarRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/EnvVarRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ShellCommandRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ShellCommandRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ResourceRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ResourceRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "WorkReuse": { - "anyOf": [ - { - "$ref": "#/definitions/WorkReuseMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "NetworkAccess": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkAccessMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InplaceUpdateRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InplaceUpdateRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ToolTimeLimit": { - "anyOf": [ - { - "$ref": "#/definitions/ToolTimeLimitMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SubworkflowFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SubworkflowFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ScatterFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ScatterFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "MultipleInputFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/MultipleInputFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "StepInputExpressionRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/StepInputExpressionRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "additionalProperties": false - } - ] - }, - "id": { - "description": "The unique identifier for this object.\n\nOnly useful for `$graph` at `Process` level. Should not be exposed\nto users in graphical or terminal user interfaces.", - "type": "string" - }, - "inputs": { - "description": "Defines the input parameters of the process. The process is ready to\nrun when all required input parameters are associated with concrete\nvalues. Input parameters include a schema for each parameter which is\nused to validate the input object. It may also be used to build a user\ninterface for constructing the input object.\n\nWhen accepting an input object, all input parameters must have a value.\nIf an input parameter is missing from the input object, it must be\nassigned a value of `null` (or the value of `default` for that\nparameter, if provided) for the purposes of validation and evaluation\nof expressions.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/OperationInputParameter" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "oneOf": [ - { - "$ref": "#/definitions/OperationInputParameter" - }, - { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/OperationInputParameter" - } - ] - } - } - ] - } - }, - "type": "object" - } - ] - }, - "intent": { - "description": "An identifier for the type of computational operation, of this Process.\nEspecially useful for [`Operation`](Workflow.html#Operation), but can also be used for\n[`CommandLineTool`](CommandLineTool.html#CommandLineTool),\n[`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).\n\nIf provided, then this must be an IRI of a concept node that\nrepresents the type of operation, preferably defined within an ontology.\n\nFor example, in the domain of bioinformatics, one can use an IRI from\nthe EDAM Ontology's [Operation concept nodes](http://edamontology.org/operation_0004),\nlike [Alignment](http://edamontology.org/operation_2928),\nor [Clustering](http://edamontology.org/operation_3432); or a more\nspecific Operation concept like\n[Split read mapping](http://edamontology.org/operation_3199).", - "items": { - "type": "string" - }, - "type": "array" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "outputs": { - "description": "Defines the parameters representing the output of the process. May be\nused to generate and/or validate the output object.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/OperationOutputParameter" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "oneOf": [ - { - "$ref": "#/definitions/OperationOutputParameter" - }, - { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/OperationOutputParameter" - } - ] - } - } - ] - } - }, - "type": "object" - } - ] - }, - "requirements": { - "description": "Declares requirements that apply to either the runtime environment or the\nworkflow engine that must be met in order to execute this process. If\nan implementation cannot satisfy all requirements, or a requirement is\nlisted which is not recognized by the implementation, it is a fatal\nerror and the implementation must not attempt to run the process,\nunless overridden at user option.", - "oneOf": [ - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - }, - { - "$ref": "#/definitions/InlineJavascriptRequirement" - }, - { - "$ref": "#/definitions/SchemaDefRequirement" - }, - { - "$ref": "#/definitions/LoadListingRequirement" - }, - { - "$ref": "#/definitions/DockerRequirement" - }, - { - "$ref": "#/definitions/SoftwareRequirement" - }, - { - "$ref": "#/definitions/InitialWorkDirRequirement" - }, - { - "$ref": "#/definitions/EnvVarRequirement" - }, - { - "$ref": "#/definitions/ShellCommandRequirement" - }, - { - "$ref": "#/definitions/ResourceRequirement" - }, - { - "$ref": "#/definitions/WorkReuse" - }, - { - "$ref": "#/definitions/NetworkAccess" - }, - { - "$ref": "#/definitions/InplaceUpdateRequirement" - }, - { - "$ref": "#/definitions/ToolTimeLimit" - }, - { - "$ref": "#/definitions/SubworkflowFeatureRequirement" - }, - { - "$ref": "#/definitions/ScatterFeatureRequirement" - }, - { - "$ref": "#/definitions/MultipleInputFeatureRequirement" - }, - { - "$ref": "#/definitions/StepInputExpressionRequirement" - } - ] - }, - "type": "array" - }, - { - "type": "object", - "properties": { - "InlineJavascriptRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InlineJavascriptRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SchemaDefRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SchemaDefRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "LoadListingRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/LoadListingRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "DockerRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/DockerRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SoftwareRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwareRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InitialWorkDirRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InitialWorkDirRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "EnvVarRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/EnvVarRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ShellCommandRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ShellCommandRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ResourceRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ResourceRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "WorkReuse": { - "anyOf": [ - { - "$ref": "#/definitions/WorkReuseMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "NetworkAccess": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkAccessMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InplaceUpdateRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InplaceUpdateRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ToolTimeLimit": { - "anyOf": [ - { - "$ref": "#/definitions/ToolTimeLimitMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SubworkflowFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SubworkflowFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ScatterFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ScatterFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "MultipleInputFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/MultipleInputFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "StepInputExpressionRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/StepInputExpressionRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "additionalProperties": false - } - ] - } - }, - "required": [ - "class", - "inputs", - "outputs" - ], - "type": "object" - }, - "OperationInputParameter": { - "additionalProperties": false, - "description": "Describe an input parameter of an operation.", - "properties": { - "default": { - "description": "The default value to use for this parameter if the parameter is missing\nfrom the input object, or if the value of the parameter in the input\nobject is `null`. Default values are applied before evaluating expressions\n(e.g. dependent `valueFrom` fields)." - }, - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis must be one or more IRIs of concept nodes\nthat represents file formats which are allowed as input to this\nparameter, preferably defined within an ontology. If no ontology is\navailable, file formats may be tested by exact match." - }, - "id": { - "description": "The unique identifier for this object.", - "type": "string" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "loadContents": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nIf true, the file (or each file in the array) must be a UTF-8\ntext file 64 KiB or smaller, and the implementation must read\nthe entire contents of the file (or file array) and place it\nin the `contents` field of the File object for use by\nexpressions. If the size of the file is greater than 64 KiB,\nthe implementation must raise a fatal error.", - "type": "boolean" - }, - "loadListing": { - "description": "Only valid when `type: Directory` or is an array of `items: Directory`.\n\nSpecify the desired behavior for loading the `listing` field of\na Directory object for use by expressions.\n\nThe order of precedence for loadListing is:\n\n 1. `loadListing` on an individual parameter\n 2. Inherited from `LoadListingRequirement`\n 3. By default: `no_listing`", - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "OperationOutputParameter": { - "additionalProperties": false, - "description": "Describe an output parameter of an operation.", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis is the file format that will be assigned to the output\nFile object.", - "type": "string" - }, - "id": { - "description": "The unique identifier for this object.", - "type": "string" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "OutputArraySchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#OutputArraySchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Defines the type of the array elements." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "type": { - "const": "array", - "description": "Must be `array`", - "type": "string" - } - }, - "required": [ - "items", - "type" - ], - "type": "object" - }, - "OutputEnumSchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#OutputEnumSchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "symbols": { - "description": "Defines the set of valid symbols.", - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "const": "enum", - "description": "Must be `enum`", - "type": "string" - } - }, - "required": [ - "symbols", - "type" - ], - "type": "object" - }, - "OutputRecordField": { - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#OutputRecordField", - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis is the file format that will be assigned to the output\nFile object.", - "type": "string" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The name of the field", - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - }, - "required": [ - "name", - "type" - ], - "type": "object" - }, - { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - } - ] - }, - "OutputRecordSchema": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#OutputRecordSchema", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "fields": { - "description": "Defines the fields of the record.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/OutputRecordField" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "$ref": "#/definitions/OutputRecordFieldMap" - } - }, - "type": "object" - } - ] - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The identifier for this type", - "type": "string" - }, - "type": { - "const": "record", - "description": "Must be `record`", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "ResourceRequirement": { - "additionalProperties": false, - "description": "Specify basic hardware resource requirements.\n\n\"min\" is the minimum amount of a resource that must be reserved to\nschedule a job. If \"min\" cannot be satisfied, the job should not\nbe run.\n\n\"max\" is the maximum amount of a resource that the job shall be\nallocated. If a node has sufficient resources, multiple jobs may\nbe scheduled on a single node provided each job's \"max\" resource\nrequirements are met. If a job attempts to exceed its resource\nallocation, an implementation may deny additional resources, which\nmay result in job failure.\n\nIf both \"min\" and \"max\" are specified, an implementation may\nchoose to allocate any amount between \"min\" and \"max\", with the\nactual allocation provided in the `runtime` object.\n\nIf \"min\" is specified but \"max\" is not, then \"max\" == \"min\"\nIf \"max\" is specified by \"min\" is not, then \"min\" == \"max\".\n\nIt is an error if max < min.\n\nIt is an error if the value of any of these fields is negative.\n\nIf neither \"min\" nor \"max\" is specified for a resource, use the default values below.", - "properties": { - "class": { - "const": "ResourceRequirement", - "description": "Always 'ResourceRequirement'", - "type": "string" - }, - "coresMax": { - "description": "Maximum reserved number of CPU cores.\n\nSee `coresMin` for discussion about fractional CPU requests.", - "type": [ - "string", - "number" - ] - }, - "coresMin": { - "description": "Minimum reserved number of CPU cores (default is 1).\n\nMay be a fractional value to indicate to a scheduling\nalgorithm that one core can be allocated to multiple\njobs. For example, a value of 0.25 indicates that up to 4\njobs may run in parallel on 1 core. A value of 1.25 means\nthat up to 3 jobs can run on a 4 core system (4/1.25 ≈ 3).\n\nProcesses can only share a core allocation if the sum of each\nof their `ramMax`, `tmpdirMax`, and `outdirMax` requests also\ndo not exceed the capacity of the node.\n\nProcesses sharing a core must have the same level of isolation\n(typically a container or VM) that they would normally have.\n\nThe reported number of CPU cores reserved for the process,\nwhich is available to expressions on the CommandLineTool as\n`runtime.cores`, must be a non-zero integer, and may be\ncalculated by rounding up the cores request to the next whole\nnumber.\n\nScheduling systems may allocate fractional CPU resources by\nsetting quotas or scheduling weights. Scheduling systems that\ndo not support fractional CPUs may round up the request to the\nnext whole number.", - "type": [ - "string", - "number" - ] - }, - "outdirMax": { - "description": "Maximum reserved filesystem based storage for the designated output directory, in mebibytes (2**20)\n\nSee `outdirMin` for discussion about fractional storage requests.", - "type": [ - "string", - "number" - ] - }, - "outdirMin": { - "description": "Minimum reserved filesystem based storage for the designated output directory, in mebibytes (2**20) (default is 1024)\n\nMay be a fractional value. If so, the actual storage request\nmust be rounded up to the next whole number. The reported\namount of storage reserved for the process, which is available\nto expressions on the CommandLineTool as `runtime.outdirSize`,\nmust be a non-zero integer.", - "type": [ - "string", - "number" - ] - }, - "ramMax": { - "description": "Maximum reserved RAM in mebibytes (2**20)\n\nSee `ramMin` for discussion about fractional RAM requests.", - "type": [ - "string", - "number" - ] - }, - "ramMin": { - "description": "Minimum reserved RAM in mebibytes (2**20) (default is 256)\n\nMay be a fractional value. If so, the actual RAM request must\nbe rounded up to the next whole number. The reported amount of\nRAM reserved for the process, which is available to\nexpressions on the CommandLineTool as `runtime.ram`, must be a\nnon-zero integer.", - "type": [ - "string", - "number" - ] - }, - "tmpdirMax": { - "description": "Maximum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20)\n\nSee `tmpdirMin` for discussion about fractional storage requests.", - "type": [ - "string", - "number" - ] - }, - "tmpdirMin": { - "description": "Minimum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20) (default is 1024)\n\nMay be a fractional value. If so, the actual storage request\nmust be rounded up to the next whole number. The reported\namount of storage reserved for the process, which is available\nto expressions on the CommandLineTool as `runtime.tmpdirSize`,\nmust be a non-zero integer.", - "type": [ - "string", - "number" - ] - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "ScatterFeatureRequirement": { - "additionalProperties": false, - "description": "Indicates that the workflow platform must support the `scatter` and\n`scatterMethod` fields of [WorkflowStep](#WorkflowStep).", - "properties": { - "class": { - "const": "ScatterFeatureRequirement", - "description": "Always 'ScatterFeatureRequirement'", - "type": "string" - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "SchemaDefRequirement": { - "additionalProperties": false, - "description": "This field consists of an array of type definitions which must be used when\ninterpreting the `inputs` and `outputs` fields. When a `type` field\ncontains a IRI, the implementation must check if the type is defined in\n`schemaDefs` and use that definition. If the type is not found in\n`schemaDefs`, it is an error. The entries in `schemaDefs` must be\nprocessed in the order listed such that later schema definitions may refer\nto earlier schema definitions.\n\n- **Type definitions are allowed for `enum` and `record` types only.**\n- Type definitions may be shared by defining them in a file and then\n `$include`-ing them in the `types` field.\n- A file can contain a list of type definitions", - "properties": { - "class": { - "const": "SchemaDefRequirement", - "description": "Always 'SchemaDefRequirement'", - "type": "string" - }, - "types": { - "description": "The list of type definitions.", - "items": { - "anyOf": [ - { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - } - ] - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - } - }, - "required": [ - "class", - "types" - ], - "type": "object" - }, - "SecondaryFileSchema": { - "description": "Secondary files are specified using the following micro-DSL for secondary files:\n\n* If the value is a string, it is transformed to an object with two fields\n `pattern` and `required`\n* By default, the value of `required` is `null`\n (this indicates default behavior, which may be based on the context)\n* If the value ends with a question mark `?` the question mark is\n stripped off and the value of the field `required` is set to `False`\n* The remaining value is assigned to the field `pattern`\n\nFor implementation details and examples, please see\n[this section](SchemaSalad.html#Domain_Specific_Language_for_secondary_files)\nin the Schema Salad specification.", - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "pattern": { - "description": "Provides a pattern or expression specifying files or directories that\nshould be included alongside the primary file.\n\nIf the value is an expression, the value of `self` in the\nexpression must be the primary input or output File object to\nwhich this binding applies. The `basename`, `nameroot` and\n`nameext` fields must be present in `self`. For\n`CommandLineTool` inputs the `location` field must also be\npresent. For `CommandLineTool` outputs the `path` field must\nalso be present. If secondary files were included on an input\nFile object as part of the Process invocation, they must also\nbe present in `secondaryFiles` on `self`.\n\nThe expression must return either: a filename string relative\nto the path to the primary File, a File or Directory object\n(`class: File` or `class: Directory`) with either `location`\n(for inputs) or `path` (for outputs) and `basename` fields\nset, or an array consisting of strings or File or Directory\nobjects as previously described.\n\nIt is legal to use `location` from a File or Directory object\npassed in as input, including `location` from secondary files\non `self`. If an expression returns a File object with the\nsame `location` but a different `basename` as a secondary file\nthat was passed in, the expression result takes precedence.\nSetting the basename with an expression this way affects the\n`path` where the secondary file will be staged to in the\nCommandLineTool.\n\nThe expression may return \"null\" in which case there is no\nsecondary file from that expression.\n\nTo work on non-filename-preserving storage systems, portable\ntool descriptions should treat `location` as an\n[opaque identifier](#opaque-strings) and avoid constructing new\nvalues from `location`, but should construct relative references\nusing `basename` or `nameroot` instead, or propagate `location`\nfrom defined inputs.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path.", - "type": "string" - }, - "required": { - "description": "An implementation must not fail workflow execution if `required` is\nset to `false` and the expected secondary file does not exist.\nDefault value for `required` field is `true` for secondary files on\ninput and `false` for secondary files on output.", - "type": [ - "string", - "boolean" - ] - } - }, - "required": [ - "pattern" - ], - "type": "object" - }, - { - "type": "string" - } - ] - }, - "ShellCommandRequirement": { - "additionalProperties": false, - "description": "Modify the behavior of CommandLineTool to generate a single string\ncontaining a shell command line. Each item in the `arguments` list must\nbe joined into a string separated by single spaces and quoted to prevent\ninterpretation by the shell, unless `CommandLineBinding` for that argument\ncontains `shellQuote: false`. If `shellQuote: false` is specified, the\nargument is joined into the command string without quoting, which allows\nthe use of shell metacharacters such as `|` for pipes.", - "properties": { - "class": { - "const": "ShellCommandRequirement", - "description": "Always 'ShellCommandRequirement'", - "type": "string" - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "SoftwarePackage": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#SoftwarePackage", - "properties": { - "package": { - "description": "The name of the software to be made available. If the name is\ncommon, inconsistent, or otherwise ambiguous it should be combined with\none or more identifiers in the `specs` field.", - "type": "string" - }, - "specs": { - "description": "One or more [IRI](https://en.wikipedia.org/wiki/Internationalized_Resource_Identifier)s\nidentifying resources for installing or enabling the software named in\nthe `package` field. Implementations may provide resolvers which map\nthese software identifier IRIs to some configuration action; or they can\nuse only the name from the `package` field on a best effort basis.\n\nFor example, the IRI https://packages.debian.org/bowtie could\nbe resolved with `apt-get install bowtie`. The IRI\nhttps://anaconda.org/bioconda/bowtie could be resolved with `conda\ninstall -c bioconda bowtie`.\n\nIRIs can also be system independent and used to map to a specific\nsoftware installation or selection mechanism.\nUsing [RRID](https://www.identifiers.org/rrid/) as an example:\nhttps://identifiers.org/rrid/RRID:SCR_005476\ncould be fulfilled using the above-mentioned Debian or bioconda\npackage, a local installation managed by [Environment Modules](https://modules.sourceforge.net/),\nor any other mechanism the platform chooses. IRIs can also be from\nidentifier sources that are discipline specific yet still system\nindependent. As an example, the equivalent [ELIXIR Tools and Data\nService Registry](https://bio.tools) IRI to the previous RRID example is\nhttps://bio.tools/tool/bowtie2/version/2.2.8.\nIf supported by a given registry, implementations are encouraged to\nquery these system independent software identifier IRIs directly for\nlinks to packaging systems.\n\nA site specific IRI can be listed as well. For example, an academic\ncomputing cluster using Environment Modules could list the IRI\n`https://hpc.example.edu/modules/bowtie-tbb/1.22` to indicate that\n`module load bowtie-tbb/1.1.2` should be executed to make available\n`bowtie` version 1.1.2 compiled with the TBB library prior to running\nthe accompanying Workflow or CommandLineTool. Note that the example IRI\nis specific to a particular institution and computing environment as\nthe Environment Modules system does not have a common namespace or\nstandardized naming convention.\n\nThis last example is the least portable and should only be used if\nmechanisms based off of the `package` field or more generic IRIs are\nunavailable or unsuitable. While harmless to other sites, site specific\nsoftware IRIs should be left out of shared CWL descriptions to avoid\nclutter.", - "items": { - "type": "string" - }, - "type": "array" - }, - "version": { - "description": "The (optional) versions of the software that are known to be\ncompatible.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "package" - ], - "type": "object" - }, - "SoftwareRequirement": { - "additionalProperties": false, - "description": "A list of software packages that should be configured in the environment of\nthe defined process.", - "properties": { - "class": { - "const": "SoftwareRequirement", - "description": "Always 'SoftwareRequirement'", - "type": "string" - }, - "packages": { - "description": "The list of software to be configured.", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwarePackage" - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - } - }, - "required": [ - "class", - "packages" - ], - "type": "object" - }, - "StepInputExpressionRequirement": { - "additionalProperties": false, - "description": "Indicate that the workflow platform must support the `valueFrom` field\nof [WorkflowStepInput](#WorkflowStepInput).", - "properties": { - "class": { - "const": "StepInputExpressionRequirement", - "description": "Always 'StepInputExpressionRequirement'", - "type": "string" - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "SubworkflowFeatureRequirement": { - "additionalProperties": false, - "description": "Indicates that the workflow platform must support nested workflows in\nthe `run` field of [WorkflowStep](#WorkflowStep).", - "properties": { - "class": { - "const": "SubworkflowFeatureRequirement", - "description": "Always 'SubworkflowFeatureRequirement'", - "type": "string" - } - }, - "required": [ - "class" - ], - "type": "object" - }, - "T": { - "additionalProperties": false, - "type": "object" - }, - "ToolTimeLimit": { - "additionalProperties": false, - "description": "Set an upper limit on the execution time of a CommandLineTool.\nA CommandLineTool whose execution duration exceeds the time\nlimit may be preemptively terminated and considered failed.\nMay also be used by batch systems to make scheduling decisions.\nThe execution duration excludes external operations, such as\nstaging of files, pulling a docker image etc, and only counts\nwall-time for the execution of the command line itself.", - "properties": { - "class": { - "const": "ToolTimeLimit", - "description": "Always 'ToolTimeLimit'", - "type": "string" - }, - "timelimit": { - "description": "The time limit, in seconds. A time limit of zero means no\ntime limit. Negative time limits are an error.", - "type": [ - "string", - "number" - ] - } - }, - "required": [ - "class", - "timelimit" - ], - "type": "object" - }, - "WorkReuse": { - "additionalProperties": false, - "description": "For implementations that support reusing output from past work (on\nthe assumption that same code and same input produce same\nresults), control whether to enable or disable the reuse behavior\nfor a particular tool or step (to accommodate situations where that\nassumption is incorrect). A reused step is not executed but\ninstead returns the same output as the original execution.\n\nIf `WorkReuse` is not specified, correct tools should assume it\nis enabled by default.", - "properties": { - "class": { - "const": "WorkReuse", - "description": "Always 'WorkReuse'", - "type": "string" - }, - "enableReuse": { - "type": [ - "string", - "boolean" - ] - } - }, - "required": [ - "class", - "enableReuse" - ], - "type": "object" - }, - "Workflow": { - "description": "A workflow describes a set of **steps** and the **dependencies** between\nthose steps. When a step produces output that will be consumed by a\nsecond step, the first step is a dependency of the second step.\n\nWhen there is a dependency, the workflow engine must execute the preceding\nstep and wait for it to successfully produce output before executing the\ndependent step. If two steps are defined in the workflow graph that\nare not directly or indirectly dependent, these steps are **independent**,\nand may execute in any order or execute concurrently. A workflow is\ncomplete when all steps have been executed.\n\nDependencies between parameters are expressed using the `source`\nfield on [workflow step input parameters](#WorkflowStepInput) and\n`outputSource` field on [workflow output\nparameters](#WorkflowOutputParameter).\n\nThe `source` field on each workflow step input parameter expresses\nthe data links that contribute to the value of the step input\nparameter (the \"sink\"). A workflow step can only begin execution\nwhen every data link connected to a step has been fulfilled.\n\nThe `outputSource` field on each workflow step input parameter\nexpresses the data links that contribute to the value of the\nworkflow output parameter (the \"sink\"). Workflow execution cannot\ncomplete successfully until every data link connected to an output\nparameter has been fulfilled.\n\n## Workflow success and failure\n\nA completed step must result in one of `success`, `temporaryFailure` or\n`permanentFailure` states. An implementation may choose to retry a step\nexecution which resulted in `temporaryFailure`. An implementation may\nchoose to either continue running other steps of a workflow, or terminate\nimmediately upon `permanentFailure`.\n\n* If any step of a workflow execution results in `permanentFailure`, then\nthe workflow status is `permanentFailure`.\n\n* If one or more steps result in `temporaryFailure` and all other steps\ncomplete `success` or are not executed, then the workflow status is\n`temporaryFailure`.\n\n* If all workflow steps are executed and complete with `success`, then the\nworkflow status is `success`.\n\n# Extensions\n\n[ScatterFeatureRequirement](#ScatterFeatureRequirement) and\n[SubworkflowFeatureRequirement](#SubworkflowFeatureRequirement) are\navailable as standard [extensions](#Extensions_and_Metadata) to core\nworkflow semantics.", - "properties": { - "class": { - "const": "Workflow", - "type": "string" - }, - "cwlVersion": { - "description": "CWL document version. Always required at the document root. Not\nrequired for a Process embedded inside another Process.", - "enum": [ - "draft-2", - "draft-3", - "draft-3.dev1", - "draft-3.dev2", - "draft-3.dev3", - "draft-3.dev4", - "draft-3.dev5", - "draft-4.dev1", - "draft-4.dev2", - "draft-4.dev3", - "v1.0", - "v1.0.dev4", - "v1.1", - "v1.1.0-dev1", - "v1.2", - "v1.2.0-dev1", - "v1.2.0-dev2", - "v1.2.0-dev3", - "v1.2.0-dev4", - "v1.2.0-dev5" - ], - "type": "string" - }, - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "hints": { - "description": "Declares requirements that apply to either the runtime environment or the\nworkflow engine that must be met in order to execute this process. If\nan implementation cannot satisfy all requirements, or a requirement is\nlisted which is not recognized by the implementation, it is a fatal\nerror and the implementation must not attempt to run the process,\nunless overridden at user option.", - "oneOf": [ - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - }, - { - "$ref": "#/definitions/InlineJavascriptRequirement" - }, - { - "$ref": "#/definitions/SchemaDefRequirement" - }, - { - "$ref": "#/definitions/LoadListingRequirement" - }, - { - "$ref": "#/definitions/DockerRequirement" - }, - { - "$ref": "#/definitions/SoftwareRequirement" - }, - { - "$ref": "#/definitions/InitialWorkDirRequirement" - }, - { - "$ref": "#/definitions/EnvVarRequirement" - }, - { - "$ref": "#/definitions/ShellCommandRequirement" - }, - { - "$ref": "#/definitions/ResourceRequirement" - }, - { - "$ref": "#/definitions/WorkReuse" - }, - { - "$ref": "#/definitions/NetworkAccess" - }, - { - "$ref": "#/definitions/InplaceUpdateRequirement" - }, - { - "$ref": "#/definitions/ToolTimeLimit" - }, - { - "$ref": "#/definitions/SubworkflowFeatureRequirement" - }, - { - "$ref": "#/definitions/ScatterFeatureRequirement" - }, - { - "$ref": "#/definitions/MultipleInputFeatureRequirement" - }, - { - "$ref": "#/definitions/StepInputExpressionRequirement" - } - ] - }, - "type": "array" - }, - { - "type": "object", - "properties": { - "InlineJavascriptRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InlineJavascriptRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SchemaDefRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SchemaDefRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "LoadListingRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/LoadListingRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "DockerRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/DockerRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SoftwareRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwareRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InitialWorkDirRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InitialWorkDirRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "EnvVarRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/EnvVarRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ShellCommandRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ShellCommandRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ResourceRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ResourceRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "WorkReuse": { - "anyOf": [ - { - "$ref": "#/definitions/WorkReuseMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "NetworkAccess": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkAccessMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InplaceUpdateRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InplaceUpdateRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ToolTimeLimit": { - "anyOf": [ - { - "$ref": "#/definitions/ToolTimeLimitMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SubworkflowFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SubworkflowFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ScatterFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ScatterFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "MultipleInputFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/MultipleInputFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "StepInputExpressionRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/StepInputExpressionRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "additionalProperties": false - } - ] - }, - "id": { - "description": "The unique identifier for this object.\n\nOnly useful for `$graph` at `Process` level. Should not be exposed\nto users in graphical or terminal user interfaces.", - "type": "string" - }, - "inputs": { - "description": "Defines the input parameters of the process. The process is ready to\nrun when all required input parameters are associated with concrete\nvalues. Input parameters include a schema for each parameter which is\nused to validate the input object. It may also be used to build a user\ninterface for constructing the input object.\n\nWhen accepting an input object, all input parameters must have a value.\nIf an input parameter is missing from the input object, it must be\nassigned a value of `null` (or the value of `default` for that\nparameter, if provided) for the purposes of validation and evaluation\nof expressions.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/WorkflowInputParameter" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "oneOf": [ - { - "$ref": "#/definitions/WorkflowInputParameter" - }, - { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/WorkflowInputParameter" - } - ] - } - } - ] - } - }, - "type": "object" - } - ] - }, - "intent": { - "description": "An identifier for the type of computational operation, of this Process.\nEspecially useful for [`Operation`](Workflow.html#Operation), but can also be used for\n[`CommandLineTool`](CommandLineTool.html#CommandLineTool),\n[`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).\n\nIf provided, then this must be an IRI of a concept node that\nrepresents the type of operation, preferably defined within an ontology.\n\nFor example, in the domain of bioinformatics, one can use an IRI from\nthe EDAM Ontology's [Operation concept nodes](http://edamontology.org/operation_0004),\nlike [Alignment](http://edamontology.org/operation_2928),\nor [Clustering](http://edamontology.org/operation_3432); or a more\nspecific Operation concept like\n[Split read mapping](http://edamontology.org/operation_3199).", - "items": { - "type": "string" - }, - "type": "array" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "outputs": { - "description": "Defines the parameters representing the output of the process. May be\nused to generate and/or validate the output object.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/WorkflowOutputParameter" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "oneOf": [ - { - "$ref": "#/definitions/WorkflowOutputParameter" - }, - { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/WorkflowOutputParameter" - } - ] - } - } - ] - } - }, - "type": "object" - } - ] - }, - "requirements": { - "description": "Declares requirements that apply to either the runtime environment or the\nworkflow engine that must be met in order to execute this process. If\nan implementation cannot satisfy all requirements, or a requirement is\nlisted which is not recognized by the implementation, it is a fatal\nerror and the implementation must not attempt to run the process,\nunless overridden at user option.", - "oneOf": [ - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - }, - { - "$ref": "#/definitions/InlineJavascriptRequirement" - }, - { - "$ref": "#/definitions/SchemaDefRequirement" - }, - { - "$ref": "#/definitions/LoadListingRequirement" - }, - { - "$ref": "#/definitions/DockerRequirement" - }, - { - "$ref": "#/definitions/SoftwareRequirement" - }, - { - "$ref": "#/definitions/InitialWorkDirRequirement" - }, - { - "$ref": "#/definitions/EnvVarRequirement" - }, - { - "$ref": "#/definitions/ShellCommandRequirement" - }, - { - "$ref": "#/definitions/ResourceRequirement" - }, - { - "$ref": "#/definitions/WorkReuse" - }, - { - "$ref": "#/definitions/NetworkAccess" - }, - { - "$ref": "#/definitions/InplaceUpdateRequirement" - }, - { - "$ref": "#/definitions/ToolTimeLimit" - }, - { - "$ref": "#/definitions/SubworkflowFeatureRequirement" - }, - { - "$ref": "#/definitions/ScatterFeatureRequirement" - }, - { - "$ref": "#/definitions/MultipleInputFeatureRequirement" - }, - { - "$ref": "#/definitions/StepInputExpressionRequirement" - } - ] - }, - "type": "array" - }, - { - "type": "object", - "properties": { - "InlineJavascriptRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InlineJavascriptRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SchemaDefRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SchemaDefRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "LoadListingRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/LoadListingRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "DockerRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/DockerRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SoftwareRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwareRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InitialWorkDirRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InitialWorkDirRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "EnvVarRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/EnvVarRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ShellCommandRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ShellCommandRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ResourceRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ResourceRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "WorkReuse": { - "anyOf": [ - { - "$ref": "#/definitions/WorkReuseMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "NetworkAccess": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkAccessMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InplaceUpdateRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InplaceUpdateRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ToolTimeLimit": { - "anyOf": [ - { - "$ref": "#/definitions/ToolTimeLimitMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SubworkflowFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SubworkflowFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ScatterFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ScatterFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "MultipleInputFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/MultipleInputFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "StepInputExpressionRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/StepInputExpressionRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "additionalProperties": false + "$ref": "#/components/schemas/CWL" + } + }, + "application/cwl+json": { + "schema": { + "$ref": "#/components/schemas/CWL" + } + }, + "application/cwl+yaml": { + "schema": { + "$ref": "#/components/schemas/CWL" + } + } + } + }, + "responses": { + "201": { + "$ref": "#/components/responses/ProcessSummary" + }, + "400": { + "description": "The requested workflow does not exist on the server.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/exception" + } + }, + "text/html": { + "schema": { + "type": "string" + } + } + } + }, + "403": { + "$ref": "#/components/responses/ImmutableProcess" + }, + "409": { + "$ref": "#/components/responses/DuplicateProcess" + }, + "500": { + "$ref": "#/components/responses/ServerError" + } + } + } + }, + "/processes/{processID}": { + "get": { + "summary": "retrieve a process description", + "description": "The process description contains information about inputs and outputs and a link to the execution-endpoint for the process. The Core does not mandate the use of a specific process description to specify the interface of a process. That said, the Core requirements class makes the following recommendation:\n\nImplementations SHOULD consider supporting the OGC process description.\n\nFor more information, see [Section 7.8](https://docs.ogc.org/is/18-062r2/18-062r2.html#sc_process_description).\n", + "operationId": "getProcessDescription", + "tags": [ + "Processes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/processID-path" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/ProcessDescription" + }, + "404": { + "$ref": "#/components/responses/NotFound" + } + } + }, + "put": { + "summary": "replace a process.", + "description": "Replaces a process.\n\nFor more information, see [Section 6.4](http://docs.ogc.org/DRAFTS/20-044.html#_18582f42-ebc6-4284-9333-c089068f62b6).\n", + "operationId": "replace", + "tags": [ + "DRU" + ], + "parameters": [ + { + "$ref": "#/components/parameters/processID-path" + } + ], + "requestBody": { + "description": "An OGC Application Package used to deploy a new process.", + "required": true, + "content": { + "application/ogcapppkg+json": { + "schema": { + "$ref": "#/components/schemas/ogcapppkg" + } + }, + "application/cwl": { + "schema": { + "$ref": "#/components/schemas/CWL" + } + }, + "application/cwl+json": { + "schema": { + "$ref": "#/components/schemas/CWL" + } + }, + "application/cwl+yaml": { + "schema": { + "$ref": "#/components/schemas/CWL" + } + } + } + }, + "responses": { + "204": { + "$ref": "#/components/responses/EmptyResponse" + }, + "400": { + "$ref": "#/paths/~1processes/post/responses/400" + }, + "403": { + "$ref": "#/components/responses/ImmutableProcess" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/DuplicateProcess" + }, + "500": { + "$ref": "#/components/responses/ServerError" + } + } + }, + "delete": { + "summary": "undeploy a process.", + "description": "Undeploys a process.\n\nFor more information, see [Section 6.5](http://docs.ogc.org/DRAFTS/20-044.html#_16391f9e-538f-4a84-9710-72a6bab82842).\n", + "operationId": "undeploy", + "tags": [ + "DRU" + ], + "parameters": [ + { + "$ref": "#/components/parameters/processID-path" + } + ], + "responses": { + "204": { + "$ref": "#/components/responses/EmptyResponse" + }, + "403": { + "$ref": "#/components/responses/ImmutableProcess" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/ServerError" + } + } + } + }, + "/processes/{processID}/package": { + "get": { + "summary": "retrieve the formal description used to deploy a process", + "description": "Access the formal description that can be used to deploy a process on an OGC API - Processes Server Instance.\n", + "operationId": "getPackage", + "tags": [ + "DRU" + ], + "parameters": [ + { + "$ref": "#/components/parameters/processID-path" + } + ], + "responses": { + "200": { + "description": "The formal used to deploy a process", + "content": { + "application/ogcapppkg+json": { + "schema": { + "$ref": "#/components/schemas/ogcapppkg" + } + }, + "application/cwl": { + "schema": { + "$ref": "#/components/schemas/CWL" + } + }, + "application/cwl+json": { + "schema": { + "$ref": "#/components/schemas/CWL" + } + }, + "application/cwl+yaml": { + "schema": { + "$ref": "#/components/schemas/CWL" + } + } + } + }, + "404": { + "$ref": "#/components/responses/NotFound" + } + } + } + }, + "/processes/{processID}/execution": { + "post": { + "summary": "execute a process.", + "description": "Executes a process (this may result in the creation of a job resource e.g., for _asynchronous execution_).\n\nFor more information, see [Section 7.9](https://docs.ogc.org/is/18-062r2/18-062r2.html#sc_create_job).\n", + "operationId": "execute", + "tags": [ + "Processes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/processID-path" + }, + { + "name": "response", + "in": "query", + "description": "For executing the process using the _Collection Output_ mechanism, where the\nclient is redirected (_303_ status) to a collection resource, from which one\nor more OGC API data access mechanism is available. Data access requests may\ntrigger processing on-demand for a given area, time and resolution of interest.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "collection" + ] + } + }, + { + "in": "header", + "description": "Indicates client preferences, including whether the client is capable of asynchronous processing.\nA `respond-async` preference indicates a preference for asynchronous processing.\nA `wait: s` preference indicates that the client prefers to wait up to x seconds to receive a reponse synchronously before the server falls back to asynchronous processing.", + "name": "Prefer", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "An execution request specifying any inputs for the process to execute, and optionally to select specific outputs.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/execute-workflow" + } + } + } + }, + "responses": { + "200": { + "$ref": "#/components/responses/ExecuteSync" + }, + "201": { + "$ref": "#/components/responses/ExecuteAsync" + }, + "204": { + "$ref": "#/components/responses/EmptyResponse" + }, + "303": { + "description": "For _Collection Output_ execution, redirection to an OGC API landing page or collection.", + "headers": { + "Location": { + "schema": { + "type": "string" + }, + "description": "Location for redirection to an [OGC API landing page](https://schemas.opengis.net/ogcapi/tiles/part1/1.0/openapi/schemas/common-core/landingPage.yaml) (for `response=landingPage`) as described in\n[OGC API - Common - Part 1: Core](http://docs.ogc.org/DRAFTS/19-072.html#_landing_page_requirements_class) or\nan [OGC API collection description](https://schemas.opengis.net/ogcapi/tiles/part1/1.0/openapi/schemas/common-geodata/collectionInfo.yaml) (for `response=landingPage`) as described in\n[OGC API - Common - Part 2: Geospatial data](http://docs.ogc.org/DRAFTS/20-024.html#collection-description).\nThe collection redirected to or the collections linked from the landing page redirected to\nmust contain links to at least one data access mechanism (such as [_OGC API - Tiles_](https://opengeospatial.github.io/ogcna-auto-review/20-057.html),\n[_DGGS_](https://opengeospatial.github.io/ogcna-auto-review/21-038.html),\n[_Coverages_](http://docs.ogc.org/DRAFTS/19-087.html),\n[_Features_](https://docs.opengeospatial.org/is/17-069r4/17-069r4.html),\n[_EDR_](https://docs.ogc.org/is/19-086r5/19-086r5.html), or\n[_Maps_](http://docs.ogc.org/DRAFTS/20-058.html)...) to retrieve output results, which may\ntrigger on-demand processing." + } + } + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/ServerError" + } + }, + "callbacks": { + "jobCompleted": { + "{$request.body#/subscriber/successUri}": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/results" + } + } + } + }, + "responses": { + "200": { + "description": "Results received successfully" + } + } + } + } + } + } + } + }, + "/jobs": { + "get": { + "summary": "retrieve the list of jobs.", + "description": "Lists available jobs.\n\nFor more information, see [Section 12](https://docs.ogc.org/is/18-062r2/18-062r2.html#Job_list).\n", + "operationId": "getJobs", + "tags": [ + "Jobs" + ], + "parameters": [ + { + "$ref": "#/components/parameters/limit" + }, + { + "$ref": "#/components/parameters/processID-query" + }, + { + "$ref": "#/components/parameters/status" + }, + { + "$ref": "#/components/parameters/minDuration" + }, + { + "$ref": "#/components/parameters/maxDuration" + }, + { + "$ref": "#/components/parameters/type" + }, + { + "$ref": "#/components/parameters/datetime" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/JobList" + }, + "404": { + "$ref": "#/components/responses/NotFound" + } + } + } + }, + "/jobs/{jobID}": { + "get": { + "summary": "retrieve the status of a job", + "description": "Shows the status of a job.\n\n For more information, see [Section 7.10](https://docs.ogc.org/is/18-062r2/18-062r2.html#sc_retrieve_status_info).\n", + "operationId": "getStatus", + "tags": [ + "Jobs" + ], + "parameters": [ + { + "$ref": "#/components/parameters/jobID" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/Status" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/ServerError" + } + } + }, + "delete": { + "summary": "cancel a job execution, remove a finished job", + "description": "Cancel a job execution and remove it from the jobs list.\n\nFor more information, see [Section 14]https://docs.ogc.org/is/18-062r2/18-062r2.html#Dismiss).\n", + "operationId": "dismiss", + "tags": [ + "Jobs" + ], + "parameters": [ + { + "$ref": "#/components/parameters/jobID" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/Status" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/ServerError" + } + } + } + }, + "/jobs/{jobID}/results": { + "get": { + "summary": "retrieve the result(s) of a job", + "description": "Lists available results of a job. In case of a failure, lists exceptions instead.\n\nFor more information, see [Section 7.11](https://docs.ogc.org/is/18-062r2/18-062r2.html#sc_retrieve_job_results).\n", + "operationId": "getResult", + "tags": [ + "Jobs" + ], + "parameters": [ + { + "$ref": "#/components/parameters/jobID" + }, + { + "in": "header", + "description": "Indicates client preferences, such as whether the client wishes a self-contained or minimal response.\nA `return=minimal` preference indicates that the client would prefer that links be returned to larger object to minimize the response payload.\nA `return=representation` indicates that the client would prefer if the server can return a self-contained response.", + "name": "Prefer", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/Results" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/ServerError" + } + } + } + } + }, + "components": { + "schemas": { + "confClasses": { + "type": "object", + "required": [ + "conformsTo" + ], + "properties": { + "conformsTo": { + "type": "array", + "items": { + "type": "string", + "example": "http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core" + } + } + } + }, + "link": { + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "type": "string" + }, + "rel": { + "type": "string", + "example": "service" + }, + "type": { + "type": "string", + "example": "application/json" + }, + "hreflang": { + "type": "string", + "example": "en" + }, + "title": { + "type": "string" + } + } + }, + "landingPage": { + "type": "object", + "required": [ + "links" + ], + "properties": { + "title": { + "type": "string", + "example": "Example processing server" + }, + "description": { + "type": "string", + "example": "Example server implementing the OGC API - Processes 1.0 Standard" + }, + "attribution": { + "type": "string", + "title": "attribution for the Processes API", + "description": "The `attribution` should be short and intended for presentation to a user, for example, in a corner of a map. Parts of the text can be links to other resources if additional information is needed. The string can include HTML markup." + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/link" + } + } + } + }, + "exception": { + "title": "Exception Schema", + "description": "JSON schema for exceptions based on RFC 7807", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string" + }, + "title": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "detail": { + "type": "string" + }, + "instance": { + "type": "string" + } + }, + "additionalProperties": true + }, + "collections": { + "type": "object", + "required": [ + "links", + "collections" + ], + "properties": { + "links": { + "type": "array", + "title": "Links to resource in the collections", + "description": "Links to this or other resources provided by the collections.", + "items": { + "$ref": "#/components/schemas/link" + } + }, + "numberMatched": { + "$ref": "#/components/schemas/numberMatched" + }, + "numberReturned": { + "$ref": "#/components/schemas/numberReturned" + }, + "collections": { + "type": "array", + "title": "Collections descriptions", + "description": "Descriptions of each collection in this API.", + "items": { + "$ref": "#/components/schemas/collectionDesc" + } + } + } + }, + "collectionDesc": { + "allOf": [ + { + "type": "object", + "required": [ + "id", + "links" + ], + "properties": { + "id": { + "type": "string", + "title": "Identifier of the resource", + "description": "Identifier of the collection, for example, used in URI path parameters.", + "minLength": 1, + "example": "dem" + }, + "title": { + "type": "string", + "title": "Title of the collection", + "description": "A short, human-readable summary of the collection.", + "example": "Digital Elevation Model" + }, + "description": { + "type": "string", + "title": "Description of the collection", + "description": "A human-readable explanation about data in the collection.", + "example": "A Digital Elevation Model." + }, + "attribution": { + "type": "string", + "title": "Attribution for the collection", + "description": "Attribution for the collection, providing a way to identify the source of the geographic information, which can contain markup text whose format may be indicated in the `attributionMediaType` property. That format can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`).\nIf the 'attributionMediaType' indicates something other than `text/plain`, the `attribution` element string should be interpreted by a markup parser selected based on that media type to be presented to the user\n(e.g., `text/markdown` will be parsed by a library supporting CommonMark). By allowing markup, the attribution string can import images (e.g., organization logos) and format the text (e.g., the name of the organization in italics)." + }, + "attributionMediaType": { + "title": "Media type of the attribution", + "description": "Media type for the markup language of the attribution: It can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`).", + "enum": [ + "text/plain", + "text/html", + "text/markdown" + ] + }, + "accessConstraints": { + "title": "Access Constraints of the collection", + "description": "Restrictions on the availability of the collection that the user needs to be aware of before using or redistributing the data:\n\n* unclassified: Available for general disclosure\n* restricted: Not for general disclosure\n* confidential: Available for someone who can be entrusted with information\n* secret: Kept or meant to be kept private, unknown, or hidden from all but a select group of people\n* topSecret: Of the highest secrecy", + "enum": [ + "unclassified", + "restricted", + "confidential", + "secret", + "topSecret" + ] + }, + "publisher": { + "type": "string", + "title": "Responsible party publishing the collection", + "description": "Organization or individual responsible for making the data available" + }, + "contacts": { + "type": "array", + "title": "A list of contacts", + "description": "A list of contacts qualified by their role(s) in association to the collection.", + "minItems": 1, + "items": { + "type": "object", + "title": "Contact information", + "description": "Identification of, and means of communication with, person responsible\nfor the resource.", + "anyOf": [ + { + "required": [ + "name" + ] + }, + { + "required": [ + "organization" + ] + } + ], + "properties": { + "identifier": { + "type": "string", + "title": "Identifier of the contact", + "description": "A value uniquely identifying a contact." + }, + "name": { + "type": "string", + "title": "name of the contact person", + "description": "The name of the responsible person." + }, + "position": { + "type": "string", + "title": "position in the organization", + "description": "The name of the role or position of the responsible person taken\nfrom the organization's formal organizational hierarchy or chart." + }, + "organization": { + "type": "string", + "title": "Name of the organization", + "description": "Organization/affiliation of the contact." + }, + "logo": { + "title": "Logo of the contact", + "description": "Link to a graphic identifying a contact. The link relation should be `icon`\nand the media type should be an image media type.", + "allOf": [ + { + "$ref": "#/components/schemas/link" + }, + { + "type": "object", + "required": [ + "rel", + "type" + ], + "properties": { + "rel": { + "enum": [ + "icon" + ] } - ] + } + } + ] + }, + "phones": { + "type": "array", + "title": "Telephone numbers", + "description": "Telephone numbers at which contact can be made.", + "items": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string", + "title": "Phone number.", + "description": "The value is the phone number itself.", + "pattern": "^\\+[1-9]{1}[0-9]{3,14}$", + "example": "+14165550142" + }, + "roles": { + "title": "Type of phone number.", + "description": "The type of phone number (e.g. home, work, fax, etc.).", + "$ref": "#/components/schemas/collectionDesc/allOf/0/properties/contacts/items/properties/roles" + } + } + } + }, + "emails": { + "type": "array", + "title": "Email addresses", + "description": "Email addresses at which contact can be made.", + "items": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string", + "title": "Email address", + "description": "The value is the email itself.", + "format": "email" + }, + "roles": { + "title": "Type of email", + "description": "The type of email (e.g. home, work, etc.).", + "$ref": "#/components/schemas/collectionDesc/allOf/0/properties/contacts/items/properties/roles" + } + } + } + }, + "addresses": { + "type": "array", + "title": "Postal addresses", + "description": "Physical locations at which contact can be made.", + "items": { + "type": "object", + "properties": { + "deliveryPoint": { + "type": "array", + "title": "Details of the address", + "description": "Address lines for the location (e.g. street name and door number).", + "items": { + "type": "string" + } + }, + "city": { + "type": "string", + "title": "City", + "description": "City for the location." + }, + "administrativeArea": { + "type": "string", + "title": "State of province", + "description": "State or province of the location." + }, + "postalCode": { + "type": "string", + "title": "Postal code", + "description": "ZIP or other postal code." + }, + "country": { + "type": "string", + "title": "Country", + "description": "Country of the physical address. ISO 3166-1 is recommended." + }, + "roles": { + "title": "Type of postal address", + "description": "The type of postal address (e.g. office, home, etc.).", + "$ref": "#/components/schemas/collectionDesc/allOf/0/properties/contacts/items/properties/roles" + } + } + } + }, + "links": { + "type": "array", + "title": "Links about the contact", + "description": "On-line information about the contact.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/link" + }, + { + "type": "object", + "required": [ + "type" + ] + } + ] + } + }, + "hoursOfService": { + "type": "string", + "title": "Hours of service", + "description": "Time period when the contact can be contacted.", + "example": "Hours: Mo-Fr 10am-7pm Sa 10am-22pm Su 10am-21pm" + }, + "contactInstructions": { + "type": "string", + "title": "Contact instructions", + "description": "Supplemental instructions on how or when to contact can be made." + }, + "roles": { + "title": "Types of contact person", + "description": "The set of named duties, job functions and/or permissions associated with this contact. (e.g. developer, administrator, etc.).", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + } + } + } + }, + "license": { + "type": "string", + "title": "License associated to the collection", + "description": "The legal provisions under which the data of this collection is made available." + }, + "rights": { + "type": "string", + "title": "Rights over the collection", + "description": "A statement that concerns all rights not addressed by the license such as a copyright statement." + }, + "formats": { + "title": "Formats for distributing the collection", + "description": "A list of formats in which the data of this collection is distributed", + "type": "array", + "items": { + "type": "object", + "anyOf": [ + { + "required": [ + "name" + ] + }, + { + "required": [ + "mediaType" + ] + } + ], + "properties": { + "name": { + "title": "Name of the format", + "description": "Name of the format.", + "type": "string" + }, + "mediaType": { + "title": "Media type of the format", + "description": "Media type of the format.", + "type": "string" + } + } + } + }, + "keywords": { + "type": "array", + "title": "Keywords representing aspects of the collection", + "description": "The topic or topics of the resource. Typically represented using free-form keywords, tags, key phrases, or classification codes.", + "items": { + "type": "string" + } + }, + "themes": { + "type": "array", + "title": "Themes represented by the resource", + "description": "A knowledge organization system used to classify the resource.", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "concepts", + "scheme" + ], + "properties": { + "concepts": { + "type": "array", + "title": "List of concepts in the vocabulary", + "description": "One or more entity/concept identifiers from this knowledge system. it is recommended that a resolvable URI be used for each entity/concept identifier.", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "title": "Identifier for the concept", + "description": "Identifier for the concept in the knowledge system.", + "minLength": 1 + }, + "title": { + "type": "string", + "title": "Title of the concept", + "description": "A human readable title for the concept." + }, + "description": { + "type": "string", + "title": "Description of the concept", + "description": "A human readable description for the concept." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URI of the concept", + "description": "A URI providing further description of the concept. It is called \"definition\" in STA." + } + } + } + }, + "scheme": { + "type": "string", + "title": "Identifier of the vocabulary", + "description": "An identifier for the knowledge organization system used to classify the resource. It is recommended that the identifier be a resolvable URI. The list of schemes used in a searchable catalog can be determined by inspecting the server's OpenAPI document or, if the server implements CQL2, by exposing a queryable (e.g. named `scheme`) and enumerating the list of schemes in the queryable's schema definition." + } + } + } + }, + "resourceLanguages": { + "type": "array", + "title": "The list of languages of the collection", + "description": "The list of languages in which the data of this collection is available.", + "items": { + "type": "object", + "title": "Resource language", + "description": "The language used for textual values in this resource.", + "required": [ + "code" + ], + "properties": { + "code": { + "type": "string", + "title": "Code", + "description": "The language tag as per RFC-5646.", + "example": "el" + }, + "name": { + "type": "string", + "minLength": 1, + "title": "Original name", + "description": "The untranslated name of the language.", + "example": "Ελληνικά" + }, + "alternate": { + "type": "string", + "title": "Translated name", + "description": "The name of the language in another well-understood language, usually English.", + "example": "Greek" + }, + "dir": { + "type": "string", + "title": "Direction of the text", + "description": "The direction for text in this language. The default, `ltr` (left-to-right), represents the most common situation. However, care should be taken to set the value of `dir` appropriately if the language direction is not `ltr`. Other values supported are `rtl` (right-to-left), `ttb` (top-to-bottom), and `btt` (bottom-to-top).", + "enum": [ + "ltr", + "rtl", + "ttb", + "btt" + ], + "default": "ltr" + } + } + } + }, + "links": { + "type": "array", + "title": "Links relevant to this collection", + "description": "Links to this or other resources related to this collection.", + "example": [ + { + "href": "http://data.example.org/collections/dem?f=json", + "rel": "self", + "type": "application/json", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem?f=html", + "rel": "alternate", + "type": "application/json", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage", + "rel": "coverage", + "type": "image/tiff; application=geotiff", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage/domainset", + "rel": "domainset", + "type": "application/json", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage/rangetype", + "rel": "rangetype", + "type": "application/json", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage/metadata", + "rel": "metadata", + "type": "application/json", + "title": "Digital Elevation Model" + } + ], + "items": { + "$ref": "#/components/schemas/link" + } + }, + "itemType": { + "title": "Type of the items in the collection", + "description": "Indicator about the type of the items in the collection if the collection has an accessible `/collections/{collectionId}/items` endpoint (e.g., `feature` or `record`).", + "type": "string", + "default": "feature" + }, + "dataType": { + "title": "Nature of the data in the collection", + "description": "Nature of the data in the collection. For example, this could be set to `map`, `vector` or `coverage`. It is not an indication of the available data access mechanism, but a hint regarding the internal representation of the data.", + "$ref": "#/components/schemas/dataType" + }, + "featureTypes": { + "title": "Feature type(s) present in the collection", + "description": "The list of feature (or coverage) type(s) which are present inside the collection. This is useful for associating the relevant portrayal rules of a style.", + "type": "string" + }, + "parent": { + "title": "Identifier of a parent collection (if this collection is part of a hierarchy)", + "description": "If this collection is part of a hierarchy, this property allows to identify another collection within the same dataset as its parent (by setting `parent` to the `id` of that collection), enabling clients to construct a hierarchy.", + "type": "string" + }, + "geoDataClasses": { + "title": "Class of data in the collection", + "description": "One or more classes of geospatial data, identified by a URI, which implies compatibility with a particular schema (fields/properties, as defined in OGC API - Common - Part 3: Schemas) for one or more collections, each with particular semantic definitions and data types. This is useful for example to determine compatibility with styles or processes, or to identify a particular collection within a dataset based on semantics.", + "type": "array", + "items": { + "type": "string", + "format": "uri" + } + }, + "defaultFields": { + "title": "List of fields returned by default", + "description": "A sorted list of field names. For a Features data access mechanism, it is the list of returnable properties included by default and complementing the geometry of the features. For a Coverage data access mechanism, they are names of fields whose values are included by default. Note that an API may provide a mechanism (e.g., a query parameter called `properties` or `exclude-properties`) to override this default list in customized responses.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "crs": { + "title": "List of coordinate reference systems supported in the collection", + "description": "The list of coordinate reference systems supported by the API; if present, the list should include the default coordinate reference system (usually listed first). Each item should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + }, + "default": [ + "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + ], + "example": [ + "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "http://www.opengis.net/def/crs/EPSG/0/4326" + ] + }, + "storageCrs": { + "title": "Storage or native CRS of the data in the collection", + "description": "The native coordinate reference system (i.e., the most efficient CRS in which to request the data, possibly how the data is stored on the server); this is the default output coordinate reference system for Maps and Coverages. This should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ], + "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "example": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + }, + "epoch": { + "title": "Epoch of the data in the collection", + "description": "Epoch of the native (storage) Coordinate Reference System (CRS)", + "type": "number", + "example": 2021.33 + }, + "geometryDimension": { + "title": "Number of spatial dimensions of the primary geometry for the data", + "description": "Number of spatial dimensions of the primary geometry of individual elements of the data: 0 for points, 1 for curves, 2 for surfaces, 3 for solids and unspecified when mixed or unknown. Not to be confused with the dimensions of the domain which are defined by the extent element.", + "type": "integer", + "minimum": 0, + "maximum": 3 + }, + "minScaleDenominator": { + "title": "Minimum scale denominator for the collection", + "description": "Minimum scale denominator for usage of the collection.", + "type": "number" + }, + "maxScaleDenominator": { + "title": "Maximum scale denominator for the collection", + "description": "Maximum scale denominator for usage of the collection.", + "type": "number" + }, + "minCellSize": { + "title": "Minimum cell size for the collection", + "description": "Minimum cell size for usage of the collection.", + "type": "number" + }, + "maxCellSize": { + "title": "Maximum cell size for the collection", + "description": "Maximum cell size for usage of the collection.", + "type": "number" + }, + "created": { + "title": "Timestamp when the collection was first produced", + "description": "Timestamp indicating when the data in the collection was first produced.", + "type": "string", + "format": "date-time" + }, + "updated": { + "title": "Timestamp of the last change/revision to the collection", + "description": "Timestamp of the last change/revision to the data in the collection.", + "type": "string", + "format": "date-time" + } + } + }, + { + "type": "object", + "properties": { + "extent": { + "$ref": "#/components/schemas/extent" + } + } + } + ] + }, + "extent": { + "title": "Extent with (optional) Uniform Additional Dimensions Schema", + "description": "The extent of the data in the collection.\nThis extent schema includes optional additional dimensions, but will still validate for objects not conforming to UAD.\nOGC API - Common - Part 2 \"Collections\" requirements class specifies only the definition of the spatial and temporal extents.\nThe \"Uniform Additional Dimensions\" requirements class specifies a generic schema for describing any additional dimension, such as thermal or pressure ranges.", + "allOf": [ + { + "type": "object", + "properties": { + "spatial": { + "title": "Spatial extent", + "description": "The spatial extent of the data in the collection.", + "type": "object", + "properties": { + "bbox": { + "title": "Bounding box in the 'crs' coordinates", + "description": "One or more bounding boxes that describe the spatial extent of the dataset.\n\nThe first bounding box describes the overall spatial\nextent of the data. All subsequent bounding boxes describe\nmore precise bounding boxes, e.g., to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", + "type": "array", + "minItems": 1, + "items": { + "description": "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)\n\nIf the value consists of four numbers, the coordinate reference system is\nWGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in `crs` property.\n\nIf the value consists of six numbers, the coordinate reference system is WGS 84\nlongitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h)\nunless a different coordinate reference system is specified in `crs` property.\n\nFor WGS 84 longitude/latitude the values are in most cases the sequence of\nminimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value\n(west-most box edge) is larger than the third value (east-most box edge).\n\nIf the vertical axis is included, the third and the sixth number are\nthe bottom and the top of the 3-dimensional bounding box.\n\nIf a feature has multiple spatial geometry properties, it is the decision of the\nserver whether only a single spatial geometry property is used to determine\nthe extent or all relevant geometries.", + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 }, - "steps": { - "description": "The individual steps that make up the workflow. Each step is executed when all of its\ninput data links are fulfilled. An implementation may choose to execute\nthe steps in a different order than listed and/or execute steps\nconcurrently, provided that dependencies between steps are met.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/WorkflowStep" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "$ref": "#/definitions/WorkflowStep" - } - }, - "type": "object" - } - ] + { + "minItems": 6, + "maxItems": 6 + } + ], + "items": { + "type": "number" + }, + "example": [ + -180, + -90, + 180, + 90 + ] + } + }, + "storageCrsBbox": { + "title": "Bounding box in the storage CRS", + "description": "One or more bounding boxes that describe the spatial extent of the dataset in the storage (native) CRS (`storageCrs` property).\n\nThe first bounding box describes the overall spatial\nextent of the data. All subsequent bounding boxes describe\nmore precise bounding boxes, e.g., to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", + "type": "array", + "minItems": 1, + "items": { + "description": "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)", + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 + }, + { + "minItems": 6, + "maxItems": 6 } + ], + "items": { + "type": "number" + }, + "example": [ + -180, + -90, + 180, + 90 + ] + } + }, + "crs": { + "title": "Coordinate reference system", + "description": "Coordinate reference system of the coordinates of the `bbox` property.\nThe default reference system is WGS 84 longitude/latitude.\nWGS 84 longitude/latitude/ellipsoidal height for coordinates with height.\nFor data not referenced to Earth, another CRS may be specified.\nThis should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "http://www.opengis.net/def/crs/OGC/0/CRS84h" + ] + }, + { + "type": "object" + } + ], + "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + }, + "grid": { + "title": "Grid description", + "description": "Provides information about the limited availability of data within the collection organized\nas a grid (regular or irregular) along each spatial dimension.", + "type": "array", + "minItems": 2, + "maxItems": 3, + "items": { + "$ref": "#/components/schemas/extent-UAD/allOf/0/additionalProperties/properties/grid" + } + } + } + }, + "temporal": { + "title": "Temporal extent", + "description": "The temporal extent of the data in the collection.", + "type": "object", + "properties": { + "interval": { + "title": "Temporal intervals", + "description": "One or more time intervals that describe the temporal extent of the dataset.\n\nThe first time interval describes the overall\ntemporal extent of the data. All subsequent time intervals describe\nmore precise time intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item in each array.", + "type": "array", + "minItems": 1, + "items": { + "description": "Begin and end times of the time interval. The timestamps are in the\ntemporal coordinate reference system specified in `trs`. By default\nthis is the Gregorian calendar, expressed using RFC 3339 section 5.6.\nNote that these times may be specified using time zone offsets to UTC time other than zero.\n\nThe value `null` for start or end time is supported and indicates a half-bounded time interval.", + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": "2011-11-11T12:22:11Z" + } + } + }, + "trs": { + "title": "Temporal Coordinate Reference System", + "description": "Coordinate reference system of the coordinates in the temporal extent\n(property `interval`). The default reference system is the Gregorian calendar.\nFor data for which the Gregorian calendar is not suitable, such as geological time scale, another temporal reference system may be used.\nThis should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" + ] }, + { + "type": "object" + } + ], + "default": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" + }, + "grid": { + "$ref": "#/components/schemas/extent-UAD/allOf/0/additionalProperties/properties/grid" + } + } + } + } + }, + { + "anyOf": [ + { + "type": "object", + "description": "General object extension point" + }, + { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/extent-UAD/allOf/0/additionalProperties" + } + } + ] + } + ] + }, + "extent-UAD": { + "title": "Extent conforming to Uniform Additional Dimensions Schema", + "description": "The extent of the data in the collection.\nThis extent schema requires that if any dimension beyond spatial and temporal are specified, they conform to the Uniform Additional Dimensions schema.\nIn addition to the spatial and temporal extents defined in the \"Collections\" requirements class of OGC API - Common - Part 2,\nthe \"Uniform Additional Dimensions\" requirements class specifies a generic schema for describing any additional dimension, such as thermal or pressure ranges.", + "allOf": [ + { + "type": "object", + "properties": { + "spatial": { + "$ref": "#/components/schemas/extent/allOf/0/properties/spatial" + }, + "temporal": { + "$ref": "#/components/schemas/extent/allOf/0/properties/temporal" + } + }, + "additionalProperties": { + "title": "Extent of any additional dimensions", + "description": "The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial.", + "type": "object", + "oneOf": [ + { + "required": [ + "interval", + "definition" + ] + }, + { + "required": [ + "interval", + "trs" + ] + }, + { + "required": [ + "interval", + "vrs" + ] + } + ], + "properties": { + "interval": { + "title": "Interval of the extent of this dimension", + "description": "One or more intervals that describe the extent for this dimension of the dataset.\nThe value `null` is supported and indicates an unbounded or half-bounded interval.\nThe first interval describes the overall extent of the data for this dimension.\nAll subsequent intervals describe more precise intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item (a pair of lower and upper bound values).", + "type": "array", + "minItems": 1, + "items": { + "description": "Lower and upper bound values of the interval. The values\nare in the coordinate reference system specified in `crs`, `trs` or `vrs`.", + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "type": "string", + "nullable": true, + "example": "2011-11-11T12:22:11Z" + }, + { + "type": "number", + "example": 32.7 + } + ] + } + } + }, + "trs": { + "title": "Temporal Coordinate Reference System", + "description": "Temporal Coordinate Reference System (e.g. as defined by Features for 'temporal'). This should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + }, + "vrs": { + "title": "Vertical Coordinate Reference System", + "description": "Vertical Coordinate Reference System (e.g. as defined in EDR for 'vertical'). This should be a URI to a registered VRS if one is available, or a full description of the VRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + }, + "grid": { + "type": "object", + "title": "Grid.", + "description": "Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the dimension.", + "allOf": [ + { + "type": "object", "required": [ - "class", - "inputs", - "outputs", - "steps" + "cellsCount" ], - "type": "object" - }, - "WorkflowInputParameter": { - "additionalProperties": false, - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#WorkflowInputParameter", "properties": { - "default": { - "description": "The default value to use for this parameter if the parameter is missing\nfrom the input object, or if the value of the parameter in the input\nobject is `null`. Default values are applied before evaluating expressions\n(e.g. dependent `valueFrom` fields)." - }, - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis must be one or more IRIs of concept nodes\nthat represents file formats which are allowed as input to this\nparameter, preferably defined within an ontology. If no ontology is\navailable, file formats may be tested by exact match." - }, - "id": { - "description": "The unique identifier for this object.", - "type": "string" - }, - "inputBinding": { - "$ref": "#/definitions/InputBinding", - "description": "Deprecated. Preserved for v1.0 backwards compatibility. Will be removed in\nCWL v2.0. Use `WorkflowInputParameter.loadContents` instead." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "loadContents": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nIf true, the file (or each file in the array) must be a UTF-8\ntext file 64 KiB or smaller, and the implementation must read\nthe entire contents of the file (or file array) and place it\nin the `contents` field of the File object for use by\nexpressions. If the size of the file is greater than 64 KiB,\nthe implementation must raise a fatal error.", - "type": "boolean" - }, - "loadListing": { - "description": "Only valid when `type: Directory` or is an array of `items: Directory`.\n\nSpecify the desired behavior for loading the `listing` field of\na Directory object for use by expressions.\n\nThe order of precedence for loadListing is:\n\n 1. `loadListing` on an individual parameter\n 2. Inherited from `LoadListingRequirement`\n 3. By default: `no_listing`", - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } + "cellsCount": { + "title": "Cell count", + "description": "Number of samples available along the dimension for data organized as a regular or irregular grid.", + "type": "integer", + "example": 50 + } + } + }, + { + "oneOf": [ + { + "type": "object", + "title": "Regular grid", + "description": "Regular grid with samples spaced at equal intervals.", + "required": [ + "resolution", + "firstCoordinate" ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" + "properties": { + "resolution": { + "title": "Resolution", + "description": "Resolution of regularly gridded data along the dimension in the collection.", + "oneOf": [ + { + "type": "string", + "nullable": true, + "example": "PT1H" + }, + { + "type": "number", + "example": 0.0006866455078 + } + ] }, - { + "availableResolutions": { + "title": "Available resolutions", + "description": "List of resolutions made available by the API. If not specified, there are no limit other than the limits indicated in `minCellSize` and `maxCellSize` of the collection description (though the API might still allow requesting data beyond these).", + "type": "array", "items": { - "anyOf": [ + "oneOf": [ { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" + "type": "string", + "nullable": true }, { - "type": "string" + "type": "number" } ] }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "WorkflowOutputParameter": { - "additionalProperties": false, - "description": "Describe an output parameter of a workflow. The parameter must be\nconnected to one or more parameters defined in the workflow that\nwill provide the value of the output parameter. It is legal to\nconnect a WorkflowInputParameter to a WorkflowOutputParameter.\n\nSee [WorkflowStepInput](#WorkflowStepInput) for discussion of\n`linkMerge` and `pickValue`.", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis is the file format that will be assigned to the output\nFile object.", - "type": "string" - }, - "id": { - "description": "The unique identifier for this object.", - "type": "string" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "linkMerge": { - "description": "The method to use to merge multiple sources into a single array.\nIf not specified, the default method is \"merge_nested\".", - "enum": [ - "merge_flattened", - "merge_nested" - ], - "type": "string" - }, - "outputSource": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specifies one or more names of an output from a workflow step (in the form\n`step_name/output_name` with a `/` separator`), or a workflow input name,\nthat supply their value(s) to the output parameter.\nthe output parameter. It is valid to reference workflow level inputs\nhere." - }, - "pickValue": { - "description": "The method to use to choose non-null elements among multiple sources.", - "enum": [ - "all_non_null", - "first_non_null", - "the_only_non_null" - ], - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" + "example": [ + "P1H", + "P1D", + "P1M" + ] }, - { - "$ref": "#/definitions/OutputArraySchema" + "firstCoordinate": { + "title": "First coordinate", + "description": "First coordinate where a regular grid begins, with subsequent coordinates adding `resolution` unit at each step.", + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "number" + } + ], + "example": -180 }, - { + "relativeBounds": { + "title": "Relative bounds", + "description": "Distance in units from coordinate to the lower and upper bounds of each cell for regular grids, describing the geometry of the cells.", + "type": "array", + "minItems": 2, + "maxItems": 2, "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, + "oneOf": [ { - "$ref": "#/definitions/OutputArraySchema" + "type": "string", + "nullable": true }, { - "type": "string" + "type": "number" } ] }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specify valid types of data that may be assigned to this parameter." - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "WorkflowStep": { - "additionalProperties": false, - "description": "A workflow step is an executable element of a workflow. It specifies the\nunderlying process implementation (such as `CommandLineTool` or another\n`Workflow`) in the `run` field and connects the input and output parameters\nof the underlying process to workflow parameters.\n\n# Scatter/gather\n\nTo use scatter/gather,\n[ScatterFeatureRequirement](#ScatterFeatureRequirement) must be specified\nin the workflow or workflow step requirements.\n\nA \"scatter\" operation specifies that the associated workflow step or\nsubworkflow should execute separately over a list of input elements. Each\njob making up a scatter operation is independent and may be executed\nconcurrently.\n\nThe `scatter` field specifies one or more input parameters which will be\nscattered. An input parameter may be listed more than once. The declared\ntype of each input parameter implicitly becomes an array of items of the\ninput parameter type. If a parameter is listed more than once, it becomes\na nested array. As a result, upstream parameters which are connected to\nscattered parameters must be arrays.\n\nAll output parameter types are also implicitly wrapped in arrays. Each job\nin the scatter results in an entry in the output array.\n\nIf any scattered parameter runtime value is an empty array, all outputs are\nset to empty arrays and no work is done for the step, according to\napplicable scattering rules.\n\nIf `scatter` declares more than one input parameter, `scatterMethod`\ndescribes how to decompose the input into a discrete set of jobs.\n\n * **dotproduct** specifies that each of the input arrays are aligned and one\n element taken from each array to construct each job. It is an error\n if all input arrays are not the same length.\n\n * **nested_crossproduct** specifies the Cartesian product of the inputs,\n producing a job for every combination of the scattered inputs. The\n output must be nested arrays for each level of scattering, in the\n order that the input arrays are listed in the `scatter` field.\n\n * **flat_crossproduct** specifies the Cartesian product of the inputs,\n producing a job for every combination of the scattered inputs. The\n output arrays must be flattened to a single level, but otherwise listed in the\n order that the input arrays are listed in the `scatter` field.\n\n# Conditional execution (Optional)\n\nConditional execution makes execution of a step conditional on an\nexpression. A step that is not executed is \"skipped\". A skipped\nstep produces `null` for all output parameters.\n\nThe condition is evaluated after `scatter`, using the input object\nof each individual scatter job. This means over a set of scatter\njobs, some may be executed and some may be skipped. When the\nresults are gathered, skipped steps must be `null` in the output\narrays.\n\nThe `when` field controls conditional execution. This is an\nexpression that must be evaluated with `inputs` bound to the step\ninput object (or individual scatter job), and returns a boolean\nvalue. It is an error if this expression returns a value other\nthan `true` or `false`.\n\nConditionals in CWL are an optional feature and are not required\nto be implemented by all consumers of CWL documents. An\nimplementation that does not support conditionals must return a\nfatal error when attempting to execute a workflow that uses\nconditional constructs the implementation does not support.\n\n# Subworkflows\n\nTo specify a nested workflow as part of a workflow step,\n[SubworkflowFeatureRequirement](#SubworkflowFeatureRequirement) must be\nspecified in the workflow or workflow step requirements.\n\nIt is a fatal error if a workflow directly or indirectly invokes itself as\na subworkflow (recursive workflows are not allowed).", - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "hints": { - "description": "Declares hints applying to either the runtime environment or the\nworkflow engine that may be helpful in executing this workflow step. It is\nnot an error if an implementation cannot satisfy all hints, however\nthe implementation may report a warning.", - "items": {}, - "type": "array" - }, - "id": { - "description": "The unique identifier for this object.", - "type": "string" - }, - "in": { - "description": "Defines the input parameters of the workflow step. The process is ready to\nrun when all required input parameters are associated with concrete\nvalues. Input parameters include a schema for each parameter which is\nused to validate the input object. It may also be used build a user\ninterface for constructing the input object.", - "oneOf": [ - { - "items": { - "$ref": "#/definitions/WorkflowStepInput" - }, - "type": "array" - }, - { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "oneOf": [ - { - "$ref": "#/definitions/WorkflowStepInput" - }, - { - "type": "string" - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/WorkflowStepInput" - } - ] - } - } - ] - } - }, - "type": "object" + "example": [ + -0.5, + 0.5 + ] } - ] - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "out": { - "description": "Defines the parameters representing the output of the process. May be\nused to generate and/or validate the output object.", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/WorkflowStepOutput" - }, - { - "type": "string" - } - ] - }, - "type": "array" + } }, - "requirements": { - "description": "Declares requirements that apply to either the runtime environment or the\nworkflow engine that must be met in order to execute this workflow step. If\nan implementation cannot satisfy all requirements, or a requirement is\nlisted which is not recognized by the implementation, it is a fatal\nerror and the implementation must not attempt to run the process,\nunless overridden at user option.", - "oneOf": [ - { + { + "type": "object", + "title": "Irregular grid.", + "description": "Irregular grid with samples spaced at different intervals.", + "required": [ + "coordinates" + ], + "properties": { + "coordinates": { + "title": "Coordinates of the irregular cells", + "description": "List of coordinates along the dimension for which data organized as an irregular grid in the collection is available.\n(e.g., 2, 10, 80, 100).", + "type": "array", + "minItems": 1, "items": { - "anyOf": [ - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - }, - { - "$ref": "#/definitions/InlineJavascriptRequirement" - }, - { - "$ref": "#/definitions/SchemaDefRequirement" - }, - { - "$ref": "#/definitions/LoadListingRequirement" - }, - { - "$ref": "#/definitions/DockerRequirement" - }, - { - "$ref": "#/definitions/SoftwareRequirement" - }, - { - "$ref": "#/definitions/InitialWorkDirRequirement" - }, - { - "$ref": "#/definitions/EnvVarRequirement" - }, - { - "$ref": "#/definitions/ShellCommandRequirement" - }, - { - "$ref": "#/definitions/ResourceRequirement" - }, - { - "$ref": "#/definitions/WorkReuse" - }, - { - "$ref": "#/definitions/NetworkAccess" - }, - { - "$ref": "#/definitions/InplaceUpdateRequirement" - }, - { - "$ref": "#/definitions/ToolTimeLimit" - }, - { - "$ref": "#/definitions/SubworkflowFeatureRequirement" - }, - { - "$ref": "#/definitions/ScatterFeatureRequirement" - }, + "oneOf": [ { - "$ref": "#/definitions/MultipleInputFeatureRequirement" + "type": "string", + "nullable": true, + "example": "2020-11-12T12:15:00Z" }, { - "$ref": "#/definitions/StepInputExpressionRequirement" + "type": "number", + "example": 12.3 } ] }, - "type": "array" + "example": [ + 2, + 10, + 80, + 100 + ] }, - { - "type": "object", - "properties": { - "InlineJavascriptRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InlineJavascriptRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SchemaDefRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SchemaDefRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "LoadListingRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/LoadListingRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "DockerRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/DockerRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SoftwareRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwareRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InitialWorkDirRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InitialWorkDirRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "EnvVarRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/EnvVarRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ShellCommandRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ShellCommandRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ResourceRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ResourceRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "WorkReuse": { - "anyOf": [ - { - "$ref": "#/definitions/WorkReuseMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "NetworkAccess": { - "anyOf": [ - { - "$ref": "#/definitions/NetworkAccessMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "InplaceUpdateRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/InplaceUpdateRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ToolTimeLimit": { - "anyOf": [ - { - "$ref": "#/definitions/ToolTimeLimitMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "SubworkflowFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/SubworkflowFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "ScatterFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/ScatterFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "MultipleInputFeatureRequirement": { - "anyOf": [ - { - "$ref": "#/definitions/MultipleInputFeatureRequirementMap" - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - }, - "StepInputExpressionRequirement": { - "anyOf": [ + "boundsCoordinates": { + "title": "Bounds coordinates", + "description": "For irregular grids, an ordered list of the coordinates in absolute units of the lower and upper bounds of the dimension for each cell.", + "type": "array", + "minItems": 1, + "items": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ { - "$ref": "#/definitions/StepInputExpressionRequirementMap" + "type": "string", + "nullable": true }, { - "type": "object", - "properties": {}, - "additionalProperties": false + "type": "number" } ] } }, - "additionalProperties": false - } - ] - }, - "run": { - "anyOf": [ - { - "$ref": "#/definitions/CommandLineTool" - }, - { - "$ref": "#/definitions/ExpressionTool" - }, - { - "$ref": "#/definitions/Workflow" - }, - { - "$ref": "#/definitions/Operation" - }, - { - "type": "string" - } - ], - "description": "Specifies the process to run. If `run` is a string, it must be an absolute IRI\nor a relative path from the primary document." - }, - "scatter": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" + "example": [ + [ + -180, + -179 + ], + [ + -179, + -178 + ] + ] } - ] - }, - "scatterMethod": { - "description": "Required if `scatter` is an array of more than one element.", - "enum": [ - "dotproduct", - "flat_crossproduct", - "nested_crossproduct" - ], - "type": "string" - }, - "when": { - "description": "If defined, only run the step when the expression evaluates to\n`true`. If `false` the step is skipped. A skipped step\nproduces a `null` on each output.", - "type": "string" + } } + ] + } + ] + }, + "definition": { + "type": "string", + "format": "uri", + "title": "Observed property definition", + "description": "A URI for the definition of the measured or observed property corresponding to this dimension." + }, + "unit": { + "type": "string", + "title": "Units of measurement", + "description": "The unit of measure in which the interval and/or grid values are expressed." + }, + "unitLang": { + "type": "string", + "default": "UCUM", + "title": "Units of measurement vocabulary", + "description": "The language (or vocabulary) in which the unit is expressed (defaults to \"UCUM\" if not specified)." + }, + "variableType": { + "title": "Variable type", + "description": "The type of variable which may inform correct interpretation and interpolation methods.", + "type": "string", + "enum": [ + "continuous", + "numericalOrdinal", + "numericalNominal", + "categoricalOrdinal", + "categoricalNominal" + ] + } + } + } + } + ] + }, + "crs": { + "title": "CRS", + "oneOf": [ + { + "description": "Simplification of the object into a url if the other properties are not present", + "type": "string" + }, + { + "type": "object", + "oneOf": [ + { + "required": [ + "uri" + ], + "properties": { + "uri": { + "description": "Reference to one coordinate reference system (CRS)", + "type": "string", + "format": "uri" + } + } + }, + { + "required": [ + "wkt" + ], + "properties": { + "wkt": { + "allOf": [ + { + "description": "An object defining the CRS using the JSON encoding for Well-known text representation of coordinate reference systems 2.0" }, - "required": [ - "in", - "out", - "run" - ], - "type": "object" + { + "type": "object" + } + ] + } + } + }, + { + "required": [ + "referenceSystem" + ], + "properties": { + "referenceSystem": { + "description": "A reference system data structure as defined in the MD_ReferenceSystem of the ISO 19115", + "type": "object" + } + } + } + ] + } + ] + }, + "dataType": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "map", + "vector", + "coverage" + ] + } + ] + }, + "timeStamp": { + "title": "Time stamp", + "description": "This property indicates the time and date when the response was generated using RFC 3339 notation.", + "type": "string", + "format": "date-time", + "example": "2017-08-17T08:05:32Z" + }, + "numberReturned": { + "title": "The number of elements in the response", + "description": "A server may omit this information, if the information about the number of elements is not known or difficult to compute. If the value is provided, the value shall be identical to the number of elements in the response.", + "type": "integer", + "minimum": 0, + "example": 10 + }, + "numberMatched": { + "title": "The number of elements in the response", + "description": "The number of elements in the response that match the selection parameters like `bbox`.", + "type": "integer", + "minimum": 0, + "example": 127 + }, + "CWL": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLAtomic" + }, + { + "$ref": "#/components/schemas/CWLGraph" + }, + { + "$ref": "#/components/schemas/CWLWorkflow" + } + ] + }, + "cwltool_CUDARequirement": { + "type": "object", + "title": "cwltool:CUDARequirement", + "properties": { + "class": { + "type": "string", + "enum": [ + "cwltool:CUDARequirement" + ] + }, + "cudaVersionMin": { + "type": "string", + "title": "CUDA version minimum", + "description": "The minimum CUDA version required to run the software. This corresponds to a CUDA SDK release.\n\nWhen run in a container, the container image should provide the CUDA runtime,\nand the host driver is injected into the container. In this case, because CUDA drivers\nare backwards compatible, it is possible to use an older SDK with a newer driver across major versions.\n\nSee https://docs.nvidia.com/deploy/cuda-compatibility/ for details.\n", + "example": "11.4", + "pattern": "^\\d+\\.\\d+$" + }, + "cudaComputeCapability": { + "oneOf": [ + { + "type": "string", + "title": "CUDA compute capability", + "description": "The compute capability supported by the GPU hardware.", + "pattern": "^\\d+\\.\\d+$" + }, + { + "type": "array", + "title": "CUDAComputeCapabilityArray", + "items": { + "type": "string", + "title": "CUDA compute capability", + "description": "The compute capability supported by the GPU hardware.", + "pattern": "^\\d+\\.\\d+$" + }, + "minItems": 1 + } + ], + "title": "CUDA compute capability", + "description": "The compute capability supported by the GPU hardware.\n\n* If this is a single value, it defines only the minimum compute capability.\n GPUs with higher capability are also accepted.\n* If it is an array value, then only select GPUs with compute capabilities that explicitly\n appear in the array.\n See https://docs.nvidia.com/deploy/cuda-compatibility/#faq and\n https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#cuda-compute-capability\n for details.\n" + }, + "cudaDeviceCountMin": { + "type": "integer", + "title": "CUDA device count minimum", + "description": "The minimum amount of devices required.", + "default": 1, + "example": 1, + "minimum": 1 + }, + "cudaDeviceCountMax": { + "type": "integer", + "title": "CUDA device count maximum", + "description": "The maximum amount of devices required.", + "default": 1, + "example": 8, + "minimum": 1 + } + }, + "required": [ + "cudaVersionMin", + "cudaComputeCapability" + ], + "additionalProperties": false + }, + "CWLAtomic": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLVersion" + }, + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "$ref": "#/components/schemas/CWLAtomicBase" + } + ] + }, + "CWLAtomicNested": { + "description": "Same as 'CWLAtomic', but 'cwlVersion' not repeated (only at root).", + "allOf": [ + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "$ref": "#/components/schemas/CWLAtomicBase" + } + ] + }, + "CWLGraph": { + "title": "CWLGraph", + "allOf": [ + { + "$ref": "#/components/schemas/CWLVersion" + }, + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "type": "object", + "properties": { + "$graph": { + "type": "array", + "title": "CWLGraphList", + "description": "Graph definition that defines *exactly one* CWL application package represented as list. Multiple definitions simultaneously deployed is NOT supported currently.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" }, - "WorkflowStepInput": { - "additionalProperties": false, - "description": "The input of a workflow step connects an upstream parameter (from the\nworkflow inputs, or the outputs of other workflows steps) with the input\nparameters of the process specified by the `run` field. Only input parameters\ndeclared by the target process will be passed through at runtime to the process\nthough additional parameters may be specified (for use within `valueFrom`\nexpressions for instance) - unconnected or unused parameters do not represent an\nerror condition.\n\n# Input object\n\nA WorkflowStepInput object must contain an `id` field in the form\n`#fieldname` or `#prefix/fieldname`. When the `id` field contains a slash\n`/` the field name consists of the characters following the final slash\n(the prefix portion may contain one or more slashes to indicate scope).\nThis defines a field of the workflow step input object with the value of\nthe `source` parameter(s).\n\n# Merging multiple inbound data links\n\nTo merge multiple inbound data links,\n[MultipleInputFeatureRequirement](#MultipleInputFeatureRequirement) must be specified\nin the workflow or workflow step requirements.\n\nIf the sink parameter is an array, or named in a [workflow\nscatter](#WorkflowStep) operation, there may be multiple inbound\ndata links listed in the `source` field. The values from the\ninput links are merged depending on the method specified in the\n`linkMerge` field. If both `linkMerge` and `pickValue` are null\nor not specified, and there is more than one element in the\n`source` array, the default method is \"merge_nested\".\n\nIf both `linkMerge` and `pickValue` are null or not specified, and\nthere is only a single element in the `source`, then the input\nparameter takes the scalar value from the single input link (it is\n*not* wrapped in a single-list).\n\n* **merge_nested**\n\n The input must be an array consisting of exactly one entry for each\n input link. If \"merge_nested\" is specified with a single link, the value\n from the link must be wrapped in a single-item list.\n\n* **merge_flattened**\n\n 1. The source and sink parameters must be compatible types, or the source\n type must be compatible with single element from the \"items\" type of\n the destination array parameter.\n 2. Source parameters which are arrays are concatenated.\n Source parameters which are single element types are appended as\n single elements.\n\n# Picking non-null values among inbound data links\n\nIf present, `pickValue` specifies how to pick non-null values among inbound data links.\n\n`pickValue` is evaluated\n 1. Once all source values from upstream step or parameters are available.\n 2. After `linkMerge`.\n 3. Before `scatter` or `valueFrom`.\n\nThis is specifically intended to be useful in combination with\n[conditional execution](#WorkflowStep), where several upstream\nsteps may be connected to a single input (`source` is a list), and\nskipped steps produce null values.\n\nStatic type checkers should check for type consistency after inferring what the type\nwill be after `pickValue` is applied, just as they do currently for `linkMerge`.\n\n* **first_non_null**\n\n For the first level of a list input, pick the first non-null element. The result is a scalar.\n It is an error if there is no non-null element. Examples:\n * `[null, x, null, y] -> x`\n * `[null, [null], null, y] -> [null]`\n * `[null, null, null] -> Runtime Error`\n\n *Intended use case*: If-else pattern where the\n value comes either from a conditional step or from a default or\n fallback value. The conditional step(s) should be placed first in\n the list.\n\n* **the_only_non_null**\n\n For the first level of a list input, pick the single non-null element. The result is a scalar.\n It is an error if there is more than one non-null element. Examples:\n\n * `[null, x, null] -> x`\n * `[null, x, null, y] -> Runtime Error`\n * `[null, [null], null] -> [null]`\n * `[null, null, null] -> Runtime Error`\n\n *Intended use case*: Switch type patterns where developer considers\n more than one active code path as a workflow error\n (possibly indicating an error in writing `when` condition expressions).\n\n* **all_non_null**\n\n For the first level of a list input, pick all non-null values.\n The result is a list, which may be empty. Examples:\n\n * `[null, x, null] -> [x]`\n * `[x, null, y] -> [x, y]`\n * `[null, [x], [null]] -> [[x], [null]]`\n * `[null, null, null] -> []`\n\n *Intended use case*: It is valid to have more than one source, but\n sources are conditional, so null sources (from skipped steps)\n should be filtered out.", + { + "type": "object", + "title": "CWLGraphItem", "properties": { - "default": { - "description": "The default value for this parameter to use if either there is no\n`source` field, or the value produced by the `source` is `null`. The\ndefault must be applied prior to scattering or evaluating `valueFrom`." + "class": { + "type": "string", + "title": "Class", + "description": "CWL class specification. This is used to differentiate between single Application Package (AP)definitions and Workflow that chains multiple packages.", + "enum": [ + "CommandLineTool", + "ExpressionTool", + "Workflow" + ] }, "id": { - "description": "The unique identifier for this object.", - "type": "string" + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" + "intent": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/intent" }, - "linkMerge": { - "description": "The method to use to merge multiple inbound links into a single array.\nIf not specified, the default method is \"merge_nested\".", - "enum": [ - "merge_flattened", - "merge_nested" - ], - "type": "string" + "requirements": { + "$ref": "#/components/schemas/CWLRequirements" }, - "loadContents": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nIf true, the file (or each file in the array) must be a UTF-8\ntext file 64 KiB or smaller, and the implementation must read\nthe entire contents of the file (or file array) and place it\nin the `contents` field of the File object for use by\nexpressions. If the size of the file is greater than 64 KiB,\nthe implementation must raise a fatal error.", - "type": "boolean" + "hints": { + "$ref": "#/components/schemas/CWLHints" }, - "loadListing": { - "description": "Only valid when `type: Directory` or is an array of `items: Directory`.\n\nSpecify the desired behavior for loading the `listing` field of\na Directory object for use by expressions.\n\nThe order of precedence for loadListing is:\n\n 1. `loadListing` on an individual parameter\n 2. Inherited from `LoadListingRequirement`\n 3. By default: `no_listing`", - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" + "baseCommand": { + "$ref": "#/components/schemas/CWLCommand" }, - "pickValue": { - "description": "The method to use to choose non-null elements among multiple sources.", - "enum": [ - "all_non_null", - "first_non_null", - "the_only_non_null" - ], - "type": "string" + "arguments": { + "$ref": "#/components/schemas/CWLArguments" }, - "source": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Specifies one or more workflow parameters that will provide input to\nthe underlying step parameter." + "inputs": { + "$ref": "#/components/schemas/CWLInputsDefinition" }, - "valueFrom": { - "description": "To use valueFrom, [StepInputExpressionRequirement](#StepInputExpressionRequirement) must\nbe specified in the workflow or workflow step requirements.\n\nIf `valueFrom` is a constant string value, use this as the value for\nthis input parameter.\n\nIf `valueFrom` is a parameter reference or expression, it must be\nevaluated to yield the actual value to be assigned to the input field.\n\nThe `self` value in the parameter reference or expression must be\n1. `null` if there is no `source` field\n2. the value of the parameter(s) specified in the `source` field when this\nworkflow input parameter **is not** specified in this workflow step's `scatter` field.\n3. an element of the parameter specified in the `source` field when this workflow input\nparameter **is** specified in this workflow step's `scatter` field.\n\nThe value of `inputs` in the parameter reference or expression must be\nthe input object to the workflow step after assigning the `source`\nvalues, applying `default`, and then scattering. The order of\nevaluating `valueFrom` among step input parameters is undefined and the\nresult of evaluating `valueFrom` on a parameter must not be visible to\nevaluation of `valueFrom` on other parameters.", - "type": "string" - } - }, - "required": [], - "type": "object" - }, - "WorkflowStepOutput": { - "additionalProperties": false, - "description": "Associate an output parameter of the underlying process with a workflow\nparameter. The workflow parameter (given in the `id` field) be may be used\nas a `source` to connect with input parameters of other workflow steps, or\nwith an output parameter of the process.\n\nA unique identifier for this workflow output parameter. This is\nthe identifier to use in the `source` field of `WorkflowStepInput`\nto connect the output value to downstream parameters.", - "properties": { - "id": { - "description": "The unique identifier for this object.", - "type": "string" - } - }, - "required": [], - "type": "object" - }, - "CWLImportManual": { - "description": "Represents an '$import' directive that should point toward another compatible CWL file to import where specified. The contents of the imported file should be relevant contextually where it is being imported", - "$comment": "The schema validation of the CWL will not itself perform the '$import' to resolve and validate its contents. Therefore, the complete schema will not be validated entirely, and could still be partially malformed. To ensure proper and exhaustive validation of a CWL definition with this schema, all '$import' directives should be resolved and extended beforehand", - "type": "object", - "properties": { - "$import": { - "type": "string" - } - }, - "required": [ - "$import" - ], - "additionalProperties": false - }, - "CWLIncludeManual": { - "description": "Represents an '$include' directive that should point toward another compatible CWL file to import where specified. The contents of the imported file should be relevant contextually where it is being imported", - "$comment": "The schema validation of the CWL will not itself perform the '$include' to resolve and validate its contents. Therefore, the complete schema will not be validated entirely, and could still be partially malformed. To ensure proper and exhaustive validation of a CWL definition with this schema, all '$include' directives should be resolved and extended beforehand", - "type": "object", - "properties": { - "$include": { - "type": "string" - } - }, - "required": [ - "$include" - ], - "additionalProperties": false - }, - "CWLDocumentMetadata": { - "description": "Metadata for a CWL document", - "type": "object", - "properties": { - "$namespaces": { - "description": "The namespaces used in the document", - "type": "object", - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "type": "string" - } - } + "outputs": { + "$ref": "#/components/schemas/CWLOutputsDefinition" }, - "$schemas": { - "description": "The schemas used in the document", - "type": "array", - "items": { - "type": "string" - } - } - }, - "patternProperties": { - "^\\w+:.*$": { - "type": "object" + "scatter": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/scatter" }, - "^\\w+:\\/\\/.*": { - "type": "object" + "scatterMethod": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/scatterMethod" } }, - "required": [] - }, - "CommandInputRecordFieldMap": { - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#CommandInputRecordField", - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis must be one or more IRIs of concept nodes\nthat represents file formats which are allowed as input to this\nparameter, preferably defined within an ontology. If no ontology is\navailable, file formats may be tested by exact match." - }, - "inputBinding": { - "$ref": "#/definitions/CommandLineBinding", - "description": "Describes how to turn this object into command line arguments." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "loadContents": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nIf true, the file (or each file in the array) must be a UTF-8\ntext file 64 KiB or smaller, and the implementation must read\nthe entire contents of the file (or file array) and place it\nin the `contents` field of the File object for use by\nexpressions. If the size of the file is greater than 64 KiB,\nthe implementation must raise a fatal error.", - "type": "boolean" - }, - "loadListing": { - "description": "Only valid when `type: Directory` or is an array of `items: Directory`.\n\nSpecify the desired behavior for loading the `listing` field of\na Directory object for use by expressions.\n\nThe order of precedence for loadListing is:\n\n 1. `loadListing` on an individual parameter\n 2. Inherited from `LoadListingRequirement`\n 3. By default: `no_listing`", - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" - }, - "name": { - "description": "The name of the field", - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - }, - "type": "object", - "required": [ - "type" - ] - }, - { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - }, - { - "type": "string" - } + "required": [ + "class", + "id", + "inputs", + "outputs" ] + } + ] + }, + "maxItems": 1, + "minItems": 1 + } + }, + "required": [ + "$graph" + ] + } + ] + }, + "CWLWorkflow": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLVersion" + }, + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "$ref": "#/components/schemas/CWLWorkflowClass" + }, + { + "$ref": "#/components/schemas/CWLWorkflowBase" + } + ] + }, + "CWLWorkflowClass": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "Workflow" + ] + } + } + }, + "CWLWorkflowBase": { + "type": "object", + "properties": { + "steps": { + "$ref": "#/components/schemas/CWLWorkflowSteps" + }, + "inputs": { + "$ref": "#/components/schemas/CWLInputsDefinition" + }, + "outputs": { + "$ref": "#/components/schemas/CWLOutputsDefinition" + }, + "requirements": { + "description": "Technically a different subset, but lots of redefinitions to be done.", + "$ref": "#/components/schemas/CWLRequirements" + }, + "hints": { + "description": "Technically a different subset, but lots of redefinitions to be done.", + "$ref": "#/components/schemas/CWLHints" + } + } + }, + "CWLWorkflowSteps": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepMap" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepList" + } + ] + }, + "CWLInputsDefinition": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLInputList" + }, + { + "description": "Avoid 'oneOf' conflict of generic mapping key strings as input identifier matching against '$import'.", + "allOf": [ + { + "$ref": "#/components/schemas/CWLInputMap" + }, + { + "not": { + "$ref": "#/components/schemas/CWLImport" + } + } + ] + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ], + "title": "CWLInputsDefinition", + "description": "All inputs available to the Application Package." + }, + "CWLOutputsDefinition": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLOutputList" + }, + { + "description": "Avoid 'oneOf' conflict of generic mapping key strings as output identifier matching against '$import'.", + "allOf": [ + { + "$ref": "#/components/schemas/CWLOutputMap" + }, + { + "not": { + "$ref": "#/components/schemas/CWLImport" + } + } + ] + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ], + "title": "CWLOutputsDefinition", + "description": "All outputs produced by the Application Package." + }, + "CWLWorkflowStepMap": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/CWLWorkflowStepObject" + } + }, + "CWLWorkflowStepList": { + "type": "array", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepId" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepObject" + } + ] + } + }, + "CWLInputList": { + "type": "array", + "title": "CWLInputList", + "description": "Package inputs defined as items.", + "items": { + "$ref": "#/components/schemas/CWLInputItem" + } + }, + "CWLInputMap": { + "type": "object", + "title": "CWLInputMap", + "description": "Package inputs defined as mapping.", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" + }, + { + "title": "CWLInputObject (CWL type definition with parameters).", + "allOf": [ + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLType" + }, + "inputBinding": { + "$ref": "#/components/schemas/InputBinding" + } + }, + "required": [ + "type" + ], + "additionalProperties": {} + }, + { + "$ref": "#/components/schemas/CWLDefaultTypedConditional" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + } + ] + }, + { + "$ref": "#/components/schemas/CWLInputStdIn" + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ] + } + }, + "ResourceQuantityOrFractional": { + "title": "An item quantity that can also represent a proportion of use by resources.", + "description": "Technically should be minimum=1, but fractional for scheduling algorithms are allowed.\nThere is no way to distinguish between float/long simultaneously in JSON schema (multi-match oneOf).\nTherefore, only validate that it is greater than zero.\n", + "type": "number", + "exclusiveMinimum": true, + "minimum": 0, + "default": 1 + }, + "CWLExpression": { + "type": "string", + "title": "CWLExpression", + "description": "When combined with 'InlineJavascriptRequirement', this field allows runtime parameter references\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression).\nWhenever this option is applicable for a parameter, any other 'normal' string should not be specified.\nFor JSON schema validation, there is no easy way to distinguish them unless using complicated string patterns.\n" + }, + "InitialWorkDirListing": { + "title": "InitialWorkDirListing", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLExpression" + }, + { + "type": "array", + "title": "InitialWorkDirListingItems", + "items": { + "oneOf": [ + { + "nullable": true, + "enum": [ + null + ] + }, + { + "$ref": "#/components/schemas/CWLExpression" + }, + { + "$ref": "#/components/schemas/DirectoryListingDirent" + }, + { + "$ref": "#/components/schemas/DirectoryListingFileOrDirectory" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/DirectoryListingFileOrDirectory" + } + } + ] + } + } + ] + }, + "CWLRequirementsMap": { + "title": "CWLRequirementsMap", + "type": "object", + "properties": { + "cwltool:CUDARequirement": { + "$ref": "#/components/schemas/cwltool_CUDARequirement" + }, + "DockerRequirement": { + "$ref": "#/components/schemas/DockerRequirement" + }, + "SoftwareRequirement": { + "$ref": "#/components/schemas/SoftwareRequirement" + }, + "ShellCommandRequirement": { + "$ref": "#/components/schemas/ShellCommandRequirement" + }, + "EnvVarRequirement": { + "$ref": "#/components/schemas/EnvVarRequirement" + }, + "SchemaDefRequirement": { + "$ref": "#/components/schemas/SchemaDefRequirement" + }, + "InitialWorkDirRequirement": { + "$ref": "#/components/schemas/InitialWorkDirRequirement" + }, + "InlineJavascriptRequirement": { + "$ref": "#/components/schemas/InlineJavascriptRequirement" + }, + "InplaceUpdateRequirement": { + "$ref": "#/components/schemas/InplaceUpdateRequirement" + }, + "LoadListingRequirement": { + "$ref": "#/components/schemas/LoadListingRequirement" + }, + "NetworkAccess": { + "allOf": [ + { + "description": "Not 'NetworkAccessRequirement'" + }, + { + "$ref": "#/components/schemas/NetworkAccessRequirement" + } + ] + }, + "ResourceRequirement": { + "$ref": "#/components/schemas/ResourceRequirement" + }, + "ScatterFeatureRequirement": { + "$ref": "#/components/schemas/ScatterFeatureRequirement" + }, + "ToolTimeLimit": { + "allOf": [ + { + "description": "Not 'ToolTimeLimitRequirement'" + }, + { + "$ref": "#/components/schemas/ToolTimeLimitRequirement" + } + ] + }, + "WorkReuse": { + "allOf": [ + { + "description": "Not 'WorkReuseRequirement'" + }, + { + "$ref": "#/components/schemas/WorkReuseRequirement" + } + ] + }, + "MultipleInputFeatureRequirement": { + "$ref": "#/components/schemas/MultipleInputFeatureRequirement" + }, + "StepInputExpressionRequirement": { + "$ref": "#/components/schemas/StepInputExpressionRequirement" + }, + "SubworkflowFeatureRequirement": { + "$ref": "#/components/schemas/SubworkflowFeatureRequirement" + } + }, + "additionalProperties": false + }, + "CWLRequirements": { + "title": "CWLRequirements", + "description": "Explicit requirement to execute the application package.", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLRequirementsMap" + }, + { + "$ref": "#/components/schemas/CWLRequirementsList" + } + ] + }, + "CWLCommand": { + "oneOf": [ + { + "type": "string", + "title": "String command." + }, + { + "type": "array", + "title": "Command Parts", + "items": { + "type": "string", + "title": "cmd" + }, + "additionalProperties": false + } + ], + "title": "CWLCommand", + "description": "Command called in the docker image or on shell according to requirements\nand hints specifications. Can be omitted if already defined in the docker\nimage.\n" + }, + "InputBinding": { + "type": "object", + "title": "Input Binding", + "description": "Defines how to specify the input for the command.", + "properties": { + "prefix": { + "type": "string" + }, + "position": { + "oneOf": [ + { + "type": "integer" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ] + }, + "valueFrom": { + "$ref": "#/components/schemas/CWLExpression" + }, + "itemSeparator": { + "type": "string" + }, + "shellQuote": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "CWLInputItem": { + "title": "Input", + "description": "Input specification. Note that multiple formats are supported and\nnot all specification variants or parameters are presented here. Please refer\nto official CWL documentation for more details (https://www.commonwl.org).\n", + "allOf": [ + { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" + }, + { + "$ref": "#/components/schemas/CWLInputStdIn" + } + ] + }, + "inputBinding": { + "$ref": "#/components/schemas/InputBinding" + }, + "id": { + "description": "Identifier of the CWL input.", + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + }, + "required": [ + "type", + "id" + ], + "additionalProperties": {} + }, + { + "$ref": "#/components/schemas/CWLDefaultTypedConditional" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + } + ] + }, + "DirectoryListingDirent": { + "description": "Called 'Dirent' in documentation.", + "type": "object", + "title": "DirectoryListingDirent", + "properties": { + "entry": { + "$ref": "#/components/schemas/CWLExpression" + }, + "entryname": { + "$ref": "#/components/schemas/CWLExpression" + }, + "writable": { + "type": "boolean" + } + }, + "required": [ + "entry" + ], + "additionalProperties": false + }, + "DirectoryListingFileOrDirectory": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "File", + "Directory" + ] + }, + "location": { + "type": "string" + }, + "checksum": { + "description": "Minimal pattern check to know which hash algorithm to apply,\nbut don't check too harshly for the rest (length, allowed characters, etc.).\n", + "type": "string", + "pattern": "^[a-z0-9\\-]+\\$[\\w\\-.]+$" + }, + "size": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "class", + "location" + ], + "additionalProperties": false + }, + "SoftwareRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "SoftwareRequirement" + ] + }, + "packages": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/SoftwarePackage" + } + }, + { + "type": "object", + "description": "Mapping of 'package' name to its specifications.", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/SoftwarePackageSpecs" }, - "InputRecordFieldMap": { - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#InputRecordField", - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis must be one or more IRIs of concept nodes\nthat represents file formats which are allowed as input to this\nparameter, preferably defined within an ontology. If no ontology is\navailable, file formats may be tested by exact match." - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "loadContents": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nIf true, the file (or each file in the array) must be a UTF-8\ntext file 64 KiB or smaller, and the implementation must read\nthe entire contents of the file (or file array) and place it\nin the `contents` field of the File object for use by\nexpressions. If the size of the file is greater than 64 KiB,\nthe implementation must raise a fatal error.", - "type": "boolean" - }, - "loadListing": { - "description": "Only valid when `type: Directory` or is an array of `items: Directory`.\n\nSpecify the desired behavior for loading the `listing` field of\na Directory object for use by expressions.\n\nThe order of precedence for loadListing is:\n\n 1. `loadListing` on an individual parameter\n 2. Inherited from `LoadListingRequirement`\n 3. By default: `no_listing`", - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" - }, - "name": { - "description": "The name of the field", - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - }, - "type": "object", - "required": [ - "type" - ] - }, - { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/InputRecordSchema" - }, - { - "$ref": "#/definitions/InputEnumSchema" - }, - { - "$ref": "#/definitions/InputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - }, - { - "type": "string" - } - ] + { + "$ref": "#/components/schemas/SoftwarePackage" + } + ] + } + } + ] + } + }, + "required": [ + "packages" + ], + "additionalProperties": false + }, + "DockerRequirement": { + "type": "object", + "title": "DockerRequirement", + "properties": { + "class": { + "type": "string", + "enum": [ + "DockerRequirement" + ] + }, + "dockerPull": { + "type": "string", + "title": "Docker pull reference", + "description": "Reference package that will be retrieved and executed by CWL.", + "example": "docker-registry.host.com/namespace/image:1.2.3" + }, + "dockerImport": { + "type": "string" + }, + "dockerLoad": { + "type": "string" + }, + "dockerFile": { + "type": "string" + }, + "dockerImageId": { + "type": "string" + }, + "dockerOutputDirectory": { + "type": "string" + } + }, + "oneOf": [ + { + "required": [ + "dockerPull" + ] + }, + { + "required": [ + "dockerImport" + ] + }, + { + "required": [ + "dockerLoad" + ] + }, + { + "required": [ + "dockerFile" + ] + } + ], + "additionalProperties": false + }, + "ShellCommandRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "ShellCommandRequirement" + ] + } + }, + "additionalProperties": false + }, + "EnvVarRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "EnvVarRequirement" + ] + }, + "envDef": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/EnvironmentDef" + } + }, + { + "type": "object", + "description": "Mapping of 'envName' to environment value or definition.", + "additionalProperties": { + "oneOf": [ + { + "description": "The 'envValue' specified directly", + "$ref": "#/components/schemas/CWLExpression" + }, + { + "$ref": "#/components/schemas/EnvironmentDef" + } + ] + } + } + ] + } + }, + "required": [ + "envDef" + ], + "additionalProperties": false + }, + "SchemaDefRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "SchemaDefRequirement" + ] + }, + "types": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLTypeEnum" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordSchema" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordArray" + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ] + } + } + }, + "required": [ + "types" + ], + "additionalProperties": false + }, + "InitialWorkDirRequirement": { + "type": "object", + "title": "InitialWorkDirRequirement", + "properties": { + "class": { + "type": "string", + "enum": [ + "InitialWorkDirRequirement" + ] + }, + "listing": { + "$ref": "#/components/schemas/InitialWorkDirListing" + } + }, + "required": [ + "listing" + ], + "additionalProperties": false + }, + "InlineJavascriptRequirement": { + "type": "object", + "title": "InlineJavascriptRequirement", + "description": "Indicates that the workflow platform must support inline Javascript expressions.\n\nIf this requirement is not present, the workflow platform must not perform expression interpolation\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#InlineJavascriptRequirement).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "InlineJavascriptRequirement" + ] + }, + "expressionLib": { + "type": "array", + "title": "InlineJavascriptLibraries", + "description": "Additional code fragments that will also be inserted before executing the expression code.\nAllows for function definitions that may be called from CWL expressions.\n", + "items": { + "title": "exp_lib", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "$include": { + "type": "string" + } + }, + "required": [ + "$include" + ], + "additionalProperties": false + } + ] + } + } + }, + "required": [ + "expressionLib" + ], + "additionalProperties": false + }, + "InplaceUpdateRequirement": { + "type": "object", + "title": "InplaceUpdateRequirement", + "description": "If 'inplaceUpdate' is true, then an implementation supporting this feature may permit tools to directly\nupdate files with 'writable: true' in 'InitialWorkDirRequirement'. That is, as an optimization,\nfiles may be destructively modified in place as opposed to copied and updated\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#InplaceUpdateRequirement).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "InplaceUpdateRequirement" + ] + }, + "inplaceUpdate": { + "type": "boolean", + "title": "inplaceUpdate" + } + }, + "required": [ + "inplaceUpdate" + ], + "additionalProperties": false + }, + "LoadListingRequirement": { + "type": "object", + "title": "LoadListingRequirement", + "description": "Specify the desired behavior for loading the listing field of a 'Directory' object for use by expressions\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#LoadListingRequirement).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "LoadListingRequirement" + ] + }, + "loadListing": { + "type": "string", + "title": "LoadListingEnum", + "enum": [ + "no_listing", + "shallow_listing", + "deep_listing" + ] + } + }, + "required": [ + "loadListing" + ], + "additionalProperties": false + }, + "NetworkAccessRequirement": { + "type": "object", + "title": "NetworkAccessRequirement", + "properties": { + "class": { + "type": "string", + "description": "Not 'NetworkAccessRequirement'", + "enum": [ + "NetworkAccess" + ] + }, + "networkAccess": { + "$ref": "#/components/schemas/NetworkAccess" + } + }, + "required": [ + "networkAccess" + ], + "additionalProperties": false + }, + "ResourceRequirement": { + "type": "object", + "title": "ResourceRequirement", + "description": "Specify basic hardware resource requirements\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#ResourceRequirement).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "ResourceRequirement" + ] + }, + "coresMin": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceCoresMinimum (Minimum reserved number of CPU cores).", + "description": "Minimum reserved number of CPU cores.\n\nMay be a fractional value to indicate to a scheduling algorithm that one core can be allocated to\nmultiple jobs. For example, a value of 0.25 indicates that up to 4 jobs\nmay run in parallel on 1 core. A value of 1.25 means that up to 3 jobs\ncan run on a 4 core system (4/1.25 ~ 3).\n\nProcesses can only share a core allocation if the sum of each of their 'ramMax', 'tmpdirMax', and\n'outdirMax' requests also do not exceed the capacity of the node.\n\nProcesses sharing a core must have the same level of isolation (typically a container\nor VM) that they would normally have.\n\nThe reported number of CPU cores reserved for the process, which is available to expressions\non the 'CommandLineTool' as 'runtime.cores', must be a non-zero integer, and may be calculated by\nrounding up the cores request to the next whole number.\n\nScheduling systems may allocate fractional CPU resources by setting quotas or scheduling weights.\nScheduling systems that do not support fractional CPUs may round up the request to the next whole number.\n", + "default": 1 + }, + "coresMax": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceCoresMaximum (Maximum reserved number of CPU cores).", + "description": "Maximum reserved number of CPU cores.\nSee 'coresMin' for discussion about fractional CPU requests.\n" + }, + "ramMin": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceRAMMinimum (Minimum reserved RAM in mebibytes).", + "description": "Minimum reserved RAM in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual RAM request must be rounded up\nto the next whole number.\n\nThe reported amount of RAM reserved for the process, which is available to\nexpressions on the 'CommandLineTool' as 'runtime.ram', must be a non-zero integer.\n", + "default": 256 + }, + "ramMax": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceRAMMaximum (Maximum reserved RAM in mebibytes).", + "description": "Maximum reserved RAM in mebibytes (2**20).\nSee 'ramMin' for discussion about fractional RAM requests.\n" + }, + "tmpdirMin": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceTmpDirMinimum (Minimum reserved filesystem based storage for the designated temporary) directory in mebibytes.", + "description": "Minimum reserved filesystem based storage for the designated temporary\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.tmpdirSize', must be a non-zero integer.\n", + "default": 1024 + }, + "tmpdirMax": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceTmpDirMaximum (Maximum reserved filesystem based storage for the designated temporary directory in mebibytes).", + "description": "Maximum reserved filesystem based storage for the designated temporary directory in mebibytes (2**20).\nSee 'tmpdirMin' for discussion about fractional storage requests.\n" + }, + "outdirMin": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceOutDirMinimum (Minimum reserved filesystem based storage for the designated output directory in mebibytes).", + "description": "Minimum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.outdirSize', must be a non-zero integer.\n", + "default": 1024 + }, + "outdirMax": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceOutDirMaximum (Maximum reserved filesystem based storage for the designated output directory in mebibytes).", + "description": "Maximum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\nSee 'outdirMin' for discussion about fractional storage requests.\n", + "default": 1 + } + }, + "additionalProperties": false + }, + "ScatterFeatureRequirement": { + "type": "object", + "title": "ScatterFeatureRequirement", + "description": "A 'scatter' operation specifies that the associated Workflow step should execute separately over a list of\ninput elements. Each job making up a scatter operation is independent and may be executed concurrently\n(see also: https://www.commonwl.org/v1.2/Workflow.html#WorkflowStep).\nFields 'scatter' and 'scatterMethod' at the root of a 'WorkflowStep', not within the requirement.\n", + "properties": { + "class": { + "type": "string", + "description": "CWL requirement class specification.", + "enum": [ + "ScatterFeatureRequirement" + ] + } + }, + "additionalProperties": false + }, + "WorkReuseRequirement": { + "type": "object", + "title": "WorkReuseRequirement", + "description": "For implementations that support reusing output from past work\n(on the assumption that same code and same input produce same results),\ncontrol whether to enable or disable the reuse behavior for a particular tool\nor step (to accommodate situations where that assumption is incorrect).\nA reused step is not executed but instead returns the same output as the original execution.\nIf 'WorkReuse' is not specified, correct tools should assume it is enabled by default.\n", + "properties": { + "class": { + "type": "string", + "description": "Not 'WorkReuseRequirement'.", + "enum": [ + "WorkReuse" + ] + }, + "enableReuse": { + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "EnableReuseValue", + "description": "Indicates if reuse is enabled for this tool.\n\nCan be an expression when combined with 'InlineJavascriptRequirement'\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression).\n" + } + }, + "required": [ + "enableReuse" + ], + "additionalProperties": false + }, + "ToolTimeLimitRequirement": { + "type": "object", + "title": "ToolTimeLimitRequirement", + "description": "Set an upper limit on the execution time of a CommandLineTool.\n\nA CommandLineTool whose execution duration exceeds the time limit may be preemptively\nterminated and considered failed. May also be used by batch systems to make scheduling decisions.\n\nThe execution duration excludes external operations, such as staging of files,\npulling a docker image etc., and only counts wall-time for the execution of the command line itself.\n", + "properties": { + "class": { + "type": "string", + "description": "not 'ToolTimeLimitRequirement'", + "enum": [ + "ToolTimeLimit" + ] + }, + "timelimit": { + "oneOf": [ + { + "type": "number", + "minimum": 0 + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "TimeLimitValue", + "description": "The time limit, in seconds.\n\nA time limit of zero means no time limit.\nNegative time limits are an error.\n" + } + }, + "required": [ + "timelimit" + ], + "additionalProperties": false + }, + "MultipleInputFeatureRequirement": { + "type": "object", + "title": "MultipleInputFeatureRequirement", + "description": "Indicates that the 'Workflow' must support multiple inbound data links listed in the 'source'\nfield of 'WorkflowStepInput'.\n", + "properties": { + "class": { + "type": "string", + "description": "CWL requirement class specification.", + "enum": [ + "MultipleInputFeatureRequirement" + ] + } + }, + "additionalProperties": false + }, + "StepInputExpressionRequirement": { + "type": "object", + "title": "StepInputExpressionRequirement", + "description": "Indicates that the 'Workflow' must support the 'valueFrom' field of 'WorkflowStepInput'.", + "properties": { + "class": { + "type": "string", + "description": "CWL requirement class specification.", + "enum": [ + "StepInputExpressionRequirement" + ] + } + }, + "additionalProperties": false + }, + "SubworkflowFeatureRequirement": { + "type": "object", + "title": "SubworkflowFeatureRequirement", + "description": "Indicates that the 'Workflow' must support nested workflows in the 'run' field of 'WorkflowStep'.", + "properties": { + "class": { + "type": "string", + "description": "CWL requirement class specification.", + "enum": [ + "SubworkflowFeatureRequirement" + ] + } + }, + "additionalProperties": false + }, + "CWLHints": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLHintsMap" + }, + { + "$ref": "#/components/schemas/CWLHintsList" + } + ], + "title": "CWLHints", + "description": "Non-failing additional hints that can help resolve extra requirements." + }, + "CWLWorkflowStepDefinition": { + "type": "object", + "properties": { + "in": { + "$ref": "#/components/schemas/CWLWorkflowStepIn" + }, + "run": { + "$ref": "#/components/schemas/CWLWorkflowStepRun" + }, + "when": { + "$ref": "#/components/schemas/CWLWorkflowStepOut" + }, + "out": { + "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + }, + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + }, + "required": [ + "id" + ], + "additionalProperties": false + } + ] + } + } + }, + "required": [ + "in", + "run", + "out" + ] + }, + "CWLWorkflowStepScatter": { + "type": "object", + "properties": { + "scatter": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" + }, + { + "type": "array", + "title": "IdentifierArray", + "items": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" + }, + "minItems": 1 + } + ], + "title": "Scatter", + "description": "The scatter field specifies one or more input parameters which will be scattered.\n\nAn input parameter may be listed more than once. The declared type of each\ninput parameter implicitly becomes an array of items of the input parameter type.\nIf a parameter is listed more than once, it becomes a nested array. As a result,\nupstream parameters which are connected to scattered parameters must be arrays.\n\nAll output parameter types are also implicitly wrapped in arrays. Each job\nin the scatter results in an entry in the output array.\n\nIf any scattered parameter runtime value is an empty array, all outputs are\nset to empty arrays and no work is done for the step, according to applicable scattering rules.\n" + }, + "scatterMethod": { + "type": "string", + "title": "scatterMethod", + "description": "If 'scatter' declares more than one input parameter, 'scatterMethod'\ndescribes how to decompose the input into a discrete set of jobs.\n\n- dotproduct: specifies that each of the input arrays are aligned and\n one element taken from each array to construct each job. It is an\n error if all input arrays are not the same length.\n\n- nested_crossproduct: specifies the Cartesian product of the inputs, producing\n a job for every combination of the scattered inputs. The output must be nested\n arrays for each level of scattering, in the order that the input arrays\n are listed in the 'scatter' field.\n\n- flat_crossproduct: specifies the Cartesian product of the inputs, producing a\n job for every combination of the scattered inputs. The output arrays must be\n flattened to a single level, but otherwise listed in the order that the input\n arrays are listed in the 'scatter' field.\n", + "default": "dotproduct", + "enum": [ + "dotproduct", + "nested_crossproduct", + "flat_crossproduct" + ] + } + } + }, + "CWLWorkflowStepId": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + }, + "required": [ + "id" + ] + }, + "CWLHintsMap": { + "title": "CWLHintsMap", + "anyOf": [ + { + "$ref": "#/components/schemas/CWLRequirementsMap" + }, + { + "type": "object", + "properties": { + "BuiltinRequirement": { + "type": "object", + "title": "BuiltinRequirement", + "description": "Hint indicating that the Application Package corresponds to a\nbuiltin process of this instance. (note: can only be an 'hint'\nas it is unofficial CWL specification).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "BuiltinRequirement" + ] + }, + "process": { + "description": "Builtin process identifier.", + "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" + } + }, + "required": [ + "process", + "class" + ], + "additionalProperties": false + }, + "OGCAPIRequirement": { + "type": "object", + "title": "OGCAPIRequirement", + "description": "Hint indicating that the Application Package corresponds to an\nOGC API - Processes provider that should be remotely executed and monitored\nby this instance. (note: can only be an 'hint' as it is unofficial CWL specification).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "OGCAPIRequirement" + ] + }, + "process": { + "description": "Process location.", + "$ref": "#/components/schemas/SoftwarePackage/properties/specs/items" + } + }, + "required": [ + "process" + ], + "additionalProperties": false + }, + "WPS1Requirement": { + "type": "object", + "title": "WPS1Requirement", + "description": "Hint indicating that the Application Package corresponds to a\nWPS-1 provider process that should be remotely executed and monitored by this\ninstance. (note: can only be an ''hint'' as it is unofficial CWL specification).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "WPS1Requirement" + ] + }, + "process": { + "description": "Process identifier of the remote WPS provider.", + "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" + }, + "provider": { + "description": "WPS provider endpoint.", + "$ref": "#/components/schemas/SoftwarePackage/properties/specs/items" + } + }, + "required": [ + "process", + "provider" + ], + "additionalProperties": false + } + }, + "additionalProperties": { + "type": "object", + "description": "Generic schema to allow alternative CWL requirements/hints not explicitly defined in schemas.", + "properties": { + "class": { + "type": "string", + "title": "Requirement Class Identifier", + "description": "CWL requirement class specification.", + "example": "UnknownRequirement", + "not": { + "enum": [ + "cwltool:CUDARequirement", + "DockerRequirement", + "SoftwareRequirement", + "ShellCommandRequirement", + "EnvVarRequirement", + "SchemaDefRequirement", + "InitialWorkDirRequirement", + "InlineJavascriptRequirement", + "InplaceUpdateRequirement", + "LoadListingRequirement", + "NetworkAccess", + "ResourceRequirement", + "ScatterFeatureRequirement", + "ToolTimeLimit", + "WorkReuse", + "MultipleInputFeatureRequirement", + "StepInputExpressionRequirement", + "SubworkflowFeatureRequirement" + ] + } + } + } + } + } + ] + }, + "CWLHintsList": { + "type": "array", + "title": "CWLHintsList", + "items": { + "oneOf": [ + { + "allOf": [ + { + "description": "When using the list representation, 'class' is required to indicate which one is being represented.\nWhen using the mapping representation, 'class' is optional since it's the key, but it must match by name.\n", + "required": [ + "class" + ] + }, + { + "title": "CWLHintsItem", + "description": "For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well.\nOtherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition.\n", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLRequirementsItem" }, - "CommandOutputRecordFieldMap": { - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#CommandOutputRecordField", + { "oneOf": [ { - "additionalProperties": false, - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis is the file format that will be assigned to the output\nFile object.", - "type": "string" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The name of the field", - "type": "string" - }, - "outputBinding": { - "$ref": "#/definitions/CommandOutputBinding", - "description": "Describes how to generate this output object based on the files\nproduced by a CommandLineTool" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - }, - "type": "object", - "required": [ - "type" - ] + "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/properties/BuiltinRequirement" }, { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/CommandOutputArraySchema" - }, - { - "$ref": "#/definitions/CommandOutputRecordSchema" - }, - { - "$ref": "#/definitions/CommandOutputEnumSchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } + "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/properties/OGCAPIRequirement" }, { - "type": "string" + "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/properties/WPS1Requirement" + }, + { + "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/additionalProperties" } ] - }, - "OutputRecordFieldMap": { - "description": "Auto-generated class implementation for https://w3id.org/cwl/cwl#OutputRecordField", + } + ] + } + ] + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ] + } + }, + "CWLWorkflowStepIn": { + "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepInMap" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepInList" + } + ] + }, + "CWLWorkflowStepRun": { + "description": "Nested CWL definition to run as Workflow step.", + "oneOf": [ + { + "description": "File or URL reference to a CWL tool definition.", + "type": "string" + }, + { + "description": "Nested CWL tool definition for the step.", + "$ref": "#/components/schemas/CWLAtomicNested" + }, + { + "description": "Nested CWL Workflow definition for the step.", + "allOf": [ + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "$ref": "#/components/schemas/CWLWorkflowClass" + }, + { + "$ref": "#/components/schemas/CWLWorkflowBase" + } + ] + } + ] + }, + "CWLWorkflowStepWhen": { + "$ref": "#/components/schemas/CWLWorkflowStepOut" + }, + "CWLWorkflowStepOut": { + "description": "Condition to execute a step that must evaluate to a boolean-like value.", + "type": "string", + "title": "CWLExpression" + }, + "CWLWorkflowStepInMap": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepInputBase" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepInputDefault" + } + ] + } + ] + } + }, + "CWLWorkflowStepInList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLWorkflowStepInItem" + } + }, + "CWLWorkflowStepInItem": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepInputId" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepInputBase" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepInputDefault" + } + ] + }, + "CWLWorkflowStepInputId": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + }, + "required": [ + "id" + ] + }, + "CWLWorkflowStepInputBase": { + "type": "object", + "properties": { + "source": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "linkMerge": { + "type": "string", + "enum": [ + "merge_nested", + "merge_flattened" + ] + }, + "valueFrom": { + "$ref": "#/components/schemas/CWLExpression" + } + } + }, + "CWLWorkflowStepInputDefault": { + "description": "CWL 'type' is not specified at this level for step inputs\n(it is provided by the mapped input of the nested tool instead).\nTherefore, cannot validate against 'CWLDefaultTypedConditional'.\n", + "type": "object", + "properties": { + "default": { + "$ref": "#/components/schemas/CWLDefault" + } + } + }, + "NetworkAccess": { + "title": "NetworkAccess", + "description": "Indicate whether a process requires outgoing IPv4/IPv6 network access.", + "example": true, + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ] + }, + "EnvironmentDef": { + "type": "object", + "properties": { + "envName": { + "type": "string", + "minLength": 1 + }, + "envValue": { + "$ref": "#/components/schemas/CWLExpression" + } + }, + "required": [ + "envName", + "envValue" + ], + "additionalProperties": false + }, + "CWLType": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLTypeBase" + }, + { + "$ref": "#/components/schemas/CWLTypeList" + } + ], + "title": "CWL Type" + }, + "CWLOutputObject": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "type": "object", + "title": "CWLOutputObject (CWL type definition with parameters).", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLType" + }, + "outputBinding": { + "$ref": "#/components/schemas/CWLOutputItem/properties/outputBinding" + } + }, + "required": [ + "type" + ] + } + ] + }, + "CWLOutputStdOut": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLOutputStdOutDefinition" + }, + { + "$ref": "#/components/schemas/CWLOutputStdOutObjectType" + } + ] + }, + "CWLOutputStdErr": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLOutputStdErrDefinition" + }, + { + "$ref": "#/components/schemas/CWLOutputStdErrObjectType" + } + ] + }, + "CWLTypeEnum": { + "type": "object", + "title": "CWLTypeEnum (CWL type as enum of values).", + "properties": { + "type": { + "type": "string", + "title": "type", + "example": "enum", + "enum": [ + "enum" + ] + }, + "symbols": { + "type": "array", + "title": "CWLTypeSymbols (Allowed values composing the enum).", + "items": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "title": "CWLTypeSymbolValues" + } + } + }, + "required": [ + "type", + "symbols" + ] + }, + "CWLTypeRecordSchema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "record" + ] + }, + "fields": { + "$ref": "#/components/schemas/CWLTypeRecordFields" + }, + "name": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "CWLTypeRecordArray": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "array" + ] + }, + "items": { + "$ref": "#/components/schemas/CWLType" + } + }, + "required": [ + "type", + "items" + ] + }, + "CWLDefaultTypedConditional": { + "description": "Validate that the 'default' value, if specified, is of same type as the CWL 'type'.\nThis avoids over-accepting anything that does not match the intended type.\nHowever, validation limits itself to data literals and arrays.\nNested type and multi-type definitions will validate against 'Any'.\n", + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "null" + ] + }, + "default": { + "nullable": true, + "enum": [ + null + ] + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "string", + "string?" + ] + }, + "default": { + "type": "string", + "nullable": true + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "boolean", + "boolean?" + ] + }, + "default": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "int", + "int?", + "long", + "long?", + "float", + "float?", + "double", + "double?", + "integer", + "integer?" + ] + }, + "default": { + "type": "number", + "nullable": true + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "File", + "File?", + "Directory", + "Directory?" + ] + }, + "default": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLDefaultLocation" + }, + { + "nullable": true, + "enum": [ + null + ] + } + ] + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "pattern": "^[a-zA-Z]+\\\\[\\\\]$" + }, + "default": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnyType" + } + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "array" + ] + }, + "items": { + "$ref": "#/components/schemas/AnyType" + }, + "default": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnyType" + } + } + }, + "required": [ + "type", + "items" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "enum", + "enum?" + ] + }, + "symbols": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "type": "string", + "nullable": true + } + }, + "required": [ + "type", + "symbols" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "Any", + "Any?" + ] + }, + "default": { + "$ref": "#/components/schemas/AnyType" + } + }, + "required": [ + "type" + ] + } + ] + }, + "CWLTypeBase": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLTypeDefinition" + }, + { + "$ref": "#/components/schemas/CWLTypeArray" + }, + { + "$ref": "#/components/schemas/CWLTypeEnum" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordRef" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordSchema" + } + ], + "title": "CWLTypeBase" + }, + "CWLTypeList": { + "type": "array", + "title": "CWLTypeList (Combination of allowed CWL types).", + "items": { + "$ref": "#/components/schemas/CWLTypeBase" + } + }, + "AnyType": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + }, + "CWLTypeDefinition": { + "type": "string", + "title": "CWL type string definition", + "description": "Note that 'Any' is equivalent to any of the non-null types.\nTherefore, a nullable 'Any' explicitly specified by 'Any?' or its array-nullable form 'Any[]?' are not equivalent.\nField type definition.\n", + "enum": [ + "null", + "Any", + "Any?", + "Any[]", + "Any[]?", + "Directory", + "Directory?", + "Directory[]", + "Directory[]?", + "File", + "File?", + "File[]", + "File[]?", + "boolean", + "boolean?", + "boolean[]", + "boolean[]?", + "double", + "double?", + "double[]", + "double[]?", + "enum?", + "enum[]", + "enum[]?", + "float", + "float?", + "float[]", + "float[]?", + "int", + "int?", + "int[]", + "int[]?", + "integer", + "integer?", + "integer[]", + "integer[]?", + "long", + "long?", + "long[]", + "long[]?", + "string", + "string?", + "string[]", + "string[]?" + ] + }, + "CWLTypeArray": { + "type": "object", + "title": "CWLTypeArray (CWL type as list of items).", + "properties": { + "type": { + "type": "string", + "title": "type", + "example": "array", + "enum": [ + "array" + ] + }, + "items": { + "$ref": "#/components/schemas/CWLType" + } + }, + "required": [ + "type", + "items" + ] + }, + "CWLTypeRecordRef": { + "description": "An IRI with minimally a '{Record}' identifier to look for a schema definition locally or remotely.\n\nThe identifier resolution is performed accordingly to the specified reference and as described in\nhttps://www.commonwl.org/v1.2/SchemaSalad.html#Identifier_resolution.\nAvoid 'oneOf' conflict of valid strings between this CWL record reference and the generic CWL types.\n", + "allOf": [ + { + "not": { + "$ref": "#/components/schemas/CWLTypeDefinition" + } + }, + { + "not": { + "$ref": "#/components/schemas/CWLInputStdInDefinition" + } + }, + { + "not": { + "$ref": "#/components/schemas/CWLOutputStdOutDefinition" + } + }, + { + "not": { + "$ref": "#/components/schemas/CWLOutputStdErrDefinition" + } + }, + { + "type": "string", + "format": "url", + "pattern": "^(((?:http|ftp)s?:\\/\\/)?(?!.*\\/\\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:\\/?|[\\/?]\\S+))?(?:[A-Za-z0-9\\w\\-.\\/]+)?\\#?[A-Za-z0-9\\w\\-.]+$" + } + ] + }, + "CWLTypeRecordFieldsMap": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordFieldDef" + } + ] + } + }, + "CWLTypeRecordFieldsList": { + "type": "array", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLTypeRecordFieldDef" + }, + { + "required": [ + "name" + ] + } + ] + } + }, + "CWLTypeRecordFieldDefBase": { + "type": "object", + "properties": { + "name": { + "description": "Required if list item. Otherwise, optional since it is the mapping key.\nThis requirement is defined in 'CWLTypeRecordFieldsItem' to allow reuse of this schema.\n", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/CWLType" + } + }, + "required": [ + "type" + ] + }, + "CWLFileOnlyParametersConditional": { + "description": "Explicitly disallow these parameters when non-File type is detected.\nOtherwise, validate their schema definitions according to what is permitted.\nParameters that are only valid when 'type' or 'items' evaluates to 'File'.\n", + "type": "object", + "anyOf": [ + { + "$ref": "#/components/schemas/CWLFileOnlyParameters" + }, + { + "not": { + "properties": { + "secondaryFiles": {}, + "streamable": {}, + "format": {}, + "loadContents": {} + } + } + } + ] + }, + "CWLDirectoryOnlyParametersConditional": { + "description": "Explicitly disallow these parameters when non-Directory type is detected.\nOtherwise, validate their schema definitions according to what is permitted.\nParameters that are only valid when 'type' or 'items' evaluates to 'Directory'.\n", + "type": "object", + "oneOf": [ + { + "type": "object", + "properties": { + "loadListing": { + "$ref": "#/components/schemas/LoadListingRequirement/properties/loadListing" + } + } + }, + { + "not": { + "properties": { + "loadListing": {} + } + } + } + ] + }, + "CWLFileOnlyParameters": { + "type": "object", + "properties": { + "secondaryFiles": { + "$ref": "#/components/schemas/CWLTypeRecordSecondaryFiles" + }, + "streamable": { + "type": "boolean" + }, + "format": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLExpression" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLExpression" + } + } + ] + }, + "loadContents": { + "type": "boolean" + } + } + }, + "CWLTypeRecordSecondaryFiles": { + "oneOf": [ + { + "description": "Either an expression or the regex pattern directly.", + "$ref": "#/components/schemas/CWLExpression" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordSecondaryFileSchema" + }, + { + "type": "array", + "items": { + "description": "Either an expression or the regex pattern directly.", + "$ref": "#/components/schemas/CWLExpression" + } + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLTypeRecordSecondaryFileSchema" + } + } + ] + }, + "CWLTypeRecordSecondaryFileSchema": { + "type": "object", + "properties": { + "pattern": { + "description": "Either an expression or the regex pattern directly.", + "$ref": "#/components/schemas/CWLExpression" + }, + "required": { + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ] + } + }, + "required": [ + "pattern" + ], + "additionalProperties": false + }, + "CWLRequirementsList": { + "type": "array", + "title": "CWLRequirementsList", + "items": { + "oneOf": [ + { + "allOf": [ + { + "description": "When using the list representation, 'class' is required to indicate which one is being represented.\nWhen using the mapping representation, 'class' is optional since it's the key, but it must match by name.\n", + "required": [ + "class" + ] + }, + { + "$ref": "#/components/schemas/CWLRequirementsItem" + } + ] + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ] + } + }, + "CWLRequirementsItem": { + "title": "CWLRequirementsItem", + "description": "For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well.\nOtherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition.\n", + "oneOf": [ + { + "$ref": "#/components/schemas/cwltool_CUDARequirement" + }, + { + "$ref": "#/components/schemas/DockerRequirement" + }, + { + "$ref": "#/components/schemas/SoftwareRequirement" + }, + { + "$ref": "#/components/schemas/ShellCommandRequirement" + }, + { + "$ref": "#/components/schemas/EnvVarRequirement" + }, + { + "$ref": "#/components/schemas/SchemaDefRequirement" + }, + { + "$ref": "#/components/schemas/InitialWorkDirRequirement" + }, + { + "$ref": "#/components/schemas/InlineJavascriptRequirement" + }, + { + "$ref": "#/components/schemas/InplaceUpdateRequirement" + }, + { + "$ref": "#/components/schemas/LoadListingRequirement" + }, + { + "$ref": "#/components/schemas/NetworkAccessRequirement" + }, + { + "$ref": "#/components/schemas/ResourceRequirement" + }, + { + "$ref": "#/components/schemas/ScatterFeatureRequirement" + }, + { + "$ref": "#/components/schemas/ToolTimeLimitRequirement" + }, + { + "$ref": "#/components/schemas/WorkReuseRequirement" + }, + { + "$ref": "#/components/schemas/MultipleInputFeatureRequirement" + }, + { + "$ref": "#/components/schemas/StepInputExpressionRequirement" + }, + { + "$ref": "#/components/schemas/SubworkflowFeatureRequirement" + } + ] + }, + "CWLOutputStdOutDefinition": { + "description": "Indicates that the data pushed to the standard output stream by the command will be redirected to this CWL output.\nCan be defined for only one output. If combined with 'stdout' at the root of the CWL document, that definition\nwill indicate the desired name of the output file where the output stream will be written to. A random name will\nbe applied for the file of this output unless otherwise specified.\n", + "type": "string", + "enum": [ + "stdout" + ] + }, + "CWLOutputStdOutObjectType": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLOutputStdOutDefinition" + } + }, + "required": [ + "type" + ] + }, + "CWLOutputStdErrDefinition": { + "description": "Indicates that the data pushed to the standard error stream by the command will be redirected to this CWL output.\nCan be defined for only one output. If combined with 'stderr' at the root of the CWL document, that definition\nwill indicate the desired name of the output file where the error stream will be written to. A random name will\nbe applied for the file of this output unless otherwise specified.\n", + "type": "string", + "enum": [ + "stderr" + ] + }, + "CWLOutputStdErrObjectType": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLOutputStdErrDefinition" + } + }, + "required": [ + "type" + ] + }, + "CWLTypeRecordFieldDef": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLTypeRecordFieldDefBase" + }, + { + "$ref": "#/components/schemas/CWLFileOnlyParametersConditional" + }, + { + "$ref": "#/components/schemas/CWLDirectoryOnlyParametersConditional" + } + ] + }, + "CWLDefault": { + "title": "CWLDefault", + "description": "Default value of input if not provided for task execution.", + "oneOf": [ + { + "$ref": "#/components/schemas/AnyLiteralType" + }, + { + "$ref": "#/components/schemas/AnyLiteralList" + }, + { + "$ref": "#/components/schemas/CWLDefaultLocation" + }, + { + "$ref": "#/components/schemas/CWLDefaultObject" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLDefaultObject" + } + } + ] + }, + "AnyLiteralType": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "string" + } + ] + }, + "AnyLiteralList": { + "type": "array", + "title": "AnyLiteralList", + "items": { + "$ref": "#/components/schemas/AnyLiteralType" + } + }, + "CWLDefaultLocation": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "File", + "Directory" + ] + }, + "path": { + "type": "string" + }, + "location": { + "type": "string" + }, + "basename": { + "type": "string" + }, + "nameroot": { + "type": "string" + } + }, + "required": [ + "class" + ], + "oneOf": [ + { + "required": [ + "path" + ] + }, + { + "required": [ + "location" + ] + } + ], + "additionalProperties": false + }, + "CWLDefaultObject": { + "type": "object", + "not": { + "description": "Avoid false-positive match of default File or Directory location definition.", + "properties": { + "class": { + "type": "string", + "enum": [ + "File", + "Directory" + ] + } + } + } + }, + "CWLTypeRecordFields": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLTypeRecordFieldsMap" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordFieldsList" + } + ] + }, + "CWLImport": { + "title": "CWLImport", + "description": "The schema validation of the CWL will not itself perform the '$import' to resolve and validate its contents.\nTherefore, the complete schema will not be validated entirely, and could still be partially malformed.\nTo ensure proper and exhaustive validation of a CWL definition with this schema, all '$import' directives\nshould be resolved and extended beforehand.\nRepresents an '$import' directive that should point toward another compatible CWL file to import where specified.\nThe contents of the imported file should be relevant contextually where it is being imported.\n", + "type": "object", + "properties": { + "$import": { + "type": "string" + } + }, + "required": [ + "$import" + ], + "additionalProperties": false + }, + "CWLVersion": { + "type": "object", + "properties": { + "cwlVersion": { + "type": "string", + "title": "cwlVersion", + "description": "CWL version of the described application package.", + "pattern": "^v\\d+(\\.\\d+(\\.\\d+)*)*$" + } + }, + "required": [ + "cwlVersion" + ] + }, + "CWLMetadata": { + "type": "object", + "properties": { + "s:keywords": { + "title": "KeywordList", + "type": "array", + "description": "Keywords applied to the process for search and categorization purposes.", + "items": { + "type": "string", + "title": "keyword", + "minLength": 1 + } + }, + "version": { + "type": "string", + "title": "version", + "description": "Version of the process.", + "example": "1.2.3", + "pattern": "^\\d+(\\.\\d+(\\.\\d+(\\.[A-Za-z0-9\\-_]+)*)*)*$" + } + } + }, + "CWLDocumentation": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "doc": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + } + } + }, + "CWLAtomicBase": { + "type": "object", + "title": "CWL atomic definition", + "description": "Direct CWL definition instead of the graph representation.", + "properties": { + "id": { + "anyOf": [ + { + "type": "string", + "title": "UUID", + "description": "Unique identifier.", + "format": "uuid", + "pattern": "^[a-f0-9]{8}(?:-?[a-f0-9]{4}){3}-?[a-f0-9]{12}$" + }, + { + "description": "Identifier with text pattern that can allow additional non-ASCII characters depending on regex implementation.\nThe identifier allows a '#' or a relative 'sub/part#ref' prefix, to support references to other definitions\nin the CWL document, such as when using 'SchemaDefRequirement'.\n\nJSON spec regex does not include '\\w' in its default subset to allow all word-like unicode characters\n(see reference: https://json-schema.org/understanding-json-schema/reference/regular_expressions.html).\n\nSince support is implementation specific, add both the ASCII-only and '\\w' representation simultaneously\nand let the parser reading this document apply whichever is more relevant or supported\n(see discussion: https://github.com/common-workflow-language/cwl-v1.2/pull/256#discussion_r1234037814).\n", + "pattern": "^([A-Za-z0-9\\w]+(/[A-Za-z0-9\\w]+)*)?[#.]?[A-Za-z0-9\\w]+(?:[-_.][A-Za-z0-9\\w]+)*$", + "type": "string", + "title": "Generic identifier name pattern." + } + ], + "title": "CWLIdentifier", + "description": "Reference to the process identifier." + }, + "class": { + "type": "string", + "title": "Class", + "description": "CWL class specification. This is used to differentiate between single Application Package (AP)definitions and Workflow that chains multiple packages.", + "enum": [ + "CommandLineTool", + "ExpressionTool" + ] + }, + "intent": { + "type": "array", + "title": "CWLIntent", + "items": { + "type": "string", + "title": "item", + "description": "Identifier URL to a concept for the type of computational operation accomplished by this process\n(see example operations: http://edamontology.org/operation_0004).\n", + "format": "url", + "pattern": "^((?:http|ftp)s?://)?(?!.*//.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:/?|[/?]\\S+)$" + } + }, + "requirements": { + "$ref": "#/components/schemas/CWLRequirements" + }, + "hints": { + "$ref": "#/components/schemas/CWLHints" + }, + "baseCommand": { + "$ref": "#/components/schemas/CWLCommand" + }, + "arguments": { + "$ref": "#/components/schemas/CWLArguments" + }, + "inputs": { + "$ref": "#/components/schemas/CWLInputsDefinition" + }, + "outputs": { + "$ref": "#/components/schemas/CWLOutputsDefinition" + }, + "stdin": { + "description": "Source of the input stream.\nTypically, an expression referring to an existing file name or an input of the CWL document.\n", + "$ref": "#/components/schemas/CWLExpression" + }, + "stdout": { + "description": "Destination of the output stream.\nTypically, an expression referring to a desired file name or provided by a CWL input reference.\n", + "$ref": "#/components/schemas/CWLExpression" + }, + "stderr": { + "description": "Destination of the error stream.\nTypically, an expression referring to a desired file name or provided by a CWL input reference.\n", + "$ref": "#/components/schemas/CWLExpression" + }, + "scatter": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + }, + { + "type": "array", + "title": "CWLScatterMulti", + "items": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + } + ], + "title": "CWLScatter", + "description": "One or more input identifier of an application step within a Workflow\nwere an array-based input to that Workflow should be scattered across multiple\ninstances of the step application.\n" + }, + "scatterMethod": { + "type": "string", + "title": "scatterMethod", + "description": "Describes how to decompose the scattered input into a discrete\nset of jobs. When 'dotproduct', specifies that each of the input arrays\nare aligned and one element taken from each array to construct each job.\nIt is an error if all input arrays are of different length. When 'nested_crossproduct',\nspecifies the Cartesian product of the inputs, producing a job for every\ncombination of the scattered inputs. The output must be nested arrays\nfor each level of scattering, in the order that the input arrays are listed\nin the scatter field. When 'flat_crossproduct', specifies the Cartesian\nproduct of the inputs, producing a job for every combination of the scattered\ninputs. The output arrays must be flattened to a single level, but otherwise\nlisted in the order that the input arrays are listed in the scatter field.\n", + "enum": [ + "dotproduct", + "nested_crossproduct", + "flat_crossproduct" + ] + } + }, + "required": [ + "class", + "inputs", + "outputs" + ] + }, + "CWLOutputList": { + "type": "array", + "title": "CWLOutputList", + "description": "Package outputs defined as items.", + "items": { + "$ref": "#/components/schemas/CWLOutputItem" + } + }, + "CWLOutputMap": { + "type": "object", + "title": "CWLOutputMap", + "description": "Package outputs defined as mapping.", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" + }, + { + "$ref": "#/components/schemas/CWLOutputObject" + }, + { + "$ref": "#/components/schemas/CWLOutputStdOut" + }, + { + "$ref": "#/components/schemas/CWLOutputStdErr" + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ] + } + }, + "CWLOutputItem": { + "type": "object", + "title": "CWLOutputItem", + "description": "Output specification. Note that multiple formats are supported\nand not all specification variants or parameters are presented here. Please\nrefer to official CWL documentation for more details (https://www.commonwl.org).\n", + "properties": { + "type": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" + }, + { + "$ref": "#/components/schemas/CWLOutputStdOut" + }, + { + "$ref": "#/components/schemas/CWLOutputStdErr" + } + ] + }, + "outputBinding": { + "type": "object", + "title": "OutputBinding", + "description": "Defines how to retrieve the output result from the command.", + "properties": { + "glob": { + "description": "Glob pattern to find the output on disk or mounted docker volume.", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLExpression" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLExpression" + } + } + ] + } + } + }, + "id": { + "description": "Identifier of the CWL output.", + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + }, + "required": [ + "type", + "id" + ] + }, + "CWLWorkflowStepObject": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepDefinition" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepScatter" + } + ] + }, + "CWLInputStdInDefinition": { + "description": "Indicates that the value passed to this CWL input will be redirected to the standard input stream of the command.\nCan be defined for only one input and must not be combined with 'stdin' at the root of the CWL document.\n", + "type": "string", + "enum": [ + "stdin" + ] + }, + "CWLInputStdInObjectType": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLInputStdInDefinition" + } + }, + "required": [ + "type" + ] + }, + "CWLInputStdIn": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLInputStdInDefinition" + }, + { + "$ref": "#/components/schemas/CWLInputStdInObjectType" + } + ] + }, + "CWLArguments": { + "type": "array", + "title": "CWLArguments", + "description": "Base arguments passed to the command.", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/InputBinding" + } + ] + } + }, + "SoftwarePackage": { + "type": "object", + "properties": { + "package": { + "type": "string" + }, + "version": { + "type": "array", + "items": { + "type": "string" + } + }, + "specs": { + "type": "array", + "items": { + "type": "string", + "format": "url", + "pattern": "^((?:http|ftp)s?:\\/\\/)?(?!.*\\/\\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:\\/?|[/?]\\S+)$" + } + } + }, + "required": [ + "package" + ], + "additionalProperties": false + }, + "SoftwarePackageSpecs": { + "type": "array", + "items": { + "type": "string" + } + }, + "CQL2": { + "oneOf": [ + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "and", + "or" + ] + }, + "args": { + "type": "array", + "minItems": 2, + "items": { + "$ref": "#/components/schemas/CQL2" + } + } + } + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "not" + ] + }, + "args": { + "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { + "$ref": "#/components/schemas/CQL2" + } + } + } + }, + { + "oneOf": [ + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "=", + "<>", + "<", + ">", + "<=", + ">=" + ] + }, + "args": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { "oneOf": [ { - "additionalProperties": false, - "properties": { - "doc": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "A documentation string for this object, or an array of strings which should be concatenated." - }, - "format": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nThis is the file format that will be assigned to the output\nFile object.", - "type": "string" - }, - "label": { - "description": "A short, human-readable label of this object.", - "type": "string" - }, - "name": { - "description": "The name of the field", - "type": "string" - }, - "secondaryFiles": { - "anyOf": [ - { - "$ref": "#/definitions/SecondaryFileSchema" - }, - { - "items": { - "$ref": "#/definitions/SecondaryFileSchema" - }, - "type": "array" - } - ], - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nProvides a pattern or expression specifying files or\ndirectories that should be included alongside the primary\nfile. Secondary files may be required or optional. When not\nexplicitly specified, secondary files specified for `inputs`\nare required and `outputs` are optional. An implementation\nmust include matching Files and Directories in the\n`secondaryFiles` property of the primary file. These Files\nand Directories must be transferred and staged alongside the\nprimary file. An implementation may fail workflow execution\nif a required secondary file does not exist.\n\nIf the value is an expression, the value of `self` in the expression\nmust be the primary input or output File object to which this binding\napplies. The `basename`, `nameroot` and `nameext` fields must be\npresent in `self`. For `CommandLineTool` outputs the `path` field must\nalso be present. The expression must return a filename string relative\nto the path to the primary File, a File or Directory object with either\n`path` or `location` and `basename` fields set, or an array consisting\nof strings or File or Directory objects. It is legal to reference an\nunchanged File or Directory object taken from input as a secondaryFile.\nThe expression may return \"null\" in which case there is no secondaryFile\nfrom that expression.\n\nTo work on non-filename-preserving storage systems, portable tool\ndescriptions should avoid constructing new values from `location`, but\nshould construct relative references using `basename` or `nameroot`\ninstead.\n\nIf a value in `secondaryFiles` is a string that is not an expression,\nit specifies that the following pattern should be applied to the path\nof the primary file to yield a filename relative to the primary File:\n\n 1. If string ends with `?` character, remove the last `?` and mark\n the resulting secondary file as optional.\n 2. If string begins with one or more caret `^` characters, for each\n caret, remove the last file extension from the path (the last\n period `.` and all following characters). If there are no file\n extensions, the path is unchanged.\n 3. Append the remainder of the string to the end of the file path." - }, - "streamable": { - "description": "Only valid when `type: File` or is an array of `items: File`.\n\nA value of `true` indicates that the file is read or written\nsequentially without seeking. An implementation may use this flag to\nindicate whether it is valid to stream file contents using a named\npipe. Default: `false`.", - "type": "boolean" - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } - }, - "type": "object", - "required": [ - "type" - ] + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" }, { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/OutputRecordSchema" - }, - { - "$ref": "#/definitions/OutputEnumSchema" - }, - { - "$ref": "#/definitions/OutputArraySchema" - }, - { - "type": "string" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The field type" - } + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/1" }, { - "type": "string" - } - ] - }, - "InlineJavascriptRequirementMap": { - "type": "object", - "properties": { - "expressionLib": { - "description": "Additional code fragments that will also be inserted\nbefore executing the expression code. Allows for function definitions that may\nbe called from CWL expressions.", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - } - }, - "required": [], - "description": "Indicates that the workflow platform must support inline Javascript expressions.\nIf this requirement is not present, the workflow platform must not perform expression\ninterpolation." - }, - "SchemaDefRequirementMap": { - "type": "object", - "properties": { - "types": { - "description": "The list of type definitions.", - "items": { - "anyOf": [ - { - "anyOf": [ - { - "$ref": "#/definitions/CommandInputArraySchema" - }, - { - "$ref": "#/definitions/CommandInputRecordSchema" - }, - { - "$ref": "#/definitions/CommandInputEnumSchema" - } - ] - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - } - }, - "required": [ - "types" - ], - "description": "This field consists of an array of type definitions which must be used when\ninterpreting the `inputs` and `outputs` fields. When a `type` field\ncontains a IRI, the implementation must check if the type is defined in\n`schemaDefs` and use that definition. If the type is not found in\n`schemaDefs`, it is an error. The entries in `schemaDefs` must be\nprocessed in the order listed such that later schema definitions may refer\nto earlier schema definitions.\n\n- **Type definitions are allowed for `enum` and `record` types only.**\n- Type definitions may be shared by defining them in a file and then\n `$include`-ing them in the `types` field.\n- A file can contain a list of type definitions" - }, - "LoadListingRequirementMap": { - "type": "object", - "properties": { - "loadListing": { - "enum": [ - "deep_listing", - "no_listing", - "shallow_listing" - ], - "type": "string" - } - }, - "required": [], - "description": "Specify the desired behavior for loading the `listing` field of\na Directory object for use by expressions." - }, - "DockerRequirementMap": { - "type": "object", - "properties": { - "dockerFile": { - "description": "Supply the contents of a Dockerfile which will be built using `docker build`.", - "type": "string" - }, - "dockerImageId": { - "description": "The image id that will be used for `docker run`. May be a\nhuman-readable image name or the image identifier hash. May be skipped\nif `dockerPull` is specified, in which case the `dockerPull` image id\nmust be used.", - "type": "string" - }, - "dockerImport": { - "description": "Provide HTTP URL to download and gunzip a Docker images using `docker import.", - "type": "string" + "type": "boolean" }, - "dockerLoad": { - "description": "Specify an HTTP URL from which to download a Docker image using `docker load`.", - "type": "string" + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4/oneOf/0" }, - "dockerOutputDirectory": { - "description": "Set the designated output directory to a specific location inside the\nDocker container.", - "type": "string" + { + "$ref": "#/components/schemas/CQL2/oneOf/6" }, - "dockerPull": { - "description": "Specify a Docker image to retrieve using `docker pull`. Can contain the\nimmutable digest to ensure an exact container is used:\n`dockerPull: ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2`", - "type": "string" - } - }, - "required": [], - "description": "Indicates that a workflow component should be run in a\n[Docker](https://docker.com) or Docker-compatible (such as\n[Singularity](https://www.sylabs.io/) and [udocker](https://github.com/indigo-dc/udocker)) container environment and\nspecifies how to fetch or build the image.\n\nIf a CommandLineTool lists `DockerRequirement` under\n`hints` (or `requirements`), it may (or must) be run in the specified Docker\ncontainer.\n\nThe platform must first acquire or install the correct Docker image as\nspecified by `dockerPull`, `dockerImport`, `dockerLoad` or `dockerFile`.\n\nThe platform must execute the tool in the container using `docker run` with\nthe appropriate Docker image and tool command line.\n\nThe workflow platform may provide input files and the designated output\ndirectory through the use of volume bind mounts. The platform should rewrite\nfile paths in the input object to correspond to the Docker bind mounted\nlocations. That is, the platform should rewrite values in the parameter context\nsuch as `runtime.outdir`, `runtime.tmpdir` and others to be valid paths\nwithin the container. The platform must ensure that `runtime.outdir` and\n`runtime.tmpdir` are distinct directories.\n\nWhen running a tool contained in Docker, the workflow platform must not\nassume anything about the contents of the Docker container, such as the\npresence or absence of specific software, except to assume that the\ngenerated command line represents a valid command within the runtime\nenvironment of the container.\n\nA container image may specify an\n[ENTRYPOINT](https://docs.docker.com/engine/reference/builder/#entrypoint)\nand/or\n[CMD](https://docs.docker.com/engine/reference/builder/#cmd).\nCommand line arguments will be appended after all elements of\nENTRYPOINT, and will override all elements specified using CMD (in\nother words, CMD is only used when the CommandLineTool definition\nproduces an empty command line).\n\nUse of implicit ENTRYPOINT or CMD are discouraged due to reproducibility\nconcerns of the implicit hidden execution point (For further discussion, see\n[https://doi.org/10.12688/f1000research.15140.1](https://doi.org/10.12688/f1000research.15140.1)). Portable\nCommandLineTool wrappers in which use of a container is optional must not rely on ENTRYPOINT or CMD.\nCommandLineTools which do rely on ENTRYPOINT or CMD must list `DockerRequirement` in the\n`requirements` section.\n\n## Interaction with other requirements\n\nIf [EnvVarRequirement](#EnvVarRequirement) is specified alongside a\nDockerRequirement, the environment variables must be provided to Docker\nusing `--env` or `--env-file` and interact with the container's preexisting\nenvironment as defined by Docker." - }, - "SoftwareRequirementMap": { - "type": "object", - "properties": { - "packages": { - "description": "The list of software to be configured.", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/SoftwarePackage" - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - } - }, - "required": [ - "packages" - ], - "description": "A list of software packages that should be configured in the environment of\nthe defined process." - }, - "InitialWorkDirRequirementMap": { - "type": "object", - "properties": { - "listing": { - "anyOf": [ - { - "items": { - "anyOf": [ - { - "anyOf": [ - { - "$ref": "#/definitions/Directory" - }, - { - "$ref": "#/definitions/File" - }, - { - "items": { - "anyOf": [ - { - "anyOf": [ - { - "$ref": "#/definitions/Directory" - }, - { - "$ref": "#/definitions/File" - } - ] - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - }, - { - "$ref": "#/definitions/Dirent" - }, - { - "type": "string" - } - ] - }, - { - "$ref": "#/definitions/CWLImportManual" - }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "The list of files or subdirectories that must be staged prior\nto executing the command line tool.\n\nReturn type of each expression must validate as `[\"null\",\nFile, Directory, Dirent, {type: array, items: [File,\nDirectory]}]`.\n\nEach `File` or `Directory` that is returned by an Expression\nmust be added to the designated output directory prior to\nexecuting the tool.\n\nEach `Dirent` record that is listed or returned by an\nexpression specifies a file to be created or staged in the\ndesignated output directory prior to executing the tool.\n\nExpressions may return null, in which case they have no effect.\n\nFiles or Directories which are listed in the input parameters\nand appear in the `InitialWorkDirRequirement` listing must\nhave their `path` set to their staged location. If the same\nFile or Directory appears more than once in the\n`InitialWorkDirRequirement` listing, the implementation must\nchoose exactly one value for `path`; how this value is chosen\nis undefined." - } - }, - "required": [], - "description": "Define a list of files and subdirectories that must be staged by the workflow platform prior to executing the command line tool.\nNormally files are staged within the designated output directory. However, when running inside containers, files may be staged at arbitrary locations, see discussion for [`Dirent.entryname`](#Dirent). Together with `DockerRequirement.dockerOutputDirectory` it is possible to control the locations of both input and output files when running in containers." - }, - "EnvVarRequirementMap": { - "type": "object", - "properties": { - "envDef": { - "description": "The list of environment variables.", + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" + } + ] + } + } + } + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "like" + ] + }, + "args": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6" + }, + { "oneOf": [ { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/EnvironmentDef" - }, - { - "$ref": "#/definitions/CWLImportManual" + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "casei" + ] + }, + "args": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/1/properties/args/items/oneOf/3" }, - { - "$ref": "#/definitions/CWLIncludeManual" - } - ] - }, - "type": "array" + "minItems": 1, + "maxItems": 1 + } + } }, { - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "type": "string" + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "accenti" + ] + }, + "args": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/1/properties/args/items/oneOf/3" + }, + "minItems": 1, + "maxItems": 1 } } + }, + { + "type": "string" } ] } - }, - "required": [ - "envDef" - ], - "description": "Define a list of environment variables which will be set in the\nexecution environment of the tool. See `EnvironmentDef` for details." - }, - "ShellCommandRequirementMap": { - "type": "object", - "properties": {}, - "required": [], - "description": "Modify the behavior of CommandLineTool to generate a single string\ncontaining a shell command line. Each item in the `arguments` list must\nbe joined into a string separated by single spaces and quoted to prevent\ninterpretation by the shell, unless `CommandLineBinding` for that argument\ncontains `shellQuote: false`. If `shellQuote: false` is specified, the\nargument is joined into the command string without quoting, which allows\nthe use of shell metacharacters such as `|` for pipes." - }, - "ResourceRequirementMap": { - "type": "object", - "properties": { - "coresMax": { - "description": "Maximum reserved number of CPU cores.\n\nSee `coresMin` for discussion about fractional CPU requests.", - "type": [ - "string", - "number" - ] + ] + } + } + } + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "between" + ] + }, + "args": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/1" }, - "coresMin": { - "description": "Minimum reserved number of CPU cores (default is 1).\n\nMay be a fractional value to indicate to a scheduling\nalgorithm that one core can be allocated to multiple\njobs. For example, a value of 0.25 indicates that up to 4\njobs may run in parallel on 1 core. A value of 1.25 means\nthat up to 3 jobs can run on a 4 core system (4/1.25 ≈ 3).\n\nProcesses can only share a core allocation if the sum of each\nof their `ramMax`, `tmpdirMax`, and `outdirMax` requests also\ndo not exceed the capacity of the node.\n\nProcesses sharing a core must have the same level of isolation\n(typically a container or VM) that they would normally have.\n\nThe reported number of CPU cores reserved for the process,\nwhich is available to expressions on the CommandLineTool as\n`runtime.cores`, must be a non-zero integer, and may be\ncalculated by rounding up the cores request to the next whole\nnumber.\n\nScheduling systems may allocate fractional CPU resources by\nsetting quotas or scheduling weights. Scheduling systems that\ndo not support fractional CPUs may round up the request to the\nnext whole number.", - "type": [ - "string", - "number" - ] + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" }, - "outdirMax": { - "description": "Maximum reserved filesystem based storage for the designated output directory, in mebibytes (2**20)\n\nSee `outdirMin` for discussion about fractional storage requests.", - "type": [ - "string", - "number" - ] + { + "$ref": "#/components/schemas/CQL2/oneOf/6" + } + ] + } + } + } + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "in" + ] + }, + "args": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/0/properties/args/items" }, - "outdirMin": { - "description": "Minimum reserved filesystem based storage for the designated output directory, in mebibytes (2**20) (default is 1024)\n\nMay be a fractional value. If so, the actual storage request\nmust be rounded up to the next whole number. The reported\namount of storage reserved for the process, which is available\nto expressions on the CommandLineTool as `runtime.outdirSize`,\nmust be a non-zero integer.", - "type": [ - "string", - "number" - ] + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/0/properties/args/items" + } + } + ] + } + } + } + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "isNull" + ] + }, + "args": { + "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" }, - "ramMax": { - "description": "Maximum reserved RAM in mebibytes (2**20)\n\nSee `ramMin` for discussion about fractional RAM requests.", - "type": [ - "string", - "number" - ] + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/1" }, - "ramMin": { - "description": "Minimum reserved RAM in mebibytes (2**20) (default is 256)\n\nMay be a fractional value. If so, the actual RAM request must\nbe rounded up to the next whole number. The reported amount of\nRAM reserved for the process, which is available to\nexpressions on the CommandLineTool as `runtime.ram`, must be a\nnon-zero integer.", - "type": [ - "string", - "number" - ] + { + "$ref": "#/components/schemas/CQL2" }, - "tmpdirMax": { - "description": "Maximum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20)\n\nSee `tmpdirMin` for discussion about fractional storage requests.", - "type": [ - "string", - "number" - ] + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3" }, - "tmpdirMin": { - "description": "Minimum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20) (default is 1024)\n\nMay be a fractional value. If so, the actual storage request\nmust be rounded up to the next whole number. The reported\namount of storage reserved for the process, which is available\nto expressions on the CommandLineTool as `runtime.tmpdirSize`,\nmust be a non-zero integer.", - "type": [ - "string", - "number" - ] - } - }, - "required": [], - "description": "Specify basic hardware resource requirements.\n\n\"min\" is the minimum amount of a resource that must be reserved to\nschedule a job. If \"min\" cannot be satisfied, the job should not\nbe run.\n\n\"max\" is the maximum amount of a resource that the job shall be\nallocated. If a node has sufficient resources, multiple jobs may\nbe scheduled on a single node provided each job's \"max\" resource\nrequirements are met. If a job attempts to exceed its resource\nallocation, an implementation may deny additional resources, which\nmay result in job failure.\n\nIf both \"min\" and \"max\" are specified, an implementation may\nchoose to allocate any amount between \"min\" and \"max\", with the\nactual allocation provided in the `runtime` object.\n\nIf \"min\" is specified but \"max\" is not, then \"max\" == \"min\"\nIf \"max\" is specified by \"min\" is not, then \"min\" == \"max\".\n\nIt is an error if max < min.\n\nIt is an error if the value of any of these fields is negative.\n\nIf neither \"min\" nor \"max\" is specified for a resource, use the default values below." - }, - "WorkReuseMap": { - "type": "object", - "properties": { - "enableReuse": { - "type": [ - "string", - "boolean" - ] - } - }, - "required": [ - "enableReuse" - ], - "description": "For implementations that support reusing output from past work (on\nthe assumption that same code and same input produce same\nresults), control whether to enable or disable the reuse behavior\nfor a particular tool or step (to accommodate situations where that\nassumption is incorrect). A reused step is not executed but\ninstead returns the same output as the original execution.\n\nIf `WorkReuse` is not specified, correct tools should assume it\nis enabled by default." - }, - "NetworkAccessMap": { - "type": "object", - "properties": { - "networkAccess": { - "type": [ - "string", - "boolean" - ] - } - }, - "required": [ - "networkAccess" - ], - "description": "Indicate whether a process requires outgoing IPv4/IPv6 network\naccess. Choice of IPv4 or IPv6 is implementation and site\nspecific, correct tools must support both.\n\nIf `networkAccess` is false or not specified, tools must not\nassume network access, except for localhost (the loopback device).\n\nIf `networkAccess` is true, the tool must be able to make outgoing\nconnections to network resources. Resources may be on a private\nsubnet or the public Internet. However, implementations and sites\nmay apply their own security policies to restrict what is\naccessible by the tool.\n\nEnabling network access does not imply a publicly routable IP\naddress or the ability to accept inbound connections." - }, - "InplaceUpdateRequirementMap": { - "type": "object", - "properties": { - "inplaceUpdate": { - "type": "boolean" + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" } - }, - "required": [ - "inplaceUpdate" - ], - "description": "If `inplaceUpdate` is true, then an implementation supporting this\nfeature may permit tools to directly update files with `writable:\ntrue` in InitialWorkDirRequirement. That is, as an optimization,\nfiles may be destructively modified in place as opposed to copied\nand updated.\n\nAn implementation must ensure that only one workflow step may\naccess a writable file at a time. It is an error if a file which\nis writable by one workflow step file is accessed (for reading or\nwriting) by any other workflow step running independently.\nHowever, a file which has been updated in a previous completed\nstep may be used as input to multiple steps, provided it is\nread-only in every step.\n\nWorkflow steps which modify a file must produce the modified file\nas output. Downstream steps which further process the file must\nuse the output of previous steps, and not refer to a common input\n(this is necessary for both ordering and correctness).\n\nWorkflow authors should provide this in the `hints` section. The\nintent of this feature is that workflows produce the same results\nwhether or not InplaceUpdateRequirement is supported by the\nimplementation, and this feature is primarily available as an\noptimization for particular environments.\n\nUsers and implementers should be aware that workflows that\ndestructively modify inputs may not be repeatable or reproducible.\nIn particular, enabling this feature implies that WorkReuse should\nnot be enabled." + ] + } + } + } + } + ] + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "s_contains", + "s_crosses", + "s_disjoint", + "s_equals", + "s_intersects", + "s_overlaps", + "s_touches", + "s_within" + ] + }, + "args": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3" }, - "ToolTimeLimitMap": { - "type": "object", - "properties": { - "timelimit": { - "description": "The time limit, in seconds. A time limit of zero means no\ntime limit. Negative time limits are an error.", - "type": [ - "string", - "number" - ] - } - }, - "required": [ - "timelimit" - ], - "description": "Set an upper limit on the execution time of a CommandLineTool.\nA CommandLineTool whose execution duration exceeds the time\nlimit may be preemptively terminated and considered failed.\nMay also be used by batch systems to make scheduling decisions.\nThe execution duration excludes external operations, such as\nstaging of files, pulling a docker image etc, and only counts\nwall-time for the execution of the command line itself." + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" }, - "SubworkflowFeatureRequirementMap": { - "type": "object", - "properties": {}, - "required": [], - "description": "Indicates that the workflow platform must support nested workflows in\nthe `run` field of [WorkflowStep](#WorkflowStep)." + { + "$ref": "#/components/schemas/CQL2/oneOf/6" + } + ] + } + } + } + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "t_after", + "t_before", + "t_contains", + "t_disjoint", + "t_during", + "t_equals", + "t_finishedBy", + "t_finishes", + "t_intersects", + "t_meets", + "t_metBy", + "t_overlappedBy", + "t_overlaps", + "t_startedBy", + "t_starts" + ] + }, + "args": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4" }, - "ScatterFeatureRequirementMap": { - "type": "object", - "properties": {}, - "required": [], - "description": "Indicates that the workflow platform must support the `scatter` and\n`scatterMethod` fields of [WorkflowStep](#WorkflowStep)." + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" }, - "MultipleInputFeatureRequirementMap": { - "type": "object", - "properties": {}, - "required": [], - "description": "Indicates that the workflow platform must support multiple inbound data links\nlisted in the `source` field of [WorkflowStepInput](#WorkflowStepInput)." + { + "$ref": "#/components/schemas/CQL2/oneOf/6" + } + ] + } + } + } + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "a_containedBy", + "a_contains", + "a_equals", + "a_overlaps" + ] + }, + "args": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/5" }, - "StepInputExpressionRequirementMap": { - "type": "object", - "properties": {}, - "required": [], - "description": "Indicate that the workflow platform must support the `valueFrom` field\nof [WorkflowStepInput](#WorkflowStepInput)." + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" }, - "CWLFile": { - "type": "object", - "allOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6" + } + ] + } + } + } + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "not": { + "enum": [ + "and", + "or", + "not", + "=", + "<>", + "<", + ">", + "<=", + ">=", + "like", + "between", + "in", + "isNull", + "casei", + "accenti", + "s_contains", + "s_crosses", + "s_disjoint", + "s_equals", + "s_intersects", + "s_overlaps", + "s_touches", + "s_within", + "t_after", + "t_before", + "t_contains", + "t_disjoint", + "t_during", + "t_equals", + "t_finishedBy", + "t_finishes", + "t_intersects", + "t_meets", + "t_metBy", + "t_overlappedBy", + "t_overlaps", + "t_startedBy", + "t_starts", + "a_containedBy", + "a_contains", + "a_equals", + "a_overlaps", + "+", + "-", + "*", + "/", + "^", + "%", + "div" + ] + } + }, + "args": { + "type": "array", + "items": { + "oneOf": [ + { + "oneOf": [ { - "oneOf": [ - { - "$ref": "#/definitions/Workflow" - }, - { - "$ref": "#/definitions/CommandLineTool" + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "casei" + ] }, - { - "$ref": "#/definitions/ExpressionTool" + "args": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6" + } + ] + }, + "minItems": 1, + "maxItems": 1 } - ] + } }, { - "oneOf": [ - { - "$ref": "#/definitions/CWLDocumentMetadata" + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "accenti" + ] + }, + "args": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6" + } + ] + }, + "minItems": 1, + "maxItems": 1 } - ] - } - ], - "properties": { - "expression": true, - "outputs": true, - "permanentFailCodes": true, - "successCodes": true, - "baseCommand": true, - "$namespaces": true, - "id": true, - "label": true, - "stdout": true, - "requirements": true, - "inputs": true, - "intent": true, - "$schemas": true, - "stdin": true, - "steps": true, - "cwlVersion": true, - "stderr": true, - "doc": true, - "hints": true, - "class": true, - "temporaryFailCodes": true, - "arguments": true - }, - "patternProperties": { - "^\\w+:.*$": { - "type": "object" - }, - "^\\w+:\\/\\/.*": { - "type": "object" - } - }, - "additionalProperties": false - }, - "CWLGraph": { - "type": "object", - "properties": { - "$graph": { - "type": "array", - "items": { - "$ref": "#/definitions/CWLFile" } }, - "cwlVersion": { - "description": "CWL document version. Always required at the document root. Not\nrequired for a Process embedded inside another Process.", - "enum": [ - "draft-2", - "draft-3", - "draft-3.dev1", - "draft-3.dev2", - "draft-3.dev3", - "draft-3.dev4", - "draft-3.dev5", - "draft-4.dev1", - "draft-4.dev2", - "draft-4.dev3", - "v1.0", - "v1.0.dev4", - "v1.1", - "v1.1.0-dev1", - "v1.2", - "v1.2.0-dev1", - "v1.2.0-dev2", - "v1.2.0-dev3", - "v1.2.0-dev4", - "v1.2.0-dev5" - ], + { "type": "string" } - }, - "required": [ - "$graph" ] }, - "CWLGraphOrFile": { - "type": "object", - "additionalProperties": false, - "allOf": [ + { + "oneOf": [ { - "oneOf": [ - { - "$ref": "#/definitions/CWLGraph" + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "+", + "-", + "*", + "/", + "^", + "%", + "div" + ] }, - { - "$ref": "#/definitions/CWLFile" + "args": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/1/oneOf/0" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6" + }, + { + "type": "number" + } + ] + } } - ] + } }, { - "$ref": "#/definitions/CWLDocumentMetadata" - } - ], - "properties": { - "expression": true, - "outputs": true, - "permanentFailCodes": true, - "successCodes": true, - "baseCommand": true, - "$graph": true, - "$namespaces": true, - "id": true, - "label": true, - "stdout": true, - "requirements": true, - "inputs": true, - "intent": true, - "$schemas": true, - "stdin": true, - "steps": true, - "cwlVersion": true, - "stderr": true, - "doc": true, - "hints": true, - "class": true, - "temporaryFailCodes": true, - "arguments": true - }, - "patternProperties": { - "^\\w+:.*$": { - "type": "object" - }, - "^\\w+:\\/\\/.*": { - "type": "object" + "type": "number" } - } - } - }, - "$ref": "#/paths/processes/{processID}/package/get/responses/200/content/application/cwl/schema/definitions/CWLGraphOrFile" - } - }, - "application/cwl+json": { - "schema": { - "$ref": "#/paths/processes/{processID}/package/get/responses/200/content/application/cwl/schema" - } - }, - "application/cwl+yaml": { - "schema": { - "$ref": "#/paths/processes/{processID}/package/get/responses/200/content/application/cwl/schema" - } - } - } - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/processes/{processID}/execution": { - "post": { - "summary": "execute a process.", - "description": "Executes a process (this may result in the creation of a job resource e.g., for _asynchronous execution_).\n\nFor more information, see [Section 7.9](https://docs.ogc.org/is/18-062r2/18-062r2.html#sc_create_job).\n", - "operationId": "execute", - "tags": [ - "Processes" - ], - "parameters": [ - { - "$ref": "#/components/parameters/processID-path" - }, - { - "name": "response", - "in": "query", - "description": "For executing the process using the _Collection Output_ mechanism, where the client is redirected (_303_ status) to either\nan OGC API landing page or collection resource, from which one or more OGC API data access mechanism is available.\nData access requests may trigger processing on-demand for a given area, time and resolution of interest.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "collection", - "landingPage" - ] - } - }, - { - "in": "header", - "description": "Indicates client preferences, including whether the client is capable of asynchronous processing.\nA `respond-async` preference indicates a preference for asynchronous processing.\nA `wait: s` preference indicates that the client prefers to wait up to x seconds to receive a reponse synchronously before the server falls back to asynchronous processing.", - "name": "Prefer", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "description": "An execution request specifying any inputs for the process to execute, and optionally to select specific outputs.", - "required": true, - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "process": { - "type": "string", - "format": "uri-reference", - "description": "URI to the process execution end point (i.e., `.../processes/{processID}/execution`)" - }, - "inputs": { - "additionalProperties": { + ] + }, + { + "$ref": "#/components/schemas/CQL2" + }, + { + "oneOf": [ + { "oneOf": [ { - "oneOf": [ - { - "oneOf": [ - { - "type": "string" - }, - { + "title": "GeoJSON Point", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Point" + ] + }, + "coordinates": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + { + "title": "GeoJSON LineString", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "LineString" + ] + }, + "coordinates": { + "type": "array", + "minItems": 2, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + { + "title": "GeoJSON Polygon", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Polygon" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 4, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + { + "title": "GeoJSON MultiPoint", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiPoint" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 2, + "items": { "type": "number" - }, - { - "type": "integer" - }, - { - "type": "boolean" - }, - { + } + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + { + "title": "GeoJSON MultiLineString", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiLineString" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 2, + "items": { "type": "array", - "items": {} - }, - { - "$ref": "#/components/schemas/binaryInputValue" - }, - { - "$ref": "#/components/schemas/bbox-processes" - }, - { - "allOf": [ - { - "type": "object", - "required": [ - "collection" - ], - "properties": { - "collection": { - "type": "string", - "format": "uri-reference" - } - } - }, - { - "$ref": "#/paths/processes/{processID}/execution/post/requestBody/content/application/json/schema/allOf/1" - } - ] - }, - { - "allOf": [ - { - "type": "object", - "required": [ - "process" - ] - }, - { - "$ref": "#/paths/processes/{processID/execution/post/requestBody/content/application/json/schema" - } - ] - }, - { - "allOf": [ - { - "type": "object", - "required": [ - "$input" - ], - "properties": { - "$input": { - "type": "string" - } - } - }, - { - "$ref": "#/paths/processes/{processID}/execution/post/requestBody/content/application/json/schema/allOf/1" - } - ] + "minItems": 2, + "items": { + "type": "number" + } } + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + { + "title": "GeoJSON MultiPolygon", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiPolygon" ] }, - { - "allOf": [ - { - "$ref": "#/components/schemas/format" - }, - { - "$ref": "#/paths/processes/{processID}/execution/post/requestBody/content/application/json/schema/allOf/1" - }, - { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "oneOf": [ - { - "$ref": "#/paths/processes/{processID}/execution/post/requestBody/content/application/json/schema/allOf/0/properties/inputs/additionalProperties/oneOf/0/oneOf/0" - }, - { - "type": "object" - } - ] + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "array", + "minItems": 4, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" } } } - ] + } }, - { - "$ref": "#/components/schemas/link" + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } } - ] + } }, { - "type": "array", - "items": { - "$ref": "#/paths/processes/{processID}/execution/post/requestBody/content/application/json/schema/allOf/0/properties/inputs/additionalProperties/oneOf/0" + "title": "GeoJSON GeometryCollection", + "type": "object", + "required": [ + "type", + "geometries" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "GeometryCollection" + ] + }, + "geometries": { + "type": "array", + "minItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/0" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/1" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/2" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/3" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/4" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/5" + } + ] + } + } } } ] - } - }, - "outputs": { - "additionalProperties": { + }, + { "type": "object", + "required": [ + "bbox" + ], "properties": { - "format": { - "$ref": "#/components/schemas/format" - }, - "$output": { - "type": "string" + "bbox": { + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 + }, + { + "minItems": 6, + "maxItems": 6 + } + ], + "items": { + "type": "number" + } } } } - }, - "subscriber": { - "$ref": "#/components/schemas/subscriber" - } - } - }, - { - "type": "object", - "properties": { - "filter": { - "type": "string" - }, - "properties": { - "oneOf": [ - { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - { - "type": "array", - "items": { - "type": "string" + ] + }, + { + "oneOf": [ + { + "oneOf": [ + { + "type": "object", + "required": [ + "date" + ], + "properties": { + "date": { + "type": "string", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$" + } + } + }, + { + "type": "object", + "required": [ + "timestamp" + ], + "properties": { + "timestamp": { + "type": "string", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" + } + } } - } - ] - }, - "sortBy": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - ] - } - } - } - }, - "responses": { - "200": { - "$ref": "#/components/responses/ExecuteSync" - }, - "201": { - "$ref": "#/components/responses/ExecuteAsync" - }, - "204": { - "$ref": "#/components/responses/EmptyResponse" - }, - "303": { - "description": "For _Collection Output_ execution, redirection to an OGC API landing page or collection.", - "headers": { - "Location": { - "schema": { - "type": "string" - }, - "description": "Location for redirection to an [OGC API landing page](https://schemas.opengis.net/ogcapi/tiles/part1/1.0/openapi/schemas/common-core/landingPage.yaml) (for `response=landingPage`) as described in\n[OGC API - Common - Part 1: Core](http://docs.ogc.org/DRAFTS/19-072.html#_landing_page_requirements_class) or\nan [OGC API collection description](https://schemas.opengis.net/ogcapi/tiles/part1/1.0/openapi/schemas/common-geodata/collectionInfo.yaml) (for `response=landingPage`) as described in\n[OGC API - Common - Part 2: Geospatial data](http://docs.ogc.org/DRAFTS/20-024.html#collection-description).\nThe collection redirected to or the collections linked from the landing page redirected to\nmust contain links to at least one data access mechanism (such as [_OGC API - Tiles_](https://opengeospatial.github.io/ogcna-auto-review/20-057.html),\n[_DGGS_](https://opengeospatial.github.io/ogcna-auto-review/21-038.html),\n[_Coverages_](http://docs.ogc.org/DRAFTS/19-087.html),\n[_Features_](https://docs.opengeospatial.org/is/17-069r4/17-069r4.html),\n[_EDR_](https://docs.ogc.org/is/19-086r5/19-086r5.html), or\n[_Maps_](http://docs.ogc.org/DRAFTS/20-058.html)...) to retrieve output results, which may\ntrigger on-demand processing." - } - } - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/ServerError" - } - }, - "callbacks": { - "jobCompleted": { - "{$request.body#/subscriber/successUri}": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/results" + ] + }, + { + "type": "object", + "required": [ + "interval" + ], + "properties": { + "interval": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4/oneOf/0/oneOf/0/properties/date" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4/oneOf/0/oneOf/1/properties/timestamp" + } + ] + }, + { + "type": "string", + "enum": [ + ".." + ] + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6" + } + ] + } + } + } + } + ] + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/1" + }, + { + "$ref": "#/components/schemas/CQL2" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/5" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" + } + ] + } + }, + { + "type": "object", + "required": [ + "property" + ], + "properties": { + "property": { + "type": "string" + } } } - } - }, - "responses": { - "200": { - "description": "Results received successfully" - } + ] } } } - } - } - } - }, - "/jobs": { - "get": { - "summary": "retrieve the list of jobs.", - "description": "Lists available jobs.\n\nFor more information, see [Section 12](https://docs.ogc.org/is/18-062r2/18-062r2.html#Job_list).\n", - "operationId": "getJobs", - "tags": [ - "Jobs" - ], - "parameters": [ - { - "$ref": "#/components/parameters/limit" - }, - { - "$ref": "#/components/parameters/processID-query" - }, - { - "$ref": "#/components/parameters/status" - }, - { - "$ref": "#/components/parameters/minDuration" - }, - { - "$ref": "#/components/parameters/maxDuration" - }, - { - "$ref": "#/components/parameters/type" }, { - "$ref": "#/components/parameters/datetime" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/JobList" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/jobs/{jobID}": { - "get": { - "summary": "retrieve the status of a job", - "description": "Shows the status of a job.\n\n For more information, see [Section 7.10](https://docs.ogc.org/is/18-062r2/18-062r2.html#sc_retrieve_status_info).\n", - "operationId": "getStatus", - "tags": [ - "Jobs" - ], - "parameters": [ - { - "$ref": "#/components/parameters/jobID" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/Status" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/ServerError" + "type": "boolean" } - } + ] }, - "delete": { - "summary": "cancel a job execution, remove a finished job", - "description": "Cancel a job execution and remove it from the jobs list.\n\nFor more information, see [Section 14]https://docs.ogc.org/is/18-062r2/18-062r2.html#Dismiss).\n", - "operationId": "dismiss", - "tags": [ - "Jobs" - ], - "parameters": [ - { - "$ref": "#/components/parameters/jobID" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/Status" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/ServerError" - } - } - } - }, - "/jobs/{jobID}/results": { - "get": { - "summary": "retrieve the result(s) of a job", - "description": "Lists available results of a job. In case of a failure, lists exceptions instead.\n\nFor more information, see [Section 7.11](https://docs.ogc.org/is/18-062r2/18-062r2.html#sc_retrieve_job_results).\n", - "operationId": "getResult", - "tags": [ - "Jobs" - ], - "parameters": [ - { - "$ref": "#/components/parameters/jobID" - }, - { - "in": "header", - "description": "Indicates client preferences, such as whether the client wishes a self-contained or minimal response.\nA `return=minimal` preference indicates that the client would prefer that links be returned to larger object to minimize the response payload.\nA `return=representation` indicates that the client would prefer if the server can return a self-contained response.", - "name": "Prefer", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/Results" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/ServerError" - } - } - } - } - }, - "components": { - "schemas": { - "confClasses": { + "enumeration": { "type": "object", "required": [ - "conformsTo" + "type", + "enum" ], "properties": { - "conformsTo": { + "type": { + "type": "string", + "enum": [ + "enum" + ] + }, + "enum": { "type": "array", "items": { - "type": "string", - "example": "http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core" + "type": "string" } } } }, - "link": { - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "type": "string" - }, - "rel": { - "type": "string", - "example": "service" - }, - "type": { - "type": "string", - "example": "application/json" + "processes-list": { + "type": "string", + "enum": [ + "RenderMap", + "ElevationContours", + "OSMERE" + ] + }, + "processSummary": { + "allOf": [ + { + "$ref": "#/components/schemas/descriptionType" }, - "hreflang": { - "type": "string", - "example": "en" + { + "type": "object", + "required": [ + "id", + "version" + ], + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + }, + "jobControlOptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/jobControlOptions" + } + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" + } + } + } + } + ] + }, + "process": { + "allOf": [ + { + "$ref": "#/components/schemas/processSummary" }, - "title": { - "type": "string" + { + "type": "object", + "properties": { + "inputs": { + "additionalProperties": { + "$ref": "#/components/schemas/inputDescription" + } + }, + "outputs": { + "additionalProperties": { + "$ref": "#/components/schemas/outputDescription" + } + } + } } - } + ] }, - "landingPage": { + "processList": { "type": "object", "required": [ + "processes", "links" ], "properties": { - "title": { - "type": "string", - "example": "Example processing server" - }, - "description": { - "type": "string", - "example": "Example server implementing the OGC API - Processes 1.0 Standard" - }, - "attribution": { - "type": "string", - "title": "attribution for the Processes API", - "description": "The `attribution` should be short and intended for presentation to a user, for example, in a corner of a map. Parts of the text can be links to other resources if additional information is needed. The string can include HTML markup." + "processes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/processSummary" + } }, "links": { "type": "array", "items": { - "$ref": "#/components/schemas/link" + "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" } } } }, - "exception": { - "title": "Exception Schema", - "description": "JSON schema for exceptions based on RFC 7807", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string" - }, - "title": { - "type": "string" - }, - "status": { - "type": "integer" - }, - "detail": { - "type": "string" - }, - "instance": { - "type": "string" - } - }, - "additionalProperties": true - }, - "collections": { + "jobList": { "type": "object", "required": [ - "links", - "collections" + "jobs", + "links" ], "properties": { - "links": { + "jobs": { "type": "array", "items": { - "$ref": "#/components/schemas/link" + "$ref": "#/components/schemas/statusInfo" } }, - "timeStamp": { - "type": "string", - "format": "date-time" - }, - "numberMatched": { - "type": "integer", - "minimum": 0, - "example": 1 - }, - "numberReturned": { - "type": "integer", - "minimum": 0, - "example": 1 - }, - "collections": { + "links": { "type": "array", "items": { - "$ref": "#/components/schemas/collectionInfo" + "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" } } } }, - "collectionInfo": { + "bbox-processes": { "type": "object", "required": [ - "id", - "links" + "bbox" ], "properties": { - "id": { - "type": "string", - "description": "identifier of the collection used, for example, in URIs", - "example": "dem" - }, - "title": { - "type": "string", - "description": "human readable title of the collection", - "example": "Digital Elevation Model" - }, - "description": { - "type": "string", - "description": "a description of the data in the collection", - "example": "A Digital Elevation Model." - }, - "links": { + "bbox": { "type": "array", - "example": [ - { - "href": "http://data.example.org/collections/dem?f=json", - "rel": "self", - "type": "application/json", - "title": "Digital Elevation Model" - }, - { - "href": "http://data.example.org/collections/dem?f=html", - "rel": "alternate", - "type": "application/json", - "title": "Digital Elevation Model" - }, - { - "href": "http://data.example.org/collections/dem/coverage", - "rel": "coverage", - "type": "image/tiff; application=geotiff", - "title": "Digital Elevation Model" - }, - { - "href": "http://data.example.org/collections/dem/coverage/domainset", - "rel": "domainset", - "type": "application/json", - "title": "Digital Elevation Model" - }, + "oneOf": [ { - "href": "http://data.example.org/collections/dem/coverage/rangetype", - "rel": "rangetype", - "type": "application/json", - "title": "Digital Elevation Model" + "minItems": 4, + "maxItems": 4 }, { - "href": "http://data.example.org/collections/dem/coverage/metadata", - "rel": "metadata", - "type": "application/json", - "title": "Digital Elevation Model" + "minItems": 6, + "maxItems": 6 } ], "items": { - "$ref": "#/components/schemas/link" + "type": "number" } }, - "extent": { - "$ref": "#/components/schemas/extent-uad" - }, - "itemType": { - "description": "indicator about the type of the items in the collection if the collection has an accessible /collections/{collectionId}/items endpoint", - "type": "string", - "default": "unknown" - }, "crs": { - "description": "the list of coordinate reference systems supported by the API; the first item is the default coordinate reference system", - "type": "array", - "items": { - "type": "string" - }, - "default": [ - "http://www.opengis.net/def/crs/OGC/1.3/CRS84" - ], - "example": [ - "http://www.opengis.net/def/crs/OGC/1.3/CRS84", - "http://www.opengis.net/def/crs/EPSG/0/4326" - ] - }, - "dataType": { - "allOf": [ - { - "description": "Type of data represented in the collection" - }, + "anyOf": [ { - "$ref": "#/components/schemas/dataType" - } - ] - }, - "geometryDimension": { - "description": "The geometry dimension of the features shown in this layer (0: points, 1: curves, 2: surfaces, 3: solids), unspecified: mixed or unknown", - "type": "integer", - "minimum": 0, - "maximum": 3 - }, - "minScaleDenominator": { - "description": "Minimum scale denominator for usage of the collection", - "type": "number" - }, - "maxScaleDenominator": { - "description": "Maximum scale denominator for usage of the collection", - "type": "number" - }, - "minCellSize": { - "description": "Minimum cell size for usage of the collection", - "type": "number" - }, - "maxCellSize": { - "description": "Maximum cell size for usage of the collection", - "type": "number" - } - } - }, - "extent": { - "description": "The extent of the data in the collection. In the Core only spatial and temporal\nextents are specified. Extensions may add additional members to represent other\nextents, for example, thermal or pressure ranges.\n\nThe first item in the array describes the overall extent of\nthe data. All subsequent items describe more precise extents,\ne.g., to identify clusters of data.\nClients only interested in the overall extent will only need to\naccess the first item in each array.", - "type": "object", - "properties": { - "spatial": { - "description": "The spatial extent of the data in the collection.", - "type": "object", - "properties": { - "bbox": { - "description": "One or more bounding boxes that describe the spatial extent of the dataset.\nIn the Core only a single bounding box is supported.\n\nExtensions may support additional areas.\nThe first bounding box describes the overall spatial\nextent of the data. All subsequent bounding boxes describe\nmore precise bounding boxes, e.g., to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", - "type": "array", - "minItems": 1, - "items": { - "description": "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)\n\nIf the value consists of four numbers, the coordinate reference system is\nWGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in a parameter `bbox-crs`.\n\nIf the value consists of six numbers, the coordinate reference system is WGS 84\nlongitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h)\nunless a different coordinate reference system is specified in a parameter `bbox-crs`.\n\nFor WGS 84 longitude/latitude the values are in most cases the sequence of\nminimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value\n(west-most box edge) is larger than the third value (east-most box edge).\n\nIf the vertical axis is included, the third and the sixth number are\nthe bottom and the top of the 3-dimensional bounding box.\n\nIf a feature has multiple spatial geometry properties, it is the decision of the\nserver whether only a single spatial geometry property is used to determine\nthe extent or all relevant geometries.", - "type": "array", - "oneOf": [ - { - "minItems": 4, - "maxItems": 4 - }, - { - "minItems": 6, - "maxItems": 6 - } - ], - "items": { - "type": "number" - }, - "example": [ - -180, - -90, - 180, - 90 - ] - } - }, - "crs": { - "description": "Coordinate reference system of the coordinates in the spatial extent\n(property `bbox`). The default reference system is WGS 84 longitude/latitude.\nIn the Core the only other supported coordinate reference system is\nWGS 84 longitude/latitude/ellipsoidal height for coordinates with height.\nExtensions may support additional coordinate reference systems and add\nadditional enum values.", "type": "string", + "format": "uri", "enum": [ "http://www.opengis.net/def/crs/OGC/1.3/CRS84", "http://www.opengis.net/def/crs/OGC/0/CRS84h" ], "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" }, - "grid": { - "description": "Provides information about the limited availability of data within the collection organized\nas a grid (regular or irregular) along each spatial dimension.", - "type": "array", - "minItems": 2, - "maxItems": 3, - "items": { - "type": "object", - "properties": { - "coordinates": { - "description": "List of coordinates along the dimension for which data organized as an irregular grid in the collection is available\n(e.g., 2, 10, 80, 100).", - "type": "array", - "minItems": 1, - "items": { - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ] - }, - "example": [ - 2, - 10, - 80, - 100 - ] - }, - "cellsCount": { - "description": "Number of samples available along the dimension for data organized as a regular grid.\nFor values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_.\nFor values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1.", - "type": "integer", - "example": 50 - }, - "resolution": { - "description": "Resolution of regularly gridded data along the dimension in the collection", - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ], - "example": 0.0006866455078 - } - } - } - } - } - }, - "temporal": { - "description": "The temporal extent of the features in the collection.", - "type": "object", - "properties": { - "interval": { - "description": "One or more time intervals that describe the temporal extent of the dataset.\nIn the Core only a single time interval is supported.\n\nExtensions may support multiple intervals.\nThe first time interval describes the overall\ntemporal extent of the data. All subsequent time intervals describe\nmore precise time intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item in each array.", - "type": "array", - "minItems": 1, - "items": { - "description": "Begin and end times of the time interval. The timestamps are in the\ntemporal coordinate reference system specified in `trs`. By default\nthis is the Gregorian calendar.\n\nThe value `null` for start or end time is supported and indicates a half-bounded time interval.", - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "example": [ - "2011-11-11T12:22:11Z", - null - ] - } - }, - "trs": { - "description": "Coordinate reference system of the coordinates in the temporal extent\n(property `interval`). The default reference system is the Gregorian calendar.\nIn the Core this is the only supported temporal coordinate reference system.\nExtensions may support additional temporal coordinate reference systems and add\nadditional enum values.", + { "type": "string", - "enum": [ - "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - ], - "default": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - }, - "grid": { - "type": "object", - "description": "Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the temporal dimension.", - "properties": { - "coordinates": { - "description": "List of coordinates along the temporal dimension for which data organized as an irregular grid in the collection is available\n(e.g., \"2017-11-14T09:00Z\",\"2017-11-14T12:00Z\",\"2017-11-14T15:00Z\",\"2017-11-14T18:00Z\",\"2017-11-14T21:00Z\").", - "type": "array", - "minItems": 1, - "items": { - "type": "string", - "nullable": true - }, - "example": [ - [ - "2020-11-12T12:15Z", - "2020-11-12T12:30Z", - "2020-11-12T12:45Z" - ] - ] - }, - "cellsCount": { - "description": "Number of samples available along the temporal dimension for data organized as a regular grid.\nFor values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_.\nFor values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1.", - "type": "integer", - "example": 50 - }, - "resolution": { - "description": "Resolution of regularly gridded data along the temporal dimension in the collection", - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ], - "example": "PT1H" - } - } + "format": "uri", + "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" } + ] + } + } + }, + "descriptionType": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "metadata": { + "type": "array", + "items": { + "$ref": "#/components/schemas/metadata" } } } }, - "extent-uad": { - "title": "Extent with Uniform Additional Dimensions Schema", - "description": "The extent module only addresses spatial and temporal extents. This module extends extent by specifying how\nintervals and crs properties can be used to specify additional geometries.", + "binaryValue": { + "type": "string" + }, + "execute-workflow": { "allOf": [ - { - "$ref": "#/components/schemas/extent" - }, { "type": "object", - "additionalProperties": { - "description": "The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial.", - "type": "object", - "oneOf": [ - { - "required": [ - "interval", - "crs" - ] - }, - { - "required": [ - "interval", - "trs" - ] - }, - { - "required": [ - "interval", - "vrs" - ] + "properties": { + "process": { + "type": "string", + "format": "uri-reference", + "description": "URI to the process description end point (i.e., `.../processes/{processId}`)" + }, + "inputs": { + "additionalProperties": { + "$ref": "#/components/schemas/values-workflows" } - ], - "properties": { - "interval": { - "description": "One or more intervals that describe the extent for this dimension of the dataset.\nThe value `null` is supported and indicates an unbounded or half-bounded interval.\nThe first interval describes the overall extent of the data for this dimension.\nAll subsequent intervals describe more precise intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item (a pair of lower and upper bound values).", - "type": "array", - "minItems": 1, - "items": { - "description": "Lower and upper bound values of the interval. The values\nare in the coordinate reference system specified in `crs`, `trs` or `vrs`.", - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ] - }, - "example": [ - "2011-11-11T12:22:11Z", - 32.5, - null - ] - } - }, - "crs": { - "type": "string", - "description": "generic coordinate reference system suitable for any type of dimensions" - }, - "trs": { - "type": "string", - "description": "temporal coordinate reference system (e.g. as defined by Features for 'temporal')" - }, - "vrs": { - "type": "string", - "description": "vertical coordinate reference system (e.g. as defined in EDR for 'vertical')" - }, - "grid": { + }, + "outputs": { + "additionalProperties": { "type": "object", - "description": "Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the dimension.", "properties": { - "coordinates": { - "description": "List of coordinates along the temporal dimension for which data organized as an irregular grid in the collection is available\n(e.g., 2, 10, 80, 100).", - "type": "array", - "minItems": 1, - "items": { - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ] - }, - "example": [ - 2, - 10, - 80, - 100 - ] + "format": { + "$ref": "#/components/schemas/format" }, - "cellsCount": { - "description": "Number of samples available along the dimension for data organized as a regular grid.\nFor values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_.\nFor values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1.", - "type": "integer", - "example": 50 - }, - "resolution": { - "description": "Resolution of regularly gridded data along the dimension in the collection", - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ], - "example": [ - "PT1H", - 0.0006866455078 - ] + "$output": { + "type": "string" } } } + }, + "subscriber": { + "$ref": "#/components/schemas/subscriber" } } - } - ] - }, - "crs": { - "title": "CRS", - "oneOf": [ + }, { - "description": "Simplification of the object into a url if the other properties are not present", - "type": "string" + "$ref": "#/components/schemas/fieldsModifiers" }, { - "type": "object", - "oneOf": [ - { - "required": [ - "uri" - ], - "properties": { - "uri": { - "description": "Reference to one coordinate reference system (CRS)", - "type": "string", - "format": "uri" - } - } - }, - { - "required": [ - "wkt" - ], - "properties": { - "wkt": { - "allOf": [ - { - "description": "An object defining the CRS using the JSON encoding for Well-known text representation of coordinate reference systems 2.0" - }, - { - "type": "object" - } + "example": { + "inputs": { + "data": [ + { + "collection": "https://example.com/collections/sentinel2-l2a", + "aliases": { + "evi": "2.5 * (B08 / 10000 - B04 / 10000) / (1 + B08 / 10000 + 6 * B04 / 10000 + -7.5 * B02 / 10000)" + }, + "properties": [ + "evi" ] } - } - }, - { - "required": [ - "referenceSystem" - ], - "properties": { - "referenceSystem": { - "description": "A reference system data structure as defined in the MD_ReferenceSystem of the ISO 19115", - "type": "object" - } - } + ] } - ] + } } ] }, - "dataType": { - "oneOf": [ + "inputParameterized": { + "allOf": [ { - "type": "string" + "type": "object", + "required": [ + "$input" + ], + "properties": { + "$input": { + "type": "string" + } + } }, { - "type": "string", - "enum": [ - "map", - "vector", - "coverage" - ] + "$ref": "#/components/schemas/fieldsModifiers" } ] }, - "timeStamp": { - "description": "This property indicates the time and date when the response was generated using RFC 3339 notation.", - "type": "string", - "format": "date-time", - "example": "2017-08-17T08:05:32Z" - }, - "numberReturned": { - "description": "The number of features in the feature collection.\nA server may omit this information in a response, if the information\nabout the number of features is not known or difficult to compute.\nIf the value is provided, the value shall be identical to the number\nof items in the \"features\" array.", - "type": "integer", - "minimum": 0, - "example": 10 - }, - "numberMatched": { - "description": "The number of features of the feature type that match the selection\nparameters like `bbox`.", - "type": "integer", - "minimum": 0, - "example": 127 + "format": { + "type": "object", + "properties": { + "mediaType": { + "type": "string" + }, + "encoding": { + "type": "string" + }, + "schema": { + "oneOf": [ + { + "type": "string", + "format": "url" + }, + { + "type": "object" + } + ] + } + } }, - "enumeration": { + "schemaAndOccurrences": { "type": "object", "required": [ - "type", - "enum" + "schema" ], "properties": { - "type": { - "type": "string", - "enum": [ - "enum" + "schema": { + "$ref": "#/components/schemas/schema" + }, + "minOccurs": { + "type": "integer", + "default": 1 + }, + "maxOccurs": { + "oneOf": [ + { + "type": "integer", + "default": 1 + }, + { + "type": "string", + "enum": [ + "unbounded" + ] + } ] + } + } + }, + "inputDescription": { + "allOf": [ + { + "$ref": "#/components/schemas/descriptionType" + }, + { + "$ref": "#/components/schemas/dataClasses" + }, + { + "$ref": "#/components/schemas/dataAccessAPIs" + }, + { + "type": "object", + "properties": { + "executionUnitRequirements": { + "type": "object", + "properties": { + "remote-access": { + "type": "boolean" + }, + "staging": { + "type": "string", + "enum": [ + "local-file", + "remote-access" + ] + } + } + } + } }, - "enum": { - "type": "array", - "items": { - "type": "string" + { + "$ref": "#/components/schemas/schemaAndOccurrences" + }, + { + "type": "object", + "properties": { + "valuePassing": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "byValue", + "byReference" + ] + }, + "default": [ + "byValue", + "byReference" + ] + } } } - } + ] }, - "processes-list": { - "type": "string", - "enum": [ - "RenderMap", - "ElevationContours", - "OSMERE" + "value": { + "anyOf": [ + { + "$ref": "#/components/schemas/valueNoObject" + }, + { + "type": "object" + } ] }, - "processSummary": { + "collectionValue": { "allOf": [ { - "$ref": "#/components/schemas/descriptionType" + "$ref": "#/components/schemas/format" }, { "type": "object", "required": [ - "id", - "version" + "collection" ], "properties": { - "id": { + "collection": { + "description": "The URI of the OGC API collection that should be accessed to provide\ninput values from the corresponding process input. The server\noffering this collection is referred to as the \"value source server\".", + "type": "string", + "format": "uri-reference" + }, + "bbox": { + "description": "Only resources that have a geometry that intersects the bounding box\nare selected. The bounding box is provided as four or six numbers,\ndepending on whether the coordinate reference system includes a\nvertical axis (height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)\n\nIf the value consists of four numbers, the coordinate reference\nsystem is WGS84 longitude/latitude\n (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in the\nparameter `bboxCrs`.\n\nIf the value consists of six numbers, the coordinate reference system\nis WGS84 (http://www.opengis.net/def/crs/OGC/0/CRS84h) longitude/\nlatitude/ ellipsoidal height unless a different coordinate reference\nsystem is specified in the parameter `bboxCrs`.\n\nFor WGS84 longitude/latitude the values are in most cases the sequence\nof minimum longitude, minimum latitude, maximum longitude and maximum\nlatitude. However, in cases where the box spans the antimeridian the\nfirst value (west-most box edge) is larger than the third value\n(east-most box edge).\n\nIf the vertical axis is included, the third and the sixth number are\nthe bottom and the top of the 3-dimensional bounding box.\n\nIf a resource has multiple spatial geometry properties, it is the\ndecision of the server whether only a single spatial geometry property\nis used to determine the extent or all relevant geometries.", + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 + }, + { + "minItems": 6, + "maxItems": 6 + } + ], + "items": { + "type": "number" + } + }, + "bboxCrs": { + "description": "Asserts the CRS used for the coordinate values of the `bbox`\nparameter. The default is WGS 84 or WGS84h depending on whether\nellipsoidal height is included or not:\n * WGS 84 longitude/latitude [4 numbers]\n (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\n * WGS 84h longitude/latitude/ellipsoidal height [6 numbers]\n (http://www.opengis.net/def/crs/OGC/0/CRS84h_", + "type": "string", + "format": "uri" + }, + "geometry": { + "description": "Only resources that have a geometry that intersects the geometry\nspecified using the `geometry` parameter are selected. The value of\nthe `geometry` parameter can be specified using WKT or GeoJSON.\nIf a resource has multiple spatial geometry properties, it is the\ndecision of the server whether only a single spatial geometry property\nis used to determine the extent or all relevant geometries.", + "oneOf": [ + { + "type": "string" + }, + { + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Point" + ] + }, + "coordinates": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiPoint" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "LineString" + ] + }, + "coordinates": { + "type": "array", + "minItems": 2, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiLineString" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Polygon" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 4, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiPolygon" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "array", + "minItems": 4, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "geometries" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "GeometryCollection" + ] + }, + "geometries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/collectionValue/allOf/1/properties/geometry/oneOf/1" + } + } + } + } + ] + } + ] + }, + "geometryCrs": { + "description": "Asserts the CRS used for the coordinate values of the `geometry`\nparameter. The default is WGS 84 or WGS84h depending on whether\nellipsoidal height is included or not:\n * WGS 84 longitude/latitude [4 numbers]\n (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\n * WGS 84h longitude/latitude/ellipsoidal height [6 numbers]\n (http://www.opengis.net/def/crs/OGC/0/CRS84h_", "type": "string" }, - "version": { + "datetime": { + "description": "Either a date-time or an interval, half-bounded or bounded. Date and\ntime expressions adhere to RFC 3339. Half-bounded intervals are\nexpressed using double-dots.\n\nExamples:\n * A date-time:\n \"2018-02-12T23:20:50Z\"\n * A bounded interval:\n \"2018-02-12T00:00:00Z/2018-03-18T12:31:12Z\"\n * Half-bounded intervals:\n \"2018-02-12T00:00:00Z/..\" or \"../2018-03-18T12:31:12Z\"\n\nOnly resources that have a temporal property that intersects the\nvalue of `datetime` are selected.\n\nIf a resource has multiple temporal properties, it is the decision of\nthe server whether only a single temporal property is used to\ndetermine the extent or all relevant temporal properties.", + "type": "string" + }, + "limit": { + "description": "The optional limit parameter limits the number of items that are\npresented in the response document.\nOnly items are counted that are on the first level of the collection\nin the response document. Nested objects contained within the\nexplicitly requested items shall not be counted.", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 10 + }, + "crs": { + "description": "If the parameter is specified, then the coordinates of all\ngeometry-valued properties in the response document are in\nthe requested CRS. Otherwise the coordinates are in the default CRS,\nthat is http://www.opengis.net/def/crs/OGC/1.3/CRS84 for coordinates\nwithout height and http://www.opengis.net/def/crs/OGC/0/CRS84h for\ncoordinates with ellipsoidal height.", + "type": "string", + "format": "uri" + }, + "filter": { + "description": "A search or filter condition. This condition determines which\nresources from the OGC API collection are included in the result\nset and are thus passed as values to the corresponding process input.\nThe `filter` parameter can be a string where the search condition is\nencoded in some text-based query langauge (e.g. cql2-text) or a\nCQL2 JSON object that encodes the search condition using JSON.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/CQL2" + } + ] + }, + "filterCrs": { + "description": "Asserts the CRS used for the coordinate values of the `filter`\nparameter. The default is WGS 84 or WGS 84h depending on whether\nellispoidal jeight is included with the coordinates or not:\n * WGS 84 longitude/latitude\n (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\n * WGS 84h longitude/latitude/ellipsoidal height\n (http://www.opengis.net/def/crs/OGC/0/CRS84h_", + "type": "string", + "format": "uri-reference" + }, + "filterLang": { + "description": "Indicates the language used to encode a filter expression specified\nusing the `filter` parameter. Query languages can include CQL2 text,\nCQL 2 JSON or OGC Filter Encoding (XML).", + "type": "string", + "enum": [ + "cql2-text", + "cql2-json", + "fes-xml" + ] + }, + "subset": { + "description": "Retrieve only part of the data by slicing or trimming along one or\nmore axis. For trimming: {axisAbbrev}({low}:{high}) (preserves\ndimensionality). An asterisk (`*`) can be used instead of {low} or\n{high} to indicate the minimum/maximum value. For slicing:\n{axisAbbrev}({value}) (reduces dimensionality).", + "type": "array", + "items": { + "type": "string" + } + }, + "subsetCrs": { + "description": "Asserts the CRS used for the coordinate values of the `subset`\nparameter. The default is WGS 84 or WGS 84h depending on whether\nellispoidal height in included with the coordinates or not:\n * WGS 84 longitude/latitude\n (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\n * WGS 84h longitude/latitude/ellipsoidal height\n (http://www.opengis.net/def/crs/OGC/0/CRS84h_", "type": "string" }, - "jobControlOptions": { + "ids": { + "description": "The optional ids parameter allows a specific list of resources,\nindicated by their identifiers, to be fetched from the OGC API\ncollection. Only resources whose identifier matches one of the\nvalues listed for this parameter shall appear in the result set.", + "type": "array", + "items": { + "type": "string" + } + }, + "q": { + "description": "The optional q parameter supports keyword searching. Only resources\nwhose text fields contain one or more of the specified search terms\nare selected. The specific set of text keys/fields/properties of a\nresource to which the q operator is applied is up to the discretion\nof the server. Implementations should, however, apply the q\noperator to the title, description and keywords keys/fields/properties\nif they exist in the resource.", + "type": "array", + "items": { + "type": "string" + } + }, + "assets": { + "description": "A list of STAC asset tags.", "type": "array", "items": { - "$ref": "#/components/schemas/jobControlOptions" + "type": "string" } }, - "links": { + "properties": { + "description": "A filter that selects resource properties to be included in a\nresponse document. The elements in the `properties` parameter can\nbe the names of resource properties, aliases for resources properties\nor synthetic properties. Synthetic properties are properties that\nare computed on the fly and can reference resource property names\nor aliases for resource properties.", "type": "array", "items": { - "$ref": "#/components/schemas/link" - } - } - } - } - ] - }, - "process": { - "allOf": [ - { - "$ref": "#/components/schemas/processSummary" - }, - { - "type": "object", - "properties": { - "inputs": { - "additionalProperties": { - "$ref": "#/components/schemas/inputDescription" + "type": "string" } }, - "outputs": { + "aliases": { + "description": "A dictionary of aliases that can be used as values for the\n`properties` parameter. Aliases can be alternative names for\nresource properties or synthetic properties. Synthetic properties\nare named expressions that are computed at run-time. Expressions\nfor synthetic properties are encoded using some expression language\nand can include references to resource property names or aliases\nfor resource properties..", + "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/outputDescription" + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "expressionLang": { + "type": "string", + "enum": [ + "cql2-text", + "cql2-json" + ] + }, + "expression": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/CQL2" + } + ] + } + } + } + ] } - } - } - } - ] - }, - "processList": { - "type": "object", - "required": [ - "processes", - "links" - ], - "properties": { - "processes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/processSummary" - } - }, - "links": { - "type": "array", - "items": { - "$ref": "#/components/schemas/link" - } - } - } - }, - "jobList": { - "type": "object", - "required": [ - "jobs", - "links" - ], - "properties": { - "jobs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/statusInfo" - } - }, - "links": { - "type": "array", - "items": { - "$ref": "#/components/schemas/link" - } - } - } - }, - "bbox-processes": { - "type": "object", - "required": [ - "bbox" - ], - "properties": { - "bbox": { - "type": "array", - "oneOf": [ - { - "minItems": 4, - "maxItems": 4 }, - { - "minItems": 6, - "maxItems": 6 + "passThroughParameters": { + "description": "Parameters specified in this object are passed through to the value\nsource server for processing on that server. The keys used in this\nobject should be identical to query parameters that the value source\nserver would recognize. In the case where the OAProc server supports\nlocal filtering, the `passThroughParameters` property provides a\nmechanism to force filtering to happen on the value source server.", + "type": "object" } - ], - "items": { - "type": "number" } - }, - "crs": { - "anyOf": [ - { - "type": "string", - "format": "uri", - "enum": [ - "http://www.opengis.net/def/crs/OGC/1.3/CRS84", - "http://www.opengis.net/def/crs/OGC/0/CRS84h" - ], - "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" - }, - { - "type": "string", - "format": "uri", - "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" - } - ] } - } + ] }, - "descriptionType": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "description": { + "valueNoObject": { + "anyOf": [ + { "type": "string" }, - "keywords": { - "type": "array", - "items": { - "type": "string" - } - }, - "metadata": { - "type": "array", - "items": { - "$ref": "#/components/schemas/metadata" - } - } - } - }, - "binaryInputValue": { - "type": "string", - "format": "byte" - }, - "execute": { - "type": "object", - "properties": { - "inputs": { - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/components/schemas/inlineOrRefData" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/inlineOrRefData" - } - } - ] - } - }, - "outputs": { - "additionalProperties": { - "$ref": "#/components/schemas/output" - } + { + "type": "number" }, - "subscriber": { - "$ref": "#/components/schemas/subscriber" - } - } - }, - "format": { - "type": "object", - "properties": { - "mediaType": { - "type": "string" + { + "type": "integer" }, - "encoding": { - "type": "string" + { + "type": "boolean" }, - "schema": { - "oneOf": [ - { - "type": "string", - "format": "url" - }, - { - "type": "object" - } - ] - } - } - }, - "inputDescription": { - "allOf": [ { - "$ref": "#/components/schemas/descriptionType" + "type": "array", + "items": {} }, { - "type": "object", - "required": [ - "schema" - ], - "properties": { - "schema": { - "$ref": "#/components/schemas/schema" - }, - "minOccurs": { - "type": "integer", - "default": 1 - }, - "maxOccurs": { - "oneOf": [ - { - "type": "integer", - "default": 1 - }, - { - "type": "string", - "enum": [ - "unbounded" - ] - } - ] - }, - "valuePassing": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "byValue", - "byReference" - ] - }, - "default": [ - "byValue", - "byReference" - ] - } - } - } - ] - }, - "inputValue": { - "anyOf": [ + "$ref": "#/components/schemas/binaryValue" + }, { - "$ref": "#/components/schemas/inputValueNoObject" + "$ref": "#/components/schemas/bbox-processes" }, { - "type": "object" + "$ref": "#/components/schemas/collectionValue" } ] }, - "inputValueNoObject": { - "oneOf": [ + "valueNoObject-workflows": { + "anyOf": [ { "type": "string" }, @@ -12866,10 +6513,29 @@ "items": {} }, { - "$ref": "#/components/schemas/binaryInputValue" + "$ref": "#/components/schemas/binaryValue" }, { "$ref": "#/components/schemas/bbox-processes" + }, + { + "$ref": "#/components/schemas/collectionValue" + }, + { + "allOf": [ + { + "type": "object", + "required": [ + "process" + ] + }, + { + "$ref": "#/components/schemas/execute-workflow" + } + ] + }, + { + "$ref": "#/components/schemas/inputParameterized" } ] }, @@ -12886,7 +6552,7 @@ { "allOf": [ { - "$ref": "#/components/schemas/link" + "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" }, { "type": "object", @@ -12924,7 +6590,33 @@ } ] }, - "output": { + "values": { + "anyOf": [ + { + "$ref": "#/components/schemas/inlineOrRefValue" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/inlineOrRefValue" + } + } + ] + }, + "values-workflows": { + "oneOf": [ + { + "$ref": "#/components/schemas/inlineOrRefValue-workflows" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/inlineOrRefValue-workflows" + } + } + ] + }, + "outputSelection": { "type": "object", "properties": { "format": { @@ -12938,19 +6630,17 @@ "$ref": "#/components/schemas/descriptionType" }, { - "type": "object", - "required": [ - "schema" - ], - "properties": { - "schema": { - "$ref": "#/components/schemas/schema" - } - } + "$ref": "#/components/schemas/dataClasses" + }, + { + "$ref": "#/components/schemas/dataAccessAPIs" + }, + { + "$ref": "#/components/schemas/schemaAndOccurrences" } ] }, - "qualifiedInputValue": { + "qualifiedValue": { "allOf": [ { "$ref": "#/components/schemas/format" @@ -12962,7 +6652,7 @@ ], "properties": { "value": { - "$ref": "#/components/schemas/inputValue" + "$ref": "#/components/schemas/value" } } } @@ -12978,283 +6668,430 @@ "type": "string", "format": "uri-reference" } - }, - "additionalProperties": false - }, - "results": { - "additionalProperties": { - "$ref": "#/components/schemas/inlineOrRefData" + }, + "additionalProperties": false + }, + "results": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/values" + } + }, + "schema": { + "description": "Attributes of the features or fields of a coverage range. Defined by a subset of the JSON Schema for the properties of a feature", + "type": "object", + "required": [ + "type", + "properties" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "object" + ] + }, + "required": { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "enum": { + "type": "array", + "minItems": 1, + "items": {}, + "uniqueItems": true + }, + "format": { + "type": "string" + }, + "contentMediaType": { + "type": "string" + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "maxItems": { + "type": "integer", + "minimum": 0 + }, + "minItems": { + "type": "integer", + "default": 0, + "minimum": 0 + }, + "x-ogc-definition": { + "type": "string", + "format": "uri" + }, + "x-ogc-unit": { + "type": "string" + }, + "x-ogc-unitLang": { + "type": "string" + } + } + } + } + } + }, + "statusCode": { + "type": "string", + "nullable": false, + "enum": [ + "accepted", + "running", + "successful", + "failed", + "dismissed" + ] + }, + "subscriber": { + "description": "Optional URIs for callbacks for this job.\n\nSupport for this parameter is not required and the parameter may be\nremoved from the API definition, if conformance class **'callback'**\nis not listed in the conformance declaration under `/conformance`.", + "type": "object", + "properties": { + "successUri": { + "type": "string", + "format": "uri" + }, + "inProgressUri": { + "type": "string", + "format": "uri" + }, + "failedUri": { + "type": "string", + "format": "uri" + } + } + }, + "inlineOrRefValue": { + "oneOf": [ + { + "$ref": "#/components/schemas/valueNoObject" + }, + { + "$ref": "#/components/schemas/qualifiedValue" + }, + { + "allOf": [ + { + "type": "object", + "required": [ + "rel" + ], + "properties": { + "rel": { + "type": "string" + }, + "type": { + "type": "string" + }, + "hreflang": { + "type": "string" + }, + "title": { + "type": "string" + }, + "length": { + "type": "integer" + } + } + }, + { + "type": "object", + "properties": { + "method": { + "type": "string", + "enum": [ + "POST", + "GET", + "DELETE", + "PATCH" + ] + }, + "body": {}, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "type": "string" + } + } + } + ] + } + ] + }, + "inlineOrRefValue-workflows": { + "oneOf": [ + { + "$ref": "#/components/schemas/valueNoObject-workflows" + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/format" + }, + { + "$ref": "#/components/schemas/fieldsModifiers" + }, + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "oneOf": [ + { + "$ref": "#/components/schemas/valueNoObject-workflows" + }, + { + "type": "object" + } + ] + } + } + } + ] + }, + { + "$ref": "#/components/schemas/link" + } + ] + }, + "fieldsModifiers": { + "type": "object", + "properties": { + "filter": { + "oneOf": [ + { + "type": "string" + }, + { + "description": "Basic CQL2-JSON definition", + "type": "array", + "items": { + "type": "object" + } + } + ] + }, + "filter-lang": { + "type": "string", + "example": "cql2-text" + }, + "filter-crs": { + "type": "string", + "format": "uri-reference" + }, + "aliases": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "properties": { + "type": "array", + "items": { + "type": "string" + } + }, + "sortBy": { + "type": "array", + "items": { + "type": "string" + } + } } }, - "schema": { - "oneOf": [ + "statusInfo": { + "allOf": [ { - "$ref": "#/components/schemas/reference" + "$ref": "#/components/schemas/descriptionType" }, { "type": "object", + "required": [ + "id", + "status", + "processingEntityType" + ], "properties": { - "title": { + "id": { "type": "string" }, - "multipleOf": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "boolean", - "default": false - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "boolean", - "default": false - }, - "maxLength": { - "type": "integer", - "minimum": 0 - }, - "minLength": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "pattern": { + "processID": { "type": "string", - "format": "regex" - }, - "maxItems": { - "type": "integer", - "minimum": 0 - }, - "minItems": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "maxProperties": { - "type": "integer", - "minimum": 0 - }, - "minProperties": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "required": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1, - "uniqueItems": true - }, - "enum": { - "type": "array", - "items": {}, - "minItems": 1, - "uniqueItems": false + "format": "uri" }, - "type": { - "type": "string", - "enum": [ - "array", - "boolean", - "integer", - "number", - "object", - "string" + "processingEntityType": { + "description": "The type of entity that created the job and is doing the processing.\nThis includes all the data access apis listed in \"apis.yaml\" plus\nthe processing APIs of OGC API Processes and OpenEO.", + "anyOf": [ + { + "$ref": "#/components/schemas/apis" + }, + { + "type": "string", + "enum": [ + "ogc-api-processes", + "openeo" + ] + } ] }, - "not": { - "$ref": "#/components/schemas/schema" - }, - "allOf": { - "type": "array", - "items": { - "$ref": "#/components/schemas/schema" - } - }, - "oneOf": { - "type": "array", - "items": { - "$ref": "#/components/schemas/schema" - } - }, - "anyOf": { - "type": "array", - "items": { - "$ref": "#/components/schemas/schema" - } - }, - "items": { - "$ref": "#/components/schemas/schema" - }, - "properties": { - "type": "object", - "properties": {}, - "additionalProperties": { - "$ref": "#/components/schemas/schema" - } + "profileEntityType": { + "description": "The type of entity requesting this status information. This may\nbe differernt than the processing entity. For example, the\nprocessing entity may be OGC API Processes but the status\ninformation is requested via the OpenEO API.", + "anyOf": [ + { + "$ref": "#/components/schemas/apis" + }, + { + "type": "string", + "enum": [ + "ogc-api-processes", + "openeo" + ] + } + ] }, - "additionalProperties": { + "request": { "oneOf": [ { - "$ref": "#/components/schemas/schema" + "type": "string" }, { - "type": "boolean" + "type": "object" + }, + { + "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" } - ], - "default": true + ] }, - "description": { - "type": "string" + "status": { + "$ref": "#/components/schemas/statusCode" }, - "format": { + "message": { "type": "string" }, - "default": {}, - "nullable": { - "type": "boolean", - "default": false + "exception": { + "$ref": "#/components/schemas/exception" }, - "readOnly": { - "type": "boolean", - "default": false + "created": { + "type": "string", + "format": "date-time" }, - "writeOnly": { - "type": "boolean", - "default": false + "started": { + "type": "string", + "format": "date-time" }, - "example": {}, - "deprecated": { - "type": "boolean", - "default": false + "finished": { + "type": "string", + "format": "date-time" }, - "contentMediaType": { - "type": "string" + "updated": { + "type": "string", + "format": "date-time" }, - "contentEncoding": { - "type": "string" + "progress": { + "type": "integer", + "minimum": 0, + "maximum": 100 }, - "contentSchema": { - "type": "string" + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" + } } - }, - "additionalProperties": false + } } ] }, - "statusCode": { - "type": "string", - "nullable": false, - "enum": [ - "accepted", - "running", - "successful", - "failed", - "dismissed" - ] - }, - "subscriber": { - "description": "Optional URIs for callbacks for this job.\n\nSupport for this parameter is not required and the parameter may be\nremoved from the API definition, if conformance class **'callback'**\nis not listed in the conformance declaration under `/conformance`.", + "dataAccessAPIs": { "type": "object", - "required": [ - "successUri" - ], "properties": { - "successUri": { - "type": "string", - "format": "uri" - }, - "inProgressUri": { - "type": "string", - "format": "uri" - }, - "failedUri": { - "type": "string", - "format": "uri" + "dataAccessAPIs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/apis" + } } } }, - "inlineOrRefData": { - "oneOf": [ - { - "$ref": "#/components/schemas/inputValueNoObject" - }, - { - "$ref": "#/components/schemas/qualifiedInputValue" - }, - { - "$ref": "#/components/schemas/link" - } + "apis": { + "description": "A non-exhaustive list of OGC and other data access APIs. This list can\nbe extended as required.", + "type": "string", + "enum": [ + "ogc-api-features", + "ogc-api-coverages", + "ogc-api-edr", + "ogc-api-tiles", + "ogc-api-moving-features", + "ogc-api-sensor-things", + "ogc-api-records", + "ogc-api-dggs", + "stac-api" ] }, - "statusInfo": { + "dataClasses": { "type": "object", - "required": [ - "jobID", - "status", - "type" - ], "properties": { - "processID": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "process" - ] - }, - "jobID": { - "type": "string" - }, - "status": { - "$ref": "#/components/schemas/statusCode" - }, - "message": { - "type": "string" - }, - "exception": { - "$ref": "#/components/schemas/exception" - }, - "created": { - "type": "string", - "format": "date-time" - }, - "started": { - "type": "string", - "format": "date-time" - }, - "finished": { - "type": "string", - "format": "date-time" - }, - "updated": { - "type": "string", - "format": "date-time" - }, - "progress": { - "type": "integer", - "minimum": 0, - "maximum": 100 - }, - "links": { + "dataClasses": { "type": "array", "items": { - "$ref": "#/components/schemas/link" + "type": "string", + "format": "uri" } } } @@ -13266,7 +7103,15 @@ ], "properties": { "processDescription": { - "$ref": "#/components/schemas/process" + "type": "object", + "required": [ + "process" + ], + "properties": { + "process": { + "$ref": "#/components/schemas/process" + } + } }, "executionUnit": { "oneOf": [ @@ -13354,7 +7199,7 @@ "$ref": "#/components/schemas/link" }, { - "$ref": "#/components/schemas/qualifiedInputValue" + "$ref": "#/components/schemas/qualifiedValue" }, { "type": "array", @@ -13367,7 +7212,7 @@ "$ref": "#/components/schemas/link" }, { - "$ref": "#/components/schemas/qualifiedInputValue" + "$ref": "#/components/schemas/qualifiedValue" } ] } @@ -13836,30 +7681,34 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "integer" - }, - { - "type": "object", - "nullable": true - }, - { - "type": "array", - "items": {} - }, + "anyOf": [ { - "type": "boolean" - }, - { - "type": "string", - "format": "binary" + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "integer" + }, + { + "type": "object", + "nullable": true + }, + { + "type": "array", + "items": {} + }, + { + "type": "boolean" + }, + { + "type": "string", + "format": "binary" + } + ] }, { "$ref": "#/components/schemas/results" @@ -14208,6 +8057,16 @@ } } }, + "ProcessSummary": { + "description": "A process summary.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/processSummary" + } + } + } + }, "DuplicateProcess": { "description": "the processes being added is already deployed (i.e. duplicate)", "content": { @@ -14241,4 +8100,3 @@ } } } - diff --git a/openapi/ogcapi-processes.yaml b/openapi/ogcapi-processes.yaml index 2ef74bb3..5144c2cf 100644 --- a/openapi/ogcapi-processes.yaml +++ b/openapi/ogcapi-processes.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - version: '0.1' + version: '2.0rc1' title: "OGC API - Processes" description: |- Example API Definition for OGC API - Processes @@ -38,7 +38,7 @@ paths: /processes/{processID}: # OGC API - Processes Part 1: Core #$ref: 'paths/processes-core/pProcessDescription.yaml' - + # OGC API - Processes Part 2: Deploy, Replace, Undeploy $ref: 'paths/processes-dru/pProcessDescriptionReplaceUndeploy.yaml' @@ -79,25 +79,262 @@ components: # Common - Geospatial Data collections: $ref: 'schemas/common-geodata/collections.yaml' - collectionInfo: - $ref: 'schemas/common-geodata/collectionInfo.yaml' + collectionDesc: + $ref: 'schemas/common-geodata/collectionDesc.yaml' extent: $ref: 'schemas/common-geodata/extent.yaml' - extent-uad: - $ref: 'schemas/common-geodata/extent-uad.yaml' + extent-UAD: + $ref: 'schemas/common-geodata/extent-UAD.yaml' crs: - $ref: 'schemas/common-geodata/crs.yaml' + $ref: 'schemas/crs/crs.yaml' dataType: $ref: 'schemas/common-geodata/dataType.yaml' timeStamp: $ref: 'schemas/common-geodata/timeStamp.yaml' # projJSON: - # $ref: 'schemas/common-geodata/projJSON.yaml' + # $ref: 'schemas/crs/projJSON.yaml' numberReturned: $ref: 'schemas/common-geodata/numberReturned.yaml' numberMatched: $ref: 'schemas/common-geodata/numberMatched.yaml' + # Common Workflow Language + CWL: + #$ref: 'https://w3id.org/cwl/v1.2/cwl-json-schema.yaml' + $ref: 'schemas/cwl/cwl.yaml' + cwltool_CUDARequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/cwltool_CUDARequirement' + + CWLAtomic: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLAtomic' + CWLAtomicNested: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLAtomicNested' + CWLGraph: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLGraph' + CWLWorkflow: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflow' + CWLWorkflowClass: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowClass' + CWLWorkflowBase: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowBase' + CWLWorkflowSteps: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowSteps' + CWLInputsDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputsDefinition' + CWLOutputsDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputsDefinition' + CWLWorkflowStepMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepMap' + CWLWorkflowStepList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepList' + CWLInputList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputList' + CWLInputMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputMap' + ResourceQuantityOrFractional: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/ResourceQuantityOrFractional' + CWLExpression: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLExpression' + InitialWorkDirListing: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/InitialWorkDirListing' + CWLRequirementsMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLRequirementsMap' + CWLRequirements: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLRequirements' + CWLCommand: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLCommand' + InputBinding: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/InputBinding' + CWLInputItem: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputItem' + DirectoryListingDirent: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/DirectoryListingDirent' + DirectoryListingFileOrDirectory: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/DirectoryListingFileOrDirectory' + SoftwareRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/SoftwareRequirement' + DockerRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/DockerRequirement' + ShellCommandRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/ShellCommandRequirement' + EnvVarRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/EnvVarRequirement' + SchemaDefRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/SchemaDefRequirement' + InitialWorkDirRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/InitialWorkDirRequirement' + InlineJavascriptRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/InlineJavascriptRequirement' + InplaceUpdateRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/InplaceUpdateRequirement' + LoadListingRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/LoadListingRequirement' + NetworkAccessRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/NetworkAccessRequirement' + ResourceRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/ResourceRequirement' + ScatterFeatureRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/ScatterFeatureRequirement' + WorkReuseRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/WorkReuseRequirement' + ToolTimeLimitRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/ToolTimeLimitRequirement' + MultipleInputFeatureRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/MultipleInputFeatureRequirement' + StepInputExpressionRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/StepInputExpressionRequirement' + SubworkflowFeatureRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/SubworkflowFeatureRequirement' + + CWLHints: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLHints' + CWLWorkflowStepDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepDefinition' + CWLWorkflowStepScatter: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepScatter' + CWLWorkflowStepId: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepId' + CWLHintsMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLHintsMap' + CWLHintsList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLHintsList' + CWLWorkflowStepIn: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepIn' + CWLWorkflowStepRun: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepRun' + CWLWorkflowStepWhen: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepWhen' + CWLWorkflowStepOut: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepWhen' + CWLWorkflowStepInMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInMap' + CWLWorkflowStepInList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInList' + CWLWorkflowStepInItem: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInItem' + CWLWorkflowStepInputId: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInputId' + CWLWorkflowStepInputBase: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInputBase' + CWLWorkflowStepInputDefault: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInputDefault' + + NetworkAccess: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/NetworkAccess' + EnvironmentDef: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/EnvironmentDef' + + CWLType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLType' + CWLOutputObject: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputObject' + CWLOutputStdOut: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdOut' + CWLOutputStdErr: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdErr' + CWLTypeEnum: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeEnum' + CWLTypeRecordSchema: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordSchema' + CWLTypeRecordArray: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordArray' + CWLDefaultTypedConditional: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDefaultTypedConditional' + CWLTypeBase: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeBase' + CWLTypeList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeList' + AnyType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/AnyType' + CWLTypeDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeDefinition' + CWLTypeArray: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeArray' + CWLTypeRecordRef: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordRef' + CWLTypeRecordFieldsMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordFieldsMap' + CWLTypeRecordFieldsList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordFieldsList' + CWLTypeRecordFieldDefBase: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordFieldDefBase' + CWLFileOnlyParametersConditional: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLFileOnlyParametersConditional' + CWLDirectoryOnlyParametersConditional: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDirectoryOnlyParametersConditional' + CWLFileOnlyParameters: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLFileOnlyParameters' + CWLTypeRecordSecondaryFiles: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordSecondaryFiles' + CWLTypeRecordSecondaryFileSchema: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordSecondaryFileSchema' + CWLRequirementsList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLRequirementsList' + CWLRequirementsItem: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLRequirementsItem' + + CWLOutputStdOutDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdOutDefinition' + CWLOutputStdOutObjectType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdOutObjectType' + CWLOutputStdErrDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdErrDefinition' + CWLOutputStdErrObjectType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdErrObjectType' + CWLTypeRecordFieldDef: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordFieldDef' + + CWLDefault: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDefault' + AnyLiteralType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/AnyLiteralType' + AnyLiteralList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/AnyLiteralList' + CWLDefaultLocation: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDefaultLocation' + CWLDefaultObject: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDefaultObject' + + CWLTypeRecordFields: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordFields' + + CWLImport: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLImport' + + CWLVersion: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLVersion' + CWLMetadata: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLMetadata' + CWLDocumentation: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDocumentation' + CWLAtomicBase: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLAtomicBase' + CWLOutputList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputList' + CWLOutputMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputMap' + CWLOutputItem: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputItem' + CWLWorkflowStepObject: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepObject' + CWLInputStdInDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputStdInDefinition' + CWLInputStdInObjectType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputStdInObjectType' + CWLInputStdIn: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputStdIn' + CWLArguments: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLArguments' + + SoftwarePackage: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/SoftwarePackage' + SoftwarePackageSpecs: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/SoftwarePackageSpecs' + + # Common Query Language + CQL2: + $ref: 'schemas/cql2/cql2.yaml' + # Dynamic (or implementation-specific) enumeration: $ref: 'schemas/dynamic/enumeration.yaml' @@ -117,28 +354,42 @@ components: $ref: 'schemas/processes-core/bbox.yaml' descriptionType: $ref: 'schemas/processes-core/descriptionType.yaml' - binaryInputValue: - $ref: 'schemas/processes-core/binaryInputValue.yaml' - execute: - $ref: 'schemas/processes-core/execute.yaml' + binaryValue: + $ref: 'schemas/processes-core/binaryValue.yaml' + #execute: + # $ref: 'schemas/processes-core/execute.yaml' + execute-workflow: + $ref: 'schemas/processes-workflows/execute-workflows.yaml' + inputParameterized: + $ref: 'schemas/processes-workflows/inputParameterized.yaml' format: $ref: 'schemas/processes-core/format.yaml' + schemaAndOccurrences: + $ref: 'schemas/processes-core/schemaAndOccurrences.yaml' inputDescription: $ref: 'schemas/processes-core/inputDescription.yaml' - inputValue: - $ref: 'schemas/processes-core/inputValue.yaml' - inputValueNoObject: - $ref: 'schemas/processes-core/inputValueNoObject.yaml' + value: + $ref: 'schemas/processes-core/value.yaml' + collectionValue: + $ref: 'schemas/processes-core/collectionValue.yaml' + valueNoObject: + $ref: 'schemas/processes-core/valueNoObject.yaml' + valueNoObject-workflows: + $ref: 'schemas/processes-workflows/valueNoObject-workflows.yaml' jobControlOptions: $ref: 'schemas/processes-core/jobControlOptions.yaml' metadata: $ref: 'schemas/processes-core/metadata.yaml' - output: - $ref: 'schemas/processes-core/output.yaml' + values: + $ref: 'schemas/processes-core/values.yaml' + values-workflows: + $ref: 'schemas/processes-workflows/values-workflows.yaml' + outputSelection: + $ref: 'schemas/processes-core/outputSelection.yaml' outputDescription: $ref: 'schemas/processes-core/outputDescription.yaml' - qualifiedInputValue: - $ref: 'schemas/processes-core/qualifiedInputValue.yaml' + qualifiedValue: + $ref: 'schemas/processes-core/qualifiedValue.yaml' reference: $ref: 'schemas/processes-core/reference.yaml' results: @@ -149,10 +400,20 @@ components: $ref: 'schemas/processes-core/statusCode.yaml' subscriber: $ref: 'schemas/processes-core/subscriber.yaml' - inlineOrRefData: - $ref: 'schemas/processes-core/inlineOrRefData.yaml' + inlineOrRefValue: + $ref: 'schemas/processes-core/inlineOrRefValue.yaml' + inlineOrRefValue-workflows: + $ref: 'schemas/processes-workflows/inlineOrRefValue-workflows.yaml' + fieldsModifiers: + $ref: 'schemas/processes-core/fieldsModifiers.yaml' statusInfo: $ref: 'schemas/processes-core/statusInfo.yaml' + dataAccessAPIs: + $ref: 'schemas/processes-core/dataAccessAPIs.yaml' + apis: + $ref: 'schemas/processes-core/apis.yaml' + dataClasses: + $ref: 'schemas/processes-core/dataClasses.yaml' # OGC API - Common - Part 2: Deploy, Replace, Undeploy ogcapppkg: @@ -204,7 +465,7 @@ components: # OGC API - Common - Part 2: Deploy, Replace, Undeploy w: - $ref: 'parameters/processes-dru/w-param.yaml' + $ref: 'parameters/processes-dru/w-param.yaml' responses: # Generic Errors @@ -258,8 +519,11 @@ components: # OGC API - Common - Part 2: Deploy, Replace, Undeploy DeployProcess: $ref: 'responses/processes-dru/rDeployProcess.yaml' + ProcessSummary: + $ref: 'responses/processes-dru/rProcessSummary.yaml' + - # Part 2 additional excepions + # Part 2 additional exceptions DuplicateProcess: $ref: 'responses/processes-dru/rDuplicateProcess.yaml' ImmutableProcess: diff --git a/openapi/parameters/processes-core/bbox-crs.yaml b/openapi/parameters/processes-core/bbox-crs.yaml index 1fb1ff2d..05876c84 100644 --- a/openapi/parameters/processes-core/bbox-crs.yaml +++ b/openapi/parameters/processes-core/bbox-crs.yaml @@ -7,9 +7,9 @@ description: |- in: query description: |- Asserts the CRS used for the coordinate values of a bounding - box input parameter. + box input parameter. required: false -schema: +schema: type: object patternProperties: "^.+[crs]$": diff --git a/openapi/parameters/processes-core/response.yaml b/openapi/parameters/processes-core/response.yaml index 5812a28e..c8e974e8 100644 --- a/openapi/parameters/processes-core/response.yaml +++ b/openapi/parameters/processes-core/response.yaml @@ -2,11 +2,10 @@ name: response in: query description: |- For executing the process using the _Collection Output_ mechanism, where the - client is redirected (_303_ status) to either an OGC API landing page or - collection resource, from which one or more OGC API data access mechanism - is available. Data access requests may trigger processing on-demand for - a given area, time and resolution of interest. + client is redirected (_303_ status) to a collection resource, from which one + or more OGC API data access mechanism is available. Data access requests may + trigger processing on-demand for a given area, time and resolution of interest. required: false schema: type: string - enum: [ collection, landingPage ] + enum: [ collection ] diff --git a/openapi/parameters/processes-workflows/response.yaml b/openapi/parameters/processes-workflows/response.yaml deleted file mode 100644 index 6cb3a1c2..00000000 --- a/openapi/parameters/processes-workflows/response.yaml +++ /dev/null @@ -1,10 +0,0 @@ -name: response -in: query -description: |- - For executing the process using the _Collection Output_ mechanism, where the client is redirected (_303_ status) to either - an OGC API landing page or collection resource, from which one or more OGC API data access mechanism is available. - Data access requests may trigger processing on-demand for a given area, time and resolution of interest. -required: false -schema: - type: string - enum: [ collection, landingPage ] diff --git a/openapi/paths/common-geodata/pCollectionsList.yaml b/openapi/paths/common-geodata/pCollectionsList.yaml index 34d64404..a074ca72 100644 --- a/openapi/paths/common-geodata/pCollectionsList.yaml +++ b/openapi/paths/common-geodata/pCollectionsList.yaml @@ -4,9 +4,6 @@ get: operationId: getCollectionsList summary: Retrieve the list of geospatial data collections available from this service. parameters: - - $ref: '../../parameters/common-geodata/datetime.yaml' - - $ref: '../../parameters/common-geodata/bbox.yaml' - - $ref: '../../parameters/common-geodata/limit-collections.yaml' - $ref: '../../parameters/unspecified/f-metadata.yaml' responses: '200': diff --git a/openapi/paths/processes-core/pExecution.yaml b/openapi/paths/processes-core/pExecution.yaml index 6063a048..9c5f2e81 100644 --- a/openapi/paths/processes-core/pExecution.yaml +++ b/openapi/paths/processes-core/pExecution.yaml @@ -9,6 +9,7 @@ post: - Processes parameters: - $ref: "../../parameters/processes-core/processID-path.yaml" + - $ref: "../../parameters/processes-core/response.yaml" - $ref: "../../parameters/processes-core/prefer-header-execution.yaml" requestBody: description: |- @@ -27,6 +28,8 @@ post: $ref: "../../responses/processes-core/rExecuteAsync.yaml" 204: $ref: "../../responses/processes-core/rEmpty.yaml" + 303: + $ref: "../../responses/processes-core/rExecuteCollectionRedirect.yaml" 404: $ref: "../../responses/common-core/rNotFound.yaml" 500: diff --git a/openapi/paths/processes-dru/pDeploy.yaml b/openapi/paths/processes-dru/pDeploy.yaml index 944dc52a..86ecbfe2 100644 --- a/openapi/paths/processes-dru/pDeploy.yaml +++ b/openapi/paths/processes-dru/pDeploy.yaml @@ -19,16 +19,19 @@ post: $ref: "../../schemas/processes-dru/ogcapppkg.yaml" application/cwl: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" application/cwl+json: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" application/cwl+yaml: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" responses: 201: - $ref: "../../schemas/processes-core/processSummary.yaml" + $ref: "../../responses/processes-dru/rProcessSummary.yaml" 400: $ref: "../../responses/processes-dru/rWorkflowNotFound.yaml" 403: diff --git a/openapi/paths/processes-dru/pPackage.yaml b/openapi/paths/processes-dru/pPackage.yaml index a0674178..9fd6e3f7 100644 --- a/openapi/paths/processes-dru/pPackage.yaml +++ b/openapi/paths/processes-dru/pPackage.yaml @@ -16,12 +16,18 @@ get: $ref: "../../schemas/processes-dru/ogcapppkg.yaml" application/cwl: schema: - $ref: "https://raw.githubusercontent.com/common-workflow-lab/cwl-ts-auto/main/json_schemas/cwl_schema.yaml" + #$ref: "https://raw.githubusercontent.com/common-workflow-lab/cwl-ts-auto/main/json_schemas/cwl_schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" application/cwl+json: schema: - $ref: "https://raw.githubusercontent.com/common-workflow-lab/cwl-ts-auto/main/json_schemas/cwl_schema.yaml" + #$ref: "https://raw.githubusercontent.com/common-workflow-lab/cwl-ts-auto/main/json_schemas/cwl_schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" application/cwl+yaml: schema: - $ref: "https://raw.githubusercontent.com/common-workflow-lab/cwl-ts-auto/main/json_schemas/cwl_schema.yaml" + #$ref: "https://raw.githubusercontent.com/common-workflow-lab/cwl-ts-auto/main/json_schemas/cwl_schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" 404: $ref: "../../responses/common-core/rNotFound.yaml" diff --git a/openapi/paths/processes-dru/pProcessDescriptionReplaceUndeploy.yaml b/openapi/paths/processes-dru/pProcessDescriptionReplaceUndeploy.yaml index 5a45425f..c4288ee1 100644 --- a/openapi/paths/processes-dru/pProcessDescriptionReplaceUndeploy.yaml +++ b/openapi/paths/processes-dru/pProcessDescriptionReplaceUndeploy.yaml @@ -38,13 +38,16 @@ put: $ref: "../../schemas/processes-dru/ogcapppkg.yaml" application/cwl: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" application/cwl+json: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" application/cwl+yaml: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" responses: 204: $ref: "../../responses/processes-core/rEmpty.yaml" diff --git a/openapi/paths/processes-dru/pProcessListDeploy.yaml b/openapi/paths/processes-dru/pProcessListDeploy.yaml index 82f3e0b1..67bf9be0 100644 --- a/openapi/paths/processes-dru/pProcessListDeploy.yaml +++ b/openapi/paths/processes-dru/pProcessListDeploy.yaml @@ -31,16 +31,19 @@ post: $ref: "../../schemas/processes-dru/ogcapppkg.yaml" application/cwl: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" application/cwl+json: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" application/cwl+yaml: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" responses: 201: - $ref: "../../schemas/processes-core/processSummary.yaml" + $ref: "../../responses/processes-dru/rProcessSummary.yaml" 400: $ref: "../../responses/processes-dru/rWorkflowNotFound.yaml" 403: diff --git a/openapi/paths/processes-dru/pReplace.yaml b/openapi/paths/processes-dru/pReplace.yaml index baf2ed42..0e26bfbb 100644 --- a/openapi/paths/processes-dru/pReplace.yaml +++ b/openapi/paths/processes-dru/pReplace.yaml @@ -19,13 +19,16 @@ put: $ref: "../../schemas/processes-dru/ogcapppkg.yaml" application/cwl: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" application/cwl+json: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" application/cwl+yaml: schema: - $ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + $ref: "../../schemas/cwl/cwl.yaml" responses: 204: $ref: "../../responses/processes-core/rEmpty.yaml" diff --git a/openapi/paths/processes-workflows/pExecution-workflows.yaml b/openapi/paths/processes-workflows/pExecution-workflows.yaml index 3f9e88ab..229a7f38 100644 --- a/openapi/paths/processes-workflows/pExecution-workflows.yaml +++ b/openapi/paths/processes-workflows/pExecution-workflows.yaml @@ -9,7 +9,7 @@ post: - Processes parameters: - $ref: "../../parameters/processes-core/processID-path.yaml" - - $ref: "../../parameters/processes-workflows/response.yaml" + - $ref: "../../parameters/processes-core/response.yaml" - $ref: "../../parameters/processes-core/prefer-header-execution.yaml" requestBody: description: An execution request specifying any inputs for the process to execute, and optionally to select specific outputs. @@ -26,7 +26,7 @@ post: 204: $ref: "../../responses/processes-core/rEmpty.yaml" 303: - $ref: "../../responses/processes-workflows/rExecuteCollectionRedirect.yaml" + $ref: "../../responses/processes-core/rExecuteCollectionRedirect.yaml" 404: $ref: "../../responses/common-core/rNotFound.yaml" 500: diff --git a/openapi/responses/common-geodata/rCollection.yaml b/openapi/responses/common-geodata/rCollection.yaml index d6a6eaa5..4c5e92df 100644 --- a/openapi/responses/common-geodata/rCollection.yaml +++ b/openapi/responses/common-geodata/rCollection.yaml @@ -1,14 +1,16 @@ description: |- - Information about a particular collection of (mostly geospatial) data available from this API. The collection is accessible via one or more OGC API set of specifications, for which a link to relevant accessible resources, e.g. /collections/{collectionId}/(items, coverage, map, tiles...) is contained in the response, with the corresponding relation type, as well as key information about the collection. This information includes: + Information about a particular collection of (mostly geospatial) data available from this API. The collection is accessible via one or more OGC API set of specifications, for which a link to relevant accessible resources, e.g. /collections/{collectionId}/(items, coverage, map, tiles...) is contained in the response, with the corresponding relation type, as well as key information about the collection. This information includes (among other things): * a local identifier for the collection that is unique for the dataset; - * a list of coordinate reference systems (CRS) in which data may be returned by the server. The first CRS is the default coordinate reference system (the default is always WGS 84 with axis order longitude/latitude); + * a list of coordinate reference systems (CRS) in which data may be returned by the server; * an optional title and description for the collection; * an optional extent that can be used to provide an indication of the spatial and temporal extent of the collection - typically derived from the data; * for collections accessible via the Features or Records API, an optional indicator about the type of the items in the collection (the default value, if the indicator is not provided, is 'feature'). content: application/json: schema: - $ref: '../../schemas/common-geodata/collectionInfo.yaml' + $ref: '../../schemas/common-geodata/collectionDesc.yaml' + # For APIs conforming to the Uniform Additional Dimensions requirements class, reference the collectionDesc-UAD.yaml schema instead + # $ref: '../../schemas/common-geodata/collectionDesc-UAD.yaml' example: id: buildings title: Buildings diff --git a/openapi/responses/processes-workflows/rExecuteCollectionRedirect.yaml b/openapi/responses/processes-core/rExecuteCollectionRedirect.yaml similarity index 100% rename from openapi/responses/processes-workflows/rExecuteCollectionRedirect.yaml rename to openapi/responses/processes-core/rExecuteCollectionRedirect.yaml diff --git a/openapi/responses/processes-core/rExecuteSync.yaml b/openapi/responses/processes-core/rExecuteSync.yaml index 9c79927b..c2df51aa 100644 --- a/openapi/responses/processes-core/rExecuteSync.yaml +++ b/openapi/responses/processes-core/rExecuteSync.yaml @@ -2,17 +2,18 @@ description: Result of synchronous execution content: application/json: schema: - oneOf: - - type: string - - type: number - - type: integer - - type: object - nullable: true - - type: array - items: { } - - type: boolean - - type: string - format: binary + anyOf: + - oneOf: + - type: string + - type: number + - type: integer + - type: object + nullable: true + - type: array + items: { } + - type: boolean + - type: string + format: binary - $ref: "../../schemas/processes-core/results.yaml" image/png: schema: diff --git a/openapi/responses/processes-dru/rProcessSummary.yaml b/openapi/responses/processes-dru/rProcessSummary.yaml new file mode 100644 index 00000000..5e71b5b2 --- /dev/null +++ b/openapi/responses/processes-dru/rProcessSummary.yaml @@ -0,0 +1,5 @@ +description: A process summary. +content: + application/json: + schema: + $ref: "../../schemas/processes-core/processSummary.yaml" diff --git a/openapi/responses/processes-dru/rWorkflowNotFound.yaml b/openapi/responses/processes-dru/rWorkflowNotFound.yaml new file mode 100644 index 00000000..4d600172 --- /dev/null +++ b/openapi/responses/processes-dru/rWorkflowNotFound.yaml @@ -0,0 +1,9 @@ +# NOTE: References to this missing file were added in 3cd54af60cd7fede3fc9647aa39c5fbeddd219f0 -- the correct version should be added. +description: The requested workflow does not exist on the server. +content: + application/json: + schema: + $ref: '../../schemas/common-core/exception.yaml' + text/html: + schema: + type: string diff --git a/openapi/schemas/common-geodata/additionalDimensionExtent.yaml b/openapi/schemas/common-geodata/additionalDimensionExtent.yaml new file mode 100644 index 00000000..5e825715 --- /dev/null +++ b/openapi/schemas/common-geodata/additionalDimensionExtent.yaml @@ -0,0 +1,71 @@ +title: Extent of any additional dimensions +description: The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial. +type: object +oneOf: + - required: [ interval, definition ] + - required: [ interval, trs ] + - required: [ interval, vrs ] +properties: + interval: + title: Interval of the extent of this dimension + description: |- + One or more intervals that describe the extent for this dimension of the dataset. + The value `null` is supported and indicates an unbounded or half-bounded interval. + The first interval describes the overall extent of the data for this dimension. + All subsequent intervals describe more precise intervals, e.g., to identify clusters of data. + Clients only interested in the overall extent will only need + to access the first item (a pair of lower and upper bound values). + type: array + minItems: 1 + items: + description: |- + Lower and upper bound values of the interval. The values + are in the coordinate reference system specified in `crs`, `trs` or `vrs`. + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - type: string + nullable: true + example: '2011-11-11T12:22:11Z' #, '2011-11-11T08:22:11-04:00', null + - type: number + example: 32.7 + trs: + title: Temporal Coordinate Reference System + description: Temporal Coordinate Reference System (e.g. as defined by Features for 'temporal'). This should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + anyOf: + - type: string + - type: object + vrs: + title: Vertical Coordinate Reference System + description: Vertical Coordinate Reference System (e.g. as defined in EDR for 'vertical'). This should be a URI to a registered VRS if one is available, or a full description of the VRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + anyOf: + - type: string + - type: object + grid: + $ref: 'grid.yaml' + definition: + type: string + format: uri + title: Observed property definition + description: A URI for the definition of the measured or observed property corresponding to this dimension. + unit: + type: string + title: Units of measurement + description: The unit of measure in which the interval and/or grid values are expressed. + unitLang: + type: string + default: UCUM + title: Units of measurement vocabulary + description: The language (or vocabulary) in which the unit is expressed (defaults to "UCUM" if not specified). + variableType: + title: Variable type + description: The type of variable which may inform correct interpretation and interpolation methods. + type: string + enum: + - continuous + - numericalOrdinal + - numericalNominal + - categoricalOrdinal + - categoricalNominal diff --git a/openapi/schemas/common-geodata/collectionDesc-UAD.yaml b/openapi/schemas/common-geodata/collectionDesc-UAD.yaml new file mode 100644 index 00000000..66a81c57 --- /dev/null +++ b/openapi/schemas/common-geodata/collectionDesc-UAD.yaml @@ -0,0 +1,6 @@ +allOf: + - $ref: 'collectionProperties.yaml' + - type: object + properties: + extent: + $ref: 'extent-UAD.yaml' diff --git a/openapi/schemas/common-geodata/collectionDesc.yaml b/openapi/schemas/common-geodata/collectionDesc.yaml new file mode 100644 index 00000000..1d727b95 --- /dev/null +++ b/openapi/schemas/common-geodata/collectionDesc.yaml @@ -0,0 +1,6 @@ +allOf: + - $ref: 'collectionProperties.yaml' + - type: object + properties: + extent: + $ref: 'extent.yaml' diff --git a/openapi/schemas/common-geodata/collectionInfo.yaml b/openapi/schemas/common-geodata/collectionInfo.yaml deleted file mode 100644 index 4dec6a04..00000000 --- a/openapi/schemas/common-geodata/collectionInfo.yaml +++ /dev/null @@ -1,83 +0,0 @@ -type: object -required: - - id - - links -properties: - id: - type: string - description: identifier of the collection used, for example, in URIs - example: dem - title: - type: string - description: human readable title of the collection - example: Digital Elevation Model - description: - type: string - description: a description of the data in the collection - example: A Digital Elevation Model. - links: - type: array - example: - - href: http://data.example.org/collections/dem?f=json - rel: self - type: application/json - title: Digital Elevation Model - - href: http://data.example.org/collections/dem?f=html - rel: alternate - type: application/json - title: Digital Elevation Model - - href: http://data.example.org/collections/dem/coverage - rel: coverage - type: image/tiff; application=geotiff - title: Digital Elevation Model - - href: http://data.example.org/collections/dem/coverage/domainset - rel: domainset - type: application/json - title: Digital Elevation Model - - href: http://data.example.org/collections/dem/coverage/rangetype - rel: rangetype - type: application/json - title: Digital Elevation Model - - href: http://data.example.org/collections/dem/coverage/metadata - rel: metadata - type: application/json - title: Digital Elevation Model - items: - $ref: '../common-core/link.yaml' - extent: - $ref: 'extent-uad.yaml' - itemType: - description: indicator about the type of the items in the collection if the collection has an accessible /collections/{collectionId}/items endpoint - type: string - default: unknown - crs: - description: the list of coordinate reference systems supported by the API; the first item is the default coordinate reference system - type: array - items: - type: string - default: - - http://www.opengis.net/def/crs/OGC/1.3/CRS84 - example: - - http://www.opengis.net/def/crs/OGC/1.3/CRS84 - - http://www.opengis.net/def/crs/EPSG/0/4326 - dataType: - allOf: - - description: Type of data represented in the collection - - $ref: '../../schemas/common-geodata/dataType.yaml' - geometryDimension: - description: 'The geometry dimension of the features shown in this layer (0: points, 1: curves, 2: surfaces, 3: solids), unspecified: mixed or unknown' - type: integer - minimum: 0 - maximum: 3 - minScaleDenominator: - description: Minimum scale denominator for usage of the collection - type: number - maxScaleDenominator: - description: Maximum scale denominator for usage of the collection - type: number - minCellSize: - description: Minimum cell size for usage of the collection - type: number - maxCellSize: - description: Maximum cell size for usage of the collection - type: number diff --git a/openapi/schemas/common-geodata/collectionProperties.yaml b/openapi/schemas/common-geodata/collectionProperties.yaml new file mode 100644 index 00000000..69eacfa8 --- /dev/null +++ b/openapi/schemas/common-geodata/collectionProperties.yaml @@ -0,0 +1,218 @@ +type: object +required: + - id + - links +properties: + id: + type: string + title: Identifier of the resource + description: Identifier of the collection, for example, used in URI path parameters. + minLength: 1 + example: dem + title: + type: string + title: Title of the collection + description: A short, human-readable summary of the collection. + example: Digital Elevation Model + description: + type: string + title: Description of the collection + description: A human-readable explanation about data in the collection. + example: A Digital Elevation Model. + attribution: + type: string + title: Attribution for the collection + description: |- + Attribution for the collection, providing a way to identify the source of the geographic information, which can contain markup text whose format may be indicated in the `attributionMediaType` property. That format can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`). + If the 'attributionMediaType' indicates something other than `text/plain`, the `attribution` element string should be interpreted by a markup parser selected based on that media type to be presented to the user + (e.g., `text/markdown` will be parsed by a library supporting CommonMark). By allowing markup, the attribution string can import images (e.g., organization logos) and format the text (e.g., the name of the organization in italics). + attributionMediaType: + title: Media type of the attribution + description: |- + Media type for the markup language of the attribution: It can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`). + enum: + - text/plain + - text/html + - text/markdown + accessConstraints: + title: Access Constraints of the collection + description: |- + Restrictions on the availability of the collection that the user needs to be aware of before using or redistributing the data: + + * unclassified: Available for general disclosure + * restricted: Not for general disclosure + * confidential: Available for someone who can be entrusted with information + * secret: Kept or meant to be kept private, unknown, or hidden from all but a select group of people + * topSecret: Of the highest secrecy + enum: + - unclassified + - restricted + - confidential + - secret + - topSecret + publisher: + type: string + title: Responsible party publishing the collection + description: Organization or individual responsible for making the data available + contacts: + type: array + title: A list of contacts + description: + A list of contacts qualified by their role(s) in association to the collection. + minItems: 1 + items: + $ref: '../records-core/contact.yaml' + license: + type: string + title: License associated to the collection + description: The legal provisions under which the data of this collection is made available. + rights: + type: string + title: Rights over the collection + description: A statement that concerns all rights not addressed by the license such as a copyright statement. + formats: + title: Formats for distributing the collection + description: A list of formats in which the data of this collection is distributed + type: array + items: + $ref: '../records-core/format.yaml' + keywords: + type: array + title: Keywords representing aspects of the collection + description: The topic or topics of the resource. Typically represented using free-form keywords, tags, key phrases, or classification codes. + items: + type: string + themes: + type: array + title: Themes represented by the resource + description: + A knowledge organization system used to classify the resource. + minItems: 1 + items: + $ref: '../records-core/theme.yaml' + resourceLanguages: + type: array + title: The list of languages of the collection + description: The list of languages in which the data of this collection is available. + items: + $ref: '../records-core/language.yaml' + links: + type: array + title: Links relevant to this collection + description: Links to this or other resources related to this collection. + example: + - href: http://data.example.org/collections/dem?f=json + rel: self + type: application/json + title: Digital Elevation Model + - href: http://data.example.org/collections/dem?f=html + rel: alternate + type: application/json + title: Digital Elevation Model + - href: http://data.example.org/collections/dem/coverage + rel: coverage + type: image/tiff; application=geotiff + title: Digital Elevation Model + - href: http://data.example.org/collections/dem/coverage/domainset + rel: domainset + type: application/json + title: Digital Elevation Model + - href: http://data.example.org/collections/dem/coverage/rangetype + rel: rangetype + type: application/json + title: Digital Elevation Model + - href: http://data.example.org/collections/dem/coverage/metadata + rel: metadata + type: application/json + title: Digital Elevation Model + items: + $ref: '../common-core/link.yaml' + itemType: + title: Type of the items in the collection + description: Indicator about the type of the items in the collection if the collection has an accessible `/collections/{collectionId}/items` endpoint (e.g., `feature` or `record`). + type: string + default: feature + dataType: + title: Nature of the data in the collection + description: Nature of the data in the collection. For example, this could be set to `map`, `vector` or `coverage`. It is not an indication of the available data access mechanism, but a hint regarding the internal representation of the data. + $ref: 'dataType.yaml' + featureTypes: + title: Feature type(s) present in the collection + description: The list of feature (or coverage) type(s) which are present inside the collection. This is useful for associating the relevant portrayal rules of a style. + type: string + parent: + title: Identifier of a parent collection (if this collection is part of a hierarchy) + description: If this collection is part of a hierarchy, this property allows to identify another collection within the same dataset as its parent (by setting `parent` to the `id` of that collection), enabling clients to construct a hierarchy. + type: string + geoDataClasses: + title: Class of data in the collection + description: 'One or more classes of geospatial data, identified by a URI, which implies compatibility with a particular schema (fields/properties, as defined in OGC API - Common - Part 3: Schemas) for one or more collections, each with particular semantic definitions and data types. This is useful for example to determine compatibility with styles or processes, or to identify a particular collection within a dataset based on semantics.' + type: array + items: + type: string + format: uri + defaultFields: + title: List of fields returned by default + description: A sorted list of field names. For a Features data access mechanism, it is the list of returnable properties included by default and complementing the geometry of the features. For a Coverage data access mechanism, they are names of fields whose values are included by default. Note that an API may provide a mechanism (e.g., a query parameter called `properties` or `exclude-properties`) to override this default list in customized responses. + type: array + items: + type: string + minItems: 1 + crs: + title: List of coordinate reference systems supported in the collection + description: The list of coordinate reference systems supported by the API; if present, the list should include the default coordinate reference system (usually listed first). Each item should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + type: array + items: + anyOf: + - type: string + - type: object + default: + - http://www.opengis.net/def/crs/OGC/1.3/CRS84 + example: + - http://www.opengis.net/def/crs/OGC/1.3/CRS84 + - http://www.opengis.net/def/crs/EPSG/0/4326 + storageCrs: + title: Storage or native CRS of the data in the collection + description: The native coordinate reference system (i.e., the most efficient CRS in which to request the data, possibly how the data is stored on the server); this is the default output coordinate reference system for Maps and Coverages. This should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + anyOf: + - type: string + - type: object + default: http://www.opengis.net/def/crs/OGC/1.3/CRS84 + example: http://www.opengis.net/def/crs/OGC/1.3/CRS84 + epoch: + title: Epoch of the data in the collection + description: Epoch of the native (storage) Coordinate Reference System (CRS) + type: number + example: 2021.33 + geometryDimension: + title: Number of spatial dimensions of the primary geometry for the data + description: 'Number of spatial dimensions of the primary geometry of individual elements of the data: 0 for points, 1 for curves, 2 for surfaces, 3 for solids and unspecified when mixed or unknown. Not to be confused with the dimensions of the domain which are defined by the extent element.' + type: integer + minimum: 0 + maximum: 3 + minScaleDenominator: + title: Minimum scale denominator for the collection + description: Minimum scale denominator for usage of the collection. + type: number + maxScaleDenominator: + title: Maximum scale denominator for the collection + description: Maximum scale denominator for usage of the collection. + type: number + minCellSize: + title: Minimum cell size for the collection + description: Minimum cell size for usage of the collection. + type: number + maxCellSize: + title: Maximum cell size for the collection + description: Maximum cell size for usage of the collection. + type: number + created: + title: Timestamp when the collection was first produced + description: Timestamp indicating when the data in the collection was first produced. + type: string + format: date-time + updated: + title: Timestamp of the last change/revision to the collection + description: Timestamp of the last change/revision to the data in the collection. + type: string + format: date-time diff --git a/openapi/schemas/common-geodata/collections.yaml b/openapi/schemas/common-geodata/collections.yaml index 2e57c44a..e6872ac4 100644 --- a/openapi/schemas/common-geodata/collections.yaml +++ b/openapi/schemas/common-geodata/collections.yaml @@ -5,20 +5,19 @@ required: properties: links: type: array + title: Links to resource in the collections + description: Links to this or other resources provided by the collections. items: $ref: '../common-core/link.yaml' - timeStamp: - type: string - format: date-time numberMatched: - type: integer - minimum: 0 - example: 1 + $ref: 'numberMatched.yaml' numberReturned: - type: integer - minimum: 0 - example: 1 + $ref: 'numberReturned.yaml' collections: type: array + title: Collections descriptions + description: Descriptions of each collection in this API. items: - $ref: 'collectionInfo.yaml' + $ref: 'collectionDesc.yaml' + # For APIs conforming to the Uniform Additional Dimensions requirements class, reference the collectionDesc-UAD.yaml schema instead + # $ref: 'collectionDesc-UAD.yaml' diff --git a/openapi/schemas/common-geodata/dataType.yaml b/openapi/schemas/common-geodata/dataType.yaml index 6aa967cb..dadac26a 100644 --- a/openapi/schemas/common-geodata/dataType.yaml +++ b/openapi/schemas/common-geodata/dataType.yaml @@ -1,5 +1,5 @@ # This list may be extended (e.g. point clouds, meshes) -oneOf: +anyOf: - type: string - type: string enum: diff --git a/openapi/schemas/common-geodata/extent-UAD.yaml b/openapi/schemas/common-geodata/extent-UAD.yaml new file mode 100644 index 00000000..17df2900 --- /dev/null +++ b/openapi/schemas/common-geodata/extent-UAD.yaml @@ -0,0 +1,15 @@ +title: Extent conforming to Uniform Additional Dimensions Schema +description: |- + The extent of the data in the collection. + This extent schema requires that if any dimension beyond spatial and temporal are specified, they conform to the Uniform Additional Dimensions schema. + In addition to the spatial and temporal extents defined in the "Collections" requirements class of OGC API - Common - Part 2, + the "Uniform Additional Dimensions" requirements class specifies a generic schema for describing any additional dimension, such as thermal or pressure ranges. +allOf: + - type: object + properties: + spatial: + $ref: 'spatialExtent.yaml' + temporal: + $ref: 'temporalExtent.yaml' + additionalProperties: + $ref: 'additionalDimensionExtent.yaml' diff --git a/openapi/schemas/common-geodata/extent-uad.yaml b/openapi/schemas/common-geodata/extent-uad.yaml deleted file mode 100644 index 7e38641a..00000000 --- a/openapi/schemas/common-geodata/extent-uad.yaml +++ /dev/null @@ -1,85 +0,0 @@ -title: Extent with Uniform Additional Dimensions Schema -description: |- - The extent module only addresses spatial and temporal extents. This module extends extent by specifying how - intervals and crs properties can be used to specify additional geometries. -allOf: - - $ref: 'extent.yaml' - - type: object - additionalProperties: - description: |- - The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial. - type: object - oneOf: - - required: [ interval, crs ] - - required: [ interval, trs ] - - required: [ interval, vrs ] - properties: - interval: - description: |- - One or more intervals that describe the extent for this dimension of the dataset. - The value `null` is supported and indicates an unbounded or half-bounded interval. - The first interval describes the overall extent of the data for this dimension. - All subsequent intervals describe more precise intervals, e.g., to identify clusters of data. - Clients only interested in the overall extent will only need - to access the first item (a pair of lower and upper bound values). - type: array - minItems: 1 - items: - description: |- - Lower and upper bound values of the interval. The values - are in the coordinate reference system specified in `crs`, `trs` or `vrs`. - type: array - minItems: 2 - maxItems: 2 - items: - oneOf: - - type: string - nullable: true - - type: number - example: - - '2011-11-11T12:22:11Z' - - 32.5 - - null - crs: - type: string - description: generic coordinate reference system suitable for any type of dimensions - trs: - type: string - description: temporal coordinate reference system (e.g. as defined by Features for 'temporal') - vrs: - type: string - description: vertical coordinate reference system (e.g. as defined in EDR for 'vertical') - grid: - type: object - description: |- - Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the dimension. - properties: - coordinates: - description: |- - List of coordinates along the temporal dimension for which data organized as an irregular grid in the collection is available - (e.g., 2, 10, 80, 100). - type: array - minItems: 1 - items: - oneOf: - - type: string - nullable: true - - type: number - example: [2, 10, 80, 100] - cellsCount: - description: |- - Number of samples available along the dimension for data organized as a regular grid. - For values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_. - For values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1. - type: integer - example: 50 - resolution: - description: |- - Resolution of regularly gridded data along the dimension in the collection - oneOf: - - type: string - nullable: true - - type: number - example: - - "PT1H" - - 0.0006866455078 diff --git a/openapi/schemas/common-geodata/extent.yaml b/openapi/schemas/common-geodata/extent.yaml index ba59cbaf..3bf7077f 100644 --- a/openapi/schemas/common-geodata/extent.yaml +++ b/openapi/schemas/common-geodata/extent.yaml @@ -1,201 +1,19 @@ +title: Extent with (optional) Uniform Additional Dimensions Schema description: |- - The extent of the data in the collection. In the Core only spatial and temporal - extents are specified. Extensions may add additional members to represent other - extents, for example, thermal or pressure ranges. - - The first item in the array describes the overall extent of - the data. All subsequent items describe more precise extents, - e.g., to identify clusters of data. - Clients only interested in the overall extent will only need to - access the first item in each array. -type: object -properties: - spatial: - description: The spatial extent of the data in the collection. - type: object - properties: - bbox: - description: |- - One or more bounding boxes that describe the spatial extent of the dataset. - In the Core only a single bounding box is supported. - - Extensions may support additional areas. - The first bounding box describes the overall spatial - extent of the data. All subsequent bounding boxes describe - more precise bounding boxes, e.g., to identify clusters of data. - Clients only interested in the overall spatial extent will - only need to access the first item in each array. - type: array - minItems: 1 - items: - description: |- - Each bounding box is provided as four or six numbers, depending on - whether the coordinate reference system includes a vertical axis - (height or depth): - - * Lower left corner, coordinate axis 1 - * Lower left corner, coordinate axis 2 - * Minimum value, coordinate axis 3 (optional) - * Upper right corner, coordinate axis 1 - * Upper right corner, coordinate axis 2 - * Maximum value, coordinate axis 3 (optional) - - If the value consists of four numbers, the coordinate reference system is - WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) - unless a different coordinate reference system is specified in a parameter `bbox-crs`. - - If the value consists of six numbers, the coordinate reference system is WGS 84 - longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h) - unless a different coordinate reference system is specified in a parameter `bbox-crs`. - - For WGS 84 longitude/latitude the values are in most cases the sequence of - minimum longitude, minimum latitude, maximum longitude and maximum latitude. - However, in cases where the box spans the antimeridian the first value - (west-most box edge) is larger than the third value (east-most box edge). - - If the vertical axis is included, the third and the sixth number are - the bottom and the top of the 3-dimensional bounding box. - - If a feature has multiple spatial geometry properties, it is the decision of the - server whether only a single spatial geometry property is used to determine - the extent or all relevant geometries. - type: array - oneOf: - - minItems: 4 - maxItems: 4 - - minItems: 6 - maxItems: 6 - items: - type: number - example: - - -180 - - -90 - - 180 - - 90 - crs: - description: |- - Coordinate reference system of the coordinates in the spatial extent - (property `bbox`). The default reference system is WGS 84 longitude/latitude. - In the Core the only other supported coordinate reference system is - WGS 84 longitude/latitude/ellipsoidal height for coordinates with height. - Extensions may support additional coordinate reference systems and add - additional enum values. - type: string - enum: - - 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' - - 'http://www.opengis.net/def/crs/OGC/0/CRS84h' - default: 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' - grid: - description: |- - Provides information about the limited availability of data within the collection organized - as a grid (regular or irregular) along each spatial dimension. - type: array - minItems: 2 - maxItems: 3 - items: - type: object - properties: - coordinates: - description: |- - List of coordinates along the dimension for which data organized as an irregular grid in the collection is available - (e.g., 2, 10, 80, 100). - type: array - minItems: 1 - items: - oneOf: - - type: string - nullable: true - - type: number - example: [2, 10, 80, 100] - cellsCount: - description: |- - Number of samples available along the dimension for data organized as a regular grid. - For values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_. - For values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1. - type: integer - example: 50 - resolution: - description: |- - Resolution of regularly gridded data along the dimension in the collection - oneOf: - - type: string - nullable: true - - type: number - example: 0.0006866455078 - temporal: - description: |- - The temporal extent of the features in the collection. - type: object - properties: - interval: - description: |- - One or more time intervals that describe the temporal extent of the dataset. - In the Core only a single time interval is supported. - - Extensions may support multiple intervals. - The first time interval describes the overall - temporal extent of the data. All subsequent time intervals describe - more precise time intervals, e.g., to identify clusters of data. - Clients only interested in the overall extent will only need - to access the first item in each array. - type: array - minItems: 1 - items: - description: |- - Begin and end times of the time interval. The timestamps are in the - temporal coordinate reference system specified in `trs`. By default - this is the Gregorian calendar. - - The value `null` for start or end time is supported and indicates a half-bounded time interval. - type: array - minItems: 2 - maxItems: 2 - items: - type: string - format: date-time - nullable: true - example: - - '2011-11-11T12:22:11Z' - - null - trs: - description: |- - Coordinate reference system of the coordinates in the temporal extent - (property `interval`). The default reference system is the Gregorian calendar. - In the Core this is the only supported temporal coordinate reference system. - Extensions may support additional temporal coordinate reference systems and add - additional enum values. - type: string - enum: - - 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' - default: 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' - grid: - type: object - description: |- - Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the temporal dimension. - properties: - coordinates: - description: |- - List of coordinates along the temporal dimension for which data organized as an irregular grid in the collection is available - (e.g., "2017-11-14T09:00Z","2017-11-14T12:00Z","2017-11-14T15:00Z","2017-11-14T18:00Z","2017-11-14T21:00Z"). - type: array - minItems: 1 - items: - type: string - nullable: true - example: - - ["2020-11-12T12:15Z","2020-11-12T12:30Z","2020-11-12T12:45Z"] - cellsCount: - description: |- - Number of samples available along the temporal dimension for data organized as a regular grid. - For values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_. - For values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1. - type: integer - example: 50 - resolution: - description: |- - Resolution of regularly gridded data along the temporal dimension in the collection - oneOf: - - type: string - nullable: true - - type: number - example: "PT1H" + The extent of the data in the collection. + This extent schema includes optional additional dimensions, but will still validate for objects not conforming to UAD. + OGC API - Common - Part 2 "Collections" requirements class specifies only the definition of the spatial and temporal extents. + The "Uniform Additional Dimensions" requirements class specifies a generic schema for describing any additional dimension, such as thermal or pressure ranges. +allOf: + - type: object + properties: + spatial: + $ref: 'spatialExtent.yaml' + temporal: + $ref: 'temporalExtent.yaml' + - anyOf: + - type: object + description: General object extension point + - type: object + additionalProperties: + $ref: 'additionalDimensionExtent.yaml' diff --git a/openapi/schemas/common-geodata/grid.yaml b/openapi/schemas/common-geodata/grid.yaml new file mode 100644 index 00000000..6aa02973 --- /dev/null +++ b/openapi/schemas/common-geodata/grid.yaml @@ -0,0 +1,16 @@ +type: object +title: Grid. +description: |- + Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the dimension. +allOf: + - type: object + required: [ cellsCount ] + properties: + cellsCount: + title: Cell count + description: Number of samples available along the dimension for data organized as a regular or irregular grid. + type: integer + example: 50 + - oneOf: + - $ref: 'regularGrid.yaml' + - $ref: 'irregularGrid.yaml' diff --git a/openapi/schemas/common-geodata/irregularGrid.yaml b/openapi/schemas/common-geodata/irregularGrid.yaml new file mode 100644 index 00000000..ea0f5bb5 --- /dev/null +++ b/openapi/schemas/common-geodata/irregularGrid.yaml @@ -0,0 +1,36 @@ +type: object +title: Irregular grid. +description: Irregular grid with samples spaced at different intervals. +required: [ coordinates ] +properties: + coordinates: + title: Coordinates of the irregular cells + description: |- + List of coordinates along the dimension for which data organized as an irregular grid in the collection is available. + (e.g., 2, 10, 80, 100). + type: array + minItems: 1 + items: + oneOf: + - type: string + nullable: true + example: "2020-11-12T12:15:00Z" + - type: number + example: 12.3 + example: [2, 10, 80, 100] + boundsCoordinates: + title: Bounds coordinates + description: |- + For irregular grids, an ordered list of the coordinates in absolute units of the lower and upper bounds of the dimension for each cell. + type: array + minItems: 1 + items: + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - type: string + nullable: true + - type: number + example: [ [ -180, -179 ], [ -179, -178 ] ] diff --git a/openapi/schemas/common-geodata/numberMatched.yaml b/openapi/schemas/common-geodata/numberMatched.yaml index 54e16aa2..5c5e67a3 100644 --- a/openapi/schemas/common-geodata/numberMatched.yaml +++ b/openapi/schemas/common-geodata/numberMatched.yaml @@ -1,6 +1,5 @@ -description: |- - The number of features of the feature type that match the selection - parameters like `bbox`. +title: The number of elements in the response +description: The number of elements in the response that match the selection parameters like `bbox`. type: integer minimum: 0 -example: 127 \ No newline at end of file +example: 127 diff --git a/openapi/schemas/common-geodata/numberReturned.yaml b/openapi/schemas/common-geodata/numberReturned.yaml index 7efb4093..25150786 100644 --- a/openapi/schemas/common-geodata/numberReturned.yaml +++ b/openapi/schemas/common-geodata/numberReturned.yaml @@ -1,9 +1,6 @@ -description: |- - The number of features in the feature collection. - A server may omit this information in a response, if the information - about the number of features is not known or difficult to compute. - If the value is provided, the value shall be identical to the number - of items in the "features" array. +title: The number of elements in the response +description: A server may omit this information, if the information about the number of elements is not known or difficult to compute. + If the value is provided, the value shall be identical to the number of elements in the response. type: integer minimum: 0 -example: 10 \ No newline at end of file +example: 10 diff --git a/openapi/schemas/common-geodata/regularGrid.yaml b/openapi/schemas/common-geodata/regularGrid.yaml new file mode 100644 index 00000000..15be41f2 --- /dev/null +++ b/openapi/schemas/common-geodata/regularGrid.yaml @@ -0,0 +1,45 @@ +type: object +title: Regular grid +description: Regular grid with samples spaced at equal intervals. +required: [ resolution, firstCoordinate ] +properties: + resolution: + title: Resolution + description: Resolution of regularly gridded data along the dimension in the collection. + oneOf: + - type: string + nullable: true + example: "PT1H" + - type: number + example: 0.0006866455078 + availableResolutions: + title: Available resolutions + description: List of resolutions made available by the API. If not specified, there are no limit other than the limits indicated in `minCellSize` and `maxCellSize` of the collection description (though the API might still allow requesting data beyond these). + type: array + items: + oneOf: + - type: string + nullable: true + - type: number + example: [ "P1H", "P1D", "P1M" ] + firstCoordinate: + title: First coordinate + description: First coordinate where a regular grid begins, with subsequent coordinates adding `resolution` unit at each step. + oneOf: + - type: string + nullable: true + - type: number + example: -180 + relativeBounds: + title: Relative bounds + description: |- + Distance in units from coordinate to the lower and upper bounds of each cell for regular grids, describing the geometry of the cells. + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - type: string + nullable: true + - type: number + example: [ -0.5, 0.5 ] diff --git a/openapi/schemas/common-geodata/spatialExtent.yaml b/openapi/schemas/common-geodata/spatialExtent.yaml new file mode 100644 index 00000000..0e3c1b31 --- /dev/null +++ b/openapi/schemas/common-geodata/spatialExtent.yaml @@ -0,0 +1,124 @@ +title: Spatial extent +description: The spatial extent of the data in the collection. +type: object +properties: + bbox: + title: Bounding box in the 'crs' coordinates + description: |- + One or more bounding boxes that describe the spatial extent of the dataset. + + The first bounding box describes the overall spatial + extent of the data. All subsequent bounding boxes describe + more precise bounding boxes, e.g., to identify clusters of data. + Clients only interested in the overall spatial extent will + only need to access the first item in each array. + type: array + minItems: 1 + items: + description: |- + Each bounding box is provided as four or six numbers, depending on + whether the coordinate reference system includes a vertical axis + (height or depth): + + * Lower left corner, coordinate axis 1 + * Lower left corner, coordinate axis 2 + * Minimum value, coordinate axis 3 (optional) + * Upper right corner, coordinate axis 1 + * Upper right corner, coordinate axis 2 + * Maximum value, coordinate axis 3 (optional) + + If the value consists of four numbers, the coordinate reference system is + WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) + unless a different coordinate reference system is specified in `crs` property. + + If the value consists of six numbers, the coordinate reference system is WGS 84 + longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h) + unless a different coordinate reference system is specified in `crs` property. + + For WGS 84 longitude/latitude the values are in most cases the sequence of + minimum longitude, minimum latitude, maximum longitude and maximum latitude. + However, in cases where the box spans the antimeridian the first value + (west-most box edge) is larger than the third value (east-most box edge). + + If the vertical axis is included, the third and the sixth number are + the bottom and the top of the 3-dimensional bounding box. + + If a feature has multiple spatial geometry properties, it is the decision of the + server whether only a single spatial geometry property is used to determine + the extent or all relevant geometries. + type: array + oneOf: + - minItems: 4 + maxItems: 4 + - minItems: 6 + maxItems: 6 + items: + type: number + example: + - -180 + - -90 + - 180 + - 90 + storageCrsBbox: + title: Bounding box in the storage CRS + description: |- + One or more bounding boxes that describe the spatial extent of the dataset in the storage (native) CRS (`storageCrs` property). + + The first bounding box describes the overall spatial + extent of the data. All subsequent bounding boxes describe + more precise bounding boxes, e.g., to identify clusters of data. + Clients only interested in the overall spatial extent will + only need to access the first item in each array. + type: array + minItems: 1 + items: + description: |- + Each bounding box is provided as four or six numbers, depending on + whether the coordinate reference system includes a vertical axis + (height or depth): + + * Lower left corner, coordinate axis 1 + * Lower left corner, coordinate axis 2 + * Minimum value, coordinate axis 3 (optional) + * Upper right corner, coordinate axis 1 + * Upper right corner, coordinate axis 2 + * Maximum value, coordinate axis 3 (optional) + type: array + oneOf: + - minItems: 4 + maxItems: 4 + - minItems: 6 + maxItems: 6 + items: + type: number + example: + - -180 + - -90 + - 180 + - 90 + crs: + title: Coordinate reference system + description: |- + Coordinate reference system of the coordinates of the `bbox` property. + The default reference system is WGS 84 longitude/latitude. + WGS 84 longitude/latitude/ellipsoidal height for coordinates with height. + For data not referenced to Earth, another CRS may be specified. + This should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + anyOf: + - type: string + - type: string + enum: + - 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' + - 'http://www.opengis.net/def/crs/OGC/0/CRS84h' + - type: object + default: 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' + grid: + title: Grid description + description: |- + Provides information about the limited availability of data within the collection organized + as a grid (regular or irregular) along each spatial dimension. + type: array + minItems: 2 + maxItems: 3 + items: + $ref: 'grid.yaml' diff --git a/openapi/schemas/common-geodata/temporalExtent.yaml b/openapi/schemas/common-geodata/temporalExtent.yaml new file mode 100644 index 00000000..28545873 --- /dev/null +++ b/openapi/schemas/common-geodata/temporalExtent.yaml @@ -0,0 +1,48 @@ +title: Temporal extent +description: The temporal extent of the data in the collection. +type: object +properties: + interval: + title: Temporal intervals + description: |- + One or more time intervals that describe the temporal extent of the dataset. + + The first time interval describes the overall + temporal extent of the data. All subsequent time intervals describe + more precise time intervals, e.g., to identify clusters of data. + Clients only interested in the overall extent will only need + to access the first item in each array. + type: array + minItems: 1 + items: + description: |- + Begin and end times of the time interval. The timestamps are in the + temporal coordinate reference system specified in `trs`. By default + this is the Gregorian calendar, expressed using RFC 3339 section 5.6. + Note that these times may be specified using time zone offsets to UTC time other than zero. + + The value `null` for start or end time is supported and indicates a half-bounded time interval. + type: array + minItems: 2 + maxItems: 2 + items: + type: string + format: date-time + nullable: true + example: '2011-11-11T12:22:11Z' #, '2011-11-11T08:22:11-04:00', null + trs: + title: Temporal Coordinate Reference System + description: |- + Coordinate reference system of the coordinates in the temporal extent + (property `interval`). The default reference system is the Gregorian calendar. + For data for which the Gregorian calendar is not suitable, such as geological time scale, another temporal reference system may be used. + This should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + anyOf: + - type: string + - type: string + enum: + - 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' + - type: object + default: 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' + grid: + $ref: 'grid.yaml' diff --git a/openapi/schemas/common-geodata/timeStamp.yaml b/openapi/schemas/common-geodata/timeStamp.yaml index 796bb131..5eeea935 100644 --- a/openapi/schemas/common-geodata/timeStamp.yaml +++ b/openapi/schemas/common-geodata/timeStamp.yaml @@ -1,3 +1,4 @@ +title: Time stamp description: This property indicates the time and date when the response was generated using RFC 3339 notation. type: string format: date-time diff --git a/openapi/schemas/cql2/cql2-definitions.yaml b/openapi/schemas/cql2/cql2-definitions.yaml new file mode 100644 index 00000000..1bbeff6d --- /dev/null +++ b/openapi/schemas/cql2/cql2-definitions.yaml @@ -0,0 +1,705 @@ +definitions: + cql2expression: + andOrExpression: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - and + - or + args: + type: array + minItems: 2 + items: + $ref: cql2.yaml + notExpression: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - not + args: + type: array + minItems: 1 + maxItems: 1 + items: + $ref: cql2.yaml + comparisonPredicate: + oneOf: + - $ref: '#/definitions/binaryComparisonPredicate' + - $ref: '#/definitions/isLikePredicate' + - $ref: '#/definitions/isBetweenPredicate' + - $ref: '#/definitions/isInListPredicate' + - $ref: '#/definitions/isNullPredicate' + binaryComparisonPredicate: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - = + - <> + - < + - '>' + - <= + - '>=' + args: + $ref: '#/definitions/scalarOperands' + scalarOperands: + type: array + minItems: 2 + maxItems: 2 + items: + $ref: '#/definitions/scalarExpression' + scalarExpression: + oneOf: + - $ref: '#/definitions/characterExpression' + - $ref: '#/definitions/numericExpression' + - type: boolean + - $ref: '#/definitions/instantInstance' + - $ref: '#/definitions/functionRef' + - $ref: '#/definitions/propertyRef' + isLikePredicate: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - like + args: + $ref: '#/definitions/isLikeOperands' + isLikeOperands: + type: array + minItems: 2 + maxItems: 2 + #prefixItems: + # - oneOf: + # - $ref: '#/definitions/characterExpression' + # - $ref: '#/definitions/propertyRef' + # - $ref: '#/definitions/functionRef' + # - $ref: '#/definitions/patternExpression' + items: + oneOf: + - $ref: '#/definitions/characterExpression' + - $ref: '#/definitions/propertyRef' + - $ref: '#/definitions/functionRef' + - $ref: '#/definitions/patternExpression' + patternExpression: + oneOf: + - type: object + required: + - op + - args + properties: + op: + type: string + enum: + - casei + args: + type: array + items: + $ref: '#/definitions/patternExpression' + minItems: 1 + maxItems: 1 + - type: object + required: + - op + - args + properties: + op: + type: string + enum: + - accenti + args: + type: array + items: + $ref: '#/definitions/patternExpression' + minItems: 1 + maxItems: 1 + - type: string + isBetweenPredicate: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - between + args: + $ref: '#/definitions/isBetweenOperands' + isBetweenOperands: + type: array + minItems: 3 + maxItems: 3 + items: + oneOf: + - $ref: '#/definitions/numericExpression' + - $ref: '#/definitions/propertyRef' + - $ref: '#/definitions/functionRef' + numericExpression: + oneOf: + - $ref: '#/definitions/arithmeticExpression' + - type: number + isInListPredicate: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - in + args: + $ref: '#/definitions/inListOperands' + inListOperands: + type: array + minItems: 2 + maxItems: 2 + #prefixItems: + # - $ref: '#/definitions/scalarExpression' + # - type: array + # items: + # $ref: '#/definitions/scalarExpression' + items: + oneOf: + - $ref: '#/definitions/scalarExpression' + - type: array + items: + $ref: '#/definitions/scalarExpression' + isNullPredicate: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - isNull + args: + $ref: '#/definitions/isNullOperand' + isNullOperand: + type: array + minItems: 1 + maxItems: 1 + items: + oneOf: + - $ref: '#/definitions/characterExpression' + - $ref: '#/definitions/numericExpression' + - $ref: cql2.yaml + - $ref: '#/definitions/spatialInstance' + - $ref: '#/definitions/temporalInstance' + - $ref: '#/definitions/propertyRef' + spatialPredicate: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - s_contains + - s_crosses + - s_disjoint + - s_equals + - s_intersects + - s_overlaps + - s_touches + - s_within + args: + $ref: '#/definitions/spatialOperands' + spatialOperands: + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - $ref: '#/definitions/spatialInstance' + - $ref: '#/definitions/propertyRef' + - $ref: '#/definitions/functionRef' + temporalPredicate: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - t_after + - t_before + - t_contains + - t_disjoint + - t_during + - t_equals + - t_finishedBy + - t_finishes + - t_intersects + - t_meets + - t_metBy + - t_overlappedBy + - t_overlaps + - t_startedBy + - t_starts + args: + $ref: '#/definitions/temporalOperands' + temporalOperands: + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - $ref: '#/definitions/temporalInstance' + - $ref: '#/definitions/propertyRef' + - $ref: '#/definitions/functionRef' + arrayPredicate: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - a_containedBy + - a_contains + - a_equals + - a_overlaps + args: + $ref: '#/definitions/arrayOperands' + arrayOperands: + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - $ref: '#/definitions/arrayExpression' + - $ref: '#/definitions/propertyRef' + - $ref: '#/definitions/functionRef' + arrayExpression: + type: array + items: + oneOf: + - $ref: '#/definitions/characterExpression' + - $ref: '#/definitions/numericExpression' + - $ref: cql2.yaml + - $ref: '#/definitions/spatialInstance' + - $ref: '#/definitions/temporalInstance' + - $ref: '#/definitions/arrayExpression' + - $ref: '#/definitions/propertyRef' + arithmeticExpression: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - + + - '-' + - '*' + - / + - ^ + - '%' + - div + args: + $ref: '#/definitions/arithmeticOperands' + arithmeticOperands: + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - $ref: '#/definitions/arithmeticExpression' + - $ref: '#/definitions/propertyRef' + - $ref: '#/definitions/functionRef' + - type: number + propertyRef: + type: object + required: + - property + properties: + property: + type: string + casei: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - casei + args: + type: array + items: + oneOf: + - $ref: '#/definitions/characterExpression' + - $ref: '#/definitions/propertyRef' + - $ref: '#/definitions/functionRef' + minItems: 1 + maxItems: 1 + accenti: + type: object + required: + - op + - args + properties: + op: + type: string + enum: + - accenti + args: + type: array + items: + oneOf: + - $ref: '#/definitions/characterExpression' + - $ref: '#/definitions/propertyRef' + - $ref: '#/definitions/functionRef' + minItems: 1 + maxItems: 1 + characterExpression: + oneOf: + - $ref: '#/definitions/casei' + - $ref: '#/definitions/accenti' + - type: string + functionRef: + type: object + required: + - op + - args + properties: + op: + type: string + not: + enum: + - and + - or + - not + - = + - <> + - < + - '>' + - <= + - '>=' + - like + - between + - in + - isNull + - casei + - accenti + - s_contains + - s_crosses + - s_disjoint + - s_equals + - s_intersects + - s_overlaps + - s_touches + - s_within + - t_after + - t_before + - t_contains + - t_disjoint + - t_during + - t_equals + - t_finishedBy + - t_finishes + - t_intersects + - t_meets + - t_metBy + - t_overlappedBy + - t_overlaps + - t_startedBy + - t_starts + - a_containedBy + - a_contains + - a_equals + - a_overlaps + - + + - '-' + - '*' + - / + - ^ + - '%' + - div + args: + type: array + items: + oneOf: + - $ref: '#/definitions/characterExpression' + - $ref: '#/definitions/numericExpression' + - $ref: cql2.yaml + - $ref: '#/definitions/spatialInstance' + - $ref: '#/definitions/temporalInstance' + - $ref: '#/definitions/arrayExpression' + - $ref: '#/definitions/propertyRef' + spatialInstance: + oneOf: + - $ref: '#/definitions/geometryLiteral' + - $ref: '#/definitions/bboxLiteral' + geometryLiteral: + oneOf: + - $ref: '#/definitions/point' + - $ref: '#/definitions/linestring' + - $ref: '#/definitions/polygon' + - $ref: '#/definitions/multipoint' + - $ref: '#/definitions/multilinestring' + - $ref: '#/definitions/multipolygon' + - $ref: '#/definitions/geometrycollection' + point: + title: GeoJSON Point + type: object + required: + - type + - coordinates + properties: + type: + type: string + enum: + - Point + coordinates: + type: array + minItems: 2 + items: + type: number + bbox: + type: array + minItems: 4 + items: + type: number + linestring: + title: GeoJSON LineString + type: object + required: + - type + - coordinates + properties: + type: + type: string + enum: + - LineString + coordinates: + type: array + minItems: 2 + items: + type: array + minItems: 2 + items: + type: number + bbox: + type: array + minItems: 4 + items: + type: number + polygon: + title: GeoJSON Polygon + type: object + required: + - type + - coordinates + properties: + type: + type: string + enum: + - Polygon + coordinates: + type: array + items: + type: array + minItems: 4 + items: + type: array + minItems: 2 + items: + type: number + bbox: + type: array + minItems: 4 + items: + type: number + multipoint: + title: GeoJSON MultiPoint + type: object + required: + - type + - coordinates + properties: + type: + type: string + enum: + - MultiPoint + coordinates: + type: array + items: + type: array + minItems: 2 + items: + type: number + bbox: + type: array + minItems: 4 + items: + type: number + multilinestring: + title: GeoJSON MultiLineString + type: object + required: + - type + - coordinates + properties: + type: + type: string + enum: + - MultiLineString + coordinates: + type: array + items: + type: array + minItems: 2 + items: + type: array + minItems: 2 + items: + type: number + bbox: + type: array + minItems: 4 + items: + type: number + multipolygon: + title: GeoJSON MultiPolygon + type: object + required: + - type + - coordinates + properties: + type: + type: string + enum: + - MultiPolygon + coordinates: + type: array + items: + type: array + items: + type: array + minItems: 4 + items: + type: array + minItems: 2 + items: + type: number + bbox: + type: array + minItems: 4 + items: + type: number + geometrycollection: + title: GeoJSON GeometryCollection + type: object + required: + - type + - geometries + properties: + type: + type: string + enum: + - GeometryCollection + geometries: + type: array + minItems: 2 + items: + oneOf: + - $ref: '#/definitions/point' + - $ref: '#/definitions/linestring' + - $ref: '#/definitions/polygon' + - $ref: '#/definitions/multipoint' + - $ref: '#/definitions/multilinestring' + - $ref: '#/definitions/multipolygon' + bboxLiteral: + type: object + required: + - bbox + properties: + bbox: + $ref: '#/definitions/bbox' + bbox: + type: array + oneOf: + - minItems: 4 + maxItems: 4 + - minItems: 6 + maxItems: 6 + items: + type: number + temporalInstance: + oneOf: + - $ref: '#/definitions/instantInstance' + - $ref: '#/definitions/intervalInstance' + instantInstance: + oneOf: + - $ref: '#/definitions/dateInstant' + - $ref: '#/definitions/timestampInstant' + dateInstant: + type: object + required: + - date + properties: + date: + $ref: '#/definitions/dateString' + timestampInstant: + type: object + required: + - timestamp + properties: + timestamp: + $ref: '#/definitions/timestampString' + instantString: + oneOf: + - $ref: '#/definitions/dateString' + - $ref: '#/definitions/timestampString' + dateString: + type: string + pattern: '^\d{4}-\d{2}-\d{2}$' + timestampString: + type: string + pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$' + intervalInstance: + type: object + required: + - interval + properties: + interval: + $ref: '#/definitions/intervalArray' + intervalArray: + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - $ref: '#/definitions/instantString' + - type: string + enum: + - .. + - $ref: '#/definitions/propertyRef' + - $ref: '#/definitions/functionRef' diff --git a/openapi/schemas/cql2/cql2.yaml b/openapi/schemas/cql2/cql2.yaml new file mode 100644 index 00000000..3e09555b --- /dev/null +++ b/openapi/schemas/cql2/cql2.yaml @@ -0,0 +1,11 @@ +#$schema: 'https://json-schema.org/draft/2020-12/schema' +#$dynamicAnchor: cql2expression +oneOf: + - $ref: './cql2-definitions.yaml#/definitions/andOrExpression' + - $ref: './cql2-definitions.yaml#/definitions/notExpression' + - $ref: './cql2-definitions.yaml#/definitions/comparisonPredicate' + - $ref: './cql2-definitions.yaml#/definitions/spatialPredicate' + - $ref: './cql2-definitions.yaml#/definitions/temporalPredicate' + - $ref: './cql2-definitions.yaml#/definitions/arrayPredicate' + - $ref: './cql2-definitions.yaml#/definitions/functionRef' + - type: boolean diff --git a/openapi/schemas/common-geodata/crs.yaml b/openapi/schemas/crs/crs.yaml similarity index 100% rename from openapi/schemas/common-geodata/crs.yaml rename to openapi/schemas/crs/crs.yaml diff --git a/openapi/schemas/common-geodata/projJSON.yaml b/openapi/schemas/crs/projJSON.yaml similarity index 100% rename from openapi/schemas/common-geodata/projJSON.yaml rename to openapi/schemas/crs/projJSON.yaml diff --git a/openapi/schemas/cwl/cwl-json-schema.yaml b/openapi/schemas/cwl/cwl-json-schema.yaml new file mode 100644 index 00000000..502756a2 --- /dev/null +++ b/openapi/schemas/cwl/cwl-json-schema.yaml @@ -0,0 +1,2124 @@ +#$schema: "http://json-schema.org/draft-07/schema#" +#$author: "Francis Charette-Migneault " +#$id: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + +$defs: + CWL: + oneOf: + - $ref: '#/$defs/CWLAtomic' + - $ref: '#/$defs/CWLGraph' + - $ref: '#/$defs/CWLWorkflow' + CWLKeywordList: + title: KeywordList + type: array + description: Keywords applied to the process for search and categorization purposes. + items: + type: string + title: keyword + minLength: 1 + CWLTextPatternID: + description: | + Identifier with text pattern that can allow additional non-ASCII characters depending on regex implementation. + The identifier allows a '#' or a relative 'sub/part#ref' prefix, to support references to other definitions + in the CWL document, such as when using 'SchemaDefRequirement'. + + JSON spec regex does not include '\w' in its default subset to allow all word-like unicode characters + (see reference: https://json-schema.org/understanding-json-schema/reference/regular_expressions.html). + + Since support is implementation specific, add both the ASCII-only and '\w' representation simultaneously + and let the parser reading this document apply whichever is more relevant or supported + (see discussion: https://github.com/common-workflow-language/cwl-v1.2/pull/256#discussion_r1234037814). + # TODO: implement specific characters supported by CWL + # (https://github.com/common-workflow-language/common-workflow-language/issues/429) + pattern: '^([A-Za-z0-9\w]+(/[A-Za-z0-9\w]+)*)?[#.]?[A-Za-z0-9\w]+(?:[-_.][A-Za-z0-9\w]+)*$' + type: string + title: Generic identifier name pattern. + CWLIdentifier: + anyOf: + - type: string + title: UUID + description: Unique identifier. + format: uuid + pattern: '^[a-f0-9]{8}(?:-?[a-f0-9]{4}){3}-?[a-f0-9]{12}$' + - $ref: '#/$defs/CWLTextPatternID' + title: CWLIdentifier + description: Reference to the process identifier. + CWLIntent: + type: array + title: CWLIntent + items: + type: string + title: item + description: | + Identifier URL to a concept for the type of computational operation accomplished by this process + (see example operations: http://edamontology.org/operation_0004). + format: url + pattern: '^((?:http|ftp)s?://)?(?!.*//.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+(?:[A-Za-z]{2,6}\.?|[A-Za-z0-9-]{2,}\.?)|localhost|\[[a-f0-9:]+\]|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::\d+)?(?:/?|[/?]\S+)$' + CWLImport: + title: CWLImport + description: | + The schema validation of the CWL will not itself perform the '$import' to resolve and validate its contents. + Therefore, the complete schema will not be validated entirely, and could still be partially malformed. + To ensure proper and exhaustive validation of a CWL definition with this schema, all '$import' directives + should be resolved and extended beforehand. + Represents an '$import' directive that should point toward another compatible CWL file to import where specified. + The contents of the imported file should be relevant contextually where it is being imported. + type: object + properties: + '$import': + type: string + required: + - '$import' + additionalProperties: false + CWLRequirements: + title: CWLRequirements + description: Explicit requirement to execute the application package. + oneOf: + - $ref: '#/$defs/CWLRequirementsMap' + - $ref: '#/$defs/CWLRequirementsList' + CWLRequirementsMap: + title: CWLRequirementsMap + type: object + properties: + 'cwltool:CUDARequirement': + $ref: '#/$defs/cwltool_CUDARequirement' + DockerRequirement: + $ref: '#/$defs/DockerRequirement' + SoftwareRequirement: + $ref: '#/$defs/SoftwareRequirement' + ShellCommandRequirement: + $ref: '#/$defs/ShellCommandRequirement' + EnvVarRequirement: + $ref: '#/$defs/EnvVarRequirement' + SchemaDefRequirement: + $ref: '#/$defs/SchemaDefRequirement' + InitialWorkDirRequirement: + $ref: '#/$defs/InitialWorkDirRequirement' + InlineJavascriptRequirement: + $ref: '#/$defs/InlineJavascriptRequirement' + InplaceUpdateRequirement: + $ref: '#/$defs/InplaceUpdateRequirement' + LoadListingRequirement: + $ref: '#/$defs/LoadListingRequirement' + NetworkAccess: + allOf: + - description: "Not 'NetworkAccessRequirement'" + - $ref: '#/$defs/NetworkAccessRequirement' + ResourceRequirement: + $ref: '#/$defs/ResourceRequirement' + ScatterFeatureRequirement: + $ref: '#/$defs/ScatterFeatureRequirement' + ToolTimeLimit: + allOf: + - description: "Not 'ToolTimeLimitRequirement'" + - $ref: '#/$defs/ToolTimeLimitRequirement' + WorkReuse: + allOf: + - description: "Not 'WorkReuseRequirement'" + - $ref: '#/$defs/WorkReuseRequirement' + MultipleInputFeatureRequirement: + $ref: '#/$defs/MultipleInputFeatureRequirement' + StepInputExpressionRequirement: + $ref: '#/$defs/StepInputExpressionRequirement' + SubworkflowFeatureRequirement: + $ref: '#/$defs/SubworkflowFeatureRequirement' + additionalProperties: false + DockerRequirement: + type: object + title: DockerRequirement + properties: + class: + type: string + enum: + - DockerRequirement + dockerPull: + type: string + title: Docker pull reference + description: Reference package that will be retrieved and executed by CWL. + example: docker-registry.host.com/namespace/image:1.2.3 + dockerImport: + type: string + dockerLoad: + type: string + dockerFile: + type: string + dockerImageId: + type: string + dockerOutputDirectory: + type: string + oneOf: + - required: [dockerPull] + - required: [dockerImport] + - required: [dockerLoad] + - required: [dockerFile] + additionalProperties: false + InitialWorkDirListing: + title: InitialWorkDirListing + oneOf: + - $ref: '#/$defs/CWLExpression' + - type: array + title: InitialWorkDirListingItems + items: + oneOf: + - nullable: true + #type: string + enum: [null] + - $ref: '#/$defs/CWLExpression' + - $ref: '#/$defs/DirectoryListingDirent' + - $ref: '#/$defs/DirectoryListingFileOrDirectory' + - type: array + items: + $ref: '#/$defs/DirectoryListingFileOrDirectory' + DirectoryListingFileOrDirectory: + type: object + properties: + class: + type: string + enum: + - File + - Directory + location: + type: string + checksum: + $ref: '#/$defs/Checksum' + size: + type: integer + minimum: 0 + required: + - class + - location + additionalProperties: false + DirectoryListingDirent: + description: Called 'Dirent' in documentation. + type: object + title: DirectoryListingDirent + properties: + entry: + $ref: '#/$defs/CWLExpression' + entryname: + $ref: '#/$defs/CWLExpression' + writable: + type: boolean + required: + - entry + additionalProperties: false + InitialWorkDirRequirement: + type: object + title: InitialWorkDirRequirement + properties: + class: + type: string + enum: + - InitialWorkDirRequirement + listing: + $ref: '#/$defs/InitialWorkDirListing' + required: + - listing + additionalProperties: false + InlineJavascriptLibObject: + type: object + properties: + '$include': + type: string + required: + - '$include' + additionalProperties: false + InlineJavascriptLibItem: + oneOf: + - type: string + - $ref: '#/$defs/InlineJavascriptLibObject' + InlineJavascriptLibraries: + type: array + title: InlineJavascriptLibraries + description: | + Additional code fragments that will also be inserted before executing the expression code. + Allows for function definitions that may be called from CWL expressions. + items: + title: exp_lib + $ref: '#/$defs/InlineJavascriptLibItem' + InlineJavascriptRequirement: + type: object + title: InlineJavascriptRequirement + description: | + Indicates that the workflow platform must support inline Javascript expressions. + + If this requirement is not present, the workflow platform must not perform expression interpolation + (see also: https://www.commonwl.org/v1.2/CommandLineTool.html#InlineJavascriptRequirement). + properties: + class: + type: string + enum: + - InlineJavascriptRequirement + expressionLib: + $ref: '#/$defs/InlineJavascriptLibraries' + required: + - expressionLib + additionalProperties: false + InplaceUpdateRequirement: + type: object + title: InplaceUpdateRequirement + description: | + If 'inplaceUpdate' is true, then an implementation supporting this feature may permit tools to directly + update files with 'writable: true' in 'InitialWorkDirRequirement'. That is, as an optimization, + files may be destructively modified in place as opposed to copied and updated + (see also: https://www.commonwl.org/v1.2/CommandLineTool.html#InplaceUpdateRequirement). + properties: + class: + type: string + enum: + - InplaceUpdateRequirement + inplaceUpdate: + type: boolean + title: inplaceUpdate + required: + - inplaceUpdate + additionalProperties: false + LoadListingEnum: + type: string + title: LoadListingEnum + enum: + - no_listing + - shallow_listing + - deep_listing + LoadListingRequirement: + type: object + title: LoadListingRequirement + description: | + Specify the desired behavior for loading the listing field of a 'Directory' object for use by expressions + (see also: https://www.commonwl.org/v1.2/CommandLineTool.html#LoadListingRequirement). + properties: + class: + type: string + enum: + - LoadListingRequirement + loadListing: + $ref: '#/$defs/LoadListingEnum' + required: + - loadListing + additionalProperties: false + NetworkAccess: + title: NetworkAccess + description: Indicate whether a process requires outgoing IPv4/IPv6 network access. + example: true + oneOf: + - type: boolean + - $ref: '#/$defs/CWLExpression' + NetworkAccessRequirement: + type: object + title: NetworkAccessRequirement + properties: + class: + type: string + description: Not 'NetworkAccessRequirement' + enum: + - NetworkAccess + networkAccess: + $ref: '#/$defs/NetworkAccess' + required: + - networkAccess + additionalProperties: false + CWLExpression: + type: string + title: CWLExpression + description: | + When combined with 'InlineJavascriptRequirement', this field allows runtime parameter references + (see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression). + Whenever this option is applicable for a parameter, any other 'normal' string should not be specified. + For JSON schema validation, there is no easy way to distinguish them unless using complicated string patterns. + ResourceQuantityOrFractional: + title: An item quantity that can also represent a proportion of use by resources. + description: | + Technically should be minimum=1, but fractional for scheduling algorithms are allowed. + There is no way to distinguish between float/long simultaneously in JSON schema (multi-match oneOf). + Therefore, only validate that it is greater than zero. + type: number + exclusiveMinimum: true + minimum: 0 + default: 1 + ResourceCoresMinimum: + oneOf: + - $ref: '#/$defs/ResourceQuantityOrFractional' + - $ref: '#/$defs/CWLExpression' + title: ResourceCoresMinimum (Minimum reserved number of CPU cores). + description: | + Minimum reserved number of CPU cores. + + May be a fractional value to indicate to a scheduling algorithm that one core can be allocated to + multiple jobs. For example, a value of 0.25 indicates that up to 4 jobs + may run in parallel on 1 core. A value of 1.25 means that up to 3 jobs + can run on a 4 core system (4/1.25 ~ 3). + + Processes can only share a core allocation if the sum of each of their 'ramMax', 'tmpdirMax', and + 'outdirMax' requests also do not exceed the capacity of the node. + + Processes sharing a core must have the same level of isolation (typically a container + or VM) that they would normally have. + + The reported number of CPU cores reserved for the process, which is available to expressions + on the 'CommandLineTool' as 'runtime.cores', must be a non-zero integer, and may be calculated by + rounding up the cores request to the next whole number. + + Scheduling systems may allocate fractional CPU resources by setting quotas or scheduling weights. + Scheduling systems that do not support fractional CPUs may round up the request to the next whole number. + default: 1 + ResourceCoresMaximum: + oneOf: + - $ref: '#/$defs/ResourceQuantityOrFractional' + - $ref: '#/$defs/CWLExpression' + title: ResourceCoresMaximum (Maximum reserved number of CPU cores). + description: | + Maximum reserved number of CPU cores. + See 'coresMin' for discussion about fractional CPU requests. + ResourceRAMMinimum: + oneOf: + - $ref: '#/$defs/ResourceQuantityOrFractional' + - $ref: '#/$defs/CWLExpression' + title: ResourceRAMMinimum (Minimum reserved RAM in mebibytes). + description: | + Minimum reserved RAM in mebibytes (2**20). + + May be a fractional value. If so, the actual RAM request must be rounded up + to the next whole number. + + The reported amount of RAM reserved for the process, which is available to + expressions on the 'CommandLineTool' as 'runtime.ram', must be a non-zero integer. + default: 256 + ResourceRAMMaximum: + oneOf: + - $ref: '#/$defs/ResourceQuantityOrFractional' + - $ref: '#/$defs/CWLExpression' + title: ResourceRAMMaximum (Maximum reserved RAM in mebibytes). + description: | + Maximum reserved RAM in mebibytes (2**20). + See 'ramMin' for discussion about fractional RAM requests. + ResourceTmpDirMinimum: + oneOf: + - $ref: '#/$defs/ResourceQuantityOrFractional' + - $ref: '#/$defs/CWLExpression' + title: ResourceTmpDirMinimum (Minimum reserved filesystem based storage for the designated temporary) + directory in mebibytes. + description: | + Minimum reserved filesystem based storage for the designated temporary + directory in mebibytes (2**20). + + May be a fractional value. If so, the actual storage request must be rounded + up to the next whole number. + + The reported amount of storage reserved for the process, which is available + to expressions on the 'CommandLineTool' as 'runtime.tmpdirSize', must be a non-zero integer. + default: 1024 + ResourceTmpDirMaximum: + oneOf: + - $ref: '#/$defs/ResourceQuantityOrFractional' + - $ref: '#/$defs/CWLExpression' + title: ResourceTmpDirMaximum (Maximum reserved filesystem based storage for the designated temporary directory in mebibytes). + description: | + Maximum reserved filesystem based storage for the designated temporary directory in mebibytes (2**20). + See 'tmpdirMin' for discussion about fractional storage requests. + ResourceOutDirMinimum: + oneOf: + - $ref: '#/$defs/ResourceQuantityOrFractional' + - $ref: '#/$defs/CWLExpression' + title: ResourceOutDirMinimum (Minimum reserved filesystem based storage for the designated output directory in mebibytes). + description: | + Minimum reserved filesystem based storage for the designated output + directory in mebibytes (2**20). + + May be a fractional value. If so, the actual storage request must be rounded + up to the next whole number. + + The reported amount of storage reserved for the process, which is available + to expressions on the 'CommandLineTool' as 'runtime.outdirSize', must be a non-zero integer. + default: 1024 + ResourceOutDirMaximum: + oneOf: + - $ref: '#/$defs/ResourceQuantityOrFractional' + - $ref: '#/$defs/CWLExpression' + title: ResourceOutDirMaximum (Maximum reserved filesystem based storage for the designated output directory in mebibytes). + description: | + Maximum reserved filesystem based storage for the designated output + directory in mebibytes (2**20). + See 'outdirMin' for discussion about fractional storage requests. + default: 1 + ResourceRequirement: + type: object + title: ResourceRequirement + description: | + Specify basic hardware resource requirements + (see also: https://www.commonwl.org/v1.2/CommandLineTool.html#ResourceRequirement). + properties: + class: + type: string + enum: + - ResourceRequirement + coresMin: + $ref: '#/$defs/ResourceCoresMinimum' + coresMax: + $ref: '#/$defs/ResourceCoresMaximum' + ramMin: + $ref: '#/$defs/ResourceRAMMinimum' + ramMax: + $ref: '#/$defs/ResourceRAMMaximum' + tmpdirMin: + $ref: '#/$defs/ResourceTmpDirMinimum' + tmpdirMax: + $ref: '#/$defs/ResourceTmpDirMaximum' + outdirMin: + $ref: '#/$defs/ResourceOutDirMinimum' + outdirMax: + $ref: '#/$defs/ResourceOutDirMaximum' + additionalProperties: false + Scatter: + oneOf: + - $ref: '#/$defs/CWLTextPatternID' + - $ref: '#/$defs/IdentifierArray' + title: Scatter + description: | + The scatter field specifies one or more input parameters which will be scattered. + + An input parameter may be listed more than once. The declared type of each + input parameter implicitly becomes an array of items of the input parameter type. + If a parameter is listed more than once, it becomes a nested array. As a result, + upstream parameters which are connected to scattered parameters must be arrays. + + All output parameter types are also implicitly wrapped in arrays. Each job + in the scatter results in an entry in the output array. + + If any scattered parameter runtime value is an empty array, all outputs are + set to empty arrays and no work is done for the step, according to applicable scattering rules. + IdentifierArray: + type: array + title: IdentifierArray + items: + $ref: '#/$defs/CWLTextPatternID' + minItems: 1 + ScatterFeatureRequirement: + type: object + title: ScatterFeatureRequirement + description: | + A 'scatter' operation specifies that the associated Workflow step should execute separately over a list of + input elements. Each job making up a scatter operation is independent and may be executed concurrently + (see also: https://www.commonwl.org/v1.2/Workflow.html#WorkflowStep). + Fields 'scatter' and 'scatterMethod' at the root of a 'WorkflowStep', not within the requirement. + properties: + class: + type: string + description: CWL requirement class specification. + enum: + - ScatterFeatureRequirement + additionalProperties: false + MultipleInputFeatureRequirement: + type: object + title: MultipleInputFeatureRequirement + description: | + Indicates that the 'Workflow' must support multiple inbound data links listed in the 'source' + field of 'WorkflowStepInput'. + properties: + class: + type: string + description: CWL requirement class specification. + enum: + - MultipleInputFeatureRequirement + additionalProperties: false + StepInputExpressionRequirement: + type: object + title: StepInputExpressionRequirement + description: Indicates that the 'Workflow' must support the 'valueFrom' field of 'WorkflowStepInput'. + properties: + class: + type: string + description: CWL requirement class specification. + enum: + - StepInputExpressionRequirement + additionalProperties: false + SubworkflowFeatureRequirement: + type: object + title: SubworkflowFeatureRequirement + description: Indicates that the 'Workflow' must support nested workflows in the 'run' field of 'WorkflowStep'. + properties: + class: + type: string + description: CWL requirement class specification. + enum: + - SubworkflowFeatureRequirement + additionalProperties: false + CWLFileOnlyParameters: + type: object + properties: + secondaryFiles: + $ref: '#/$defs/CWLTypeRecordSecondaryFiles' + streamable: + type: boolean + format: + $ref: '#/$defs/CWLFormat' + loadContents: + type: boolean + CWLFileOnlyParametersConditional: + description: | + Explicitly disallow these parameters when non-File type is detected. + Otherwise, validate their schema definitions according to what is permitted. + Parameters that are only valid when 'type' or 'items' evaluates to 'File'. + type: object + #if: + # properties: + # oneOf: + # - description: Single required or optional 'File'. + # type: + # enum: + # - File + # - File? + # - File[] + # - File[]? + # - description: Array of required or optional 'File'. + # type: + # const: array + # items: + # oneOf: + # - type: + # - const: File + # - const: File? + # - type: array + # contains: + # type: + # - const: File + # - const: File? + #then: + # $ref: '#/$defs/CWLFileOnlyParameters' + #else: + # not: + # properties: + # secondaryFiles: {} + # streamable: {} + # format: {} + # loadContents: {} + anyOf: + - $ref: '#/$defs/CWLFileOnlyParameters' + - not: + properties: + secondaryFiles: {} + streamable: {} + format: {} + loadContents: {} + CWLDirectoryOnlyParameters: + type: object + properties: + loadListing: + $ref: '#/$defs/LoadListingEnum' + CWLDirectoryOnlyParametersConditional: + description: | + Explicitly disallow these parameters when non-Directory type is detected. + Otherwise, validate their schema definitions according to what is permitted. + Parameters that are only valid when 'type' or 'items' evaluates to 'Directory'. + type: object + #if: + # properties: + # oneOf: + # - description: Single required or optional 'Directory'. + # type: + # enum: + # - Directory + # - Directory? + # - Directory[] + # - Directory[]? + # - description: Array of required or optional 'Directory'. + # type: + # const: array + # items: + # oneOf: + # - type: + # - const: Directory + # - const: Directory? + # - type: array + # contains: + # type: + # - const: Directory + # - const: Directory? + #then: + # $ref: '#/$defs/CWLDirectoryOnlyParameters' + #else: + # not: + # properties: + # loadListing: {} + oneOf: + - $ref: '#/$defs/CWLDirectoryOnlyParameters' + - not: + properties: + loadListing: {} + CWLTypeRecordSecondaryFileSchema: + type: object + properties: + pattern: + description: Either an expression or the regex pattern directly. + $ref: '#/$defs/CWLExpression' + required: + oneOf: + - type: boolean + - $ref: '#/$defs/CWLExpression' + required: + - pattern + additionalProperties: false + CWLTypeRecordSecondaryFiles: + oneOf: + - description: Either an expression or the regex pattern directly. + $ref: '#/$defs/CWLExpression' + - $ref: '#/$defs/CWLTypeRecordSecondaryFileSchema' + - type: array + items: + description: Either an expression or the regex pattern directly. + $ref: '#/$defs/CWLExpression' + - type: array + items: + $ref: '#/$defs/CWLTypeRecordSecondaryFileSchema' + CWLTypeRecordFieldDefBase: + type: object + properties: + name: + description: | + Required if list item. Otherwise, optional since it is the mapping key. + This requirement is defined in 'CWLTypeRecordFieldsItem' to allow reuse of this schema. + type: string + type: + $ref: '#/$defs/CWLType' + required: + - type + CWLTypeRecordFieldDef: + allOf: + - $ref: '#/$defs/CWLTypeRecordFieldDefBase' + - $ref: '#/$defs/CWLFileOnlyParametersConditional' + - $ref: '#/$defs/CWLDirectoryOnlyParametersConditional' + CWLTypeRecordFieldsMap: + type: object + additionalProperties: + oneOf: + - $ref: '#/$defs/CWLType' + - $ref: '#/$defs/CWLTypeRecordFieldDef' + CWLTypeRecordFieldsItem: + allOf: + - $ref: '#/$defs/CWLTypeRecordFieldDef' + - required: + - name + CWLTypeRecordFieldsList: + type: array + items: + $ref: '#/$defs/CWLTypeRecordFieldsItem' + CWLTypeRecordFields: + oneOf: + - $ref: '#/$defs/CWLTypeRecordFieldsMap' + - $ref: '#/$defs/CWLTypeRecordFieldsList' + CWLTypeRecordSchema: + type: object + properties: + type: + type: string + enum: + - record + fields: + $ref: '#/$defs/CWLTypeRecordFields' + name: + type: string + required: + - type + CWLTypeRecordArray: + type: object + properties: + type: + type: string + enum: + - array + items: + $ref: '#/$defs/CWLType' + required: + - type + - items + SchemaDefRequirement: + type: object + properties: + class: + type: string + enum: + - SchemaDefRequirement + types: + type: array + items: + oneOf: + - $ref: '#/$defs/CWLTypeEnum' + - $ref: '#/$defs/CWLTypeRecordSchema' + - $ref: '#/$defs/CWLTypeRecordArray' + - $ref: '#/$defs/CWLImport' + required: + - types + additionalProperties: false + SoftwarePackageSpecs: + type: array + items: + type: string + SoftwarePackage: + type: object + properties: + package: + type: string + version: + type: array + items: + type: string + specs: + type: array + items: + $ref: '#/$defs/ReferenceURL' + required: + - package + additionalProperties: false + SoftwareRequirement: + type: object + properties: + class: + type: string + enum: + - SoftwareRequirement + packages: + oneOf: + - type: array + items: + $ref: '#/$defs/SoftwarePackage' + - type: object + description: Mapping of 'package' name to its specifications. + additionalProperties: + oneOf: + - $ref: '#/$defs/SoftwarePackageSpecs' + - $ref: '#/$defs/SoftwarePackage' + required: + - packages + additionalProperties: false + ShellCommandRequirement: + type: object + properties: + class: + type: string + enum: + - ShellCommandRequirement + additionalProperties: false + EnvironmentDef: + type: object + properties: + envName: + type: string + minLength: 1 + envValue: + $ref: '#/$defs/CWLExpression' + required: + - envName + - envValue + additionalProperties: false + EnvVarRequirement: + type: object + properties: + class: + type: string + enum: + - EnvVarRequirement + envDef: + oneOf: + - type: array + items: + $ref: '#/$defs/EnvironmentDef' + - type: object + description: Mapping of 'envName' to environment value or definition. + additionalProperties: + oneOf: + - description: The 'envValue' specified directly + $ref: '#/$defs/CWLExpression' + - $ref: '#/$defs/EnvironmentDef' + required: + - envDef + additionalProperties: false + TimeLimitValue: + oneOf: + - type: number + minimum: 0.0 + - $ref: '#/$defs/CWLExpression' + title: TimeLimitValue + description: | + The time limit, in seconds. + + A time limit of zero means no time limit. + Negative time limits are an error. + ToolTimeLimitRequirement: + type: object + title: ToolTimeLimitRequirement + description: | + Set an upper limit on the execution time of a CommandLineTool. + + A CommandLineTool whose execution duration exceeds the time limit may be preemptively + terminated and considered failed. May also be used by batch systems to make scheduling decisions. + + The execution duration excludes external operations, such as staging of files, + pulling a docker image etc., and only counts wall-time for the execution of the command line itself. + properties: + class: + type: string + description: not 'ToolTimeLimitRequirement' + enum: + - ToolTimeLimit + timelimit: + $ref: '#/$defs/TimeLimitValue' + required: + - timelimit + additionalProperties: false + EnableReuseValue: + oneOf: + - type: boolean + - $ref: '#/$defs/CWLExpression' + title: EnableReuseValue + description: | + Indicates if reuse is enabled for this tool. + + Can be an expression when combined with 'InlineJavascriptRequirement' + (see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression). + WorkReuseRequirement: + type: object + title: 'WorkReuseRequirement' + description: | + For implementations that support reusing output from past work + (on the assumption that same code and same input produce same results), + control whether to enable or disable the reuse behavior for a particular tool + or step (to accommodate situations where that assumption is incorrect). + A reused step is not executed but instead returns the same output as the original execution. + If 'WorkReuse' is not specified, correct tools should assume it is enabled by default. + properties: + class: + type: string + description: Not 'WorkReuseRequirement'. + enum: + - 'WorkReuse' + enableReuse: + $ref: '#/$defs/EnableReuseValue' + required: + - enableReuse + additionalProperties: false + UnknownRequirement: + type: object + description: Generic schema to allow alternative CWL requirements/hints not explicitly defined in schemas. + properties: + class: + type: string + title: Requirement Class Identifier + description: CWL requirement class specification. + example: UnknownRequirement + not: + enum: + - 'cwltool:CUDARequirement' + - DockerRequirement + - SoftwareRequirement + - ShellCommandRequirement + - EnvVarRequirement + - SchemaDefRequirement + - InitialWorkDirRequirement + - InlineJavascriptRequirement + - InplaceUpdateRequirement + - LoadListingRequirement + - NetworkAccess + - ResourceRequirement + - ScatterFeatureRequirement + - ToolTimeLimit + - WorkReuse + - MultipleInputFeatureRequirement + - StepInputExpressionRequirement + - SubworkflowFeatureRequirement + #additionalProperties: {} + CWLRequirementsList: + type: array + title: CWLRequirementsList + items: + oneOf: + - allOf: + - description: | + When using the list representation, 'class' is required to indicate which one is being represented. + When using the mapping representation, 'class' is optional since it's the key, but it must match by name. + required: + - class + - $ref: '#/$defs/CWLRequirementsItem' + - $ref: '#/$defs/CWLImport' + CWLRequirementsItem: + title: CWLRequirementsItem + description: | + For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well. + Otherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition. + oneOf: + - $ref: '#/$defs/cwltool_CUDARequirement' + - $ref: '#/$defs/DockerRequirement' + - $ref: '#/$defs/SoftwareRequirement' + - $ref: '#/$defs/ShellCommandRequirement' + - $ref: '#/$defs/EnvVarRequirement' + - $ref: '#/$defs/SchemaDefRequirement' + - $ref: '#/$defs/InitialWorkDirRequirement' + - $ref: '#/$defs/InlineJavascriptRequirement' + - $ref: '#/$defs/InplaceUpdateRequirement' + - $ref: '#/$defs/LoadListingRequirement' + - $ref: '#/$defs/NetworkAccessRequirement' + - $ref: '#/$defs/ResourceRequirement' + - $ref: '#/$defs/ScatterFeatureRequirement' + - $ref: '#/$defs/ToolTimeLimitRequirement' + - $ref: '#/$defs/WorkReuseRequirement' + - $ref: '#/$defs/MultipleInputFeatureRequirement' + - $ref: '#/$defs/StepInputExpressionRequirement' + - $ref: '#/$defs/SubworkflowFeatureRequirement' + ScatterMethod: + type: string + title: scatterMethod + description: | + If 'scatter' declares more than one input parameter, 'scatterMethod' + describes how to decompose the input into a discrete set of jobs. + + - dotproduct: specifies that each of the input arrays are aligned and + one element taken from each array to construct each job. It is an + error if all input arrays are not the same length. + + - nested_crossproduct: specifies the Cartesian product of the inputs, producing + a job for every combination of the scattered inputs. The output must be nested + arrays for each level of scattering, in the order that the input arrays + are listed in the 'scatter' field. + + - flat_crossproduct: specifies the Cartesian product of the inputs, producing a + job for every combination of the scattered inputs. The output arrays must be + flattened to a single level, but otherwise listed in the order that the input + arrays are listed in the 'scatter' field. + default: dotproduct + enum: + - dotproduct + - nested_crossproduct + - flat_crossproduct + #required: + #- timelimit + #- class + CWLHints: + oneOf: + - $ref: '#/$defs/CWLHintsMap' + - $ref: '#/$defs/CWLHintsList' + title: CWLHints + description: Non-failing additional hints that can help resolve extra requirements. + CWLHintsMapExtras: + type: object + properties: + BuiltinRequirement: + $ref: '#/$defs/BuiltinRequirement' + OGCAPIRequirement: + $ref: '#/$defs/OGCAPIRequirement' + WPS1Requirement: + $ref: '#/$defs/WPS1Requirement' + additionalProperties: + $ref: '#/$defs/UnknownRequirement' + CWLHintsMap: + title: CWLHintsMap + anyOf: + - $ref: '#/$defs/CWLRequirementsMap' + - $ref: '#/$defs/CWLHintsMapExtras' + BuiltinRequirement: + type: object + title: BuiltinRequirement + description: | + Hint indicating that the Application Package corresponds to a + builtin process of this instance. (note: can only be an 'hint' + as it is unofficial CWL specification). + properties: + class: + type: string + enum: + - BuiltinRequirement + process: + description: Builtin process identifier. + $ref: '#/$defs/CWLTextPatternID' + required: + - process + - class + additionalProperties: false + CUDAComputeCapability: + oneOf: + - type: string + title: CUDA compute capability + description: The compute capability supported by the GPU hardware. + pattern: '^\d+\.\d+$' + - $ref: '#/$defs/CUDAComputeCapabilityArray' + title: CUDA compute capability + description: | + The compute capability supported by the GPU hardware. + + * If this is a single value, it defines only the minimum compute capability. + GPUs with higher capability are also accepted. + * If it is an array value, then only select GPUs with compute capabilities that explicitly + appear in the array. + See https://docs.nvidia.com/deploy/cuda-compatibility/#faq and + https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#cuda-compute-capability + for details. + CUDAComputeCapabilityArray: + type: array + title: CUDAComputeCapabilityArray + items: + type: string + title: CUDA compute capability + description: The compute capability supported by the GPU hardware. + pattern: '^\d+\.\d+$' + minItems: 1 + cwltool_CUDARequirement: + type: object + title: 'cwltool:CUDARequirement' + properties: + class: + type: string + enum: + - 'cwltool:CUDARequirement' + cudaVersionMin: + type: string + title: CUDA version minimum + description: | + The minimum CUDA version required to run the software. This corresponds to a CUDA SDK release. + + When run in a container, the container image should provide the CUDA runtime, + and the host driver is injected into the container. In this case, because CUDA drivers + are backwards compatible, it is possible to use an older SDK with a newer driver across major versions. + + See https://docs.nvidia.com/deploy/cuda-compatibility/ for details. + example: '11.4' + pattern: '^\d+\.\d+$' + cudaComputeCapability: + $ref: '#/$defs/CUDAComputeCapability' + cudaDeviceCountMin: + type: integer + title: CUDA device count minimum + description: The minimum amount of devices required. + default: 1 + example: 1 + minimum: 1 + cudaDeviceCountMax: + type: integer + title: CUDA device count maximum + description: The maximum amount of devices required. + default: 1 + example: 8 + minimum: 1 + required: + - cudaVersionMin + - cudaComputeCapability + additionalProperties: false + OGCAPIRequirement: + type: object + title: OGCAPIRequirement + description: | + Hint indicating that the Application Package corresponds to an + OGC API - Processes provider that should be remotely executed and monitored + by this instance. (note: can only be an 'hint' as it is unofficial CWL specification). + properties: + class: + type: string + enum: + - OGCAPIRequirement + process: + description: Process location. + $ref: '#/$defs/ReferenceURL' + required: + - process + additionalProperties: false + WPS1Requirement: + type: object + title: WPS1Requirement + description: | + Hint indicating that the Application Package corresponds to a + WPS-1 provider process that should be remotely executed and monitored by this + instance. (note: can only be an ''hint'' as it is unofficial CWL specification). + properties: + class: + type: string + enum: + - WPS1Requirement + process: + description: Process identifier of the remote WPS provider. + $ref: '#/$defs/CWLTextPatternID' + provider: + description: WPS provider endpoint. + $ref: '#/$defs/ReferenceURL' + required: + - process + - provider + additionalProperties: false + CWLHintsList: + type: array + title: CWLHintsList + items: + oneOf: + - allOf: + - description: | + When using the list representation, 'class' is required to indicate which one is being represented. + When using the mapping representation, 'class' is optional since it's the key, but it must match by name. + required: + - class + - $ref: '#/$defs/CWLHintsItem' + - $ref: '#/$defs/CWLImport' + CWLHintsItemExtras: + oneOf: + - $ref: '#/$defs/BuiltinRequirement' + - $ref: '#/$defs/OGCAPIRequirement' + - $ref: '#/$defs/WPS1Requirement' + - $ref: '#/$defs/UnknownRequirement' + CWLHintsItem: + title: CWLHintsItem + description: | + For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well. + Otherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition. + oneOf: + - $ref: '#/$defs/CWLRequirementsItem' + - $ref: '#/$defs/CWLHintsItemExtras' + CWLCommand: + oneOf: + - type: string + title: String command. + - $ref: '#/$defs/CommandParts' + title: CWLCommand + description: | + Command called in the docker image or on shell according to requirements + and hints specifications. Can be omitted if already defined in the docker + image. + CommandParts: + type: array + title: Command Parts + items: + type: string + title: cmd + additionalProperties: false + CWLArguments: + type: array + title: CWLArguments + description: Base arguments passed to the command. + items: + oneOf: + - type: string + - $ref: '#/$defs/InputBinding' + CWLInputStdInDefinition: + description: | + Indicates that the value passed to this CWL input will be redirected to the standard input stream of the command. + Can be defined for only one input and must not be combined with 'stdin' at the root of the CWL document. + type: string + enum: + - stdin + CWLInputStdInObjectType: + type: object + properties: + type: + $ref: '#/$defs/CWLInputStdInDefinition' + required: + - type + CWLInputStdIn: + oneOf: + - $ref: '#/$defs/CWLInputStdInDefinition' + - $ref: '#/$defs/CWLInputStdInObjectType' + CWLOutputStdOutDefinition: + description: | + Indicates that the data pushed to the standard output stream by the command will be redirected to this CWL output. + Can be defined for only one output. If combined with 'stdout' at the root of the CWL document, that definition + will indicate the desired name of the output file where the output stream will be written to. A random name will + be applied for the file of this output unless otherwise specified. + type: string + enum: + - stdout + CWLOutputStdOutObjectType: + type: object + properties: + type: + $ref: '#/$defs/CWLOutputStdOutDefinition' + required: + - type + CWLOutputStdOut: + oneOf: + - $ref: '#/$defs/CWLOutputStdOutDefinition' + - $ref: '#/$defs/CWLOutputStdOutObjectType' + CWLOutputStdErrDefinition: + description: | + Indicates that the data pushed to the standard error stream by the command will be redirected to this CWL output. + Can be defined for only one output. If combined with 'stderr' at the root of the CWL document, that definition + will indicate the desired name of the output file where the error stream will be written to. A random name will + be applied for the file of this output unless otherwise specified. + type: string + enum: + - stderr + CWLOutputStdErrObjectType: + type: object + properties: + type: + $ref: '#/$defs/CWLOutputStdErrDefinition' + required: + - type + CWLOutputStdErr: + oneOf: + - $ref: '#/$defs/CWLOutputStdErrDefinition' + - $ref: '#/$defs/CWLOutputStdErrObjectType' + CWLInputsDefinition: + oneOf: + - $ref: '#/$defs/CWLInputList' + - description: Avoid 'oneOf' conflict of generic mapping key strings as input identifier matching against '$import'. + allOf: + - $ref: '#/$defs/CWLInputMap' + - not: + $ref: '#/$defs/CWLImport' + - $ref: '#/$defs/CWLImport' + title: CWLInputsDefinition + description: All inputs available to the Application Package. + CWLInputList: + type: array + title: CWLInputList + description: Package inputs defined as items. + items: + $ref: '#/$defs/CWLInputItem' + CWLFormat: + oneOf: + - $ref: '#/$defs/CWLExpression' + - type: array + items: + $ref: '#/$defs/CWLExpression' + CWLType: + oneOf: + - $ref: '#/$defs/CWLTypeBase' + - $ref: '#/$defs/CWLTypeList' + title: CWL Type + CWLTypeDefinition: + type: string + title: CWL type string definition + description: | + Note that 'Any' is equivalent to any of the non-null types. + Therefore, a nullable 'Any' explicitly specified by 'Any?' or its array-nullable form 'Any[]?' are not equivalent. + Field type definition. + enum: + - 'null' + - Any + - Any? + - Any[] + - Any[]? + - Directory + - Directory? + - Directory[] + - Directory[]? + - File + - File? + - File[] + - File[]? + - boolean + - boolean? + - boolean[] + - boolean[]? + - double + - double? + - double[] + - double[]? + - enum? + - enum[] + - enum[]? + - float + - float? + - float[] + - float[]? + - int + - int? + - int[] + - int[]? + - integer + - integer? + - integer[] + - integer[]? + - long + - long? + - long[] + - long[]? + - string + - string? + - string[] + - string[]? + CWLTypeBase: + oneOf: + - $ref: '#/$defs/CWLTypeDefinition' + - $ref: '#/$defs/CWLTypeArray' + - $ref: '#/$defs/CWLTypeEnum' + - $ref: '#/$defs/CWLTypeRecordRef' + - $ref: '#/$defs/CWLTypeRecordSchema' + title: CWLTypeBase + CWLTypeArray: + type: object + title: CWLTypeArray (CWL type as list of items). + properties: + type: + type: string + title: type + example: array + enum: + - array + items: + $ref: '#/$defs/CWLType' + required: + - type + - items + #additionalProperties: {} + CWLTypeSymbols: + type: array + title: CWLTypeSymbols (Allowed values composing the enum). + items: + $ref: '#/$defs/CWLTypeSymbolValues' + CWLTypeSymbolValues: + oneOf: + - type: number + - type: string + title: CWLTypeSymbolValues + CWLTypeEnum: + type: object + title: CWLTypeEnum (CWL type as enum of values). + properties: + type: + type: string + title: type + example: enum + enum: + - enum + symbols: + $ref: '#/$defs/CWLTypeSymbols' + required: + - type + - symbols + #additionalProperties: {} + CWLTypeRecordRef: + description: | + An IRI with minimally a '{Record}' identifier to look for a schema definition locally or remotely. + + The identifier resolution is performed accordingly to the specified reference and as described in + https://www.commonwl.org/v1.2/SchemaSalad.html#Identifier_resolution. + Avoid 'oneOf' conflict of valid strings between this CWL record reference and the generic CWL types. + allOf: + - not: + $ref: '#/$defs/CWLTypeDefinition' + - not: + $ref: '#/$defs/CWLInputStdInDefinition' + - not: + $ref: '#/$defs/CWLOutputStdOutDefinition' + - not: + $ref: '#/$defs/CWLOutputStdErrDefinition' + - $ref: '#/$defs/CWLTypeRecordRefPattern' + CWLTypeRecordRefPattern: + type: string + format: url + pattern: '^(((?:http|ftp)s?:\/\/)?(?!.*\/\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+(?:[A-Za-z]{2,6}\.?|[A-Za-z0-9-]{2,}\.?)|localhost|\[[a-f0-9:]+\]|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::\d+)?(?:\/?|[\/?]\S+))?(?:[A-Za-z0-9\w\-.\/]+)?\#?[A-Za-z0-9\w\-.]+$' + CWLTypeList: + type: array + title: CWLTypeList (Combination of allowed CWL types). + items: + $ref: '#/$defs/CWLTypeBase' + CWLDefault: + title: CWLDefault + description: Default value of input if not provided for task execution. + oneOf: + - $ref: '#/$defs/AnyLiteralType' + - $ref: '#/$defs/AnyLiteralList' + - $ref: '#/$defs/CWLDefaultLocation' + - $ref: '#/$defs/CWLDefaultObject' + - type: array + items: + $ref: '#/$defs/CWLDefaultObject' + CWLDefaultTypedConditional: + description: | + Validate that the 'default' value, if specified, is of same type as the CWL 'type'. + This avoids over-accepting anything that does not match the intended type. + However, validation limits itself to data literals and arrays. + Nested type and multi-type definitions will validate against 'Any'. + oneOf: + # 1. Null / Explicitly empty + - type: object + properties: + type: + type : string + enum: ['null'] + default: + #type: string + nullable: true + enum: [null] + required: [type] + + # 2. Strings & Optional Strings + - type: object + properties: + type: + type: string + enum: [string, 'string?'] + default: + type: string + nullable: true + required: [type] + + # 3. Booleans + - type: object + properties: + type: + type: string + enum: [boolean, 'boolean?'] + default: + type: boolean + nullable: true + required: [type] + + # 4. Numeric Types (Int, Long, Float, Double) + - type: object + properties: + type: + type: string + enum: [int, 'int?', long, 'long?', float, 'float?', double, 'double?', integer, 'integer?'] + default: + type: number + nullable: true + required: [type] + + # 5. File & Directory (Special CWL Objects) + - type: object + properties: + type: + type: string + enum: [File, 'File?', Directory, 'Directory?'] + default: + oneOf: + - $ref: '#/$defs/CWLDefaultLocation' + - nullable: true + enum: [null] + #type: string + required: [type] + + # 6. Arrays (Shorthand: string[], int[], etc.) + - type: object + properties: + type: + type: string + pattern: '^[a-zA-Z]+\\[\\]$' # Matches any 'type[]' shorthand + default: + type: array + items: + $ref: '#/$defs/AnyType' + required: [type] + + # 7. Complex Arrays (type: array + items) + - type: object + properties: + type: + type: string + enum: [array] + items: + $ref: '#/$defs/AnyType' + default: + type: array + items: + $ref: '#/$defs/AnyType' + required: [type, items] + + # 8. Enums (type: enum + symbols) + - type: object + properties: + type: + type: string + enum: [enum, 'enum?'] + symbols: + type: array + items: + type: string + default: + type: string + nullable: true + required: [type, symbols] + + # 9. Global Fallback (Any) + - type: object + properties: + type: + type: string + enum: [Any, 'Any?'] + default: + $ref: '#/$defs/AnyType' + required: [type] + + AnyType: + oneOf: + - type: boolean + - type: number + - type: string + - type: array + items: {} + - type: object + AnyLiteralType: + oneOf: + - type: number + - type: boolean + - type: string + AnyLiteralList: + type: array + title: AnyLiteralList + items: + $ref: '#/$defs/AnyLiteralType' + Checksum: + description: | + Minimal pattern check to know which hash algorithm to apply, + but don't check too harshly for the rest (length, allowed characters, etc.). + type: string + pattern: '^[a-z0-9\-]+\$[\w\-.]+$' + ReferenceURL: + type: string + format: url + pattern: '^((?:http|ftp)s?:\/\/)?(?!.*\/\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+(?:[A-Za-z]{2,6}\.?|[A-Za-z0-9-]{2,}\.?)|localhost|\[[a-f0-9:]+\]|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::\d+)?(?:\/?|[/?]\S+)$' + CWLDefaultLocation: + type: object + properties: + class: + type: string + enum: + - File + - Directory + path: + type: string + location: + type: string + basename: + type: string + nameroot: + type: string + required: + - class + oneOf: + - required: + - path + - required: + - location + additionalProperties: false + CWLDefaultObject: + type: object + not: + description: Avoid false-positive match of default File or Directory location definition. + properties: + class: + type: string + enum: + - File + - Directory + #additionalProperties: {} + InputBinding: + type: object + title: Input Binding + description: Defines how to specify the input for the command. + properties: + prefix: + type: string + position: + oneOf: + - type: integer + - $ref: '#/$defs/CWLExpression' + valueFrom: + $ref: '#/$defs/CWLExpression' + itemSeparator: + type: string + shellQuote: + type: boolean + additionalProperties: false + CWLInputItemBase: + type: object + properties: + type: + oneOf: + - $ref: '#/$defs/CWLType' + - $ref: '#/$defs/CWLInputStdIn' + inputBinding: + $ref: '#/$defs/InputBinding' + id: + description: Identifier of the CWL input. + $ref: '#/$defs/CWLIdentifier' + required: + - type + - id + additionalProperties: { } + CWLInputItem: + title: Input + description: | + Input specification. Note that multiple formats are supported and + not all specification variants or parameters are presented here. Please refer + to official CWL documentation for more details (https://www.commonwl.org). + allOf: + - $ref: '#/$defs/CWLInputItemBase' + - $ref: '#/$defs/CWLDefaultTypedConditional' + - $ref: '#/$defs/CWLDocumentation' + CWLInputObjectBase: + type: object + properties: + type: + $ref: '#/$defs/CWLType' + inputBinding: + $ref: '#/$defs/InputBinding' + ##additionalProperties: {} + required: + - type + additionalProperties: { } + CWLInputObject: + title: CWLInputObject (CWL type definition with parameters). + allOf: + - $ref: '#/$defs/CWLInputObjectBase' + - $ref: '#/$defs/CWLDefaultTypedConditional' + - $ref: '#/$defs/CWLDocumentation' + CWLInputMap: + type: object + title: CWLInputMap + description: Package inputs defined as mapping. + #properties: {} + #required: [] + additionalProperties: + oneOf: + - $ref: '#/$defs/CWLType' + - $ref: '#/$defs/CWLInputObject' + - $ref: '#/$defs/CWLInputStdIn' + - $ref: '#/$defs/CWLImport' + CWLOutputsDefinition: + oneOf: + - $ref: '#/$defs/CWLOutputList' + - description: Avoid 'oneOf' conflict of generic mapping key strings as output identifier matching against '$import'. + allOf: + - $ref: '#/$defs/CWLOutputMap' + - not: + $ref: '#/$defs/CWLImport' + - $ref: '#/$defs/CWLImport' + title: CWLOutputsDefinition + description: All outputs produced by the Application Package. + CWLOutputList: + type: array + title: CWLOutputList + description: Package outputs defined as items. + items: + $ref: '#/$defs/CWLOutputItem' + OutputBinding: + type: object + title: OutputBinding + description: Defines how to retrieve the output result from the command. + properties: + glob: + description: Glob pattern to find the output on disk or mounted docker volume. + oneOf: + - $ref: '#/$defs/CWLExpression' + - type: array + items: + $ref: '#/$defs/CWLExpression' + #additionalProperties: {} + CWLOutputItem: + type: object + title: CWLOutputItem + description: | + Output specification. Note that multiple formats are supported + and not all specification variants or parameters are presented here. Please + refer to official CWL documentation for more details (https://www.commonwl.org). + properties: + type: + oneOf: + - $ref: '#/$defs/CWLType' + - $ref: '#/$defs/CWLOutputStdOut' + - $ref: '#/$defs/CWLOutputStdErr' + outputBinding: + $ref: '#/$defs/OutputBinding' + id: + description: Identifier of the CWL output. + $ref: '#/$defs/CWLIdentifier' + required: + - type + - id + #additionalProperties: {} + CWLOutputObjectBase: + type: object + title: CWLOutputObject (CWL type definition with parameters). + properties: + type: + $ref: '#/$defs/CWLType' + outputBinding: + $ref: '#/$defs/OutputBinding' + required: + - type + #additionalProperties: {} + CWLOutputObject: + allOf: + - $ref: '#/$defs/CWLDocumentation' + - $ref: '#/$defs/CWLOutputObjectBase' + CWLOutputMap: + type: object + title: CWLOutputMap + description: Package outputs defined as mapping. + #properties: {} + #required: [] + additionalProperties: + oneOf: + - $ref: '#/$defs/CWLType' + - $ref: '#/$defs/CWLOutputObject' + - $ref: '#/$defs/CWLOutputStdOut' + - $ref: '#/$defs/CWLOutputStdErr' + - $ref: '#/$defs/CWLImport' + CWLScatter: + oneOf: + - $ref: '#/$defs/CWLIdentifier' + - $ref: '#/$defs/CWLScatterMulti' + title: CWLScatter + description: | + One or more input identifier of an application step within a Workflow + were an array-based input to that Workflow should be scattered across multiple + instances of the step application. + CWLScatterMulti: + type: array + title: CWLScatterMulti + items: + $ref: '#/$defs/CWLIdentifier' + CWLScatterMethod: + type: string + title: scatterMethod + description: | + Describes how to decompose the scattered input into a discrete + set of jobs. When 'dotproduct', specifies that each of the input arrays + are aligned and one element taken from each array to construct each job. + It is an error if all input arrays are of different length. When 'nested_crossproduct', + specifies the Cartesian product of the inputs, producing a job for every + combination of the scattered inputs. The output must be nested arrays + for each level of scattering, in the order that the input arrays are listed + in the scatter field. When 'flat_crossproduct', specifies the Cartesian + product of the inputs, producing a job for every combination of the scattered + inputs. The output arrays must be flattened to a single level, but otherwise + listed in the order that the input arrays are listed in the scatter field. + enum: + - dotproduct + - nested_crossproduct + - flat_crossproduct + CWLWorkflowStepScatter: + type: object + properties: + scatter: + $ref: '#/$defs/Scatter' + scatterMethod: + $ref: '#/$defs/ScatterMethod' + CWLWorkflowStepRun: + description: Nested CWL definition to run as Workflow step. + oneOf: + - description: File or URL reference to a CWL tool definition. + type: string + - description: Nested CWL tool definition for the step. + $ref: '#/$defs/CWLAtomicNested' + - description: Nested CWL Workflow definition for the step. + $ref: '#/$defs/CWLWorkflowNested' + CWLWorkflowStepWhen: + description: Condition to execute a step that must evaluate to a boolean-like value. + $ref: '#/$defs/CWLExpression' + LinkMergeMethod: + type: string + enum: + - merge_nested + - merge_flattened + CWLWorkflowStepInputBase: + type: object + properties: + source: + oneOf: + - type: string + - type: array + items: + type: string + linkMerge: + $ref: '#/$defs/LinkMergeMethod' + valueFrom: + $ref: '#/$defs/CWLExpression' + CWLWorkflowStepInputDefault: + description: | + CWL 'type' is not specified at this level for step inputs + (it is provided by the mapped input of the nested tool instead). + Therefore, cannot validate against 'CWLDefaultTypedConditional'. + type: object + properties: + default: + $ref: '#/$defs/CWLDefault' + CWLWorkflowStepInput: + allOf: + - $ref: '#/$defs/CWLWorkflowStepInputBase' + - $ref: '#/$defs/CWLWorkflowStepInputDefault' + CWLWorkflowStepInputId: + type: object + properties: + id: + $ref: '#/$defs/CWLIdentifier' + required: + - id + CWLWorkflowStepInItem: + allOf: + - $ref: '#/$defs/CWLWorkflowStepInputId' + - $ref: '#/$defs/CWLWorkflowStepInputBase' + - $ref: '#/$defs/CWLWorkflowStepInputDefault' + CWLWorkflowStepInList: + type: array + items: + $ref: '#/$defs/CWLWorkflowStepInItem' + CWLWorkflowStepInMap: + type: object + additionalProperties: + oneOf: + - type: string + - type: array + items: + type: string + - $ref: '#/$defs/CWLWorkflowStepInput' + CWLWorkflowStepIn: + description: Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs. + oneOf: + - $ref: '#/$defs/CWLWorkflowStepInMap' + - $ref: '#/$defs/CWLWorkflowStepInList' + CWLWorkflowStepOutId: + type: object + properties: + id: + $ref: '#/$defs/CWLIdentifier' + required: + - id + additionalProperties: false + CWLWorkflowStepOut: + description: Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs. + type: array + items: + oneOf: + - $ref: '#/$defs/CWLIdentifier' + - $ref: '#/$defs/CWLWorkflowStepOutId' + CWLWorkflowStepDefinition: + type: object + properties: + in: + $ref: '#/$defs/CWLWorkflowStepIn' + run: + $ref: '#/$defs/CWLWorkflowStepRun' + when: + $ref: '#/$defs/CWLWorkflowStepWhen' + out: + $ref: '#/$defs/CWLWorkflowStepOut' + required: + - in + - run + - out + CWLWorkflowStepObject: + allOf: + - $ref: '#/$defs/CWLWorkflowStepDefinition' + - $ref: '#/$defs/CWLWorkflowStepScatter' + CWLWorkflowStepItem: + allOf: + - $ref: '#/$defs/CWLWorkflowStepId' + - $ref: '#/$defs/CWLWorkflowStepObject' + CWLWorkflowStepId: + type: object + properties: + id: + $ref: '#/$defs/CWLIdentifier' + required: + - id + CWLWorkflowStepMap: + type: object + additionalProperties: + $ref: '#/$defs/CWLWorkflowStepObject' + CWLWorkflowStepList: + type: array + items: + $ref: '#/$defs/CWLWorkflowStepItem' + CWLWorkflowClass: + type: object + properties: + class: + type: string + enum: + - Workflow + CWLWorkflowSteps: + oneOf: + - $ref: '#/$defs/CWLWorkflowStepMap' + - $ref: '#/$defs/CWLWorkflowStepList' + CWLWorkflowBase: + type: object + properties: + steps: + $ref: '#/$defs/CWLWorkflowSteps' + inputs: + $ref: '#/$defs/CWLInputsDefinition' + outputs: + $ref: '#/$defs/CWLOutputsDefinition' + requirements: + description: Technically a different subset, but lots of redefinitions to be done. + $ref: '#/$defs/CWLRequirements' + hints: + description: Technically a different subset, but lots of redefinitions to be done. + $ref: '#/$defs/CWLHints' + CWLWorkflowNested: + description: Same as 'CWLWorkflow', but 'cwlVersion' not repeated (only at root). + allOf: + - $ref: '#/$defs/CWLMetadata' + - $ref: '#/$defs/CWLDocumentation' + - $ref: '#/$defs/CWLWorkflowClass' + - $ref: '#/$defs/CWLWorkflowBase' + CWLWorkflow: + allOf: + - $ref: '#/$defs/CWLVersion' + - $ref: '#/$defs/CWLMetadata' + - $ref: '#/$defs/CWLDocumentation' + - $ref: '#/$defs/CWLWorkflowClass' + - $ref: '#/$defs/CWLWorkflowBase' + CWLVersion: + type: object + properties: + cwlVersion: + type: string + title: cwlVersion + description: CWL version of the described application package. + pattern: '^v\d+(\.\d+(\.\d+)*)*$' + required: + - cwlVersion + CWLAtomic: + allOf: + - $ref: '#/$defs/CWLVersion' + - $ref: '#/$defs/CWLMetadata' + - $ref: '#/$defs/CWLDocumentation' + - $ref: '#/$defs/CWLAtomicBase' + CWLAtomicNested: + description: Same as 'CWLAtomic', but 'cwlVersion' not repeated (only at root). + allOf: + - $ref: '#/$defs/CWLMetadata' + - $ref: '#/$defs/CWLDocumentation' + - $ref: '#/$defs/CWLAtomicBase' + CWLAtomicBase: + type: object + title: CWL atomic definition + description: Direct CWL definition instead of the graph representation. + properties: + id: + $ref: '#/$defs/CWLIdentifier' + class: + type: string + title: Class + description: CWL class specification. This is used to differentiate between + single Application Package (AP)definitions and Workflow that chains multiple + packages. + enum: + - CommandLineTool + - ExpressionTool + intent: + $ref: '#/$defs/CWLIntent' + requirements: + $ref: '#/$defs/CWLRequirements' + hints: + $ref: '#/$defs/CWLHints' + baseCommand: + $ref: '#/$defs/CWLCommand' + arguments: + $ref: '#/$defs/CWLArguments' + inputs: + $ref: '#/$defs/CWLInputsDefinition' + outputs: + $ref: '#/$defs/CWLOutputsDefinition' + stdin: + description: | + Source of the input stream. + Typically, an expression referring to an existing file name or an input of the CWL document. + $ref: '#/$defs/CWLExpression' + stdout: + description: | + Destination of the output stream. + Typically, an expression referring to a desired file name or provided by a CWL input reference. + $ref: '#/$defs/CWLExpression' + stderr: + description: | + Destination of the error stream. + Typically, an expression referring to a desired file name or provided by a CWL input reference. + $ref: '#/$defs/CWLExpression' + scatter: + $ref: '#/$defs/CWLScatter' + scatterMethod: + $ref: '#/$defs/CWLScatterMethod' + required: + - class + - inputs + - outputs + CWLGraphList: + type: array + title: CWLGraphList + description: Graph definition that defines *exactly one* CWL application package + represented as list. Multiple definitions simultaneously deployed is NOT supported + currently. + items: + $ref: '#/$defs/CWLGraphItem' + maxItems: 1 + minItems: 1 + CWLGraphItem: + allOf: + - $ref: '#/$defs/CWLMetadata' + - $ref: '#/$defs/CWLDocumentation' + - $ref: '#/$defs/CWLGraphItemBase' + CWLGraphItemBase: + type: object + title: CWLGraphItem + properties: + class: + type: string + title: Class + description: CWL class specification. This is used to differentiate between + single Application Package (AP)definitions and Workflow that chains multiple + packages. + enum: + - CommandLineTool + - ExpressionTool + - Workflow + id: + $ref: '#/$defs/CWLIdentifier' + intent: + $ref: '#/$defs/CWLIntent' + requirements: + $ref: '#/$defs/CWLRequirements' + hints: + $ref: '#/$defs/CWLHints' + baseCommand: + $ref: '#/$defs/CWLCommand' + arguments: + $ref: '#/$defs/CWLArguments' + inputs: + $ref: '#/$defs/CWLInputsDefinition' + outputs: + $ref: '#/$defs/CWLOutputsDefinition' + scatter: + $ref: '#/$defs/CWLScatter' + scatterMethod: + $ref: '#/$defs/CWLScatterMethod' + required: + - class + - id + - inputs + - outputs + #additionalProperties: {} + CWLGraphBase: + type: object + properties: + $graph: + $ref: '#/$defs/CWLGraphList' + required: + - $graph + #additionalProperties: {} + CWLGraph: + title: CWLGraph + allOf: + - $ref: '#/$defs/CWLVersion' + - $ref: '#/$defs/CWLMetadata' + - $ref: '#/$defs/CWLDocumentation' + - $ref: '#/$defs/CWLGraphBase' + CWLDocumentation: + type: object + properties: + label: + type: string + doc: + oneOf: + - type: string + - type: array + items: + type: string + CWLMetadata: + type: object + properties: + s:keywords: + $ref: '#/$defs/CWLKeywordList' + version: + type: string + title: version + description: "Version of the process." + example: "1.2.3" + pattern: '^\d+(\.\d+(\.\d+(\.[A-Za-z0-9\-_]+)*)*)*$' diff --git a/openapi/schemas/cwl/cwl.yaml b/openapi/schemas/cwl/cwl.yaml new file mode 100644 index 00000000..79825f74 --- /dev/null +++ b/openapi/schemas/cwl/cwl.yaml @@ -0,0 +1 @@ +$ref: './cwl-json-schema.yaml#/$defs/CWL' diff --git a/openapi/schemas/processes-core/binaryValue.yaml b/openapi/schemas/processes-core/binaryValue.yaml index 2362cfab..99afa9a0 100644 --- a/openapi/schemas/processes-core/binaryValue.yaml +++ b/openapi/schemas/processes-core/binaryValue.yaml @@ -1,2 +1,2 @@ type: string -contentEncoding: base64 +# contentEncoding: base64 diff --git a/openapi/schemas/processes-core/collectionValue.yaml b/openapi/schemas/processes-core/collectionValue.yaml index 16f7fd15..e85822d4 100644 --- a/openapi/schemas/processes-core/collectionValue.yaml +++ b/openapi/schemas/processes-core/collectionValue.yaml @@ -17,34 +17,34 @@ allOf: are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth): - + * Lower left corner, coordinate axis 1 * Lower left corner, coordinate axis 2 * Minimum value, coordinate axis 3 (optional) * Upper right corner, coordinate axis 1 * Upper right corner, coordinate axis 2 * Maximum value, coordinate axis 3 (optional) - + If the value consists of four numbers, the coordinate reference system is WGS84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate reference system is specified in the parameter `bboxCrs`. - + If the value consists of six numbers, the coordinate reference system is WGS84 (http://www.opengis.net/def/crs/OGC/0/CRS84h) longitude/ latitude/ ellipsoidal height unless a different coordinate reference system is specified in the parameter `bboxCrs`. - + For WGS84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge). - + If the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box. - + If a resource has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries. @@ -59,7 +59,7 @@ allOf: bboxCrs: description: |- Asserts the CRS used for the coordinate values of the `bbox` - parameter. The default is WGS 84 or WGS84h depending on whether + parameter. The default is WGS 84 or WGS84h depending on whether ellipsoidal height is included or not: * WGS 84 longitude/latitude [4 numbers] (http://www.opengis.net/def/crs/OGC/1.3/CRS84) @@ -81,7 +81,7 @@ allOf: geometryCrs: description: |- Asserts the CRS used for the coordinate values of the `geometry` - parameter. The default is WGS 84 or WGS84h depending on whether + parameter. The default is WGS 84 or WGS84h depending on whether ellipsoidal height is included or not: * WGS 84 longitude/latitude [4 numbers] (http://www.opengis.net/def/crs/OGC/1.3/CRS84) @@ -93,7 +93,7 @@ allOf: Either a date-time or an interval, half-bounded or bounded. Date and time expressions adhere to RFC 3339. Half-bounded intervals are expressed using double-dots. - + Examples: * A date-time: "2018-02-12T23:20:50Z" @@ -101,10 +101,10 @@ allOf: "2018-02-12T00:00:00Z/2018-03-18T12:31:12Z" * Half-bounded intervals: "2018-02-12T00:00:00Z/.." or "../2018-03-18T12:31:12Z" - + Only resources that have a temporal property that intersects the value of `datetime` are selected. - + If a resource has multiple temporal properties, it is the decision of the server whether only a single temporal property is used to determine the extent or all relevant temporal properties. @@ -131,7 +131,7 @@ allOf: type: string format: uri filter: - description: |- + description: |- A search or filter condition. This condition determines which resources from the OGC API collection are included in the result set and are thus passed as values to the corresponding process input. @@ -140,7 +140,8 @@ allOf: CQL2 JSON object that encodes the search condition using JSON. oneOf: - type: string - - $ref: "https://schemas.opengis.net/cql2/1.0/cql2.json" + - $ref: ../cql2/cql2.yaml + # - $ref: "https://schemas.opengis.net/cql2/1.0/cql2.json" filterCrs: description: |- Asserts the CRS used for the coordinate values of the `filter` @@ -158,7 +159,7 @@ allOf: using the `filter` parameter. Query languages can include CQL2 text, CQL 2 JSON or OGC Filter Encoding (XML). type: string - enum: + enum: - cql2-text - cql2-json - fes-xml @@ -222,7 +223,7 @@ allOf: type: string aliases: description: |- - A dictionary of aliases that can be used as values for the + A dictionary of aliases that can be used as values for the `properties` parameter. Aliases can be alternative names for resource properties or synthetic properties. Synthetic properties are named expressions that are computed at run-time. Expressions @@ -237,13 +238,14 @@ allOf: properties: expressionLang: type: string - enum: + enum: - cql2-text - cql2-json expression: oneOf: - type: string - - $ref: "https://schemas.opengis.net/cql2/1.0/cql2.json" + - $ref: ../cql2/cql2.yaml + #- $ref: "https://schemas.opengis.net/cql2/1.0/cql2.json" passThroughParameters: description: |- Parameters specified in this object are passed through to the value diff --git a/openapi/schemas/processes-core/execute.yaml b/openapi/schemas/processes-core/execute.yaml index fb684052..0a6dbf64 100644 --- a/openapi/schemas/processes-core/execute.yaml +++ b/openapi/schemas/processes-core/execute.yaml @@ -5,9 +5,9 @@ properties: format: uri inputs: additionalProperties: - $ref: "input.yaml" + $ref: "values.yaml" outputs: additionalProperties: - $ref: "output.yaml" + $ref: "outputSelection.yaml" subscriber: $ref: "subscriber.yaml" diff --git a/openapi/schemas/processes-core/fieldsModifiers.yaml b/openapi/schemas/processes-core/fieldsModifiers.yaml index 13ca294d..33ee0d5a 100644 --- a/openapi/schemas/processes-core/fieldsModifiers.yaml +++ b/openapi/schemas/processes-core/fieldsModifiers.yaml @@ -3,25 +3,26 @@ properties: filter: oneOf: - type: string - - $comment: Update with https://github.com/opengeospatial/ogcapi-features/blob/master/cql2/standard/schema/cql2.json if needed. - description: Basic CQL2-JSON definition + # Update with https://github.com/opengeospatial/ogcapi-features/blob/master/cql2/standard/schema/cql2.json if needed. + - description: Basic CQL2-JSON definition type: array items: type: object - required: - - op - - args - properties: - op: - type: string - args: - type: {} - filter-lang: + #required: + # - op + # - args + #properties: + # op: + # type: string + # args: + # type: array + filter-lang: type: string - examples: - - cql2-text - - cql2-json - - fes + example: cql2-text + #examples: + # - cql2-text + # - cql2-json + # - fes filter-crs: type: string format: uri-reference diff --git a/openapi/schemas/processes-core/inputDescription.yaml b/openapi/schemas/processes-core/inputDescription.yaml index cc1a5ad2..2adcc1e7 100644 --- a/openapi/schemas/processes-core/inputDescription.yaml +++ b/openapi/schemas/processes-core/inputDescription.yaml @@ -1,24 +1,11 @@ allOf: - $ref: "descriptionType.yaml" - $ref: "dataClasses.yaml" - - $ref: "dataAccessApis.yaml" + - $ref: "dataAccessAPIs.yaml" - $ref: "executionUnitRequirements.yaml" + - $ref: "schemaAndOccurrences.yaml" - type: object - required: - - schema properties: - schema: - $ref: "https://json-schema.org/draft/2020-12/schema" - minOccurs: - type: integer - default: 1 - maxOccurs: - oneOf: - - type: integer - default: 1 - - type: string - enum: - - "unbounded" valuePassing: type: array items: diff --git a/openapi/schemas/processes-core/outputDescription.yaml b/openapi/schemas/processes-core/outputDescription.yaml index 849d3e9f..3bdd3312 100644 --- a/openapi/schemas/processes-core/outputDescription.yaml +++ b/openapi/schemas/processes-core/outputDescription.yaml @@ -1,10 +1,5 @@ allOf: - $ref: "descriptionType.yaml" - $ref: "dataClasses.yaml" - - $ref: "dataAccessApis.yaml" - - type: object - required: - - schema - properties: - schema: - $ref: "https://json-schema.org/draft/2020-12/schema" + - $ref: "dataAccessAPIs.yaml" + - $ref: "schemaAndOccurrences.yaml" diff --git a/openapi/schemas/processes-core/output.yaml b/openapi/schemas/processes-core/outputSelection.yaml similarity index 100% rename from openapi/schemas/processes-core/output.yaml rename to openapi/schemas/processes-core/outputSelection.yaml diff --git a/openapi/schemas/processes-core/qualifiedValue.yaml b/openapi/schemas/processes-core/qualifiedValue.yaml index fe5c835f..2ea53519 100644 --- a/openapi/schemas/processes-core/qualifiedValue.yaml +++ b/openapi/schemas/processes-core/qualifiedValue.yaml @@ -5,4 +5,4 @@ allOf: - value properties: value: - $ref: "inputValue.yaml" + $ref: "value.yaml" diff --git a/openapi/schemas/processes-core/results.yaml b/openapi/schemas/processes-core/results.yaml index 519ed6cb..fa0f4809 100644 --- a/openapi/schemas/processes-core/results.yaml +++ b/openapi/schemas/processes-core/results.yaml @@ -1,2 +1,3 @@ +type: object additionalProperties: - $ref: "inlineOrRefValue.yaml" + $ref: "values.yaml" diff --git a/openapi/schemas/processes-core/schema.yaml b/openapi/schemas/processes-core/schema.yaml new file mode 100644 index 00000000..31fb234a --- /dev/null +++ b/openapi/schemas/processes-core/schema.yaml @@ -0,0 +1,69 @@ +description: Attributes of the features or fields of a coverage range. Defined by a subset of the JSON Schema for the properties of a feature +type: object +required: +- type +- properties +properties: + type: + type: string + enum: + - object + required: + type: array + minItems: 1 + items: + type: string + properties: + type: object + default: {} + additionalProperties: + type: object + properties: + title: + type: string + description: + type: string + type: + type: string + enum: + - array + - boolean + - integer + - 'null' + - number + - object + - string + enum: + type: array + minItems: 1 + items: {} + uniqueItems: true + format: + type: string + contentMediaType: + type: string + maximum: + type: number + exclusiveMaximum: + type: number + minimum: + type: number + exclusiveMinimum: + type: number + pattern: + type: string + format: regex + maxItems: + type: integer + minimum: 0 + minItems: + type: integer + default: 0 + minimum: 0 + x-ogc-definition: + type: string + format: uri + x-ogc-unit: + type: string + x-ogc-unitLang: + type: string diff --git a/openapi/schemas/processes-core/schemaAndOccurrences.yaml b/openapi/schemas/processes-core/schemaAndOccurrences.yaml new file mode 100644 index 00000000..497a0270 --- /dev/null +++ b/openapi/schemas/processes-core/schemaAndOccurrences.yaml @@ -0,0 +1,17 @@ +type: object +required: + - schema +properties: + schema: + $ref: schema.yaml + # $ref: "https://json-schema.org/draft/2020-12/schema" + minOccurs: + type: integer + default: 1 + maxOccurs: + oneOf: + - type: integer + default: 1 + - type: string + enum: + - "unbounded" diff --git a/openapi/schemas/processes-core/inputValue.yaml b/openapi/schemas/processes-core/value.yaml similarity index 100% rename from openapi/schemas/processes-core/inputValue.yaml rename to openapi/schemas/processes-core/value.yaml diff --git a/openapi/schemas/processes-core/valueNoObject.yaml b/openapi/schemas/processes-core/valueNoObject.yaml index 9d4cd8c9..76148ccc 100644 --- a/openapi/schemas/processes-core/valueNoObject.yaml +++ b/openapi/schemas/processes-core/valueNoObject.yaml @@ -4,10 +4,7 @@ anyOf: - type: integer - type: boolean - type: array - items: - oneOf: - - $ref: "inputValue.yaml" - - $ref: "qualifiedValue.yaml" + items: { } - $ref: "binaryValue.yaml" - $ref: "bbox.yaml" - $ref: "collectionValue.yaml" diff --git a/openapi/schemas/processes-core/input.yaml b/openapi/schemas/processes-core/values.yaml similarity index 93% rename from openapi/schemas/processes-core/input.yaml rename to openapi/schemas/processes-core/values.yaml index f6cd9867..e97c3721 100644 --- a/openapi/schemas/processes-core/input.yaml +++ b/openapi/schemas/processes-core/values.yaml @@ -1,4 +1,4 @@ -oneOf: +anyOf: - $ref: "inlineOrRefValue.yaml" - type: array items: diff --git a/openapi/schemas/processes-dru/ogcapppkg-array.yaml b/openapi/schemas/processes-dru/ogcapppkg-array.yaml index 8d143015..3b5ab92f 100644 --- a/openapi/schemas/processes-dru/ogcapppkg-array.yaml +++ b/openapi/schemas/processes-dru/ogcapppkg-array.yaml @@ -3,4 +3,4 @@ items: oneOf: - $ref: "executionUnit.yaml" - $ref: "../common-core/link.yaml" - - $ref: "../processes-core/qualifiedInputValue.yaml" + - $ref: "../processes-core/qualifiedValue.yaml" diff --git a/openapi/schemas/processes-dru/ogcapppkg.yaml b/openapi/schemas/processes-dru/ogcapppkg.yaml index 1e692b62..f2178631 100644 --- a/openapi/schemas/processes-dru/ogcapppkg.yaml +++ b/openapi/schemas/processes-dru/ogcapppkg.yaml @@ -4,7 +4,8 @@ required: properties: processDescription: type: object - required: process + required: + - process properties: process: $ref: "../processes-core/process.yaml" @@ -12,5 +13,5 @@ properties: oneOf: - $ref: "executionUnit.yaml" - $ref: "../common-core/link.yaml" - - $ref: "../processes-core/qualifiedInputValue.yaml" + - $ref: "../processes-core/qualifiedValue.yaml" - $ref: "ogcapppkg-array.yaml" diff --git a/openapi/schemas/processes-workflows/execute-workflows.yaml b/openapi/schemas/processes-workflows/execute-workflows.yaml index 2242ba1c..0ccabca3 100644 --- a/openapi/schemas/processes-workflows/execute-workflows.yaml +++ b/openapi/schemas/processes-workflows/execute-workflows.yaml @@ -7,10 +7,18 @@ allOf: description: URI to the process description end point (i.e., `.../processes/{processId}`) inputs: additionalProperties: - $ref: "input-workflows.yaml" + $ref: "values-workflows.yaml" outputs: additionalProperties: - $ref: "output-workflows.yaml" + $ref: "outputSelection-workflows.yaml" subscriber: $ref: "../processes-core/subscriber.yaml" - - $ref: "fieldsModifiers.yaml" + - $ref: "../processes-core/fieldsModifiers.yaml" + - example: + inputs: + data: + - collection: 'https://example.com/collections/sentinel2-l2a' + aliases: + evi: "2.5 * (B08 / 10000 - B04 / 10000) / (1 + B08 / 10000 + 6 * B04 / 10000 + -7.5 * B02 / 10000)" + properties: + - evi diff --git a/openapi/schemas/processes-workflows/fieldsModifiers.yaml b/openapi/schemas/processes-workflows/fieldsModifiers.yaml deleted file mode 100644 index 409ed3d8..00000000 --- a/openapi/schemas/processes-workflows/fieldsModifiers.yaml +++ /dev/null @@ -1,39 +0,0 @@ -type: object -properties: - filter: - oneOf: - - type: string - - $comment: Update with https://github.com/opengeospatial/ogcapi-features/blob/master/cql2/standard/schema/cql2.json if needed. - description: Basic CQL2-JSON definition - type: array - items: - type: object - required: - - op - - args - properties: - op: - type: string - args: - type: {} - filter-lang: - type: string - examples: - - cql2-text - - cql2-json - - fes - filter-crs: - type: string - format: uri-reference - properties: - oneOf: - - type: object - additionalProperties: - type: string - - type: array - items: - type: string - sortBy: - type: array - items: - type: string diff --git a/openapi/schemas/processes-workflows/inlineOrRefData-workflows.yaml b/openapi/schemas/processes-workflows/inlineOrRefData-workflows.yaml deleted file mode 100644 index 54cf2106..00000000 --- a/openapi/schemas/processes-workflows/inlineOrRefData-workflows.yaml +++ /dev/null @@ -1,4 +0,0 @@ -oneOf: - - $ref: "inputValueNoObject-workflows.yaml" - - $ref: "qualifiedInputValue-workflows.yaml" - - $ref: "../common-core/link.yaml" diff --git a/openapi/schemas/processes-workflows/inlineOrRefValue-workflows.yaml b/openapi/schemas/processes-workflows/inlineOrRefValue-workflows.yaml new file mode 100644 index 00000000..3afc36ae --- /dev/null +++ b/openapi/schemas/processes-workflows/inlineOrRefValue-workflows.yaml @@ -0,0 +1,4 @@ +oneOf: + - $ref: "valueNoObject-workflows.yaml" + - $ref: "qualifiedValue-workflows.yaml" + - $ref: "../common-core/link.yaml" diff --git a/openapi/schemas/processes-workflows/input-workflows.yaml b/openapi/schemas/processes-workflows/input-workflows.yaml deleted file mode 100644 index ba29f5a2..00000000 --- a/openapi/schemas/processes-workflows/input-workflows.yaml +++ /dev/null @@ -1,5 +0,0 @@ -oneOf: - - $ref: "inlineOrRefData-workflows.yaml" - - type: array - items: - $ref: "inlineOrRefData-workflows.yaml" diff --git a/openapi/schemas/processes-workflows/inputCollection.yaml b/openapi/schemas/processes-workflows/inputCollection.yaml deleted file mode 100644 index 1a8cae62..00000000 --- a/openapi/schemas/processes-workflows/inputCollection.yaml +++ /dev/null @@ -1,9 +0,0 @@ -allOf: - - type: object - required: - - collection - properties: - collection: - type: string - format: uri-reference - - $ref: fieldsModifiers.yaml diff --git a/openapi/schemas/processes-workflows/inputParameterized.yaml b/openapi/schemas/processes-workflows/inputParameterized.yaml index 171504df..91dd914c 100644 --- a/openapi/schemas/processes-workflows/inputParameterized.yaml +++ b/openapi/schemas/processes-workflows/inputParameterized.yaml @@ -5,4 +5,4 @@ allOf: properties: $input: type: string - - $ref: fieldsModifiers.yaml + - $ref: ../processes-core/fieldsModifiers.yaml diff --git a/openapi/schemas/processes-workflows/inputValue-workflows.yaml b/openapi/schemas/processes-workflows/inputValue-workflows.yaml deleted file mode 100644 index e8e1b724..00000000 --- a/openapi/schemas/processes-workflows/inputValue-workflows.yaml +++ /dev/null @@ -1,3 +0,0 @@ -oneOf: - - $ref: "inputValueNoObject-workflows.yaml" - - type: object diff --git a/openapi/schemas/processes-workflows/output-workflows.yaml b/openapi/schemas/processes-workflows/outputSelection-workflows.yaml similarity index 100% rename from openapi/schemas/processes-workflows/output-workflows.yaml rename to openapi/schemas/processes-workflows/outputSelection-workflows.yaml diff --git a/openapi/schemas/processes-workflows/qualifiedInputValue-workflows.yaml b/openapi/schemas/processes-workflows/qualifiedValue-workflows.yaml similarity index 58% rename from openapi/schemas/processes-workflows/qualifiedInputValue-workflows.yaml rename to openapi/schemas/processes-workflows/qualifiedValue-workflows.yaml index 2bda218e..68f8b567 100644 --- a/openapi/schemas/processes-workflows/qualifiedInputValue-workflows.yaml +++ b/openapi/schemas/processes-workflows/qualifiedValue-workflows.yaml @@ -1,9 +1,9 @@ allOf: - $ref: "../processes-core/format.yaml" - - $ref: "fieldsModifiers.yaml" + - $ref: "../processes-core/fieldsModifiers.yaml" - type: object required: - value properties: value: - $ref: "inputValue-workflows.yaml" + $ref: "value-workflows.yaml" diff --git a/openapi/schemas/processes-workflows/value-workflows.yaml b/openapi/schemas/processes-workflows/value-workflows.yaml new file mode 100644 index 00000000..960e4990 --- /dev/null +++ b/openapi/schemas/processes-workflows/value-workflows.yaml @@ -0,0 +1,3 @@ +oneOf: + - $ref: "valueNoObject-workflows.yaml" + - type: object diff --git a/openapi/schemas/processes-workflows/inputValueNoObject-workflows.yaml b/openapi/schemas/processes-workflows/valueNoObject-workflows.yaml similarity index 66% rename from openapi/schemas/processes-workflows/inputValueNoObject-workflows.yaml rename to openapi/schemas/processes-workflows/valueNoObject-workflows.yaml index 921e54d0..716085ec 100644 --- a/openapi/schemas/processes-workflows/inputValueNoObject-workflows.yaml +++ b/openapi/schemas/processes-workflows/valueNoObject-workflows.yaml @@ -1,12 +1,12 @@ -oneOf: +anyOf: - type: string - type: number - type: integer - type: boolean - type: array items: {} - - $ref: "../processes-core/binaryInputValue.yaml" + - $ref: "../processes-core/binaryValue.yaml" - $ref: "../processes-core/bbox.yaml" - - $ref: "inputCollection.yaml" + - $ref: "../processes-core/collectionValue.yaml" - $ref: "inputProcess.yaml" - $ref: "inputParameterized.yaml" diff --git a/openapi/schemas/processes-workflows/values-workflows.yaml b/openapi/schemas/processes-workflows/values-workflows.yaml new file mode 100644 index 00000000..c8277f86 --- /dev/null +++ b/openapi/schemas/processes-workflows/values-workflows.yaml @@ -0,0 +1,5 @@ +oneOf: + - $ref: "inlineOrRefValue-workflows.yaml" + - type: array + items: + $ref: "inlineOrRefValue-workflows.yaml" diff --git a/openapi/schemas/records-core/contact.yaml b/openapi/schemas/records-core/contact.yaml new file mode 100644 index 00000000..575ac6f0 --- /dev/null +++ b/openapi/schemas/records-core/contact.yaml @@ -0,0 +1,141 @@ +--- +type: object +title: Contact information +description: |- + Identification of, and means of communication with, person responsible + for the resource. +anyOf: + - required: + - name + - required: + - organization +properties: + identifier: + type: string + title: Identifier of the contact + description: A value uniquely identifying a contact. + name: + type: string + title: name of the contact person + description: The name of the responsible person. + position: + type: string + title: position in the organization + description: |- + The name of the role or position of the responsible person taken + from the organization's formal organizational hierarchy or chart. + organization: + type: string + title: Name of the organization + description: Organization/affiliation of the contact. + logo: + title: Logo of the contact + description: |- + Link to a graphic identifying a contact. The link relation should be `icon` + and the media type should be an image media type. + allOf: + - $ref: '../common-core/link.yaml' + - type: object + required: + - rel + - type + properties: + rel: + enum: + - icon + phones: + type: array + title: Telephone numbers + description: Telephone numbers at which contact can be made. + items: + type: object + required: + - value + properties: + value: + type: string + title: Phone number. + description: The value is the phone number itself. + pattern: "^\\+[1-9]{1}[0-9]{3,14}$" + example: "+14165550142" + roles: + title: Type of phone number. + description: The type of phone number (e.g. home, work, fax, etc.). + $ref: 'roles.yaml' + emails: + type: array + title: Email addresses + description: Email addresses at which contact can be made. + items: + type: object + required: + - value + properties: + value: + type: string + title: Email address + description: The value is the email itself. + format: email + roles: + title: Type of email + description: The type of email (e.g. home, work, etc.). + $ref: 'roles.yaml' + addresses: + type: array + title: Postal addresses + description: Physical locations at which contact can be made. + items: + type: object + properties: + deliveryPoint: + type: array + title: Details of the address + description: Address lines for the location (e.g. street name and door number). + items: + type: string + city: + type: string + title: City + description: City for the location. + administrativeArea: + type: string + title: State of province + description: State or province of the location. + postalCode: + type: string + title: Postal code + description: ZIP or other postal code. + country: + type: string + title: Country + description: Country of the physical address. ISO 3166-1 is recommended. + roles: + title: Type of postal address + description: The type of postal address (e.g. office, home, etc.). + $ref: 'roles.yaml' + links: + type: array + title: Links about the contact + description: On-line information about the contact. + items: + allOf: + - $ref: '../common-core/link.yaml' + - type: object + required: + - type + hoursOfService: + type: string + title: Hours of service + description: Time period when the contact can be contacted. + example: "Hours: Mo-Fr 10am-7pm Sa 10am-22pm Su 10am-21pm" + contactInstructions: + type: string + title: Contact instructions + description: Supplemental instructions on how or when to contact can be made. + roles: + title: Types of contact person + description: + The set of named duties, job functions and/or permissions + associated with this contact. + (e.g. developer, administrator, etc.). + $ref: 'roles.yaml' diff --git a/openapi/schemas/records-core/format.yaml b/openapi/schemas/records-core/format.yaml new file mode 100644 index 00000000..560d81d7 --- /dev/null +++ b/openapi/schemas/records-core/format.yaml @@ -0,0 +1,16 @@ +--- +type: object +anyOf: +- required: + - name +- required: + - mediaType +properties: + name: + title: Name of the format + description: Name of the format. + type: string + mediaType: + title: Media type of the format + description: Media type of the format. + type: string diff --git a/openapi/schemas/records-core/language.yaml b/openapi/schemas/records-core/language.yaml new file mode 100644 index 00000000..c14cf08d --- /dev/null +++ b/openapi/schemas/records-core/language.yaml @@ -0,0 +1,42 @@ +--- +type: object +title: Resource language +description: The language used for textual values in this resource. +required: + - code +properties: + code: + type: string + title: Code + description: The language tag as per RFC-5646. + example: el + name: + type: string + minLength: 1 + title: Original name + description: The untranslated name of the language. + example: Ελληνικά + alternate: + type: string + title: Translated name + description: + The name of the language in another well-understood language, + usually English. + example: Greek + dir: + type: string + title: Direction of the text + description: + The direction for text in this language. The default, `ltr` + (left-to-right), represents the most common situation. + However, care should be taken to set the value of `dir` + appropriately if the language direction is not `ltr`. + Other values supported are `rtl` (right-to-left), `ttb` + (top-to-bottom), and `btt` (bottom-to-top). + enum: + - ltr + - rtl + - ttb + - btt + default: + ltr diff --git a/openapi/schemas/records-core/roles.yaml b/openapi/schemas/records-core/roles.yaml new file mode 100644 index 00000000..4681d88d --- /dev/null +++ b/openapi/schemas/records-core/roles.yaml @@ -0,0 +1,9 @@ +--- +title: Types or roles +description: + The list of duties, job functions or permissions assigned by the system + and associated with the context of this member. +type: array +minItems: 1 +items: + type: string diff --git a/openapi/schemas/records-core/theme.yaml b/openapi/schemas/records-core/theme.yaml new file mode 100644 index 00000000..c8645bc0 --- /dev/null +++ b/openapi/schemas/records-core/theme.yaml @@ -0,0 +1,49 @@ +--- +type: object +required: + - concepts + - scheme +properties: + concepts: + type: array + title: List of concepts in the vocabulary + description: + One or more entity/concept identifiers from this knowledge + system. it is recommended that a resolvable URI be used for + each entity/concept identifier. + minItems: 1 + items: + type: object + required: + - id + properties: + id: + type: string + title: Identifier for the concept + description: Identifier for the concept in the knowledge system. + minLength: 1 + title: + type: string + title: Title of the concept + description: A human readable title for the concept. + description: + type: string + title: Description of the concept + description: A human readable description for the concept. + url: + type: string + format: uri + title: URI of the concept + description: A URI providing further description of the concept. It is called "definition" in STA. + scheme: + type: string + title: Identifier of the vocabulary + description: + An identifier for the knowledge organization system used + to classify the resource. It is recommended that the + identifier be a resolvable URI. The list of schemes used + in a searchable catalog can be determined by inspecting + the server's OpenAPI document or, if the server implements + CQL2, by exposing a queryable (e.g. named `scheme`) and + enumerating the list of schemes in the queryable's schema + definition.