diff --git a/.github/redocly/schema-name-prefix.plugin.js b/.github/redocly/schema-name-prefix.plugin.js index 3b43eafe..fbfabdce 100644 --- a/.github/redocly/schema-name-prefix.plugin.js +++ b/.github/redocly/schema-name-prefix.plugin.js @@ -9,6 +9,24 @@ // Store mapping of component objects to their source information const componentSourceMap = new WeakMap(); +const externalDefsRefMap = new WeakMap(); +const externalDefsComponents = new Map(); + +const COMPONENT_FILE_PATTERN = /\/(schemas|responses|parameters|examples|requestBodies|headers|securitySchemes|links|callbacks)\/([^/]+)\/([^/]+)\.yaml$/; +const EXTERNAL_DEFS_PATTERN = /(?:^|\/)schemas\/([^/]+)\/([^/#]+)\.yaml#\/\$defs\/([^/]+)$/; +const DEBUG = process.env.REDOCLY_PLUGIN_DEBUG === "1"; + +function parseExternalDefsRef(ref) { + if (typeof ref !== "string") { + return null; + } + const match = ref.match(EXTERNAL_DEFS_PATTERN); + if (!match) { + return null; + } + const [, directory, filename, defName] = match; + return { directory, filename, defName }; +} const PreserveComponentNamePrefixes = () => { return { @@ -31,16 +49,53 @@ const PreserveComponentNamePrefixes = () => { return; } - // Extract directory and filename from various component paths: - // - schemas/{directory}/{filename}.yaml - // - responses/{directory}/{filename}.yaml - // - parameters/{directory}/{filename}.yaml - // etc. - const match = filePath.match(/\/(schemas|responses|parameters|examples|requestBodies|headers|securitySchemes|links|callbacks)\/([^\/]+)\/([^\/]+)\.yaml$/); + const defsRefMatch = parseExternalDefsRef(node.$ref); + if (defsRefMatch) { + const { directory, filename, defName } = defsRefMatch; + externalDefsRefMap.set(node, { + componentType: "schemas", + filename, + defName, + prefixedName: `${directory}-${defName}` + }); + if (DEBUG) { + console.warn(`[schema-prefix] external defs ref: ${node.$ref} -> ${directory}-${defName}`); + } + } + + // Extract directory and filename from various component paths. + const match = filePath.match(COMPONENT_FILE_PATTERN); if (match) { const [, componentType, directory, filename] = match; - if (directory && directory !== componentType) { + const pointer = location.pointer; + const defsPointerMatch = + componentType === "schemas" && + typeof pointer === "string" && + pointer.match(/^#\/\$defs\/([^/]+)$/); + if (defsPointerMatch) { + const [, defName] = defsPointerMatch; + const prefixedName = `${directory}-${defName}`; + componentSourceMap.set(node, { + componentType, + directory, + filename, + prefixedName + }); + if (!externalDefsComponents.has(prefixedName)) { + externalDefsComponents.set(prefixedName, { + directory, + filename, + defName, + node + }); + if (DEBUG) { + console.warn(`[schema-prefix] external defs node: ${filePath}${pointer} -> ${prefixedName}`); + } + } + } + + if (directory && directory !== componentType && !defsPointerMatch) { // Store the source info for this node componentSourceMap.set(node, { componentType, @@ -73,6 +128,8 @@ const PreserveComponentNamePrefixes = () => { ]; const renameMap = new Map(); + const refRenameMap = new Map(); + const schemaTitleMap = new Map(); // Process each component type for (const componentType of componentTypes) { @@ -86,6 +143,17 @@ const PreserveComponentNamePrefixes = () => { const sourceInfo = componentSourceMap.get(componentContent); if (sourceInfo && sourceInfo.prefixedName) { + if (componentType === "schemas") { + // inject the original schema name as title to display it nicely in OpenAPI Swagger-UI + const prefix = `${sourceInfo.directory}-`; + const inferredTitle = sourceInfo.prefixedName.startsWith(prefix) + ? sourceInfo.prefixedName.slice(prefix.length) + : sourceInfo.prefixedName; + if (inferredTitle) { + schemaTitleMap.set(sourceInfo.prefixedName, inferredTitle); + } + } + // Only rename if the name differs if (componentName !== sourceInfo.prefixedName) { const key = `${componentType}/${componentName}`; @@ -94,6 +162,11 @@ const PreserveComponentNamePrefixes = () => { oldName: componentName, newName: sourceInfo.prefixedName }); + + refRenameMap.set( + `#/components/${componentType}/${componentName}`, + `#/components/${componentType}/${sourceInfo.prefixedName}` + ); } } } @@ -108,45 +181,165 @@ const PreserveComponentNamePrefixes = () => { } } + const defsPrefixMap = new Map(); + for (const [prefixedName, { directory, defName }] of externalDefsComponents.entries()) { + if (!defsPrefixMap.has(directory)) { + defsPrefixMap.set(directory, new Map()); + } + defsPrefixMap.get(directory).set(defName, prefixedName); + } + + function cloneAndRewriteDefsRefs(value, directory) { + if (Array.isArray(value)) { + return value.map((item) => cloneAndRewriteDefsRefs(item, directory)); + } + + if (!value || typeof value !== "object") { + return value; + } + + const cloned = {}; + for (const [key, item] of Object.entries(value)) { + if (key === "$ref" && typeof item === "string") { + const localDefsMatch = item.match(/^#\/\$defs\/([^/]+)$/); + if (localDefsMatch) { + const localDefs = defsPrefixMap.get(directory); + const defName = localDefsMatch[1]; + if (localDefs && localDefs.has(defName)) { + cloned[key] = `#/components/schemas/${localDefs.get(defName)}`; + continue; + } + } + } + cloned[key] = cloneAndRewriteDefsRefs(item, directory); + } + return cloned; + } + + const schemaComponents = root.components.schemas || (root.components.schemas = {}); + for (const [prefixedName, { directory, defName, node }] of externalDefsComponents.entries()) { + if (!schemaComponents[prefixedName]) { + schemaComponents[prefixedName] = cloneAndRewriteDefsRefs(node, directory); + } + if (!schemaTitleMap.has(prefixedName) && defName) { + schemaTitleMap.set(prefixedName, defName); + } + } + + for (const [schemaName, inferredTitle] of schemaTitleMap.entries()) { + const schema = schemaComponents[schemaName]; + if (!schema || typeof schema !== "object" || Array.isArray(schema)) { + continue; + } + if (Object.prototype.hasOwnProperty.call(schema, "title")) { + continue; + } + schema.title = inferredTitle; + } + + const canonicalRefMap = new Map(); + for (const [prefixedName, { directory, filename, defName }] of externalDefsComponents.entries()) { + if (defName !== "CWL") { + continue; + } + const legacyName = `${directory}-${filename}`; + if (legacyName === prefixedName) { + continue; + } + if (schemaComponents[prefixedName]) { + canonicalRefMap.set( + `#/components/schemas/${legacyName}`, + `#/components/schemas/${prefixedName}` + ); + } + } + + if (DEBUG) { + console.warn( + `[schema-prefix] renameMap=${renameMap.size}, externalDefsComponents=${externalDefsComponents.size}` + ); + } + // Update all $ref occurrences throughout the document - function updateRefs(obj) { + function updateRefs(obj, opts = { skipCanonicalAlias: false }) { if (!obj || typeof obj !== 'object') { return; } if (obj.$ref && typeof obj.$ref === 'string') { - for (const [key, { componentType, oldName, newName }] of renameMap.entries()) { - const oldRef = `#/components/${componentType}/${oldName}`; - const newRef = `#/components/${componentType}/${newName}`; - if (obj.$ref === oldRef) { - obj.$ref = newRef; + const mappedExternalRef = externalDefsRefMap.get(obj); + if (mappedExternalRef) { + const promotedRef = `#/components/${mappedExternalRef.componentType}/${mappedExternalRef.prefixedName}`; + if (root.components[mappedExternalRef.componentType] && + root.components[mappedExternalRef.componentType][mappedExternalRef.prefixedName]) { + obj.$ref = promotedRef; + } + } + + if (!opts.skipCanonicalAlias) { + const canonicalRef = canonicalRefMap.get(obj.$ref); + if (canonicalRef) { + obj.$ref = canonicalRef; + } + } + + const renamedRef = refRenameMap.get(obj.$ref); + if (renamedRef) { + obj.$ref = renamedRef; + } + + const externalDefsMatch = obj.$ref.match(EXTERNAL_DEFS_PATTERN); + if (externalDefsMatch) { + const [, directory, , defName] = externalDefsMatch; + const prefixedName = `${directory}-${defName}`; + if (root.components.schemas && root.components.schemas[prefixedName]) { + obj.$ref = `#/components/schemas/${prefixedName}`; } } } // Recursively update refs in nested objects - for (const value of Object.values(obj)) { + for (const [key, value] of Object.entries(obj)) { if (value && typeof value === 'object') { - updateRefs(value); + const skipCanonicalAlias = + obj === schemaComponents && + canonicalRefMap.has(`#/components/schemas/${key}`); + updateRefs(value, { skipCanonicalAlias }); } } } updateRefs(root); + + for (const [legacyRef, canonicalRef] of canonicalRefMap.entries()) { + const legacyName = legacyRef.replace("#/components/schemas/", ""); + const legacySchema = schemaComponents[legacyName]; + if (!legacySchema) { + continue; + } + const isSelfReferentialArray = (items) => + Array.isArray(items) && + items.length > 0 && + items.every((entry) => entry && entry.$ref === legacyRef); + if (isSelfReferentialArray(legacySchema.allOf) || isSelfReferentialArray(legacySchema.oneOf)) { + delete schemaComponents[legacyName]; + if (DEBUG) { + console.warn(`[schema-prefix] removed malformed legacy schema alias: ${legacyName} -> ${canonicalRef}`); + } + } + } } } }; }; -module.exports = { - id: 'schema-prefix', - decorators: { - oas3: { - 'preserve-schema-name-prefixes': PreserveComponentNamePrefixes, +module.exports = function () { + return { + id: 'schema-prefix', + decorators: { + oas3: { + 'preserve-schema-name-prefixes': PreserveComponentNamePrefixes, + } } } }; - - - - diff --git a/openapi/ogcapi-processes.bundled.json b/openapi/ogcapi-processes.bundled.json index 2f945a83..137034e3 100644 --- a/openapi/ogcapi-processes.bundled.json +++ b/openapi/ogcapi-processes.bundled.json @@ -165,17 +165,17 @@ }, "application/cwl": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } }, "application/cwl+json": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } }, "application/cwl+yaml": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } } } @@ -223,17 +223,17 @@ }, "application/cwl": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } }, "application/cwl+json": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } }, "application/cwl+yaml": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } } } @@ -279,17 +279,17 @@ }, "application/cwl": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } }, "application/cwl+json": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } }, "application/cwl+yaml": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } } } @@ -376,17 +376,17 @@ }, "application/cwl": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } }, "application/cwl+json": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } }, "application/cwl+yaml": { "schema": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-CWL" } } } @@ -787,7 +787,8 @@ "components": { "schemas": { "CWLWorkflowStepWhen": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "description": "Condition to execute a step that must evaluate to a boolean-like value.", + "$ref": "#/components/schemas/cwl-CWLExpression" }, "CQL2": { "$ref": "#/components/schemas/cql2-cql2" @@ -1015,1639 +1016,2392 @@ } } }, - "CWLVersion-2": { - "type": "object", - "properties": { - "cwlVersion": { - "type": "string", - "title": "cwlVersion", - "description": "CWL version of the described application package.", - "pattern": "^v\\d+(\\.\\d+(\\.\\d+)*)*$" - } - }, - "required": [ - "cwlVersion" - ] + "schema-2": "{\r\n \"id\": \"http://provenance.ecs.soton.ac.uk/prov-json/schema#\",\r\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\r\n \"description\": \"Schema for a PROV-JSON document\",\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"prefix\": {\r\n \"type\": \"object\",\r\n \"patternProperties\": {\r\n \"^[a-zA-Z0-9_\\\\-]+$\": { \"type\" : \"string\", \"format\": \"uri\" }\r\n }\r\n },\r\n \"entity\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/entity\" }\r\n },\r\n \"activity\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/activity\" }\r\n },\r\n \"agent\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/agent\" }\r\n },\r\n \"wasGeneratedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/generation\" }\r\n },\r\n \"used\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/usage\" }\r\n },\r\n \"wasInformedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/communication\" }\r\n },\r\n \"wasStartedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/start\" }\r\n },\r\n \"wasEndedby\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/end\" }\r\n },\r\n \"wasInvalidatedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/invalidation\" }\r\n },\r\n \"wasDerivedFrom\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/derivation\" }\r\n },\r\n \"wasAttributedTo\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/attribution\" }\r\n },\r\n \"wasAssociatedWith\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/association\" }\r\n },\r\n \"actedOnBehalfOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/delegation\" }\r\n },\r\n \"wasInfluencedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/influence\" }\r\n },\r\n \"specializationOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/specialization\" }\r\n },\r\n \"alternateOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/alternate\" }\r\n },\r\n \"hadMember\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/membership\" }\r\n },\r\n \"bundle\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/bundle\" }\r\n }\r\n },\r\n \"definitions\": {\r\n \"typedLiteral\": {\r\n \"title\": \"PROV-JSON Typed Literal\",\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"$\": { \"type\": \"string\" },\r\n \"type\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"lang\": { \"type\": \"string\" }\r\n },\r\n \"required\": [\"$\"],\r\n \"additionalProperties\": false\r\n },\r\n \"stringLiteral\": {\"type\": \"string\"},\r\n \"numberLiteral\": {\"type\": \"number\"},\r\n \"booleanLiteral\": {\"type\": \"boolean\"},\r\n \"literalArray\": {\r\n \"type\": \"array\",\r\n \"minItems\": 1,\r\n \"items\": {\r\n \"anyOf\": [\r\n { \"$ref\": \"#/definitions/stringLiteral\" },\r\n { \"$ref\": \"#/definitions/numberLiteral\" },\r\n { \"$ref\": \"#/definitions/booleanLiteral\" },\r\n { \"$ref\": \"#/definitions/typedLiteral\" }\r\n ]\r\n }\r\n },\r\n \"attributeValues\": {\r\n \"anyOf\": [\r\n { \"$ref\": \"#/definitions/stringLiteral\" },\r\n { \"$ref\": \"#/definitions/numberLiteral\" },\r\n { \"$ref\": \"#/definitions/booleanLiteral\" },\r\n { \"$ref\": \"#/definitions/typedLiteral\" },\r\n { \"$ref\": \"#/definitions/literalArray\" }\r\n ]\r\n },\r\n \"entity\": {\r\n \"type\": \"object\",\r\n \"title\": \"entity\",\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"agent\": { \"$ref\": \"#/definitions/entity\" },\r\n \"activity\": {\r\n \"type\": \"object\",\r\n \"title\": \"activity\",\r\n \"prov:startTime\": { \"type\": \"string\", \"format\": \"date-time\" },\r\n \"prov:endTime\": { \"type\": \"string\", \"format\": \"date-time\" },\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"generation\": {\r\n \"type\": \"object\",\r\n \"title\": \"generation/usage\",\r\n \"properties\": {\r\n \"prov:entity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:activity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:time\": { \"type\": \"string\", \"format\": \"date-time\" }\r\n },\r\n \"required\": [\"prov:entity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"usage\": {\"$ref\":\"#/definitions/generation\"},\r\n \"communication\":{\r\n \"type\": \"object\",\r\n \"title\": \"communication\",\r\n \"properties\": {\r\n \"prov:informant\": {\"type\": \"string\", \"format\": \"uri\"},\r\n \"prov:informed\": {\"type\": \"string\", \"format\": \"uri\"}\r\n },\r\n \"required\": [\"prov:informant\", \"prov:informed\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"start\":{\r\n \"type\": \"object\",\r\n \"title\": \"start/end\",\r\n \"properties\": {\r\n \"prov:activity\": {\"type\": \"string\", \"format\": \"uri\"},\r\n \"prov:time\": {\"type\": \"string\", \"format\": \"date-time\"},\r\n \"prov:trigger\": {\"type\": \"string\", \"format\": \"uri\"}\r\n },\r\n \"required\": [\"prov:activity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"end\": {\"$ref\":\"#/definitions/start\"},\r\n \"invalidation\":{\r\n \"type\": \"object\",\r\n \"title\": \"invalidation\",\r\n \"properties\": {\r\n \"prov:entity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:time\": { \"type\": \"string\", \"format\": \"date-time\" },\r\n \"prov:activity\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:entity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"derivation\":{\r\n \"type\": \"object\",\r\n \"title\": \"derivation\",\r\n \"properties\": {\r\n \"prov:generatedEntity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:usedEntity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:activity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:generation\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:usage\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:generatedEntity\", \"prov:usedEntity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"attribution\":{\r\n \"type\": \"object\",\r\n \"title\": \"attribution\",\r\n \"properties\": {\r\n \"prov:entity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:agent\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:entity\", \"prov:agent\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"association\": {\r\n \"type\": \"object\",\r\n \"title\": \"association\",\r\n \"properties\": {\r\n \"prov:activity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:agent\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:plan\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:activity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"delegation\": {\r\n \"type\": \"object\",\r\n \"title\": \"delegation\",\r\n \"properties\": {\r\n \"prov:delegate\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:responsible\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:activity\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:delegate\", \"prov:responsible\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"influence\": {\r\n \"type\": \"object\",\r\n \"title\": \"\",\r\n \"properties\": {\r\n \"prov:influencer\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:influencee\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:influencer\", \"prov:influencee\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"specialization\": {\r\n \"type\": \"object\",\r\n \"title\": \"specialization\",\r\n \"properties\": {\r\n \"prov:generalEntity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:specificEntity\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:generalEntity\", \"prov:specificEntity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"alternate\": {\r\n \"type\": \"object\",\r\n \"title\": \"alternate\",\r\n \"properties\": {\r\n \"prov:alternate1\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:alternate2\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:alternate1\", \"prov:alternate2\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"membership\": {\r\n \"type\": \"object\",\r\n \"title\": \"membership\",\r\n \"properties\": {\r\n \"prov:collection\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:entity\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:collection\", \"prov:entity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"bundle\": {\r\n \"type\": \"object\",\r\n \"title\": \"bundle\",\r\n \"properties\":{\r\n \"prefix\": {\r\n \"type\": \"object\",\r\n \"patternProperties\": {\r\n \"^[a-zA-Z0-9_\\\\-]+$\": { \"type\" : \"string\", \"format\": \"uri\" }\r\n }\r\n },\r\n \"entity\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/entity\" }\r\n },\r\n \"activity\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/activity\" }\r\n },\r\n \"agent\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/agent\" }\r\n },\r\n \"wasGeneratedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/generation\" }\r\n },\r\n \"used\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/usage\" }\r\n },\r\n \"wasInformedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/communication\" }\r\n },\r\n \"wasStartedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/start\" }\r\n },\r\n \"wasEndedby\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/end\" }\r\n },\r\n \"wasInvalidatedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/invalidation\" }\r\n },\r\n \"wasDerivedFrom\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/derivation\" }\r\n },\r\n \"wasAttributedTo\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/attribution\" }\r\n },\r\n \"wasAssociatedWith\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/association\" }\r\n },\r\n \"actedOnBehalfOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/delegation\" }\r\n },\r\n \"wasInfluencedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/influence\" }\r\n },\r\n \"specializationOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/specialization\" }\r\n },\r\n \"alternateOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/alternate\" }\r\n },\r\n \"hadMember\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/membership\" }\r\n }\r\n }\r\n }\r\n }\r\n}", + "Context": { + "$id": "#/definitions/Context", + "type": "array", + "title": "The @context Schema", + "items": { + "oneOf": [ + { + "type": "string", + "format": "uri" + }, + { + "type": "object", + "title": "The Items Schema", + "additionalProperties": { + "type": "string" + } + } + ] + } }, - "CWLMetadata-2": { + "QualifiedName": { + "$id": "#/definitions/QualifiedName", + "type": "string", + "title": "The QualifiedName Schema", + "default": "", + "pattern": "(^[A-Za-z0-9_]+:)?(.*)$" + }, + "typed_value": { "type": "object", + "required": [ + "@value", + "@type" + ], "properties": { - "s:keywords": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "@value": { + "type": "string" }, - "version": { - "type": "string", - "title": "version", - "description": "Version of the process.", - "example": "1.2.3", - "pattern": "^\\d+(\\.\\d+(\\.\\d+(\\.[A-Za-z0-9\\-_]+)*)*)*$" + "@type": { + "type": "string" } - } + }, + "additionalProperties": false }, - "CWLDocumentation-2": { + "lang_string": { "type": "object", + "required": [ + "@value" + ], "properties": { - "label": { + "@value": { "type": "string" }, - "doc": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] + "@language": { + "type": "string" } - } + }, + "additionalProperties": false }, - "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." + "ArrayOfValues": { + "$id": "#/definitions/ArrayOfValues", + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/QualifiedName" + }, + { + "$ref": "#/components/schemas/typed_value" + }, + { + "$ref": "#/components/schemas/lang_string" + } + ] + } }, - "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": "#/components/schemas/CWLTextPatternID" - } - ], - "title": "CWLIdentifier", - "description": "Reference to the process identifier." + "ArrayOfLabelValues": { + "$id": "#/definitions/ArrayOfLabelValues", + "type": "array", + "items": { + "$ref": "#/components/schemas/lang_string" + } }, - "cwltool:CUDARequirement": { + "prov:Entity": { "type": "object", - "title": "cwltool:CUDARequirement", + "required": [ + "@type", + "@id" + ], "properties": { - "class": { - "type": "string", - "enum": [ - "cwltool:CUDARequirement" - ] + "@type": { + "pattern": "Entity" }, - "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+$" + "@id": { + "$ref": "#/components/schemas/QualifiedName" }, - "cudaComputeCapability": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "type": { + "$ref": "#/components/schemas/ArrayOfValues" }, - "cudaDeviceCountMin": { - "type": "integer", - "title": "CUDA device count minimum", - "description": "The minimum amount of devices required.", - "default": 1, - "example": 1, - "minimum": 1 + "value": { + "$ref": "#/components/schemas/ArrayOfValues" }, - "cudaDeviceCountMax": { - "type": "integer", - "title": "CUDA device count maximum", - "description": "The maximum amount of devices required.", - "default": 1, - "example": 8, - "minimum": 1 + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, - "required": [ - "cudaVersionMin", - "cudaComputeCapability" - ], "additionalProperties": false }, - "DockerRequirement-2": { + "DateTime": { + "$id": "#/definitions/DateTime", + "type": "string", + "format": "date-time" + }, + "prov:Activity": { "type": "object", - "title": "DockerRequirement", + "required": [ + "@type", + "@id" + ], "properties": { - "class": { - "type": "string", - "enum": [ - "DockerRequirement" - ] + "@type": { + "pattern": "Activity" }, - "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" + "@id": { + "$ref": "#/components/schemas/QualifiedName" }, - "dockerImport": { - "type": "string" + "startTime": { + "$ref": "#/components/schemas/DateTime" }, - "dockerLoad": { - "type": "string" + "endTime": { + "$ref": "#/components/schemas/DateTime" }, - "dockerFile": { - "type": "string" + "type": { + "$ref": "#/components/schemas/ArrayOfValues" }, - "dockerImageId": { - "type": "string" + "location": { + "$ref": "#/components/schemas/ArrayOfValues" }, - "dockerOutputDirectory": { - "type": "string" + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" } }, - "oneOf": [ - { - "required": [ - "dockerPull" - ] - }, - { - "required": [ - "dockerImport" - ] - }, - { - "required": [ - "dockerLoad" - ] - }, - { - "required": [ - "dockerFile" - ] + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } - ], + }, "additionalProperties": false }, - "SoftwarePackage-2": { + "prov:Agent": { "type": "object", + "required": [ + "@type", + "@id" + ], "properties": { - "package": { - "type": "string" + "@type": { + "pattern": "Agent" }, - "version": { - "type": "array", - "items": { - "type": "string" - } + "@id": { + "$ref": "#/components/schemas/QualifiedName" }, - "specs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" - } + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, - "required": [ - "package" - ], "additionalProperties": false }, - "SoftwarePackageSpecs-2": { - "type": "array", - "items": { - "type": "string" - } - }, - "SoftwareRequirement-2": { + "prov:Usage": { "type": "object", + "required": [ + "@type" + ], "properties": { - "class": { - "type": "string", - "enum": [ - "SoftwareRequirement" - ] + "@type": { + "pattern": "Usage" }, - "packages": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/components/schemas/SoftwarePackage-2" - } - }, - { - "type": "object", - "description": "Mapping of 'package' name to its specifications.", - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/components/schemas/SoftwarePackageSpecs-2" - }, - { - "$ref": "#/components/schemas/SoftwarePackage-2" - } - ] - } - } - ] + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "entity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "time": { + "$ref": "#/components/schemas/DateTime" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" } }, - "required": [ - "packages" - ], - "additionalProperties": false - }, - "ShellCommandRequirement-2": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "ShellCommandRequirement" - ] + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, "additionalProperties": false }, - "CWLExpression-2": { - "$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" - }, - "EnvironmentDef-2": { + "prov:Generation": { "type": "object", + "required": [ + "@type" + ], "properties": { - "envName": { - "type": "string", - "minLength": 1 + "@type": { + "pattern": "Generation" }, - "envValue": { - "$ref": "#/components/schemas/CWLExpression-2" + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "entity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "time": { + "$ref": "#/components/schemas/DateTime" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, - "required": [ - "envName", - "envValue" - ], "additionalProperties": false }, - "EnvVarRequirement-2": { + "prov:Attribution": { "type": "object", + "required": [ + "@type" + ], "properties": { - "class": { - "type": "string", - "enum": [ - "EnvVarRequirement" - ] + "@type": { + "pattern": "Attribution" }, - "envDef": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/components/schemas/EnvironmentDef-2" - } - }, - { - "type": "object", - "description": "Mapping of 'envName' to environment value or definition.", - "additionalProperties": { - "oneOf": [ - { - "description": "The 'envValue' specified directly", - "$ref": "#/components/schemas/CWLExpression-2" - }, - { - "$ref": "#/components/schemas/EnvironmentDef-2" - } - ] - } - } - ] + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "entity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "agent": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, - "required": [ - "envDef" - ], "additionalProperties": false }, - "CWLTypeSymbols": { - "type": "array", - "title": "CWLTypeSymbols", - "summary": "Allowed values composing the enum.", - "items": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" - } - }, - "CWLTypeEnum-2": { + "prov:Association": { "type": "object", - "title": "CWLTypeEnum", - "summary": "CWL type as enum of values.", + "required": [ + "@type" + ], "properties": { + "@type": { + "pattern": "Association" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "agent": { + "$ref": "#/components/schemas/QualifiedName" + }, + "plan": { + "$ref": "#/components/schemas/QualifiedName" + }, "type": { - "type": "string", - "title": "type", - "example": "enum", - "enum": [ - "enum" - ] + "$ref": "#/components/schemas/ArrayOfValues" }, - "symbols": { - "$ref": "#/components/schemas/CWLTypeSymbols" + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, + "additionalProperties": false + }, + "prov:Delegation": { + "type": "object", "required": [ - "type", - "symbols" + "@type" ], - "additionalProperties": {} - }, - "CWLTypeDefinition-2": { - "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[]?" - ] - }, - "CWLType-2": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLTypeBase-2" - }, - { - "$ref": "#/components/schemas/CWLTypeList-2" - } - ], - "title": "CWL Type" - }, - "CWLTypeArray-2": { - "type": "object", - "title": "CWLTypeArray", - "summary": "CWL type as list of items.", "properties": { + "@type": { + "pattern": "Delegation" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "delegate": { + "$ref": "#/components/schemas/QualifiedName" + }, + "responsible": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, "type": { - "type": "string", - "title": "type", - "example": "array", - "enum": [ - "array" - ] + "$ref": "#/components/schemas/ArrayOfValues" }, - "items": { - "$ref": "#/components/schemas/CWLType-2" + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, + "additionalProperties": false + }, + "prov:Invalidation": { + "type": "object", "required": [ - "type", - "items" + "@type" ], - "additionalProperties": {} - }, - "CWLInputStdInDefinition-2": { - "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" - ] - }, - "CWLOutputStdOutDefinition-2": { - "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" - ] - }, - "CWLOutputStdErrDefinition-2": { - "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" - ] - }, - "CWLTypeRecordRef-2": { - "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": "#/components/schemas/CWLTypeDefinition-2" - } + "properties": { + "@type": { + "pattern": "Invalidation" }, - { - "not": { - "$ref": "#/components/schemas/CWLInputStdInDefinition-2" - } + "@id": { + "$ref": "#/components/schemas/QualifiedName" }, - { - "not": { - "$ref": "#/components/schemas/CWLOutputStdOutDefinition-2" - } + "entity": { + "$ref": "#/components/schemas/QualifiedName" }, - { - "not": { - "$ref": "#/components/schemas/CWLOutputStdErrDefinition-2" - } + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "time": { + "$ref": "#/components/schemas/DateTime" }, - { - "$ref": "#/components/schemas/cwl-cwl-json-schema" - } - ] - }, - "CWLTypeRecordSchema-2": { - "type": "object", - "properties": { "type": { - "type": "string", - "enum": [ - "record" - ] + "$ref": "#/components/schemas/ArrayOfValues" }, - "fields": { - "$ref": "#/components/schemas/CWLTypeRecordFields-2" + "role": { + "$ref": "#/components/schemas/ArrayOfValues" }, - "name": { - "type": "string" + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" } }, - "required": [ - "type" - ] + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false }, - "CWLTypeBase-2": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLTypeDefinition-2" + "prov:Start": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Start" }, - { - "$ref": "#/components/schemas/CWLTypeArray-2" + "@id": { + "$ref": "#/components/schemas/QualifiedName" }, - { - "$ref": "#/components/schemas/CWLTypeEnum-2" + "activity": { + "$ref": "#/components/schemas/QualifiedName" }, - { - "$ref": "#/components/schemas/CWLTypeRecordRef-2" + "starter": { + "$ref": "#/components/schemas/QualifiedName" }, - { - "$ref": "#/components/schemas/CWLTypeRecordSchema-2" + "trigger": { + "$ref": "#/components/schemas/QualifiedName" + }, + "time": { + "$ref": "#/components/schemas/DateTime" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" } - ], - "title": "CWLTypeBase" - }, - "CWLTypeList-2": { - "type": "array", - "title": "CWLTypeList", - "summary": "Combination of allowed CWL types.", - "items": { - "$ref": "#/components/schemas/CWLTypeBase-2" - } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false }, - "CWLTypeRecordFieldDefBase-2": { + "prov:End": { "type": "object", + "required": [ + "@type" + ], "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": { + "pattern": "End" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "ender": { + "$ref": "#/components/schemas/QualifiedName" + }, + "trigger": { + "$ref": "#/components/schemas/QualifiedName" + }, + "time": { + "$ref": "#/components/schemas/DateTime" }, "type": { - "$ref": "#/components/schemas/CWLType-2" + "$ref": "#/components/schemas/ArrayOfValues" + }, + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" } }, - "required": [ - "type" - ] + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false }, - "CWLFileOnlyParametersConditional-2": { - "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", + "prov:Derivation": { "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": "#/$defs/CWLFileOnlyParameters" - }, - "else": { - "not": { - "properties": { - "secondaryFiles": {}, - "streamable": {}, - "format": {}, - "loadContents": {} - } - } - } - }, - "CWLDirectoryOnlyParametersConditional-2": { - "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": "#/$defs/CWLDirectoryOnlyParameters" - }, - "else": { - "not": { - "properties": { - "loadListing": {} - } - } - } - }, - "CWLTypeRecordFieldDef-2": { - "allOf": [ - { - "$ref": "#/components/schemas/CWLTypeRecordFieldDefBase-2" + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Derivation" }, - { - "$ref": "#/components/schemas/CWLFileOnlyParametersConditional-2" + "@id": { + "$ref": "#/components/schemas/QualifiedName" }, - { - "$ref": "#/components/schemas/CWLDirectoryOnlyParametersConditional-2" - } - ] - }, - "CWLTypeRecordFieldsMap-2": { - "type": "object", - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLType-2" - }, - { - "$ref": "#/components/schemas/CWLTypeRecordFieldDef-2" - } - ] - } - }, - "CWLTypeRecordFieldsItem": { - "allOf": [ - { - "$ref": "#/components/schemas/CWLTypeRecordFieldDef-2" + "activity": { + "$ref": "#/components/schemas/QualifiedName" }, - { - "required": [ - "name" - ] - } - ] - }, - "CWLTypeRecordFieldsList-2": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWLTypeRecordFieldsItem" - } - }, - "CWLTypeRecordFields-2": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLTypeRecordFieldsMap-2" + "generation": { + "$ref": "#/components/schemas/QualifiedName" + }, + "usage": { + "$ref": "#/components/schemas/QualifiedName" + }, + "generatedEntity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "usedEntity": { + "$ref": "#/components/schemas/QualifiedName" }, - { - "$ref": "#/components/schemas/CWLTypeRecordFieldsList-2" - } - ] - }, - "CWLTypeRecordArray-2": { - "type": "object", - "properties": { "type": { - "type": "string", - "enum": [ - "array" - ] + "$ref": "#/components/schemas/ArrayOfValues" }, - "items": { - "$ref": "#/components/schemas/CWLType-2" + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" } }, - "required": [ - "type", - "items" - ] - }, - "CWLImport-2": { - "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" + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, - "required": [ - "$import" - ], "additionalProperties": false }, - "SchemaDefRequirement-2": { + "prov:Alternate": { "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "SchemaDefRequirement" - ] - }, - "types": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLTypeEnum-2" - }, - { - "$ref": "#/components/schemas/CWLTypeRecordSchema-2" - }, - { - "$ref": "#/components/schemas/CWLTypeRecordArray-2" - }, - { - "$ref": "#/components/schemas/CWLImport-2" - } - ] - } - } - }, "required": [ - "types" - ], - "additionalProperties": false - }, - "NullableType": { - "description": "Define a 'null' type that is JSON-schema compliant and helps OpenAPI 3.0 backport compatibility.", - "enum": [ - null + "@type" ], - "nullable": true - }, - "DirectoryListingDirent-2": { - "$comment": "Called 'Dirent' in documentation.", - "type": "object", - "title": "DirectoryListingDirent", "properties": { - "entry": { - "$ref": "#/components/schemas/CWLExpression-2" + "@type": { + "pattern": "Alternate" }, - "entryname": { - "$ref": "#/components/schemas/CWLExpression-2" + "@id": { + "$ref": "#/components/schemas/QualifiedName" }, - "writable": { - "type": "boolean" + "alternate1": { + "$ref": "#/components/schemas/QualifiedName" + }, + "alternate2": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, - "required": [ - "entry" - ], "additionalProperties": false }, - "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\\-.]+$" - }, - "DirectoryListingFileOrDirectory-2": { + "prov:Specialization": { "type": "object", + "required": [ + "@type" + ], "properties": { - "class": { - "type": "string", - "enum": [ - "File", - "Directory" - ] + "@type": { + "pattern": "Specialization" }, - "location": { - "type": "string" + "@id": { + "$ref": "#/components/schemas/QualifiedName" }, - "checksum": { - "$ref": "#/components/schemas/Checksum" + "generalEntity": { + "$ref": "#/components/schemas/QualifiedName" }, - "size": { - "type": "integer", - "minimum": 0 + "specificEntity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, - "required": [ - "class", - "location" - ], "additionalProperties": false }, - "InitialWorkDirListing-2": { - "title": "InitialWorkDirListing", + "QualifiedName+": { + "$id": "#/definitions/QualifiedName+", "oneOf": [ { - "$ref": "#/components/schemas/CWLExpression-2" + "$ref": "#/components/schemas/QualifiedName" }, { "type": "array", - "title": "InitialWorkDirListingItems", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/NullableType" - }, - { - "$ref": "#/components/schemas/CWLExpression-2" - }, - { - "$ref": "#/components/schemas/DirectoryListingDirent-2" - }, - { - "$ref": "#/components/schemas/DirectoryListingFileOrDirectory-2" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/DirectoryListingFileOrDirectory-2" - } - } - ] + "$ref": "#/components/schemas/QualifiedName" } } ] }, - "InitialWorkDirRequirement-2": { + "prov:Membership": { "type": "object", - "title": "InitialWorkDirRequirement", - "properties": { - "class": { - "type": "string", - "enum": [ - "InitialWorkDirRequirement" - ] - }, - "listing": { - "$ref": "#/components/schemas/InitialWorkDirListing-2" - } - }, "required": [ - "listing" + "@type" ], - "additionalProperties": false - }, - "InlineJavascriptRequirement-2": { - "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" - ] + "@type": { + "pattern": "Membership" }, - "expressionLib": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "entity": { + "$ref": "#/components/schemas/QualifiedName+" + }, + "collection": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, "additionalProperties": false }, - "InplaceUpdateRequirement-2": { + "prov:Influence": { "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", + "required": [ + "@type" + ], "properties": { - "class": { - "type": "string", - "enum": [ - "InplaceUpdateRequirement" - ] + "@type": { + "pattern": "Influence" }, - "inplaceUpdate": { - "type": "boolean", - "title": "inplaceUpdate" + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "influencer": { + "$ref": "#/components/schemas/QualifiedName" + }, + "influencee": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, - "required": [ - "inplaceUpdate" - ], "additionalProperties": false }, - "LoadListingRequirement-2": { + "prov:Communication": { "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", + "required": [ + "@type" + ], "properties": { - "class": { - "type": "string", - "enum": [ - "LoadListingRequirement" - ] + "@type": { + "pattern": "Communication" }, - "loadListing": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "informant": { + "$ref": "#/components/schemas/QualifiedName" + }, + "informed": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" } }, - "required": [ - "loadListing" - ], "additionalProperties": false }, - "NetworkAccess-2": { - "title": "NetworkAccess", - "description": "Indicate whether a process requires outgoing IPv4/IPv6 network access.", - "example": true, + "prov:Statement": { "oneOf": [ { - "type": "boolean" + "$ref": "#/components/schemas/prov:Entity" }, { - "$ref": "#/components/schemas/CWLExpression-2" - } - ] - }, - "NetworkAccessRequirement-2": { - "type": "object", - "title": "NetworkAccessRequirement", - "properties": { - "class": { - "type": "string", - "$comment": "Not 'NetworkAccessRequirement'", - "enum": [ - "NetworkAccess" - ] + "$ref": "#/components/schemas/prov:Activity" }, - "networkAccess": { - "$ref": "#/components/schemas/NetworkAccess-2" - } - }, - "required": [ - "networkAccess" - ], - "additionalProperties": false - }, - "ResourceQuantityOrFractional-2": { - "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", - "default": 1, - "minimum": 0 - }, - "ResourceCoresMinimum": { - "oneOf": [ { - "$ref": "#/components/schemas/ResourceQuantityOrFractional-2" + "$ref": "#/components/schemas/prov:Agent" }, { - "$ref": "#/components/schemas/CWLExpression-2" - } - ], - "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": "#/components/schemas/prov:Usage" + }, { - "$ref": "#/components/schemas/ResourceQuantityOrFractional-2" + "$ref": "#/components/schemas/prov:Generation" }, { - "$ref": "#/components/schemas/CWLExpression-2" - } - ], - "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": "#/components/schemas/prov:Attribution" + }, { - "$ref": "#/components/schemas/ResourceQuantityOrFractional-2" + "$ref": "#/components/schemas/prov:Association" }, { - "$ref": "#/components/schemas/CWLExpression-2" - } - ], - "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": "#/components/schemas/prov:Delegation" + }, { - "$ref": "#/components/schemas/ResourceQuantityOrFractional-2" + "$ref": "#/components/schemas/prov:Invalidation" }, { - "$ref": "#/components/schemas/CWLExpression-2" - } - ], - "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": "#/components/schemas/prov:Start" + }, { - "$ref": "#/components/schemas/ResourceQuantityOrFractional-2" + "$ref": "#/components/schemas/prov:End" }, { - "$ref": "#/components/schemas/CWLExpression-2" - } - ], - "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": "#/components/schemas/prov:Derivation" + }, { - "$ref": "#/components/schemas/ResourceQuantityOrFractional-2" + "$ref": "#/components/schemas/prov:Alternate" }, { - "$ref": "#/components/schemas/CWLExpression-2" - } - ], - "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": "#/components/schemas/prov:Specialization" + }, + { + "$ref": "#/components/schemas/prov:Membership" + }, { - "$ref": "#/components/schemas/ResourceQuantityOrFractional-2" + "$ref": "#/components/schemas/prov:Influence" }, { - "$ref": "#/components/schemas/CWLExpression-2" + "$ref": "#/components/schemas/prov:Communication" } + ] + }, + "prov:Bundle": { + "type": "object", + "required": [ + "@type", + "@id", + "@graph", + "@context" ], - "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 + "properties": { + "@type": { + "pattern": "Bundle" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "@context": { + "$ref": "#/components/schemas/Context" + }, + "@graph": { + "type": "array", + "items": { + "$ref": "#/components/schemas/prov:Statement" + } + } + }, + "additionalProperties": false }, - "ResourceOutDirMaximum": { + "prov:StatementOrBundle": { "oneOf": [ { - "$ref": "#/components/schemas/ResourceQuantityOrFractional-2" + "$ref": "#/components/schemas/prov:Statement" }, { - "$ref": "#/components/schemas/CWLExpression-2" + "$ref": "#/components/schemas/prov:Bundle" } - ], - "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-2": { + "prov:Document": { "type": "object", - "title": "ResourceRequirement", - "description": "Specify basic hardware resource requirements\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#ResourceRequirement).\n", + "required": [ + "@context", + "@graph" + ], "properties": { - "class": { - "type": "string", - "enum": [ - "ResourceRequirement" - ] - }, - "coresMin": { - "$ref": "#/components/schemas/ResourceCoresMinimum" - }, - "coresMax": { - "$ref": "#/components/schemas/ResourceCoresMaximum" - }, - "ramMin": { - "$ref": "#/components/schemas/ResourceRAMMinimum" - }, - "ramMax": { - "$ref": "#/components/schemas/ResourceRAMMaximum" - }, - "tmpdirMin": { - "$ref": "#/components/schemas/ResourceTmpDirMinimum" - }, - "tmpdirMax": { - "$ref": "#/components/schemas/ResourceTmpDirMaximum" + "@type": { + "pattern": "Document" }, - "outdirMin": { - "$ref": "#/components/schemas/ResourceOutDirMinimum" + "@context": { + "$ref": "#/components/schemas/Context" }, - "outdirMax": { - "$ref": "#/components/schemas/ResourceOutDirMaximum" - } - }, - "additionalProperties": false - }, - "ScatterFeatureRequirement-2": { - "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" - ] + "@graph": { + "type": "array", + "items": { + "$ref": "#/components/schemas/prov:StatementOrBundle" + } } }, "additionalProperties": false }, - "TimeLimitValue": { - "oneOf": [ - { - "type": "number", - "minimum": 0 - }, - { - "$ref": "#/components/schemas/CWLExpression-2" - } - ], - "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-2": { - "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": { + "schema-3": { + "definitions": { + "DateTime": { + "$id": "#/definitions/DateTime", "type": "string", - "$comment": "not 'ToolTimeLimitRequirement'", - "enum": [ - "ToolTimeLimit" - ] - }, - "timelimit": { - "$ref": "#/components/schemas/TimeLimitValue" - } - }, - "required": [ - "timelimit" - ], - "additionalProperties": false - }, - "EnableReuseValue": { - "oneOf": [ - { - "type": "boolean" + "format": "date-time" }, - { - "$ref": "#/components/schemas/CWLExpression-2" - } - ], - "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-2": { - "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": { + "QualifiedName": { + "$id": "#/definitions/QualifiedName", "type": "string", - "$comment": "Not 'WorkReuseRequirement'.", - "enum": [ - "WorkReuse" - ] + "title": "The QualifiedName Schema", + "default": "", + "pattern": "(^[A-Za-z0-9_]+:)?(.*)$" }, - "enableReuse": { - "$ref": "#/components/schemas/EnableReuseValue" - } - }, - "required": [ - "enableReuse" - ], - "additionalProperties": false - }, - "MultipleInputFeatureRequirement-2": { - "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-2": { - "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-2": { - "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" + "QualifiedName+": { + "$id": "#/definitions/QualifiedName+", + "oneOf": [ + { + "$ref": "#/components/schemas/QualifiedName" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualifiedName" + } + } ] - } - }, - "additionalProperties": false - }, - "CWLRequirementsMap-2": { - "title": "CWLRequirementsMap", - "type": "object", - "properties": { - "cwltool:CUDARequirement": { - "$ref": "#/components/schemas/cwltool:CUDARequirement" }, - "DockerRequirement": { - "$ref": "#/components/schemas/DockerRequirement-2" - }, - "SoftwareRequirement": { - "$ref": "#/components/schemas/SoftwareRequirement-2" - }, - "ShellCommandRequirement": { - "$ref": "#/components/schemas/ShellCommandRequirement-2" - }, - "EnvVarRequirement": { - "$ref": "#/components/schemas/EnvVarRequirement-2" + "non_prov_properties": { + "$id": "#/definitions/non_prov_properties", + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": {} + } }, - "SchemaDefRequirement": { - "$ref": "#/components/schemas/SchemaDefRequirement-2" + "typed_value": { + "type": "object", + "required": [ + "@value", + "@type" + ], + "properties": { + "@value": { + "type": "string" + }, + "@type": { + "type": "string" + } + }, + "additionalProperties": false }, - "InitialWorkDirRequirement": { - "$ref": "#/components/schemas/InitialWorkDirRequirement-2" + "lang_string": { + "type": "object", + "required": [ + "@value" + ], + "properties": { + "@value": { + "type": "string" + }, + "@language": { + "type": "string" + } + }, + "additionalProperties": false }, - "InlineJavascriptRequirement": { - "$ref": "#/components/schemas/InlineJavascriptRequirement-2" + "ArrayOfValues": { + "$id": "#/definitions/ArrayOfValues", + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/QualifiedName" + }, + { + "$ref": "#/components/schemas/typed_value" + }, + { + "$ref": "#/components/schemas/lang_string" + } + ] + } }, - "InplaceUpdateRequirement": { - "$ref": "#/components/schemas/InplaceUpdateRequirement-2" + "ArrayOfLabelValues": { + "$id": "#/definitions/ArrayOfLabelValues", + "type": "array", + "items": { + "$ref": "#/components/schemas/lang_string" + } }, - "LoadListingRequirement": { - "$ref": "#/components/schemas/LoadListingRequirement-2" + "Context": { + "$id": "#/definitions/Context", + "type": "array", + "title": "The @context Schema", + "items": { + "oneOf": [ + { + "type": "string", + "format": "uri" + }, + { + "type": "object", + "title": "The Items Schema", + "additionalProperties": { + "type": "string" + } + } + ] + } }, - "NetworkAccess": { - "$comment": "Not 'NetworkAccessRequirement'", - "$ref": "#/components/schemas/NetworkAccessRequirement-2" + "prov:StatementOrBundle": { + "oneOf": [ + { + "$ref": "#/components/schemas/prov:Statement" + }, + { + "$ref": "#/components/schemas/prov:Bundle" + } + ] }, - "ResourceRequirement": { - "$ref": "#/components/schemas/ResourceRequirement-2" + "prov:Statement": { + "oneOf": [ + { + "$ref": "#/components/schemas/prov:Entity" + }, + { + "$ref": "#/components/schemas/prov:Activity" + }, + { + "$ref": "#/components/schemas/prov:Agent" + }, + { + "$ref": "#/components/schemas/prov:Usage" + }, + { + "$ref": "#/components/schemas/prov:Generation" + }, + { + "$ref": "#/components/schemas/prov:Attribution" + }, + { + "$ref": "#/components/schemas/prov:Association" + }, + { + "$ref": "#/components/schemas/prov:Delegation" + }, + { + "$ref": "#/components/schemas/prov:Invalidation" + }, + { + "$ref": "#/components/schemas/prov:Start" + }, + { + "$ref": "#/components/schemas/prov:End" + }, + { + "$ref": "#/components/schemas/prov:Derivation" + }, + { + "$ref": "#/components/schemas/prov:Alternate" + }, + { + "$ref": "#/components/schemas/prov:Specialization" + }, + { + "$ref": "#/components/schemas/prov:Membership" + }, + { + "$ref": "#/components/schemas/prov:Influence" + }, + { + "$ref": "#/components/schemas/prov:Communication" + } + ] }, - "ScatterFeatureRequirement": { - "$ref": "#/components/schemas/ScatterFeatureRequirement-2" + "prov:Entity": { + "type": "object", + "required": [ + "@type", + "@id" + ], + "properties": { + "@type": { + "pattern": "Entity" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "value": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false }, - "ToolTimeLimit": { - "$comment": "Not 'ToolTimeLimitRequirement'.", - "$ref": "#/components/schemas/ToolTimeLimitRequirement-2" + "prov:Agent": { + "type": "object", + "required": [ + "@type", + "@id" + ], + "properties": { + "@type": { + "pattern": "Agent" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false }, - "WorkReuse": { - "$comment": "Not 'WorkReuseRequirement'.", - "$ref": "#/components/schemas/WorkReuseRequirement-2" + "prov:Activity": { + "type": "object", + "required": [ + "@type", + "@id" + ], + "properties": { + "@type": { + "pattern": "Activity" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "startTime": { + "$ref": "#/components/schemas/DateTime" + }, + "endTime": { + "$ref": "#/components/schemas/DateTime" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false }, - "MultipleInputFeatureRequirement": { - "$ref": "#/components/schemas/MultipleInputFeatureRequirement-2" + "prov:Usage": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Usage" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "entity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "time": { + "$ref": "#/components/schemas/DateTime" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false }, - "StepInputExpressionRequirement": { - "$ref": "#/components/schemas/StepInputExpressionRequirement-2" + "prov:Generation": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Generation" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "entity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "time": { + "$ref": "#/components/schemas/DateTime" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false }, - "SubworkflowFeatureRequirement": { - "$ref": "#/components/schemas/SubworkflowFeatureRequirement-2" + "prov:Invalidation": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Invalidation" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "entity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "time": { + "$ref": "#/components/schemas/DateTime" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Start": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Start" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "starter": { + "$ref": "#/components/schemas/QualifiedName" + }, + "trigger": { + "$ref": "#/components/schemas/QualifiedName" + }, + "time": { + "$ref": "#/components/schemas/DateTime" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:End": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "End" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "ender": { + "$ref": "#/components/schemas/QualifiedName" + }, + "trigger": { + "$ref": "#/components/schemas/QualifiedName" + }, + "time": { + "$ref": "#/components/schemas/DateTime" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "location": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Attribution": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Attribution" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "entity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "agent": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Association": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Association" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "agent": { + "$ref": "#/components/schemas/QualifiedName" + }, + "plan": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "role": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Delegation": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Delegation" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "delegate": { + "$ref": "#/components/schemas/QualifiedName" + }, + "responsible": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Derivation": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Derivation" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "activity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "generation": { + "$ref": "#/components/schemas/QualifiedName" + }, + "usage": { + "$ref": "#/components/schemas/QualifiedName" + }, + "generatedEntity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "usedEntity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Alternate": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Alternate" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "alternate1": { + "$ref": "#/components/schemas/QualifiedName" + }, + "alternate2": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Specialization": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Specialization" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "generalEntity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "specificEntity": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Membership": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Membership" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "entity": { + "$ref": "#/components/schemas/QualifiedName+" + }, + "collection": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Influence": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Influence" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "influencer": { + "$ref": "#/components/schemas/QualifiedName" + }, + "influencee": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Communication": { + "type": "object", + "required": [ + "@type" + ], + "properties": { + "@type": { + "pattern": "Communication" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "informant": { + "$ref": "#/components/schemas/QualifiedName" + }, + "informed": { + "$ref": "#/components/schemas/QualifiedName" + }, + "type": { + "$ref": "#/components/schemas/ArrayOfValues" + }, + "label": { + "$ref": "#/components/schemas/ArrayOfLabelValues" + } + }, + "patternProperties": { + "^[A-Za-z0-9_]+:(.*)$": { + "$ref": "#/definitions/ArrayOfValues" + } + }, + "additionalProperties": false + }, + "prov:Bundle": { + "type": "object", + "required": [ + "@type", + "@id", + "@graph", + "@context" + ], + "properties": { + "@type": { + "pattern": "Bundle" + }, + "@id": { + "$ref": "#/components/schemas/QualifiedName" + }, + "@context": { + "$ref": "#/components/schemas/Context" + }, + "@graph": { + "type": "array", + "items": { + "$ref": "#/components/schemas/prov:Statement" + } + } + }, + "additionalProperties": false + }, + "prov:Document": { + "type": "object", + "required": [ + "@context", + "@graph" + ], + "properties": { + "@type": { + "pattern": "Document" + }, + "@context": { + "$ref": "#/components/schemas/Context" + }, + "@graph": { + "type": "array", + "items": { + "$ref": "#/components/schemas/prov:StatementOrBundle" + } + } + }, + "additionalProperties": false } }, - "additionalProperties": false + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://openprovenance.org/prov-jsonld/schema.json", + "$ref": "#/components/schemas/prov:Document" }, - "CWLRequirementsItem-2": { - "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": "#/components/schemas/cwltool:CUDARequirement" + "common-core-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" + } + } + }, + "title": "confClasses" + }, + "common-core-link": { + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "type": "string" }, - { - "$ref": "#/components/schemas/DockerRequirement-2" + "rel": { + "type": "string", + "example": "service" }, - { - "$ref": "#/components/schemas/SoftwareRequirement-2" + "type": { + "type": "string", + "example": "application/json" }, - { - "$ref": "#/components/schemas/ShellCommandRequirement-2" + "hreflang": { + "type": "string", + "example": "en" }, - { - "$ref": "#/components/schemas/EnvVarRequirement-2" + "title": { + "type": "string" + } + }, + "title": "link" + }, + "common-core-landingPage": { + "type": "object", + "required": [ + "links" + ], + "properties": { + "title": { + "type": "string", + "example": "Example processing server" }, - { - "$ref": "#/components/schemas/SchemaDefRequirement-2" + "description": { + "type": "string", + "example": "Example server implementing the OGC API - Processes 1.0 Standard" }, - { - "$ref": "#/components/schemas/InitialWorkDirRequirement-2" + "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." }, - { - "$ref": "#/components/schemas/InlineJavascriptRequirement-2" + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/common-core-link" + } + } + }, + "title": "landingPage" + }, + "common-core-exception": { + "title": "Exception Schema", + "description": "JSON schema for exceptions based on RFC 7807", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string" }, - { - "$ref": "#/components/schemas/InplaceUpdateRequirement-2" + "title": { + "type": "string" }, - { - "$ref": "#/components/schemas/LoadListingRequirement-2" + "status": { + "type": "integer" }, - { - "$ref": "#/components/schemas/NetworkAccessRequirement-2" + "detail": { + "type": "string" }, - { - "$ref": "#/components/schemas/ResourceRequirement-2" + "instance": { + "type": "string" + } + }, + "additionalProperties": true + }, + "common-geodata-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/common-core-link" + } }, - { - "$ref": "#/components/schemas/ScatterFeatureRequirement-2" + "numberMatched": { + "$ref": "#/components/schemas/common-geodata-numberMatched" }, - { - "$ref": "#/components/schemas/ToolTimeLimitRequirement-2" + "numberReturned": { + "$ref": "#/components/schemas/common-geodata-numberReturned" }, + "collections": { + "type": "array", + "title": "Collections descriptions", + "description": "Descriptions of each collection in this API.", + "items": { + "$ref": "#/components/schemas/common-geodata-collectionDesc" + } + } + }, + "title": "collections" + }, + "common-geodata-collectionDesc": { + "allOf": [ { - "$ref": "#/components/schemas/WorkReuseRequirement-2" + "$ref": "#/components/schemas/common-geodata-collectionProperties" }, { - "$ref": "#/components/schemas/MultipleInputFeatureRequirement-2" - }, + "type": "object", + "properties": { + "extent": { + "$ref": "#/components/schemas/common-geodata-extent" + } + } + } + ], + "title": "collectionDesc" + }, + "common-geodata-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": [ { - "$ref": "#/components/schemas/StepInputExpressionRequirement-2" + "type": "object", + "properties": { + "spatial": { + "$ref": "#/components/schemas/common-geodata-spatialExtent" + }, + "temporal": { + "$ref": "#/components/schemas/common-geodata-temporalExtent" + } + } }, { - "$ref": "#/components/schemas/SubworkflowFeatureRequirement-2" + "anyOf": [ + { + "type": "object", + "description": "General object extension point" + }, + { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/common-geodata-additionalDimensionExtent" + } + } + ] } ] }, - "CWLRequirementsList-2": { - "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": "#/components/schemas/CWLRequirementsItem-2" - } - ] + "common-geodata-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/common-geodata-spatialExtent" + }, + "temporal": { + "$ref": "#/components/schemas/common-geodata-temporalExtent" + } }, - { - "$ref": "#/components/schemas/CWLImport-2" + "additionalProperties": { + "$ref": "#/components/schemas/common-geodata-additionalDimensionExtent" } - ] - } + } + ] }, - "CWLRequirements-2": { - "title": "CWLRequirements", - "description": "Explicit requirement to execute the application package.", + "crs-crs": { + "title": "CRS", "oneOf": [ { - "$ref": "#/components/schemas/CWLRequirementsMap-2" + "description": "Simplification of the object into a url if the other properties are not present", + "type": "string" }, { - "$ref": "#/components/schemas/CWLRequirementsList-2" + "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" + } + ] + } + } + }, + { + "required": [ + "referenceSystem" + ], + "properties": { + "referenceSystem": { + "description": "A reference system data structure as defined in the MD_ReferenceSystem of the ISO 19115", + "type": "object" + } + } + } + ] } ] }, - "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": { + "common-geodata-dataType": { + "anyOf": [ + { + "type": "string" + }, + { "type": "string", "enum": [ - "BuiltinRequirement" + "map", + "vector", + "coverage" ] + } + ], + "title": "dataType" + }, + "common-geodata-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" + }, + "common-geodata-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 + }, + "common-geodata-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-CWL": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLAtomic" }, - "process": { - "$comment": "Builtin process identifier.", - "$ref": "#/components/schemas/CWLTextPatternID" + { + "$ref": "#/components/schemas/cwl-CWLGraph" + }, + { + "$ref": "#/components/schemas/cwl-CWLWorkflow" } - }, - "required": [ - "process", - "class" ], - "additionalProperties": false + "title": "CWL" }, - "WPS1Requirement": { + "cwl-cwltool_CUDARequirement": { "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", + "title": "cwltool:CUDARequirement", "properties": { "class": { "type": "string", "enum": [ - "WPS1Requirement" + "cwltool:CUDARequirement" ] }, - "process": { - "$comment": "Process identifier of the remote WPS provider.", - "$ref": "#/components/schemas/CWLTextPatternID" + "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+$" }, - "provider": { - "description": "WPS provider endpoint.", - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "cudaComputeCapability": { + "$ref": "#/components/schemas/cwl-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": [ - "process", - "provider" + "cudaVersionMin", + "cudaComputeCapability" ], "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" - ] - } + "cwl-CWLAtomic": { + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLVersion" + }, + { + "$ref": "#/components/schemas/cwl-CWLMetadata" + }, + { + "$ref": "#/components/schemas/cwl-CWLDocumentation" + }, + { + "$ref": "#/components/schemas/cwl-CWLAtomicBase" + } + ], + "title": "CWLAtomic" + }, + "cwl-CWLAtomicNested": { + "description": "Same as 'CWLAtomic', but 'cwlVersion' not repeated (only at root).", + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLMetadata" + }, + { + "$ref": "#/components/schemas/cwl-CWLDocumentation" + }, + { + "$ref": "#/components/schemas/cwl-CWLAtomicBase" + } + ], + "title": "CWLAtomicNested" + }, + "cwl-CWLGraph": { + "title": "CWLGraph", + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLVersion" + }, + { + "$ref": "#/components/schemas/cwl-CWLMetadata" + }, + { + "$ref": "#/components/schemas/cwl-CWLDocumentation" + }, + { + "$ref": "#/components/schemas/cwl-CWLGraphBase" + } + ] + }, + "cwl-CWLWorkflow": { + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLVersion" + }, + { + "$ref": "#/components/schemas/cwl-CWLMetadata" + }, + { + "$ref": "#/components/schemas/cwl-CWLDocumentation" + }, + { + "$ref": "#/components/schemas/cwl-CWLWorkflowClass" + }, + { + "$ref": "#/components/schemas/cwl-CWLWorkflowBase" + } + ], + "title": "CWLWorkflow" + }, + "cwl-CWLWorkflowClass": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "Workflow" + ] } }, - "additionalProperties": {} + "title": "CWLWorkflowClass" }, - "CWLHintsMapExtras": { + "cwl-CWLWorkflowBase": { "type": "object", "properties": { - "BuiltinRequirement": { - "$ref": "#/components/schemas/BuiltinRequirement" + "steps": { + "$ref": "#/components/schemas/cwl-CWLWorkflowSteps" }, - "OGCAPIRequirement": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "inputs": { + "$ref": "#/components/schemas/cwl-CWLInputsDefinition" }, - "WPS1Requirement": { - "$ref": "#/components/schemas/WPS1Requirement" + "outputs": { + "$ref": "#/components/schemas/cwl-CWLOutputsDefinition" + }, + "requirements": { + "description": "Technically a different subset, but lots of redefinitions to be done.", + "$ref": "#/components/schemas/cwl-CWLRequirements" + }, + "hints": { + "description": "Technically a different subset, but lots of redefinitions to be done.", + "$ref": "#/components/schemas/cwl-CWLHints" } }, - "additionalProperties": { - "$ref": "#/components/schemas/UnknownRequirement" - } + "title": "CWLWorkflowBase" }, - "CWLHintsMap-2": { - "title": "CWLHintsMap", - "anyOf": [ + "cwl-CWLWorkflowSteps": { + "oneOf": [ { - "$ref": "#/components/schemas/CWLRequirementsMap-2" + "$ref": "#/components/schemas/cwl-CWLWorkflowStepMap" }, { - "$ref": "#/components/schemas/CWLHintsMapExtras" + "$ref": "#/components/schemas/cwl-CWLWorkflowStepList" } - ] + ], + "title": "CWLWorkflowSteps" }, - "CWLHintsItemExtras": { + "cwl-CWLInputsDefinition": { "oneOf": [ { - "$ref": "#/components/schemas/BuiltinRequirement" + "$ref": "#/components/schemas/cwl-CWLInputList" }, { - "$ref": "#/components/schemas/cwl-cwl-json-schema" - }, - { - "$ref": "#/components/schemas/WPS1Requirement" + "description": "Avoid 'oneOf' conflict of generic mapping key strings as input identifier matching against '$import'.", + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLInputMap" + }, + { + "not": { + "$ref": "#/components/schemas/cwl-CWLImport" + } + } + ] }, { - "$ref": "#/components/schemas/UnknownRequirement" + "$ref": "#/components/schemas/cwl-CWLImport" } - ] + ], + "title": "CWLInputsDefinition", + "description": "All inputs available to the Application Package." }, - "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", + "cwl-CWLOutputsDefinition": { "oneOf": [ { - "$ref": "#/components/schemas/CWLRequirementsItem-2" + "$ref": "#/components/schemas/cwl-CWLOutputList" + }, + { + "description": "Avoid 'oneOf' conflict of generic mapping key strings as output identifier matching against '$import'.", + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLOutputMap" + }, + { + "not": { + "$ref": "#/components/schemas/cwl-CWLImport" + } + } + ] }, { - "$ref": "#/components/schemas/CWLHintsItemExtras" + "$ref": "#/components/schemas/cwl-CWLImport" } - ] + ], + "title": "CWLOutputsDefinition", + "description": "All outputs produced by the Application Package." + }, + "cwl-CWLWorkflowStepMap": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepObject" + }, + "title": "CWLWorkflowStepMap" }, - "CWLHintsList-2": { + "cwl-CWLWorkflowStepList": { "type": "array", - "title": "CWLHintsList", "items": { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepItem" + }, + "title": "CWLWorkflowStepList" + }, + "cwl-CWLInputList": { + "type": "array", + "title": "CWLInputList", + "description": "Package inputs defined as items.", + "items": { + "$ref": "#/components/schemas/cwl-CWLInputItem" + } + }, + "cwl-CWLInputMap": { + "type": "object", + "title": "CWLInputMap", + "description": "Package inputs defined as mapping.", + "additionalProperties": { "oneOf": [ { - "allOf": [ + "$ref": "#/components/schemas/cwl-CWLType" + }, + { + "$ref": "#/components/schemas/cwl-CWLInputObject" + }, + { + "$ref": "#/components/schemas/cwl-CWLInputStdIn" + }, + { + "$ref": "#/components/schemas/cwl-CWLImport" + } + ] + } + }, + "cwl-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 + }, + "cwl-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" + }, + "cwl-InitialWorkDirListing": { + "title": "InitialWorkDirListing", + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLExpression" + }, + { + "type": "array", + "title": "InitialWorkDirListingItems", + "items": { + "oneOf": [ { - "$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" + "nullable": true, + "enum": [ + null ] }, { - "$ref": "#/components/schemas/CWLHintsItem" + "$ref": "#/components/schemas/cwl-CWLExpression" + }, + { + "$ref": "#/components/schemas/cwl-DirectoryListingDirent" + }, + { + "$ref": "#/components/schemas/cwl-DirectoryListingFileOrDirectory" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/cwl-DirectoryListingFileOrDirectory" + } } ] - }, - { - "$ref": "#/components/schemas/CWLImport-2" } - ] - } + } + ] + }, + "cwl-CWLRequirementsMap": { + "title": "CWLRequirementsMap", + "type": "object", + "properties": { + "cwltool:CUDARequirement": { + "$ref": "#/components/schemas/cwl-cwltool_CUDARequirement" + }, + "DockerRequirement": { + "$ref": "#/components/schemas/cwl-DockerRequirement" + }, + "SoftwareRequirement": { + "$ref": "#/components/schemas/cwl-SoftwareRequirement" + }, + "ShellCommandRequirement": { + "$ref": "#/components/schemas/cwl-ShellCommandRequirement" + }, + "EnvVarRequirement": { + "$ref": "#/components/schemas/cwl-EnvVarRequirement" + }, + "SchemaDefRequirement": { + "$ref": "#/components/schemas/cwl-SchemaDefRequirement" + }, + "InitialWorkDirRequirement": { + "$ref": "#/components/schemas/cwl-InitialWorkDirRequirement" + }, + "InlineJavascriptRequirement": { + "$ref": "#/components/schemas/cwl-InlineJavascriptRequirement" + }, + "InplaceUpdateRequirement": { + "$ref": "#/components/schemas/cwl-InplaceUpdateRequirement" + }, + "LoadListingRequirement": { + "$ref": "#/components/schemas/cwl-LoadListingRequirement" + }, + "NetworkAccess": { + "allOf": [ + { + "description": "Not 'NetworkAccessRequirement'" + }, + { + "$ref": "#/components/schemas/cwl-NetworkAccessRequirement" + } + ] + }, + "ResourceRequirement": { + "$ref": "#/components/schemas/cwl-ResourceRequirement" + }, + "ScatterFeatureRequirement": { + "$ref": "#/components/schemas/cwl-ScatterFeatureRequirement" + }, + "ToolTimeLimit": { + "allOf": [ + { + "description": "Not 'ToolTimeLimitRequirement'" + }, + { + "$ref": "#/components/schemas/cwl-ToolTimeLimitRequirement" + } + ] + }, + "WorkReuse": { + "allOf": [ + { + "description": "Not 'WorkReuseRequirement'" + }, + { + "$ref": "#/components/schemas/cwl-WorkReuseRequirement" + } + ] + }, + "MultipleInputFeatureRequirement": { + "$ref": "#/components/schemas/cwl-MultipleInputFeatureRequirement" + }, + "StepInputExpressionRequirement": { + "$ref": "#/components/schemas/cwl-StepInputExpressionRequirement" + }, + "SubworkflowFeatureRequirement": { + "$ref": "#/components/schemas/cwl-SubworkflowFeatureRequirement" + } + }, + "additionalProperties": false }, - "CWLHints-2": { + "cwl-CWLRequirements": { + "title": "CWLRequirements", + "description": "Explicit requirement to execute the application package.", "oneOf": [ { - "$ref": "#/components/schemas/CWLHintsMap-2" + "$ref": "#/components/schemas/cwl-CWLRequirementsMap" }, { - "$ref": "#/components/schemas/CWLHintsList-2" + "$ref": "#/components/schemas/cwl-CWLRequirementsList" } - ], - "title": "CWLHints", - "description": "Non-failing additional hints that can help resolve extra requirements." + ] }, - "CWLCommand-2": { + "cwl-CWLCommand": { "oneOf": [ { "type": "string", "title": "String command." }, { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "$ref": "#/components/schemas/cwl-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" }, - "InputBinding-2": { + "cwl-InputBinding": { "type": "object", "title": "Input Binding", "description": "Defines how to specify the input for the command.", @@ -2661,12 +3415,12 @@ "type": "integer" }, { - "$ref": "#/components/schemas/CWLExpression-2" + "$ref": "#/components/schemas/cwl-CWLExpression" } ] }, "valueFrom": { - "$ref": "#/components/schemas/CWLExpression-2" + "$ref": "#/components/schemas/cwl-CWLExpression" }, "itemSeparator": { "type": "string" @@ -2677,2596 +3431,2762 @@ }, "additionalProperties": false }, - "CWLArguments-2": { - "type": "array", - "title": "CWLArguments", - "description": "Base arguments passed to the command.", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/InputBinding-2" - } - ] - } - }, - "CWLInputStdInObjectType-2": { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/CWLInputStdInDefinition-2" - } - }, - "required": [ - "type" - ] - }, - "CWLInputStdIn-2": { - "oneOf": [ + "cwl-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": "#/components/schemas/CWLInputStdInDefinition-2" + "$ref": "#/components/schemas/cwl-CWLInputItemBase" }, { - "$ref": "#/components/schemas/CWLInputStdInObjectType-2" + "$ref": "#/components/schemas/cwl-CWLDefaultTypedConditional" + }, + { + "$ref": "#/components/schemas/cwl-CWLDocumentation" } ] }, - "CWLInputItemBase": { + "cwl-DirectoryListingDirent": { + "description": "Called 'Dirent' in documentation.", "type": "object", + "title": "DirectoryListingDirent", "properties": { - "type": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLType-2" - }, - { - "$ref": "#/components/schemas/CWLInputStdIn-2" - } - ] + "entry": { + "$ref": "#/components/schemas/cwl-CWLExpression" }, - "inputBinding": { - "$ref": "#/components/schemas/InputBinding-2" + "entryname": { + "$ref": "#/components/schemas/cwl-CWLExpression" }, - "id": { - "description": "Identifier of the CWL input.", - "$ref": "#/components/schemas/CWLIdentifier" + "writable": { + "type": "boolean" } }, "required": [ - "type", - "id" - ], - "additionalProperties": {} - }, - "AnyType-2": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "number" + "entry" + ], + "additionalProperties": false + }, + "cwl-DirectoryListingFileOrDirectory": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "File", + "Directory" + ] }, - { + "location": { "type": "string" }, - { - "type": "array", - "items": {} + "checksum": { + "$ref": "#/components/schemas/cwl-Checksum" }, - { - "type": "object" + "size": { + "type": "integer", + "minimum": 0 } - ] + }, + "required": [ + "class", + "location" + ], + "additionalProperties": false, + "title": "DirectoryListingFileOrDirectory" }, - "CWLDefaultTypedConditional-2": { - "$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": "#/components/schemas/AnyType-2" - }, - "default": { - "$ref": "#/components/schemas/AnyType-2" - } - }, - "required": [ - "type" + "cwl-SoftwareRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "SoftwareRequirement" ] }, - { - "$comment": "Explicit \"null\" string.", - "if": { - "properties": { - "type": { - "const": "null" - } - } - }, - "then": { - "properties": { - "default": { - "$ref": "#/$defs/NullableType" - } - } - } - }, - { - "$comment": "Required string.", - "if": { - "properties": { - "type": { - "const": "string" - } - } - }, - "then": { - "properties": { - "default": { - "type": "string" - } - } - } - }, - { - "$comment": "Optional string.", - "if": { - "properties": { - "type": { - "const": "string?" + "packages": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/cwl-SoftwarePackage" } - } - }, - "then": { - "properties": { - "default": { + }, + { + "type": "object", + "description": "Mapping of 'package' name to its specifications.", + "additionalProperties": { "oneOf": [ { - "type": "string" + "$ref": "#/components/schemas/cwl-SoftwarePackageSpecs" }, { - "$ref": "#/$defs/NullableType" + "$ref": "#/components/schemas/cwl-SoftwarePackage" } ] } } - } + ] + } + }, + "required": [ + "packages" + ], + "additionalProperties": false, + "title": "SoftwareRequirement" + }, + "cwl-DockerRequirement": { + "type": "object", + "title": "DockerRequirement", + "properties": { + "class": { + "type": "string", + "enum": [ + "DockerRequirement" + ] }, - { - "$comment": "Required boolean.", - "if": { - "properties": { - "type": { - "const": "boolean" - } - } - }, - "then": { - "properties": { - "default": { - "type": "boolean" - } - } - } + "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" }, - { - "$comment": "Optional boolean.", - "if": { - "properties": { - "type": { - "enum": [ - "double?", - "float?", - "int?", - "integer?", - "long?" - ] - } - } - }, - "then": { - "properties": { - "default": { - "oneOf": [ - { - "type": "number" - }, - { - "$ref": "#/$defs/NullableType" - } - ] - } - } - } + "dockerImport": { + "type": "string" }, - { - "$comment": "Required numeric.", - "if": { - "properties": { - "type": { - "enum": [ - "double", - "float", - "int", - "integer", - "long" - ] - } - } - }, - "then": { - "properties": { - "default": { - "type": "number" - } - } - } + "dockerLoad": { + "type": "string" }, - { - "$comment": "Optional numeric.", - "if": { - "properties": { - "type": { - "enum": [ - "double?", - "float?", - "int?", - "integer?", - "long?" - ] - } - } - }, - "then": { - "properties": { - "default": { - "oneOf": [ - { - "type": "number" - }, - { - "$ref": "#/$defs/NullableType" - } - ] - } - } - } + "dockerFile": { + "type": "string" + }, + "dockerImageId": { + "type": "string" }, + "dockerOutputDirectory": { + "type": "string" + } + }, + "oneOf": [ { - "$comment": "Required enum.", - "if": { - "properties": { - "type": { - "const": "enum" - }, - "symbols": { - "$ref": "#/$defs/CWLTypeSymbols" - } - } - }, - "then": { - "properties": { - "default": { - "type": { - "$ref": "#/$defs/CWLTypeSymbolValues" - } - } - } - } + "required": [ + "dockerPull" + ] }, { - "$comment": "Optional enum.", - "if": { - "properties": { - "type": { - "const": "enum?" - }, - "symbols": { - "$ref": "#/$defs/CWLTypeSymbols" - } - } - }, - "then": { - "properties": { - "default": { - "oneOf": [ - { - "$ref": "#/$defs/CWLTypeSymbolValues" - }, - { - "$ref": "#/$defs/NullableType" - } - ] - } - } - } + "required": [ + "dockerImport" + ] }, { - "$comment": "Required File or Directory.", - "if": { - "properties": { - "type": { - "enum": [ - "Directory", - "File" - ] - } - } - }, - "then": { - "properties": { - "default": { - "$ref": "#/$defs/CWLDefaultLocation" - } - } - } + "required": [ + "dockerLoad" + ] }, { - "$comment": "Optional File or Directory.", - "if": { - "properties": { - "type": { - "enum": [ - "Directory?", - "File?" - ] + "required": [ + "dockerFile" + ] + } + ], + "additionalProperties": false + }, + "cwl-ShellCommandRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "ShellCommandRequirement" + ] + } + }, + "additionalProperties": false, + "title": "ShellCommandRequirement" + }, + "cwl-EnvVarRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "EnvVarRequirement" + ] + }, + "envDef": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/cwl-EnvironmentDef" } - } - }, - "then": { - "properties": { - "default": { + }, + { + "type": "object", + "description": "Mapping of 'envName' to environment value or definition.", + "additionalProperties": { "oneOf": [ { - "$ref": "#/$defs/CWLDefaultLocation" + "description": "The 'envValue' specified directly", + "$ref": "#/components/schemas/cwl-CWLExpression" }, { - "$ref": "#/$defs/NullableType" + "$ref": "#/components/schemas/cwl-EnvironmentDef" } ] } } - } + ] + } + }, + "required": [ + "envDef" + ], + "additionalProperties": false, + "title": "EnvVarRequirement" + }, + "cwl-SchemaDefRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "SchemaDefRequirement" + ] }, - { - "$comment": "Required array of string.", - "if": { + "types": { + "type": "array", + "items": { "oneOf": [ { - "properties": { - "type": { - "const": "string[]" - } - } + "$ref": "#/components/schemas/cwl-CWLTypeEnum" }, { - "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[]" - } - } + "$ref": "#/components/schemas/cwl-CWLTypeRecordSchema" }, { - "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[]" - ] - } - } + "$ref": "#/components/schemas/cwl-CWLTypeRecordArray" }, { - "properties": { - "type": { - "const": "array" - }, - "items": { - "enum": [ - "double", - "float", - "int", - "integer", - "long" - ] - } - } + "$ref": "#/components/schemas/cwl-CWLImport" } ] - }, - "then": { - "properties": { - "default": { - "type": "array", - "items": { - "type": "number" - } - } - } } + } + }, + "required": [ + "types" + ], + "additionalProperties": false, + "title": "SchemaDefRequirement" + }, + "cwl-InitialWorkDirRequirement": { + "type": "object", + "title": "InitialWorkDirRequirement", + "properties": { + "class": { + "type": "string", + "enum": [ + "InitialWorkDirRequirement" + ] }, - { - "$comment": "Required anything (single).", - "if": { - "properties": { - "type": { - "const": "Any" - } - } - }, - "then": { - "properties": { - "default": { - "$comment": "Match anything.", - "$ref": "#/$defs/AnyType" - } - } - } + "listing": { + "$ref": "#/components/schemas/cwl-InitialWorkDirListing" + } + }, + "required": [ + "listing" + ], + "additionalProperties": false + }, + "cwl-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" + ] }, - { - "$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": "#/$defs/AnyType" - } - } - } - } + "expressionLib": { + "$ref": "#/components/schemas/cwl-InlineJavascriptLibraries" } - ] + }, + "required": [ + "expressionLib" + ], + "additionalProperties": false }, - "CWLInputItem-2": { - "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": "#/components/schemas/CWLInputItemBase" + "cwl-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" + ] }, - { - "$ref": "#/components/schemas/CWLDefaultTypedConditional-2" + "inplaceUpdate": { + "type": "boolean", + "title": "inplaceUpdate" + } + }, + "required": [ + "inplaceUpdate" + ], + "additionalProperties": false + }, + "cwl-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" + ] }, - { - "$ref": "#/components/schemas/CWLDocumentation-2" + "loadListing": { + "$ref": "#/components/schemas/cwl-LoadListingEnum" } - ] + }, + "required": [ + "loadListing" + ], + "additionalProperties": false }, - "CWLInputList-2": { - "type": "array", - "title": "CWLInputList", - "description": "Package inputs defined as items.", - "items": { - "$ref": "#/components/schemas/CWLInputItem-2" - } + "cwl-NetworkAccessRequirement": { + "type": "object", + "title": "NetworkAccessRequirement", + "properties": { + "class": { + "type": "string", + "description": "Not 'NetworkAccessRequirement'", + "enum": [ + "NetworkAccess" + ] + }, + "networkAccess": { + "$ref": "#/components/schemas/cwl-NetworkAccess" + } + }, + "required": [ + "networkAccess" + ], + "additionalProperties": false + }, + "cwl-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": "#/components/schemas/cwl-ResourceCoresMinimum" + }, + "coresMax": { + "$ref": "#/components/schemas/cwl-ResourceCoresMaximum" + }, + "ramMin": { + "$ref": "#/components/schemas/cwl-ResourceRAMMinimum" + }, + "ramMax": { + "$ref": "#/components/schemas/cwl-ResourceRAMMaximum" + }, + "tmpdirMin": { + "$ref": "#/components/schemas/cwl-ResourceTmpDirMinimum" + }, + "tmpdirMax": { + "$ref": "#/components/schemas/cwl-ResourceTmpDirMaximum" + }, + "outdirMin": { + "$ref": "#/components/schemas/cwl-ResourceOutDirMinimum" + }, + "outdirMax": { + "$ref": "#/components/schemas/cwl-ResourceOutDirMaximum" + } + }, + "additionalProperties": false + }, + "cwl-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 }, - "CWLInputObjectBase": { + "cwl-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": { - "type": { - "$ref": "#/components/schemas/CWLType-2" + "class": { + "type": "string", + "description": "Not 'WorkReuseRequirement'.", + "enum": [ + "WorkReuse" + ] }, - "inputBinding": { - "$ref": "#/components/schemas/InputBinding-2", - "additionalProperties": {} + "enableReuse": { + "$ref": "#/components/schemas/cwl-EnableReuseValue" } }, "required": [ - "type" + "enableReuse" ], - "additionalProperties": {} - }, - "CWLInputObject": { - "title": "CWLInputObject", - "summary": "CWL type definition with parameters.", - "allOf": [ - { - "$ref": "#/components/schemas/CWLInputObjectBase" - }, - { - "$ref": "#/components/schemas/CWLDefaultTypedConditional-2" - }, - { - "$ref": "#/components/schemas/CWLDocumentation-2" - } - ] + "additionalProperties": false }, - "CWLInputMap-2": { + "cwl-ToolTimeLimitRequirement": { "type": "object", - "title": "CWLInputMap", - "description": "Package inputs defined as mapping.", - "properties": {}, - "required": [], - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLType-2" - }, - { - "$ref": "#/components/schemas/CWLInputObject" - }, - { - "$ref": "#/components/schemas/CWLInputStdIn-2" - }, - { - "$ref": "#/components/schemas/CWLImport-2" - } - ] - } - }, - "CWLInputsDefinition-2": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLInputList-2" - }, - { - "$comment": "Avoid 'oneOf' conflict of generic mapping key strings as input identifier matching against '$import'.", - "allOf": [ - { - "$ref": "#/components/schemas/CWLInputMap-2" - }, - { - "not": { - "$ref": "#/components/schemas/CWLImport-2" - } - } + "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" ] }, - { - "$ref": "#/components/schemas/CWLImport-2" + "timelimit": { + "$ref": "#/components/schemas/cwl-TimeLimitValue" } + }, + "required": [ + "timelimit" ], - "title": "CWLInputsDefinition", - "description": "All inputs available to the Application Package." + "additionalProperties": false }, - "CWLOutputStdOutObjectType-2": { + "cwl-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": { - "type": { - "$ref": "#/components/schemas/CWLOutputStdOutDefinition-2" + "class": { + "type": "string", + "description": "CWL requirement class specification.", + "enum": [ + "MultipleInputFeatureRequirement" + ] } }, - "required": [ - "type" - ] + "additionalProperties": false }, - "CWLOutputStdOut-2": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLOutputStdOutDefinition-2" - }, - { - "$ref": "#/components/schemas/CWLOutputStdOutObjectType-2" + "cwl-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 }, - "CWLOutputStdErrObjectType-2": { + "cwl-SubworkflowFeatureRequirement": { "type": "object", + "title": "SubworkflowFeatureRequirement", + "description": "Indicates that the 'Workflow' must support nested workflows in the 'run' field of 'WorkflowStep'.", "properties": { - "type": { - "$ref": "#/components/schemas/CWLOutputStdErrDefinition-2" + "class": { + "type": "string", + "description": "CWL requirement class specification.", + "enum": [ + "SubworkflowFeatureRequirement" + ] } }, - "required": [ - "type" - ] + "additionalProperties": false }, - "CWLOutputStdErr-2": { + "cwl-CWLHints": { "oneOf": [ { - "$ref": "#/components/schemas/CWLOutputStdErrDefinition-2" + "$ref": "#/components/schemas/cwl-CWLHintsMap" }, { - "$ref": "#/components/schemas/CWLOutputStdErrObjectType-2" + "$ref": "#/components/schemas/cwl-CWLHintsList" } - ] + ], + "title": "CWLHints", + "description": "Non-failing additional hints that can help resolve extra requirements." }, - "OutputBinding": { + "cwl-CWLWorkflowStepDefinition": { "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-2" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWLExpression-2" - } - } - ] + "in": { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepIn" + }, + "run": { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepRun" + }, + "when": { + "$ref": "#/components/schemas/CWLWorkflowStepWhen" + }, + "out": { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepOut" } }, - "additionalProperties": {} + "required": [ + "in", + "run", + "out" + ], + "title": "CWLWorkflowStepDefinition" }, - "CWLOutputItem-2": { + "cwl-CWLWorkflowStepScatter": { "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-2" - }, - { - "$ref": "#/components/schemas/CWLOutputStdOut-2" - }, - { - "$ref": "#/components/schemas/CWLOutputStdErr-2" - } - ] - }, - "outputBinding": { - "$ref": "#/components/schemas/OutputBinding" + "scatter": { + "$ref": "#/components/schemas/cwl-Scatter" }, + "scatterMethod": { + "$ref": "#/components/schemas/cwl-ScatterMethod" + } + }, + "title": "CWLWorkflowStepScatter" + }, + "cwl-CWLWorkflowStepId": { + "type": "object", + "properties": { "id": { - "description": "Identifier of the CWL output.", - "$ref": "#/components/schemas/CWLIdentifier" + "$ref": "#/components/schemas/cwl-CWLIdentifier" } }, "required": [ - "type", "id" ], - "additionalProperties": {} + "title": "CWLWorkflowStepId" + }, + "cwl-CWLHintsMap": { + "title": "CWLHintsMap", + "anyOf": [ + { + "$ref": "#/components/schemas/cwl-CWLRequirementsMap" + }, + { + "$ref": "#/components/schemas/cwl-CWLHintsMapExtras" + } + ] }, - "CWLOutputList-2": { + "cwl-CWLHintsList": { "type": "array", - "title": "CWLOutputList", - "description": "Package outputs defined as items.", + "title": "CWLHintsList", "items": { - "$ref": "#/components/schemas/CWLOutputItem-2" + "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/cwl-CWLHintsItem" + } + ] + }, + { + "$ref": "#/components/schemas/cwl-CWLImport" + } + ] } }, - "CWLOutputObjectBase": { - "type": "object", - "title": "CWLOutputObject", - "summary": "CWL type definition with parameters.", - "properties": { - "type": { - "$ref": "#/components/schemas/CWLType-2" + "cwl-CWLWorkflowStepIn": { + "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepInMap" }, - "outputBinding": { - "$ref": "#/components/schemas/OutputBinding" + { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepInList" } - }, - "required": [ - "type" ], - "additionalProperties": {} + "title": "CWLWorkflowStepIn" }, - "CWLOutputObject-2": { - "allOf": [ + "cwl-CWLWorkflowStepRun": { + "description": "Nested CWL definition to run as Workflow step.", + "oneOf": [ + { + "description": "File or URL reference to a CWL tool definition.", + "type": "string" + }, { - "$ref": "#/components/schemas/CWLDocumentation-2" + "description": "Nested CWL tool definition for the step.", + "$ref": "#/components/schemas/cwl-CWLAtomicNested" }, { - "$ref": "#/components/schemas/CWLOutputObjectBase" + "description": "Nested CWL Workflow definition for the step.", + "$ref": "#/components/schemas/cwl-CWLWorkflowNested" } - ] + ], + "title": "CWLWorkflowStepRun" }, - "CWLOutputMap-2": { - "type": "object", - "title": "CWLOutputMap", - "description": "Package outputs defined as mapping.", - "properties": {}, - "required": [], - "additionalProperties": { + "cwl-CWLWorkflowStepOut": { + "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", + "type": "array", + "items": { "oneOf": [ { - "$ref": "#/components/schemas/CWLType-2" + "$ref": "#/components/schemas/cwl-CWLIdentifier" }, { - "$ref": "#/components/schemas/CWLOutputObject-2" - }, + "$ref": "#/components/schemas/cwl-CWLWorkflowStepOutId" + } + ] + }, + "title": "CWLWorkflowStepOut" + }, + "cwl-CWLWorkflowStepInMap": { + "type": "object", + "additionalProperties": { + "oneOf": [ { - "$ref": "#/components/schemas/CWLOutputStdOut-2" + "type": "string" }, { - "$ref": "#/components/schemas/CWLOutputStdErr-2" + "type": "array", + "items": { + "type": "string" + } }, { - "$ref": "#/components/schemas/CWLImport-2" + "$ref": "#/components/schemas/cwl-CWLWorkflowStepInput" } ] - } + }, + "title": "CWLWorkflowStepInMap" }, - "CWLOutputsDefinition-2": { - "oneOf": [ + "cwl-CWLWorkflowStepInList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepInItem" + }, + "title": "CWLWorkflowStepInList" + }, + "cwl-CWLWorkflowStepInItem": { + "allOf": [ { - "$ref": "#/components/schemas/CWLOutputList-2" + "$ref": "#/components/schemas/cwl-CWLWorkflowStepInputId" }, { - "$comment": "Avoid 'oneOf' conflict of generic mapping key strings as output identifier matching against '$import'.", - "allOf": [ + "$ref": "#/components/schemas/cwl-CWLWorkflowStepInputBase" + }, + { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepInputDefault" + } + ], + "title": "CWLWorkflowStepInItem" + }, + "cwl-CWLWorkflowStepInputId": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/cwl-CWLIdentifier" + } + }, + "required": [ + "id" + ], + "title": "CWLWorkflowStepInputId" + }, + "cwl-CWLWorkflowStepInputBase": { + "type": "object", + "properties": { + "source": { + "oneOf": [ { - "$ref": "#/components/schemas/CWLOutputMap-2" + "type": "string" }, { - "not": { - "$ref": "#/components/schemas/CWLImport-2" + "type": "array", + "items": { + "type": "string" } } ] }, - { - "$ref": "#/components/schemas/CWLImport-2" + "linkMerge": { + "$ref": "#/components/schemas/cwl-LinkMergeMethod" + }, + "valueFrom": { + "$ref": "#/components/schemas/cwl-CWLExpression" } - ], - "title": "CWLOutputsDefinition", - "description": "All outputs produced by the Application Package." + }, + "title": "CWLWorkflowStepInputBase" }, - "CWLScatterMulti": { - "type": "array", - "title": "CWLScatterMulti", - "items": { - "$ref": "#/components/schemas/CWLIdentifier" - } + "cwl-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/cwl-CWLDefault" + } + }, + "title": "CWLWorkflowStepInputDefault" }, - "CWLScatter": { + "cwl-NetworkAccess": { + "title": "NetworkAccess", + "description": "Indicate whether a process requires outgoing IPv4/IPv6 network access.", + "example": true, "oneOf": [ { - "$ref": "#/components/schemas/CWLIdentifier" + "type": "boolean" }, { - "$ref": "#/components/schemas/CWLScatterMulti" + "$ref": "#/components/schemas/cwl-CWLExpression" } - ], - "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" + ] }, - "CWLAtomicBase-2": { + "cwl-EnvironmentDef": { "type": "object", - "title": "CWL atomic definition", - "description": "Direct CWL definition instead of the graph representation.", "properties": { - "id": { - "$ref": "#/components/schemas/CWLIdentifier" - }, - "class": { + "envName": { "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": "#/components/schemas/cwl-cwl-json-schema" - }, - "requirements": { - "$ref": "#/components/schemas/CWLRequirements-2" - }, - "hints": { - "$ref": "#/components/schemas/CWLHints-2" - }, - "baseCommand": { - "$ref": "#/components/schemas/CWLCommand-2" - }, - "arguments": { - "$ref": "#/components/schemas/CWLArguments-2" - }, - "inputs": { - "$ref": "#/components/schemas/CWLInputsDefinition-2" - }, - "outputs": { - "$ref": "#/components/schemas/CWLOutputsDefinition-2" - }, - "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-2" - }, - "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-2" - }, - "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-2" - }, - "scatter": { - "$ref": "#/components/schemas/CWLScatter" + "minLength": 1 }, - "scatterMethod": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "envValue": { + "$ref": "#/components/schemas/cwl-CWLExpression" } }, "required": [ - "class", - "inputs", - "outputs" - ] + "envName", + "envValue" + ], + "additionalProperties": false, + "title": "EnvironmentDef" + }, + "cwl-CWLType": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLTypeBase" + }, + { + "$ref": "#/components/schemas/cwl-CWLTypeList" + } + ], + "title": "CWL Type" }, - "CWLAtomic-2": { + "cwl-CWLOutputObject": { "allOf": [ { - "$ref": "#/components/schemas/CWLVersion-2" + "$ref": "#/components/schemas/cwl-CWLDocumentation" }, { - "$ref": "#/components/schemas/CWLMetadata-2" + "$ref": "#/components/schemas/cwl-CWLOutputObjectBase" + } + ], + "title": "CWLOutputObject" + }, + "cwl-CWLOutputStdOut": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLOutputStdOutDefinition" }, { - "$ref": "#/components/schemas/CWLDocumentation-2" + "$ref": "#/components/schemas/cwl-CWLOutputStdOutObjectType" + } + ], + "title": "CWLOutputStdOut" + }, + "cwl-CWLOutputStdErr": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLOutputStdErrDefinition" }, { - "$ref": "#/components/schemas/CWLAtomicBase-2" + "$ref": "#/components/schemas/cwl-CWLOutputStdErrObjectType" } - ] + ], + "title": "CWLOutputStdErr" }, - "CWLGraphItemBase": { + "cwl-CWLTypeEnum": { "type": "object", - "title": "CWLGraphItem", + "title": "CWLTypeEnum (CWL type as enum of values).", "properties": { - "class": { + "type": { "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.", + "title": "type", + "example": "enum", "enum": [ - "CommandLineTool", - "ExpressionTool", - "Workflow" + "enum" ] }, - "id": { - "$ref": "#/components/schemas/CWLIdentifier" - }, - "intent": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" - }, - "requirements": { - "$ref": "#/components/schemas/CWLRequirements-2" - }, - "hints": { - "$ref": "#/components/schemas/CWLHints-2" - }, - "baseCommand": { - "$ref": "#/components/schemas/CWLCommand-2" - }, - "arguments": { - "$ref": "#/components/schemas/CWLArguments-2" - }, - "inputs": { - "$ref": "#/components/schemas/CWLInputsDefinition-2" - }, - "outputs": { - "$ref": "#/components/schemas/CWLOutputsDefinition-2" - }, - "scatter": { - "$ref": "#/components/schemas/CWLScatter" - }, - "scatterMethod": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "symbols": { + "$ref": "#/components/schemas/cwl-CWLTypeSymbols" } }, "required": [ - "class", - "id", - "inputs", - "outputs" - ], - "additionalProperties": {} + "type", + "symbols" + ] }, - "CWLGraphItem": { - "allOf": [ - { - "$ref": "#/components/schemas/CWLMetadata-2" + "cwl-CWLTypeRecordSchema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "record" + ] }, - { - "$ref": "#/components/schemas/CWLDocumentation-2" + "fields": { + "$ref": "#/components/schemas/cwl-CWLTypeRecordFields" }, - { - "$ref": "#/components/schemas/CWLGraphItemBase" + "name": { + "type": "string" } - ] - }, - "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": "#/components/schemas/CWLGraphItem" }, - "maxItems": 1, - "minItems": 1 + "required": [ + "type" + ], + "title": "CWLTypeRecordSchema" }, - "CWLGraphBase": { + "cwl-CWLTypeRecordArray": { "type": "object", "properties": { - "$graph": { - "$ref": "#/components/schemas/CWLGraphList" + "type": { + "type": "string", + "enum": [ + "array" + ] + }, + "items": { + "$ref": "#/components/schemas/cwl-CWLType" } }, "required": [ - "$graph" + "type", + "items" ], - "additionalProperties": {} + "title": "CWLTypeRecordArray" }, - "CWLGraph-2": { - "title": "CWLGraph", - "allOf": [ + "cwl-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" + ] + }, { - "$ref": "#/components/schemas/CWLVersion-2" + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "boolean", + "boolean?" + ] + }, + "default": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type" + ] }, { - "$ref": "#/components/schemas/CWLMetadata-2" + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "int", + "int?", + "long", + "long?", + "float", + "float?", + "double", + "double?", + "integer", + "integer?" + ] + }, + "default": { + "type": "number", + "nullable": true + } + }, + "required": [ + "type" + ] }, { - "$ref": "#/components/schemas/CWLDocumentation-2" + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "File", + "File?", + "Directory", + "Directory?" + ] + }, + "default": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLDefaultLocation" + }, + { + "nullable": true, + "enum": [ + null + ] + } + ] + } + }, + "required": [ + "type" + ] }, { - "$ref": "#/components/schemas/CWLGraphBase" - } - ] - }, - "CWLWorkflowClass-2": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "Workflow" - ] - } - } - }, - "CWLWorkflowStepInputBase-2": { - "type": "object", - "properties": { - "source": { - "oneOf": [ - { - "type": "string" + "type": "object", + "properties": { + "type": { + "type": "string", + "pattern": "^[a-zA-Z]+\\\\[\\\\]$" }, - { + "default": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/cwl-AnyType" } } + }, + "required": [ + "type" ] }, - "linkMerge": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" - }, - "valueFrom": { - "$ref": "#/components/schemas/CWLExpression-2" - } - } - }, - "AnyLiteralType-2": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "boolean" - }, { - "type": "string" - } - ] - }, - "AnyLiteralList-2": { - "type": "array", - "title": "AnyLiteralList", - "items": { - "$ref": "#/components/schemas/AnyLiteralType-2" - } - }, - "CWLDefaultLocation-2": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "File", - "Directory" + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "array" + ] + }, + "items": { + "$ref": "#/components/schemas/cwl-AnyType" + }, + "default": { + "type": "array", + "items": { + "$ref": "#/components/schemas/cwl-AnyType" + } + } + }, + "required": [ + "type", + "items" ] }, - "path": { - "type": "string" - }, - "location": { - "type": "string" - }, - "basename": { - "type": "string" - }, - "nameroot": { - "type": "string" - } - }, - "required": [ - "class" - ], - "oneOf": [ { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "enum", + "enum?" + ] + }, + "symbols": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "type": "string", + "nullable": true + } + }, "required": [ - "path" + "type", + "symbols" ] }, { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "Any", + "Any?" + ] + }, + "default": { + "$ref": "#/components/schemas/cwl-AnyType" + } + }, "required": [ - "location" + "type" ] } ], - "additionalProperties": false - }, - "CWLDefaultObject-2": { - "type": "object", - "not": { - "$comment": "Avoid false-positive match of default File or Directory location definition.", - "properties": { - "class": { - "type": "string", - "enum": [ - "File", - "Directory" - ] - } - } - }, - "additionalProperties": {} + "title": "CWLDefaultTypedConditional" }, - "CWLDefault-2": { - "title": "CWLDefault", - "description": "Default value of input if not provided for task execution.", + "cwl-CWLTypeBase": { "oneOf": [ { - "$ref": "#/components/schemas/AnyLiteralType-2" - }, - { - "$ref": "#/components/schemas/AnyLiteralList-2" - }, - { - "$ref": "#/components/schemas/CWLDefaultLocation-2" - }, - { - "$ref": "#/components/schemas/CWLDefaultObject-2" + "$ref": "#/components/schemas/cwl-CWLTypeDefinition" }, { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWLDefaultObject-2" - } - } - ] - }, - "CWLWorkflowStepInputDefault-2": { - "$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": "#/components/schemas/CWLDefault-2" - } - } - }, - "CWLWorkflowStepInput": { - "allOf": [ - { - "$ref": "#/components/schemas/CWLWorkflowStepInputBase-2" + "$ref": "#/components/schemas/cwl-CWLTypeArray" }, { - "$ref": "#/components/schemas/CWLWorkflowStepInputDefault-2" - } - ] - }, - "CWLWorkflowStepInMap-2": { - "type": "object", - "additionalProperties": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "$ref": "#/components/schemas/CWLWorkflowStepInput" - } - ] - } - }, - "CWLWorkflowStepInputId-2": { - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/CWLIdentifier" - } - }, - "required": [ - "id" - ] - }, - "CWLWorkflowStepInItem-2": { - "allOf": [ - { - "$ref": "#/components/schemas/CWLWorkflowStepInputId-2" + "$ref": "#/components/schemas/cwl-CWLTypeEnum" }, { - "$ref": "#/components/schemas/CWLWorkflowStepInputBase-2" + "$ref": "#/components/schemas/cwl-CWLTypeRecordRef" }, { - "$ref": "#/components/schemas/CWLWorkflowStepInputDefault-2" + "$ref": "#/components/schemas/cwl-CWLTypeRecordSchema" } - ] + ], + "title": "CWLTypeBase" }, - "CWLWorkflowStepInList-2": { + "cwl-CWLTypeList": { "type": "array", + "title": "CWLTypeList (Combination of allowed CWL types).", "items": { - "$ref": "#/components/schemas/CWLWorkflowStepInItem-2" + "$ref": "#/components/schemas/cwl-CWLTypeBase" } }, - "CWLWorkflowStepIn-2": { - "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", + "cwl-AnyType": { "oneOf": [ { - "$ref": "#/components/schemas/CWLWorkflowStepInMap-2" + "type": "boolean" }, { - "$ref": "#/components/schemas/CWLWorkflowStepInList-2" - } - ] - }, - "CWLAtomicNested-2": { - "$comment": "Same as 'CWLAtomic', but 'cwlVersion' not repeated (only at root).", - "allOf": [ + "type": "number" + }, { - "$ref": "#/components/schemas/CWLMetadata-2" + "type": "string" }, { - "$ref": "#/components/schemas/CWLDocumentation-2" + "type": "array", + "items": {} }, { - "$ref": "#/components/schemas/CWLAtomicBase-2" + "type": "object" } + ], + "title": "AnyType" + }, + "cwl-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[]?" ] }, - "CWLWorkflowBase-2": { + "cwl-CWLTypeArray": { "type": "object", + "title": "CWLTypeArray (CWL type as list of items).", "properties": { - "steps": { - "$ref": "#/components/schemas/CWLWorkflowSteps-2" - }, - "inputs": { - "$ref": "#/components/schemas/CWLInputsDefinition-2" - }, - "outputs": { - "$ref": "#/components/schemas/CWLOutputsDefinition-2" - }, - "requirements": { - "$comment": "Technically a different subset, but lots of redefinitions to be done.", - "$ref": "#/components/schemas/CWLRequirements-2" + "type": { + "type": "string", + "title": "type", + "example": "array", + "enum": [ + "array" + ] }, - "hints": { - "$comment": "Technically a different subset, but lots of redefinitions to be done.", - "$ref": "#/components/schemas/CWLHints-2" + "items": { + "$ref": "#/components/schemas/cwl-CWLType" } - } + }, + "required": [ + "type", + "items" + ] }, - "CWLWorkflowNested": { - "$comment": "Same as 'CWLWorkflow', but 'cwlVersion' not repeated (only at root).", + "cwl-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": [ { - "$ref": "#/components/schemas/CWLMetadata-2" - }, - { - "$ref": "#/components/schemas/CWLDocumentation-2" + "not": { + "$ref": "#/components/schemas/cwl-CWLTypeDefinition" + } }, { - "$ref": "#/components/schemas/CWLWorkflowClass-2" + "not": { + "$ref": "#/components/schemas/cwl-CWLInputStdInDefinition" + } }, { - "$ref": "#/components/schemas/CWLWorkflowBase-2" - } - ] - }, - "CWLWorkflowStepRun-2": { - "description": "Nested CWL definition to run as Workflow step.", - "oneOf": [ - { - "description": "File or URL reference to a CWL tool definition.", - "type": "string" + "not": { + "$ref": "#/components/schemas/cwl-CWLOutputStdOutDefinition" + } }, { - "description": "Nested CWL tool definition for the step.", - "$ref": "#/components/schemas/CWLAtomicNested-2" + "not": { + "$ref": "#/components/schemas/cwl-CWLOutputStdErrDefinition" + } }, { - "description": "Nested CWL Workflow definition for the step.", - "$ref": "#/components/schemas/CWLWorkflowNested" - } - ] - }, - "CWLWorkflowStepOutId": { - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/CWLIdentifier" + "$ref": "#/components/schemas/cwl-CWLTypeRecordRefPattern" } - }, - "required": [ - "id" ], - "additionalProperties": false + "title": "CWLTypeRecordRef" }, - "CWLWorkflowStepOut-2": { - "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", - "type": "array", - "items": { + "cwl-CWLTypeRecordFieldsMap": { + "type": "object", + "additionalProperties": { "oneOf": [ { - "$ref": "#/components/schemas/CWLIdentifier" + "$ref": "#/components/schemas/cwl-CWLType" }, { - "$ref": "#/components/schemas/CWLWorkflowStepOutId" + "$ref": "#/components/schemas/cwl-CWLTypeRecordFieldDef" } ] - } - }, - "CWLWorkflowStepDefinition-2": { - "type": "object", - "properties": { - "in": { - "$ref": "#/components/schemas/CWLWorkflowStepIn-2" - }, - "run": { - "$ref": "#/components/schemas/CWLWorkflowStepRun-2" - }, - "when": { - "$ref": "#/components/schemas/CWLExpression-2" - }, - "out": { - "$ref": "#/components/schemas/CWLWorkflowStepOut-2" - } }, - "required": [ - "in", - "run", - "out" - ] + "title": "CWLTypeRecordFieldsMap" }, - "IdentifierArray": { + "cwl-CWLTypeRecordFieldsList": { "type": "array", - "title": "IdentifierArray", "items": { - "$ref": "#/components/schemas/CWLTextPatternID" + "$ref": "#/components/schemas/cwl-CWLTypeRecordFieldsItem" }, - "minItems": 1 + "title": "CWLTypeRecordFieldsList" }, - "Scatter": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLTextPatternID" - }, - { - "$ref": "#/components/schemas/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" - }, - "CWLWorkflowStepScatter-2": { + "cwl-CWLTypeRecordFieldDefBase": { "type": "object", "properties": { - "scatter": { - "$ref": "#/components/schemas/Scatter" - }, - "scatterMethod": { - "$ref": "#/components/schemas/cwl-cwl-json-schema" - } - } - }, - "CWLWorkflowStepObject-2": { - "allOf": [ - { - "$ref": "#/components/schemas/CWLWorkflowStepDefinition-2" + "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" }, - { - "$ref": "#/components/schemas/CWLWorkflowStepScatter-2" - } - ] - }, - "CWLWorkflowStepMap-2": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CWLWorkflowStepObject-2" - } - }, - "CWLWorkflowStepId-2": { - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/CWLIdentifier" + "type": { + "$ref": "#/components/schemas/cwl-CWLType" } }, "required": [ - "id" - ] + "type" + ], + "title": "CWLTypeRecordFieldDefBase" }, - "CWLWorkflowStepItem": { - "allOf": [ + "cwl-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/CWLWorkflowStepId-2" + "$ref": "#/components/schemas/cwl-CWLFileOnlyParameters" }, { - "$ref": "#/components/schemas/CWLWorkflowStepObject-2" + "not": { + "properties": { + "secondaryFiles": {}, + "streamable": {}, + "format": {}, + "loadContents": {} + } + } } - ] - }, - "CWLWorkflowStepList-2": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWLWorkflowStepItem" - } + ], + "title": "CWLFileOnlyParametersConditional" }, - "CWLWorkflowSteps-2": { + "cwl-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": [ { - "$ref": "#/components/schemas/CWLWorkflowStepMap-2" + "$ref": "#/components/schemas/cwl-CWLDirectoryOnlyParameters" }, { - "$ref": "#/components/schemas/CWLWorkflowStepList-2" + "not": { + "properties": { + "loadListing": {} + } + } } - ] + ], + "title": "CWLDirectoryOnlyParametersConditional" }, - "CWLWorkflow-2": { - "allOf": [ - { - "$ref": "#/components/schemas/CWLVersion-2" - }, - { - "$ref": "#/components/schemas/CWLMetadata-2" + "cwl-CWLFileOnlyParameters": { + "type": "object", + "properties": { + "secondaryFiles": { + "$ref": "#/components/schemas/cwl-CWLTypeRecordSecondaryFiles" }, - { - "$ref": "#/components/schemas/CWLDocumentation-2" + "streamable": { + "type": "boolean" }, - { - "$ref": "#/components/schemas/CWLWorkflowClass-2" + "format": { + "$ref": "#/components/schemas/cwl-CWLFormat" }, - { - "$ref": "#/components/schemas/CWLWorkflowBase-2" + "loadContents": { + "type": "boolean" } - ] + }, + "title": "CWLFileOnlyParameters" }, - "CWL-2": { + "cwl-CWLTypeRecordSecondaryFiles": { "oneOf": [ { - "$ref": "#/components/schemas/CWLAtomic-2" + "description": "Either an expression or the regex pattern directly.", + "$ref": "#/components/schemas/cwl-CWLExpression" }, { - "$ref": "#/components/schemas/CWLGraph-2" + "$ref": "#/components/schemas/cwl-CWLTypeRecordSecondaryFileSchema" }, { - "$ref": "#/components/schemas/CWLWorkflow-2" - } - ] - }, - "schema-2": "{\r\n \"id\": \"http://provenance.ecs.soton.ac.uk/prov-json/schema#\",\r\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\r\n \"description\": \"Schema for a PROV-JSON document\",\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"prefix\": {\r\n \"type\": \"object\",\r\n \"patternProperties\": {\r\n \"^[a-zA-Z0-9_\\\\-]+$\": { \"type\" : \"string\", \"format\": \"uri\" }\r\n }\r\n },\r\n \"entity\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/entity\" }\r\n },\r\n \"activity\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/activity\" }\r\n },\r\n \"agent\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/agent\" }\r\n },\r\n \"wasGeneratedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/generation\" }\r\n },\r\n \"used\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/usage\" }\r\n },\r\n \"wasInformedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/communication\" }\r\n },\r\n \"wasStartedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/start\" }\r\n },\r\n \"wasEndedby\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/end\" }\r\n },\r\n \"wasInvalidatedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/invalidation\" }\r\n },\r\n \"wasDerivedFrom\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/derivation\" }\r\n },\r\n \"wasAttributedTo\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/attribution\" }\r\n },\r\n \"wasAssociatedWith\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/association\" }\r\n },\r\n \"actedOnBehalfOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/delegation\" }\r\n },\r\n \"wasInfluencedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/influence\" }\r\n },\r\n \"specializationOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/specialization\" }\r\n },\r\n \"alternateOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/alternate\" }\r\n },\r\n \"hadMember\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/membership\" }\r\n },\r\n \"bundle\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/bundle\" }\r\n }\r\n },\r\n \"definitions\": {\r\n \"typedLiteral\": {\r\n \"title\": \"PROV-JSON Typed Literal\",\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"$\": { \"type\": \"string\" },\r\n \"type\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"lang\": { \"type\": \"string\" }\r\n },\r\n \"required\": [\"$\"],\r\n \"additionalProperties\": false\r\n },\r\n \"stringLiteral\": {\"type\": \"string\"},\r\n \"numberLiteral\": {\"type\": \"number\"},\r\n \"booleanLiteral\": {\"type\": \"boolean\"},\r\n \"literalArray\": {\r\n \"type\": \"array\",\r\n \"minItems\": 1,\r\n \"items\": {\r\n \"anyOf\": [\r\n { \"$ref\": \"#/definitions/stringLiteral\" },\r\n { \"$ref\": \"#/definitions/numberLiteral\" },\r\n { \"$ref\": \"#/definitions/booleanLiteral\" },\r\n { \"$ref\": \"#/definitions/typedLiteral\" }\r\n ]\r\n }\r\n },\r\n \"attributeValues\": {\r\n \"anyOf\": [\r\n { \"$ref\": \"#/definitions/stringLiteral\" },\r\n { \"$ref\": \"#/definitions/numberLiteral\" },\r\n { \"$ref\": \"#/definitions/booleanLiteral\" },\r\n { \"$ref\": \"#/definitions/typedLiteral\" },\r\n { \"$ref\": \"#/definitions/literalArray\" }\r\n ]\r\n },\r\n \"entity\": {\r\n \"type\": \"object\",\r\n \"title\": \"entity\",\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"agent\": { \"$ref\": \"#/definitions/entity\" },\r\n \"activity\": {\r\n \"type\": \"object\",\r\n \"title\": \"activity\",\r\n \"prov:startTime\": { \"type\": \"string\", \"format\": \"date-time\" },\r\n \"prov:endTime\": { \"type\": \"string\", \"format\": \"date-time\" },\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"generation\": {\r\n \"type\": \"object\",\r\n \"title\": \"generation/usage\",\r\n \"properties\": {\r\n \"prov:entity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:activity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:time\": { \"type\": \"string\", \"format\": \"date-time\" }\r\n },\r\n \"required\": [\"prov:entity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"usage\": {\"$ref\":\"#/definitions/generation\"},\r\n \"communication\":{\r\n \"type\": \"object\",\r\n \"title\": \"communication\",\r\n \"properties\": {\r\n \"prov:informant\": {\"type\": \"string\", \"format\": \"uri\"},\r\n \"prov:informed\": {\"type\": \"string\", \"format\": \"uri\"}\r\n },\r\n \"required\": [\"prov:informant\", \"prov:informed\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"start\":{\r\n \"type\": \"object\",\r\n \"title\": \"start/end\",\r\n \"properties\": {\r\n \"prov:activity\": {\"type\": \"string\", \"format\": \"uri\"},\r\n \"prov:time\": {\"type\": \"string\", \"format\": \"date-time\"},\r\n \"prov:trigger\": {\"type\": \"string\", \"format\": \"uri\"}\r\n },\r\n \"required\": [\"prov:activity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"end\": {\"$ref\":\"#/definitions/start\"},\r\n \"invalidation\":{\r\n \"type\": \"object\",\r\n \"title\": \"invalidation\",\r\n \"properties\": {\r\n \"prov:entity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:time\": { \"type\": \"string\", \"format\": \"date-time\" },\r\n \"prov:activity\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:entity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"derivation\":{\r\n \"type\": \"object\",\r\n \"title\": \"derivation\",\r\n \"properties\": {\r\n \"prov:generatedEntity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:usedEntity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:activity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:generation\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:usage\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:generatedEntity\", \"prov:usedEntity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"attribution\":{\r\n \"type\": \"object\",\r\n \"title\": \"attribution\",\r\n \"properties\": {\r\n \"prov:entity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:agent\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:entity\", \"prov:agent\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"association\": {\r\n \"type\": \"object\",\r\n \"title\": \"association\",\r\n \"properties\": {\r\n \"prov:activity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:agent\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:plan\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:activity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"delegation\": {\r\n \"type\": \"object\",\r\n \"title\": \"delegation\",\r\n \"properties\": {\r\n \"prov:delegate\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:responsible\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:activity\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:delegate\", \"prov:responsible\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"influence\": {\r\n \"type\": \"object\",\r\n \"title\": \"\",\r\n \"properties\": {\r\n \"prov:influencer\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:influencee\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:influencer\", \"prov:influencee\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"specialization\": {\r\n \"type\": \"object\",\r\n \"title\": \"specialization\",\r\n \"properties\": {\r\n \"prov:generalEntity\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:specificEntity\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:generalEntity\", \"prov:specificEntity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"alternate\": {\r\n \"type\": \"object\",\r\n \"title\": \"alternate\",\r\n \"properties\": {\r\n \"prov:alternate1\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:alternate2\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:alternate1\", \"prov:alternate2\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"membership\": {\r\n \"type\": \"object\",\r\n \"title\": \"membership\",\r\n \"properties\": {\r\n \"prov:collection\": { \"type\": \"string\", \"format\": \"uri\" },\r\n \"prov:entity\": { \"type\": \"string\", \"format\": \"uri\" }\r\n },\r\n \"required\": [\"prov:collection\", \"prov:entity\"],\r\n \"additionalProperties\": { \"$ref\": \"#/definitions/attributeValues\" }\r\n },\r\n \"bundle\": {\r\n \"type\": \"object\",\r\n \"title\": \"bundle\",\r\n \"properties\":{\r\n \"prefix\": {\r\n \"type\": \"object\",\r\n \"patternProperties\": {\r\n \"^[a-zA-Z0-9_\\\\-]+$\": { \"type\" : \"string\", \"format\": \"uri\" }\r\n }\r\n },\r\n \"entity\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/entity\" }\r\n },\r\n \"activity\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/activity\" }\r\n },\r\n \"agent\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/agent\" }\r\n },\r\n \"wasGeneratedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/generation\" }\r\n },\r\n \"used\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/usage\" }\r\n },\r\n \"wasInformedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/communication\" }\r\n },\r\n \"wasStartedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/start\" }\r\n },\r\n \"wasEndedby\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/end\" }\r\n },\r\n \"wasInvalidatedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/invalidation\" }\r\n },\r\n \"wasDerivedFrom\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/derivation\" }\r\n },\r\n \"wasAttributedTo\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/attribution\" }\r\n },\r\n \"wasAssociatedWith\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/association\" }\r\n },\r\n \"actedOnBehalfOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/delegation\" }\r\n },\r\n \"wasInfluencedBy\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/influence\" }\r\n },\r\n \"specializationOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/specialization\" }\r\n },\r\n \"alternateOf\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/alternate\" }\r\n },\r\n \"hadMember\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": { \"$ref\":\"#/definitions/membership\" }\r\n }\r\n }\r\n }\r\n }\r\n}", - "Context": { - "$id": "#/definitions/Context", - "type": "array", - "title": "The @context Schema", - "items": { - "oneOf": [ - { - "type": "string", - "format": "uri" - }, - { - "type": "object", - "title": "The Items Schema", - "additionalProperties": { - "type": "string" - } + "type": "array", + "items": { + "description": "Either an expression or the regex pattern directly.", + "$ref": "#/components/schemas/cwl-CWLExpression" } - ] - } - }, - "QualifiedName": { - "$id": "#/definitions/QualifiedName", - "type": "string", - "title": "The QualifiedName Schema", - "default": "", - "pattern": "(^[A-Za-z0-9_]+:)?(.*)$" - }, - "typed_value": { - "type": "object", - "required": [ - "@value", - "@type" - ], - "properties": { - "@value": { - "type": "string" }, - "@type": { - "type": "string" + { + "type": "array", + "items": { + "$ref": "#/components/schemas/cwl-CWLTypeRecordSecondaryFileSchema" + } } - }, - "additionalProperties": false + ], + "title": "CWLTypeRecordSecondaryFiles" }, - "lang_string": { + "cwl-CWLTypeRecordSecondaryFileSchema": { "type": "object", - "required": [ - "@value" - ], "properties": { - "@value": { - "type": "string" + "pattern": { + "description": "Either an expression or the regex pattern directly.", + "$ref": "#/components/schemas/cwl-CWLExpression" }, - "@language": { - "type": "string" + "required": { + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/cwl-CWLExpression" + } + ] } }, - "additionalProperties": false + "required": [ + "pattern" + ], + "additionalProperties": false, + "title": "CWLTypeRecordSecondaryFileSchema" }, - "ArrayOfValues": { - "$id": "#/definitions/ArrayOfValues", + "cwl-CWLRequirementsList": { "type": "array", + "title": "CWLRequirementsList", "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/QualifiedName" - }, + "oneOf": [ { - "$ref": "#/components/schemas/typed_value" + "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/cwl-CWLRequirementsItem" + } + ] }, { - "$ref": "#/components/schemas/lang_string" + "$ref": "#/components/schemas/cwl-CWLImport" } ] } }, - "ArrayOfLabelValues": { - "$id": "#/definitions/ArrayOfLabelValues", - "type": "array", - "items": { - "$ref": "#/components/schemas/lang_string" - } - }, - "prov:Entity": { - "type": "object", - "required": [ - "@type", - "@id" - ], - "properties": { - "@type": { - "pattern": "Entity" + "cwl-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/cwl-cwltool_CUDARequirement" }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" + { + "$ref": "#/components/schemas/cwl-DockerRequirement" }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "$ref": "#/components/schemas/cwl-SoftwareRequirement" }, - "value": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "$ref": "#/components/schemas/cwl-ShellCommandRequirement" }, - "location": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "$ref": "#/components/schemas/cwl-EnvVarRequirement" }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" - } - }, - "additionalProperties": false - }, - "DateTime": { - "$id": "#/definitions/DateTime", - "type": "string", - "format": "date-time" - }, - "prov:Activity": { - "type": "object", - "required": [ - "@type", - "@id" - ], - "properties": { - "@type": { - "pattern": "Activity" + { + "$ref": "#/components/schemas/cwl-SchemaDefRequirement" }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" + { + "$ref": "#/components/schemas/cwl-InitialWorkDirRequirement" }, - "startTime": { - "$ref": "#/components/schemas/DateTime" + { + "$ref": "#/components/schemas/cwl-InlineJavascriptRequirement" }, - "endTime": { - "$ref": "#/components/schemas/DateTime" + { + "$ref": "#/components/schemas/cwl-InplaceUpdateRequirement" }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "$ref": "#/components/schemas/cwl-LoadListingRequirement" }, - "location": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "$ref": "#/components/schemas/cwl-NetworkAccessRequirement" }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" - } - }, - "additionalProperties": false - }, - "prov:Agent": { - "type": "object", - "required": [ - "@type", - "@id" - ], - "properties": { - "@type": { - "pattern": "Agent" + { + "$ref": "#/components/schemas/cwl-ResourceRequirement" }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" + { + "$ref": "#/components/schemas/cwl-ScatterFeatureRequirement" }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "$ref": "#/components/schemas/cwl-ToolTimeLimitRequirement" }, - "location": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "$ref": "#/components/schemas/cwl-WorkReuseRequirement" }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" + { + "$ref": "#/components/schemas/cwl-MultipleInputFeatureRequirement" + }, + { + "$ref": "#/components/schemas/cwl-StepInputExpressionRequirement" + }, + { + "$ref": "#/components/schemas/cwl-SubworkflowFeatureRequirement" } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" + ] + }, + "cwl-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" + ], + "title": "CWLOutputStdOutDefinition" + }, + "cwl-CWLOutputStdOutObjectType": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/cwl-CWLOutputStdOutDefinition" } }, - "additionalProperties": false + "required": [ + "type" + ], + "title": "CWLOutputStdOutObjectType" }, - "prov:Usage": { + "cwl-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" + ], + "title": "CWLOutputStdErrDefinition" + }, + "cwl-CWLOutputStdErrObjectType": { "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/cwl-CWLOutputStdErrDefinition" + } + }, "required": [ - "@type" + "type" ], - "properties": { - "@type": { - "pattern": "Usage" + "title": "CWLOutputStdErrObjectType" + }, + "cwl-CWLTypeRecordFieldDef": { + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLTypeRecordFieldDefBase" }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" + { + "$ref": "#/components/schemas/cwl-CWLFileOnlyParametersConditional" }, - "entity": { - "$ref": "#/components/schemas/QualifiedName" + { + "$ref": "#/components/schemas/cwl-CWLDirectoryOnlyParametersConditional" + } + ], + "title": "CWLTypeRecordFieldDef" + }, + "cwl-CWLDefault": { + "title": "CWLDefault", + "description": "Default value of input if not provided for task execution.", + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-AnyLiteralType" }, - "activity": { - "$ref": "#/components/schemas/QualifiedName" + { + "$ref": "#/components/schemas/cwl-AnyLiteralList" }, - "time": { - "$ref": "#/components/schemas/DateTime" + { + "$ref": "#/components/schemas/cwl-CWLDefaultLocation" }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "$ref": "#/components/schemas/cwl-CWLDefaultObject" }, - "role": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "type": "array", + "items": { + "$ref": "#/components/schemas/cwl-CWLDefaultObject" + } + } + ] + }, + "cwl-AnyLiteralType": { + "oneOf": [ + { + "type": "number" }, - "location": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "type": "boolean" }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" + { + "type": "string" } - }, - "additionalProperties": false + ], + "title": "AnyLiteralType" }, - "prov:Generation": { + "cwl-AnyLiteralList": { + "type": "array", + "title": "AnyLiteralList", + "items": { + "$ref": "#/components/schemas/cwl-AnyLiteralType" + } + }, + "cwl-CWLDefaultLocation": { "type": "object", - "required": [ - "@type" - ], "properties": { - "@type": { - "pattern": "Generation" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" - }, - "entity": { - "$ref": "#/components/schemas/QualifiedName" - }, - "activity": { - "$ref": "#/components/schemas/QualifiedName" + "class": { + "type": "string", + "enum": [ + "File", + "Directory" + ] }, - "time": { - "$ref": "#/components/schemas/DateTime" + "path": { + "type": "string" }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + "location": { + "type": "string" }, - "role": { - "$ref": "#/components/schemas/ArrayOfValues" + "basename": { + "type": "string" }, - "location": { - "$ref": "#/components/schemas/ArrayOfValues" + "nameroot": { + "type": "string" + } + }, + "required": [ + "class" + ], + "oneOf": [ + { + "required": [ + "path" + ] }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" + { + "required": [ + "location" + ] + } + ], + "additionalProperties": false, + "title": "CWLDefaultLocation" + }, + "cwl-CWLDefaultObject": { + "type": "object", + "not": { + "description": "Avoid false-positive match of default File or Directory location definition.", + "properties": { + "class": { + "type": "string", + "enum": [ + "File", + "Directory" + ] + } } }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" + "title": "CWLDefaultObject" + }, + "cwl-CWLTypeRecordFields": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLTypeRecordFieldsMap" + }, + { + "$ref": "#/components/schemas/cwl-CWLTypeRecordFieldsList" + } + ], + "title": "CWLTypeRecordFields" + }, + "cwl-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 }, - "prov:Attribution": { + "cwl-CWLVersion": { "type": "object", + "properties": { + "cwlVersion": { + "type": "string", + "title": "cwlVersion", + "description": "CWL version of the described application package.", + "pattern": "^v\\d+(\\.\\d+(\\.\\d+)*)*$" + } + }, "required": [ - "@type" + "cwlVersion" ], + "title": "CWLVersion" + }, + "cwl-CWLMetadata": { + "type": "object", "properties": { - "@type": { - "pattern": "Attribution" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" - }, - "entity": { - "$ref": "#/components/schemas/QualifiedName" - }, - "agent": { - "$ref": "#/components/schemas/QualifiedName" - }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + "s:keywords": { + "$ref": "#/components/schemas/cwl-CWLKeywordList" }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" + "version": { + "type": "string", + "title": "version", + "description": "Version of the process.", + "example": "1.2.3", + "pattern": "^\\d+(\\.\\d+(\\.\\d+(\\.[A-Za-z0-9\\-_]+)*)*)*$" } }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" + "title": "CWLMetadata" + }, + "cwl-CWLDocumentation": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "doc": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] } }, - "additionalProperties": false + "title": "CWLDocumentation" }, - "prov:Association": { + "cwl-CWLAtomicBase": { "type": "object", - "required": [ - "@type" - ], + "title": "CWL atomic definition", + "description": "Direct CWL definition instead of the graph representation.", "properties": { - "@type": { - "pattern": "Association" + "id": { + "$ref": "#/components/schemas/cwl-CWLIdentifier" }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" + "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" + ] }, - "activity": { - "$ref": "#/components/schemas/QualifiedName" + "intent": { + "$ref": "#/components/schemas/cwl-CWLIntent" }, - "agent": { - "$ref": "#/components/schemas/QualifiedName" + "requirements": { + "$ref": "#/components/schemas/cwl-CWLRequirements" }, - "plan": { - "$ref": "#/components/schemas/QualifiedName" + "hints": { + "$ref": "#/components/schemas/cwl-CWLHints" }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + "baseCommand": { + "$ref": "#/components/schemas/cwl-CWLCommand" }, - "role": { - "$ref": "#/components/schemas/ArrayOfValues" + "arguments": { + "$ref": "#/components/schemas/cwl-CWLArguments" }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" - } - }, - "additionalProperties": false - }, - "prov:Delegation": { - "type": "object", - "required": [ - "@type" - ], - "properties": { - "@type": { - "pattern": "Delegation" + "inputs": { + "$ref": "#/components/schemas/cwl-CWLInputsDefinition" }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" + "outputs": { + "$ref": "#/components/schemas/cwl-CWLOutputsDefinition" }, - "delegate": { - "$ref": "#/components/schemas/QualifiedName" + "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/cwl-CWLExpression" }, - "responsible": { - "$ref": "#/components/schemas/QualifiedName" + "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/cwl-CWLExpression" }, - "activity": { - "$ref": "#/components/schemas/QualifiedName" + "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/cwl-CWLExpression" }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + "scatter": { + "$ref": "#/components/schemas/cwl-CWLScatter" }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" + "scatterMethod": { + "$ref": "#/components/schemas/cwl-CWLScatterMethod" } }, - "additionalProperties": false + "required": [ + "class", + "inputs", + "outputs" + ] }, - "prov:Invalidation": { + "cwl-CWLOutputList": { + "type": "array", + "title": "CWLOutputList", + "description": "Package outputs defined as items.", + "items": { + "$ref": "#/components/schemas/cwl-CWLOutputItem" + } + }, + "cwl-CWLOutputMap": { "type": "object", - "required": [ - "@type" - ], + "title": "CWLOutputMap", + "description": "Package outputs defined as mapping.", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLType" + }, + { + "$ref": "#/components/schemas/cwl-CWLOutputObject" + }, + { + "$ref": "#/components/schemas/cwl-CWLOutputStdOut" + }, + { + "$ref": "#/components/schemas/cwl-CWLOutputStdErr" + }, + { + "$ref": "#/components/schemas/cwl-CWLImport" + } + ] + } + }, + "cwl-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": { - "pattern": "Invalidation" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" - }, - "entity": { - "$ref": "#/components/schemas/QualifiedName" + "type": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLType" + }, + { + "$ref": "#/components/schemas/cwl-CWLOutputStdOut" + }, + { + "$ref": "#/components/schemas/cwl-CWLOutputStdErr" + } + ] }, - "activity": { - "$ref": "#/components/schemas/QualifiedName" + "outputBinding": { + "$ref": "#/components/schemas/cwl-OutputBinding" }, - "time": { - "$ref": "#/components/schemas/DateTime" + "id": { + "description": "Identifier of the CWL output.", + "$ref": "#/components/schemas/cwl-CWLIdentifier" + } + }, + "required": [ + "type", + "id" + ] + }, + "cwl-CWLWorkflowStepObject": { + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepDefinition" }, + { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepScatter" + } + ], + "title": "CWLWorkflowStepObject" + }, + "cwl-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" + ], + "title": "CWLInputStdInDefinition" + }, + "cwl-CWLInputStdInObjectType": { + "type": "object", + "properties": { "type": { - "$ref": "#/components/schemas/ArrayOfValues" + "$ref": "#/components/schemas/cwl-CWLInputStdInDefinition" + } + }, + "required": [ + "type" + ], + "title": "CWLInputStdInObjectType" + }, + "cwl-CWLInputStdIn": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLInputStdInDefinition" }, - "role": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "$ref": "#/components/schemas/cwl-CWLInputStdInObjectType" + } + ], + "title": "CWLInputStdIn" + }, + "cwl-CWLArguments": { + "type": "array", + "title": "CWLArguments", + "description": "Base arguments passed to the command.", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/cwl-InputBinding" + } + ] + } + }, + "cwl-SoftwarePackage": { + "type": "object", + "properties": { + "package": { + "type": "string" }, - "location": { - "$ref": "#/components/schemas/ArrayOfValues" + "version": { + "type": "array", + "items": { + "type": "string" + } }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" + "specs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/cwl-ReferenceURL" + } } }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" - } + "required": [ + "package" + ], + "additionalProperties": false, + "title": "SoftwarePackage" + }, + "cwl-SoftwarePackageSpecs": { + "type": "array", + "items": { + "type": "string" }, - "additionalProperties": false + "title": "SoftwarePackageSpecs" }, - "prov:Start": { + "dynamic-enumeration": { "type": "object", "required": [ - "@type" + "type", + "enum" ], "properties": { - "@type": { - "pattern": "Start" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" - }, - "activity": { - "$ref": "#/components/schemas/QualifiedName" - }, - "starter": { - "$ref": "#/components/schemas/QualifiedName" - }, - "trigger": { - "$ref": "#/components/schemas/QualifiedName" - }, - "time": { - "$ref": "#/components/schemas/DateTime" - }, "type": { - "$ref": "#/components/schemas/ArrayOfValues" - }, - "role": { - "$ref": "#/components/schemas/ArrayOfValues" - }, - "location": { - "$ref": "#/components/schemas/ArrayOfValues" + "type": "string", + "enum": [ + "enum" + ] }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" + "enum": { + "type": "array", + "items": { + "type": "string" + } } }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" + "title": "enumeration" + }, + "processes-core-processSummary": { + "allOf": [ + { + "$ref": "#/components/schemas/processes-core-descriptionType" + }, + { + "type": "object", + "required": [ + "id", + "version" + ], + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + }, + "jobControlOptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/processes-core-jobControlOptions" + } + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/processes-core-link" + } + } + } } - }, - "additionalProperties": false + ], + "title": "processSummary" }, - "prov:End": { + "processes-core-process": { + "allOf": [ + { + "$ref": "#/components/schemas/processes-core-processSummary" + }, + { + "type": "object", + "properties": { + "inputs": { + "additionalProperties": { + "$ref": "#/components/schemas/processes-core-inputDescription" + } + }, + "outputs": { + "additionalProperties": { + "$ref": "#/components/schemas/processes-core-outputDescription" + } + } + } + } + ], + "title": "process" + }, + "processes-core-processList": { "type": "object", "required": [ - "@type" + "processes", + "links" ], "properties": { - "@type": { - "pattern": "End" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" - }, - "activity": { - "$ref": "#/components/schemas/QualifiedName" - }, - "ender": { - "$ref": "#/components/schemas/QualifiedName" - }, - "trigger": { - "$ref": "#/components/schemas/QualifiedName" - }, - "time": { - "$ref": "#/components/schemas/DateTime" - }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" - }, - "role": { - "$ref": "#/components/schemas/ArrayOfValues" - }, - "location": { - "$ref": "#/components/schemas/ArrayOfValues" + "processes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/processes-core-processSummary" + } }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/processes-core-link" + } } }, - "additionalProperties": false + "title": "processList" }, - "prov:Derivation": { + "processes-core-jobList": { "type": "object", "required": [ - "@type" + "jobs", + "links" ], "properties": { - "@type": { - "pattern": "Derivation" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" + "jobs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/processes-core-statusInfo" + } }, - "activity": { - "$ref": "#/components/schemas/QualifiedName" + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/processes-core-link" + } + } + }, + "title": "jobList" + }, + "processes-core-descriptionType": { + "type": "object", + "properties": { + "title": { + "type": "string" }, - "generation": { - "$ref": "#/components/schemas/QualifiedName" + "description": { + "type": "string" }, - "usage": { - "$ref": "#/components/schemas/QualifiedName" + "keywords": { + "type": "array", + "items": { + "type": "string" + } }, - "generatedEntity": { - "$ref": "#/components/schemas/QualifiedName" + "metadata": { + "type": "array", + "items": { + "$ref": "#/components/schemas/processes-core-metadata" + } + } + }, + "title": "descriptionType" + }, + "processes-core-binaryValue": { + "type": "string", + "title": "binaryValue" + }, + "processes-workflows-inputParameterized": { + "allOf": [ + { + "type": "object", + "required": [ + "$input" + ], + "properties": { + "$input": { + "type": "string" + } + } }, - "usedEntity": { - "$ref": "#/components/schemas/QualifiedName" + { + "$ref": "#/components/schemas/processes-core-fieldsModifiers" + } + ], + "title": "inputParameterized" + }, + "processes-core-format": { + "type": "object", + "properties": { + "mediaType": { + "type": "string" }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + "encoding": { + "type": "string" }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" + "schema": { + "oneOf": [ + { + "type": "string", + "format": "url" + }, + { + "type": "object" + } + ] } }, - "additionalProperties": false + "title": "format" }, - "prov:Alternate": { + "processes-core-schemaAndOccurrences": { "type": "object", "required": [ - "@type" + "schema" ], "properties": { - "@type": { - "pattern": "Alternate" + "schema": { + "$ref": "#/components/schemas/processes-core-schema" }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" + "minOccurs": { + "type": "integer", + "default": 1 }, - "alternate1": { - "$ref": "#/components/schemas/QualifiedName" + "maxOccurs": { + "oneOf": [ + { + "type": "integer", + "default": 1 + }, + { + "type": "string", + "enum": [ + "unbounded" + ] + } + ] + } + }, + "title": "schemaAndOccurrences" + }, + "processes-core-inputDescription": { + "allOf": [ + { + "$ref": "#/components/schemas/processes-core-descriptionType" }, - "alternate2": { - "$ref": "#/components/schemas/QualifiedName" + { + "$ref": "#/components/schemas/processes-core-dataClasses" }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + { + "$ref": "#/components/schemas/processes-core-dataAccessAPIs" }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" + { + "$ref": "#/components/schemas/processes-core-executionUnitRequirements" + }, + { + "$ref": "#/components/schemas/processes-core-schemaAndOccurrences" + }, + { + "type": "object", + "properties": { + "valuePassing": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "byValue", + "byReference" + ] + }, + "default": [ + "byValue", + "byReference" + ] + } + } } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" + ], + "title": "inputDescription" + }, + "processes-core-value": { + "anyOf": [ + { + "$ref": "#/components/schemas/processes-core-valueNoObject" + }, + { + "type": "object" + } + ], + "title": "value" + }, + "processes-core-collectionValue": { + "allOf": [ + { + "$ref": "#/components/schemas/processes-core-format" + }, + { + "type": "object", + "required": [ + "collection" + ], + "properties": { + "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\".", + "anyOf": [ + { + "type": "string", + "description": "Collection identifier for a collection available at `{root}/collections/{collectionID}`, where `{root}` represents the landing page\nof the process using the collection as an input (for the top-level process, that is the landing page of the process execution endpoint\nto which the execution request is posted), or the landing page of the document being retrieved in the case of an output.\nIf the `collection` string includes a `/`, it must be interpreted as a URI reference rather than as a collection ID." + }, + { + "type": "string", + "description": "The URI of an OGC API collection.\nIf a relative URI reference is used, the Base URI is defined as such:\n- For a Collection value received as input to a process, the Base URI is defined as the URI of the description\n (`{root}/processes/{processId}`) of that process, with the receiving process object understood as the Encapsulating Entity as per\n [RFC 3986 Section 5.1.2](https://datatracker.ietf.org/doc/html/rfc3986#section-5.1.2).\n- For a Collection Output value, the Base URI is defined from the Retrieval URI as as per\n [RFC 3986 Section 5.1.3](https://datatracker.ietf.org/doc/html/rfc3986#section-5.1.3),\n for example, `/jobs/{jobId}/results`, `/jobs/{jobId}/results/{outputID}` or `/jobs/{jobId}/results/{outputID}/{N}` depending on the\n resource being retrieved.\nIf a collection string does not contain any `/`, it must not be interpreted as a URI reference, and must instead be resolved as a\ncollection identifier. For example, `countries` would resolve to `{root}/collections/countries` rather than `{root}/processes/countries`.", + "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" + }, + { + "$ref": "#/components/schemas/geometryGeoJSON" + } + ] + }, + "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" + }, + "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-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" + }, + "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": { + "type": "string" + } + }, + "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": { + "type": "string" + } + }, + "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": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "expressionLang": { + "type": "string", + "enum": [ + "cql2-text", + "cql2-json" + ] + }, + "expression": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/cql2-cql2" + } + ] + } + } + } + ] + } + }, + "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" + } + } } - }, - "additionalProperties": false - }, - "prov:Specialization": { - "type": "object", - "required": [ - "@type" ], - "properties": { - "@type": { - "pattern": "Specialization" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" - }, - "generalEntity": { - "$ref": "#/components/schemas/QualifiedName" - }, - "specificEntity": { - "$ref": "#/components/schemas/QualifiedName" - }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" - }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" - } - }, - "additionalProperties": false + "title": "collectionValue" }, - "QualifiedName+": { - "$id": "#/definitions/QualifiedName+", - "oneOf": [ + "processes-core-valueNoObject": { + "anyOf": [ { - "$ref": "#/components/schemas/QualifiedName" + "type": "string" }, { - "type": "array", - "items": { - "$ref": "#/components/schemas/QualifiedName" - } - } - ] - }, - "prov:Membership": { - "type": "object", - "required": [ - "@type" - ], - "properties": { - "@type": { - "pattern": "Membership" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" - }, - "entity": { - "$ref": "#/components/schemas/QualifiedName+" - }, - "collection": { - "$ref": "#/components/schemas/QualifiedName" - }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" - }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" - } - }, - "additionalProperties": false - }, - "prov:Influence": { - "type": "object", - "required": [ - "@type" - ], - "properties": { - "@type": { - "pattern": "Influence" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" - }, - "influencer": { - "$ref": "#/components/schemas/QualifiedName" - }, - "influencee": { - "$ref": "#/components/schemas/QualifiedName" - }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" - }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" - } - }, - "additionalProperties": false - }, - "prov:Communication": { - "type": "object", - "required": [ - "@type" - ], - "properties": { - "@type": { - "pattern": "Communication" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" - }, - "informant": { - "$ref": "#/components/schemas/QualifiedName" - }, - "informed": { - "$ref": "#/components/schemas/QualifiedName" - }, - "type": { - "$ref": "#/components/schemas/ArrayOfValues" + "type": "number" }, - "label": { - "$ref": "#/components/schemas/ArrayOfLabelValues" - } - }, - "patternProperties": { - "^[A-Za-z0-9_]+:(.*)$": { - "$ref": "#/definitions/ArrayOfValues" - } - }, - "additionalProperties": false - }, - "prov:Statement": { - "oneOf": [ { - "$ref": "#/components/schemas/prov:Entity" + "type": "integer" }, { - "$ref": "#/components/schemas/prov:Activity" + "type": "boolean" }, { - "$ref": "#/components/schemas/prov:Agent" + "type": "array", + "items": {} }, { - "$ref": "#/components/schemas/prov:Usage" + "$ref": "#/components/schemas/processes-core-binaryValue" }, { - "$ref": "#/components/schemas/prov:Generation" + "$ref": "#/components/schemas/processes-core-bbox" }, { - "$ref": "#/components/schemas/prov:Attribution" - }, + "$ref": "#/components/schemas/processes-core-collectionValue" + } + ], + "title": "valueNoObject" + }, + "processes-workflows-valueNoObject-workflows": { + "anyOf": [ { - "$ref": "#/components/schemas/prov:Association" + "type": "string" }, { - "$ref": "#/components/schemas/prov:Delegation" + "type": "number" }, { - "$ref": "#/components/schemas/prov:Invalidation" + "type": "integer" }, { - "$ref": "#/components/schemas/prov:Start" + "type": "boolean" }, { - "$ref": "#/components/schemas/prov:End" + "type": "array", + "items": {} }, { - "$ref": "#/components/schemas/prov:Derivation" + "$ref": "#/components/schemas/processes-core-binaryValue" }, { - "$ref": "#/components/schemas/prov:Alternate" + "$ref": "#/components/schemas/processes-core-bbox" }, { - "$ref": "#/components/schemas/prov:Specialization" + "$ref": "#/components/schemas/processes-core-collectionValue" }, { - "$ref": "#/components/schemas/prov:Membership" + "$ref": "#/components/schemas/processes-workflows-inputProcess" }, { - "$ref": "#/components/schemas/prov:Influence" + "$ref": "#/components/schemas/processes-workflows-inputParameterized" + } + ], + "title": "valueNoObject-workflows" + }, + "processes-core-jobControlOptions": { + "type": "string", + "enum": [ + "sync-execute", + "async-execute", + "dismiss" + ], + "title": "jobControlOptions" + }, + "processes-core-metadata": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/processes-core-link" + }, + { + "type": "object", + "properties": { + "role": { + "type": "string" + } + } + } + ] }, { - "$ref": "#/components/schemas/prov:Communication" + "type": "object", + "properties": { + "role": { + "type": "string" + }, + "title": { + "type": "string" + }, + "lang": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } } - ] - }, - "prov:Bundle": { - "type": "object", - "required": [ - "@type", - "@id", - "@graph", - "@context" ], - "properties": { - "@type": { - "pattern": "Bundle" - }, - "@id": { - "$ref": "#/components/schemas/QualifiedName" - }, - "@context": { - "$ref": "#/components/schemas/Context" + "title": "metadata" + }, + "processes-core-values": { + "anyOf": [ + { + "$ref": "#/components/schemas/processes-core-inlineOrRefValue" }, - "@graph": { + { "type": "array", "items": { - "$ref": "#/components/schemas/prov:Statement" + "$ref": "#/components/schemas/processes-core-inlineOrRefValue" } } - }, - "additionalProperties": false + ], + "title": "values" }, - "prov:StatementOrBundle": { + "processes-workflows-values-workflows": { "oneOf": [ { - "$ref": "#/components/schemas/prov:Statement" + "$ref": "#/components/schemas/processes-workflows-inlineOrRefValue-workflows" }, { - "$ref": "#/components/schemas/prov:Bundle" - } - ] - }, - "prov:Document": { - "type": "object", - "required": [ - "@context", - "@graph" - ], - "properties": { - "@type": { - "pattern": "Document" - }, - "@context": { - "$ref": "#/components/schemas/Context" - }, - "@graph": { "type": "array", "items": { - "$ref": "#/components/schemas/prov:StatementOrBundle" + "$ref": "#/components/schemas/processes-workflows-inlineOrRefValue-workflows" } } - }, - "additionalProperties": false + ], + "title": "values-workflows" }, - "common-core-confClasses": { + "processes-core-outputSelection": { "type": "object", - "required": [ - "conformsTo" - ], "properties": { - "conformsTo": { - "type": "array", - "items": { - "type": "string", - "example": "http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core" - } + "format": { + "$ref": "#/components/schemas/processes-core-format" } - } + }, + "title": "outputSelection" }, - "common-core-link": { - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "type": "string" + "processes-core-outputDescription": { + "allOf": [ + { + "$ref": "#/components/schemas/processes-core-descriptionType" }, - "rel": { - "type": "string", - "example": "service" + { + "$ref": "#/components/schemas/processes-core-dataClasses" }, - "type": { - "type": "string", - "example": "application/json" + { + "$ref": "#/components/schemas/processes-core-dataAccessAPIs" }, - "hreflang": { - "type": "string", - "example": "en" + { + "$ref": "#/components/schemas/processes-core-schemaAndOccurrences" + } + ], + "title": "outputDescription" + }, + "processes-core-qualifiedValue": { + "allOf": [ + { + "$ref": "#/components/schemas/processes-core-format" }, - "title": { - "type": "string" + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "$ref": "#/components/schemas/processes-core-value" + } + } } - } + ], + "title": "qualifiedValue" }, - "common-core-landingPage": { + "processes-core-reference": { "type": "object", "required": [ - "links" + "$ref" ], "properties": { - "title": { - "type": "string", - "example": "Example processing server" - }, - "description": { - "type": "string", - "example": "Example server implementing the OGC API - Processes 1.0 Standard" - }, - "attribution": { + "$ref": { "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/common-core-link" - } + "format": "uri-reference" } - } + }, + "additionalProperties": false, + "title": "reference" }, - "common-core-exception": { - "title": "Exception Schema", - "description": "JSON schema for exceptions based on RFC 7807", + "processes-core-results": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/processes-core-values" + }, + "title": "results" + }, + "processes-core-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" + "type", + "properties" ], "properties": { "type": { - "type": "string" - }, - "title": { - "type": "string" - }, - "status": { - "type": "integer" + "type": "string", + "enum": [ + "object" + ] }, - "detail": { - "type": "string" + "required": { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } }, - "instance": { - "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" + } + } + } } }, - "additionalProperties": true + "title": "schema" }, - "common-geodata-collections": { - "type": "object", - "required": [ - "links", - "collections" + "processes-core-statusCode": { + "type": "string", + "nullable": false, + "enum": [ + "accepted", + "running", + "successful", + "failed", + "dismissed" ], + "title": "statusCode" + }, + "processes-core-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": { - "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/common-core-link" - } - }, - "numberMatched": { - "$ref": "#/components/schemas/common-geodata-numberMatched" + "successUri": { + "type": "string", + "format": "uri" }, - "numberReturned": { - "$ref": "#/components/schemas/common-geodata-numberReturned" + "inProgressUri": { + "type": "string", + "format": "uri" }, - "collections": { - "type": "array", - "title": "Collections descriptions", - "description": "Descriptions of each collection in this API.", - "items": { - "$ref": "#/components/schemas/common-geodata-collectionDesc" - } + "failedUri": { + "type": "string", + "format": "uri" } - } + }, + "title": "subscriber" }, - "common-geodata-collectionDesc": { - "allOf": [ + "processes-core-inlineOrRefValue": { + "oneOf": [ { - "$ref": "#/components/schemas/common-geodata-collectionProperties" + "$ref": "#/components/schemas/processes-core-valueNoObject" }, { - "type": "object", - "properties": { - "extent": { - "$ref": "#/components/schemas/common-geodata-extent" - } - } - } - ] - }, - "common-geodata-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": { - "$ref": "#/components/schemas/common-geodata-spatialExtent" - }, - "temporal": { - "$ref": "#/components/schemas/common-geodata-temporalExtent" - } - } + "$ref": "#/components/schemas/processes-core-qualifiedValue" }, { - "anyOf": [ - { - "type": "object", - "description": "General object extension point" - }, - { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/common-geodata-additionalDimensionExtent" - } - } - ] - } - ] - }, - "common-geodata-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/common-geodata-spatialExtent" - }, - "temporal": { - "$ref": "#/components/schemas/common-geodata-temporalExtent" - } - }, - "additionalProperties": { - "$ref": "#/components/schemas/common-geodata-additionalDimensionExtent" - } + "$ref": "#/components/schemas/processes-core-link" } - ] + ], + "title": "inlineOrRefValue" }, - "crs-crs": { - "title": "CRS", + "processes-workflows-inlineOrRefValue-workflows": { "oneOf": [ { - "description": "Simplification of the object into a url if the other properties are not present", - "type": "string" + "$ref": "#/components/schemas/processes-workflows-valueNoObject-workflows" }, { - "type": "object", + "$ref": "#/components/schemas/processes-workflows-qualifiedValue-workflows" + }, + { + "$ref": "#/components/schemas/common-core-link" + } + ], + "title": "inlineOrRefValue-workflows" + }, + "processes-core-fieldsModifiers": { + "type": "object", + "properties": { + "filter": { "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" - } - ] - } - } + "type": "string" }, { - "required": [ - "referenceSystem" - ], - "properties": { - "referenceSystem": { - "description": "A reference system data structure as defined in the MD_ReferenceSystem of the ISO 19115", - "type": "object" - } + "description": "Basic CQL2-JSON definition", + "type": "array", + "items": { + "type": "object" } } ] - } - ] - }, - "common-geodata-dataType": { - "anyOf": [ - { - "type": "string" }, - { + "filter-lang": { "type": "string", - "enum": [ - "map", - "vector", - "coverage" - ] - } - ] - }, - "common-geodata-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" - }, - "common-geodata-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 - }, - "common-geodata-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-cwl-json-schema": { - "allOf": [ - { - "$ref": "#/components/schemas/cwl-cwl-json-schema" + "example": "cql2-text" }, - { - "$ref": "#/components/schemas/cwl-cwl-json-schema" - } - ] - }, - "dynamic-enumeration": { - "type": "object", - "required": [ - "type", - "enum" - ], - "properties": { - "type": { + "filter-crs": { "type": "string", - "enum": [ - "enum" - ] + "format": "uri-reference" }, - "enum": { + "aliases": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "properties": { + "type": "array", + "items": { + "type": "string" + } + }, + "sortBy": { "type": "array", "items": { "type": "string" } } - } + }, + "title": "fieldsModifiers" }, - "processes-core-processSummary": { + "processes-core-statusInfo": { "allOf": [ { "$ref": "#/components/schemas/processes-core-descriptionType" @@ -5275,20 +6195,79 @@ "type": "object", "required": [ "id", - "version" + "status", + "processingEntityType" ], "properties": { "id": { "type": "string" }, - "version": { + "processID": { + "type": "string", + "format": "uri" + }, + "processingEntityType": { + "allOf": [ + { + "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." + }, + { + "$ref": "#/components/schemas/processes-core-processingEntityType" + } + ] + }, + "profileEntityType": { + "allOf": [ + { + "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." + }, + { + "$ref": "#/components/schemas/processes-core-processingEntityType" + } + ] + }, + "request": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + }, + { + "$ref": "#/components/schemas/processes-core-link" + } + ] + }, + "status": { + "$ref": "#/components/schemas/processes-core-statusCode" + }, + "message": { "type": "string" }, - "jobControlOptions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/processes-core-jobControlOptions" - } + "exception": { + "$ref": "#/components/schemas/common-core-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": { "type": "array", @@ -5298,1278 +6277,1185 @@ } } } - ] - }, - "processes-core-process": { - "allOf": [ - { - "$ref": "#/components/schemas/processes-core-processSummary" - }, - { - "type": "object", - "properties": { - "inputs": { - "additionalProperties": { - "$ref": "#/components/schemas/processes-core-inputDescription" - } - }, - "outputs": { - "additionalProperties": { - "$ref": "#/components/schemas/processes-core-outputDescription" - } - } - } - } - ] + ], + "title": "statusInfo" }, - "processes-core-processList": { + "processes-core-dataAccessAPIs": { "type": "object", - "required": [ - "processes", - "links" - ], "properties": { - "processes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/processes-core-processSummary" - } - }, - "links": { + "dataAccessAPIs": { "type": "array", "items": { - "$ref": "#/components/schemas/processes-core-link" + "$ref": "#/components/schemas/processes-core-apis" } } - } + }, + "title": "dataAccessAPIs" }, - "processes-core-jobList": { - "type": "object", - "required": [ - "jobs", - "links" + "processes-core-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" ], - "properties": { - "jobs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/processes-core-statusInfo" - } - }, - "links": { - "type": "array", - "items": { - "$ref": "#/components/schemas/processes-core-link" - } - } - } + "title": "apis" }, - "processes-core-descriptionType": { + "processes-core-dataClasses": { "type": "object", "properties": { - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "keywords": { - "type": "array", - "items": { - "type": "string" - } - }, - "metadata": { + "dataClasses": { "type": "array", "items": { - "$ref": "#/components/schemas/processes-core-metadata" + "type": "string", + "format": "uri" } } - } - }, - "processes-core-binaryValue": { - "type": "string" + }, + "title": "dataClasses" }, - "processes-workflows-inputParameterized": { - "allOf": [ - { + "processes-dru-ogcapppkg": { + "type": "object", + "required": [ + "executionUnit" + ], + "properties": { + "processDescription": { "type": "object", "required": [ - "$input" + "process" ], "properties": { - "$input": { - "type": "string" + "process": { + "$ref": "#/components/schemas/processes-core-process" } } }, - { - "$ref": "#/components/schemas/processes-core-fieldsModifiers" + "executionUnit": { + "$ref": "#/components/schemas/processes-dru-executionUnit" } - ] + }, + "title": "ogcapppkg" }, - "processes-core-format": { - "type": "object", - "properties": { - "mediaType": { - "type": "string" - }, - "encoding": { - "type": "string" + "processes-dru-staticIndicator": { + "allOf": [ + { + "$ref": "#/components/schemas/processes-core-processSummary" }, - "schema": { - "oneOf": [ - { - "type": "string", - "format": "url" - }, - { - "type": "object" + { + "type": "object", + "properties": { + "mutable": { + "type": "boolean", + "default": true } - ] + } } - } + ], + "title": "staticIndicator" }, - "processes-core-schemaAndOccurrences": { + "processes-core-linkBase": { "type": "object", "required": [ - "schema" + "rel" ], - "properties": { - "schema": { - "$ref": "#/components/schemas/processes-core-schema" - }, - "minOccurs": { - "type": "integer", - "default": 1 - }, - "maxOccurs": { - "oneOf": [ - { - "type": "integer", - "default": 1 - }, - { - "type": "string", - "enum": [ - "unbounded" - ] - } - ] - } - } - }, - "processes-core-inputDescription": { - "allOf": [ - { - "$ref": "#/components/schemas/processes-core-descriptionType" + "properties": { + "rel": { + "type": "string" }, - { - "$ref": "#/components/schemas/processes-core-dataClasses" + "type": { + "type": "string" }, - { - "$ref": "#/components/schemas/processes-core-dataAccessAPIs" + "hreflang": { + "type": "string" }, - { - "$ref": "#/components/schemas/processes-core-executionUnitRequirements" + "title": { + "type": "string" }, - { - "$ref": "#/components/schemas/processes-core-schemaAndOccurrences" + "length": { + "type": "integer" + } + }, + "title": "linkBase" + }, + "processes-core-linkBaseExtended": { + "type": "object", + "properties": { + "method": { + "type": "string", + "enum": [ + "POST", + "GET", + "DELETE", + "PATCH" + ] }, - { + "body": {}, + "headers": { "type": "object", - "properties": { - "valuePassing": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "byValue", - "byReference" - ] - }, - "default": [ - "byValue", - "byReference" - ] - } + "additionalProperties": { + "type": "string" } } - ] + }, + "title": "linkBaseExtended" }, - "processes-core-value": { - "anyOf": [ + "processes-core-link": { + "allOf": [ { - "$ref": "#/components/schemas/processes-core-valueNoObject" + "$ref": "#/components/schemas/processes-core-linkBase" }, { - "type": "object" - } - ] - }, - "processes-core-collectionValue": { - "allOf": [ - { - "$ref": "#/components/schemas/processes-core-format" + "$ref": "#/components/schemas/processes-core-linkBaseExtended" }, { "type": "object", "required": [ - "collection" + "href" ], "properties": { - "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\".", - "anyOf": [ - { - "type": "string", - "description": "Collection identifier for a collection available at `{root}/collections/{collectionID}`, where `{root}` represents the landing page\nof the process using the collection as an input (for the top-level process, that is the landing page of the process execution endpoint\nto which the execution request is posted), or the landing page of the document being retrieved in the case of an output.\nIf the `collection` string includes a `/`, it must be interpreted as a URI reference rather than as a collection ID." - }, - { - "type": "string", - "description": "The URI of an OGC API collection.\nIf a relative URI reference is used, the Base URI is defined as such:\n- For a Collection value received as input to a process, the Base URI is defined as the URI of the description\n (`{root}/processes/{processId}`) of that process, with the receiving process object understood as the Encapsulating Entity as per\n [RFC 3986 Section 5.1.2](https://datatracker.ietf.org/doc/html/rfc3986#section-5.1.2).\n- For a Collection Output value, the Base URI is defined from the Retrieval URI as as per\n [RFC 3986 Section 5.1.3](https://datatracker.ietf.org/doc/html/rfc3986#section-5.1.3),\n for example, `/jobs/{jobId}/results`, `/jobs/{jobId}/results/{outputID}` or `/jobs/{jobId}/results/{outputID}/{N}` depending on the\n resource being retrieved.\nIf a collection string does not contain any `/`, it must not be interpreted as a URI reference, and must instead be resolved as a\ncollection identifier. For example, `countries` would resolve to `{root}/collections/countries` rather than `{root}/processes/countries`.", - "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" - }, - { - "$ref": "#/components/schemas/geometryGeoJSON" - } - ] - }, - "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" - }, - "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.", + "href": { "type": "string" + } + } + } + ], + "title": "link" + }, + "processes-core-executionUnitRequirements": { + "type": "object", + "properties": { + "executionUnitRequirements": { + "type": "object", + "properties": { + "remote-access": { + "type": "boolean" }, - "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-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).", + "staging": { "type": "string", "enum": [ - "cql2-text", - "cql2-json", - "fes-xml" + "local-file", + "remote-access" ] + } + } + } + }, + "title": "executionUnitRequirements" + }, + "processes-core-bbox-def-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" + } + ], + "title": "bbox-def-crs" + }, + "processes-core-bbox": { + "type": "object", + "required": [ + "bbox" + ], + "properties": { + "bbox": { + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 }, - "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" - }, - "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": { - "type": "string" - } - }, - "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": { - "type": "string" - } - }, - "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": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "expressionLang": { - "type": "string", - "enum": [ - "cql2-text", - "cql2-json" - ] - }, - "expression": { - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/cql2-cql2" - } - ] - } - } - } - ] - } - }, - "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" + { + "minItems": 6, + "maxItems": 6 } + ], + "items": { + "type": "number" } + }, + "crs": { + "$ref": "#/components/schemas/processes-core-bbox-def-crs" } - ] + }, + "title": "bbox" }, - "processes-core-valueNoObject": { - "anyOf": [ + "cql2-cql2": { + "oneOf": [ { - "type": "string" + "$ref": "#/components/schemas/cql2-cql2-definitions" }, { - "type": "number" + "$ref": "#/components/schemas/cql2-cql2-definitions" }, { - "type": "integer" + "$ref": "#/components/schemas/cql2-cql2-definitions" }, { - "type": "boolean" + "$ref": "#/components/schemas/cql2-cql2-definitions" }, { - "type": "array", - "items": {} + "$ref": "#/components/schemas/cql2-cql2-definitions" }, { - "$ref": "#/components/schemas/processes-core-binaryValue" + "$ref": "#/components/schemas/cql2-cql2-definitions" }, { - "$ref": "#/components/schemas/processes-core-bbox" + "$ref": "#/components/schemas/cql2-cql2-definitions" }, { - "$ref": "#/components/schemas/processes-core-collectionValue" + "type": "boolean" } - ] + ], + "title": "cql2" }, - "processes-workflows-valueNoObject-workflows": { - "anyOf": [ - { + "cql2-cql2-definitions": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "a_containedBy", + "a_contains", + "a_equals", + "a_overlaps" + ] + }, + "args": { + "$ref": "#/components/schemas/cql2-cql2-definitions" + } + }, + "title": "cql2-definitions" + }, + "processes-dru-inputBinding": { + "type": "object", + "description": ". Defines how to specify the input for the execution unit.\n. The value of various properties defined below can be expressions.\n . The expression language SHALL be JavaScript(???).\n. The \"$(...)\" syntax can be used to reference the current input or other\n process inputs in an expression.\n . The value \"self\" refers to the value of the current input.\n . The value \"inputs.\" refers to the value of another\n process input.\n . If the input is defined as a string of format \"file\" or \"directory\"\n then the meta-values \".path\", \".basename\", \".nameroot\" and \".nameext\"\n can be used to manipulate file or directory name without having to\n resort to complex regular expressions.\n . \".path\" returns the path of a file name without the file name\n . \".basename\" returns the name of the file without the path\n . \".nameroot\" returns the basename without any extension\n . \".nameext\" returns the extension of the basename", + "properties": { + "prefix": { + "description": "Command line prefix to add before the value.", "type": "string" }, - { - "type": "number" + "position": { + "description": ". The zero-based sorting key.\n. The value can be an integer or a string.\n. If the value is a string then it should be an expression that evaluates\n to a single integer value or null.", + "oneOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ] }, - { - "type": "integer" + "valueFrom": { + "description": ". If valueFrom is a constant string value, use this as the value.\n. If valueFrom is an expression, evaluate the expression to yield the\n actual value to use to build the command line.\n. If the value of the associated input parameter is null, valueFrom is\n not evaluated and nothing is added to the command line.", + "type": "string" }, - { + "itemSeparator": { + "description": "Join the array elements into a single string with the elements separated\nby itemSeparator.", + "type": "string" + }, + "shellQuote": { + "description": ". A Boolean that controls whether the value is quoted on the command.\n. A value of true (or if shecllQuote is not provided) means that the\n implementation SHALL not permit the interpretation of any shell\n metacharacters or directives.\n. A value of false should be used to inject metacharacters for operations\n such as pipes.", "type": "boolean" + } + }, + "additionalProperties": true, + "title": "inputBinding" + }, + "processes-dru-outputBinding": { + "type": "object", + "description": "Defines how to retrieve the output result from the command.", + "properties": { + "glob": { + "description": ". Wildcard pattern to find the output on disk or mounted volume.\n. Uses UNIX \"glob\" wildcard patterns (see: \"man 7 glob\").\n. See inputBinding.yaml for referencing input values in an output\n binding \"glob\" expression.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + } + }, + "additionalProperties": true, + "title": "outputBinding" + }, + "processes-dru-executionUnitContainer": { + "type": "object", + "required": "image", + "properties": { + "image": { + "description": "Container image reference for the execution unit.", + "type": "string" }, - { - "type": "array", - "items": {} + "deployment": { + "description": "Deployment information for the execution unit.", + "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "enum": [ + "local", + "remote", + "hpc", + "cloud" + ] + } + ] }, - { - "$ref": "#/components/schemas/processes-core-binaryValue" + "config": { + "type": "object", + "description": "Hardware requirements and configuration properties for executing the\nprocess.", + "properties": { + "cpuMin": { + "description": "Minimum number of CPUs required to run the process (unit is CPU core).", + "type": "number", + "minimum": 1 + }, + "cpuMax": { + "description": "Maximum number of CPU dedicated to the process (unit is CPU core)", + "type": "number" + }, + "memoryMin": { + "description": "Minimum RAM memory required to run the application (unit is GB)", + "type": "number" + }, + "memoryMax": { + "description": "Maximum RAM memory dedicated to the application (unit is GB)", + "type": "number" + }, + "storageTempMin": { + "description": "Minimum required temporary storage size (unit is GB)", + "type": "number" + }, + "storageOutputsMin": { + "description": "Minimum required output storage size (unit is GB)", + "type": "number" + }, + "jobTimeout": { + "description": "Timeout delay for a job execution (in seconds)", + "type": "number" + } + }, + "additionalProperties": true }, + "bindings": { + "type": "object", + "properties": { + "inputBindings": { + "additionalProperties": { + "$ref": "#/components/schemas/processes-dru-inputBinding" + } + }, + "outputBindings": { + "additionalProperties": { + "$ref": "#/components/schemas/processes-dru-outputBinding" + } + } + } + } + }, + "additionalProperties": true, + "title": "executionUnitContainer" + }, + "cwl-CWLKeywordList": { + "title": "KeywordList", + "type": "array", + "description": "Keywords applied to the process for search and categorization purposes.", + "items": { + "type": "string", + "title": "keyword", + "minLength": 1 + } + }, + "cwl-CWLTextPatternID": { + "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." + }, + "cwl-CWLIdentifier": { + "anyOf": [ { - "$ref": "#/components/schemas/processes-core-bbox" + "type": "string", + "title": "UUID", + "description": "Unique identifier.", + "format": "uuid", + "pattern": "^[a-f0-9]{8}(?:-?[a-f0-9]{4}){3}-?[a-f0-9]{12}$" }, { - "$ref": "#/components/schemas/processes-core-collectionValue" - }, + "$ref": "#/components/schemas/cwl-CWLTextPatternID" + } + ], + "title": "CWLIdentifier", + "description": "Reference to the process identifier." + }, + "cwl-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+)$" + } + }, + "cwl-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 + }, + "cwl-CUDAComputeCapability": { + "oneOf": [ { - "$ref": "#/components/schemas/processes-workflows-inputProcess" + "type": "string", + "title": "CUDA compute capability", + "description": "The compute capability supported by the GPU hardware.", + "pattern": "^\\d+\\.\\d+$" }, { - "$ref": "#/components/schemas/processes-workflows-inputParameterized" + "$ref": "#/components/schemas/cwl-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" }, - "processes-core-jobControlOptions": { + "cwl-ReferenceURL": { "type": "string", - "enum": [ - "sync-execute", - "async-execute", - "dismiss" - ] + "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+)$", + "title": "ReferenceURL" }, - "processes-core-metadata": { + "cwl-CWLTypeSymbolValues": { "oneOf": [ { - "allOf": [ - { - "$ref": "#/components/schemas/processes-core-link" - }, - { - "type": "object", - "properties": { - "role": { - "type": "string" - } - } - } - ] + "type": "number" }, { - "type": "object", - "properties": { - "role": { - "type": "string" - }, - "title": { - "type": "string" - }, - "lang": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - } - } + "type": "string" } - ] + ], + "title": "CWLTypeSymbolValues" }, - "processes-core-values": { - "anyOf": [ - { - "$ref": "#/components/schemas/processes-core-inlineOrRefValue" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/processes-core-inlineOrRefValue" - } - } - ] + "cwl-CWLTypeSymbols": { + "type": "array", + "title": "CWLTypeSymbols (Allowed values composing the enum).", + "items": { + "$ref": "#/components/schemas/cwl-CWLTypeSymbolValues" + } }, - "processes-workflows-values-workflows": { + "cwl-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\\-.]+$", + "title": "CWLTypeRecordRefPattern" + }, + "cwl-CWLFormat": { "oneOf": [ { - "$ref": "#/components/schemas/processes-workflows-inlineOrRefValue-workflows" + "$ref": "#/components/schemas/cwl-CWLExpression" }, { "type": "array", "items": { - "$ref": "#/components/schemas/processes-workflows-inlineOrRefValue-workflows" + "$ref": "#/components/schemas/cwl-CWLExpression" } } + ], + "title": "CWLFormat" + }, + "cwl-LoadListingEnum": { + "type": "string", + "title": "LoadListingEnum", + "enum": [ + "no_listing", + "shallow_listing", + "deep_listing" ] }, - "processes-core-outputSelection": { + "cwl-CWLDirectoryOnlyParameters": { "type": "object", "properties": { - "format": { - "$ref": "#/components/schemas/processes-core-format" - } - } - }, - "processes-core-outputDescription": { - "allOf": [ - { - "$ref": "#/components/schemas/processes-core-descriptionType" - }, - { - "$ref": "#/components/schemas/processes-core-dataClasses" - }, - { - "$ref": "#/components/schemas/processes-core-dataAccessAPIs" - }, - { - "$ref": "#/components/schemas/processes-core-schemaAndOccurrences" + "loadListing": { + "$ref": "#/components/schemas/cwl-LoadListingEnum" } - ] + }, + "title": "CWLDirectoryOnlyParameters" }, - "processes-core-qualifiedValue": { + "cwl-CWLTypeRecordFieldsItem": { "allOf": [ { - "$ref": "#/components/schemas/processes-core-format" + "$ref": "#/components/schemas/cwl-CWLTypeRecordFieldDef" }, { - "type": "object", "required": [ - "value" - ], - "properties": { - "value": { - "$ref": "#/components/schemas/processes-core-value" - } - } + "name" + ] } - ] + ], + "title": "CWLTypeRecordFieldsItem" }, - "processes-core-reference": { + "cwl-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\\-.]+$", + "title": "Checksum" + }, + "cwl-InlineJavascriptLibObject": { "type": "object", - "required": [ - "$ref" - ], "properties": { - "$ref": { - "type": "string", - "format": "uri-reference" + "$include": { + "type": "string" } }, - "additionalProperties": false - }, - "processes-core-results": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/processes-core-values" - } - }, - "processes-core-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" + "$include" ], - "properties": { - "type": { - "type": "string", - "enum": [ - "object" - ] - }, - "required": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } + "additionalProperties": false, + "title": "InlineJavascriptLibObject" + }, + "cwl-InlineJavascriptLibItem": { + "oneOf": [ + { + "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" - } - } - } + { + "$ref": "#/components/schemas/cwl-InlineJavascriptLibObject" } - } + ], + "title": "InlineJavascriptLibItem" }, - "processes-core-statusCode": { - "type": "string", - "nullable": false, - "enum": [ - "accepted", - "running", - "successful", - "failed", - "dismissed" - ] + "cwl-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": "#/components/schemas/cwl-InlineJavascriptLibItem" + } }, - "processes-core-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" + "cwl-ResourceCoresMinimum": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/cwl-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 }, - "processes-core-inlineOrRefValue": { + "cwl-ResourceCoresMaximum": { "oneOf": [ { - "$ref": "#/components/schemas/processes-core-valueNoObject" + "$ref": "#/components/schemas/cwl-ResourceQuantityOrFractional" }, { - "$ref": "#/components/schemas/processes-core-qualifiedValue" + "$ref": "#/components/schemas/cwl-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" + }, + "cwl-ResourceRAMMinimum": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-ResourceQuantityOrFractional" }, { - "$ref": "#/components/schemas/processes-core-link" + "$ref": "#/components/schemas/cwl-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 }, - "processes-workflows-inlineOrRefValue-workflows": { + "cwl-ResourceRAMMaximum": { "oneOf": [ { - "$ref": "#/components/schemas/processes-workflows-valueNoObject-workflows" + "$ref": "#/components/schemas/cwl-ResourceQuantityOrFractional" }, { - "$ref": "#/components/schemas/processes-workflows-qualifiedValue-workflows" + "$ref": "#/components/schemas/cwl-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" + }, + "cwl-ResourceTmpDirMinimum": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-ResourceQuantityOrFractional" }, { - "$ref": "#/components/schemas/common-core-link" + "$ref": "#/components/schemas/cwl-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 }, - "processes-core-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" + "cwl-ResourceTmpDirMaximum": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-ResourceQuantityOrFractional" }, - "filter-crs": { - "type": "string", - "format": "uri-reference" + { + "$ref": "#/components/schemas/cwl-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" + }, + "cwl-ResourceOutDirMinimum": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-ResourceQuantityOrFractional" }, - "aliases": { - "type": "object", - "additionalProperties": { - "type": "string" - } + { + "$ref": "#/components/schemas/cwl-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 + }, + "cwl-ResourceOutDirMaximum": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-ResourceQuantityOrFractional" }, - "properties": { - "type": "array", - "items": { - "type": "string" - } + { + "$ref": "#/components/schemas/cwl-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 + }, + "cwl-TimeLimitValue": { + "oneOf": [ + { + "type": "number", + "minimum": 0 }, - "sortBy": { - "type": "array", - "items": { - "type": "string" - } + { + "$ref": "#/components/schemas/cwl-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" }, - "processes-core-statusInfo": { - "allOf": [ + "cwl-EnableReuseValue": { + "oneOf": [ { - "$ref": "#/components/schemas/processes-core-descriptionType" + "type": "boolean" }, { - "type": "object", - "required": [ - "id", - "status", - "processingEntityType" - ], - "properties": { - "id": { - "type": "string" - }, - "processID": { - "type": "string", - "format": "uri" - }, - "processingEntityType": { - "allOf": [ - { - "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." - }, - { - "$ref": "#/components/schemas/processes-core-processingEntityType" - } - ] - }, - "profileEntityType": { - "allOf": [ - { - "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." - }, - { - "$ref": "#/components/schemas/processes-core-processingEntityType" - } - ] - }, - "request": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object" - }, - { - "$ref": "#/components/schemas/processes-core-link" - } - ] - }, - "status": { - "$ref": "#/components/schemas/processes-core-statusCode" - }, - "message": { - "type": "string" - }, - "exception": { - "$ref": "#/components/schemas/common-core-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": { - "type": "array", - "items": { - "$ref": "#/components/schemas/processes-core-link" - } - } - } + "$ref": "#/components/schemas/cwl-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" }, - "processes-core-dataAccessAPIs": { + "cwl-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": { - "dataAccessAPIs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/processes-core-apis" - } + "class": { + "type": "string", + "enum": [ + "BuiltinRequirement" + ] + }, + "process": { + "description": "Builtin process identifier.", + "$ref": "#/components/schemas/cwl-CWLTextPatternID" } - } + }, + "required": [ + "process", + "class" + ], + "additionalProperties": false }, - "processes-core-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" - ] + "cwl-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/cwl-ReferenceURL" + } + }, + "required": [ + "process" + ], + "additionalProperties": false + }, + "cwl-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/cwl-CWLTextPatternID" + }, + "provider": { + "description": "WPS provider endpoint.", + "$ref": "#/components/schemas/cwl-ReferenceURL" + } + }, + "required": [ + "process", + "provider" + ], + "additionalProperties": false }, - "processes-core-dataClasses": { + "cwl-UnknownRequirement": { "type": "object", + "description": "Generic schema to allow alternative CWL requirements/hints not explicitly defined in schemas.", "properties": { - "dataClasses": { - "type": "array", - "items": { - "type": "string", - "format": "uri" + "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" + ] } } - } + }, + "title": "UnknownRequirement" }, - "processes-dru-ogcapppkg": { + "cwl-CWLHintsMapExtras": { "type": "object", - "required": [ - "executionUnit" - ], "properties": { - "processDescription": { - "type": "object", - "required": [ - "process" - ], - "properties": { - "process": { - "$ref": "#/components/schemas/processes-core-process" - } - } + "BuiltinRequirement": { + "$ref": "#/components/schemas/cwl-BuiltinRequirement" }, - "executionUnit": { - "$ref": "#/components/schemas/processes-dru-executionUnit" + "OGCAPIRequirement": { + "$ref": "#/components/schemas/cwl-OGCAPIRequirement" + }, + "WPS1Requirement": { + "$ref": "#/components/schemas/cwl-WPS1Requirement" } - } + }, + "additionalProperties": { + "$ref": "#/components/schemas/cwl-UnknownRequirement" + }, + "title": "CWLHintsMapExtras" }, - "processes-dru-staticIndicator": { - "allOf": [ + "cwl-CWLHintsItemExtras": { + "oneOf": [ { - "$ref": "#/components/schemas/processes-core-processSummary" + "$ref": "#/components/schemas/cwl-BuiltinRequirement" }, { - "type": "object", - "properties": { - "mutable": { - "type": "boolean", - "default": true - } - } + "$ref": "#/components/schemas/cwl-OGCAPIRequirement" + }, + { + "$ref": "#/components/schemas/cwl-WPS1Requirement" + }, + { + "$ref": "#/components/schemas/cwl-UnknownRequirement" + } + ], + "title": "CWLHintsItemExtras" + }, + "cwl-CWLHintsItem": { + "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/cwl-CWLRequirementsItem" + }, + { + "$ref": "#/components/schemas/cwl-CWLHintsItemExtras" } ] }, - "processes-core-linkBase": { + "cwl-CommandParts": { + "type": "array", + "title": "Command Parts", + "items": { + "type": "string", + "title": "cmd" + }, + "additionalProperties": false + }, + "cwl-CWLInputItemBase": { "type": "object", - "required": [ - "rel" - ], "properties": { - "rel": { - "type": "string" - }, "type": { - "type": "string" - }, - "hreflang": { - "type": "string" + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLType" + }, + { + "$ref": "#/components/schemas/cwl-CWLInputStdIn" + } + ] }, - "title": { - "type": "string" + "inputBinding": { + "$ref": "#/components/schemas/cwl-InputBinding" }, - "length": { - "type": "integer" + "id": { + "description": "Identifier of the CWL input.", + "$ref": "#/components/schemas/cwl-CWLIdentifier" } - } + }, + "required": [ + "type", + "id" + ], + "additionalProperties": {}, + "title": "CWLInputItemBase" }, - "processes-core-linkBaseExtended": { + "cwl-CWLInputObjectBase": { "type": "object", "properties": { - "method": { - "type": "string", - "enum": [ - "POST", - "GET", - "DELETE", - "PATCH" - ] + "type": { + "$ref": "#/components/schemas/cwl-CWLType" }, - "body": {}, - "headers": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "inputBinding": { + "$ref": "#/components/schemas/cwl-InputBinding" } - } + }, + "required": [ + "type" + ], + "additionalProperties": {}, + "title": "CWLInputObjectBase" }, - "processes-core-link": { + "cwl-CWLInputObject": { + "title": "CWLInputObject (CWL type definition with parameters).", "allOf": [ { - "$ref": "#/components/schemas/processes-core-linkBase" + "$ref": "#/components/schemas/cwl-CWLInputObjectBase" }, { - "$ref": "#/components/schemas/processes-core-linkBaseExtended" + "$ref": "#/components/schemas/cwl-CWLDefaultTypedConditional" }, { - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "type": "string" - } - } + "$ref": "#/components/schemas/cwl-CWLDocumentation" } ] }, - "processes-core-executionUnitRequirements": { + "cwl-OutputBinding": { "type": "object", + "title": "OutputBinding", + "description": "Defines how to retrieve the output result from the command.", "properties": { - "executionUnitRequirements": { - "type": "object", - "properties": { - "remote-access": { - "type": "boolean" + "glob": { + "description": "Glob pattern to find the output on disk or mounted docker volume.", + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLExpression" }, - "staging": { - "type": "string", - "enum": [ - "local-file", - "remote-access" - ] + { + "type": "array", + "items": { + "$ref": "#/components/schemas/cwl-CWLExpression" + } } - } + ] } } }, - "processes-core-bbox-def-crs": { - "anyOf": [ + "cwl-CWLOutputObjectBase": { + "type": "object", + "title": "CWLOutputObject (CWL type definition with parameters).", + "properties": { + "type": { + "$ref": "#/components/schemas/cwl-CWLType" + }, + "outputBinding": { + "$ref": "#/components/schemas/cwl-OutputBinding" + } + }, + "required": [ + "type" + ] + }, + "cwl-CWLScatterMulti": { + "type": "array", + "title": "CWLScatterMulti", + "items": { + "$ref": "#/components/schemas/cwl-CWLIdentifier" + } + }, + "cwl-CWLScatter": { + "oneOf": [ { - "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" + "$ref": "#/components/schemas/cwl-CWLIdentifier" }, { - "type": "string", - "format": "uri", - "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + "$ref": "#/components/schemas/cwl-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" + }, + "cwl-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" ] }, - "processes-core-bbox": { + "cwl-CWLGraphItemBase": { "type": "object", - "required": [ - "bbox" - ], + "title": "CWLGraphItem", "properties": { - "bbox": { - "type": "array", - "oneOf": [ - { - "minItems": 4, - "maxItems": 4 - }, - { - "minItems": 6, - "maxItems": 6 - } - ], - "items": { - "type": "number" - } + "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": "#/components/schemas/cwl-CWLIdentifier" + }, + "intent": { + "$ref": "#/components/schemas/cwl-CWLIntent" }, - "crs": { - "$ref": "#/components/schemas/processes-core-bbox-def-crs" - } - } - }, - "cql2-cql2": { - "oneOf": [ - { - "$ref": "#/components/schemas/cql2-cql2-definitions" + "requirements": { + "$ref": "#/components/schemas/cwl-CWLRequirements" }, - { - "$ref": "#/components/schemas/cql2-cql2-definitions" + "hints": { + "$ref": "#/components/schemas/cwl-CWLHints" }, - { - "$ref": "#/components/schemas/cql2-cql2-definitions" + "baseCommand": { + "$ref": "#/components/schemas/cwl-CWLCommand" }, - { - "$ref": "#/components/schemas/cql2-cql2-definitions" + "arguments": { + "$ref": "#/components/schemas/cwl-CWLArguments" }, - { - "$ref": "#/components/schemas/cql2-cql2-definitions" + "inputs": { + "$ref": "#/components/schemas/cwl-CWLInputsDefinition" + }, + "outputs": { + "$ref": "#/components/schemas/cwl-CWLOutputsDefinition" }, + "scatter": { + "$ref": "#/components/schemas/cwl-CWLScatter" + }, + "scatterMethod": { + "$ref": "#/components/schemas/cwl-CWLScatterMethod" + } + }, + "required": [ + "class", + "id", + "inputs", + "outputs" + ] + }, + "cwl-CWLGraphItem": { + "allOf": [ { - "$ref": "#/components/schemas/cql2-cql2-definitions" + "$ref": "#/components/schemas/cwl-CWLMetadata" }, { - "$ref": "#/components/schemas/cql2-cql2-definitions" + "$ref": "#/components/schemas/cwl-CWLDocumentation" }, { - "type": "boolean" + "$ref": "#/components/schemas/cwl-CWLGraphItemBase" } - ] + ], + "title": "CWLGraphItem" }, - "cql2-cql2-definitions": { + "cwl-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": "#/components/schemas/cwl-CWLGraphItem" + }, + "maxItems": 1, + "minItems": 1 + }, + "cwl-CWLGraphBase": { "type": "object", + "properties": { + "$graph": { + "$ref": "#/components/schemas/cwl-CWLGraphList" + } + }, "required": [ - "op", - "args" + "$graph" ], - "properties": { - "op": { - "type": "string", - "enum": [ - "a_containedBy", - "a_contains", - "a_equals", - "a_overlaps" - ] + "title": "CWLGraphBase" + }, + "cwl-LinkMergeMethod": { + "type": "string", + "enum": [ + "merge_nested", + "merge_flattened" + ], + "title": "LinkMergeMethod" + }, + "cwl-CWLWorkflowStepInput": { + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepInputBase" }, - "args": { - "$ref": "#/components/schemas/cql2-cql2-definitions" + { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepInputDefault" } - } + ], + "title": "CWLWorkflowStepInput" }, - "processes-dru-inputBinding": { - "type": "object", - "description": ". Defines how to specify the input for the execution unit.\n. The value of various properties defined below can be expressions.\n . The expression language SHALL be JavaScript(???).\n. The \"$(...)\" syntax can be used to reference the current input or other\n process inputs in an expression.\n . The value \"self\" refers to the value of the current input.\n . The value \"inputs.\" refers to the value of another\n process input.\n . If the input is defined as a string of format \"file\" or \"directory\"\n then the meta-values \".path\", \".basename\", \".nameroot\" and \".nameext\"\n can be used to manipulate file or directory name without having to\n resort to complex regular expressions.\n . \".path\" returns the path of a file name without the file name\n . \".basename\" returns the name of the file without the path\n . \".nameroot\" returns the basename without any extension\n . \".nameext\" returns the extension of the basename", - "properties": { - "prefix": { - "description": "Command line prefix to add before the value.", - "type": "string" - }, - "position": { - "description": ". The zero-based sorting key.\n. The value can be an integer or a string.\n. If the value is a string then it should be an expression that evaluates\n to a single integer value or null.", - "oneOf": [ - { - "type": "integer" - }, - { - "type": "string" - } - ] + "cwl-CWLWorkflowNested": { + "description": "Same as 'CWLWorkflow', but 'cwlVersion' not repeated (only at root).", + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLMetadata" }, - "valueFrom": { - "description": ". If valueFrom is a constant string value, use this as the value.\n. If valueFrom is an expression, evaluate the expression to yield the\n actual value to use to build the command line.\n. If the value of the associated input parameter is null, valueFrom is\n not evaluated and nothing is added to the command line.", - "type": "string" + { + "$ref": "#/components/schemas/cwl-CWLDocumentation" }, - "itemSeparator": { - "description": "Join the array elements into a single string with the elements separated\nby itemSeparator.", - "type": "string" + { + "$ref": "#/components/schemas/cwl-CWLWorkflowClass" }, - "shellQuote": { - "description": ". A Boolean that controls whether the value is quoted on the command.\n. A value of true (or if shecllQuote is not provided) means that the\n implementation SHALL not permit the interpretation of any shell\n metacharacters or directives.\n. A value of false should be used to inject metacharacters for operations\n such as pipes.", - "type": "boolean" + { + "$ref": "#/components/schemas/cwl-CWLWorkflowBase" } - }, - "additionalProperties": true + ], + "title": "CWLWorkflowNested" }, - "processes-dru-outputBinding": { + "cwl-CWLWorkflowStepOutId": { "type": "object", - "description": "Defines how to retrieve the output result from the command.", "properties": { - "glob": { - "description": ". Wildcard pattern to find the output on disk or mounted volume.\n. Uses UNIX \"glob\" wildcard patterns (see: \"man 7 glob\").\n. See inputBinding.yaml for referencing input values in an output\n binding \"glob\" expression.", - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] + "id": { + "$ref": "#/components/schemas/cwl-CWLIdentifier" } }, - "additionalProperties": true + "required": [ + "id" + ], + "additionalProperties": false, + "title": "CWLWorkflowStepOutId" }, - "processes-dru-executionUnitContainer": { - "type": "object", - "required": "image", - "properties": { - "image": { - "description": "Container image reference for the execution unit.", - "type": "string" - }, - "deployment": { - "description": "Deployment information for the execution unit.", - "type": "string", - "anyOf": [ - { - "type": "string" - }, - { - "enum": [ - "local", - "remote", - "hpc", - "cloud" - ] - } - ] + "cwl-IdentifierArray": { + "type": "array", + "title": "IdentifierArray", + "items": { + "$ref": "#/components/schemas/cwl-CWLTextPatternID" + }, + "minItems": 1 + }, + "cwl-Scatter": { + "oneOf": [ + { + "$ref": "#/components/schemas/cwl-CWLTextPatternID" }, - "config": { - "type": "object", - "description": "Hardware requirements and configuration properties for executing the\nprocess.", - "properties": { - "cpuMin": { - "description": "Minimum number of CPUs required to run the process (unit is CPU core).", - "type": "number", - "minimum": 1 - }, - "cpuMax": { - "description": "Maximum number of CPU dedicated to the process (unit is CPU core)", - "type": "number" - }, - "memoryMin": { - "description": "Minimum RAM memory required to run the application (unit is GB)", - "type": "number" - }, - "memoryMax": { - "description": "Maximum RAM memory dedicated to the application (unit is GB)", - "type": "number" - }, - "storageTempMin": { - "description": "Minimum required temporary storage size (unit is GB)", - "type": "number" - }, - "storageOutputsMin": { - "description": "Minimum required output storage size (unit is GB)", - "type": "number" - }, - "jobTimeout": { - "description": "Timeout delay for a job execution (in seconds)", - "type": "number" - } - }, - "additionalProperties": true + { + "$ref": "#/components/schemas/cwl-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" + }, + "cwl-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" + ] + }, + "cwl-CWLWorkflowStepItem": { + "allOf": [ + { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepId" }, - "bindings": { - "type": "object", - "properties": { - "inputBindings": { - "additionalProperties": { - "$ref": "#/components/schemas/processes-dru-inputBinding" - } - }, - "outputBindings": { - "additionalProperties": { - "$ref": "#/components/schemas/processes-dru-outputBinding" - } - } - } + { + "$ref": "#/components/schemas/cwl-CWLWorkflowStepObject" } - }, - "additionalProperties": true + ], + "title": "CWLWorkflowStepItem" }, "processes-dru-executionUnitBase": { "oneOf": [ @@ -6616,7 +7502,7 @@ ] }, "value": { - "$ref": "#/components/schemas/CWL-2" + "$ref": "#/components/schemas/cwl-CWL" } } }, @@ -6636,7 +7522,8 @@ } ] } - ] + ], + "title": "executionUnitBase" }, "processes-dru-executionUnit": { "oneOf": [ @@ -6651,7 +7538,8 @@ } ] } - ] + ], + "title": "executionUnit" }, "processes-workflows-execute-workflows": { "allOf": [ @@ -6698,7 +7586,8 @@ } } } - ] + ], + "title": "execute-workflows" }, "processes-workflows-inputProcess": { "allOf": [ @@ -6711,7 +7600,8 @@ { "$ref": "#/components/schemas/processes-workflows-execute-workflows" } - ] + ], + "title": "inputProcess" }, "processes-workflows-value-workflows": { "oneOf": [ @@ -6721,7 +7611,8 @@ { "type": "object" } - ] + ], + "title": "value-workflows" }, "processes-workflows-qualifiedValue-workflows": { "allOf": [ @@ -6742,7 +7633,8 @@ } } } - ] + ], + "title": "qualifiedValue-workflows" }, "processes-workflows-outputSelection-workflows": { "type": "object", @@ -6753,7 +7645,8 @@ "$output": { "type": "string" } - } + }, + "title": "outputSelection-workflows" }, "geojson-FeatureCollection": { "title": "GeoJSON FeatureCollection", @@ -7048,7 +7941,8 @@ ], "default": "ogc-api-processes" } - ] + ], + "title": "processingEntityType" }, "processes-job-management-headers": { "description": "Mapping of included or resolved HTTP headers names and values relevant for the job submission request.", @@ -7056,7 +7950,8 @@ "additionalProperties": { "type": "string", "nullable": true - } + }, + "title": "headers" }, "processes-job-management-jobDefinition": { "description": "Definition of the parameters of a submitted job.", @@ -7130,7 +8025,8 @@ } } }, - "additionalProperties": true + "additionalProperties": true, + "title": "jobDefinition" }, "records-core-roles": { "title": "Types or roles", @@ -7354,7 +8250,8 @@ "description": "Media type of the format.", "type": "string" } - } + }, + "title": "format" }, "records-core-theme": { "type": "object", @@ -7404,7 +8301,8 @@ "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." } - } + }, + "title": "theme" }, "records-core-language": { "type": "object", @@ -7721,7 +8619,8 @@ "type": "string", "format": "date-time" } - } + }, + "title": "collectionProperties" }, "common-geodata-regularGrid": { "type": "object", @@ -8851,7 +9750,7 @@ }, "application/ld+json": { "schema": { - "$ref": "#/components/schemas/prov:Document" + "$ref": "#/components/schemas/schema-3" } }, "application/provenance+xml": { diff --git a/openapi/ogcapi-processes.yaml b/openapi/ogcapi-processes.yaml index d1527cf9..3449c4b6 100644 --- a/openapi/ogcapi-processes.yaml +++ b/openapi/ogcapi-processes.yaml @@ -129,7 +129,8 @@ components: # Common Workflow Language CWL: #$ref: 'https://w3id.org/cwl/v1.2/cwl-json-schema.yaml' - $ref: 'schemas/cwl/cwl.yaml' + #$ref: 'schemas/cwl/cwl.yaml' # alias, can use either one interchangeably + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWL' cwltool_CUDARequirement: $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/cwltool_CUDARequirement' diff --git a/openapi/paths/processes-dru/operations/oDeploy.yaml b/openapi/paths/processes-dru/operations/oDeploy.yaml index 9e13b262..1b023265 100644 --- a/openapi/paths/processes-dru/operations/oDeploy.yaml +++ b/openapi/paths/processes-dru/operations/oDeploy.yaml @@ -19,14 +19,17 @@ requestBody: application/cwl: schema: #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "../../../schemas/cwl/cwl-json-schema.yaml#/$defs/CWL" $ref: "../../../schemas/cwl/cwl.yaml" application/cwl+json: schema: #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "../../../schemas/cwl/cwl-json-schema.yaml#/$defs/CWL" $ref: "../../../schemas/cwl/cwl.yaml" application/cwl+yaml: schema: #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "../../../schemas/cwl/cwl-json-schema.yaml#/$defs/CWL" $ref: "../../../schemas/cwl/cwl.yaml" responses: 201: diff --git a/openapi/paths/processes-dru/operations/oReplace.yaml b/openapi/paths/processes-dru/operations/oReplace.yaml index 509be06b..0e184819 100644 --- a/openapi/paths/processes-dru/operations/oReplace.yaml +++ b/openapi/paths/processes-dru/operations/oReplace.yaml @@ -19,14 +19,17 @@ requestBody: application/cwl: schema: #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "../../../schemas/cwl/cwl-json-schema.yaml#/$defs/CWL" $ref: "../../../schemas/cwl/cwl.yaml" application/cwl+json: schema: #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "../../../schemas/cwl/cwl-json-schema.yaml#/$defs/CWL" $ref: "../../../schemas/cwl/cwl.yaml" application/cwl+yaml: schema: #$ref: "https://w3id.org/cwl/v1.2/cwl-json-schema.yaml" + #$ref: "../../../schemas/cwl/cwl-json-schema.yaml#/$defs/CWL" $ref: "../../../schemas/cwl/cwl.yaml" responses: 200: diff --git a/openapi/schemas/cwl/cwl.yaml b/openapi/schemas/cwl/cwl.yaml index 79825f74..d87dfed9 100644 --- a/openapi/schemas/cwl/cwl.yaml +++ b/openapi/schemas/cwl/cwl.yaml @@ -1 +1,4 @@ +# this schema can be used to more easily refer to the top-most CWL schema directly +# for references within OpenAPI, use explicit reference to below local CWL schema rather than the remote one +# this avoids creating duplicate entries for which tools like redocly tries to dinstinguish with unnecessary suffixes $ref: './cwl-json-schema.yaml#/$defs/CWL' diff --git a/openapi/schemas/processes-dru/executionUnitBase.yaml b/openapi/schemas/processes-dru/executionUnitBase.yaml index f7a64e68..9174c2ce 100644 --- a/openapi/schemas/processes-dru/executionUnitBase.yaml +++ b/openapi/schemas/processes-dru/executionUnitBase.yaml @@ -27,7 +27,9 @@ oneOf: enum: - application/cwl value: - $ref: "https://raw.githubusercontent.com/common-workflow-language/cwl-v1.2/main/json-schema/cwl.yaml" + #$ref: "https://raw.githubusercontent.com/common-workflow-language/cwl-v1.2/main/json-schema/cwl.yaml" + #$ref: "../cwl/cwl-json-schema.yaml#/$defs/CWL" + $ref: "../cwl/cwl.yaml" - description: |- The execution unit is not Docker/OCI or CWL and cannot be properly described via the "mediaType" property of a qualified value