From 2d84fec32e3af9275afecc6088aab8b68dd55c2b Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Thu, 19 Mar 2026 22:59:45 -0400 Subject: [PATCH 1/2] Additional fixes solving CQL2 and Common errors - Synced with latest Common - Part 2 --- openapi/ogcapi-processes.bundled.json | 6780 ++++++++++------- openapi/ogcapi-processes.yaml | 244 +- .../parameters/processes-core/bbox-crs.yaml | 4 +- .../responses/common-geodata/rCollection.yaml | 8 +- .../processes-core/rExecuteSync.yaml | 23 +- .../additionalDimensionExtent.yaml | 71 + .../common-geodata/collectionDesc-UAD.yaml | 6 + .../common-geodata/collectionDesc.yaml | 6 + .../common-geodata/collectionInfo.yaml | 83 - .../common-geodata/collectionProperties.yaml | 214 + .../schemas/common-geodata/collections.yaml | 19 +- openapi/schemas/common-geodata/dataType.yaml | 2 +- .../schemas/common-geodata/extent-UAD.yaml | 15 + .../schemas/common-geodata/extent-uad.yaml | 85 - openapi/schemas/common-geodata/extent.yaml | 218 +- openapi/schemas/common-geodata/grid.yaml | 16 + .../schemas/common-geodata/irregularGrid.yaml | 36 + .../schemas/common-geodata/numberMatched.yaml | 7 +- .../common-geodata/numberReturned.yaml | 11 +- .../schemas/common-geodata/regularGrid.yaml | 45 + .../schemas/common-geodata/spatialExtent.yaml | 124 + .../common-geodata/temporalExtent.yaml | 48 + openapi/schemas/common-geodata/timeStamp.yaml | 1 + openapi/schemas/cql2/cql2-definitions.yaml | 20 +- .../schemas/{common-geodata => crs}/crs.yaml | 0 .../{common-geodata => crs}/projJSON.yaml | 0 openapi/schemas/cwl/cwl-json-schema.yaml | 78 +- openapi/schemas/records-core/contact.yaml | 141 + openapi/schemas/records-core/format.yaml | 16 + openapi/schemas/records-core/language.yaml | 42 + openapi/schemas/records-core/roles.yaml | 9 + openapi/schemas/records-core/theme.yaml | 49 + 32 files changed, 5051 insertions(+), 3370 deletions(-) create mode 100644 openapi/schemas/common-geodata/additionalDimensionExtent.yaml create mode 100644 openapi/schemas/common-geodata/collectionDesc-UAD.yaml create mode 100644 openapi/schemas/common-geodata/collectionDesc.yaml delete mode 100644 openapi/schemas/common-geodata/collectionInfo.yaml create mode 100644 openapi/schemas/common-geodata/collectionProperties.yaml create mode 100644 openapi/schemas/common-geodata/extent-UAD.yaml delete mode 100644 openapi/schemas/common-geodata/extent-uad.yaml create mode 100644 openapi/schemas/common-geodata/grid.yaml create mode 100644 openapi/schemas/common-geodata/irregularGrid.yaml create mode 100644 openapi/schemas/common-geodata/regularGrid.yaml create mode 100644 openapi/schemas/common-geodata/spatialExtent.yaml create mode 100644 openapi/schemas/common-geodata/temporalExtent.yaml rename openapi/schemas/{common-geodata => crs}/crs.yaml (100%) rename openapi/schemas/{common-geodata => crs}/projJSON.yaml (100%) create mode 100644 openapi/schemas/records-core/contact.yaml create mode 100644 openapi/schemas/records-core/format.yaml create mode 100644 openapi/schemas/records-core/language.yaml create mode 100644 openapi/schemas/records-core/roles.yaml create mode 100644 openapi/schemas/records-core/theme.yaml diff --git a/openapi/ogcapi-processes.bundled.json b/openapi/ogcapi-processes.bundled.json index 185b7406..114ad847 100644 --- a/openapi/ogcapi-processes.bundled.json +++ b/openapi/ogcapi-processes.bundled.json @@ -688,345 +688,799 @@ "properties": { "links": { "type": "array", + "title": "Links to resource in the collections", + "description": "Links to this or other resources provided by the collections.", "items": { "$ref": "#/components/schemas/link" } }, - "timeStamp": { - "type": "string", - "format": "date-time" - }, "numberMatched": { - "type": "integer", - "minimum": 0, - "example": 1 + "$ref": "#/components/schemas/numberMatched" }, "numberReturned": { - "type": "integer", - "minimum": 0, - "example": 1 + "$ref": "#/components/schemas/numberReturned" }, "collections": { "type": "array", + "title": "Collections descriptions", + "description": "Descriptions of each collection in this API.", "items": { - "$ref": "#/components/schemas/collectionInfo" + "$ref": "#/components/schemas/collectionDesc" } } } }, - "collectionInfo": { - "type": "object", - "required": [ - "id", - "links" - ], - "properties": { - "id": { - "type": "string", - "description": "identifier of the collection used, for example, in URIs", - "example": "dem" - }, - "title": { - "type": "string", - "description": "human readable title of the collection", - "example": "Digital Elevation Model" - }, - "description": { - "type": "string", - "description": "a description of the data in the collection", - "example": "A Digital Elevation Model." - }, - "links": { - "type": "array", - "example": [ - { - "href": "http://data.example.org/collections/dem?f=json", - "rel": "self", - "type": "application/json", - "title": "Digital Elevation Model" + "collectionDesc": { + "allOf": [ + { + "type": "object", + "required": [ + "id", + "links" + ], + "properties": { + "id": { + "type": "string", + "title": "Identifier of the resource", + "description": "Identifier of the collection, for example, used in URI path parameters.", + "minLength": 1, + "example": "dem" }, - { - "href": "http://data.example.org/collections/dem?f=html", - "rel": "alternate", - "type": "application/json", - "title": "Digital Elevation Model" + "title": { + "type": "string", + "title": "Title of the collection", + "description": "A short, human-readable summary of the collection.", + "example": "Digital Elevation Model" }, - { - "href": "http://data.example.org/collections/dem/coverage", - "rel": "coverage", - "type": "image/tiff; application=geotiff", - "title": "Digital Elevation Model" + "description": { + "type": "string", + "title": "Description of the collection", + "description": "A human-readable explanation about data in the collection.", + "example": "A Digital Elevation Model." }, - { - "href": "http://data.example.org/collections/dem/coverage/domainset", - "rel": "domainset", - "type": "application/json", - "title": "Digital Elevation Model" + "attribution": { + "type": "string", + "title": "Attribution for the collection", + "description": "Attribution for the collection, providing a way to identify the source of the geographic information, which can contain markup text whose format may be indicated in the `attributionMediaType` property. That format can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`).\nIf the 'attributionMediaType' indicates something other than `text/plain`, the `attribution` element string should be interpreted by a markup parser selected based on that media type to be presented to the user\n(e.g., `text/markdown` will be parsed by a library supporting CommonMark). By allowing markup, the attribution string can import images (e.g., organization logos) and format the text (e.g., the name of the organization in italics)." }, - { - "href": "http://data.example.org/collections/dem/coverage/rangetype", - "rel": "rangetype", - "type": "application/json", - "title": "Digital Elevation Model" + "attributionMediaType": { + "title": "Media type of the attribution", + "description": "Media type for the markup language of the attribution: It can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`).", + "enum": [ + "text/plain", + "text/html", + "text/markdown" + ] }, - { - "href": "http://data.example.org/collections/dem/coverage/metadata", - "rel": "metadata", - "type": "application/json", - "title": "Digital Elevation Model" - } - ], - "items": { - "$ref": "#/components/schemas/link" - } - }, - "extent": { - "$ref": "#/components/schemas/extent-uad" - }, - "itemType": { - "description": "indicator about the type of the items in the collection if the collection has an accessible /collections/{collectionId}/items endpoint", - "type": "string", - "default": "unknown" - }, - "crs": { - "description": "the list of coordinate reference systems supported by the API; the first item is the default coordinate reference system", - "type": "array", - "items": { - "type": "string" - }, - "default": [ - "http://www.opengis.net/def/crs/OGC/1.3/CRS84" - ], - "example": [ - "http://www.opengis.net/def/crs/OGC/1.3/CRS84", - "http://www.opengis.net/def/crs/EPSG/0/4326" - ] - }, - "dataType": { - "allOf": [ - { - "description": "Type of data represented in the collection" + "accessConstraints": { + "title": "Access Constraints of the collection", + "description": "Restrictions on the availability of the collection that the user needs to be aware of before using or redistributing the data:\n\n* unclassified: Available for general disclosure\n* restricted: Not for general disclosure\n* confidential: Available for someone who can be entrusted with information\n* secret: Kept or meant to be kept private, unknown, or hidden from all but a select group of people\n* topSecret: Of the highest secrecy", + "enum": [ + "unclassified", + "restricted", + "confidential", + "secret", + "topSecret" + ] }, - { - "$ref": "#/components/schemas/dataType" - } - ] - }, - "geometryDimension": { - "description": "The geometry dimension of the features shown in this layer (0: points, 1: curves, 2: surfaces, 3: solids), unspecified: mixed or unknown", - "type": "integer", - "minimum": 0, - "maximum": 3 - }, - "minScaleDenominator": { - "description": "Minimum scale denominator for usage of the collection", - "type": "number" - }, - "maxScaleDenominator": { - "description": "Maximum scale denominator for usage of the collection", - "type": "number" - }, - "minCellSize": { - "description": "Minimum cell size for usage of the collection", - "type": "number" - }, - "maxCellSize": { - "description": "Maximum cell size for usage of the collection", - "type": "number" - } - } - }, - "extent": { - "description": "The extent of the data in the collection. In the Core only spatial and temporal\nextents are specified. Extensions may add additional members to represent other\nextents, for example, thermal or pressure ranges.\n\nThe first item in the array describes the overall extent of\nthe data. All subsequent items describe more precise extents,\ne.g., to identify clusters of data.\nClients only interested in the overall extent will only need to\naccess the first item in each array.", - "type": "object", - "properties": { - "spatial": { - "description": "The spatial extent of the data in the collection.", - "type": "object", - "properties": { - "bbox": { - "description": "One or more bounding boxes that describe the spatial extent of the dataset.\nIn the Core only a single bounding box is supported.\n\nExtensions may support additional areas.\nThe first bounding box describes the overall spatial\nextent of the data. All subsequent bounding boxes describe\nmore precise bounding boxes, e.g., to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", + "publisher": { + "type": "string", + "title": "Responsible party publishing the collection", + "description": "Organization or individual responsible for making the data available" + }, + "contacts": { "type": "array", + "title": "A list of contacts", + "description": "A list of contacts qualified by their role(s) in association to the collection.", "minItems": 1, "items": { - "description": "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)\n\nIf the value consists of four numbers, the coordinate reference system is\nWGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in a parameter `bbox-crs`.\n\nIf the value consists of six numbers, the coordinate reference system is WGS 84\nlongitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h)\nunless a different coordinate reference system is specified in a parameter `bbox-crs`.\n\nFor WGS 84 longitude/latitude the values are in most cases the sequence of\nminimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value\n(west-most box edge) is larger than the third value (east-most box edge).\n\nIf the vertical axis is included, the third and the sixth number are\nthe bottom and the top of the 3-dimensional bounding box.\n\nIf a feature has multiple spatial geometry properties, it is the decision of the\nserver whether only a single spatial geometry property is used to determine\nthe extent or all relevant geometries.", - "type": "array", - "oneOf": [ + "type": "object", + "title": "Contact information", + "description": "Identification of, and means of communication with, person responsible\nfor the resource.", + "anyOf": [ { - "minItems": 4, - "maxItems": 4 + "required": [ + "name" + ] }, { - "minItems": 6, - "maxItems": 6 + "required": [ + "organization" + ] } ], - "items": { - "type": "number" - }, - "example": [ - -180, - -90, - 180, - 90 - ] - } - }, - "crs": { - "description": "Coordinate reference system of the coordinates in the spatial extent\n(property `bbox`). The default reference system is WGS 84 longitude/latitude.\nIn the Core the only other supported coordinate reference system is\nWGS 84 longitude/latitude/ellipsoidal height for coordinates with height.\nExtensions may support additional coordinate reference systems and add\nadditional enum values.", - "type": "string", - "enum": [ - "http://www.opengis.net/def/crs/OGC/1.3/CRS84", - "http://www.opengis.net/def/crs/OGC/0/CRS84h" - ], - "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" - }, - "grid": { - "description": "Provides information about the limited availability of data within the collection organized\nas a grid (regular or irregular) along each spatial dimension.", - "type": "array", - "minItems": 2, - "maxItems": 3, - "items": { - "type": "object", "properties": { - "coordinates": { - "description": "List of coordinates along the dimension for which data organized as an irregular grid in the collection is available\n(e.g., 2, 10, 80, 100).", + "identifier": { + "type": "string", + "title": "Identifier of the contact", + "description": "A value uniquely identifying a contact." + }, + "name": { + "type": "string", + "title": "name of the contact person", + "description": "The name of the responsible person." + }, + "position": { + "type": "string", + "title": "position in the organization", + "description": "The name of the role or position of the responsible person taken\nfrom the organization's formal organizational hierarchy or chart." + }, + "organization": { + "type": "string", + "title": "Name of the organization", + "description": "Organization/affiliation of the contact." + }, + "logo": { + "title": "Logo of the contact", + "description": "Link to a graphic identifying a contact. The link relation should be `icon`\nand the media type should be an image media type.", + "allOf": [ + { + "$ref": "#/components/schemas/link" + }, + { + "type": "object", + "required": [ + "rel", + "type" + ], + "properties": { + "rel": { + "enum": [ + "icon" + ] + } + } + } + ] + }, + "phones": { "type": "array", - "minItems": 1, + "title": "Telephone numbers", + "description": "Telephone numbers at which contact can be made.", "items": { - "oneOf": [ - { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { "type": "string", - "nullable": true + "title": "Phone number.", + "description": "The value is the phone number itself.", + "pattern": "^\\+[1-9]{1}[0-9]{3,14}$", + "example": "+14165550142" + }, + "roles": { + "title": "Type of phone number.", + "description": "The type of phone number (e.g. home, work, fax, etc.).", + "$ref": "#/components/schemas/collectionDesc/allOf/0/properties/contacts/items/properties/roles" + } + } + } + }, + "emails": { + "type": "array", + "title": "Email addresses", + "description": "Email addresses at which contact can be made.", + "items": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string", + "title": "Email address", + "description": "The value is the email itself.", + "format": "email" + }, + "roles": { + "title": "Type of email", + "description": "The type of email (e.g. home, work, etc.).", + "$ref": "#/components/schemas/collectionDesc/allOf/0/properties/contacts/items/properties/roles" + } + } + } + }, + "addresses": { + "type": "array", + "title": "Postal addresses", + "description": "Physical locations at which contact can be made.", + "items": { + "type": "object", + "properties": { + "deliveryPoint": { + "type": "array", + "title": "Details of the address", + "description": "Address lines for the location (e.g. street name and door number).", + "items": { + "type": "string" + } + }, + "city": { + "type": "string", + "title": "City", + "description": "City for the location." + }, + "administrativeArea": { + "type": "string", + "title": "State of province", + "description": "State or province of the location." + }, + "postalCode": { + "type": "string", + "title": "Postal code", + "description": "ZIP or other postal code." + }, + "country": { + "type": "string", + "title": "Country", + "description": "Country of the physical address. ISO 3166-1 is recommended." + }, + "roles": { + "title": "Type of postal address", + "description": "The type of postal address (e.g. office, home, etc.).", + "$ref": "#/components/schemas/collectionDesc/allOf/0/properties/contacts/items/properties/roles" + } + } + } + }, + "links": { + "type": "array", + "title": "Links about the contact", + "description": "On-line information about the contact.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/link" }, { - "type": "number" + "type": "object", + "required": [ + "type" + ] } ] - }, - "example": [ - 2, - 10, - 80, - 100 - ] + } }, - "cellsCount": { - "description": "Number of samples available along the dimension for data organized as a regular grid.\nFor values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_.\nFor values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1.", - "type": "integer", - "example": 50 + "hoursOfService": { + "type": "string", + "title": "Hours of service", + "description": "Time period when the contact can be contacted.", + "example": "Hours: Mo-Fr 10am-7pm Sa 10am-22pm Su 10am-21pm" }, - "resolution": { - "description": "Resolution of regularly gridded data along the dimension in the collection", - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ], - "example": 0.0006866455078 + "contactInstructions": { + "type": "string", + "title": "Contact instructions", + "description": "Supplemental instructions on how or when to contact can be made." + }, + "roles": { + "title": "Types of contact person", + "description": "The set of named duties, job functions and/or permissions associated with this contact. (e.g. developer, administrator, etc.).", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } } } } - } - } - }, - "temporal": { - "description": "The temporal extent of the features in the collection.", - "type": "object", - "properties": { - "interval": { - "description": "One or more time intervals that describe the temporal extent of the dataset.\nIn the Core only a single time interval is supported.\n\nExtensions may support multiple intervals.\nThe first time interval describes the overall\ntemporal extent of the data. All subsequent time intervals describe\nmore precise time intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item in each array.", - "type": "array", - "minItems": 1, - "items": { - "description": "Begin and end times of the time interval. The timestamps are in the\ntemporal coordinate reference system specified in `trs`. By default\nthis is the Gregorian calendar.\n\nThe value `null` for start or end time is supported and indicates a half-bounded time interval.", - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "example": [ - "2011-11-11T12:22:11Z", - null - ] - } }, - "trs": { - "description": "Coordinate reference system of the coordinates in the temporal extent\n(property `interval`). The default reference system is the Gregorian calendar.\nIn the Core this is the only supported temporal coordinate reference system.\nExtensions may support additional temporal coordinate reference systems and add\nadditional enum values.", + "license": { "type": "string", - "enum": [ - "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - ], - "default": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" + "title": "License associated to the collection", + "description": "The legal provisions under which the data of this collection is made available." }, - "grid": { - "type": "object", - "description": "Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the temporal dimension.", - "properties": { - "coordinates": { - "description": "List of coordinates along the temporal dimension for which data organized as an irregular grid in the collection is available\n(e.g., \"2017-11-14T09:00Z\",\"2017-11-14T12:00Z\",\"2017-11-14T15:00Z\",\"2017-11-14T18:00Z\",\"2017-11-14T21:00Z\").", - "type": "array", - "minItems": 1, - "items": { - "type": "string", - "nullable": true + "rights": { + "type": "string", + "title": "Rights over the collection", + "description": "A statement that concerns all rights not addressed by the license such as a copyright statement." + }, + "formats": { + "title": "Formats for distributing the collection", + "description": "A list of formats in which the data of this collection is distributed", + "type": "array", + "items": { + "type": "object", + "anyOf": [ + { + "required": [ + "name" + ] }, - "example": [ - [ - "2020-11-12T12:15Z", - "2020-11-12T12:30Z", - "2020-11-12T12:45Z" + { + "required": [ + "mediaType" ] - ] - }, - "cellsCount": { - "description": "Number of samples available along the temporal dimension for data organized as a regular grid.\nFor values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_.\nFor values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1.", - "type": "integer", - "example": 50 - }, - "resolution": { - "description": "Resolution of regularly gridded data along the temporal dimension in the collection", - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ], - "example": "PT1H" - } - } + } + ], + "properties": { + "name": { + "title": "Name of the format", + "description": "Name of the format.", + "type": "string" + }, + "mediaType": { + "title": "Media type of the format", + "description": "Media type of the format.", + "type": "string" + } + } + } + }, + "keywords": { + "type": "array", + "title": "Keywords representing aspects of the collection", + "description": "The topic or topics of the resource. Typically represented using free-form keywords, tags, key phrases, or classification codes.", + "items": { + "type": "string" + } + }, + "themes": { + "type": "array", + "title": "Themes represented by the resource", + "description": "A knowledge organization system used to classify the resource.", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "concepts", + "scheme" + ], + "properties": { + "concepts": { + "type": "array", + "title": "List of concepts in the vocabulary", + "description": "One or more entity/concept identifiers from this knowledge system. it is recommended that a resolvable URI be used for each entity/concept identifier.", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "title": "Identifier for the concept", + "description": "Identifier for the concept in the knowledge system.", + "minLength": 1 + }, + "title": { + "type": "string", + "title": "Title of the concept", + "description": "A human readable title for the concept." + }, + "description": { + "type": "string", + "title": "Description of the concept", + "description": "A human readable description for the concept." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URI of the concept", + "description": "A URI providing further description of the concept. It is called \"definition\" in STA." + } + } + } + }, + "scheme": { + "type": "string", + "title": "Identifier of the vocabulary", + "description": "An identifier for the knowledge organization system used to classify the resource. It is recommended that the identifier be a resolvable URI. The list of schemes used in a searchable catalog can be determined by inspecting the server's OpenAPI document or, if the server implements CQL2, by exposing a queryable (e.g. named `scheme`) and enumerating the list of schemes in the queryable's schema definition." + } + } + } + }, + "resourceLanguages": { + "type": "array", + "title": "The list of languages of the collection", + "description": "The list of languages in which the data of this collection is available.", + "items": { + "type": "object", + "title": "Resource language", + "description": "The language used for textual values in this resource.", + "required": [ + "code" + ], + "properties": { + "code": { + "type": "string", + "title": "Code", + "description": "The language tag as per RFC-5646.", + "example": "el" + }, + "name": { + "type": "string", + "minLength": 1, + "title": "Original name", + "description": "The untranslated name of the language.", + "example": "Ελληνικά" + }, + "alternate": { + "type": "string", + "title": "Translated name", + "description": "The name of the language in another well-understood language, usually English.", + "example": "Greek" + }, + "dir": { + "type": "string", + "title": "Direction of the text", + "description": "The direction for text in this language. The default, `ltr` (left-to-right), represents the most common situation. However, care should be taken to set the value of `dir` appropriately if the language direction is not `ltr`. Other values supported are `rtl` (right-to-left), `ttb` (top-to-bottom), and `btt` (bottom-to-top).", + "enum": [ + "ltr", + "rtl", + "ttb", + "btt" + ], + "default": "ltr" + } + } + } + }, + "links": { + "type": "array", + "title": "Links relevant to this collection", + "description": "Links to this or other resources related to this collection.", + "example": [ + { + "href": "http://data.example.org/collections/dem?f=json", + "rel": "self", + "type": "application/json", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem?f=html", + "rel": "alternate", + "type": "application/json", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage", + "rel": "coverage", + "type": "image/tiff; application=geotiff", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage/domainset", + "rel": "domainset", + "type": "application/json", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage/rangetype", + "rel": "rangetype", + "type": "application/json", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage/metadata", + "rel": "metadata", + "type": "application/json", + "title": "Digital Elevation Model" + } + ], + "items": { + "$ref": "#/components/schemas/link" + } + }, + "itemType": { + "title": "Type of the items in the collection", + "description": "Indicator about the type of the items in the collection if the collection has an accessible `/collections/{collectionId}/items` endpoint (e.g., `feature` or `record`).", + "type": "string", + "default": "feature" + }, + "dataType": { + "title": "Nature of the data in the collection", + "description": "Nature of the data in the collection. For example, this could be set to `map`, `vector` or `coverage`. It is not an indication of the available data access mechanism, but a hint regarding the internal representation of the data.", + "$ref": "#/components/schemas/dataType" + }, + "parent": { + "title": "Identifier of a parent collection (if this collection is part of a hierarchy)", + "description": "If this collection is part of a hierarchy, this property allows to identify another collection within the same dataset as its parent (by setting `parent` to the `id` of that collection), enabling clients to construct a hierarchy.", + "type": "string" + }, + "geoDataClasses": { + "title": "Class of data in the collection", + "description": "One or more classes of geospatial data, identified by a URI, which implies compatibility with a particular schema (fields/properties, as defined in OGC API - Common - Part 3: Schemas) for one or more collections, each with particular semantic definitions and data types. This is useful for example to determine compatibility with styles or processes, or to identify a particular collection within a dataset based on semantics.", + "type": "array", + "items": { + "type": "string", + "format": "uri" + } + }, + "defaultFields": { + "title": "List of fields returned by default", + "description": "A sorted list of field names. For a Features data access mechanism, it is the list of returnable properties included by default and complementing the geometry of the features. For a Coverage data access mechanism, they are names of fields whose values are included by default. Note that an API may provide a mechanism (e.g., a query parameter called `properties` or `exclude-properties`) to override this default list in customized responses.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "crs": { + "title": "List of coordinate reference systems supported in the collection", + "description": "The list of coordinate reference systems supported by the API; if present, the list should include the default coordinate reference system (usually listed first). Each item should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + }, + "default": [ + "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + ], + "example": [ + "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "http://www.opengis.net/def/crs/EPSG/0/4326" + ] + }, + "storageCrs": { + "title": "Storage or native CRS of the data in the collection", + "description": "The native coordinate reference system (i.e., the most efficient CRS in which to request the data, possibly how the data is stored on the server); this is the default output coordinate reference system for Maps and Coverages. This should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ], + "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "example": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + }, + "epoch": { + "title": "Epoch of the data in the collection", + "description": "Epoch of the native (storage) Coordinate Reference System (CRS)", + "type": "number", + "example": 2021.33 + }, + "geometryDimension": { + "title": "Number of spatial dimensions of the primary geometry for the data", + "description": "Number of spatial dimensions of the primary geometry of individual elements of the data: 0 for points, 1 for curves, 2 for surfaces, 3 for solids and unspecified when mixed or unknown. Not to be confused with the dimensions of the domain which are defined by the extent element.", + "type": "integer", + "minimum": 0, + "maximum": 3 + }, + "minScaleDenominator": { + "title": "Minimum scale denominator for the collection", + "description": "Minimum scale denominator for usage of the collection.", + "type": "number" + }, + "maxScaleDenominator": { + "title": "Maximum scale denominator for the collection", + "description": "Maximum scale denominator for usage of the collection.", + "type": "number" + }, + "minCellSize": { + "title": "Minimum cell size for the collection", + "description": "Minimum cell size for usage of the collection.", + "type": "number" + }, + "maxCellSize": { + "title": "Maximum cell size for the collection", + "description": "Maximum cell size for usage of the collection.", + "type": "number" + }, + "created": { + "title": "Timestamp when the collection was first produced", + "description": "Timestamp indicating when the data in the collection was first produced.", + "type": "string", + "format": "date-time" + }, + "updated": { + "title": "Timestamp of the last change/revision to the collection", + "description": "Timestamp of the last change/revision to the data in the collection.", + "type": "string", + "format": "date-time" + } + } + }, + { + "type": "object", + "properties": { + "extent": { + "$ref": "#/components/schemas/extent" } } } - } + ] }, - "extent-uad": { - "title": "Extent with Uniform Additional Dimensions Schema", - "description": "The extent module only addresses spatial and temporal extents. This module extends extent by specifying how\nintervals and crs properties can be used to specify additional geometries.", + "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/extent" + "type": "object", + "properties": { + "spatial": { + "title": "Spatial extent", + "description": "The spatial extent of the data in the collection.", + "type": "object", + "properties": { + "bbox": { + "title": "Bounding box in the 'crs' coordinates", + "description": "One or more bounding boxes that describe the spatial extent of the dataset.\n\nThe first bounding box describes the overall spatial\nextent of the data. All subsequent bounding boxes describe\nmore precise bounding boxes, e.g., to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", + "type": "array", + "minItems": 1, + "items": { + "description": "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)\n\nIf the value consists of four numbers, the coordinate reference system is\nWGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in `crs` property.\n\nIf the value consists of six numbers, the coordinate reference system is WGS 84\nlongitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h)\nunless a different coordinate reference system is specified in `crs` property.\n\nFor WGS 84 longitude/latitude the values are in most cases the sequence of\nminimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value\n(west-most box edge) is larger than the third value (east-most box edge).\n\nIf the vertical axis is included, the third and the sixth number are\nthe bottom and the top of the 3-dimensional bounding box.\n\nIf a feature has multiple spatial geometry properties, it is the decision of the\nserver whether only a single spatial geometry property is used to determine\nthe extent or all relevant geometries.", + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 + }, + { + "minItems": 6, + "maxItems": 6 + } + ], + "items": { + "type": "number" + }, + "example": [ + -180, + -90, + 180, + 90 + ] + } + }, + "storageCrsBbox": { + "title": "Bounding box in the storage CRS", + "description": "One or more bounding boxes that describe the spatial extent of the dataset in the storage (native) CRS (`storageCrs` property).\n\nThe first bounding box describes the overall spatial\nextent of the data. All subsequent bounding boxes describe\nmore precise bounding boxes, e.g., to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", + "type": "array", + "minItems": 1, + "items": { + "description": "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)", + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 + }, + { + "minItems": 6, + "maxItems": 6 + } + ], + "items": { + "type": "number" + }, + "example": [ + -180, + -90, + 180, + 90 + ] + } + }, + "crs": { + "title": "Coordinate reference system", + "description": "Coordinate reference system of the coordinates of the `bbox` property.\nThe default reference system is WGS 84 longitude/latitude.\nWGS 84 longitude/latitude/ellipsoidal height for coordinates with height.\nFor data not referenced to Earth, another CRS may be specified.\nThis should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "http://www.opengis.net/def/crs/OGC/0/CRS84h" + ] + }, + { + "type": "object" + } + ], + "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + }, + "grid": { + "title": "Grid description", + "description": "Provides information about the limited availability of data within the collection organized\nas a grid (regular or irregular) along each spatial dimension.", + "type": "array", + "minItems": 2, + "maxItems": 3, + "items": { + "$ref": "#/components/schemas/extent-UAD/allOf/0/additionalProperties/properties/grid" + } + } + } + }, + "temporal": { + "title": "Temporal extent", + "description": "The temporal extent of the data in the collection.", + "type": "object", + "properties": { + "interval": { + "title": "Temporal intervals", + "description": "One or more time intervals that describe the temporal extent of the dataset.\n\nThe first time interval describes the overall\ntemporal extent of the data. All subsequent time intervals describe\nmore precise time intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item in each array.", + "type": "array", + "minItems": 1, + "items": { + "description": "Begin and end times of the time interval. The timestamps are in the\ntemporal coordinate reference system specified in `trs`. By default\nthis is the Gregorian calendar, expressed using RFC 3339 section 5.6.\nNote that these times may be specified using time zone offsets to UTC time other than zero.\n\nThe value `null` for start or end time is supported and indicates a half-bounded time interval.", + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": "2011-11-11T12:22:11Z" + } + } + }, + "trs": { + "title": "Temporal Coordinate Reference System", + "description": "Coordinate reference system of the coordinates in the temporal extent\n(property `interval`). The default reference system is the Gregorian calendar.\nFor data for which the Gregorian calendar is not suitable, such as geological time scale, another temporal reference system may be used.\nThis should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" + ] + }, + { + "type": "object" + } + ], + "default": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" + }, + "grid": { + "$ref": "#/components/schemas/extent-UAD/allOf/0/additionalProperties/properties/grid" + } + } + } + } }, + { + "anyOf": [ + { + "type": "object", + "description": "General object extension point" + }, + { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/extent-UAD/allOf/0/additionalProperties" + } + } + ] + } + ] + }, + "extent-UAD": { + "title": "Extent conforming to Uniform Additional Dimensions Schema", + "description": "The extent of the data in the collection.\nThis extent schema requires that if any dimension beyond spatial and temporal are specified, they conform to the Uniform Additional Dimensions schema.\nIn addition to the spatial and temporal extents defined in the \"Collections\" requirements class of OGC API - Common - Part 2,\nthe \"Uniform Additional Dimensions\" requirements class specifies a generic schema for describing any additional dimension, such as thermal or pressure ranges.", + "allOf": [ { "type": "object", + "properties": { + "spatial": { + "$ref": "#/components/schemas/extent/allOf/0/properties/spatial" + }, + "temporal": { + "$ref": "#/components/schemas/extent/allOf/0/properties/temporal" + } + }, "additionalProperties": { + "title": "Extent of any additional dimensions", "description": "The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial.", "type": "object", "oneOf": [ { "required": [ "interval", - "crs" + "definition" ] }, { @@ -1044,6 +1498,7 @@ ], "properties": { "interval": { + "title": "Interval of the extent of this dimension", "description": "One or more intervals that describe the extent for this dimension of the dataset.\nThe value `null` is supported and indicates an unbounded or half-bounded interval.\nThe first interval describes the overall extent of the data for this dimension.\nAll subsequent intervals describe more precise intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item (a pair of lower and upper bound values).", "type": "array", "minItems": 1, @@ -1056,80 +1511,244 @@ "oneOf": [ { "type": "string", - "nullable": true + "nullable": true, + "example": "2011-11-11T12:22:11Z" }, { - "type": "number" + "type": "number", + "example": 32.7 } ] - }, - "example": [ - "2011-11-11T12:22:11Z", - 32.5, - null - ] + } } }, - "crs": { - "type": "string", - "description": "generic coordinate reference system suitable for any type of dimensions" - }, "trs": { - "type": "string", - "description": "temporal coordinate reference system (e.g. as defined by Features for 'temporal')" + "title": "Temporal Coordinate Reference System", + "description": "Temporal Coordinate Reference System (e.g. as defined by Features for 'temporal'). This should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] }, "vrs": { - "type": "string", - "description": "vertical coordinate reference system (e.g. as defined in EDR for 'vertical')" + "title": "Vertical Coordinate Reference System", + "description": "Vertical Coordinate Reference System (e.g. as defined in EDR for 'vertical'). This should be a URI to a registered VRS if one is available, or a full description of the VRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] }, "grid": { "type": "object", + "title": "Grid.", "description": "Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the dimension.", - "properties": { - "coordinates": { - "description": "List of coordinates along the temporal dimension for which data organized as an irregular grid in the collection is available\n(e.g., 2, 10, 80, 100).", - "type": "array", - "minItems": 1, - "items": { - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ] - }, - "example": [ - 2, - 10, - 80, - 100 - ] - }, - "cellsCount": { - "description": "Number of samples available along the dimension for data organized as a regular grid.\nFor values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_.\nFor values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1.", - "type": "integer", - "example": 50 + "allOf": [ + { + "type": "object", + "required": [ + "cellsCount" + ], + "properties": { + "cellsCount": { + "title": "Cell count", + "description": "Number of samples available along the dimension for data organized as a regular or irregular grid.", + "type": "integer", + "example": 50 + } + } }, - "resolution": { - "description": "Resolution of regularly gridded data along the dimension in the collection", + { "oneOf": [ { - "type": "string", - "nullable": true + "type": "object", + "title": "Regular grid", + "description": "Regular grid with samples spaced at equal intervals.", + "required": [ + "resolution", + "firstCoordinate" + ], + "properties": { + "resolution": { + "title": "Resolution", + "description": "Resolution of regularly gridded data along the dimension in the collection.", + "oneOf": [ + { + "type": "string", + "nullable": true, + "example": "PT1H" + }, + { + "type": "number", + "example": 0.0006866455078 + } + ] + }, + "availableResolutions": { + "title": "Available resolutions", + "description": "List of resolutions made available by the API. If not specified, there are no limit other than the limits indicated in `minCellSize` and `maxCellSize` of the collection description (though the API might still allow requesting data beyond these).", + "type": "array", + "items": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "number" + } + ] + }, + "example": [ + "P1H", + "P1D", + "P1M" + ] + }, + "firstCoordinate": { + "title": "First coordinate", + "description": "First coordinate where a regular grid begins, with subsequent coordinates adding `resolution` unit at each step.", + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "number" + } + ], + "example": -180 + }, + "relativeBounds": { + "title": "Relative bounds", + "description": "Distance in units from coordinate to the lower and upper bounds of each cell for regular grids, describing the geometry of the cells.", + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "number" + } + ] + }, + "example": [ + -0.5, + 0.5 + ] + } + } }, { - "type": "number" + "type": "object", + "title": "Irregular grid.", + "description": "Irregular grid with samples spaced at different intervals.", + "required": [ + "coordinates" + ], + "properties": { + "coordinates": { + "title": "Coordinates of the irregular cells", + "description": "List of coordinates along the dimension for which data organized as an irregular grid in the collection is available.\n(e.g., 2, 10, 80, 100).", + "type": "array", + "minItems": 1, + "items": { + "oneOf": [ + { + "type": "string", + "nullable": true, + "example": "2020-11-12T12:15:00Z" + }, + { + "type": "number", + "example": 12.3 + } + ] + }, + "example": [ + 2, + 10, + 80, + 100 + ] + }, + "boundsCoordinates": { + "title": "Bounds coordinates", + "description": "For irregular grids, an ordered list of the coordinates in absolute units of the lower and upper bounds of the dimension for each cell.", + "type": "array", + "minItems": 1, + "items": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "number" + } + ] + } + }, + "example": [ + [ + -180, + -179 + ], + [ + -179, + -178 + ] + ] + } + } } - ], - "example": [ - "PT1H", - 0.0006866455078 ] } - } + ] + }, + "definition": { + "type": "string", + "format": "uri", + "title": "Observed property definition", + "description": "A URI for the definition of the measured or observed property corresponding to this dimension." + }, + "unit": { + "type": "string", + "title": "Units of measurement", + "description": "The unit of measure in which the interval and/or grid values are expressed." + }, + "unitLang": { + "type": "string", + "default": "UCUM", + "title": "Units of measurement vocabulary", + "description": "The language (or vocabulary) in which the unit is expressed (defaults to \"UCUM\" if not specified)." + }, + "variableType": { + "title": "Variable type", + "description": "The type of variable which may inform correct interpretation and interpolation methods.", + "type": "string", + "enum": [ + "continuous", + "numericalOrdinal", + "numericalNominal", + "categoricalOrdinal", + "categoricalNominal" + ] } } } @@ -1191,7 +1810,7 @@ ] }, "dataType": { - "oneOf": [ + "anyOf": [ { "type": "string" }, @@ -1206,19 +1825,22 @@ ] }, "timeStamp": { + "title": "Time stamp", "description": "This property indicates the time and date when the response was generated using RFC 3339 notation.", "type": "string", "format": "date-time", "example": "2017-08-17T08:05:32Z" }, "numberReturned": { - "description": "The number of features in the feature collection.\nA server may omit this information in a response, if the information\nabout the number of features is not known or difficult to compute.\nIf the value is provided, the value shall be identical to the number\nof items in the \"features\" array.", + "title": "The number of elements in the response", + "description": "A server may omit this information, if the information about the number of elements is not known or difficult to compute. If the value is provided, the value shall be identical to the number of elements in the response.", "type": "integer", "minimum": 0, "example": 10 }, "numberMatched": { - "description": "The number of features of the feature type that match the selection\nparameters like `bbox`.", + "title": "The number of elements in the response", + "description": "The number of elements in the response that match the selection parameters like `bbox`.", "type": "integer", "minimum": 0, "example": 127 @@ -1226,2537 +1848,2863 @@ "CWL": { "oneOf": [ { - "allOf": [ + "$ref": "#/components/schemas/CWLAtomic" + }, + { + "$ref": "#/components/schemas/CWLGraph" + }, + { + "$ref": "#/components/schemas/CWLWorkflow" + } + ] + }, + "cwltool_CUDARequirement": { + "type": "object", + "title": "cwltool:CUDARequirement", + "properties": { + "class": { + "type": "string", + "enum": [ + "cwltool:CUDARequirement" + ] + }, + "cudaVersionMin": { + "type": "string", + "title": "CUDA version minimum", + "description": "The minimum CUDA version required to run the software. This corresponds to a CUDA SDK release.\n\nWhen run in a container, the container image should provide the CUDA runtime,\nand the host driver is injected into the container. In this case, because CUDA drivers\nare backwards compatible, it is possible to use an older SDK with a newer driver across major versions.\n\nSee https://docs.nvidia.com/deploy/cuda-compatibility/ for details.\n", + "example": "11.4", + "pattern": "^\\d+\\.\\d+$" + }, + "cudaComputeCapability": { + "oneOf": [ { - "type": "object", - "properties": { - "cwlVersion": { - "type": "string", - "title": "cwlVersion", - "description": "CWL version of the described application package.", - "pattern": "^v\\d+(\\.\\d+(\\.\\d+)*)*$" - } - }, - "required": [ - "cwlVersion" - ] + "type": "string", + "title": "CUDA compute capability", + "description": "The compute capability supported by the GPU hardware.", + "pattern": "^\\d+\\.\\d+$" }, { - "type": "object", - "properties": { - "s:keywords": { - "type": "array", - "title": "KeywordList", - "description": "Keywords applied to the process for search and categorization purposes.", - "items": { - "type": "string", - "title": "keyword", - "minLength": 1 + "type": "array", + "title": "CUDAComputeCapabilityArray", + "items": { + "type": "string", + "title": "CUDA compute capability", + "description": "The compute capability supported by the GPU hardware.", + "pattern": "^\\d+\\.\\d+$" + }, + "minItems": 1 + } + ], + "title": "CUDA compute capability", + "description": "The compute capability supported by the GPU hardware.\n\n* If this is a single value, it defines only the minimum compute capability.\n GPUs with higher capability are also accepted.\n* If it is an array value, then only select GPUs with compute capabilities that explicitly\n appear in the array.\n See https://docs.nvidia.com/deploy/cuda-compatibility/#faq and\n https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#cuda-compute-capability\n for details.\n" + }, + "cudaDeviceCountMin": { + "type": "integer", + "title": "CUDA device count minimum", + "description": "The minimum amount of devices required.", + "default": 1, + "example": 1, + "minimum": 1 + }, + "cudaDeviceCountMax": { + "type": "integer", + "title": "CUDA device count maximum", + "description": "The maximum amount of devices required.", + "default": 1, + "example": 8, + "minimum": 1 + } + }, + "required": [ + "cudaVersionMin", + "cudaComputeCapability" + ], + "additionalProperties": false + }, + "CWLAtomic": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLVersion" + }, + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "$ref": "#/components/schemas/CWLAtomicBase" + } + ] + }, + "CWLAtomicNested": { + "description": "Same as 'CWLAtomic', but 'cwlVersion' not repeated (only at root).", + "allOf": [ + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "$ref": "#/components/schemas/CWLAtomicBase" + } + ] + }, + "CWLGraph": { + "title": "CWLGraph", + "allOf": [ + { + "$ref": "#/components/schemas/CWLVersion" + }, + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "type": "object", + "properties": { + "$graph": { + "type": "array", + "title": "CWLGraphList", + "description": "Graph definition that defines *exactly one* CWL application package represented as list. Multiple definitions simultaneously deployed is NOT supported currently.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "type": "object", + "title": "CWLGraphItem", + "properties": { + "class": { + "type": "string", + "title": "Class", + "description": "CWL class specification. This is used to differentiate between single Application Package (AP)definitions and Workflow that chains multiple packages.", + "enum": [ + "CommandLineTool", + "ExpressionTool", + "Workflow" + ] + }, + "id": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + }, + "intent": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/intent" + }, + "requirements": { + "$ref": "#/components/schemas/CWLRequirements" + }, + "hints": { + "$ref": "#/components/schemas/CWLHints" + }, + "baseCommand": { + "$ref": "#/components/schemas/CWLCommand" + }, + "arguments": { + "$ref": "#/components/schemas/CWLArguments" + }, + "inputs": { + "$ref": "#/components/schemas/CWLInputsDefinition" + }, + "outputs": { + "$ref": "#/components/schemas/CWLOutputsDefinition" + }, + "scatter": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/scatter" + }, + "scatterMethod": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/scatterMethod" + } + }, + "required": [ + "class", + "id", + "inputs", + "outputs" + ] } - }, - "version": { - "type": "string", - "title": "version", - "description": "Version of the process.", - "example": "1.2.3", - "pattern": "^\\d+(\\.\\d+(\\.\\d+(\\.[A-Za-z0-9\\-_]+)*)*)*$" - } + ] + }, + "maxItems": 1, + "minItems": 1 + } + }, + "required": [ + "$graph" + ] + } + ] + }, + "CWLWorkflow": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLVersion" + }, + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "$ref": "#/components/schemas/CWLWorkflowClass" + }, + { + "$ref": "#/components/schemas/CWLWorkflowBase" + } + ] + }, + "CWLWorkflowClass": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "Workflow" + ] + } + } + }, + "CWLWorkflowBase": { + "type": "object", + "properties": { + "steps": { + "$ref": "#/components/schemas/CWLWorkflowSteps" + }, + "inputs": { + "$ref": "#/components/schemas/CWLInputsDefinition" + }, + "outputs": { + "$ref": "#/components/schemas/CWLOutputsDefinition" + }, + "requirements": { + "description": "Technically a different subset, but lots of redefinitions to be done.", + "$ref": "#/components/schemas/CWLRequirements" + }, + "hints": { + "description": "Technically a different subset, but lots of redefinitions to be done.", + "$ref": "#/components/schemas/CWLHints" + } + } + }, + "CWLWorkflowSteps": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepMap" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepList" + } + ] + }, + "CWLInputsDefinition": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLInputList" + }, + { + "description": "Avoid 'oneOf' conflict of generic mapping key strings as input identifier matching against '$import'.", + "allOf": [ + { + "$ref": "#/components/schemas/CWLInputMap" + }, + { + "not": { + "$ref": "#/components/schemas/CWLImport" } + } + ] + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ], + "title": "CWLInputsDefinition", + "description": "All inputs available to the Application Package." + }, + "CWLOutputsDefinition": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLOutputList" + }, + { + "description": "Avoid 'oneOf' conflict of generic mapping key strings as output identifier matching against '$import'.", + "allOf": [ + { + "$ref": "#/components/schemas/CWLOutputMap" }, { - "type": "object", - "properties": { - "label": { - "type": "string" + "not": { + "$ref": "#/components/schemas/CWLImport" + } + } + ] + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ], + "title": "CWLOutputsDefinition", + "description": "All outputs produced by the Application Package." + }, + "CWLWorkflowStepMap": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/CWLWorkflowStepObject" + } + }, + "CWLWorkflowStepList": { + "type": "array", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepId" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepObject" + } + ] + } + }, + "CWLInputList": { + "type": "array", + "title": "CWLInputList", + "description": "Package inputs defined as items.", + "items": { + "$ref": "#/components/schemas/CWLInputItem" + } + }, + "CWLInputMap": { + "type": "object", + "title": "CWLInputMap", + "description": "Package inputs defined as mapping.", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" + }, + { + "title": "CWLInputObject (CWL type definition with parameters).", + "allOf": [ + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLType" + }, + "inputBinding": { + "$ref": "#/components/schemas/InputBinding" + } }, - "doc": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] + "required": [ + "type" + ], + "additionalProperties": {} + }, + { + "$ref": "#/components/schemas/CWLDefaultTypedConditional" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + } + ] + }, + { + "$ref": "#/components/schemas/CWLInputStdIn" + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ] + } + }, + "ResourceQuantityOrFractional": { + "title": "An item quantity that can also represent a proportion of use by resources.", + "description": "Technically should be minimum=1, but fractional for scheduling algorithms are allowed.\nThere is no way to distinguish between float/long simultaneously in JSON schema (multi-match oneOf).\nTherefore, only validate that it is greater than zero.\n", + "type": "number", + "exclusiveMinimum": true, + "minimum": 0, + "default": 1 + }, + "CWLExpression": { + "type": "string", + "title": "CWLExpression", + "description": "When combined with 'InlineJavascriptRequirement', this field allows runtime parameter references\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression).\nWhenever this option is applicable for a parameter, any other 'normal' string should not be specified.\nFor JSON schema validation, there is no easy way to distinguish them unless using complicated string patterns.\n" + }, + "InitialWorkDirListing": { + "title": "InitialWorkDirListing", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLExpression" + }, + { + "type": "array", + "title": "InitialWorkDirListingItems", + "items": { + "oneOf": [ + { + "nullable": true, + "enum": [ + null + ] + }, + { + "$ref": "#/components/schemas/CWLExpression" + }, + { + "$ref": "#/components/schemas/DirectoryListingDirent" + }, + { + "$ref": "#/components/schemas/DirectoryListingFileOrDirectory" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/DirectoryListingFileOrDirectory" } } + ] + } + } + ] + }, + "CWLRequirementsMap": { + "title": "CWLRequirementsMap", + "type": "object", + "properties": { + "cwltool:CUDARequirement": { + "$ref": "#/components/schemas/cwltool_CUDARequirement" + }, + "DockerRequirement": { + "$ref": "#/components/schemas/DockerRequirement" + }, + "SoftwareRequirement": { + "$ref": "#/components/schemas/SoftwareRequirement" + }, + "ShellCommandRequirement": { + "$ref": "#/components/schemas/ShellCommandRequirement" + }, + "EnvVarRequirement": { + "$ref": "#/components/schemas/EnvVarRequirement" + }, + "SchemaDefRequirement": { + "$ref": "#/components/schemas/SchemaDefRequirement" + }, + "InitialWorkDirRequirement": { + "$ref": "#/components/schemas/InitialWorkDirRequirement" + }, + "InlineJavascriptRequirement": { + "$ref": "#/components/schemas/InlineJavascriptRequirement" + }, + "InplaceUpdateRequirement": { + "$ref": "#/components/schemas/InplaceUpdateRequirement" + }, + "LoadListingRequirement": { + "$ref": "#/components/schemas/LoadListingRequirement" + }, + "NetworkAccess": { + "allOf": [ + { + "description": "Not 'NetworkAccessRequirement'" }, { - "type": "object", - "title": "CWL atomic definition", - "description": "Direct CWL definition instead of the graph representation.", - "properties": { - "id": { - "anyOf": [ - { - "type": "string", - "title": "UUID", - "description": "Unique identifier.", - "format": "uuid", - "pattern": "^[a-f0-9]{8}(?:-?[a-f0-9]{4}){3}-?[a-f0-9]{12}$" - }, - { - "description": "Identifier with text pattern that can allow additional non-ASCII characters depending on regex implementation.\nThe identifier allows a '#' or a relative 'sub/part#ref' prefix, to support references to other definitions\nin the CWL document, such as when using 'SchemaDefRequirement'.\n\nJSON spec regex does not include '\\w' in its default subset to allow all word-like unicode characters\n(see reference: https://json-schema.org/understanding-json-schema/reference/regular_expressions.html).\n\nSince support is implementation specific, add both the ASCII-only and '\\w' representation simultaneously\nand let the parser reading this document apply whichever is more relevant or supported\n(see discussion: https://github.com/common-workflow-language/cwl-v1.2/pull/256#discussion_r1234037814).\n", - "pattern": "^([A-Za-z0-9\\w]+(/[A-Za-z0-9\\w]+)*)?[#.]?[A-Za-z0-9\\w]+(?:[-_.][A-Za-z0-9\\w]+)*$", - "type": "string", - "title": "Generic identifier name pattern." - } - ], - "title": "CWLIdentifier", - "description": "Reference to the process identifier." - }, - "class": { - "type": "string", - "title": "Class", - "description": "CWL class specification. This is used to differentiate between single Application Package (AP)definitions and Workflow that chains multiple packages.", - "enum": [ - "CommandLineTool", - "ExpressionTool" - ] + "$ref": "#/components/schemas/NetworkAccessRequirement" + } + ] + }, + "ResourceRequirement": { + "$ref": "#/components/schemas/ResourceRequirement" + }, + "ScatterFeatureRequirement": { + "$ref": "#/components/schemas/ScatterFeatureRequirement" + }, + "ToolTimeLimit": { + "allOf": [ + { + "description": "Not 'ToolTimeLimitRequirement'" + }, + { + "$ref": "#/components/schemas/ToolTimeLimitRequirement" + } + ] + }, + "WorkReuse": { + "allOf": [ + { + "description": "Not 'WorkReuseRequirement'" + }, + { + "$ref": "#/components/schemas/WorkReuseRequirement" + } + ] + }, + "MultipleInputFeatureRequirement": { + "$ref": "#/components/schemas/MultipleInputFeatureRequirement" + }, + "StepInputExpressionRequirement": { + "$ref": "#/components/schemas/StepInputExpressionRequirement" + }, + "SubworkflowFeatureRequirement": { + "$ref": "#/components/schemas/SubworkflowFeatureRequirement" + } + }, + "additionalProperties": false + }, + "CWLRequirements": { + "title": "CWLRequirements", + "description": "Explicit requirement to execute the application package.", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLRequirementsMap" + }, + { + "$ref": "#/components/schemas/CWLRequirementsList" + } + ] + }, + "CWLCommand": { + "oneOf": [ + { + "type": "string", + "title": "String command." + }, + { + "type": "array", + "title": "Command Parts", + "items": { + "type": "string", + "title": "cmd" + }, + "additionalProperties": false + } + ], + "title": "CWLCommand", + "description": "Command called in the docker image or on shell according to requirements\nand hints specifications. Can be omitted if already defined in the docker\nimage.\n" + }, + "InputBinding": { + "type": "object", + "title": "Input Binding", + "description": "Defines how to specify the input for the command.", + "properties": { + "prefix": { + "type": "string" + }, + "position": { + "oneOf": [ + { + "type": "integer" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ] + }, + "valueFrom": { + "$ref": "#/components/schemas/CWLExpression" + }, + "itemSeparator": { + "type": "string" + }, + "shellQuote": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "CWLInputItem": { + "title": "Input", + "description": "Input specification. Note that multiple formats are supported and\nnot all specification variants or parameters are presented here. Please refer\nto official CWL documentation for more details (https://www.commonwl.org).\n", + "allOf": [ + { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" }, - "intent": { - "type": "array", - "title": "CWLIntent", - "items": { - "type": "string", - "title": "item", - "description": "Identifier URL to a concept for the type of computational operation accomplished by this process\n(see example operations: http://edamontology.org/operation_0004).\n", - "format": "url", - "pattern": "^((?:http|ftp)s?://)?(?!.*//.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:/?|[/?]\\S+)$" + { + "$ref": "#/components/schemas/CWLInputStdIn" + } + ] + }, + "inputBinding": { + "$ref": "#/components/schemas/InputBinding" + }, + "id": { + "description": "Identifier of the CWL input.", + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + }, + "required": [ + "type", + "id" + ], + "additionalProperties": {} + }, + { + "$ref": "#/components/schemas/CWLDefaultTypedConditional" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + } + ] + }, + "DirectoryListingDirent": { + "description": "Called 'Dirent' in documentation.", + "type": "object", + "title": "DirectoryListingDirent", + "properties": { + "entry": { + "$ref": "#/components/schemas/CWLExpression" + }, + "entryname": { + "$ref": "#/components/schemas/CWLExpression" + }, + "writable": { + "type": "boolean" + } + }, + "required": [ + "entry" + ], + "additionalProperties": false + }, + "DirectoryListingFileOrDirectory": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "File", + "Directory" + ] + }, + "location": { + "type": "string" + }, + "checksum": { + "description": "Minimal pattern check to know which hash algorithm to apply,\nbut don't check too harshly for the rest (length, allowed characters, etc.).\n", + "type": "string", + "pattern": "^[a-z0-9\\-]+\\$[\\w\\-.]+$" + }, + "size": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "class", + "location" + ], + "additionalProperties": false + }, + "SoftwareRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "SoftwareRequirement" + ] + }, + "packages": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/SoftwarePackage" + } + }, + { + "type": "object", + "description": "Mapping of 'package' name to its specifications.", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/SoftwarePackageSpecs" + }, + { + "$ref": "#/components/schemas/SoftwarePackage" + } + ] + } + } + ] + } + }, + "required": [ + "packages" + ], + "additionalProperties": false + }, + "DockerRequirement": { + "type": "object", + "title": "DockerRequirement", + "properties": { + "class": { + "type": "string", + "enum": [ + "DockerRequirement" + ] + }, + "dockerPull": { + "type": "string", + "title": "Docker pull reference", + "description": "Reference package that will be retrieved and executed by CWL.", + "example": "docker-registry.host.com/namespace/image:1.2.3" + }, + "dockerImport": { + "type": "string" + }, + "dockerLoad": { + "type": "string" + }, + "dockerFile": { + "type": "string" + }, + "dockerImageId": { + "type": "string" + }, + "dockerOutputDirectory": { + "type": "string" + } + }, + "oneOf": [ + { + "required": [ + "dockerPull" + ] + }, + { + "required": [ + "dockerImport" + ] + }, + { + "required": [ + "dockerLoad" + ] + }, + { + "required": [ + "dockerFile" + ] + } + ], + "additionalProperties": false + }, + "ShellCommandRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "ShellCommandRequirement" + ] + } + }, + "additionalProperties": false + }, + "EnvVarRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "EnvVarRequirement" + ] + }, + "envDef": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/EnvironmentDef" + } + }, + { + "type": "object", + "description": "Mapping of 'envName' to environment value or definition.", + "additionalProperties": { + "oneOf": [ + { + "description": "The 'envValue' specified directly", + "$ref": "#/components/schemas/CWLExpression" + }, + { + "$ref": "#/components/schemas/EnvironmentDef" + } + ] + } + } + ] + } + }, + "required": [ + "envDef" + ], + "additionalProperties": false + }, + "SchemaDefRequirement": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "SchemaDefRequirement" + ] + }, + "types": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLTypeEnum" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordSchema" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordArray" + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ] + } + } + }, + "required": [ + "types" + ], + "additionalProperties": false + }, + "InitialWorkDirRequirement": { + "type": "object", + "title": "InitialWorkDirRequirement", + "properties": { + "class": { + "type": "string", + "enum": [ + "InitialWorkDirRequirement" + ] + }, + "listing": { + "$ref": "#/components/schemas/InitialWorkDirListing" + } + }, + "required": [ + "listing" + ], + "additionalProperties": false + }, + "InlineJavascriptRequirement": { + "type": "object", + "title": "InlineJavascriptRequirement", + "description": "Indicates that the workflow platform must support inline Javascript expressions.\n\nIf this requirement is not present, the workflow platform must not perform expression interpolation\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#InlineJavascriptRequirement).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "InlineJavascriptRequirement" + ] + }, + "expressionLib": { + "type": "array", + "title": "InlineJavascriptLibraries", + "description": "Additional code fragments that will also be inserted before executing the expression code.\nAllows for function definitions that may be called from CWL expressions.\n", + "items": { + "title": "exp_lib", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "$include": { + "type": "string" } }, - "requirements": { - "title": "CWLRequirements", - "description": "Explicit requirement to execute the application package.", - "oneOf": [ - { - "title": "CWLRequirementsMap", - "type": "object", - "properties": { - "cwltool:CUDARequirement": { - "type": "object", - "title": "cwltool:CUDARequirement", - "properties": { - "class": { - "type": "string", - "enum": [ - "cwltool:CUDARequirement" - ] - }, - "cudaVersionMin": { - "type": "string", - "title": "CUDA version minimum", - "description": "The minimum CUDA version required to run the software. This corresponds to a CUDA SDK release.\n\nWhen run in a container, the container image should provide the CUDA runtime,\nand the host driver is injected into the container. In this case, because CUDA drivers\nare backwards compatible, it is possible to use an older SDK with a newer driver across major versions.\n\nSee https://docs.nvidia.com/deploy/cuda-compatibility/ for details.\n", - "example": "11.4", - "pattern": "^\\d+\\.\\d+$" - }, - "cudaComputeCapability": { - "oneOf": [ - { - "type": "string", - "title": "CUDA compute capability", - "description": "The compute capability supported by the GPU hardware.", - "pattern": "^\\d+\\.\\d+$" - }, - { - "type": "array", - "title": "CUDAComputeCapabilityArray", - "items": { - "type": "string", - "title": "CUDA compute capability", - "description": "The compute capability supported by the GPU hardware.", - "pattern": "^\\d+\\.\\d+$" - }, - "minItems": 1 - } - ], - "title": "CUDA compute capability", - "description": "The compute capability supported by the GPU hardware.\n\n* If this is a single value, it defines only the minimum compute capability.\n GPUs with higher capability are also accepted.\n* If it is an array value, then only select GPUs with compute capabilities that explicitly\n appear in the array.\n See https://docs.nvidia.com/deploy/cuda-compatibility/#faq and\n https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#cuda-compute-capability\n for details.\n" - }, - "cudaDeviceCountMin": { - "type": "integer", - "title": "CUDA device count minimum", - "description": "The minimum amount of devices required.", - "default": 1, - "example": 1, - "minimum": 1 - }, - "cudaDeviceCountMax": { - "type": "integer", - "title": "CUDA device count maximum", - "description": "The maximum amount of devices required.", - "default": 1, - "example": 8, - "minimum": 1 - } - }, - "required": [ - "cudaVersionMin", - "cudaComputeCapability" - ], - "additionalProperties": false - }, - "DockerRequirement": { - "type": "object", - "title": "DockerRequirement", - "properties": { - "class": { - "type": "string", - "enum": [ - "DockerRequirement" - ] - }, - "dockerPull": { - "type": "string", - "title": "Docker pull reference", - "description": "Reference package that will be retrieved and executed by CWL.", - "example": "docker-registry.host.com/namespace/image:1.2.3" - }, - "dockerImport": { - "type": "string" - }, - "dockerLoad": { - "type": "string" - }, - "dockerFile": { - "type": "string" - }, - "dockerImageId": { - "type": "string" - }, - "dockerOutputDirectory": { - "type": "string" - } - }, - "oneOf": [ - { - "required": [ - "dockerPull" - ] - }, - { - "required": [ - "dockerImport" - ] - }, - { - "required": [ - "dockerLoad" - ] - }, - { - "required": [ - "dockerFile" - ] - } - ], - "additionalProperties": false - }, - "SoftwareRequirement": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "SoftwareRequirement" - ] - }, - "packages": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "package": { - "type": "string" - }, - "version": { - "type": "array", - "items": { - "type": "string" - } - }, - "specs": { - "type": "array", - "items": { - "type": "string", - "format": "url", - "pattern": "^((?:http|ftp)s?:\\/\\/)?(?!.*\\/\\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:\\/?|[/?]\\S+)$" - } - } - }, - "required": [ - "package" - ], - "additionalProperties": false - } - }, - { - "type": "object", - "description": "Mapping of 'package' name to its specifications.", - "additionalProperties": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/SoftwareRequirement/properties/packages/oneOf/0/items" - } - ] - } - } - ] - } - }, - "required": [ - "packages" - ], - "additionalProperties": false - }, - "ShellCommandRequirement": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "ShellCommandRequirement" - ] - } - }, - "additionalProperties": false - }, - "EnvVarRequirement": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "EnvVarRequirement" - ] - }, - "envDef": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "envName": { - "type": "string", - "minLength": 1 - }, - "envValue": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - }, - "required": [ - "envName", - "envValue" - ], - "additionalProperties": false - } - }, - { - "type": "object", - "description": "Mapping of 'envName' to environment value or definition.", - "additionalProperties": { - "oneOf": [ - { - "description": "The 'envValue' specified directly", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/EnvVarRequirement/properties/envDef/oneOf/0/items" - } - ] - } - } - ] - } - }, - "required": [ - "envDef" - ], - "additionalProperties": false - }, - "SchemaDefRequirement": { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "SchemaDefRequirement" - ] - }, - "types": { - "type": "array", - "items": { - "oneOf": [ - { - "type": "object", - "title": "CWLTypeEnum (CWL type as enum of values).", - "properties": { - "type": { - "type": "string", - "title": "type", - "example": "enum", - "enum": [ - "enum" - ] - }, - "symbols": { - "type": "array", - "title": "CWLTypeSymbols (Allowed values composing the enum).", - "items": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "title": "CWLTypeSymbolValues" - } - } - }, - "required": [ - "type", - "symbols" - ], - "additionalProperties": {} - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "record" - ] - }, - "fields": { - "oneOf": [ - { - "type": "object", - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0" - }, - { - "allOf": [ - { - "type": "object", - "properties": { - "name": { - "description": "Required if list item. Otherwise, optional since it is the mapping key.\nThis requirement is defined in 'CWLTypeRecordFieldsItem' to allow reuse of this schema.\n", - "type": "string" - }, - "type": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0" - } - }, - "required": [ - "type" - ] - }, - { - "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": [ - { - "type": "object", - "properties": { - "secondaryFiles": { - "oneOf": [ - { - "description": "Either an expression or the regex pattern directly.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - }, - { - "type": "object", - "properties": { - "pattern": { - "description": "Either an expression or the regex pattern directly.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - }, - "required": { - "oneOf": [ - { - "type": "boolean" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ] - } - }, - "required": [ - "pattern" - ], - "additionalProperties": false - }, - { - "type": "array", - "items": { - "description": "Either an expression or the regex pattern directly.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/SchemaDefRequirement/properties/types/items/oneOf/1/properties/fields/oneOf/0/additionalProperties/oneOf/1/allOf/1/anyOf/0/properties/secondaryFiles/oneOf/1" - } - } - ] - }, - "streamable": { - "type": "boolean" - }, - "format": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - } - ] - }, - "loadContents": { - "type": "boolean" - } - } - }, - { - "not": { - "properties": { - "secondaryFiles": {}, - "streamable": {}, - "format": {}, - "loadContents": {} - } - } - } - ] - }, - { - "description": "Explicitly disallow these parameters when non-Directory type is detected.\nOtherwise, validate their schema definitions according to what is permitted.\nParameters that are only valid when 'type' or 'items' evaluates to 'Directory'.\n", - "type": "object", - "oneOf": [ - { - "type": "object", - "properties": { - "loadListing": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/LoadListingRequirement/properties/loadListing" - } - } - }, - { - "not": { - "properties": { - "loadListing": {} - } - } - } - ] - } - ] - } - ] - } - }, - { - "type": "array", - "items": { - "allOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/SchemaDefRequirement/properties/types/items/oneOf/1/properties/fields/oneOf/0/additionalProperties/oneOf/1" - }, - { - "required": [ - "name" - ] - } - ] - } - } - ] - }, - "name": { - "type": "string" - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "array" - ] - }, - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0" - } - }, - "required": [ - "type", - "items" - ] - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/2" - } - ] - } - } - }, - "required": [ - "types" - ], - "additionalProperties": false - }, - "InitialWorkDirRequirement": { - "type": "object", - "title": "InitialWorkDirRequirement", - "properties": { - "class": { - "type": "string", - "enum": [ - "InitialWorkDirRequirement" - ] - }, - "listing": { - "title": "InitialWorkDirListing", - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - }, - { - "type": "array", - "title": "InitialWorkDirListingItems", - "items": { - "oneOf": [ - { - "nullable": true, - "type": "string", - "enum": [ - null - ] - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - }, - { - "description": "Called 'Dirent' in documentation.", - "type": "object", - "title": "DirectoryListingDirent", - "properties": { - "entry": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - }, - "entryname": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - }, - "writable": { - "type": "boolean" - } - }, - "required": [ - "entry" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "File", - "Directory" - ] - }, - "location": { - "type": "string" - }, - "checksum": { - "description": "Minimal pattern check to know which hash algorithm to apply,\nbut don't check too harshly for the rest (length, allowed characters, etc.).\n", - "type": "string", - "pattern": "^[a-z0-9\\-]+\\$[\\w\\-.]+$" - }, - "size": { - "type": "integer", - "minimum": 0 - } - }, - "required": [ - "class", - "location" - ], - "additionalProperties": false - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/InitialWorkDirRequirement/properties/listing/oneOf/1/items/oneOf/3" - } - } - ] - } - } - ] - } - }, - "required": [ - "listing" - ], - "additionalProperties": false - }, - "InlineJavascriptRequirement": { - "type": "object", - "title": "InlineJavascriptRequirement", - "description": "Indicates that the workflow platform must support inline Javascript expressions.\n\nIf this requirement is not present, the workflow platform must not perform expression interpolation\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#InlineJavascriptRequirement).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "InlineJavascriptRequirement" - ] - }, - "expressionLib": { - "type": "array", - "title": "InlineJavascriptLibraries", - "description": "Additional code fragments that will also be inserted before executing the expression code.\nAllows for function definitions that may be called from CWL expressions.\n", - "items": { - "title": "exp_lib", - "oneOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "$include": { - "type": "string" - } - }, - "required": [ - "$include" - ], - "additionalProperties": false - } - ] - } - } - }, - "required": [ - "expressionLib" - ], - "additionalProperties": false - }, - "InplaceUpdateRequirement": { - "type": "object", - "title": "InplaceUpdateRequirement", - "description": "If 'inplaceUpdate' is true, then an implementation supporting this feature may permit tools to directly\nupdate files with 'writable: true' in 'InitialWorkDirRequirement'. That is, as an optimization,\nfiles may be destructively modified in place as opposed to copied and updated\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#InplaceUpdateRequirement).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "InplaceUpdateRequirement" - ] - }, - "inplaceUpdate": { - "type": "boolean", - "title": "inplaceUpdate" - } - }, - "required": [ - "inplaceUpdate" - ], - "additionalProperties": false - }, - "LoadListingRequirement": { - "type": "object", - "title": "LoadListingRequirement", - "description": "Specify the desired behavior for loading the listing field of a 'Directory' object for use by expressions\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#LoadListingRequirement).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "LoadListingRequirement" - ] - }, - "loadListing": { - "type": "string", - "title": "LoadListingEnum", - "enum": [ - "no_listing", - "shallow_listing", - "deep_listing" - ] - } - }, - "required": [ - "loadListing" - ], - "additionalProperties": false - }, - "NetworkAccess": { - "description": "Not 'NetworkAccessRequirement'", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/1/items/oneOf/0/allOf/1/oneOf/10" - }, - "ResourceRequirement": { - "type": "object", - "title": "ResourceRequirement", - "description": "Specify basic hardware resource requirements\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#ResourceRequirement).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "ResourceRequirement" - ] - }, - "coresMin": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/ResourceRequirement/properties/ramMin/oneOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ], - "title": "ResourceCoresMinimum (Minimum reserved number of CPU cores).", - "description": "Minimum reserved number of CPU cores.\n\nMay be a fractional value to indicate to a scheduling algorithm that one core can be allocated to\nmultiple jobs. For example, a value of 0.25 indicates that up to 4 jobs\nmay run in parallel on 1 core. A value of 1.25 means that up to 3 jobs\ncan run on a 4 core system (4/1.25 ~ 3).\n\nProcesses can only share a core allocation if the sum of each of their 'ramMax', 'tmpdirMax', and\n'outdirMax' requests also do not exceed the capacity of the node.\n\nProcesses sharing a core must have the same level of isolation (typically a container\nor VM) that they would normally have.\n\nThe reported number of CPU cores reserved for the process, which is available to expressions\non the 'CommandLineTool' as 'runtime.cores', must be a non-zero integer, and may be calculated by\nrounding up the cores request to the next whole number.\n\nScheduling systems may allocate fractional CPU resources by setting quotas or scheduling weights.\nScheduling systems that do not support fractional CPUs may round up the request to the next whole number.\n", - "default": 1 - }, - "coresMax": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/ResourceRequirement/properties/ramMin/oneOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ], - "title": "ResourceCoresMaximum (Maximum reserved number of CPU cores).", - "description": "Maximum reserved number of CPU cores.\nSee 'coresMin' for discussion about fractional CPU requests.\n" - }, - "ramMin": { - "oneOf": [ - { - "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 - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ], - "title": "ResourceRAMMinimum (Minimum reserved RAM in mebibytes).", - "description": "Minimum reserved RAM in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual RAM request must be rounded up\nto the next whole number.\n\nThe reported amount of RAM reserved for the process, which is available to\nexpressions on the 'CommandLineTool' as 'runtime.ram', must be a non-zero integer.\n", - "default": 256 - }, - "ramMax": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/ResourceRequirement/properties/ramMin/oneOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ], - "title": "ResourceRAMMaximum (Maximum reserved RAM in mebibytes).", - "description": "Maximum reserved RAM in mebibytes (2**20).\nSee 'ramMin' for discussion about fractional RAM requests.\n" - }, - "tmpdirMin": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/ResourceRequirement/properties/ramMin/oneOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ], - "title": "ResourceTmpDirMinimum (Minimum reserved filesystem based storage for the designated temporary) directory in mebibytes.", - "description": "Minimum reserved filesystem based storage for the designated temporary\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.tmpdirSize', must be a non-zero integer.\n", - "default": 1024 - }, - "tmpdirMax": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/ResourceRequirement/properties/ramMin/oneOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ], - "title": "ResourceTmpDirMaximum (Maximum reserved filesystem based storage for the designated temporary directory in mebibytes).", - "description": "Maximum reserved filesystem based storage for the designated temporary directory in mebibytes (2**20).\nSee 'tmpdirMin' for discussion about fractional storage requests.\n" - }, - "outdirMin": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/ResourceRequirement/properties/ramMin/oneOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ], - "title": "ResourceOutDirMinimum (Minimum reserved filesystem based storage for the designated output directory in mebibytes).", - "description": "Minimum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.outdirSize', must be a non-zero integer.\n", - "default": 1024 - }, - "outdirMax": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/ResourceRequirement/properties/ramMin/oneOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ], - "title": "ResourceOutDirMaximum (Maximum reserved filesystem based storage for the designated output directory in mebibytes).", - "description": "Maximum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\nSee 'outdirMin' for discussion about fractional storage requests.\n", - "default": 1 - } - }, - "additionalProperties": false - }, - "ScatterFeatureRequirement": { - "type": "object", - "title": "ScatterFeatureRequirement", - "description": "A 'scatter' operation specifies that the associated Workflow step should execute separately over a list of\ninput elements. Each job making up a scatter operation is independent and may be executed concurrently\n(see also: https://www.commonwl.org/v1.2/Workflow.html#WorkflowStep).\nFields 'scatter' and 'scatterMethod' at the root of a 'WorkflowStep', not within the requirement.\n", - "properties": { - "class": { - "type": "string", - "description": "CWL requirement class specification.", - "enum": [ - "ScatterFeatureRequirement" - ] - } - }, - "additionalProperties": false - }, - "ToolTimeLimit": { - "description": "Not 'ToolTimeLimitRequirement'.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/1/items/oneOf/0/allOf/1/oneOf/13" - }, - "WorkReuse": { - "description": "Not 'WorkReuseRequirement'.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/1/items/oneOf/0/allOf/1/oneOf/14" - }, - "MultipleInputFeatureRequirement": { - "type": "object", - "title": "MultipleInputFeatureRequirement", - "description": "Indicates that the 'Workflow' must support multiple inbound data links listed in the 'source'\nfield of 'WorkflowStepInput'.\n", - "properties": { - "class": { - "type": "string", - "description": "CWL requirement class specification.", - "enum": [ - "MultipleInputFeatureRequirement" - ] - } - }, - "additionalProperties": false - }, - "StepInputExpressionRequirement": { - "type": "object", - "title": "StepInputExpressionRequirement", - "description": "Indicates that the 'Workflow' must support the 'valueFrom' field of 'WorkflowStepInput'.", - "properties": { - "class": { - "type": "string", - "description": "CWL requirement class specification.", - "enum": [ - "StepInputExpressionRequirement" - ] - } - }, - "additionalProperties": false - }, - "SubworkflowFeatureRequirement": { - "type": "object", - "title": "SubworkflowFeatureRequirement", - "description": "Indicates that the 'Workflow' must support nested workflows in the 'run' field of 'WorkflowStep'.", - "properties": { - "class": { - "type": "string", - "description": "CWL requirement class specification.", - "enum": [ - "SubworkflowFeatureRequirement" - ] - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - { - "type": "array", - "title": "CWLRequirementsList", - "items": { - "oneOf": [ - { - "allOf": [ - { - "description": "When using the list representation, 'class' is required to indicate which one is being represented.\nWhen using the mapping representation, 'class' is optional since it's the key, but it must match by name.\n", - "required": [ - "class" - ] - }, - { - "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/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/cwltool%3ACUDARequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/DockerRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/SoftwareRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/ShellCommandRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/EnvVarRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/SchemaDefRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/InitialWorkDirRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/InlineJavascriptRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/InplaceUpdateRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/LoadListingRequirement" - }, - { - "type": "object", - "title": "NetworkAccessRequirement", - "properties": { - "class": { - "type": "string", - "description": "Not 'NetworkAccessRequirement'", - "enum": [ - "NetworkAccess" - ] - }, - "networkAccess": { - "title": "NetworkAccess", - "description": "Indicate whether a process requires outgoing IPv4/IPv6 network access.", - "example": true, - "oneOf": [ - { - "type": "boolean" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ] - } - }, - "required": [ - "networkAccess" - ], - "additionalProperties": false - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/ResourceRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/ScatterFeatureRequirement" - }, - { - "type": "object", - "title": "ToolTimeLimitRequirement", - "description": "Set an upper limit on the execution time of a CommandLineTool.\n\nA CommandLineTool whose execution duration exceeds the time limit may be preemptively\nterminated and considered failed. May also be used by batch systems to make scheduling decisions.\n\nThe execution duration excludes external operations, such as staging of files,\npulling a docker image etc., and only counts wall-time for the execution of the command line itself.\n", - "properties": { - "class": { - "type": "string", - "description": "not 'ToolTimeLimitRequirement'", - "enum": [ - "ToolTimeLimit" - ] - }, - "timelimit": { - "oneOf": [ - { - "type": "number", - "minimum": 0 - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ], - "title": "TimeLimitValue", - "description": "The time limit, in seconds.\n\nA time limit of zero means no time limit.\nNegative time limits are an error.\n" - } - }, - "required": [ - "timelimit" - ], - "additionalProperties": false - }, - { - "type": "object", - "title": "WorkReuseRequirement", - "description": "For implementations that support reusing output from past work\n(on the assumption that same code and same input produce same results),\ncontrol whether to enable or disable the reuse behavior for a particular tool\nor step (to accommodate situations where that assumption is incorrect).\n\nA reused step is not executed but instead returns the same output as the original execution.\n\nIf 'WorkReuse' is not specified, correct tools should assume it is enabled by default.\n", - "properties": { - "class": { - "type": "string", - "description": "Not 'WorkReuseRequirement'.", - "enum": [ - "WorkReuse" - ] - }, - "enableReuse": { - "oneOf": [ - { - "type": "boolean" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ], - "title": "EnableReuseValue", - "description": "Indicates if reuse is enabled for this tool.\n\nCan be an expression when combined with 'InlineJavascriptRequirement'\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression).\n" - } - }, - "required": [ - "enableReuse" - ], - "additionalProperties": false - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/MultipleInputFeatureRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/StepInputExpressionRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/SubworkflowFeatureRequirement" - } - ] - } - ] - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/2" - } - ] - } - } - ] - }, - "hints": { - "oneOf": [ - { - "title": "CWLHintsMap", - "anyOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0" - }, - { - "type": "object", - "properties": { - "BuiltinRequirement": { - "type": "object", - "title": "BuiltinRequirement", - "description": "Hint indicating that the Application Package corresponds to a\nbuiltin process of this instance. (note: can only be an 'hint'\nas it is unofficial CWL specification).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "BuiltinRequirement" - ] - }, - "process": { - "description": "Builtin process identifier.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id/anyOf/1" - } - }, - "required": [ - "process", - "class" - ], - "additionalProperties": false - }, - "OGCAPIRequirement": { - "type": "object", - "title": "OGCAPIRequirement", - "description": "Hint indicating that the Application Package corresponds to an\nOGC API - Processes provider that should be remotely executed and monitored\nby this instance. (note: can only be an 'hint' as it is unofficial CWL specification).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "OGCAPIRequirement" - ] - }, - "process": { - "description": "Process location.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/SoftwareRequirement/properties/packages/oneOf/0/items/properties/specs/items" - } - }, - "required": [ - "process" - ], - "additionalProperties": false - }, - "WPS1Requirement": { - "type": "object", - "title": "WPS1Requirement", - "description": "Hint indicating that the Application Package corresponds to a\nWPS-1 provider process that should be remotely executed and monitored by this\ninstance. (note: can only be an ''hint'' as it is unofficial CWL specification).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "WPS1Requirement" - ] - }, - "process": { - "description": "Process identifier of the remote WPS provider.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id/anyOf/1" - }, - "provider": { - "description": "WPS provider endpoint.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/SoftwareRequirement/properties/packages/oneOf/0/items/properties/specs/items" - } - }, - "required": [ - "process", - "provider" - ], - "additionalProperties": false - } - }, - "additionalProperties": { - "type": "object", - "description": "Generic schema to allow alternative CWL requirements/hints not explicitly defined in schemas.", - "properties": { - "class": { - "type": "string", - "title": "Requirement Class Identifier", - "description": "CWL requirement class specification.", - "example": "UnknownRequirement", - "not": { - "enum": [ - "cwltool:CUDARequirement", - "DockerRequirement", - "SoftwareRequirement", - "ShellCommandRequirement", - "EnvVarRequirement", - "SchemaDefRequirement", - "InitialWorkDirRequirement", - "InlineJavascriptRequirement", - "InplaceUpdateRequirement", - "LoadListingRequirement", - "NetworkAccess", - "ResourceRequirement", - "ScatterFeatureRequirement", - "ToolTimeLimit", - "WorkReuse", - "MultipleInputFeatureRequirement", - "StepInputExpressionRequirement", - "SubworkflowFeatureRequirement" - ] - } - } - }, - "additionalProperties": {} - } - } - ] - }, - { - "type": "array", - "title": "CWLHintsList", - "items": { - "oneOf": [ - { - "allOf": [ - { - "description": "When using the list representation, 'class' is required to indicate which one is being represented.\nWhen using the mapping representation, 'class' is optional since it's the key, but it must match by name.\n", - "required": [ - "class" - ] - }, - { - "title": "CWLHintsItem", - "description": "For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well.\nOtherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition.\n", - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/1/items/oneOf/0/allOf/1" - }, - { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/hints/oneOf/0/anyOf/1/properties/BuiltinRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/hints/oneOf/0/anyOf/1/properties/OGCAPIRequirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/hints/oneOf/0/anyOf/1/properties/WPS1Requirement" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/hints/oneOf/0/anyOf/1/additionalProperties" - } - ] - } - ] - } - ] - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/2" - } - ] - } - } - ], - "title": "CWLHints", - "description": "Non-failing additional hints that can help resolve extra requirements." - }, - "baseCommand": { - "oneOf": [ - { - "type": "string", - "title": "String command." - }, - { - "type": "array", - "title": "Command Parts", - "items": { - "type": "string", - "title": "cmd" - }, - "additionalProperties": false - } - ], - "title": "CWLCommand", - "description": "Command called in the docker image or on shell according to requirements\nand hints specifications. Can be omitted if already defined in the docker\nimage.\n" - }, - "arguments": { - "type": "array", - "title": "CWLArguments", - "description": "Base arguments passed to the command.", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object", - "title": "Input Binding", - "description": "Defines how to specify the input for the command.", - "properties": { - "prefix": { - "type": "string" - }, - "position": { - "oneOf": [ - { - "type": "integer" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - ] - }, - "valueFrom": { - "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" - }, - "itemSeparator": { - "type": "string" - }, - "shellQuote": { - "type": "boolean" - } - }, - "additionalProperties": false - } - ] - } - }, - "inputs": { - "oneOf": [ - { - "type": "array", - "title": "CWLInputList", - "description": "Package inputs defined as items.", - "items": { - "title": "Input", - "description": "Input specification. Note that multiple formats are supported and\nnot all specification variants or parameters are presented here. Please refer\nto official CWL documentation for more details (https://www.commonwl.org).\n", - "allOf": [ - { - "type": "object", - "properties": { - "type": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/2" - } - ] - }, - "inputBinding": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1" - }, - "id": { - "description": "Identifier of the CWL input.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id" - } - }, - "required": [ - "type", - "id" - ], - "additionalProperties": {} - }, - { - "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": { - "type": "string", - "nullable": true, - "enum": [ - null - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "string", - "string?" - ] - }, - "default": { - "type": "string", - "nullable": true - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "boolean", - "boolean?" - ] - }, - "default": { - "type": "boolean", - "nullable": true - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "int", - "int?", - "long", - "long?", - "float", - "float?", - "double", - "double?", - "integer", - "integer?" - ] - }, - "default": { - "type": "number", - "nullable": true - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "File", - "File?", - "Directory", - "Directory?" - ] - }, - "default": { - "oneOf": [ - { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "File", - "Directory" - ] - }, - "path": { - "type": "string" - }, - "location": { - "type": "string" - }, - "basename": { - "type": "string" - }, - "nameroot": { - "type": "string" - } - }, - "required": [ - "class" - ], - "oneOf": [ - { - "required": [ - "path" - ] - }, - { - "required": [ - "location" - ] - } - ], - "additionalProperties": false - }, - { - "nullable": true, - "enum": [ - null - ], - "type": "string" - } - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "pattern": "^[a-zA-Z]+\\\\[\\\\]$" - }, - "default": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/0/items/allOf/1/oneOf/6/properties/items" - } - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "array" - ] - }, - "items": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - }, - "default": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/0/items/allOf/1/oneOf/6/properties/items" - } - } - }, - "required": [ - "type", - "items" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "enum", - "enum?" - ] - }, - "symbols": { - "type": "array", - "items": { - "type": "string" - } - }, - "default": { - "type": "string", - "nullable": true - } - }, - "required": [ - "type", - "symbols" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "Any", - "Any?" - ] - }, - "default": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/0/items/allOf/1/oneOf/6/properties/items" - } - }, - "required": [ - "type" - ] - } - ] - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/2" - } - ] - } - }, - { - "description": "Avoid 'oneOf' conflict of generic mapping key strings as input identifier matching against '$import'.", - "allOf": [ - { - "type": "object", - "title": "CWLInputMap", - "description": "Package inputs defined as mapping.", - "properties": {}, - "required": [], - "additionalProperties": { - "oneOf": [ - { - "oneOf": [ - { - "oneOf": [ - { - "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[]?" - ] - }, - { - "type": "object", - "title": "CWLTypeArray (CWL type as list of items).", - "properties": { - "type": { - "type": "string", - "title": "type", - "example": "array", - "enum": [ - "array" - ] - }, - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0" - } - }, - "required": [ - "type", - "items" - ], - "additionalProperties": {} - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/SchemaDefRequirement/properties/types/items/oneOf/0" - }, - { - "description": "An IRI with minimally a '{Record}' identifier to look for a schema definition locally or remotely.\n\nThe identifier resolution is performed accordingly to the specified reference and as described in\nhttps://www.commonwl.org/v1.2/SchemaSalad.html#Identifier_resolution.\nAvoid 'oneOf' conflict of valid strings between this CWL record reference and the generic CWL types.\n", - "allOf": [ - { - "not": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0/oneOf/0/oneOf/0" - } - }, - { - "not": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/2/oneOf/0" - } - }, - { - "not": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/outputs/oneOf/1/allOf/0/additionalProperties/oneOf/2/oneOf/0" - } - }, - { - "not": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/outputs/oneOf/1/allOf/0/additionalProperties/oneOf/3/oneOf/0" - } - }, - { - "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\\-.]+$" - } - ] - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements/oneOf/0/properties/SchemaDefRequirement/properties/types/items/oneOf/1" - } - ], - "title": "CWLTypeBase" - }, - { - "type": "array", - "title": "CWLTypeList (Combination of allowed CWL types).", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0/oneOf/0" - } - } - ], - "title": "CWL Type" - }, - { - "title": "CWLInputObject (CWL type definition with parameters).", - "allOf": [ - { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0" - }, - "inputBinding": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1", - "additionalProperties": {} - } - }, - "required": [ - "type" - ], - "additionalProperties": {} - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/0/items/allOf/1" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/2" - } - ] - }, - { - "oneOf": [ - { - "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" - ] - }, - { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/2/oneOf/0" - } - }, - "required": [ - "type" - ] - } - ] - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/2" - } - ] - } - }, - { - "not": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/2" - } - } - ] - }, - { - "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 - } - ], - "title": "CWLInputsDefinition", - "description": "All inputs available to the Application Package." - }, - "outputs": { - "oneOf": [ - { - "type": "array", - "title": "CWLOutputList", - "description": "Package outputs defined as items.", - "items": { - "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/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/outputs/oneOf/1/allOf/0/additionalProperties/oneOf/2" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/outputs/oneOf/1/allOf/0/additionalProperties/oneOf/3" - } - ] - }, - "outputBinding": { - "type": "object", - "title": "OutputBinding", - "description": "Defines how to retrieve the output result from the command.", - "properties": { - "glob": { - "description": "Glob pattern to find the output on disk or mounted docker volume.", - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - } - ] - } - }, - "additionalProperties": {} - }, - "id": { - "description": "Identifier of the CWL output.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id" - } - }, - "required": [ - "type", - "id" - ], - "additionalProperties": {} - } - }, - { - "description": "Avoid 'oneOf' conflict of generic mapping key strings as output identifier matching against '$import'.", - "allOf": [ - { - "type": "object", - "title": "CWLOutputMap", - "description": "Package outputs defined as mapping.", - "properties": {}, - "required": [], - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0" - }, - { - "allOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/2" - }, - { - "type": "object", - "title": "CWLOutputObject (CWL type definition with parameters).", - "properties": { - "type": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/1/allOf/0/additionalProperties/oneOf/0" - }, - "outputBinding": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/outputs/oneOf/0/items/properties/outputBinding" - } - }, - "required": [ - "type" - ], - "additionalProperties": {} - } - ] - }, - { - "oneOf": [ - { - "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" - ] - }, - { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/outputs/oneOf/1/allOf/0/additionalProperties/oneOf/2/oneOf/0" - } - }, - "required": [ - "type" - ] - } - ] - }, - { - "oneOf": [ - { - "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" - ] - }, - { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/outputs/oneOf/1/allOf/0/additionalProperties/oneOf/3/oneOf/0" - } - }, - "required": [ - "type" - ] - } - ] - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/2" - } - ] - } - }, - { - "not": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/2" - } - } - ] - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/2" - } - ], - "title": "CWLOutputsDefinition", - "description": "All outputs produced by the Application Package." + "required": [ + "$include" + ], + "additionalProperties": false + } + ] + } + } + }, + "required": [ + "expressionLib" + ], + "additionalProperties": false + }, + "InplaceUpdateRequirement": { + "type": "object", + "title": "InplaceUpdateRequirement", + "description": "If 'inplaceUpdate' is true, then an implementation supporting this feature may permit tools to directly\nupdate files with 'writable: true' in 'InitialWorkDirRequirement'. That is, as an optimization,\nfiles may be destructively modified in place as opposed to copied and updated\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#InplaceUpdateRequirement).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "InplaceUpdateRequirement" + ] + }, + "inplaceUpdate": { + "type": "boolean", + "title": "inplaceUpdate" + } + }, + "required": [ + "inplaceUpdate" + ], + "additionalProperties": false + }, + "LoadListingRequirement": { + "type": "object", + "title": "LoadListingRequirement", + "description": "Specify the desired behavior for loading the listing field of a 'Directory' object for use by expressions\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#LoadListingRequirement).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "LoadListingRequirement" + ] + }, + "loadListing": { + "type": "string", + "title": "LoadListingEnum", + "enum": [ + "no_listing", + "shallow_listing", + "deep_listing" + ] + } + }, + "required": [ + "loadListing" + ], + "additionalProperties": false + }, + "NetworkAccessRequirement": { + "type": "object", + "title": "NetworkAccessRequirement", + "properties": { + "class": { + "type": "string", + "description": "Not 'NetworkAccessRequirement'", + "enum": [ + "NetworkAccess" + ] + }, + "networkAccess": { + "$ref": "#/components/schemas/NetworkAccess" + } + }, + "required": [ + "networkAccess" + ], + "additionalProperties": false + }, + "ResourceRequirement": { + "type": "object", + "title": "ResourceRequirement", + "description": "Specify basic hardware resource requirements\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#ResourceRequirement).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "ResourceRequirement" + ] + }, + "coresMin": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceCoresMinimum (Minimum reserved number of CPU cores).", + "description": "Minimum reserved number of CPU cores.\n\nMay be a fractional value to indicate to a scheduling algorithm that one core can be allocated to\nmultiple jobs. For example, a value of 0.25 indicates that up to 4 jobs\nmay run in parallel on 1 core. A value of 1.25 means that up to 3 jobs\ncan run on a 4 core system (4/1.25 ~ 3).\n\nProcesses can only share a core allocation if the sum of each of their 'ramMax', 'tmpdirMax', and\n'outdirMax' requests also do not exceed the capacity of the node.\n\nProcesses sharing a core must have the same level of isolation (typically a container\nor VM) that they would normally have.\n\nThe reported number of CPU cores reserved for the process, which is available to expressions\non the 'CommandLineTool' as 'runtime.cores', must be a non-zero integer, and may be calculated by\nrounding up the cores request to the next whole number.\n\nScheduling systems may allocate fractional CPU resources by setting quotas or scheduling weights.\nScheduling systems that do not support fractional CPUs may round up the request to the next whole number.\n", + "default": 1 + }, + "coresMax": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceCoresMaximum (Maximum reserved number of CPU cores).", + "description": "Maximum reserved number of CPU cores.\nSee 'coresMin' for discussion about fractional CPU requests.\n" + }, + "ramMin": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceRAMMinimum (Minimum reserved RAM in mebibytes).", + "description": "Minimum reserved RAM in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual RAM request must be rounded up\nto the next whole number.\n\nThe reported amount of RAM reserved for the process, which is available to\nexpressions on the 'CommandLineTool' as 'runtime.ram', must be a non-zero integer.\n", + "default": 256 + }, + "ramMax": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceRAMMaximum (Maximum reserved RAM in mebibytes).", + "description": "Maximum reserved RAM in mebibytes (2**20).\nSee 'ramMin' for discussion about fractional RAM requests.\n" + }, + "tmpdirMin": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceTmpDirMinimum (Minimum reserved filesystem based storage for the designated temporary) directory in mebibytes.", + "description": "Minimum reserved filesystem based storage for the designated temporary\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.tmpdirSize', must be a non-zero integer.\n", + "default": 1024 + }, + "tmpdirMax": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceTmpDirMaximum (Maximum reserved filesystem based storage for the designated temporary directory in mebibytes).", + "description": "Maximum reserved filesystem based storage for the designated temporary directory in mebibytes (2**20).\nSee 'tmpdirMin' for discussion about fractional storage requests.\n" + }, + "outdirMin": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceOutDirMinimum (Minimum reserved filesystem based storage for the designated output directory in mebibytes).", + "description": "Minimum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.outdirSize', must be a non-zero integer.\n", + "default": 1024 + }, + "outdirMax": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceOutDirMaximum (Maximum reserved filesystem based storage for the designated output directory in mebibytes).", + "description": "Maximum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\nSee 'outdirMin' for discussion about fractional storage requests.\n", + "default": 1 + } + }, + "additionalProperties": false + }, + "ScatterFeatureRequirement": { + "type": "object", + "title": "ScatterFeatureRequirement", + "description": "A 'scatter' operation specifies that the associated Workflow step should execute separately over a list of\ninput elements. Each job making up a scatter operation is independent and may be executed concurrently\n(see also: https://www.commonwl.org/v1.2/Workflow.html#WorkflowStep).\nFields 'scatter' and 'scatterMethod' at the root of a 'WorkflowStep', not within the requirement.\n", + "properties": { + "class": { + "type": "string", + "description": "CWL requirement class specification.", + "enum": [ + "ScatterFeatureRequirement" + ] + } + }, + "additionalProperties": false + }, + "WorkReuseRequirement": { + "type": "object", + "title": "WorkReuseRequirement", + "description": "For implementations that support reusing output from past work\n(on the assumption that same code and same input produce same results),\ncontrol whether to enable or disable the reuse behavior for a particular tool\nor step (to accommodate situations where that assumption is incorrect).\nA reused step is not executed but instead returns the same output as the original execution.\nIf 'WorkReuse' is not specified, correct tools should assume it is enabled by default.\n", + "properties": { + "class": { + "type": "string", + "description": "Not 'WorkReuseRequirement'.", + "enum": [ + "WorkReuse" + ] + }, + "enableReuse": { + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "EnableReuseValue", + "description": "Indicates if reuse is enabled for this tool.\n\nCan be an expression when combined with 'InlineJavascriptRequirement'\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression).\n" + } + }, + "required": [ + "enableReuse" + ], + "additionalProperties": false + }, + "ToolTimeLimitRequirement": { + "type": "object", + "title": "ToolTimeLimitRequirement", + "description": "Set an upper limit on the execution time of a CommandLineTool.\n\nA CommandLineTool whose execution duration exceeds the time limit may be preemptively\nterminated and considered failed. May also be used by batch systems to make scheduling decisions.\n\nThe execution duration excludes external operations, such as staging of files,\npulling a docker image etc., and only counts wall-time for the execution of the command line itself.\n", + "properties": { + "class": { + "type": "string", + "description": "not 'ToolTimeLimitRequirement'", + "enum": [ + "ToolTimeLimit" + ] + }, + "timelimit": { + "oneOf": [ + { + "type": "number", + "minimum": 0 + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "TimeLimitValue", + "description": "The time limit, in seconds.\n\nA time limit of zero means no time limit.\nNegative time limits are an error.\n" + } + }, + "required": [ + "timelimit" + ], + "additionalProperties": false + }, + "MultipleInputFeatureRequirement": { + "type": "object", + "title": "MultipleInputFeatureRequirement", + "description": "Indicates that the 'Workflow' must support multiple inbound data links listed in the 'source'\nfield of 'WorkflowStepInput'.\n", + "properties": { + "class": { + "type": "string", + "description": "CWL requirement class specification.", + "enum": [ + "MultipleInputFeatureRequirement" + ] + } + }, + "additionalProperties": false + }, + "StepInputExpressionRequirement": { + "type": "object", + "title": "StepInputExpressionRequirement", + "description": "Indicates that the 'Workflow' must support the 'valueFrom' field of 'WorkflowStepInput'.", + "properties": { + "class": { + "type": "string", + "description": "CWL requirement class specification.", + "enum": [ + "StepInputExpressionRequirement" + ] + } + }, + "additionalProperties": false + }, + "SubworkflowFeatureRequirement": { + "type": "object", + "title": "SubworkflowFeatureRequirement", + "description": "Indicates that the 'Workflow' must support nested workflows in the 'run' field of 'WorkflowStep'.", + "properties": { + "class": { + "type": "string", + "description": "CWL requirement class specification.", + "enum": [ + "SubworkflowFeatureRequirement" + ] + } + }, + "additionalProperties": false + }, + "CWLHints": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLHintsMap" + }, + { + "$ref": "#/components/schemas/CWLHintsList" + } + ], + "title": "CWLHints", + "description": "Non-failing additional hints that can help resolve extra requirements." + }, + "CWLWorkflowStepDefinition": { + "type": "object", + "properties": { + "in": { + "$ref": "#/components/schemas/CWLWorkflowStepIn" + }, + "run": { + "$ref": "#/components/schemas/CWLWorkflowStepRun" + }, + "when": { + "$ref": "#/components/schemas/CWLWorkflowStepOut" + }, + "out": { + "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + }, + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + }, + "required": [ + "id" + ], + "additionalProperties": false + } + ] + } + } + }, + "required": [ + "in", + "run", + "out" + ] + }, + "CWLWorkflowStepScatter": { + "type": "object", + "properties": { + "scatter": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" + }, + { + "type": "array", + "title": "IdentifierArray", + "items": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" + }, + "minItems": 1 + } + ], + "title": "Scatter", + "description": "The scatter field specifies one or more input parameters which will be scattered.\n\nAn input parameter may be listed more than once. The declared type of each\ninput parameter implicitly becomes an array of items of the input parameter type.\nIf a parameter is listed more than once, it becomes a nested array. As a result,\nupstream parameters which are connected to scattered parameters must be arrays.\n\nAll output parameter types are also implicitly wrapped in arrays. Each job\nin the scatter results in an entry in the output array.\n\nIf any scattered parameter runtime value is an empty array, all outputs are\nset to empty arrays and no work is done for the step, according to applicable scattering rules.\n" + }, + "scatterMethod": { + "type": "string", + "title": "scatterMethod", + "description": "If 'scatter' declares more than one input parameter, 'scatterMethod'\ndescribes how to decompose the input into a discrete set of jobs.\n\n- dotproduct: specifies that each of the input arrays are aligned and\n one element taken from each array to construct each job. It is an\n error if all input arrays are not the same length.\n\n- nested_crossproduct: specifies the Cartesian product of the inputs, producing\n a job for every combination of the scattered inputs. The output must be nested\n arrays for each level of scattering, in the order that the input arrays\n are listed in the 'scatter' field.\n\n- flat_crossproduct: specifies the Cartesian product of the inputs, producing a\n job for every combination of the scattered inputs. The output arrays must be\n flattened to a single level, but otherwise listed in the order that the input\n arrays are listed in the 'scatter' field.\n", + "default": "dotproduct", + "enum": [ + "dotproduct", + "nested_crossproduct", + "flat_crossproduct" + ] + } + } + }, + "CWLWorkflowStepId": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + }, + "required": [ + "id" + ] + }, + "CWLHintsMap": { + "title": "CWLHintsMap", + "anyOf": [ + { + "$ref": "#/components/schemas/CWLRequirementsMap" + }, + { + "type": "object", + "properties": { + "BuiltinRequirement": { + "type": "object", + "title": "BuiltinRequirement", + "description": "Hint indicating that the Application Package corresponds to a\nbuiltin process of this instance. (note: can only be an 'hint'\nas it is unofficial CWL specification).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "BuiltinRequirement" + ] }, - "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/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" + "process": { + "description": "Builtin process identifier.", + "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" + } + }, + "required": [ + "process", + "class" + ], + "additionalProperties": false + }, + "OGCAPIRequirement": { + "type": "object", + "title": "OGCAPIRequirement", + "description": "Hint indicating that the Application Package corresponds to an\nOGC API - Processes provider that should be remotely executed and monitored\nby this instance. (note: can only be an 'hint' as it is unofficial CWL specification).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "OGCAPIRequirement" + ] }, - "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/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" + "process": { + "description": "Process location.", + "$ref": "#/components/schemas/SoftwarePackage/properties/specs/items" + } + }, + "required": [ + "process" + ], + "additionalProperties": false + }, + "WPS1Requirement": { + "type": "object", + "title": "WPS1Requirement", + "description": "Hint indicating that the Application Package corresponds to a\nWPS-1 provider process that should be remotely executed and monitored by this\ninstance. (note: can only be an ''hint'' as it is unofficial CWL specification).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "WPS1Requirement" + ] }, - "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/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" + "process": { + "description": "Process identifier of the remote WPS provider.", + "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" }, - "scatter": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id" - }, - { - "type": "array", - "title": "CWLScatterMulti", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id" + "provider": { + "description": "WPS provider endpoint.", + "$ref": "#/components/schemas/SoftwarePackage/properties/specs/items" + } + }, + "required": [ + "process", + "provider" + ], + "additionalProperties": false + } + }, + "additionalProperties": { + "type": "object", + "description": "Generic schema to allow alternative CWL requirements/hints not explicitly defined in schemas.", + "properties": { + "class": { + "type": "string", + "title": "Requirement Class Identifier", + "description": "CWL requirement class specification.", + "example": "UnknownRequirement", + "not": { + "enum": [ + "cwltool:CUDARequirement", + "DockerRequirement", + "SoftwareRequirement", + "ShellCommandRequirement", + "EnvVarRequirement", + "SchemaDefRequirement", + "InitialWorkDirRequirement", + "InlineJavascriptRequirement", + "InplaceUpdateRequirement", + "LoadListingRequirement", + "NetworkAccess", + "ResourceRequirement", + "ScatterFeatureRequirement", + "ToolTimeLimit", + "WorkReuse", + "MultipleInputFeatureRequirement", + "StepInputExpressionRequirement", + "SubworkflowFeatureRequirement" + ] + } + } + } + } + } + ] + }, + "CWLHintsList": { + "type": "array", + "title": "CWLHintsList", + "items": { + "oneOf": [ + { + "allOf": [ + { + "description": "When using the list representation, 'class' is required to indicate which one is being represented.\nWhen using the mapping representation, 'class' is optional since it's the key, but it must match by name.\n", + "required": [ + "class" + ] + }, + { + "title": "CWLHintsItem", + "description": "For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well.\nOtherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition.\n", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLRequirementsItem" + }, + { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/properties/BuiltinRequirement" + }, + { + "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/properties/OGCAPIRequirement" + }, + { + "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/properties/WPS1Requirement" + }, + { + "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/additionalProperties" } - } - ], - "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" + ] + } + ] + } + ] + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ] + } + }, + "CWLWorkflowStepIn": { + "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepInMap" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepInList" + } + ] + }, + "CWLWorkflowStepRun": { + "description": "Nested CWL definition to run as Workflow step.", + "oneOf": [ + { + "description": "File or URL reference to a CWL tool definition.", + "type": "string" + }, + { + "description": "Nested CWL tool definition for the step.", + "$ref": "#/components/schemas/CWLAtomicNested" + }, + { + "description": "Nested CWL Workflow definition for the step.", + "allOf": [ + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "$ref": "#/components/schemas/CWLWorkflowClass" + }, + { + "$ref": "#/components/schemas/CWLWorkflowBase" + } + ] + } + ] + }, + "CWLWorkflowStepWhen": { + "$ref": "#/components/schemas/CWLWorkflowStepOut" + }, + "CWLWorkflowStepOut": { + "description": "Condition to execute a step that must evaluate to a boolean-like value.", + "type": "string", + "title": "CWLExpression" + }, + "CWLWorkflowStepInMap": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepInputBase" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepInputDefault" + } + ] + } + ] + } + }, + "CWLWorkflowStepInList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLWorkflowStepInItem" + } + }, + "CWLWorkflowStepInItem": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepInputId" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepInputBase" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepInputDefault" + } + ] + }, + "CWLWorkflowStepInputId": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + }, + "required": [ + "id" + ] + }, + "CWLWorkflowStepInputBase": { + "type": "object", + "properties": { + "source": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "linkMerge": { + "type": "string", + "enum": [ + "merge_nested", + "merge_flattened" + ] + }, + "valueFrom": { + "$ref": "#/components/schemas/CWLExpression" + } + } + }, + "CWLWorkflowStepInputDefault": { + "description": "CWL 'type' is not specified at this level for step inputs\n(it is provided by the mapped input of the nested tool instead).\nTherefore, cannot validate against 'CWLDefaultTypedConditional'.\n", + "type": "object", + "properties": { + "default": { + "$ref": "#/components/schemas/CWLDefault" + } + } + }, + "NetworkAccess": { + "title": "NetworkAccess", + "description": "Indicate whether a process requires outgoing IPv4/IPv6 network access.", + "example": true, + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ] + }, + "EnvironmentDef": { + "type": "object", + "properties": { + "envName": { + "type": "string", + "minLength": 1 + }, + "envValue": { + "$ref": "#/components/schemas/CWLExpression" + } + }, + "required": [ + "envName", + "envValue" + ], + "additionalProperties": false + }, + "CWLType": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLTypeBase" + }, + { + "$ref": "#/components/schemas/CWLTypeList" + } + ], + "title": "CWL Type" + }, + "CWLOutputObject": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "type": "object", + "title": "CWLOutputObject (CWL type definition with parameters).", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLType" + }, + "outputBinding": { + "$ref": "#/components/schemas/CWLOutputItem/properties/outputBinding" + } + }, + "required": [ + "type" + ] + } + ] + }, + "CWLOutputStdOut": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLOutputStdOutDefinition" + }, + { + "$ref": "#/components/schemas/CWLOutputStdOutObjectType" + } + ] + }, + "CWLOutputStdErr": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLOutputStdErrDefinition" + }, + { + "$ref": "#/components/schemas/CWLOutputStdErrObjectType" + } + ] + }, + "CWLTypeEnum": { + "type": "object", + "title": "CWLTypeEnum (CWL type as enum of values).", + "properties": { + "type": { + "type": "string", + "title": "type", + "example": "enum", + "enum": [ + "enum" + ] + }, + "symbols": { + "type": "array", + "title": "CWLTypeSymbols (Allowed values composing the enum).", + "items": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "title": "CWLTypeSymbolValues" + } + } + }, + "required": [ + "type", + "symbols" + ] + }, + "CWLTypeRecordSchema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "record" + ] + }, + "fields": { + "$ref": "#/components/schemas/CWLTypeRecordFields" + }, + "name": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "CWLTypeRecordArray": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "array" + ] + }, + "items": { + "$ref": "#/components/schemas/CWLType" + } + }, + "required": [ + "type", + "items" + ] + }, + "CWLDefaultTypedConditional": { + "description": "Validate that the 'default' value, if specified, is of same type as the CWL 'type'.\nThis avoids over-accepting anything that does not match the intended type.\nHowever, validation limits itself to data literals and arrays.\nNested type and multi-type definitions will validate against 'Any'.\n", + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "null" + ] + }, + "default": { + "nullable": true, + "enum": [ + null + ] + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "string", + "string?" + ] + }, + "default": { + "type": "string", + "nullable": true + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "boolean", + "boolean?" + ] + }, + "default": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "int", + "int?", + "long", + "long?", + "float", + "float?", + "double", + "double?", + "integer", + "integer?" + ] + }, + "default": { + "type": "number", + "nullable": true + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "File", + "File?", + "Directory", + "Directory?" + ] + }, + "default": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLDefaultLocation" }, - "scatterMethod": { - "type": "string", - "title": "scatterMethod", - "description": "Describes how to decompose the scattered input into a discrete\nset of jobs. When 'dotproduct', specifies that each of the input arrays\nare aligned and one element taken from each array to construct each job.\nIt is an error if all input arrays are of different length. When 'nested_crossproduct',\nspecifies the Cartesian product of the inputs, producing a job for every\ncombination of the scattered inputs. The output must be nested arrays\nfor each level of scattering, in the order that the input arrays are listed\nin the scatter field. When 'flat_crossproduct', specifies the Cartesian\nproduct of the inputs, producing a job for every combination of the scattered\ninputs. The output arrays must be flattened to a single level, but otherwise\nlisted in the order that the input arrays are listed in the scatter field.\n", + { + "nullable": true, "enum": [ - "dotproduct", - "nested_crossproduct", - "flat_crossproduct" + null ] } - }, - "required": [ - "class", - "inputs", - "outputs" ] } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "pattern": "^[a-zA-Z]+\\\\[\\\\]$" + }, + "default": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnyType" + } + } + }, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "array" + ] + }, + "items": { + "$ref": "#/components/schemas/AnyType" + }, + "default": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnyType" + } + } + }, + "required": [ + "type", + "items" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "enum", + "enum?" + ] + }, + "symbols": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "type": "string", + "nullable": true + } + }, + "required": [ + "type", + "symbols" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "Any", + "Any?" + ] + }, + "default": { + "$ref": "#/components/schemas/AnyType" + } + }, + "required": [ + "type" + ] + } + ] + }, + "CWLTypeBase": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLTypeDefinition" + }, + { + "$ref": "#/components/schemas/CWLTypeArray" + }, + { + "$ref": "#/components/schemas/CWLTypeEnum" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordRef" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordSchema" + } + ], + "title": "CWLTypeBase" + }, + "CWLTypeList": { + "type": "array", + "title": "CWLTypeList (Combination of allowed CWL types).", + "items": { + "$ref": "#/components/schemas/CWLTypeBase" + } + }, + "AnyType": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + }, + "CWLTypeDefinition": { + "type": "string", + "title": "CWL type string definition", + "description": "Note that 'Any' is equivalent to any of the non-null types.\nTherefore, a nullable 'Any' explicitly specified by 'Any?' or its array-nullable form 'Any[]?' are not equivalent.\nField type definition.\n", + "enum": [ + "null", + "Any", + "Any?", + "Any[]", + "Any[]?", + "Directory", + "Directory?", + "Directory[]", + "Directory[]?", + "File", + "File?", + "File[]", + "File[]?", + "boolean", + "boolean?", + "boolean[]", + "boolean[]?", + "double", + "double?", + "double[]", + "double[]?", + "enum?", + "enum[]", + "enum[]?", + "float", + "float?", + "float[]", + "float[]?", + "int", + "int?", + "int[]", + "int[]?", + "integer", + "integer?", + "integer[]", + "integer[]?", + "long", + "long?", + "long[]", + "long[]?", + "string", + "string?", + "string[]", + "string[]?" + ] + }, + "CWLTypeArray": { + "type": "object", + "title": "CWLTypeArray (CWL type as list of items).", + "properties": { + "type": { + "type": "string", + "title": "type", + "example": "array", + "enum": [ + "array" + ] + }, + "items": { + "$ref": "#/components/schemas/CWLType" + } + }, + "required": [ + "type", + "items" + ] + }, + "CWLTypeRecordRef": { + "description": "An IRI with minimally a '{Record}' identifier to look for a schema definition locally or remotely.\n\nThe identifier resolution is performed accordingly to the specified reference and as described in\nhttps://www.commonwl.org/v1.2/SchemaSalad.html#Identifier_resolution.\nAvoid 'oneOf' conflict of valid strings between this CWL record reference and the generic CWL types.\n", + "allOf": [ + { + "not": { + "$ref": "#/components/schemas/CWLTypeDefinition" + } + }, + { + "not": { + "$ref": "#/components/schemas/CWLInputStdInDefinition" + } + }, + { + "not": { + "$ref": "#/components/schemas/CWLOutputStdOutDefinition" + } + }, + { + "not": { + "$ref": "#/components/schemas/CWLOutputStdErrDefinition" + } + }, + { + "type": "string", + "format": "url", + "pattern": "^(((?:http|ftp)s?:\\/\\/)?(?!.*\\/\\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:\\/?|[\\/?]\\S+))?(?:[A-Za-z0-9\\w\\-.\\/]+)?\\#?[A-Za-z0-9\\w\\-.]+$" + } + ] + }, + "CWLTypeRecordFieldsMap": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordFieldDef" + } + ] + } + }, + "CWLTypeRecordFieldsList": { + "type": "array", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLTypeRecordFieldDef" + }, + { + "required": [ + "name" + ] + } + ] + } + }, + "CWLTypeRecordFieldDefBase": { + "type": "object", + "properties": { + "name": { + "description": "Required if list item. Otherwise, optional since it is the mapping key.\nThis requirement is defined in 'CWLTypeRecordFieldsItem' to allow reuse of this schema.\n", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/CWLType" + } + }, + "required": [ + "type" + ] + }, + "CWLFileOnlyParametersConditional": { + "description": "Explicitly disallow these parameters when non-File type is detected.\nOtherwise, validate their schema definitions according to what is permitted.\nParameters that are only valid when 'type' or 'items' evaluates to 'File'.\n", + "type": "object", + "anyOf": [ + { + "$ref": "#/components/schemas/CWLFileOnlyParameters" + }, + { + "not": { + "properties": { + "secondaryFiles": {}, + "streamable": {}, + "format": {}, + "loadContents": {} + } + } + } + ] + }, + "CWLDirectoryOnlyParametersConditional": { + "description": "Explicitly disallow these parameters when non-Directory type is detected.\nOtherwise, validate their schema definitions according to what is permitted.\nParameters that are only valid when 'type' or 'items' evaluates to 'Directory'.\n", + "type": "object", + "oneOf": [ + { + "type": "object", + "properties": { + "loadListing": { + "$ref": "#/components/schemas/LoadListingRequirement/properties/loadListing" + } + } + }, + { + "not": { + "properties": { + "loadListing": {} + } + } + } + ] + }, + "CWLFileOnlyParameters": { + "type": "object", + "properties": { + "secondaryFiles": { + "$ref": "#/components/schemas/CWLTypeRecordSecondaryFiles" + }, + "streamable": { + "type": "boolean" + }, + "format": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLExpression" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLExpression" + } + } + ] + }, + "loadContents": { + "type": "boolean" + } + } + }, + "CWLTypeRecordSecondaryFiles": { + "oneOf": [ + { + "description": "Either an expression or the regex pattern directly.", + "$ref": "#/components/schemas/CWLExpression" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordSecondaryFileSchema" + }, + { + "type": "array", + "items": { + "description": "Either an expression or the regex pattern directly.", + "$ref": "#/components/schemas/CWLExpression" + } + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLTypeRecordSecondaryFileSchema" + } + } + ] + }, + "CWLTypeRecordSecondaryFileSchema": { + "type": "object", + "properties": { + "pattern": { + "description": "Either an expression or the regex pattern directly.", + "$ref": "#/components/schemas/CWLExpression" + }, + "required": { + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ] + } + }, + "required": [ + "pattern" + ], + "additionalProperties": false + }, + "CWLRequirementsList": { + "type": "array", + "title": "CWLRequirementsList", + "items": { + "oneOf": [ + { + "allOf": [ + { + "description": "When using the list representation, 'class' is required to indicate which one is being represented.\nWhen using the mapping representation, 'class' is optional since it's the key, but it must match by name.\n", + "required": [ + "class" + ] + }, + { + "$ref": "#/components/schemas/CWLRequirementsItem" + } + ] + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ] + } + }, + "CWLRequirementsItem": { + "title": "CWLRequirementsItem", + "description": "For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well.\nOtherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition.\n", + "oneOf": [ + { + "$ref": "#/components/schemas/cwltool_CUDARequirement" + }, + { + "$ref": "#/components/schemas/DockerRequirement" + }, + { + "$ref": "#/components/schemas/SoftwareRequirement" + }, + { + "$ref": "#/components/schemas/ShellCommandRequirement" + }, + { + "$ref": "#/components/schemas/EnvVarRequirement" + }, + { + "$ref": "#/components/schemas/SchemaDefRequirement" + }, + { + "$ref": "#/components/schemas/InitialWorkDirRequirement" + }, + { + "$ref": "#/components/schemas/InlineJavascriptRequirement" + }, + { + "$ref": "#/components/schemas/InplaceUpdateRequirement" + }, + { + "$ref": "#/components/schemas/LoadListingRequirement" + }, + { + "$ref": "#/components/schemas/NetworkAccessRequirement" + }, + { + "$ref": "#/components/schemas/ResourceRequirement" + }, + { + "$ref": "#/components/schemas/ScatterFeatureRequirement" + }, + { + "$ref": "#/components/schemas/ToolTimeLimitRequirement" + }, + { + "$ref": "#/components/schemas/WorkReuseRequirement" + }, + { + "$ref": "#/components/schemas/MultipleInputFeatureRequirement" + }, + { + "$ref": "#/components/schemas/StepInputExpressionRequirement" + }, + { + "$ref": "#/components/schemas/SubworkflowFeatureRequirement" + } + ] + }, + "CWLOutputStdOutDefinition": { + "description": "Indicates that the data pushed to the standard output stream by the command will be redirected to this CWL output.\nCan be defined for only one output. If combined with 'stdout' at the root of the CWL document, that definition\nwill indicate the desired name of the output file where the output stream will be written to. A random name will\nbe applied for the file of this output unless otherwise specified.\n", + "type": "string", + "enum": [ + "stdout" + ] + }, + "CWLOutputStdOutObjectType": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLOutputStdOutDefinition" + } + }, + "required": [ + "type" + ] + }, + "CWLOutputStdErrDefinition": { + "description": "Indicates that the data pushed to the standard error stream by the command will be redirected to this CWL output.\nCan be defined for only one output. If combined with 'stderr' at the root of the CWL document, that definition\nwill indicate the desired name of the output file where the error stream will be written to. A random name will\nbe applied for the file of this output unless otherwise specified.\n", + "type": "string", + "enum": [ + "stderr" + ] + }, + "CWLOutputStdErrObjectType": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLOutputStdErrDefinition" + } + }, + "required": [ + "type" + ] + }, + "CWLTypeRecordFieldDef": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLTypeRecordFieldDefBase" + }, + { + "$ref": "#/components/schemas/CWLFileOnlyParametersConditional" + }, + { + "$ref": "#/components/schemas/CWLDirectoryOnlyParametersConditional" + } + ] + }, + "CWLDefault": { + "title": "CWLDefault", + "description": "Default value of input if not provided for task execution.", + "oneOf": [ + { + "$ref": "#/components/schemas/AnyLiteralType" + }, + { + "$ref": "#/components/schemas/AnyLiteralList" + }, + { + "$ref": "#/components/schemas/CWLDefaultLocation" + }, + { + "$ref": "#/components/schemas/CWLDefaultObject" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLDefaultObject" + } + } + ] + }, + "AnyLiteralType": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "string" + } + ] + }, + "AnyLiteralList": { + "type": "array", + "title": "AnyLiteralList", + "items": { + "$ref": "#/components/schemas/AnyLiteralType" + } + }, + "CWLDefaultLocation": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": [ + "File", + "Directory" ] }, + "path": { + "type": "string" + }, + "location": { + "type": "string" + }, + "basename": { + "type": "string" + }, + "nameroot": { + "type": "string" + } + }, + "required": [ + "class" + ], + "oneOf": [ { - "title": "CWLGraph", - "allOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/1" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/2" - }, - { - "type": "object", - "properties": { - "$graph": { - "type": "array", - "title": "CWLGraphList", - "description": "Graph definition that defines *exactly one* CWL application package represented as list. Multiple definitions simultaneously deployed is NOT supported currently.", - "items": { - "allOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/1" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/2" - }, - { - "type": "object", - "title": "CWLGraphItem", - "properties": { - "class": { - "type": "string", - "title": "Class", - "description": "CWL class specification. This is used to differentiate between single Application Package (AP)definitions and Workflow that chains multiple packages.", - "enum": [ - "CommandLineTool", - "ExpressionTool", - "Workflow" - ] - }, - "id": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id" - }, - "intent": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/intent" - }, - "requirements": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements" - }, - "hints": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/hints" - }, - "baseCommand": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/baseCommand" - }, - "arguments": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments" - }, - "inputs": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs" - }, - "outputs": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/outputs" - }, - "scatter": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/scatter" - }, - "scatterMethod": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/scatterMethod" - } - }, - "required": [ - "class", - "id", - "inputs", - "outputs" - ], - "additionalProperties": {} - } - ] - }, - "maxItems": 1, - "minItems": 1 - } - }, - "required": [ - "$graph" - ], - "additionalProperties": {} - } + "required": [ + "path" ] }, { - "allOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/0" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/1" - }, + "required": [ + "location" + ] + } + ], + "additionalProperties": false + }, + "CWLDefaultObject": { + "type": "object", + "not": { + "description": "Avoid false-positive match of default File or Directory location definition.", + "properties": { + "class": { + "type": "string", + "enum": [ + "File", + "Directory" + ] + } + } + } + }, + "CWLTypeRecordFields": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLTypeRecordFieldsMap" + }, + { + "$ref": "#/components/schemas/CWLTypeRecordFieldsList" + } + ] + }, + "CWLImport": { + "title": "CWLImport", + "description": "The schema validation of the CWL will not itself perform the '$import' to resolve and validate its contents.\nTherefore, the complete schema will not be validated entirely, and could still be partially malformed.\nTo ensure proper and exhaustive validation of a CWL definition with this schema, all '$import' directives\nshould be resolved and extended beforehand.\nRepresents an '$import' directive that should point toward another compatible CWL file to import where specified.\nThe contents of the imported file should be relevant contextually where it is being imported.\n", + "type": "object", + "properties": { + "$import": { + "type": "string" + } + }, + "required": [ + "$import" + ], + "additionalProperties": false + }, + "CWLVersion": { + "type": "object", + "properties": { + "cwlVersion": { + "type": "string", + "title": "cwlVersion", + "description": "CWL version of the described application package.", + "pattern": "^v\\d+(\\.\\d+(\\.\\d+)*)*$" + } + }, + "required": [ + "cwlVersion" + ] + }, + "CWLMetadata": { + "type": "object", + "properties": { + "s:keywords": { + "title": "KeywordList", + "type": "array", + "description": "Keywords applied to the process for search and categorization purposes.", + "items": { + "type": "string", + "title": "keyword", + "minLength": 1 + } + }, + "version": { + "type": "string", + "title": "version", + "description": "Version of the process.", + "example": "1.2.3", + "pattern": "^\\d+(\\.\\d+(\\.\\d+(\\.[A-Za-z0-9\\-_]+)*)*)*$" + } + } + }, + "CWLDocumentation": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "doc": { + "oneOf": [ { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/2" + "type": "string" }, { - "type": "object", - "properties": { - "class": { - "type": "string", - "enum": [ - "Workflow" - ] - } + "type": "array", + "items": { + "type": "string" } + } + ] + } + } + }, + "CWLAtomicBase": { + "type": "object", + "title": "CWL atomic definition", + "description": "Direct CWL definition instead of the graph representation.", + "properties": { + "id": { + "anyOf": [ + { + "type": "string", + "title": "UUID", + "description": "Unique identifier.", + "format": "uuid", + "pattern": "^[a-f0-9]{8}(?:-?[a-f0-9]{4}){3}-?[a-f0-9]{12}$" }, { - "type": "object", - "properties": { - "steps": { - "oneOf": [ - { - "type": "object", - "additionalProperties": { - "allOf": [ - { - "type": "object", - "properties": { - "in": { - "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", - "oneOf": [ - { - "type": "object", - "additionalProperties": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "allOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/2/allOf/4/properties/steps/oneOf/0/additionalProperties/allOf/0/properties/in/oneOf/1/items/allOf/1" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/2/allOf/4/properties/steps/oneOf/0/additionalProperties/allOf/0/properties/in/oneOf/1/items/allOf/2" - } - ] - } - ] - } - }, - { - "type": "array", - "items": { - "allOf": [ - { - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id" - } - }, - "required": [ - "id" - ] - }, - { - "type": "object", - "properties": { - "source": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "linkMerge": { - "type": "string", - "enum": [ - "merge_nested", - "merge_flattened" - ] - }, - "valueFrom": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/arguments/items/oneOf/1/properties/valueFrom" - } - } - }, - { - "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": { - "title": "CWLDefault", - "description": "Default value of input if not provided for task execution.", - "oneOf": [ - { - "oneOf": [ - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "type": "string" - } - ] - }, - { - "type": "array", - "title": "AnyLiteralList", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/2/allOf/4/properties/steps/oneOf/0/additionalProperties/allOf/0/properties/in/oneOf/1/items/allOf/2/properties/default/oneOf/0" - } - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs/oneOf/0/items/allOf/1/oneOf/4/properties/default/oneOf/0" - }, - { - "type": "object", - "not": { - "description": "Avoid false-positive match of default File or Directory location definition.", - "properties": { - "class": { - "type": "string", - "enum": [ - "File", - "Directory" - ] - } - } - }, - "additionalProperties": {} - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/2/allOf/4/properties/steps/oneOf/0/additionalProperties/allOf/0/properties/in/oneOf/1/items/allOf/2/properties/default/oneOf/3" - } - } - ] - } - } - } - ] - } - } - ] - }, - "run": { - "description": "Nested CWL definition to run as Workflow step.", - "oneOf": [ - { - "description": "File or URL reference to a CWL tool definition.", - "type": "string" - }, - { - "description": "Nested CWL tool definition for the step.", - "allOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/1" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/2" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3" - } - ] - }, - { - "description": "Nested CWL Workflow definition for the step.", - "allOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/1" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/2" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/2/allOf/3" - }, - { - "$ref": "#/components/schemas/CWL/oneOf/2/allOf/4" - } - ] - } - ] - }, - "when": { - "description": "Condition to execute a step that must evaluate to a boolean-like value.", - "type": "string", - "title": "CWLExpression" - }, - "out": { - "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id" - }, - { - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id" - } - }, - "required": [ - "id" - ], - "additionalProperties": false - } - ] - } - } - }, - "required": [ - "in", - "run", - "out" - ] - }, - { - "type": "object", - "properties": { - "scatter": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id/anyOf/1" - }, - { - "type": "array", - "title": "IdentifierArray", - "items": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id/anyOf/1" - }, - "minItems": 1 - } - ], - "title": "Scatter", - "description": "The scatter field specifies one or more input parameters which will be scattered.\n\nAn input parameter may be listed more than once. The declared type of each\ninput parameter implicitly becomes an array of items of the input parameter type.\nIf a parameter is listed more than once, it becomes a nested array. As a result,\nupstream parameters which are connected to scattered parameters must be arrays.\n\nAll output parameter types are also implicitly wrapped in arrays. Each job\nin the scatter results in an entry in the output array.\n\nIf any scattered parameter runtime value is an empty array, all outputs are\nset to empty arrays and no work is done for the step, according to applicable scattering rules.\n" - }, - "scatterMethod": { - "type": "string", - "title": "scatterMethod", - "description": "If 'scatter' declares more than one input parameter, 'scatterMethod'\ndescribes how to decompose the input into a discrete set of jobs.\n\n- dotproduct: specifies that each of the input arrays are aligned and\n one element taken from each array to construct each job. It is an\n error if all input arrays are not the same length.\n\n- nested_crossproduct: specifies the Cartesian product of the inputs, producing\n a job for every combination of the scattered inputs. The output must be nested\n arrays for each level of scattering, in the order that the input arrays\n are listed in the 'scatter' field.\n\n- flat_crossproduct: specifies the Cartesian product of the inputs, producing a\n job for every combination of the scattered inputs. The output arrays must be\n flattened to a single level, but otherwise listed in the order that the input\n arrays are listed in the 'scatter' field.\n", - "default": "dotproduct", - "enum": [ - "dotproduct", - "nested_crossproduct", - "flat_crossproduct" - ], - "required": [ - "timelimit", - "class" - ] - } - } - } - ] - } - }, - { - "type": "array", - "items": { - "allOf": [ - { - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/id" - } - }, - "required": [ - "id" - ] - }, - { - "$ref": "#/components/schemas/CWL/oneOf/2/allOf/4/properties/steps/oneOf/0/additionalProperties" - } - ] - } - } - ] - }, - "inputs": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/inputs" - }, - "outputs": { - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/outputs" - }, - "requirements": { - "description": "Technically a different subset, but lots of redefinitions to be done.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/requirements" - }, - "hints": { - "description": "Technically a different subset, but lots of redefinitions to be done.", - "$ref": "#/components/schemas/CWL/oneOf/0/allOf/3/properties/hints" - } + "description": "Identifier with text pattern that can allow additional non-ASCII characters depending on regex implementation.\nThe identifier allows a '#' or a relative 'sub/part#ref' prefix, to support references to other definitions\nin the CWL document, such as when using 'SchemaDefRequirement'.\n\nJSON spec regex does not include '\\w' in its default subset to allow all word-like unicode characters\n(see reference: https://json-schema.org/understanding-json-schema/reference/regular_expressions.html).\n\nSince support is implementation specific, add both the ASCII-only and '\\w' representation simultaneously\nand let the parser reading this document apply whichever is more relevant or supported\n(see discussion: https://github.com/common-workflow-language/cwl-v1.2/pull/256#discussion_r1234037814).\n", + "pattern": "^([A-Za-z0-9\\w]+(/[A-Za-z0-9\\w]+)*)?[#.]?[A-Za-z0-9\\w]+(?:[-_.][A-Za-z0-9\\w]+)*$", + "type": "string", + "title": "Generic identifier name pattern." + } + ], + "title": "CWLIdentifier", + "description": "Reference to the process identifier." + }, + "class": { + "type": "string", + "title": "Class", + "description": "CWL class specification. This is used to differentiate between single Application Package (AP)definitions and Workflow that chains multiple packages.", + "enum": [ + "CommandLineTool", + "ExpressionTool" + ] + }, + "intent": { + "type": "array", + "title": "CWLIntent", + "items": { + "type": "string", + "title": "item", + "description": "Identifier URL to a concept for the type of computational operation accomplished by this process\n(see example operations: http://edamontology.org/operation_0004).\n", + "format": "url", + "pattern": "^((?:http|ftp)s?://)?(?!.*//.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:/?|[/?]\\S+)$" + } + }, + "requirements": { + "$ref": "#/components/schemas/CWLRequirements" + }, + "hints": { + "$ref": "#/components/schemas/CWLHints" + }, + "baseCommand": { + "$ref": "#/components/schemas/CWLCommand" + }, + "arguments": { + "$ref": "#/components/schemas/CWLArguments" + }, + "inputs": { + "$ref": "#/components/schemas/CWLInputsDefinition" + }, + "outputs": { + "$ref": "#/components/schemas/CWLOutputsDefinition" + }, + "stdin": { + "description": "Source of the input stream.\nTypically, an expression referring to an existing file name or an input of the CWL document.\n", + "$ref": "#/components/schemas/CWLExpression" + }, + "stdout": { + "description": "Destination of the output stream.\nTypically, an expression referring to a desired file name or provided by a CWL input reference.\n", + "$ref": "#/components/schemas/CWLExpression" + }, + "stderr": { + "description": "Destination of the error stream.\nTypically, an expression referring to a desired file name or provided by a CWL input reference.\n", + "$ref": "#/components/schemas/CWLExpression" + }, + "scatter": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + }, + { + "type": "array", + "title": "CWLScatterMulti", + "items": { + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" } } + ], + "title": "CWLScatter", + "description": "One or more input identifier of an application step within a Workflow\nwere an array-based input to that Workflow should be scattered across multiple\ninstances of the step application.\n" + }, + "scatterMethod": { + "type": "string", + "title": "scatterMethod", + "description": "Describes how to decompose the scattered input into a discrete\nset of jobs. When 'dotproduct', specifies that each of the input arrays\nare aligned and one element taken from each array to construct each job.\nIt is an error if all input arrays are of different length. When 'nested_crossproduct',\nspecifies the Cartesian product of the inputs, producing a job for every\ncombination of the scattered inputs. The output must be nested arrays\nfor each level of scattering, in the order that the input arrays are listed\nin the scatter field. When 'flat_crossproduct', specifies the Cartesian\nproduct of the inputs, producing a job for every combination of the scattered\ninputs. The output arrays must be flattened to a single level, but otherwise\nlisted in the order that the input arrays are listed in the scatter field.\n", + "enum": [ + "dotproduct", + "nested_crossproduct", + "flat_crossproduct" + ] + } + }, + "required": [ + "class", + "inputs", + "outputs" + ] + }, + "CWLOutputList": { + "type": "array", + "title": "CWLOutputList", + "description": "Package outputs defined as items.", + "items": { + "$ref": "#/components/schemas/CWLOutputItem" + } + }, + "CWLOutputMap": { + "type": "object", + "title": "CWLOutputMap", + "description": "Package outputs defined as mapping.", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" + }, + { + "$ref": "#/components/schemas/CWLOutputObject" + }, + { + "$ref": "#/components/schemas/CWLOutputStdOut" + }, + { + "$ref": "#/components/schemas/CWLOutputStdErr" + }, + { + "$ref": "#/components/schemas/CWLImport" + } + ] + } + }, + "CWLOutputItem": { + "type": "object", + "title": "CWLOutputItem", + "description": "Output specification. Note that multiple formats are supported\nand not all specification variants or parameters are presented here. Please\nrefer to official CWL documentation for more details (https://www.commonwl.org).\n", + "properties": { + "type": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" + }, + { + "$ref": "#/components/schemas/CWLOutputStdOut" + }, + { + "$ref": "#/components/schemas/CWLOutputStdErr" + } ] + }, + "outputBinding": { + "type": "object", + "title": "OutputBinding", + "description": "Defines how to retrieve the output result from the command.", + "properties": { + "glob": { + "description": "Glob pattern to find the output on disk or mounted docker volume.", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLExpression" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLExpression" + } + } + ] + } + } + }, + "id": { + "description": "Identifier of the CWL output.", + "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + } + }, + "required": [ + "type", + "id" + ] + }, + "CWLWorkflowStepObject": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepDefinition" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepScatter" + } + ] + }, + "CWLInputStdInDefinition": { + "description": "Indicates that the value passed to this CWL input will be redirected to the standard input stream of the command.\nCan be defined for only one input and must not be combined with 'stdin' at the root of the CWL document.\n", + "type": "string", + "enum": [ + "stdin" + ] + }, + "CWLInputStdInObjectType": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLInputStdInDefinition" + } + }, + "required": [ + "type" + ] + }, + "CWLInputStdIn": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLInputStdInDefinition" + }, + { + "$ref": "#/components/schemas/CWLInputStdInObjectType" } ] }, + "CWLArguments": { + "type": "array", + "title": "CWLArguments", + "description": "Base arguments passed to the command.", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/InputBinding" + } + ] + } + }, + "SoftwarePackage": { + "type": "object", + "properties": { + "package": { + "type": "string" + }, + "version": { + "type": "array", + "items": { + "type": "string" + } + }, + "specs": { + "type": "array", + "items": { + "type": "string", + "format": "url", + "pattern": "^((?:http|ftp)s?:\\/\\/)?(?!.*\\/\\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:\\/?|[/?]\\S+)$" + } + } + }, + "required": [ + "package" + ], + "additionalProperties": false + }, + "SoftwarePackageSpecs": { + "type": "array", + "items": { + "type": "string" + } + }, "CQL2": { "oneOf": [ { @@ -3871,74 +4819,72 @@ "type": "array", "minItems": 2, "maxItems": 2, - "prefixItems": [ - { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - } - ] - }, - { - "oneOf": [ - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "casei" - ] - }, - "args": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/1/properties/args/prefixItems/1" + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" + }, + { + "$ref": "#/components/schemas/CQL2/oneOf/6" + }, + { + "oneOf": [ + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "casei" + ] }, - "minItems": 1, - "maxItems": 1 + "args": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/1/properties/args/items/oneOf/3" + }, + "minItems": 1, + "maxItems": 1 + } } - } - }, - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "accenti" - ] - }, - "args": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/1/properties/args/prefixItems/1" + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "accenti" + ] }, - "minItems": 1, - "maxItems": 1 + "args": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/1/properties/args/items/oneOf/3" + }, + "minItems": 1, + "maxItems": 1 + } } + }, + { + "type": "string" } - }, - { - "type": "string" - } - ] - } - ] + ] + } + ] + } } } }, @@ -3992,17 +4938,19 @@ "type": "array", "minItems": 2, "maxItems": 2, - "prefixItems": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/0/properties/args/items" - }, - { - "type": "array", - "items": { + "items": { + "oneOf": [ + { "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/0/properties/args/items" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/0/properties/args/items" + } } - } - ] + ] + } } } }, @@ -6722,30 +7670,34 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "number" - }, + "anyOf": [ { - "type": "integer" - }, - { - "type": "object", - "nullable": true - }, - { - "type": "array", - "items": {} - }, - { - "type": "boolean" - }, - { - "type": "string", - "format": "binary" + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "integer" + }, + { + "type": "object", + "nullable": true + }, + { + "type": "array", + "items": {} + }, + { + "type": "boolean" + }, + { + "type": "string", + "format": "binary" + } + ] }, { "$ref": "#/components/schemas/results" diff --git a/openapi/ogcapi-processes.yaml b/openapi/ogcapi-processes.yaml index 07128872..bf4a1c03 100644 --- a/openapi/ogcapi-processes.yaml +++ b/openapi/ogcapi-processes.yaml @@ -79,20 +79,20 @@ components: # Common - Geospatial Data collections: $ref: 'schemas/common-geodata/collections.yaml' - collectionInfo: - $ref: 'schemas/common-geodata/collectionInfo.yaml' + collectionDesc: + $ref: 'schemas/common-geodata/collectionDesc.yaml' extent: $ref: 'schemas/common-geodata/extent.yaml' - extent-uad: - $ref: 'schemas/common-geodata/extent-uad.yaml' + extent-UAD: + $ref: 'schemas/common-geodata/extent-UAD.yaml' crs: - $ref: 'schemas/common-geodata/crs.yaml' + $ref: 'schemas/crs/crs.yaml' dataType: $ref: 'schemas/common-geodata/dataType.yaml' timeStamp: $ref: 'schemas/common-geodata/timeStamp.yaml' # projJSON: - # $ref: 'schemas/common-geodata/projJSON.yaml' + # $ref: 'schemas/crs/projJSON.yaml' numberReturned: $ref: 'schemas/common-geodata/numberReturned.yaml' numberMatched: @@ -102,8 +102,236 @@ components: CWL: #$ref: 'https://w3id.org/cwl/v1.2/cwl-json-schema.yaml' $ref: 'schemas/cwl/cwl.yaml' - - # CQL2 + cwltool_CUDARequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/cwltool_CUDARequirement' + + CWLAtomic: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLAtomic' + CWLAtomicNested: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLAtomicNested' + CWLGraph: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLGraph' + CWLWorkflow: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflow' + CWLWorkflowClass: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowClass' + CWLWorkflowBase: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowBase' + CWLWorkflowSteps: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowSteps' + CWLInputsDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputsDefinition' + CWLOutputsDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputsDefinition' + CWLWorkflowStepMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepMap' + CWLWorkflowStepList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepList' + CWLInputList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputList' + CWLInputMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputMap' + ResourceQuantityOrFractional: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/ResourceQuantityOrFractional' + CWLExpression: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLExpression' + InitialWorkDirListing: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/InitialWorkDirListing' + CWLRequirementsMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLRequirementsMap' + CWLRequirements: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLRequirements' + CWLCommand: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLCommand' + InputBinding: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/InputBinding' + CWLInputItem: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputItem' + DirectoryListingDirent: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/DirectoryListingDirent' + DirectoryListingFileOrDirectory: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/DirectoryListingFileOrDirectory' + SoftwareRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/SoftwareRequirement' + DockerRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/DockerRequirement' + ShellCommandRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/ShellCommandRequirement' + EnvVarRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/EnvVarRequirement' + SchemaDefRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/SchemaDefRequirement' + InitialWorkDirRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/InitialWorkDirRequirement' + InlineJavascriptRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/InlineJavascriptRequirement' + InplaceUpdateRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/InplaceUpdateRequirement' + LoadListingRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/LoadListingRequirement' + NetworkAccessRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/NetworkAccessRequirement' + ResourceRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/ResourceRequirement' + ScatterFeatureRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/ScatterFeatureRequirement' + WorkReuseRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/WorkReuseRequirement' + ToolTimeLimitRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/ToolTimeLimitRequirement' + MultipleInputFeatureRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/MultipleInputFeatureRequirement' + StepInputExpressionRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/StepInputExpressionRequirement' + SubworkflowFeatureRequirement: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/SubworkflowFeatureRequirement' + + CWLHints: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLHints' + CWLWorkflowStepDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepDefinition' + CWLWorkflowStepScatter: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepScatter' + CWLWorkflowStepId: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepId' + CWLHintsMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLHintsMap' + CWLHintsList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLHintsList' + CWLWorkflowStepIn: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepIn' + CWLWorkflowStepRun: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepRun' + CWLWorkflowStepWhen: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepWhen' + CWLWorkflowStepOut: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepWhen' + CWLWorkflowStepInMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInMap' + CWLWorkflowStepInList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInList' + CWLWorkflowStepInItem: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInItem' + CWLWorkflowStepInputId: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInputId' + CWLWorkflowStepInputBase: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInputBase' + CWLWorkflowStepInputDefault: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepInputDefault' + + NetworkAccess: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/NetworkAccess' + EnvironmentDef: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/EnvironmentDef' + + CWLType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLType' + CWLOutputObject: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputObject' + CWLOutputStdOut: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdOut' + CWLOutputStdErr: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdErr' + CWLTypeEnum: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeEnum' + CWLTypeRecordSchema: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordSchema' + CWLTypeRecordArray: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordArray' + CWLDefaultTypedConditional: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDefaultTypedConditional' + CWLTypeBase: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeBase' + CWLTypeList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeList' + AnyType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/AnyType' + CWLTypeDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeDefinition' + CWLTypeArray: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeArray' + CWLTypeRecordRef: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordRef' + CWLTypeRecordFieldsMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordFieldsMap' + CWLTypeRecordFieldsList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordFieldsList' + CWLTypeRecordFieldDefBase: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordFieldDefBase' + CWLFileOnlyParametersConditional: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLFileOnlyParametersConditional' + CWLDirectoryOnlyParametersConditional: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDirectoryOnlyParametersConditional' + CWLFileOnlyParameters: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLFileOnlyParameters' + CWLTypeRecordSecondaryFiles: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordSecondaryFiles' + CWLTypeRecordSecondaryFileSchema: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordSecondaryFileSchema' + CWLRequirementsList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLRequirementsList' + CWLRequirementsItem: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLRequirementsItem' + + CWLOutputStdOutDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdOutDefinition' + CWLOutputStdOutObjectType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdOutObjectType' + CWLOutputStdErrDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdErrDefinition' + CWLOutputStdErrObjectType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputStdErrObjectType' + CWLTypeRecordFieldDef: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordFieldDef' + + CWLDefault: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDefault' + AnyLiteralType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/AnyLiteralType' + AnyLiteralList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/AnyLiteralList' + CWLDefaultLocation: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDefaultLocation' + CWLDefaultObject: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDefaultObject' + + CWLTypeRecordFields: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLTypeRecordFields' + + CWLImport: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLImport' + + CWLVersion: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLVersion' + CWLMetadata: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLMetadata' + CWLDocumentation: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLDocumentation' + CWLAtomicBase: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLAtomicBase' + CWLOutputList: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputList' + CWLOutputMap: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputMap' + CWLOutputItem: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLOutputItem' + CWLWorkflowStepObject: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLWorkflowStepObject' + CWLInputStdInDefinition: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputStdInDefinition' + CWLInputStdInObjectType: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputStdInObjectType' + CWLInputStdIn: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLInputStdIn' + CWLArguments: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/CWLArguments' + + SoftwarePackage: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/SoftwarePackage' + SoftwarePackageSpecs: + $ref: 'schemas/cwl/cwl-json-schema.yaml#/$defs/SoftwarePackageSpecs' + + # Common Query Language CQL2: $ref: 'schemas/cql2/cql2.yaml' diff --git a/openapi/parameters/processes-core/bbox-crs.yaml b/openapi/parameters/processes-core/bbox-crs.yaml index 1fb1ff2d..05876c84 100644 --- a/openapi/parameters/processes-core/bbox-crs.yaml +++ b/openapi/parameters/processes-core/bbox-crs.yaml @@ -7,9 +7,9 @@ description: |- in: query description: |- Asserts the CRS used for the coordinate values of a bounding - box input parameter. + box input parameter. required: false -schema: +schema: type: object patternProperties: "^.+[crs]$": diff --git a/openapi/responses/common-geodata/rCollection.yaml b/openapi/responses/common-geodata/rCollection.yaml index d6a6eaa5..4c5e92df 100644 --- a/openapi/responses/common-geodata/rCollection.yaml +++ b/openapi/responses/common-geodata/rCollection.yaml @@ -1,14 +1,16 @@ description: |- - Information about a particular collection of (mostly geospatial) data available from this API. The collection is accessible via one or more OGC API set of specifications, for which a link to relevant accessible resources, e.g. /collections/{collectionId}/(items, coverage, map, tiles...) is contained in the response, with the corresponding relation type, as well as key information about the collection. This information includes: + Information about a particular collection of (mostly geospatial) data available from this API. The collection is accessible via one or more OGC API set of specifications, for which a link to relevant accessible resources, e.g. /collections/{collectionId}/(items, coverage, map, tiles...) is contained in the response, with the corresponding relation type, as well as key information about the collection. This information includes (among other things): * a local identifier for the collection that is unique for the dataset; - * a list of coordinate reference systems (CRS) in which data may be returned by the server. The first CRS is the default coordinate reference system (the default is always WGS 84 with axis order longitude/latitude); + * a list of coordinate reference systems (CRS) in which data may be returned by the server; * an optional title and description for the collection; * an optional extent that can be used to provide an indication of the spatial and temporal extent of the collection - typically derived from the data; * for collections accessible via the Features or Records API, an optional indicator about the type of the items in the collection (the default value, if the indicator is not provided, is 'feature'). content: application/json: schema: - $ref: '../../schemas/common-geodata/collectionInfo.yaml' + $ref: '../../schemas/common-geodata/collectionDesc.yaml' + # For APIs conforming to the Uniform Additional Dimensions requirements class, reference the collectionDesc-UAD.yaml schema instead + # $ref: '../../schemas/common-geodata/collectionDesc-UAD.yaml' example: id: buildings title: Buildings diff --git a/openapi/responses/processes-core/rExecuteSync.yaml b/openapi/responses/processes-core/rExecuteSync.yaml index 9c79927b..c2df51aa 100644 --- a/openapi/responses/processes-core/rExecuteSync.yaml +++ b/openapi/responses/processes-core/rExecuteSync.yaml @@ -2,17 +2,18 @@ description: Result of synchronous execution content: application/json: schema: - oneOf: - - type: string - - type: number - - type: integer - - type: object - nullable: true - - type: array - items: { } - - type: boolean - - type: string - format: binary + anyOf: + - oneOf: + - type: string + - type: number + - type: integer + - type: object + nullable: true + - type: array + items: { } + - type: boolean + - type: string + format: binary - $ref: "../../schemas/processes-core/results.yaml" image/png: schema: diff --git a/openapi/schemas/common-geodata/additionalDimensionExtent.yaml b/openapi/schemas/common-geodata/additionalDimensionExtent.yaml new file mode 100644 index 00000000..5e825715 --- /dev/null +++ b/openapi/schemas/common-geodata/additionalDimensionExtent.yaml @@ -0,0 +1,71 @@ +title: Extent of any additional dimensions +description: The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial. +type: object +oneOf: + - required: [ interval, definition ] + - required: [ interval, trs ] + - required: [ interval, vrs ] +properties: + interval: + title: Interval of the extent of this dimension + description: |- + One or more intervals that describe the extent for this dimension of the dataset. + The value `null` is supported and indicates an unbounded or half-bounded interval. + The first interval describes the overall extent of the data for this dimension. + All subsequent intervals describe more precise intervals, e.g., to identify clusters of data. + Clients only interested in the overall extent will only need + to access the first item (a pair of lower and upper bound values). + type: array + minItems: 1 + items: + description: |- + Lower and upper bound values of the interval. The values + are in the coordinate reference system specified in `crs`, `trs` or `vrs`. + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - type: string + nullable: true + example: '2011-11-11T12:22:11Z' #, '2011-11-11T08:22:11-04:00', null + - type: number + example: 32.7 + trs: + title: Temporal Coordinate Reference System + description: Temporal Coordinate Reference System (e.g. as defined by Features for 'temporal'). This should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + anyOf: + - type: string + - type: object + vrs: + title: Vertical Coordinate Reference System + description: Vertical Coordinate Reference System (e.g. as defined in EDR for 'vertical'). This should be a URI to a registered VRS if one is available, or a full description of the VRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + anyOf: + - type: string + - type: object + grid: + $ref: 'grid.yaml' + definition: + type: string + format: uri + title: Observed property definition + description: A URI for the definition of the measured or observed property corresponding to this dimension. + unit: + type: string + title: Units of measurement + description: The unit of measure in which the interval and/or grid values are expressed. + unitLang: + type: string + default: UCUM + title: Units of measurement vocabulary + description: The language (or vocabulary) in which the unit is expressed (defaults to "UCUM" if not specified). + variableType: + title: Variable type + description: The type of variable which may inform correct interpretation and interpolation methods. + type: string + enum: + - continuous + - numericalOrdinal + - numericalNominal + - categoricalOrdinal + - categoricalNominal diff --git a/openapi/schemas/common-geodata/collectionDesc-UAD.yaml b/openapi/schemas/common-geodata/collectionDesc-UAD.yaml new file mode 100644 index 00000000..66a81c57 --- /dev/null +++ b/openapi/schemas/common-geodata/collectionDesc-UAD.yaml @@ -0,0 +1,6 @@ +allOf: + - $ref: 'collectionProperties.yaml' + - type: object + properties: + extent: + $ref: 'extent-UAD.yaml' diff --git a/openapi/schemas/common-geodata/collectionDesc.yaml b/openapi/schemas/common-geodata/collectionDesc.yaml new file mode 100644 index 00000000..1d727b95 --- /dev/null +++ b/openapi/schemas/common-geodata/collectionDesc.yaml @@ -0,0 +1,6 @@ +allOf: + - $ref: 'collectionProperties.yaml' + - type: object + properties: + extent: + $ref: 'extent.yaml' diff --git a/openapi/schemas/common-geodata/collectionInfo.yaml b/openapi/schemas/common-geodata/collectionInfo.yaml deleted file mode 100644 index 4dec6a04..00000000 --- a/openapi/schemas/common-geodata/collectionInfo.yaml +++ /dev/null @@ -1,83 +0,0 @@ -type: object -required: - - id - - links -properties: - id: - type: string - description: identifier of the collection used, for example, in URIs - example: dem - title: - type: string - description: human readable title of the collection - example: Digital Elevation Model - description: - type: string - description: a description of the data in the collection - example: A Digital Elevation Model. - links: - type: array - example: - - href: http://data.example.org/collections/dem?f=json - rel: self - type: application/json - title: Digital Elevation Model - - href: http://data.example.org/collections/dem?f=html - rel: alternate - type: application/json - title: Digital Elevation Model - - href: http://data.example.org/collections/dem/coverage - rel: coverage - type: image/tiff; application=geotiff - title: Digital Elevation Model - - href: http://data.example.org/collections/dem/coverage/domainset - rel: domainset - type: application/json - title: Digital Elevation Model - - href: http://data.example.org/collections/dem/coverage/rangetype - rel: rangetype - type: application/json - title: Digital Elevation Model - - href: http://data.example.org/collections/dem/coverage/metadata - rel: metadata - type: application/json - title: Digital Elevation Model - items: - $ref: '../common-core/link.yaml' - extent: - $ref: 'extent-uad.yaml' - itemType: - description: indicator about the type of the items in the collection if the collection has an accessible /collections/{collectionId}/items endpoint - type: string - default: unknown - crs: - description: the list of coordinate reference systems supported by the API; the first item is the default coordinate reference system - type: array - items: - type: string - default: - - http://www.opengis.net/def/crs/OGC/1.3/CRS84 - example: - - http://www.opengis.net/def/crs/OGC/1.3/CRS84 - - http://www.opengis.net/def/crs/EPSG/0/4326 - dataType: - allOf: - - description: Type of data represented in the collection - - $ref: '../../schemas/common-geodata/dataType.yaml' - geometryDimension: - description: 'The geometry dimension of the features shown in this layer (0: points, 1: curves, 2: surfaces, 3: solids), unspecified: mixed or unknown' - type: integer - minimum: 0 - maximum: 3 - minScaleDenominator: - description: Minimum scale denominator for usage of the collection - type: number - maxScaleDenominator: - description: Maximum scale denominator for usage of the collection - type: number - minCellSize: - description: Minimum cell size for usage of the collection - type: number - maxCellSize: - description: Maximum cell size for usage of the collection - type: number diff --git a/openapi/schemas/common-geodata/collectionProperties.yaml b/openapi/schemas/common-geodata/collectionProperties.yaml new file mode 100644 index 00000000..c63ad93d --- /dev/null +++ b/openapi/schemas/common-geodata/collectionProperties.yaml @@ -0,0 +1,214 @@ +type: object +required: + - id + - links +properties: + id: + type: string + title: Identifier of the resource + description: Identifier of the collection, for example, used in URI path parameters. + minLength: 1 + example: dem + title: + type: string + title: Title of the collection + description: A short, human-readable summary of the collection. + example: Digital Elevation Model + description: + type: string + title: Description of the collection + description: A human-readable explanation about data in the collection. + example: A Digital Elevation Model. + attribution: + type: string + title: Attribution for the collection + description: |- + Attribution for the collection, providing a way to identify the source of the geographic information, which can contain markup text whose format may be indicated in the `attributionMediaType` property. That format can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`). + If the 'attributionMediaType' indicates something other than `text/plain`, the `attribution` element string should be interpreted by a markup parser selected based on that media type to be presented to the user + (e.g., `text/markdown` will be parsed by a library supporting CommonMark). By allowing markup, the attribution string can import images (e.g., organization logos) and format the text (e.g., the name of the organization in italics). + attributionMediaType: + title: Media type of the attribution + description: |- + Media type for the markup language of the attribution: It can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`). + enum: + - text/plain + - text/html + - text/markdown + accessConstraints: + title: Access Constraints of the collection + description: |- + Restrictions on the availability of the collection that the user needs to be aware of before using or redistributing the data: + + * unclassified: Available for general disclosure + * restricted: Not for general disclosure + * confidential: Available for someone who can be entrusted with information + * secret: Kept or meant to be kept private, unknown, or hidden from all but a select group of people + * topSecret: Of the highest secrecy + enum: + - unclassified + - restricted + - confidential + - secret + - topSecret + publisher: + type: string + title: Responsible party publishing the collection + description: Organization or individual responsible for making the data available + contacts: + type: array + title: A list of contacts + description: + A list of contacts qualified by their role(s) in association to the collection. + minItems: 1 + items: + $ref: '../records-core/contact.yaml' + license: + type: string + title: License associated to the collection + description: The legal provisions under which the data of this collection is made available. + rights: + type: string + title: Rights over the collection + description: A statement that concerns all rights not addressed by the license such as a copyright statement. + formats: + title: Formats for distributing the collection + description: A list of formats in which the data of this collection is distributed + type: array + items: + $ref: '../records-core/format.yaml' + keywords: + type: array + title: Keywords representing aspects of the collection + description: The topic or topics of the resource. Typically represented using free-form keywords, tags, key phrases, or classification codes. + items: + type: string + themes: + type: array + title: Themes represented by the resource + description: + A knowledge organization system used to classify the resource. + minItems: 1 + items: + $ref: '../records-core/theme.yaml' + resourceLanguages: + type: array + title: The list of languages of the collection + description: The list of languages in which the data of this collection is available. + items: + $ref: '../records-core/language.yaml' + links: + type: array + title: Links relevant to this collection + description: Links to this or other resources related to this collection. + example: + - href: http://data.example.org/collections/dem?f=json + rel: self + type: application/json + title: Digital Elevation Model + - href: http://data.example.org/collections/dem?f=html + rel: alternate + type: application/json + title: Digital Elevation Model + - href: http://data.example.org/collections/dem/coverage + rel: coverage + type: image/tiff; application=geotiff + title: Digital Elevation Model + - href: http://data.example.org/collections/dem/coverage/domainset + rel: domainset + type: application/json + title: Digital Elevation Model + - href: http://data.example.org/collections/dem/coverage/rangetype + rel: rangetype + type: application/json + title: Digital Elevation Model + - href: http://data.example.org/collections/dem/coverage/metadata + rel: metadata + type: application/json + title: Digital Elevation Model + items: + $ref: '../common-core/link.yaml' + itemType: + title: Type of the items in the collection + description: Indicator about the type of the items in the collection if the collection has an accessible `/collections/{collectionId}/items` endpoint (e.g., `feature` or `record`). + type: string + default: feature + dataType: + title: Nature of the data in the collection + description: Nature of the data in the collection. For example, this could be set to `map`, `vector` or `coverage`. It is not an indication of the available data access mechanism, but a hint regarding the internal representation of the data. + $ref: 'dataType.yaml' + parent: + title: Identifier of a parent collection (if this collection is part of a hierarchy) + description: If this collection is part of a hierarchy, this property allows to identify another collection within the same dataset as its parent (by setting `parent` to the `id` of that collection), enabling clients to construct a hierarchy. + type: string + geoDataClasses: + title: Class of data in the collection + description: 'One or more classes of geospatial data, identified by a URI, which implies compatibility with a particular schema (fields/properties, as defined in OGC API - Common - Part 3: Schemas) for one or more collections, each with particular semantic definitions and data types. This is useful for example to determine compatibility with styles or processes, or to identify a particular collection within a dataset based on semantics.' + type: array + items: + type: string + format: uri + defaultFields: + title: List of fields returned by default + description: A sorted list of field names. For a Features data access mechanism, it is the list of returnable properties included by default and complementing the geometry of the features. For a Coverage data access mechanism, they are names of fields whose values are included by default. Note that an API may provide a mechanism (e.g., a query parameter called `properties` or `exclude-properties`) to override this default list in customized responses. + type: array + items: + type: string + minItems: 1 + crs: + title: List of coordinate reference systems supported in the collection + description: The list of coordinate reference systems supported by the API; if present, the list should include the default coordinate reference system (usually listed first). Each item should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + type: array + items: + anyOf: + - type: string + - type: object + default: + - http://www.opengis.net/def/crs/OGC/1.3/CRS84 + example: + - http://www.opengis.net/def/crs/OGC/1.3/CRS84 + - http://www.opengis.net/def/crs/EPSG/0/4326 + storageCrs: + title: Storage or native CRS of the data in the collection + description: The native coordinate reference system (i.e., the most efficient CRS in which to request the data, possibly how the data is stored on the server); this is the default output coordinate reference system for Maps and Coverages. This should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + anyOf: + - type: string + - type: object + default: http://www.opengis.net/def/crs/OGC/1.3/CRS84 + example: http://www.opengis.net/def/crs/OGC/1.3/CRS84 + epoch: + title: Epoch of the data in the collection + description: Epoch of the native (storage) Coordinate Reference System (CRS) + type: number + example: 2021.33 + geometryDimension: + title: Number of spatial dimensions of the primary geometry for the data + description: 'Number of spatial dimensions of the primary geometry of individual elements of the data: 0 for points, 1 for curves, 2 for surfaces, 3 for solids and unspecified when mixed or unknown. Not to be confused with the dimensions of the domain which are defined by the extent element.' + type: integer + minimum: 0 + maximum: 3 + minScaleDenominator: + title: Minimum scale denominator for the collection + description: Minimum scale denominator for usage of the collection. + type: number + maxScaleDenominator: + title: Maximum scale denominator for the collection + description: Maximum scale denominator for usage of the collection. + type: number + minCellSize: + title: Minimum cell size for the collection + description: Minimum cell size for usage of the collection. + type: number + maxCellSize: + title: Maximum cell size for the collection + description: Maximum cell size for usage of the collection. + type: number + created: + title: Timestamp when the collection was first produced + description: Timestamp indicating when the data in the collection was first produced. + type: string + format: date-time + updated: + title: Timestamp of the last change/revision to the collection + description: Timestamp of the last change/revision to the data in the collection. + type: string + format: date-time diff --git a/openapi/schemas/common-geodata/collections.yaml b/openapi/schemas/common-geodata/collections.yaml index 2e57c44a..e6872ac4 100644 --- a/openapi/schemas/common-geodata/collections.yaml +++ b/openapi/schemas/common-geodata/collections.yaml @@ -5,20 +5,19 @@ required: properties: links: type: array + title: Links to resource in the collections + description: Links to this or other resources provided by the collections. items: $ref: '../common-core/link.yaml' - timeStamp: - type: string - format: date-time numberMatched: - type: integer - minimum: 0 - example: 1 + $ref: 'numberMatched.yaml' numberReturned: - type: integer - minimum: 0 - example: 1 + $ref: 'numberReturned.yaml' collections: type: array + title: Collections descriptions + description: Descriptions of each collection in this API. items: - $ref: 'collectionInfo.yaml' + $ref: 'collectionDesc.yaml' + # For APIs conforming to the Uniform Additional Dimensions requirements class, reference the collectionDesc-UAD.yaml schema instead + # $ref: 'collectionDesc-UAD.yaml' diff --git a/openapi/schemas/common-geodata/dataType.yaml b/openapi/schemas/common-geodata/dataType.yaml index 6aa967cb..dadac26a 100644 --- a/openapi/schemas/common-geodata/dataType.yaml +++ b/openapi/schemas/common-geodata/dataType.yaml @@ -1,5 +1,5 @@ # This list may be extended (e.g. point clouds, meshes) -oneOf: +anyOf: - type: string - type: string enum: diff --git a/openapi/schemas/common-geodata/extent-UAD.yaml b/openapi/schemas/common-geodata/extent-UAD.yaml new file mode 100644 index 00000000..17df2900 --- /dev/null +++ b/openapi/schemas/common-geodata/extent-UAD.yaml @@ -0,0 +1,15 @@ +title: Extent conforming to Uniform Additional Dimensions Schema +description: |- + The extent of the data in the collection. + This extent schema requires that if any dimension beyond spatial and temporal are specified, they conform to the Uniform Additional Dimensions schema. + In addition to the spatial and temporal extents defined in the "Collections" requirements class of OGC API - Common - Part 2, + the "Uniform Additional Dimensions" requirements class specifies a generic schema for describing any additional dimension, such as thermal or pressure ranges. +allOf: + - type: object + properties: + spatial: + $ref: 'spatialExtent.yaml' + temporal: + $ref: 'temporalExtent.yaml' + additionalProperties: + $ref: 'additionalDimensionExtent.yaml' diff --git a/openapi/schemas/common-geodata/extent-uad.yaml b/openapi/schemas/common-geodata/extent-uad.yaml deleted file mode 100644 index 7e38641a..00000000 --- a/openapi/schemas/common-geodata/extent-uad.yaml +++ /dev/null @@ -1,85 +0,0 @@ -title: Extent with Uniform Additional Dimensions Schema -description: |- - The extent module only addresses spatial and temporal extents. This module extends extent by specifying how - intervals and crs properties can be used to specify additional geometries. -allOf: - - $ref: 'extent.yaml' - - type: object - additionalProperties: - description: |- - The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial. - type: object - oneOf: - - required: [ interval, crs ] - - required: [ interval, trs ] - - required: [ interval, vrs ] - properties: - interval: - description: |- - One or more intervals that describe the extent for this dimension of the dataset. - The value `null` is supported and indicates an unbounded or half-bounded interval. - The first interval describes the overall extent of the data for this dimension. - All subsequent intervals describe more precise intervals, e.g., to identify clusters of data. - Clients only interested in the overall extent will only need - to access the first item (a pair of lower and upper bound values). - type: array - minItems: 1 - items: - description: |- - Lower and upper bound values of the interval. The values - are in the coordinate reference system specified in `crs`, `trs` or `vrs`. - type: array - minItems: 2 - maxItems: 2 - items: - oneOf: - - type: string - nullable: true - - type: number - example: - - '2011-11-11T12:22:11Z' - - 32.5 - - null - crs: - type: string - description: generic coordinate reference system suitable for any type of dimensions - trs: - type: string - description: temporal coordinate reference system (e.g. as defined by Features for 'temporal') - vrs: - type: string - description: vertical coordinate reference system (e.g. as defined in EDR for 'vertical') - grid: - type: object - description: |- - Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the dimension. - properties: - coordinates: - description: |- - List of coordinates along the temporal dimension for which data organized as an irregular grid in the collection is available - (e.g., 2, 10, 80, 100). - type: array - minItems: 1 - items: - oneOf: - - type: string - nullable: true - - type: number - example: [2, 10, 80, 100] - cellsCount: - description: |- - Number of samples available along the dimension for data organized as a regular grid. - For values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_. - For values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1. - type: integer - example: 50 - resolution: - description: |- - Resolution of regularly gridded data along the dimension in the collection - oneOf: - - type: string - nullable: true - - type: number - example: - - "PT1H" - - 0.0006866455078 diff --git a/openapi/schemas/common-geodata/extent.yaml b/openapi/schemas/common-geodata/extent.yaml index ba59cbaf..3bf7077f 100644 --- a/openapi/schemas/common-geodata/extent.yaml +++ b/openapi/schemas/common-geodata/extent.yaml @@ -1,201 +1,19 @@ +title: Extent with (optional) Uniform Additional Dimensions Schema description: |- - The extent of the data in the collection. In the Core only spatial and temporal - extents are specified. Extensions may add additional members to represent other - extents, for example, thermal or pressure ranges. - - The first item in the array describes the overall extent of - the data. All subsequent items describe more precise extents, - e.g., to identify clusters of data. - Clients only interested in the overall extent will only need to - access the first item in each array. -type: object -properties: - spatial: - description: The spatial extent of the data in the collection. - type: object - properties: - bbox: - description: |- - One or more bounding boxes that describe the spatial extent of the dataset. - In the Core only a single bounding box is supported. - - Extensions may support additional areas. - The first bounding box describes the overall spatial - extent of the data. All subsequent bounding boxes describe - more precise bounding boxes, e.g., to identify clusters of data. - Clients only interested in the overall spatial extent will - only need to access the first item in each array. - type: array - minItems: 1 - items: - description: |- - Each bounding box is provided as four or six numbers, depending on - whether the coordinate reference system includes a vertical axis - (height or depth): - - * Lower left corner, coordinate axis 1 - * Lower left corner, coordinate axis 2 - * Minimum value, coordinate axis 3 (optional) - * Upper right corner, coordinate axis 1 - * Upper right corner, coordinate axis 2 - * Maximum value, coordinate axis 3 (optional) - - If the value consists of four numbers, the coordinate reference system is - WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) - unless a different coordinate reference system is specified in a parameter `bbox-crs`. - - If the value consists of six numbers, the coordinate reference system is WGS 84 - longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h) - unless a different coordinate reference system is specified in a parameter `bbox-crs`. - - For WGS 84 longitude/latitude the values are in most cases the sequence of - minimum longitude, minimum latitude, maximum longitude and maximum latitude. - However, in cases where the box spans the antimeridian the first value - (west-most box edge) is larger than the third value (east-most box edge). - - If the vertical axis is included, the third and the sixth number are - the bottom and the top of the 3-dimensional bounding box. - - If a feature has multiple spatial geometry properties, it is the decision of the - server whether only a single spatial geometry property is used to determine - the extent or all relevant geometries. - type: array - oneOf: - - minItems: 4 - maxItems: 4 - - minItems: 6 - maxItems: 6 - items: - type: number - example: - - -180 - - -90 - - 180 - - 90 - crs: - description: |- - Coordinate reference system of the coordinates in the spatial extent - (property `bbox`). The default reference system is WGS 84 longitude/latitude. - In the Core the only other supported coordinate reference system is - WGS 84 longitude/latitude/ellipsoidal height for coordinates with height. - Extensions may support additional coordinate reference systems and add - additional enum values. - type: string - enum: - - 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' - - 'http://www.opengis.net/def/crs/OGC/0/CRS84h' - default: 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' - grid: - description: |- - Provides information about the limited availability of data within the collection organized - as a grid (regular or irregular) along each spatial dimension. - type: array - minItems: 2 - maxItems: 3 - items: - type: object - properties: - coordinates: - description: |- - List of coordinates along the dimension for which data organized as an irregular grid in the collection is available - (e.g., 2, 10, 80, 100). - type: array - minItems: 1 - items: - oneOf: - - type: string - nullable: true - - type: number - example: [2, 10, 80, 100] - cellsCount: - description: |- - Number of samples available along the dimension for data organized as a regular grid. - For values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_. - For values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1. - type: integer - example: 50 - resolution: - description: |- - Resolution of regularly gridded data along the dimension in the collection - oneOf: - - type: string - nullable: true - - type: number - example: 0.0006866455078 - temporal: - description: |- - The temporal extent of the features in the collection. - type: object - properties: - interval: - description: |- - One or more time intervals that describe the temporal extent of the dataset. - In the Core only a single time interval is supported. - - Extensions may support multiple intervals. - The first time interval describes the overall - temporal extent of the data. All subsequent time intervals describe - more precise time intervals, e.g., to identify clusters of data. - Clients only interested in the overall extent will only need - to access the first item in each array. - type: array - minItems: 1 - items: - description: |- - Begin and end times of the time interval. The timestamps are in the - temporal coordinate reference system specified in `trs`. By default - this is the Gregorian calendar. - - The value `null` for start or end time is supported and indicates a half-bounded time interval. - type: array - minItems: 2 - maxItems: 2 - items: - type: string - format: date-time - nullable: true - example: - - '2011-11-11T12:22:11Z' - - null - trs: - description: |- - Coordinate reference system of the coordinates in the temporal extent - (property `interval`). The default reference system is the Gregorian calendar. - In the Core this is the only supported temporal coordinate reference system. - Extensions may support additional temporal coordinate reference systems and add - additional enum values. - type: string - enum: - - 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' - default: 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' - grid: - type: object - description: |- - Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the temporal dimension. - properties: - coordinates: - description: |- - List of coordinates along the temporal dimension for which data organized as an irregular grid in the collection is available - (e.g., "2017-11-14T09:00Z","2017-11-14T12:00Z","2017-11-14T15:00Z","2017-11-14T18:00Z","2017-11-14T21:00Z"). - type: array - minItems: 1 - items: - type: string - nullable: true - example: - - ["2020-11-12T12:15Z","2020-11-12T12:30Z","2020-11-12T12:45Z"] - cellsCount: - description: |- - Number of samples available along the temporal dimension for data organized as a regular grid. - For values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_. - For values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1. - type: integer - example: 50 - resolution: - description: |- - Resolution of regularly gridded data along the temporal dimension in the collection - oneOf: - - type: string - nullable: true - - type: number - example: "PT1H" + The extent of the data in the collection. + This extent schema includes optional additional dimensions, but will still validate for objects not conforming to UAD. + OGC API - Common - Part 2 "Collections" requirements class specifies only the definition of the spatial and temporal extents. + The "Uniform Additional Dimensions" requirements class specifies a generic schema for describing any additional dimension, such as thermal or pressure ranges. +allOf: + - type: object + properties: + spatial: + $ref: 'spatialExtent.yaml' + temporal: + $ref: 'temporalExtent.yaml' + - anyOf: + - type: object + description: General object extension point + - type: object + additionalProperties: + $ref: 'additionalDimensionExtent.yaml' diff --git a/openapi/schemas/common-geodata/grid.yaml b/openapi/schemas/common-geodata/grid.yaml new file mode 100644 index 00000000..6aa02973 --- /dev/null +++ b/openapi/schemas/common-geodata/grid.yaml @@ -0,0 +1,16 @@ +type: object +title: Grid. +description: |- + Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the dimension. +allOf: + - type: object + required: [ cellsCount ] + properties: + cellsCount: + title: Cell count + description: Number of samples available along the dimension for data organized as a regular or irregular grid. + type: integer + example: 50 + - oneOf: + - $ref: 'regularGrid.yaml' + - $ref: 'irregularGrid.yaml' diff --git a/openapi/schemas/common-geodata/irregularGrid.yaml b/openapi/schemas/common-geodata/irregularGrid.yaml new file mode 100644 index 00000000..ea0f5bb5 --- /dev/null +++ b/openapi/schemas/common-geodata/irregularGrid.yaml @@ -0,0 +1,36 @@ +type: object +title: Irregular grid. +description: Irregular grid with samples spaced at different intervals. +required: [ coordinates ] +properties: + coordinates: + title: Coordinates of the irregular cells + description: |- + List of coordinates along the dimension for which data organized as an irregular grid in the collection is available. + (e.g., 2, 10, 80, 100). + type: array + minItems: 1 + items: + oneOf: + - type: string + nullable: true + example: "2020-11-12T12:15:00Z" + - type: number + example: 12.3 + example: [2, 10, 80, 100] + boundsCoordinates: + title: Bounds coordinates + description: |- + For irregular grids, an ordered list of the coordinates in absolute units of the lower and upper bounds of the dimension for each cell. + type: array + minItems: 1 + items: + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - type: string + nullable: true + - type: number + example: [ [ -180, -179 ], [ -179, -178 ] ] diff --git a/openapi/schemas/common-geodata/numberMatched.yaml b/openapi/schemas/common-geodata/numberMatched.yaml index 54e16aa2..5c5e67a3 100644 --- a/openapi/schemas/common-geodata/numberMatched.yaml +++ b/openapi/schemas/common-geodata/numberMatched.yaml @@ -1,6 +1,5 @@ -description: |- - The number of features of the feature type that match the selection - parameters like `bbox`. +title: The number of elements in the response +description: The number of elements in the response that match the selection parameters like `bbox`. type: integer minimum: 0 -example: 127 \ No newline at end of file +example: 127 diff --git a/openapi/schemas/common-geodata/numberReturned.yaml b/openapi/schemas/common-geodata/numberReturned.yaml index 7efb4093..25150786 100644 --- a/openapi/schemas/common-geodata/numberReturned.yaml +++ b/openapi/schemas/common-geodata/numberReturned.yaml @@ -1,9 +1,6 @@ -description: |- - The number of features in the feature collection. - A server may omit this information in a response, if the information - about the number of features is not known or difficult to compute. - If the value is provided, the value shall be identical to the number - of items in the "features" array. +title: The number of elements in the response +description: A server may omit this information, if the information about the number of elements is not known or difficult to compute. + If the value is provided, the value shall be identical to the number of elements in the response. type: integer minimum: 0 -example: 10 \ No newline at end of file +example: 10 diff --git a/openapi/schemas/common-geodata/regularGrid.yaml b/openapi/schemas/common-geodata/regularGrid.yaml new file mode 100644 index 00000000..15be41f2 --- /dev/null +++ b/openapi/schemas/common-geodata/regularGrid.yaml @@ -0,0 +1,45 @@ +type: object +title: Regular grid +description: Regular grid with samples spaced at equal intervals. +required: [ resolution, firstCoordinate ] +properties: + resolution: + title: Resolution + description: Resolution of regularly gridded data along the dimension in the collection. + oneOf: + - type: string + nullable: true + example: "PT1H" + - type: number + example: 0.0006866455078 + availableResolutions: + title: Available resolutions + description: List of resolutions made available by the API. If not specified, there are no limit other than the limits indicated in `minCellSize` and `maxCellSize` of the collection description (though the API might still allow requesting data beyond these). + type: array + items: + oneOf: + - type: string + nullable: true + - type: number + example: [ "P1H", "P1D", "P1M" ] + firstCoordinate: + title: First coordinate + description: First coordinate where a regular grid begins, with subsequent coordinates adding `resolution` unit at each step. + oneOf: + - type: string + nullable: true + - type: number + example: -180 + relativeBounds: + title: Relative bounds + description: |- + Distance in units from coordinate to the lower and upper bounds of each cell for regular grids, describing the geometry of the cells. + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - type: string + nullable: true + - type: number + example: [ -0.5, 0.5 ] diff --git a/openapi/schemas/common-geodata/spatialExtent.yaml b/openapi/schemas/common-geodata/spatialExtent.yaml new file mode 100644 index 00000000..0e3c1b31 --- /dev/null +++ b/openapi/schemas/common-geodata/spatialExtent.yaml @@ -0,0 +1,124 @@ +title: Spatial extent +description: The spatial extent of the data in the collection. +type: object +properties: + bbox: + title: Bounding box in the 'crs' coordinates + description: |- + One or more bounding boxes that describe the spatial extent of the dataset. + + The first bounding box describes the overall spatial + extent of the data. All subsequent bounding boxes describe + more precise bounding boxes, e.g., to identify clusters of data. + Clients only interested in the overall spatial extent will + only need to access the first item in each array. + type: array + minItems: 1 + items: + description: |- + Each bounding box is provided as four or six numbers, depending on + whether the coordinate reference system includes a vertical axis + (height or depth): + + * Lower left corner, coordinate axis 1 + * Lower left corner, coordinate axis 2 + * Minimum value, coordinate axis 3 (optional) + * Upper right corner, coordinate axis 1 + * Upper right corner, coordinate axis 2 + * Maximum value, coordinate axis 3 (optional) + + If the value consists of four numbers, the coordinate reference system is + WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) + unless a different coordinate reference system is specified in `crs` property. + + If the value consists of six numbers, the coordinate reference system is WGS 84 + longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h) + unless a different coordinate reference system is specified in `crs` property. + + For WGS 84 longitude/latitude the values are in most cases the sequence of + minimum longitude, minimum latitude, maximum longitude and maximum latitude. + However, in cases where the box spans the antimeridian the first value + (west-most box edge) is larger than the third value (east-most box edge). + + If the vertical axis is included, the third and the sixth number are + the bottom and the top of the 3-dimensional bounding box. + + If a feature has multiple spatial geometry properties, it is the decision of the + server whether only a single spatial geometry property is used to determine + the extent or all relevant geometries. + type: array + oneOf: + - minItems: 4 + maxItems: 4 + - minItems: 6 + maxItems: 6 + items: + type: number + example: + - -180 + - -90 + - 180 + - 90 + storageCrsBbox: + title: Bounding box in the storage CRS + description: |- + One or more bounding boxes that describe the spatial extent of the dataset in the storage (native) CRS (`storageCrs` property). + + The first bounding box describes the overall spatial + extent of the data. All subsequent bounding boxes describe + more precise bounding boxes, e.g., to identify clusters of data. + Clients only interested in the overall spatial extent will + only need to access the first item in each array. + type: array + minItems: 1 + items: + description: |- + Each bounding box is provided as four or six numbers, depending on + whether the coordinate reference system includes a vertical axis + (height or depth): + + * Lower left corner, coordinate axis 1 + * Lower left corner, coordinate axis 2 + * Minimum value, coordinate axis 3 (optional) + * Upper right corner, coordinate axis 1 + * Upper right corner, coordinate axis 2 + * Maximum value, coordinate axis 3 (optional) + type: array + oneOf: + - minItems: 4 + maxItems: 4 + - minItems: 6 + maxItems: 6 + items: + type: number + example: + - -180 + - -90 + - 180 + - 90 + crs: + title: Coordinate reference system + description: |- + Coordinate reference system of the coordinates of the `bbox` property. + The default reference system is WGS 84 longitude/latitude. + WGS 84 longitude/latitude/ellipsoidal height for coordinates with height. + For data not referenced to Earth, another CRS may be specified. + This should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + anyOf: + - type: string + - type: string + enum: + - 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' + - 'http://www.opengis.net/def/crs/OGC/0/CRS84h' + - type: object + default: 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' + grid: + title: Grid description + description: |- + Provides information about the limited availability of data within the collection organized + as a grid (regular or irregular) along each spatial dimension. + type: array + minItems: 2 + maxItems: 3 + items: + $ref: 'grid.yaml' diff --git a/openapi/schemas/common-geodata/temporalExtent.yaml b/openapi/schemas/common-geodata/temporalExtent.yaml new file mode 100644 index 00000000..28545873 --- /dev/null +++ b/openapi/schemas/common-geodata/temporalExtent.yaml @@ -0,0 +1,48 @@ +title: Temporal extent +description: The temporal extent of the data in the collection. +type: object +properties: + interval: + title: Temporal intervals + description: |- + One or more time intervals that describe the temporal extent of the dataset. + + The first time interval describes the overall + temporal extent of the data. All subsequent time intervals describe + more precise time intervals, e.g., to identify clusters of data. + Clients only interested in the overall extent will only need + to access the first item in each array. + type: array + minItems: 1 + items: + description: |- + Begin and end times of the time interval. The timestamps are in the + temporal coordinate reference system specified in `trs`. By default + this is the Gregorian calendar, expressed using RFC 3339 section 5.6. + Note that these times may be specified using time zone offsets to UTC time other than zero. + + The value `null` for start or end time is supported and indicates a half-bounded time interval. + type: array + minItems: 2 + maxItems: 2 + items: + type: string + format: date-time + nullable: true + example: '2011-11-11T12:22:11Z' #, '2011-11-11T08:22:11-04:00', null + trs: + title: Temporal Coordinate Reference System + description: |- + Coordinate reference system of the coordinates in the temporal extent + (property `interval`). The default reference system is the Gregorian calendar. + For data for which the Gregorian calendar is not suitable, such as geological time scale, another temporal reference system may be used. + This should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object. + anyOf: + - type: string + - type: string + enum: + - 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' + - type: object + default: 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' + grid: + $ref: 'grid.yaml' diff --git a/openapi/schemas/common-geodata/timeStamp.yaml b/openapi/schemas/common-geodata/timeStamp.yaml index 796bb131..5eeea935 100644 --- a/openapi/schemas/common-geodata/timeStamp.yaml +++ b/openapi/schemas/common-geodata/timeStamp.yaml @@ -1,3 +1,4 @@ +title: Time stamp description: This property indicates the time and date when the response was generated using RFC 3339 notation. type: string format: date-time diff --git a/openapi/schemas/cql2/cql2-definitions.yaml b/openapi/schemas/cql2/cql2-definitions.yaml index 375ad8d3..1bbeff6d 100644 --- a/openapi/schemas/cql2/cql2-definitions.yaml +++ b/openapi/schemas/cql2/cql2-definitions.yaml @@ -86,12 +86,18 @@ definitions: type: array minItems: 2 maxItems: 2 - prefixItems: - - oneOf: + #prefixItems: + # - oneOf: + # - $ref: '#/definitions/characterExpression' + # - $ref: '#/definitions/propertyRef' + # - $ref: '#/definitions/functionRef' + # - $ref: '#/definitions/patternExpression' + items: + oneOf: - $ref: '#/definitions/characterExpression' - $ref: '#/definitions/propertyRef' - $ref: '#/definitions/functionRef' - - $ref: '#/definitions/patternExpression' + - $ref: '#/definitions/patternExpression' patternExpression: oneOf: - type: object @@ -166,7 +172,13 @@ definitions: type: array minItems: 2 maxItems: 2 - prefixItems: + #prefixItems: + # - $ref: '#/definitions/scalarExpression' + # - type: array + # items: + # $ref: '#/definitions/scalarExpression' + items: + oneOf: - $ref: '#/definitions/scalarExpression' - type: array items: diff --git a/openapi/schemas/common-geodata/crs.yaml b/openapi/schemas/crs/crs.yaml similarity index 100% rename from openapi/schemas/common-geodata/crs.yaml rename to openapi/schemas/crs/crs.yaml diff --git a/openapi/schemas/common-geodata/projJSON.yaml b/openapi/schemas/crs/projJSON.yaml similarity index 100% rename from openapi/schemas/common-geodata/projJSON.yaml rename to openapi/schemas/crs/projJSON.yaml diff --git a/openapi/schemas/cwl/cwl-json-schema.yaml b/openapi/schemas/cwl/cwl-json-schema.yaml index 83b42826..502756a2 100644 --- a/openapi/schemas/cwl/cwl-json-schema.yaml +++ b/openapi/schemas/cwl/cwl-json-schema.yaml @@ -9,8 +9,8 @@ $defs: - $ref: '#/$defs/CWLGraph' - $ref: '#/$defs/CWLWorkflow' CWLKeywordList: - type: array title: KeywordList + type: array description: Keywords applied to the process for search and categorization purposes. items: type: string @@ -55,6 +55,7 @@ $defs: format: url pattern: '^((?:http|ftp)s?://)?(?!.*//.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+(?:[A-Za-z]{2,6}\.?|[A-Za-z0-9-]{2,}\.?)|localhost|\[[a-f0-9:]+\]|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::\d+)?(?:/?|[/?]\S+)$' CWLImport: + title: CWLImport description: | The schema validation of the CWL will not itself perform the '$import' to resolve and validate its contents. Therefore, the complete schema will not be validated entirely, and could still be partially malformed. @@ -79,8 +80,8 @@ $defs: title: CWLRequirementsMap type: object properties: - cwltool:CUDARequirement: - $ref: '#/$defs/cwltool:CUDARequirement' + 'cwltool:CUDARequirement': + $ref: '#/$defs/cwltool_CUDARequirement' DockerRequirement: $ref: '#/$defs/DockerRequirement' SoftwareRequirement: @@ -100,18 +101,21 @@ $defs: LoadListingRequirement: $ref: '#/$defs/LoadListingRequirement' NetworkAccess: - description: Not 'NetworkAccessRequirement' - $ref: '#/$defs/NetworkAccessRequirement' + allOf: + - description: "Not 'NetworkAccessRequirement'" + - $ref: '#/$defs/NetworkAccessRequirement' ResourceRequirement: $ref: '#/$defs/ResourceRequirement' ScatterFeatureRequirement: $ref: '#/$defs/ScatterFeatureRequirement' ToolTimeLimit: - description: Not 'ToolTimeLimitRequirement'. - $ref: '#/$defs/ToolTimeLimitRequirement' + allOf: + - description: "Not 'ToolTimeLimitRequirement'" + - $ref: '#/$defs/ToolTimeLimitRequirement' WorkReuse: - description: Not 'WorkReuseRequirement'. - $ref: '#/$defs/WorkReuseRequirement' + allOf: + - description: "Not 'WorkReuseRequirement'" + - $ref: '#/$defs/WorkReuseRequirement' MultipleInputFeatureRequirement: $ref: '#/$defs/MultipleInputFeatureRequirement' StepInputExpressionRequirement: @@ -157,7 +161,7 @@ $defs: items: oneOf: - nullable: true - type: string + #type: string enum: [null] - $ref: '#/$defs/CWLExpression' - $ref: '#/$defs/DirectoryListingDirent' @@ -872,22 +876,20 @@ $defs: (see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression). WorkReuseRequirement: type: object - title: WorkReuseRequirement + title: 'WorkReuseRequirement' description: | For implementations that support reusing output from past work (on the assumption that same code and same input produce same results), control whether to enable or disable the reuse behavior for a particular tool or step (to accommodate situations where that assumption is incorrect). - A reused step is not executed but instead returns the same output as the original execution. - If 'WorkReuse' is not specified, correct tools should assume it is enabled by default. properties: class: type: string description: Not 'WorkReuseRequirement'. enum: - - WorkReuse + - 'WorkReuse' enableReuse: $ref: '#/$defs/EnableReuseValue' required: @@ -904,7 +906,7 @@ $defs: example: UnknownRequirement not: enum: - - cwltool:CUDARequirement + - 'cwltool:CUDARequirement' - DockerRequirement - SoftwareRequirement - ShellCommandRequirement @@ -922,7 +924,7 @@ $defs: - MultipleInputFeatureRequirement - StepInputExpressionRequirement - SubworkflowFeatureRequirement - additionalProperties: {} + #additionalProperties: {} CWLRequirementsList: type: array title: CWLRequirementsList @@ -942,7 +944,7 @@ $defs: For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well. Otherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition. oneOf: - - $ref: '#/$defs/cwltool:CUDARequirement' + - $ref: '#/$defs/cwltool_CUDARequirement' - $ref: '#/$defs/DockerRequirement' - $ref: '#/$defs/SoftwareRequirement' - $ref: '#/$defs/ShellCommandRequirement' @@ -985,9 +987,9 @@ $defs: - dotproduct - nested_crossproduct - flat_crossproduct - required: - - timelimit - - class + #required: + #- timelimit + #- class CWLHints: oneOf: - $ref: '#/$defs/CWLHintsMap' @@ -1056,14 +1058,14 @@ $defs: description: The compute capability supported by the GPU hardware. pattern: '^\d+\.\d+$' minItems: 1 - cwltool:CUDARequirement: + cwltool_CUDARequirement: type: object - title: cwltool:CUDARequirement + title: 'cwltool:CUDARequirement' properties: class: type: string enum: - - cwltool:CUDARequirement + - 'cwltool:CUDARequirement' cudaVersionMin: type: string title: CUDA version minimum @@ -1350,7 +1352,7 @@ $defs: required: - type - items - additionalProperties: {} + #additionalProperties: {} CWLTypeSymbols: type: array title: CWLTypeSymbols (Allowed values composing the enum). @@ -1376,7 +1378,7 @@ $defs: required: - type - symbols - additionalProperties: {} + #additionalProperties: {} CWLTypeRecordRef: description: | An IRI with minimally a '{Record}' identifier to look for a schema definition locally or remotely. @@ -1428,7 +1430,7 @@ $defs: type : string enum: ['null'] default: - type: string + #type: string nullable: true enum: [null] required: [type] @@ -1477,7 +1479,7 @@ $defs: - $ref: '#/$defs/CWLDefaultLocation' - nullable: true enum: [null] - type: string + #type: string required: [type] # 6. Arrays (Shorthand: string[], int[], etc.) @@ -1593,7 +1595,7 @@ $defs: enum: - File - Directory - additionalProperties: {} + #additionalProperties: {} InputBinding: type: object title: Input Binding @@ -1645,7 +1647,7 @@ $defs: $ref: '#/$defs/CWLType' inputBinding: $ref: '#/$defs/InputBinding' - additionalProperties: { } + ##additionalProperties: {} required: - type additionalProperties: { } @@ -1659,8 +1661,8 @@ $defs: type: object title: CWLInputMap description: Package inputs defined as mapping. - properties: {} - required: [] + #properties: {} + #required: [] additionalProperties: oneOf: - $ref: '#/$defs/CWLType' @@ -1696,7 +1698,7 @@ $defs: - type: array items: $ref: '#/$defs/CWLExpression' - additionalProperties: {} + #additionalProperties: {} CWLOutputItem: type: object title: CWLOutputItem @@ -1718,7 +1720,7 @@ $defs: required: - type - id - additionalProperties: {} + #additionalProperties: {} CWLOutputObjectBase: type: object title: CWLOutputObject (CWL type definition with parameters). @@ -1729,7 +1731,7 @@ $defs: $ref: '#/$defs/OutputBinding' required: - type - additionalProperties: {} + #additionalProperties: {} CWLOutputObject: allOf: - $ref: '#/$defs/CWLDocumentation' @@ -1738,8 +1740,8 @@ $defs: type: object title: CWLOutputMap description: Package outputs defined as mapping. - properties: {} - required: [] + #properties: {} + #required: [] additionalProperties: oneOf: - $ref: '#/$defs/CWLType' @@ -2082,7 +2084,7 @@ $defs: - id - inputs - outputs - additionalProperties: {} + #additionalProperties: {} CWLGraphBase: type: object properties: @@ -2090,7 +2092,7 @@ $defs: $ref: '#/$defs/CWLGraphList' required: - $graph - additionalProperties: {} + #additionalProperties: {} CWLGraph: title: CWLGraph allOf: diff --git a/openapi/schemas/records-core/contact.yaml b/openapi/schemas/records-core/contact.yaml new file mode 100644 index 00000000..575ac6f0 --- /dev/null +++ b/openapi/schemas/records-core/contact.yaml @@ -0,0 +1,141 @@ +--- +type: object +title: Contact information +description: |- + Identification of, and means of communication with, person responsible + for the resource. +anyOf: + - required: + - name + - required: + - organization +properties: + identifier: + type: string + title: Identifier of the contact + description: A value uniquely identifying a contact. + name: + type: string + title: name of the contact person + description: The name of the responsible person. + position: + type: string + title: position in the organization + description: |- + The name of the role or position of the responsible person taken + from the organization's formal organizational hierarchy or chart. + organization: + type: string + title: Name of the organization + description: Organization/affiliation of the contact. + logo: + title: Logo of the contact + description: |- + Link to a graphic identifying a contact. The link relation should be `icon` + and the media type should be an image media type. + allOf: + - $ref: '../common-core/link.yaml' + - type: object + required: + - rel + - type + properties: + rel: + enum: + - icon + phones: + type: array + title: Telephone numbers + description: Telephone numbers at which contact can be made. + items: + type: object + required: + - value + properties: + value: + type: string + title: Phone number. + description: The value is the phone number itself. + pattern: "^\\+[1-9]{1}[0-9]{3,14}$" + example: "+14165550142" + roles: + title: Type of phone number. + description: The type of phone number (e.g. home, work, fax, etc.). + $ref: 'roles.yaml' + emails: + type: array + title: Email addresses + description: Email addresses at which contact can be made. + items: + type: object + required: + - value + properties: + value: + type: string + title: Email address + description: The value is the email itself. + format: email + roles: + title: Type of email + description: The type of email (e.g. home, work, etc.). + $ref: 'roles.yaml' + addresses: + type: array + title: Postal addresses + description: Physical locations at which contact can be made. + items: + type: object + properties: + deliveryPoint: + type: array + title: Details of the address + description: Address lines for the location (e.g. street name and door number). + items: + type: string + city: + type: string + title: City + description: City for the location. + administrativeArea: + type: string + title: State of province + description: State or province of the location. + postalCode: + type: string + title: Postal code + description: ZIP or other postal code. + country: + type: string + title: Country + description: Country of the physical address. ISO 3166-1 is recommended. + roles: + title: Type of postal address + description: The type of postal address (e.g. office, home, etc.). + $ref: 'roles.yaml' + links: + type: array + title: Links about the contact + description: On-line information about the contact. + items: + allOf: + - $ref: '../common-core/link.yaml' + - type: object + required: + - type + hoursOfService: + type: string + title: Hours of service + description: Time period when the contact can be contacted. + example: "Hours: Mo-Fr 10am-7pm Sa 10am-22pm Su 10am-21pm" + contactInstructions: + type: string + title: Contact instructions + description: Supplemental instructions on how or when to contact can be made. + roles: + title: Types of contact person + description: + The set of named duties, job functions and/or permissions + associated with this contact. + (e.g. developer, administrator, etc.). + $ref: 'roles.yaml' diff --git a/openapi/schemas/records-core/format.yaml b/openapi/schemas/records-core/format.yaml new file mode 100644 index 00000000..560d81d7 --- /dev/null +++ b/openapi/schemas/records-core/format.yaml @@ -0,0 +1,16 @@ +--- +type: object +anyOf: +- required: + - name +- required: + - mediaType +properties: + name: + title: Name of the format + description: Name of the format. + type: string + mediaType: + title: Media type of the format + description: Media type of the format. + type: string diff --git a/openapi/schemas/records-core/language.yaml b/openapi/schemas/records-core/language.yaml new file mode 100644 index 00000000..c14cf08d --- /dev/null +++ b/openapi/schemas/records-core/language.yaml @@ -0,0 +1,42 @@ +--- +type: object +title: Resource language +description: The language used for textual values in this resource. +required: + - code +properties: + code: + type: string + title: Code + description: The language tag as per RFC-5646. + example: el + name: + type: string + minLength: 1 + title: Original name + description: The untranslated name of the language. + example: Ελληνικά + alternate: + type: string + title: Translated name + description: + The name of the language in another well-understood language, + usually English. + example: Greek + dir: + type: string + title: Direction of the text + description: + The direction for text in this language. The default, `ltr` + (left-to-right), represents the most common situation. + However, care should be taken to set the value of `dir` + appropriately if the language direction is not `ltr`. + Other values supported are `rtl` (right-to-left), `ttb` + (top-to-bottom), and `btt` (bottom-to-top). + enum: + - ltr + - rtl + - ttb + - btt + default: + ltr diff --git a/openapi/schemas/records-core/roles.yaml b/openapi/schemas/records-core/roles.yaml new file mode 100644 index 00000000..4681d88d --- /dev/null +++ b/openapi/schemas/records-core/roles.yaml @@ -0,0 +1,9 @@ +--- +title: Types or roles +description: + The list of duties, job functions or permissions assigned by the system + and associated with the context of this member. +type: array +minItems: 1 +items: + type: string diff --git a/openapi/schemas/records-core/theme.yaml b/openapi/schemas/records-core/theme.yaml new file mode 100644 index 00000000..c8645bc0 --- /dev/null +++ b/openapi/schemas/records-core/theme.yaml @@ -0,0 +1,49 @@ +--- +type: object +required: + - concepts + - scheme +properties: + concepts: + type: array + title: List of concepts in the vocabulary + description: + One or more entity/concept identifiers from this knowledge + system. it is recommended that a resolvable URI be used for + each entity/concept identifier. + minItems: 1 + items: + type: object + required: + - id + properties: + id: + type: string + title: Identifier for the concept + description: Identifier for the concept in the knowledge system. + minLength: 1 + title: + type: string + title: Title of the concept + description: A human readable title for the concept. + description: + type: string + title: Description of the concept + description: A human readable description for the concept. + url: + type: string + format: uri + title: URI of the concept + description: A URI providing further description of the concept. It is called "definition" in STA. + scheme: + type: string + title: Identifier of the vocabulary + description: + An identifier for the knowledge organization system used + to classify the resource. It is recommended that the + identifier be a resolvable URI. The list of schemes used + in a searchable catalog can be determined by inspecting + the server's OpenAPI document or, if the server implements + CQL2, by exposing a queryable (e.g. named `scheme`) and + enumerating the list of schemes in the queryable's schema + definition. From 7698eb25c5fe44a73e0571cc11fc210b7ce3d320 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 20 Mar 2026 13:42:57 -0400 Subject: [PATCH 2/2] use redocly + github-action --- .github/workflows/openapi.yml | 32 + openapi.yaml | 204 - openapi/ogcapi-processes.bundled.json | 9034 +++++++++++++------------ openapi/update.sh | 2 +- 4 files changed, 4807 insertions(+), 4465 deletions(-) create mode 100644 .github/workflows/openapi.yml delete mode 100644 openapi.yaml diff --git a/.github/workflows/openapi.yml b/.github/workflows/openapi.yml new file mode 100644 index 00000000..2f8c0604 --- /dev/null +++ b/.github/workflows/openapi.yml @@ -0,0 +1,32 @@ +name: API linting + +on: [pull_request] + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + ref: ${{ github.head_ref }} + + - name: Set up node + uses: actions/setup-node@v6 + - name: Install Redocly CLI + run: npm install -g @redocly/cli@latest + - name: Bundle OpenAPI + run: | + cd openapi + ./update.sh + - name: Run linting + run: redocly lint openapi/ogcapi-processes.bundle.json --format=github-actions + + - name: Commit updated OpenAPI bundle + uses: stefanzweifel/git-auto-commit-action@v7 + with: + commit_message: Auto-update OpenAPI bundle + file_pattern: 'openapi/ogcapi-processes.bundle.json' + diff --git a/openapi.yaml b/openapi.yaml deleted file mode 100644 index 4d7808c7..00000000 --- a/openapi.yaml +++ /dev/null @@ -1,204 +0,0 @@ -openapi: 3.0.3 -info: - title: The OGC API - Processes - version: 1.0 - description: |- - WARNING - THIS IS WORK IN PROGRESS - contact: - name: Benjamin Pross - email: b.pross@52north.org - license: - name: OGC license - url: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/LICENSE" -paths: - /: - get: - summary: landing page of this API - description: >- - The landing page provides links to the: - * The APIDefinition (no fixed path), - * The Conformance statements (path /conformance), - * The processes metadata (path /processes), - * The endpoint for job monitoring (path /jobs). - - For more information, see [Section 7.2](http://docs.ogc.org/DRAFTS/18-062.html#sc_landing_page). - operationId: getLandingPage - tags: - - Capabilities - responses: - 200: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/LandingPage.yaml" - 500: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ServerError.yaml" - /conformance: - get: - summary: information about standards that this API conforms to - description: | - A list of all conformance classes, specified in a standard, that the server conforms to. - - | Conformance class | URI | - |-----------|-------| - |Core|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core| - |OGC Process Description|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/ogc-process-description| - |JSON|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/json| - |HTML|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/html| - |OpenAPI Specification 3.0|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/oas30| - |Job list|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/job-list| - |Callback|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/callback| - |Dismiss|http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/dismiss| - - For more information, see [Section 7.4](http://docs.ogc.org/DRAFTS/18-062.html#sc_conformance_classes). - operationId: getConformanceClasses - tags: - - ConformanceDeclaration - responses: - 200: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ConformanceDeclaration.yaml" - 500: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ServerError.yaml" - /processes: - get: - summary: retrieve the list of available processes - description: | - The list of processes contains a summary of each process the OGC API - Processes offers, including the link to a more detailed description of the process. - - For more information, see [Section 7.7](http://docs.ogc.org/DRAFTS/18-062.html#sc_process_list). - operationId: getProcesses - tags: - - ProcessList - responses: - 200: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ProcessList.yaml" - /processes/{processID}: - get: - summary: retrieve a process description - description: | - The process description contains information about inputs and outputs and a link to the execution-endpoint for the process. The Core does not mandate the use of a specific process description to specify the interface of a process. That said, the Core requirements class makes the following recommendation: - - Implementations SHOULD consider supporting the OGC process description. - - For more information, see [Section 7.8](http://docs.ogc.org/DRAFTS/18-062.html#sc_process_description). - operationId: getProcessDescription - tags: - - ProcessDescription - parameters: - - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/parameters/processIDPathParam.yaml" - responses: - 200: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ProcessDescription.yaml" - 404: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/NotFound.yaml" - /jobs: - get: - summary: retrieve the list of jobs. - description: | - Lists available jobs. - - For more information, see [Section 12](http://docs.ogc.org/DRAFTS/18-062.html#Job_list). - operationId: getJobs - tags: - - JobList - responses: - 200: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/JobList.yaml" - 404: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/NotFound.yaml" - /processes/{processID}/execution: - post: - summary: execute a process. - description: | - Create a new job. - - For more information, see [Section 7.9](http://docs.ogc.org/DRAFTS/18-062.html#sc_create_job). - operationId: execute - tags: - - Execute - parameters: - - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/parameters/processIDPathParam.yaml" - requestBody: - description: Mandatory execute request JSON - required: true - content: - application/json: - schema: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/schemas/execute.yaml" - responses: - 200: - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ExecuteSync.yaml' - 201: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ExecuteAsync.yaml" - 404: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/NotFound.yaml" - 500: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ServerError.yaml" - callbacks: - jobCompleted: - "{$request.body#/subscriber/successUri}": - post: - requestBody: - content: - application/json: - schema: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/schemas/results.yaml" - responses: - 200: - description: Results received successfully - /jobs/{jobID}: - get: - summary: retrieve the status of a job - description: | - Shows the status of a job. - - For more information, see [Section 7.10](http://docs.ogc.org/DRAFTS/18-062.html#sc_retrieve_status_info). - operationId: getStatus - tags: - - Status - parameters: - - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/parameters/jobID.yaml" - responses: - 200: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/Status.yaml" - 404: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/NotFound.yaml" - 500: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ServerError.yaml" - delete: - summary: cancel a job execution, remove a finished job - description: | - Cancel a job execution and remove it from the jobs list. - - For more information, see [Section 14](http://docs.ogc.org/DRAFTS/18-062.html#Dismiss). - operationId: dismiss - tags: - - Dismiss - parameters: - - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/parameters/jobID.yaml" - responses: - 200: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/Status.yaml" - 404: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/NotFound.yaml" - 500: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ServerError.yaml" - /jobs/{jobID}/results: - get: - summary: retrieve the result(s) of a job - description: | - Lists available results of a job. In case of a failure, lists exceptions instead. - - For more information, see [Section 7.11](http://docs.ogc.org/DRAFTS/18-062.html#sc_retrieve_job_results). - operationId: getResult - tags: - - Result - parameters: - - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/parameters/jobID.yaml" - responses: - 200: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/Results.yaml" - 404: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/NotFound.yaml" - 500: - $ref: "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/master/core/openapi/responses/ServerError.yaml" -servers: - - description: 52°North demo server - url: http://geoprocessing.demo.52north.org:8080/javaps/rest/ diff --git a/openapi/ogcapi-processes.bundled.json b/openapi/ogcapi-processes.bundled.json index 114ad847..b722d153 100644 --- a/openapi/ogcapi-processes.bundled.json +++ b/openapi/ogcapi-processes.bundled.json @@ -34,13 +34,13 @@ ], "responses": { "200": { - "$ref": "#/components/responses/LandingPage" + "$ref": "#/components/responses/rLandingPage" }, "406": { - "$ref": "#/components/responses/NotAcceptable" + "$ref": "#/components/responses/rNotAcceptable" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } } } @@ -59,13 +59,13 @@ ], "responses": { "200": { - "$ref": "#/components/responses/Conformance" + "$ref": "#/components/responses/rConformance" }, "406": { - "$ref": "#/components/responses/NotAcceptable" + "$ref": "#/components/responses/rNotAcceptable" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } } } @@ -84,13 +84,13 @@ ], "responses": { "200": { - "$ref": "#/components/responses/API" + "$ref": "#/components/responses/rAPI" }, "406": { - "$ref": "#/components/responses/NotAcceptable" + "$ref": "#/components/responses/rNotAcceptable" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } } } @@ -109,16 +109,16 @@ ], "responses": { "200": { - "$ref": "#/components/responses/Enumeration" + "$ref": "#/components/responses/rEnumeration" }, "404": { - "$ref": "#/components/responses/NotFound" + "$ref": "#/components/responses/rNotFound" }, "406": { - "$ref": "#/components/responses/NotAcceptable" + "$ref": "#/components/responses/rNotAcceptable" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } } } @@ -133,7 +133,7 @@ ], "responses": { "200": { - "$ref": "#/components/responses/ProcessList" + "$ref": "#/components/responses/rProcessList" } } }, @@ -146,7 +146,7 @@ ], "parameters": [ { - "$ref": "#/components/parameters/w" + "$ref": "#/components/parameters/w-param" } ], "requestBody": { @@ -177,31 +177,19 @@ }, "responses": { "201": { - "$ref": "#/components/responses/ProcessDescription" + "$ref": "#/components/responses/rProcessDescription" }, "400": { - "description": "The requested workflow does not exist on the server.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/exception" - } - }, - "text/html": { - "schema": { - "type": "string" - } - } - } + "$ref": "#/components/responses/rWorkflowNotFound" }, "403": { - "$ref": "#/components/responses/ImmutableProcess" + "$ref": "#/components/responses/rImmutableProcess" }, "409": { - "$ref": "#/components/responses/DuplicateProcess" + "$ref": "#/components/responses/rDuplicateProcess" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } } } @@ -221,10 +209,10 @@ ], "responses": { "200": { - "$ref": "#/components/responses/ProcessDescription" + "$ref": "#/components/responses/rProcessDescription" }, "404": { - "$ref": "#/components/responses/NotFound" + "$ref": "#/components/responses/rNotFound" } } }, @@ -268,22 +256,22 @@ }, "responses": { "204": { - "$ref": "#/components/responses/EmptyResponse" + "$ref": "#/components/responses/rEmpty" }, "400": { - "$ref": "#/paths/~1processes/post/responses/400" + "$ref": "#/components/responses/rWorkflowNotFound" }, "403": { - "$ref": "#/components/responses/ImmutableProcess" + "$ref": "#/components/responses/rImmutableProcess" }, "404": { - "$ref": "#/components/responses/NotFound" + "$ref": "#/components/responses/rNotFound" }, "409": { - "$ref": "#/components/responses/DuplicateProcess" + "$ref": "#/components/responses/rDuplicateProcess" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } } }, @@ -301,16 +289,16 @@ ], "responses": { "204": { - "$ref": "#/components/responses/EmptyResponse" + "$ref": "#/components/responses/rEmpty" }, "403": { - "$ref": "#/components/responses/ImmutableProcess" + "$ref": "#/components/responses/rImmutableProcess" }, "404": { - "$ref": "#/components/responses/NotFound" + "$ref": "#/components/responses/rNotFound" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } } } @@ -355,7 +343,7 @@ } }, "404": { - "$ref": "#/components/responses/NotFound" + "$ref": "#/components/responses/rNotFound" } } } @@ -373,25 +361,10 @@ "$ref": "#/components/parameters/processID-path" }, { - "name": "response", - "in": "query", - "description": "For executing the process using the _Collection Output_ mechanism, where the\nclient is redirected (_303_ status) to either an OGC API landing page or\ncollection resource, from which one or more OGC API data access mechanism\nis available. Data access requests may trigger processing on-demand for\na given area, time and resolution of interest.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "collection", - "landingPage" - ] - } + "$ref": "#/components/parameters/response" }, { - "in": "header", - "description": "Indicates client preferences, including whether the client is capable of asynchronous processing.\nA `respond-async` preference indicates a preference for asynchronous processing.\nA `wait: s` preference indicates that the client prefers to wait up to x seconds to receive a reponse synchronously before the server falls back to asynchronous processing.", - "name": "Prefer", - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/prefer-header-execution" } ], "requestBody": { @@ -400,37 +373,29 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/execute-workflow" + "$ref": "#/components/schemas/execute-workflows" } } } }, "responses": { "200": { - "$ref": "#/components/responses/ExecuteSync" + "$ref": "#/components/responses/rExecuteSync" }, "201": { - "$ref": "#/components/responses/ExecuteAsync" + "$ref": "#/components/responses/rExecuteAsync" }, "204": { - "$ref": "#/components/responses/EmptyResponse" + "$ref": "#/components/responses/rEmpty" }, "303": { - "description": "For _Collection Output_ execution, redirection to an OGC API landing page or collection.", - "headers": { - "Location": { - "schema": { - "type": "string" - }, - "description": "Location for redirection to an [OGC API landing page](https://schemas.opengis.net/ogcapi/tiles/part1/1.0/openapi/schemas/common-core/landingPage.yaml) (for `response=landingPage`) as described in\n[OGC API - Common - Part 1: Core](http://docs.ogc.org/DRAFTS/19-072.html#_landing_page_requirements_class) or\nan [OGC API collection description](https://schemas.opengis.net/ogcapi/tiles/part1/1.0/openapi/schemas/common-geodata/collectionInfo.yaml) (for `response=landingPage`) as described in\n[OGC API - Common - Part 2: Geospatial data](http://docs.ogc.org/DRAFTS/20-024.html#collection-description).\nThe collection redirected to or the collections linked from the landing page redirected to\nmust contain links to at least one data access mechanism (such as [_OGC API - Tiles_](https://opengeospatial.github.io/ogcna-auto-review/20-057.html),\n[_DGGS_](https://opengeospatial.github.io/ogcna-auto-review/21-038.html),\n[_Coverages_](http://docs.ogc.org/DRAFTS/19-087.html),\n[_Features_](https://docs.opengeospatial.org/is/17-069r4/17-069r4.html),\n[_EDR_](https://docs.ogc.org/is/19-086r5/19-086r5.html), or\n[_Maps_](http://docs.ogc.org/DRAFTS/20-058.html)...) to retrieve output results, which may\ntrigger on-demand processing." - } - } + "$ref": "#/components/responses/rExecuteCollectionRedirect" }, "404": { - "$ref": "#/components/responses/NotFound" + "$ref": "#/components/responses/rNotFound" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } }, "callbacks": { @@ -490,10 +455,10 @@ ], "responses": { "200": { - "$ref": "#/components/responses/JobList" + "$ref": "#/components/responses/rJobList" }, "404": { - "$ref": "#/components/responses/NotFound" + "$ref": "#/components/responses/rNotFound" } } } @@ -513,13 +478,13 @@ ], "responses": { "200": { - "$ref": "#/components/responses/Status" + "$ref": "#/components/responses/rStatus" }, "404": { - "$ref": "#/components/responses/NotFound" + "$ref": "#/components/responses/rNotFound" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } } }, @@ -537,13 +502,13 @@ ], "responses": { "200": { - "$ref": "#/components/responses/Status" + "$ref": "#/components/responses/rStatus" }, "404": { - "$ref": "#/components/responses/NotFound" + "$ref": "#/components/responses/rNotFound" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } } } @@ -561,23 +526,18 @@ "$ref": "#/components/parameters/jobID" }, { - "in": "header", - "description": "Indicates client preferences, such as whether the client wishes a self-contained or minimal response.\nA `return=minimal` preference indicates that the client would prefer that links be returned to larger object to minimize the response payload.\nA `return=representation` indicates that the client would prefer if the server can return a self-contained response.", - "name": "Prefer", - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/prefer-header-results" } ], "responses": { "200": { - "$ref": "#/components/responses/Results" + "$ref": "#/components/responses/rResults" }, "404": { - "$ref": "#/components/responses/NotFound" + "$ref": "#/components/responses/rNotFound" }, "500": { - "$ref": "#/components/responses/ServerError" + "$ref": "#/components/responses/rServerError" } } } @@ -713,573 +673,7 @@ "collectionDesc": { "allOf": [ { - "type": "object", - "required": [ - "id", - "links" - ], - "properties": { - "id": { - "type": "string", - "title": "Identifier of the resource", - "description": "Identifier of the collection, for example, used in URI path parameters.", - "minLength": 1, - "example": "dem" - }, - "title": { - "type": "string", - "title": "Title of the collection", - "description": "A short, human-readable summary of the collection.", - "example": "Digital Elevation Model" - }, - "description": { - "type": "string", - "title": "Description of the collection", - "description": "A human-readable explanation about data in the collection.", - "example": "A Digital Elevation Model." - }, - "attribution": { - "type": "string", - "title": "Attribution for the collection", - "description": "Attribution for the collection, providing a way to identify the source of the geographic information, which can contain markup text whose format may be indicated in the `attributionMediaType` property. That format can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`).\nIf the 'attributionMediaType' indicates something other than `text/plain`, the `attribution` element string should be interpreted by a markup parser selected based on that media type to be presented to the user\n(e.g., `text/markdown` will be parsed by a library supporting CommonMark). By allowing markup, the attribution string can import images (e.g., organization logos) and format the text (e.g., the name of the organization in italics)." - }, - "attributionMediaType": { - "title": "Media type of the attribution", - "description": "Media type for the markup language of the attribution: It can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`).", - "enum": [ - "text/plain", - "text/html", - "text/markdown" - ] - }, - "accessConstraints": { - "title": "Access Constraints of the collection", - "description": "Restrictions on the availability of the collection that the user needs to be aware of before using or redistributing the data:\n\n* unclassified: Available for general disclosure\n* restricted: Not for general disclosure\n* confidential: Available for someone who can be entrusted with information\n* secret: Kept or meant to be kept private, unknown, or hidden from all but a select group of people\n* topSecret: Of the highest secrecy", - "enum": [ - "unclassified", - "restricted", - "confidential", - "secret", - "topSecret" - ] - }, - "publisher": { - "type": "string", - "title": "Responsible party publishing the collection", - "description": "Organization or individual responsible for making the data available" - }, - "contacts": { - "type": "array", - "title": "A list of contacts", - "description": "A list of contacts qualified by their role(s) in association to the collection.", - "minItems": 1, - "items": { - "type": "object", - "title": "Contact information", - "description": "Identification of, and means of communication with, person responsible\nfor the resource.", - "anyOf": [ - { - "required": [ - "name" - ] - }, - { - "required": [ - "organization" - ] - } - ], - "properties": { - "identifier": { - "type": "string", - "title": "Identifier of the contact", - "description": "A value uniquely identifying a contact." - }, - "name": { - "type": "string", - "title": "name of the contact person", - "description": "The name of the responsible person." - }, - "position": { - "type": "string", - "title": "position in the organization", - "description": "The name of the role or position of the responsible person taken\nfrom the organization's formal organizational hierarchy or chart." - }, - "organization": { - "type": "string", - "title": "Name of the organization", - "description": "Organization/affiliation of the contact." - }, - "logo": { - "title": "Logo of the contact", - "description": "Link to a graphic identifying a contact. The link relation should be `icon`\nand the media type should be an image media type.", - "allOf": [ - { - "$ref": "#/components/schemas/link" - }, - { - "type": "object", - "required": [ - "rel", - "type" - ], - "properties": { - "rel": { - "enum": [ - "icon" - ] - } - } - } - ] - }, - "phones": { - "type": "array", - "title": "Telephone numbers", - "description": "Telephone numbers at which contact can be made.", - "items": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string", - "title": "Phone number.", - "description": "The value is the phone number itself.", - "pattern": "^\\+[1-9]{1}[0-9]{3,14}$", - "example": "+14165550142" - }, - "roles": { - "title": "Type of phone number.", - "description": "The type of phone number (e.g. home, work, fax, etc.).", - "$ref": "#/components/schemas/collectionDesc/allOf/0/properties/contacts/items/properties/roles" - } - } - } - }, - "emails": { - "type": "array", - "title": "Email addresses", - "description": "Email addresses at which contact can be made.", - "items": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string", - "title": "Email address", - "description": "The value is the email itself.", - "format": "email" - }, - "roles": { - "title": "Type of email", - "description": "The type of email (e.g. home, work, etc.).", - "$ref": "#/components/schemas/collectionDesc/allOf/0/properties/contacts/items/properties/roles" - } - } - } - }, - "addresses": { - "type": "array", - "title": "Postal addresses", - "description": "Physical locations at which contact can be made.", - "items": { - "type": "object", - "properties": { - "deliveryPoint": { - "type": "array", - "title": "Details of the address", - "description": "Address lines for the location (e.g. street name and door number).", - "items": { - "type": "string" - } - }, - "city": { - "type": "string", - "title": "City", - "description": "City for the location." - }, - "administrativeArea": { - "type": "string", - "title": "State of province", - "description": "State or province of the location." - }, - "postalCode": { - "type": "string", - "title": "Postal code", - "description": "ZIP or other postal code." - }, - "country": { - "type": "string", - "title": "Country", - "description": "Country of the physical address. ISO 3166-1 is recommended." - }, - "roles": { - "title": "Type of postal address", - "description": "The type of postal address (e.g. office, home, etc.).", - "$ref": "#/components/schemas/collectionDesc/allOf/0/properties/contacts/items/properties/roles" - } - } - } - }, - "links": { - "type": "array", - "title": "Links about the contact", - "description": "On-line information about the contact.", - "items": { - "allOf": [ - { - "$ref": "#/components/schemas/link" - }, - { - "type": "object", - "required": [ - "type" - ] - } - ] - } - }, - "hoursOfService": { - "type": "string", - "title": "Hours of service", - "description": "Time period when the contact can be contacted.", - "example": "Hours: Mo-Fr 10am-7pm Sa 10am-22pm Su 10am-21pm" - }, - "contactInstructions": { - "type": "string", - "title": "Contact instructions", - "description": "Supplemental instructions on how or when to contact can be made." - }, - "roles": { - "title": "Types of contact person", - "description": "The set of named duties, job functions and/or permissions associated with this contact. (e.g. developer, administrator, etc.).", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - } - }, - "license": { - "type": "string", - "title": "License associated to the collection", - "description": "The legal provisions under which the data of this collection is made available." - }, - "rights": { - "type": "string", - "title": "Rights over the collection", - "description": "A statement that concerns all rights not addressed by the license such as a copyright statement." - }, - "formats": { - "title": "Formats for distributing the collection", - "description": "A list of formats in which the data of this collection is distributed", - "type": "array", - "items": { - "type": "object", - "anyOf": [ - { - "required": [ - "name" - ] - }, - { - "required": [ - "mediaType" - ] - } - ], - "properties": { - "name": { - "title": "Name of the format", - "description": "Name of the format.", - "type": "string" - }, - "mediaType": { - "title": "Media type of the format", - "description": "Media type of the format.", - "type": "string" - } - } - } - }, - "keywords": { - "type": "array", - "title": "Keywords representing aspects of the collection", - "description": "The topic or topics of the resource. Typically represented using free-form keywords, tags, key phrases, or classification codes.", - "items": { - "type": "string" - } - }, - "themes": { - "type": "array", - "title": "Themes represented by the resource", - "description": "A knowledge organization system used to classify the resource.", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "concepts", - "scheme" - ], - "properties": { - "concepts": { - "type": "array", - "title": "List of concepts in the vocabulary", - "description": "One or more entity/concept identifiers from this knowledge system. it is recommended that a resolvable URI be used for each entity/concept identifier.", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "id" - ], - "properties": { - "id": { - "type": "string", - "title": "Identifier for the concept", - "description": "Identifier for the concept in the knowledge system.", - "minLength": 1 - }, - "title": { - "type": "string", - "title": "Title of the concept", - "description": "A human readable title for the concept." - }, - "description": { - "type": "string", - "title": "Description of the concept", - "description": "A human readable description for the concept." - }, - "url": { - "type": "string", - "format": "uri", - "title": "URI of the concept", - "description": "A URI providing further description of the concept. It is called \"definition\" in STA." - } - } - } - }, - "scheme": { - "type": "string", - "title": "Identifier of the vocabulary", - "description": "An identifier for the knowledge organization system used to classify the resource. It is recommended that the identifier be a resolvable URI. The list of schemes used in a searchable catalog can be determined by inspecting the server's OpenAPI document or, if the server implements CQL2, by exposing a queryable (e.g. named `scheme`) and enumerating the list of schemes in the queryable's schema definition." - } - } - } - }, - "resourceLanguages": { - "type": "array", - "title": "The list of languages of the collection", - "description": "The list of languages in which the data of this collection is available.", - "items": { - "type": "object", - "title": "Resource language", - "description": "The language used for textual values in this resource.", - "required": [ - "code" - ], - "properties": { - "code": { - "type": "string", - "title": "Code", - "description": "The language tag as per RFC-5646.", - "example": "el" - }, - "name": { - "type": "string", - "minLength": 1, - "title": "Original name", - "description": "The untranslated name of the language.", - "example": "Ελληνικά" - }, - "alternate": { - "type": "string", - "title": "Translated name", - "description": "The name of the language in another well-understood language, usually English.", - "example": "Greek" - }, - "dir": { - "type": "string", - "title": "Direction of the text", - "description": "The direction for text in this language. The default, `ltr` (left-to-right), represents the most common situation. However, care should be taken to set the value of `dir` appropriately if the language direction is not `ltr`. Other values supported are `rtl` (right-to-left), `ttb` (top-to-bottom), and `btt` (bottom-to-top).", - "enum": [ - "ltr", - "rtl", - "ttb", - "btt" - ], - "default": "ltr" - } - } - } - }, - "links": { - "type": "array", - "title": "Links relevant to this collection", - "description": "Links to this or other resources related to this collection.", - "example": [ - { - "href": "http://data.example.org/collections/dem?f=json", - "rel": "self", - "type": "application/json", - "title": "Digital Elevation Model" - }, - { - "href": "http://data.example.org/collections/dem?f=html", - "rel": "alternate", - "type": "application/json", - "title": "Digital Elevation Model" - }, - { - "href": "http://data.example.org/collections/dem/coverage", - "rel": "coverage", - "type": "image/tiff; application=geotiff", - "title": "Digital Elevation Model" - }, - { - "href": "http://data.example.org/collections/dem/coverage/domainset", - "rel": "domainset", - "type": "application/json", - "title": "Digital Elevation Model" - }, - { - "href": "http://data.example.org/collections/dem/coverage/rangetype", - "rel": "rangetype", - "type": "application/json", - "title": "Digital Elevation Model" - }, - { - "href": "http://data.example.org/collections/dem/coverage/metadata", - "rel": "metadata", - "type": "application/json", - "title": "Digital Elevation Model" - } - ], - "items": { - "$ref": "#/components/schemas/link" - } - }, - "itemType": { - "title": "Type of the items in the collection", - "description": "Indicator about the type of the items in the collection if the collection has an accessible `/collections/{collectionId}/items` endpoint (e.g., `feature` or `record`).", - "type": "string", - "default": "feature" - }, - "dataType": { - "title": "Nature of the data in the collection", - "description": "Nature of the data in the collection. For example, this could be set to `map`, `vector` or `coverage`. It is not an indication of the available data access mechanism, but a hint regarding the internal representation of the data.", - "$ref": "#/components/schemas/dataType" - }, - "parent": { - "title": "Identifier of a parent collection (if this collection is part of a hierarchy)", - "description": "If this collection is part of a hierarchy, this property allows to identify another collection within the same dataset as its parent (by setting `parent` to the `id` of that collection), enabling clients to construct a hierarchy.", - "type": "string" - }, - "geoDataClasses": { - "title": "Class of data in the collection", - "description": "One or more classes of geospatial data, identified by a URI, which implies compatibility with a particular schema (fields/properties, as defined in OGC API - Common - Part 3: Schemas) for one or more collections, each with particular semantic definitions and data types. This is useful for example to determine compatibility with styles or processes, or to identify a particular collection within a dataset based on semantics.", - "type": "array", - "items": { - "type": "string", - "format": "uri" - } - }, - "defaultFields": { - "title": "List of fields returned by default", - "description": "A sorted list of field names. For a Features data access mechanism, it is the list of returnable properties included by default and complementing the geometry of the features. For a Coverage data access mechanism, they are names of fields whose values are included by default. Note that an API may provide a mechanism (e.g., a query parameter called `properties` or `exclude-properties`) to override this default list in customized responses.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1 - }, - "crs": { - "title": "List of coordinate reference systems supported in the collection", - "description": "The list of coordinate reference systems supported by the API; if present, the list should include the default coordinate reference system (usually listed first). Each item should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", - "type": "array", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "default": [ - "http://www.opengis.net/def/crs/OGC/1.3/CRS84" - ], - "example": [ - "http://www.opengis.net/def/crs/OGC/1.3/CRS84", - "http://www.opengis.net/def/crs/EPSG/0/4326" - ] - }, - "storageCrs": { - "title": "Storage or native CRS of the data in the collection", - "description": "The native coordinate reference system (i.e., the most efficient CRS in which to request the data, possibly how the data is stored on the server); this is the default output coordinate reference system for Maps and Coverages. This should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ], - "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84", - "example": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" - }, - "epoch": { - "title": "Epoch of the data in the collection", - "description": "Epoch of the native (storage) Coordinate Reference System (CRS)", - "type": "number", - "example": 2021.33 - }, - "geometryDimension": { - "title": "Number of spatial dimensions of the primary geometry for the data", - "description": "Number of spatial dimensions of the primary geometry of individual elements of the data: 0 for points, 1 for curves, 2 for surfaces, 3 for solids and unspecified when mixed or unknown. Not to be confused with the dimensions of the domain which are defined by the extent element.", - "type": "integer", - "minimum": 0, - "maximum": 3 - }, - "minScaleDenominator": { - "title": "Minimum scale denominator for the collection", - "description": "Minimum scale denominator for usage of the collection.", - "type": "number" - }, - "maxScaleDenominator": { - "title": "Maximum scale denominator for the collection", - "description": "Maximum scale denominator for usage of the collection.", - "type": "number" - }, - "minCellSize": { - "title": "Minimum cell size for the collection", - "description": "Minimum cell size for usage of the collection.", - "type": "number" - }, - "maxCellSize": { - "title": "Maximum cell size for the collection", - "description": "Maximum cell size for usage of the collection.", - "type": "number" - }, - "created": { - "title": "Timestamp when the collection was first produced", - "description": "Timestamp indicating when the data in the collection was first produced.", - "type": "string", - "format": "date-time" - }, - "updated": { - "title": "Timestamp of the last change/revision to the collection", - "description": "Timestamp of the last change/revision to the data in the collection.", - "type": "string", - "format": "date-time" - } - } + "$ref": "#/components/schemas/collectionProperties" }, { "type": "object", @@ -1299,159 +693,23 @@ "type": "object", "properties": { "spatial": { - "title": "Spatial extent", - "description": "The spatial extent of the data in the collection.", - "type": "object", - "properties": { - "bbox": { - "title": "Bounding box in the 'crs' coordinates", - "description": "One or more bounding boxes that describe the spatial extent of the dataset.\n\nThe first bounding box describes the overall spatial\nextent of the data. All subsequent bounding boxes describe\nmore precise bounding boxes, e.g., to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", - "type": "array", - "minItems": 1, - "items": { - "description": "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)\n\nIf the value consists of four numbers, the coordinate reference system is\nWGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in `crs` property.\n\nIf the value consists of six numbers, the coordinate reference system is WGS 84\nlongitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h)\nunless a different coordinate reference system is specified in `crs` property.\n\nFor WGS 84 longitude/latitude the values are in most cases the sequence of\nminimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value\n(west-most box edge) is larger than the third value (east-most box edge).\n\nIf the vertical axis is included, the third and the sixth number are\nthe bottom and the top of the 3-dimensional bounding box.\n\nIf a feature has multiple spatial geometry properties, it is the decision of the\nserver whether only a single spatial geometry property is used to determine\nthe extent or all relevant geometries.", - "type": "array", - "oneOf": [ - { - "minItems": 4, - "maxItems": 4 - }, - { - "minItems": 6, - "maxItems": 6 - } - ], - "items": { - "type": "number" - }, - "example": [ - -180, - -90, - 180, - 90 - ] - } - }, - "storageCrsBbox": { - "title": "Bounding box in the storage CRS", - "description": "One or more bounding boxes that describe the spatial extent of the dataset in the storage (native) CRS (`storageCrs` property).\n\nThe first bounding box describes the overall spatial\nextent of the data. All subsequent bounding boxes describe\nmore precise bounding boxes, e.g., to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", - "type": "array", - "minItems": 1, - "items": { - "description": "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)", - "type": "array", - "oneOf": [ - { - "minItems": 4, - "maxItems": 4 - }, - { - "minItems": 6, - "maxItems": 6 - } - ], - "items": { - "type": "number" - }, - "example": [ - -180, - -90, - 180, - 90 - ] - } - }, - "crs": { - "title": "Coordinate reference system", - "description": "Coordinate reference system of the coordinates of the `bbox` property.\nThe default reference system is WGS 84 longitude/latitude.\nWGS 84 longitude/latitude/ellipsoidal height for coordinates with height.\nFor data not referenced to Earth, another CRS may be specified.\nThis should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", - "anyOf": [ - { - "type": "string" - }, - { - "type": "string", - "enum": [ - "http://www.opengis.net/def/crs/OGC/1.3/CRS84", - "http://www.opengis.net/def/crs/OGC/0/CRS84h" - ] - }, - { - "type": "object" - } - ], - "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" - }, - "grid": { - "title": "Grid description", - "description": "Provides information about the limited availability of data within the collection organized\nas a grid (regular or irregular) along each spatial dimension.", - "type": "array", - "minItems": 2, - "maxItems": 3, - "items": { - "$ref": "#/components/schemas/extent-UAD/allOf/0/additionalProperties/properties/grid" - } - } - } - }, - "temporal": { - "title": "Temporal extent", - "description": "The temporal extent of the data in the collection.", - "type": "object", - "properties": { - "interval": { - "title": "Temporal intervals", - "description": "One or more time intervals that describe the temporal extent of the dataset.\n\nThe first time interval describes the overall\ntemporal extent of the data. All subsequent time intervals describe\nmore precise time intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item in each array.", - "type": "array", - "minItems": 1, - "items": { - "description": "Begin and end times of the time interval. The timestamps are in the\ntemporal coordinate reference system specified in `trs`. By default\nthis is the Gregorian calendar, expressed using RFC 3339 section 5.6.\nNote that these times may be specified using time zone offsets to UTC time other than zero.\n\nThe value `null` for start or end time is supported and indicates a half-bounded time interval.", - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "type": "string", - "format": "date-time", - "nullable": true, - "example": "2011-11-11T12:22:11Z" - } - } - }, - "trs": { - "title": "Temporal Coordinate Reference System", - "description": "Coordinate reference system of the coordinates in the temporal extent\n(property `interval`). The default reference system is the Gregorian calendar.\nFor data for which the Gregorian calendar is not suitable, such as geological time scale, another temporal reference system may be used.\nThis should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", - "anyOf": [ - { - "type": "string" - }, - { - "type": "string", - "enum": [ - "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - ] - }, - { - "type": "object" - } - ], - "default": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - }, - "grid": { - "$ref": "#/components/schemas/extent-UAD/allOf/0/additionalProperties/properties/grid" - } - } - } - } - }, - { - "anyOf": [ - { + "$ref": "#/components/schemas/spatialExtent" + }, + "temporal": { + "$ref": "#/components/schemas/temporalExtent" + } + } + }, + { + "anyOf": [ + { "type": "object", "description": "General object extension point" }, { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/extent-UAD/allOf/0/additionalProperties" + "$ref": "#/components/schemas/additionalDimensionExtent" } } ] @@ -1466,291 +724,14 @@ "type": "object", "properties": { "spatial": { - "$ref": "#/components/schemas/extent/allOf/0/properties/spatial" + "$ref": "#/components/schemas/spatialExtent" }, "temporal": { - "$ref": "#/components/schemas/extent/allOf/0/properties/temporal" + "$ref": "#/components/schemas/temporalExtent" } }, "additionalProperties": { - "title": "Extent of any additional dimensions", - "description": "The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial.", - "type": "object", - "oneOf": [ - { - "required": [ - "interval", - "definition" - ] - }, - { - "required": [ - "interval", - "trs" - ] - }, - { - "required": [ - "interval", - "vrs" - ] - } - ], - "properties": { - "interval": { - "title": "Interval of the extent of this dimension", - "description": "One or more intervals that describe the extent for this dimension of the dataset.\nThe value `null` is supported and indicates an unbounded or half-bounded interval.\nThe first interval describes the overall extent of the data for this dimension.\nAll subsequent intervals describe more precise intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item (a pair of lower and upper bound values).", - "type": "array", - "minItems": 1, - "items": { - "description": "Lower and upper bound values of the interval. The values\nare in the coordinate reference system specified in `crs`, `trs` or `vrs`.", - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "oneOf": [ - { - "type": "string", - "nullable": true, - "example": "2011-11-11T12:22:11Z" - }, - { - "type": "number", - "example": 32.7 - } - ] - } - } - }, - "trs": { - "title": "Temporal Coordinate Reference System", - "description": "Temporal Coordinate Reference System (e.g. as defined by Features for 'temporal'). This should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "vrs": { - "title": "Vertical Coordinate Reference System", - "description": "Vertical Coordinate Reference System (e.g. as defined in EDR for 'vertical'). This should be a URI to a registered VRS if one is available, or a full description of the VRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "grid": { - "type": "object", - "title": "Grid.", - "description": "Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the dimension.", - "allOf": [ - { - "type": "object", - "required": [ - "cellsCount" - ], - "properties": { - "cellsCount": { - "title": "Cell count", - "description": "Number of samples available along the dimension for data organized as a regular or irregular grid.", - "type": "integer", - "example": 50 - } - } - }, - { - "oneOf": [ - { - "type": "object", - "title": "Regular grid", - "description": "Regular grid with samples spaced at equal intervals.", - "required": [ - "resolution", - "firstCoordinate" - ], - "properties": { - "resolution": { - "title": "Resolution", - "description": "Resolution of regularly gridded data along the dimension in the collection.", - "oneOf": [ - { - "type": "string", - "nullable": true, - "example": "PT1H" - }, - { - "type": "number", - "example": 0.0006866455078 - } - ] - }, - "availableResolutions": { - "title": "Available resolutions", - "description": "List of resolutions made available by the API. If not specified, there are no limit other than the limits indicated in `minCellSize` and `maxCellSize` of the collection description (though the API might still allow requesting data beyond these).", - "type": "array", - "items": { - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ] - }, - "example": [ - "P1H", - "P1D", - "P1M" - ] - }, - "firstCoordinate": { - "title": "First coordinate", - "description": "First coordinate where a regular grid begins, with subsequent coordinates adding `resolution` unit at each step.", - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ], - "example": -180 - }, - "relativeBounds": { - "title": "Relative bounds", - "description": "Distance in units from coordinate to the lower and upper bounds of each cell for regular grids, describing the geometry of the cells.", - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ] - }, - "example": [ - -0.5, - 0.5 - ] - } - } - }, - { - "type": "object", - "title": "Irregular grid.", - "description": "Irregular grid with samples spaced at different intervals.", - "required": [ - "coordinates" - ], - "properties": { - "coordinates": { - "title": "Coordinates of the irregular cells", - "description": "List of coordinates along the dimension for which data organized as an irregular grid in the collection is available.\n(e.g., 2, 10, 80, 100).", - "type": "array", - "minItems": 1, - "items": { - "oneOf": [ - { - "type": "string", - "nullable": true, - "example": "2020-11-12T12:15:00Z" - }, - { - "type": "number", - "example": 12.3 - } - ] - }, - "example": [ - 2, - 10, - 80, - 100 - ] - }, - "boundsCoordinates": { - "title": "Bounds coordinates", - "description": "For irregular grids, an ordered list of the coordinates in absolute units of the lower and upper bounds of the dimension for each cell.", - "type": "array", - "minItems": 1, - "items": { - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number" - } - ] - } - }, - "example": [ - [ - -180, - -179 - ], - [ - -179, - -178 - ] - ] - } - } - } - ] - } - ] - }, - "definition": { - "type": "string", - "format": "uri", - "title": "Observed property definition", - "description": "A URI for the definition of the measured or observed property corresponding to this dimension." - }, - "unit": { - "type": "string", - "title": "Units of measurement", - "description": "The unit of measure in which the interval and/or grid values are expressed." - }, - "unitLang": { - "type": "string", - "default": "UCUM", - "title": "Units of measurement vocabulary", - "description": "The language (or vocabulary) in which the unit is expressed (defaults to \"UCUM\" if not specified)." - }, - "variableType": { - "title": "Variable type", - "description": "The type of variable which may inform correct interpretation and interpolation methods.", - "type": "string", - "enum": [ - "continuous", - "numericalOrdinal", - "numericalNominal", - "categoricalOrdinal", - "categoricalNominal" - ] - } - } + "$ref": "#/components/schemas/additionalDimensionExtent" } } ] @@ -1876,27 +857,7 @@ "pattern": "^\\d+\\.\\d+$" }, "cudaComputeCapability": { - "oneOf": [ - { - "type": "string", - "title": "CUDA compute capability", - "description": "The compute capability supported by the GPU hardware.", - "pattern": "^\\d+\\.\\d+$" - }, - { - "type": "array", - "title": "CUDAComputeCapabilityArray", - "items": { - "type": "string", - "title": "CUDA compute capability", - "description": "The compute capability supported by the GPU hardware.", - "pattern": "^\\d+\\.\\d+$" - }, - "minItems": 1 - } - ], - "title": "CUDA compute capability", - "description": "The compute capability supported by the GPU hardware.\n\n* If this is a single value, it defines only the minimum compute capability.\n GPUs with higher capability are also accepted.\n* If it is an array value, then only select GPUs with compute capabilities that explicitly\n appear in the array.\n See https://docs.nvidia.com/deploy/cuda-compatibility/#faq and\n https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#cuda-compute-capability\n for details.\n" + "$ref": "#/components/schemas/CUDAComputeCapability" }, "cudaDeviceCountMin": { "type": "integer", @@ -1964,81 +925,7 @@ "$ref": "#/components/schemas/CWLDocumentation" }, { - "type": "object", - "properties": { - "$graph": { - "type": "array", - "title": "CWLGraphList", - "description": "Graph definition that defines *exactly one* CWL application package represented as list. Multiple definitions simultaneously deployed is NOT supported currently.", - "items": { - "allOf": [ - { - "$ref": "#/components/schemas/CWLMetadata" - }, - { - "$ref": "#/components/schemas/CWLDocumentation" - }, - { - "type": "object", - "title": "CWLGraphItem", - "properties": { - "class": { - "type": "string", - "title": "Class", - "description": "CWL class specification. This is used to differentiate between single Application Package (AP)definitions and Workflow that chains multiple packages.", - "enum": [ - "CommandLineTool", - "ExpressionTool", - "Workflow" - ] - }, - "id": { - "$ref": "#/components/schemas/CWLAtomicBase/properties/id" - }, - "intent": { - "$ref": "#/components/schemas/CWLAtomicBase/properties/intent" - }, - "requirements": { - "$ref": "#/components/schemas/CWLRequirements" - }, - "hints": { - "$ref": "#/components/schemas/CWLHints" - }, - "baseCommand": { - "$ref": "#/components/schemas/CWLCommand" - }, - "arguments": { - "$ref": "#/components/schemas/CWLArguments" - }, - "inputs": { - "$ref": "#/components/schemas/CWLInputsDefinition" - }, - "outputs": { - "$ref": "#/components/schemas/CWLOutputsDefinition" - }, - "scatter": { - "$ref": "#/components/schemas/CWLAtomicBase/properties/scatter" - }, - "scatterMethod": { - "$ref": "#/components/schemas/CWLAtomicBase/properties/scatterMethod" - } - }, - "required": [ - "class", - "id", - "inputs", - "outputs" - ] - } - ] - }, - "maxItems": 1, - "minItems": 1 - } - }, - "required": [ - "$graph" - ] + "$ref": "#/components/schemas/CWLGraphBase" } ] }, @@ -2163,14 +1050,7 @@ "CWLWorkflowStepList": { "type": "array", "items": { - "allOf": [ - { - "$ref": "#/components/schemas/CWLWorkflowStepId" - }, - { - "$ref": "#/components/schemas/CWLWorkflowStepObject" - } - ] + "$ref": "#/components/schemas/CWLWorkflowStepItem" } }, "CWLInputList": { @@ -2191,30 +1071,7 @@ "$ref": "#/components/schemas/CWLType" }, { - "title": "CWLInputObject (CWL type definition with parameters).", - "allOf": [ - { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/CWLType" - }, - "inputBinding": { - "$ref": "#/components/schemas/InputBinding" - } - }, - "required": [ - "type" - ], - "additionalProperties": {} - }, - { - "$ref": "#/components/schemas/CWLDefaultTypedConditional" - }, - { - "$ref": "#/components/schemas/CWLDocumentation" - } - ] + "$ref": "#/components/schemas/CWLInputObject" }, { "$ref": "#/components/schemas/CWLInputStdIn" @@ -2376,13 +1233,7 @@ "title": "String command." }, { - "type": "array", - "title": "Command Parts", - "items": { - "type": "string", - "title": "cmd" - }, - "additionalProperties": false + "$ref": "#/components/schemas/CommandParts" } ], "title": "CWLCommand", @@ -2423,31 +1274,7 @@ "description": "Input specification. Note that multiple formats are supported and\nnot all specification variants or parameters are presented here. Please refer\nto official CWL documentation for more details (https://www.commonwl.org).\n", "allOf": [ { - "type": "object", - "properties": { - "type": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLType" - }, - { - "$ref": "#/components/schemas/CWLInputStdIn" - } - ] - }, - "inputBinding": { - "$ref": "#/components/schemas/InputBinding" - }, - "id": { - "description": "Identifier of the CWL input.", - "$ref": "#/components/schemas/CWLAtomicBase/properties/id" - } - }, - "required": [ - "type", - "id" - ], - "additionalProperties": {} + "$ref": "#/components/schemas/CWLInputItemBase" }, { "$ref": "#/components/schemas/CWLDefaultTypedConditional" @@ -2491,9 +1318,7 @@ "type": "string" }, "checksum": { - "description": "Minimal pattern check to know which hash algorithm to apply,\nbut don't check too harshly for the rest (length, allowed characters, etc.).\n", - "type": "string", - "pattern": "^[a-z0-9\\-]+\\$[\\w\\-.]+$" + "$ref": "#/components/schemas/Checksum" }, "size": { "type": "integer", @@ -2718,29 +1543,7 @@ ] }, "expressionLib": { - "type": "array", - "title": "InlineJavascriptLibraries", - "description": "Additional code fragments that will also be inserted before executing the expression code.\nAllows for function definitions that may be called from CWL expressions.\n", - "items": { - "title": "exp_lib", - "oneOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "$include": { - "type": "string" - } - }, - "required": [ - "$include" - ], - "additionalProperties": false - } - ] - } + "$ref": "#/components/schemas/InlineJavascriptLibraries" } }, "required": [ @@ -2781,13 +1584,7 @@ ] }, "loadListing": { - "type": "string", - "title": "LoadListingEnum", - "enum": [ - "no_listing", - "shallow_listing", - "deep_listing" - ] + "$ref": "#/components/schemas/LoadListingEnum" } }, "required": [ @@ -2827,105 +1624,28 @@ ] }, "coresMin": { - "oneOf": [ - { - "$ref": "#/components/schemas/ResourceQuantityOrFractional" - }, - { - "$ref": "#/components/schemas/CWLExpression" - } - ], - "title": "ResourceCoresMinimum (Minimum reserved number of CPU cores).", - "description": "Minimum reserved number of CPU cores.\n\nMay be a fractional value to indicate to a scheduling algorithm that one core can be allocated to\nmultiple jobs. For example, a value of 0.25 indicates that up to 4 jobs\nmay run in parallel on 1 core. A value of 1.25 means that up to 3 jobs\ncan run on a 4 core system (4/1.25 ~ 3).\n\nProcesses can only share a core allocation if the sum of each of their 'ramMax', 'tmpdirMax', and\n'outdirMax' requests also do not exceed the capacity of the node.\n\nProcesses sharing a core must have the same level of isolation (typically a container\nor VM) that they would normally have.\n\nThe reported number of CPU cores reserved for the process, which is available to expressions\non the 'CommandLineTool' as 'runtime.cores', must be a non-zero integer, and may be calculated by\nrounding up the cores request to the next whole number.\n\nScheduling systems may allocate fractional CPU resources by setting quotas or scheduling weights.\nScheduling systems that do not support fractional CPUs may round up the request to the next whole number.\n", - "default": 1 + "$ref": "#/components/schemas/ResourceCoresMinimum" }, "coresMax": { - "oneOf": [ - { - "$ref": "#/components/schemas/ResourceQuantityOrFractional" - }, - { - "$ref": "#/components/schemas/CWLExpression" - } - ], - "title": "ResourceCoresMaximum (Maximum reserved number of CPU cores).", - "description": "Maximum reserved number of CPU cores.\nSee 'coresMin' for discussion about fractional CPU requests.\n" + "$ref": "#/components/schemas/ResourceCoresMaximum" }, "ramMin": { - "oneOf": [ - { - "$ref": "#/components/schemas/ResourceQuantityOrFractional" - }, - { - "$ref": "#/components/schemas/CWLExpression" - } - ], - "title": "ResourceRAMMinimum (Minimum reserved RAM in mebibytes).", - "description": "Minimum reserved RAM in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual RAM request must be rounded up\nto the next whole number.\n\nThe reported amount of RAM reserved for the process, which is available to\nexpressions on the 'CommandLineTool' as 'runtime.ram', must be a non-zero integer.\n", - "default": 256 + "$ref": "#/components/schemas/ResourceRAMMinimum" }, "ramMax": { - "oneOf": [ - { - "$ref": "#/components/schemas/ResourceQuantityOrFractional" - }, - { - "$ref": "#/components/schemas/CWLExpression" - } - ], - "title": "ResourceRAMMaximum (Maximum reserved RAM in mebibytes).", - "description": "Maximum reserved RAM in mebibytes (2**20).\nSee 'ramMin' for discussion about fractional RAM requests.\n" + "$ref": "#/components/schemas/ResourceRAMMaximum" }, "tmpdirMin": { - "oneOf": [ - { - "$ref": "#/components/schemas/ResourceQuantityOrFractional" - }, - { - "$ref": "#/components/schemas/CWLExpression" - } - ], - "title": "ResourceTmpDirMinimum (Minimum reserved filesystem based storage for the designated temporary) directory in mebibytes.", - "description": "Minimum reserved filesystem based storage for the designated temporary\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.tmpdirSize', must be a non-zero integer.\n", - "default": 1024 + "$ref": "#/components/schemas/ResourceTmpDirMinimum" }, "tmpdirMax": { - "oneOf": [ - { - "$ref": "#/components/schemas/ResourceQuantityOrFractional" - }, - { - "$ref": "#/components/schemas/CWLExpression" - } - ], - "title": "ResourceTmpDirMaximum (Maximum reserved filesystem based storage for the designated temporary directory in mebibytes).", - "description": "Maximum reserved filesystem based storage for the designated temporary directory in mebibytes (2**20).\nSee 'tmpdirMin' for discussion about fractional storage requests.\n" + "$ref": "#/components/schemas/ResourceTmpDirMaximum" }, "outdirMin": { - "oneOf": [ - { - "$ref": "#/components/schemas/ResourceQuantityOrFractional" - }, - { - "$ref": "#/components/schemas/CWLExpression" - } - ], - "title": "ResourceOutDirMinimum (Minimum reserved filesystem based storage for the designated output directory in mebibytes).", - "description": "Minimum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.outdirSize', must be a non-zero integer.\n", - "default": 1024 + "$ref": "#/components/schemas/ResourceOutDirMinimum" }, "outdirMax": { - "oneOf": [ - { - "$ref": "#/components/schemas/ResourceQuantityOrFractional" - }, - { - "$ref": "#/components/schemas/CWLExpression" - } - ], - "title": "ResourceOutDirMaximum (Maximum reserved filesystem based storage for the designated output directory in mebibytes).", - "description": "Maximum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\nSee 'outdirMin' for discussion about fractional storage requests.\n", - "default": 1 + "$ref": "#/components/schemas/ResourceOutDirMaximum" } }, "additionalProperties": false @@ -2958,16 +1678,7 @@ ] }, "enableReuse": { - "oneOf": [ - { - "type": "boolean" - }, - { - "$ref": "#/components/schemas/CWLExpression" - } - ], - "title": "EnableReuseValue", - "description": "Indicates if reuse is enabled for this tool.\n\nCan be an expression when combined with 'InlineJavascriptRequirement'\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression).\n" + "$ref": "#/components/schemas/EnableReuseValue" } }, "required": [ @@ -2988,17 +1699,7 @@ ] }, "timelimit": { - "oneOf": [ - { - "type": "number", - "minimum": 0 - }, - { - "$ref": "#/components/schemas/CWLExpression" - } - ], - "title": "TimeLimitValue", - "description": "The time limit, in seconds.\n\nA time limit of zero means no time limit.\nNegative time limits are an error.\n" + "$ref": "#/components/schemas/TimeLimitValue" } }, "required": [ @@ -3073,30 +1774,10 @@ "$ref": "#/components/schemas/CWLWorkflowStepRun" }, "when": { - "$ref": "#/components/schemas/CWLWorkflowStepOut" + "$ref": "#/components/schemas/CWLExpression" }, "out": { - "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLAtomicBase/properties/id" - }, - { - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/CWLAtomicBase/properties/id" - } - }, - "required": [ - "id" - ], - "additionalProperties": false - } - ] - } + "$ref": "#/components/schemas/$defs-CWLWorkflowStepOut" } }, "required": [ @@ -3109,32 +1790,10 @@ "type": "object", "properties": { "scatter": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" - }, - { - "type": "array", - "title": "IdentifierArray", - "items": { - "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" - }, - "minItems": 1 - } - ], - "title": "Scatter", - "description": "The scatter field specifies one or more input parameters which will be scattered.\n\nAn input parameter may be listed more than once. The declared type of each\ninput parameter implicitly becomes an array of items of the input parameter type.\nIf a parameter is listed more than once, it becomes a nested array. As a result,\nupstream parameters which are connected to scattered parameters must be arrays.\n\nAll output parameter types are also implicitly wrapped in arrays. Each job\nin the scatter results in an entry in the output array.\n\nIf any scattered parameter runtime value is an empty array, all outputs are\nset to empty arrays and no work is done for the step, according to applicable scattering rules.\n" + "$ref": "#/components/schemas/Scatter" }, "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" - ] + "$ref": "#/components/schemas/ScatterMethod" } } }, @@ -3142,7 +1801,7 @@ "type": "object", "properties": { "id": { - "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + "$ref": "#/components/schemas/CWLIdentifier" } }, "required": [ @@ -3156,112 +1815,7 @@ "$ref": "#/components/schemas/CWLRequirementsMap" }, { - "type": "object", - "properties": { - "BuiltinRequirement": { - "type": "object", - "title": "BuiltinRequirement", - "description": "Hint indicating that the Application Package corresponds to a\nbuiltin process of this instance. (note: can only be an 'hint'\nas it is unofficial CWL specification).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "BuiltinRequirement" - ] - }, - "process": { - "description": "Builtin process identifier.", - "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" - } - }, - "required": [ - "process", - "class" - ], - "additionalProperties": false - }, - "OGCAPIRequirement": { - "type": "object", - "title": "OGCAPIRequirement", - "description": "Hint indicating that the Application Package corresponds to an\nOGC API - Processes provider that should be remotely executed and monitored\nby this instance. (note: can only be an 'hint' as it is unofficial CWL specification).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "OGCAPIRequirement" - ] - }, - "process": { - "description": "Process location.", - "$ref": "#/components/schemas/SoftwarePackage/properties/specs/items" - } - }, - "required": [ - "process" - ], - "additionalProperties": false - }, - "WPS1Requirement": { - "type": "object", - "title": "WPS1Requirement", - "description": "Hint indicating that the Application Package corresponds to a\nWPS-1 provider process that should be remotely executed and monitored by this\ninstance. (note: can only be an ''hint'' as it is unofficial CWL specification).\n", - "properties": { - "class": { - "type": "string", - "enum": [ - "WPS1Requirement" - ] - }, - "process": { - "description": "Process identifier of the remote WPS provider.", - "$ref": "#/components/schemas/CWLAtomicBase/properties/id/anyOf/1" - }, - "provider": { - "description": "WPS provider endpoint.", - "$ref": "#/components/schemas/SoftwarePackage/properties/specs/items" - } - }, - "required": [ - "process", - "provider" - ], - "additionalProperties": false - } - }, - "additionalProperties": { - "type": "object", - "description": "Generic schema to allow alternative CWL requirements/hints not explicitly defined in schemas.", - "properties": { - "class": { - "type": "string", - "title": "Requirement Class Identifier", - "description": "CWL requirement class specification.", - "example": "UnknownRequirement", - "not": { - "enum": [ - "cwltool:CUDARequirement", - "DockerRequirement", - "SoftwareRequirement", - "ShellCommandRequirement", - "EnvVarRequirement", - "SchemaDefRequirement", - "InitialWorkDirRequirement", - "InlineJavascriptRequirement", - "InplaceUpdateRequirement", - "LoadListingRequirement", - "NetworkAccess", - "ResourceRequirement", - "ScatterFeatureRequirement", - "ToolTimeLimit", - "WorkReuse", - "MultipleInputFeatureRequirement", - "StepInputExpressionRequirement", - "SubworkflowFeatureRequirement" - ] - } - } - } - } + "$ref": "#/components/schemas/CWLHintsMapExtras" } ] }, @@ -3279,29 +1833,7 @@ ] }, { - "title": "CWLHintsItem", - "description": "For any new items added, ensure they are added under 'class' of 'UnknownRequirement' as well.\nOtherwise, insufficiently restrictive classes could cause multiple matches, failing the 'oneOf' condition.\n", - "oneOf": [ - { - "$ref": "#/components/schemas/CWLRequirementsItem" - }, - { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/properties/BuiltinRequirement" - }, - { - "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/properties/OGCAPIRequirement" - }, - { - "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/properties/WPS1Requirement" - }, - { - "$ref": "#/components/schemas/CWLHintsMap/anyOf/1/additionalProperties" - } - ] - } - ] + "$ref": "#/components/schemas/CWLHintsItem" } ] }, @@ -3335,30 +1867,15 @@ }, { "description": "Nested CWL Workflow definition for the step.", - "allOf": [ - { - "$ref": "#/components/schemas/CWLMetadata" - }, - { - "$ref": "#/components/schemas/CWLDocumentation" - }, - { - "$ref": "#/components/schemas/CWLWorkflowClass" - }, - { - "$ref": "#/components/schemas/CWLWorkflowBase" - } - ] + "$ref": "#/components/schemas/CWLWorkflowNested" } ] }, "CWLWorkflowStepWhen": { - "$ref": "#/components/schemas/CWLWorkflowStepOut" + "$ref": "#/components/schemas/CWLExpression" }, "CWLWorkflowStepOut": { - "description": "Condition to execute a step that must evaluate to a boolean-like value.", - "type": "string", - "title": "CWLExpression" + "$ref": "#/components/schemas/CWLExpression" }, "CWLWorkflowStepInMap": { "type": "object", @@ -3374,14 +1891,7 @@ } }, { - "allOf": [ - { - "$ref": "#/components/schemas/CWLWorkflowStepInputBase" - }, - { - "$ref": "#/components/schemas/CWLWorkflowStepInputDefault" - } - ] + "$ref": "#/components/schemas/CWLWorkflowStepInput" } ] } @@ -3409,7 +1919,7 @@ "type": "object", "properties": { "id": { - "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + "$ref": "#/components/schemas/CWLIdentifier" } }, "required": [ @@ -3433,11 +1943,7 @@ ] }, "linkMerge": { - "type": "string", - "enum": [ - "merge_nested", - "merge_flattened" - ] + "$ref": "#/components/schemas/LinkMergeMethod" }, "valueFrom": { "$ref": "#/components/schemas/CWLExpression" @@ -3500,19 +2006,7 @@ "$ref": "#/components/schemas/CWLDocumentation" }, { - "type": "object", - "title": "CWLOutputObject (CWL type definition with parameters).", - "properties": { - "type": { - "$ref": "#/components/schemas/CWLType" - }, - "outputBinding": { - "$ref": "#/components/schemas/CWLOutputItem/properties/outputBinding" - } - }, - "required": [ - "type" - ] + "$ref": "#/components/schemas/CWLOutputObjectBase" } ] }, @@ -3549,19 +2043,7 @@ ] }, "symbols": { - "type": "array", - "title": "CWLTypeSymbols (Allowed values composing the enum).", - "items": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "title": "CWLTypeSymbolValues" - } + "$ref": "#/components/schemas/CWLTypeSymbols" } }, "required": [ @@ -3956,9 +2438,7 @@ } }, { - "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\\-.]+$" + "$ref": "#/components/schemas/CWLTypeRecordRefPattern" } ] }, @@ -3978,16 +2458,7 @@ "CWLTypeRecordFieldsList": { "type": "array", "items": { - "allOf": [ - { - "$ref": "#/components/schemas/CWLTypeRecordFieldDef" - }, - { - "required": [ - "name" - ] - } - ] + "$ref": "#/components/schemas/CWLTypeRecordFieldsItem" } }, "CWLTypeRecordFieldDefBase": { @@ -4029,12 +2500,7 @@ "type": "object", "oneOf": [ { - "type": "object", - "properties": { - "loadListing": { - "$ref": "#/components/schemas/LoadListingRequirement/properties/loadListing" - } - } + "$ref": "#/components/schemas/CWLDirectoryOnlyParameters" }, { "not": { @@ -4055,17 +2521,7 @@ "type": "boolean" }, "format": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLExpression" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWLExpression" - } - } - ] + "$ref": "#/components/schemas/CWLFormat" }, "loadContents": { "type": "boolean" @@ -4393,14 +2849,7 @@ "type": "object", "properties": { "s:keywords": { - "title": "KeywordList", - "type": "array", - "description": "Keywords applied to the process for search and categorization purposes.", - "items": { - "type": "string", - "title": "keyword", - "minLength": 1 - } + "$ref": "#/components/schemas/CWLKeywordList" }, "version": { "type": "string", @@ -4438,23 +2887,7 @@ "description": "Direct CWL definition instead of the graph representation.", "properties": { "id": { - "anyOf": [ - { - "type": "string", - "title": "UUID", - "description": "Unique identifier.", - "format": "uuid", - "pattern": "^[a-f0-9]{8}(?:-?[a-f0-9]{4}){3}-?[a-f0-9]{12}$" - }, - { - "description": "Identifier with text pattern that can allow additional non-ASCII characters depending on regex implementation.\nThe identifier allows a '#' or a relative 'sub/part#ref' prefix, to support references to other definitions\nin the CWL document, such as when using 'SchemaDefRequirement'.\n\nJSON spec regex does not include '\\w' in its default subset to allow all word-like unicode characters\n(see reference: https://json-schema.org/understanding-json-schema/reference/regular_expressions.html).\n\nSince support is implementation specific, add both the ASCII-only and '\\w' representation simultaneously\nand let the parser reading this document apply whichever is more relevant or supported\n(see discussion: https://github.com/common-workflow-language/cwl-v1.2/pull/256#discussion_r1234037814).\n", - "pattern": "^([A-Za-z0-9\\w]+(/[A-Za-z0-9\\w]+)*)?[#.]?[A-Za-z0-9\\w]+(?:[-_.][A-Za-z0-9\\w]+)*$", - "type": "string", - "title": "Generic identifier name pattern." - } - ], - "title": "CWLIdentifier", - "description": "Reference to the process identifier." + "$ref": "#/components/schemas/CWLIdentifier" }, "class": { "type": "string", @@ -4466,15 +2899,7 @@ ] }, "intent": { - "type": "array", - "title": "CWLIntent", - "items": { - "type": "string", - "title": "item", - "description": "Identifier URL to a concept for the type of computational operation accomplished by this process\n(see example operations: http://edamontology.org/operation_0004).\n", - "format": "url", - "pattern": "^((?:http|ftp)s?://)?(?!.*//.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:/?|[/?]\\S+)$" - } + "$ref": "#/components/schemas/CWLIntent" }, "requirements": { "$ref": "#/components/schemas/CWLRequirements" @@ -4507,30 +2932,10 @@ "$ref": "#/components/schemas/CWLExpression" }, "scatter": { - "oneOf": [ - { - "$ref": "#/components/schemas/CWLAtomicBase/properties/id" - }, - { - "type": "array", - "title": "CWLScatterMulti", - "items": { - "$ref": "#/components/schemas/CWLAtomicBase/properties/id" - } - } - ], - "title": "CWLScatter", - "description": "One or more input identifier of an application step within a Workflow\nwere an array-based input to that Workflow should be scattered across multiple\ninstances of the step application.\n" + "$ref": "#/components/schemas/CWLScatter" }, "scatterMethod": { - "type": "string", - "title": "scatterMethod", - "description": "Describes how to decompose the scattered input into a discrete\nset of jobs. When 'dotproduct', specifies that each of the input arrays\nare aligned and one element taken from each array to construct each job.\nIt is an error if all input arrays are of different length. When 'nested_crossproduct',\nspecifies the Cartesian product of the inputs, producing a job for every\ncombination of the scattered inputs. The output must be nested arrays\nfor each level of scattering, in the order that the input arrays are listed\nin the scatter field. When 'flat_crossproduct', specifies the Cartesian\nproduct of the inputs, producing a job for every combination of the scattered\ninputs. The output arrays must be flattened to a single level, but otherwise\nlisted in the order that the input arrays are listed in the scatter field.\n", - "enum": [ - "dotproduct", - "nested_crossproduct", - "flat_crossproduct" - ] + "$ref": "#/components/schemas/CWLScatterMethod" } }, "required": [ @@ -4590,29 +2995,11 @@ ] }, "outputBinding": { - "type": "object", - "title": "OutputBinding", - "description": "Defines how to retrieve the output result from the command.", - "properties": { - "glob": { - "description": "Glob pattern to find the output on disk or mounted docker volume.", - "oneOf": [ - { - "$ref": "#/components/schemas/CWLExpression" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/CWLExpression" - } - } - ] - } - } + "$ref": "#/components/schemas/OutputBinding" }, "id": { "description": "Identifier of the CWL output.", - "$ref": "#/components/schemas/CWLAtomicBase/properties/id" + "$ref": "#/components/schemas/CWLIdentifier" } }, "required": [ @@ -4688,9 +3075,7 @@ "specs": { "type": "array", "items": { - "type": "string", - "format": "url", - "pattern": "^((?:http|ftp)s?:\\/\\/)?(?!.*\\/\\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:\\/?|[/?]\\S+)$" + "$ref": "#/components/schemas/ReferenceURL" } } }, @@ -4706,1214 +3091,3397 @@ } }, "CQL2": { - "oneOf": [ - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "and", - "or" - ] - }, - "args": { - "type": "array", - "minItems": 2, - "items": { - "$ref": "#/components/schemas/CQL2" - } - } - } + "$ref": "#/components/schemas/cql2" + }, + "enumeration": { + "type": "object", + "required": [ + "type", + "enum" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "enum" + ] }, - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "not" - ] - }, - "args": { - "type": "array", - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/CQL2" - } - } + "enum": { + "type": "array", + "items": { + "type": "string" } - }, + } + } + }, + "processes-list": { + "type": "string", + "enum": [ + "RenderMap", + "ElevationContours", + "OSMERE" + ] + }, + "processSummary": { + "allOf": [ { - "oneOf": [ - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "=", - "<>", - "<", - ">", - "<=", - ">=" - ] - }, - "args": { - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/1" - }, - { - "type": "boolean" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4/oneOf/0" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - } - ] - } - } - } - }, - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "like" - ] - }, - "args": { - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - }, - { - "oneOf": [ - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "casei" - ] - }, - "args": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/1/properties/args/items/oneOf/3" - }, - "minItems": 1, - "maxItems": 1 - } - } - }, - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "accenti" - ] - }, - "args": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/1/properties/args/items/oneOf/3" - }, - "minItems": 1, - "maxItems": 1 - } - } - }, - { - "type": "string" - } - ] - } - ] - } - } - } - }, - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "between" - ] - }, - "args": { - "type": "array", - "minItems": 3, - "maxItems": 3, - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/1" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - } - ] - } - } - } - }, - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "in" - ] - }, - "args": { - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/0/properties/args/items" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/CQL2/oneOf/2/oneOf/0/properties/args/items" - } - } - ] - } - } - } - }, - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "isNull" - ] - }, - "args": { - "type": "array", - "minItems": 1, - "maxItems": 1, - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/1" - }, - { - "$ref": "#/components/schemas/CQL2" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - } - ] - } - } - } - } - ] + "$ref": "#/components/schemas/descriptionType" }, { "type": "object", "required": [ - "op", - "args" + "id", + "version" ], "properties": { - "op": { - "type": "string", - "enum": [ - "s_contains", - "s_crosses", - "s_disjoint", - "s_equals", - "s_intersects", - "s_overlaps", - "s_touches", - "s_within" - ] + "id": { + "type": "string" }, - "args": { + "version": { + "type": "string" + }, + "jobControlOptions": { "type": "array", - "minItems": 2, - "maxItems": 2, "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - } - ] + "$ref": "#/components/schemas/jobControlOptions" } - } - } - }, - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "t_after", - "t_before", - "t_contains", - "t_disjoint", - "t_during", - "t_equals", - "t_finishedBy", - "t_finishes", - "t_intersects", - "t_meets", - "t_metBy", - "t_overlappedBy", - "t_overlaps", - "t_startedBy", - "t_starts" - ] }, - "args": { + "links": { "type": "array", - "minItems": 2, - "maxItems": 2, "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - } - ] + "$ref": "#/components/schemas/link-2" } } } + } + ] + }, + "process": { + "allOf": [ + { + "$ref": "#/components/schemas/processSummary" }, { "type": "object", - "required": [ - "op", - "args" - ], "properties": { - "op": { - "type": "string", - "enum": [ - "a_containedBy", - "a_contains", - "a_equals", - "a_overlaps" - ] + "inputs": { + "additionalProperties": { + "$ref": "#/components/schemas/inputDescription" + } }, - "args": { - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/5" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - } - ] + "outputs": { + "additionalProperties": { + "$ref": "#/components/schemas/outputDescription" } } } - }, - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { + } + ] + }, + "processList": { + "type": "object", + "required": [ + "processes", + "links" + ], + "properties": { + "processes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/processSummary" + } + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/link-2" + } + } + } + }, + "jobList": { + "type": "object", + "required": [ + "jobs", + "links" + ], + "properties": { + "jobs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/statusInfo" + } + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/link-2" + } + } + } + }, + "bbox-processes": { + "$ref": "#/components/schemas/bbox" + }, + "descriptionType": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "metadata": { + "type": "array", + "items": { + "$ref": "#/components/schemas/metadata" + } + } + } + }, + "binaryValue": { + "type": "string" + }, + "execute-workflow": { + "$ref": "#/components/schemas/execute-workflows" + }, + "inputParameterized": { + "allOf": [ + { + "type": "object", + "required": [ + "$input" + ], + "properties": { + "$input": { + "type": "string" + } + } + }, + { + "$ref": "#/components/schemas/fieldsModifiers" + } + ] + }, + "format": { + "type": "object", + "properties": { + "mediaType": { + "type": "string" + }, + "encoding": { + "type": "string" + }, + "schema": { + "oneOf": [ + { "type": "string", - "not": { + "format": "url" + }, + { + "type": "object" + } + ] + } + } + }, + "inputDescription": { + "allOf": [ + { + "$ref": "#/components/schemas/descriptionType" + }, + { + "$ref": "#/components/schemas/dataClasses" + }, + { + "$ref": "#/components/schemas/dataAccessAPIs" + }, + { + "$ref": "#/components/schemas/executionUnitRequirements" + }, + { + "type": "object", + "required": [ + "schema" + ], + "properties": { + "schema": { + "$ref": "#/components/schemas/schema" + }, + "minOccurs": { + "type": "integer", + "default": 1 + }, + "maxOccurs": { + "oneOf": [ + { + "type": "integer", + "default": 1 + }, + { + "type": "string", + "enum": [ + "unbounded" + ] + } + ] + }, + "valuePassing": { + "type": "array", + "items": { + "type": "string", "enum": [ - "and", - "or", - "not", - "=", - "<>", - "<", - ">", - "<=", - ">=", - "like", - "between", - "in", - "isNull", - "casei", - "accenti", - "s_contains", - "s_crosses", - "s_disjoint", - "s_equals", - "s_intersects", - "s_overlaps", - "s_touches", - "s_within", - "t_after", - "t_before", - "t_contains", - "t_disjoint", - "t_during", - "t_equals", - "t_finishedBy", - "t_finishes", - "t_intersects", - "t_meets", - "t_metBy", - "t_overlappedBy", - "t_overlaps", - "t_startedBy", - "t_starts", - "a_containedBy", - "a_contains", - "a_equals", - "a_overlaps", - "+", - "-", - "*", - "/", - "^", - "%", - "div" + "byValue", + "byReference" ] - } + }, + "default": [ + "byValue", + "byReference" + ] + } + } + } + ] + }, + "inputValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/valueNoObject" + }, + { + "type": "object" + } + ] + }, + "collectionValue": { + "allOf": [ + { + "$ref": "#/components/schemas/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\".", + "type": "string", + "format": "uri-reference" }, - "args": { + "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": { - "oneOf": [ - { - "oneOf": [ - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "casei" - ] - }, - "args": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - } - ] - }, - "minItems": 1, - "maxItems": 1 - } - } - }, - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "accenti" - ] - }, - "args": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - } - ] - }, - "minItems": 1, - "maxItems": 1 - } - } - }, - { - "type": "string" - } - ] - }, - { - "oneOf": [ - { - "type": "object", - "required": [ - "op", - "args" - ], - "properties": { - "op": { - "type": "string", - "enum": [ - "+", - "-", - "*", - "/", - "^", - "%", - "div" - ] - }, - "args": { - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/1/oneOf/0" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - }, - { - "type": "number" - } - ] - } - } - } - }, - { - "type": "number" - } - ] - }, - { - "$ref": "#/components/schemas/CQL2" - }, - { - "oneOf": [ - { - "oneOf": [ - { - "title": "GeoJSON Point", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Point" - ] - }, - "coordinates": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON LineString", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "LineString" - ] - }, - "coordinates": { - "type": "array", - "minItems": 2, - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON Polygon", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Polygon" - ] - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "minItems": 4, - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON MultiPoint", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MultiPoint" - ] - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON MultiLineString", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MultiLineString" - ] - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON MultiPolygon", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MultiPolygon" - ] - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "array", - "minItems": 4, - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON GeometryCollection", - "type": "object", - "required": [ - "type", - "geometries" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "GeometryCollection" - ] - }, - "geometries": { - "type": "array", - "minItems": 2, - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/0" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/1" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/2" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/3" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/4" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3/oneOf/0/oneOf/5" - } - ] - } - } - } - } - ] - }, - { - "type": "object", - "required": [ - "bbox" - ], - "properties": { - "bbox": { - "type": "array", - "oneOf": [ - { - "minItems": 4, - "maxItems": 4 - }, - { - "minItems": 6, - "maxItems": 6 - } - ], - "items": { - "type": "number" - } - } - } - } - ] + "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" + } + ] + }, + "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" }, { - "oneOf": [ - { + "type": "object", + "properties": { + "expressionLang": { + "type": "string", + "enum": [ + "cql2-text", + "cql2-json" + ] + }, + "expression": { "oneOf": [ { - "type": "object", - "required": [ - "date" - ], - "properties": { - "date": { - "type": "string", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$" - } - } + "type": "string" }, { - "type": "object", - "required": [ - "timestamp" - ], - "properties": { - "timestamp": { - "type": "string", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" - } - } + "$ref": "#/components/schemas/cql2" } ] - }, - { - "type": "object", - "required": [ - "interval" - ], - "properties": { - "interval": { - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "oneOf": [ - { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4/oneOf/0/oneOf/0/properties/date" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4/oneOf/0/oneOf/1/properties/timestamp" - } - ] - }, - { - "type": "string", - "enum": [ - ".." - ] - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6" - } - ] - } - } - } - } - ] - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/0" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/1" - }, - { - "$ref": "#/components/schemas/CQL2" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/3" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/4" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/5" - }, - { - "$ref": "#/components/schemas/CQL2/oneOf/6/properties/args/items/oneOf/6" - } - ] - } - }, - { - "type": "object", - "required": [ - "property" - ], - "properties": { - "property": { - "type": "string" } } } ] } + }, + "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" } } + } + ] + }, + "valueNoObject": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "integer" + }, + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/inputValue" + }, + { + "$ref": "#/components/schemas/qualifiedValue" + } + ] + } + }, + { + "$ref": "#/components/schemas/binaryValue" + }, + { + "$ref": "#/components/schemas/bbox" + }, + { + "$ref": "#/components/schemas/collectionValue" + } + ] + }, + "valueNoObject-workflows": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "integer" + }, + { + "type": "boolean" + }, + { + "type": "array", + "items": {} + }, + { + "$ref": "#/components/schemas/binaryValue" + }, + { + "$ref": "#/components/schemas/bbox" + }, + { + "$ref": "#/components/schemas/collectionValue" + }, + { + "$ref": "#/components/schemas/inputProcess" + }, + { + "$ref": "#/components/schemas/inputParameterized" + } + ] + }, + "jobControlOptions": { + "type": "string", + "enum": [ + "sync-execute", + "async-execute", + "dismiss" + ] + }, + "metadata": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/link-2" + }, + { + "type": "object", + "properties": { + "role": { + "type": "string" + } + } + } + ] + }, + { + "type": "object", + "properties": { + "role": { + "type": "string" + }, + "title": { + "type": "string" + }, + "lang": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + } + ] + }, + "output": { + "type": "object", + "properties": { + "format": { + "$ref": "#/components/schemas/format" + } + } + }, + "outputDescription": { + "allOf": [ + { + "$ref": "#/components/schemas/descriptionType" + }, + { + "$ref": "#/components/schemas/dataClasses" + }, + { + "$ref": "#/components/schemas/dataAccessAPIs" + }, + { + "type": "object", + "required": [ + "schema" + ], + "properties": { + "schema": { + "$ref": "#/components/schemas/schema" + } + } + } + ] + }, + "qualifiedValue": { + "allOf": [ + { + "$ref": "#/components/schemas/format" + }, + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "$ref": "#/components/schemas/inputValue" + } + } + } + ] + }, + "reference": { + "type": "object", + "required": [ + "$ref" + ], + "properties": { + "$ref": { + "type": "string", + "format": "uri-reference" + } + }, + "additionalProperties": false + }, + "results": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/inlineOrRefValue" + } + }, + "schema": { + "description": "Attributes of the features or fields of a coverage range. Defined by a subset of the JSON Schema for the properties of a feature", + "type": "object", + "required": [ + "type", + "properties" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "object" + ] + }, + "required": { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "enum": { + "type": "array", + "minItems": 1, + "items": {}, + "uniqueItems": true + }, + "format": { + "type": "string" + }, + "contentMediaType": { + "type": "string" + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "maxItems": { + "type": "integer", + "minimum": 0 + }, + "minItems": { + "type": "integer", + "default": 0, + "minimum": 0 + }, + "x-ogc-definition": { + "type": "string", + "format": "uri" + }, + "x-ogc-unit": { + "type": "string" + }, + "x-ogc-unitLang": { + "type": "string" + } + } + } + } + } + }, + "statusCode": { + "type": "string", + "nullable": false, + "enum": [ + "accepted", + "running", + "successful", + "failed", + "dismissed" + ] + }, + "subscriber": { + "description": "Optional URIs for callbacks for this job.\n\nSupport for this parameter is not required and the parameter may be\nremoved from the API definition, if conformance class **'callback'**\nis not listed in the conformance declaration under `/conformance`.", + "type": "object", + "properties": { + "successUri": { + "type": "string", + "format": "uri" + }, + "inProgressUri": { + "type": "string", + "format": "uri" + }, + "failedUri": { + "type": "string", + "format": "uri" + } + } + }, + "inlineOrRefValue": { + "oneOf": [ + { + "$ref": "#/components/schemas/valueNoObject" + }, + { + "$ref": "#/components/schemas/qualifiedValue" + }, + { + "$ref": "#/components/schemas/link-2" + } + ] + }, + "inlineOrRefValue-workflows": { + "oneOf": [ + { + "$ref": "#/components/schemas/valueNoObject-workflows" + }, + { + "$ref": "#/components/schemas/qualifiedValue-workflows" + }, + { + "$ref": "#/components/schemas/link" + } + ] + }, + "fieldsModifiers": { + "type": "object", + "properties": { + "filter": { + "oneOf": [ + { + "type": "string" + }, + { + "description": "Basic CQL2-JSON definition", + "type": "array", + "items": { + "type": "object" + } + } + ] + }, + "filter-lang": { + "type": "string", + "example": "cql2-text" + }, + "filter-crs": { + "type": "string", + "format": "uri-reference" + }, + "aliases": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "properties": { + "type": "array", + "items": { + "type": "string" + } + }, + "sortBy": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "statusInfo": { + "allOf": [ + { + "$ref": "#/components/schemas/descriptionType" + }, + { + "type": "object", + "required": [ + "id", + "status", + "processingEntityType" + ], + "properties": { + "id": { + "type": "string" + }, + "processID": { + "type": "string", + "format": "uri" + }, + "processingEntityType": { + "description": "The type of entity that created the job and is doing the processing.\nThis includes all the data access apis listed in \"apis.yaml\" plus\nthe processing APIs of OGC API Processes and OpenEO.", + "anyOf": [ + { + "$ref": "#/components/schemas/apis" + }, + { + "type": "string", + "enum": [ + "ogc-api-processes", + "openeo" + ] + } + ] + }, + "profileEntityType": { + "description": "The type of entity requesting this status information. This may\nbe differernt than the processing entity. For example, the\nprocessing entity may be OGC API Processes but the status\ninformation is requested via the OpenEO API.", + "anyOf": [ + { + "$ref": "#/components/schemas/apis" + }, + { + "type": "string", + "enum": [ + "ogc-api-processes", + "openeo" + ] + } + ] + }, + "request": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + }, + { + "$ref": "#/components/schemas/link-2" + } + ] + }, + "status": { + "$ref": "#/components/schemas/statusCode" + }, + "message": { + "type": "string" + }, + "exception": { + "$ref": "#/components/schemas/exception" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "started": { + "type": "string", + "format": "date-time" + }, + "finished": { + "type": "string", + "format": "date-time" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "progress": { + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "links": { + "type": "array", + "items": { + "$ref": "#/components/schemas/link-2" + } + } + } + } + ] + }, + "dataAccessAPIs": { + "type": "object", + "properties": { + "dataAccessAPIs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/apis" + } + } + } + }, + "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" + ] + }, + "dataClasses": { + "type": "object", + "properties": { + "dataClasses": { + "type": "array", + "items": { + "type": "string", + "format": "uri" + } + } + } + }, + "ogcapppkg": { + "type": "object", + "required": [ + "executionUnit" + ], + "properties": { + "processDescription": { + "type": "object", + "required": [ + "process" + ], + "properties": { + "process": { + "$ref": "#/components/schemas/process" + } + } + }, + "executionUnit": { + "oneOf": [ + { + "$ref": "#/components/schemas/executionUnit" + }, + { + "$ref": "#/components/schemas/link" + }, + { + "$ref": "#/components/schemas/qualifiedValue" + }, + { + "$ref": "#/components/schemas/ogcapppkg-array" + } + ] + } + } + }, + "staticIndicator": { + "allOf": [ + { + "$ref": "#/components/schemas/processSummary" + }, + { + "type": "object", + "properties": { + "mutable": { + "type": "boolean", + "default": true + } + } + } + ] + }, + "linkBase": { + "type": "object", + "required": [ + "rel" + ], + "properties": { + "rel": { + "type": "string" + }, + "type": { + "type": "string" + }, + "hreflang": { + "type": "string" + }, + "title": { + "type": "string" + }, + "length": { + "type": "integer" + } + } + }, + "linkBaseExtended": { + "type": "object", + "properties": { + "method": { + "type": "string", + "enum": [ + "POST", + "GET", + "DELETE", + "PATCH" + ] + }, + "body": {}, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "link-2": { + "allOf": [ + { + "$ref": "#/components/schemas/linkBase" + }, + { + "$ref": "#/components/schemas/linkBaseExtended" + }, + { + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "type": "string" + } + } + } + ] + }, + "executionUnitRequirements": { + "type": "object", + "properties": { + "executionUnitRequirements": { + "type": "object", + "properties": { + "remote-access": { + "type": "boolean" + }, + "staging": { + "type": "string", + "enum": [ + "local-file", + "remote-access" + ] + } + } + } + } + }, + "executionUnit": { + "description": "Resource containing an executable or runtime information for executing the process.", + "type": "object", + "required": [ + "type", + "image" + ], + "properties": { + "type": { + "description": "Type of execution unit.", + "type": "string", + "enum": [ + "docker", + "oci" + ] + }, + "image": { + "description": "Container image reference for the execution unit.", + "type": "string" + }, + "deployment": { + "description": "Deployment information for the execution unit.", + "type": "string", + "enum": [ + "local", + "remote", + "hpc", + "cloud" + ] + }, + "config": { + "type": "object", + "description": "Hardware requirements and configuration properties for executing the process.", + "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 + } + }, + "additionalProperties": true, + "example": { + "type": "docker", + "image": "mydocker/ndvi:latest", + "deployment": "local", + "config": { + "cpuMin": 2, + "cpuMax": 5, + "memoryMin": 1, + "memoryMax": 3 + } + } + }, + "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" + } + ] + }, + "bbox": { + "type": "object", + "required": [ + "bbox" + ], + "properties": { + "bbox": { + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 + }, + { + "minItems": 6, + "maxItems": 6 + } + ], + "items": { + "type": "number" + } + }, + "crs": { + "$ref": "#/components/schemas/bbox-def-crs" + } + } + }, + "pointGeoJSON": { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Point" + ] + }, + "coordinates": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + }, + "multipointGeoJSON": { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiPoint" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + }, + "linestringGeoJSON": { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "LineString" + ] + }, + "coordinates": { + "type": "array", + "minItems": 2, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + }, + "multilinestringGeoJSON": { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiLineString" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + } + }, + "polygonGeoJSON": { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Polygon" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 4, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + } + }, + "multipolygonGeoJSON": { + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiPolygon" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "array", + "minItems": 4, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + } + } + }, + "geometryGeoJSON": { + "oneOf": [ + { + "$ref": "#/components/schemas/pointGeoJSON" + }, + { + "$ref": "#/components/schemas/multipointGeoJSON" + }, + { + "$ref": "#/components/schemas/linestringGeoJSON" + }, + { + "$ref": "#/components/schemas/multilinestringGeoJSON" + }, + { + "$ref": "#/components/schemas/polygonGeoJSON" + }, + { + "$ref": "#/components/schemas/multipolygonGeoJSON" + }, + { + "$ref": "#/components/schemas/geometrycollectionGeoJSON" + } + ] + }, + "geometrycollectionGeoJSON": { + "type": "object", + "required": [ + "type", + "geometries" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "GeometryCollection" + ] + }, + "geometries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/geometryGeoJSON" + } + } + } + }, + "cql2": { + "oneOf": [ + { + "$ref": "#/components/schemas/andOrExpression" + }, + { + "$ref": "#/components/schemas/notExpression" + }, + { + "$ref": "#/components/schemas/comparisonPredicate" + }, + { + "$ref": "#/components/schemas/spatialPredicate" + }, + { + "$ref": "#/components/schemas/temporalPredicate" + }, + { + "$ref": "#/components/schemas/arrayPredicate" + }, + { + "$ref": "#/components/schemas/functionRef" + }, + { + "type": "boolean" + } + ] + }, + "andOrExpression": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "and", + "or" + ] + }, + "args": { + "type": "array", + "minItems": 2, + "items": { + "$ref": "#/components/schemas/cql2" + } + } + } + }, + "notExpression": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "not" + ] + }, + "args": { + "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { + "$ref": "#/components/schemas/cql2" + } + } + } + }, + "characterExpression": { + "oneOf": [ + { + "$ref": "#/components/schemas/casei" + }, + { + "$ref": "#/components/schemas/accenti" + }, + { + "type": "string" + } + ] + }, + "propertyRef": { + "type": "object", + "required": [ + "property" + ], + "properties": { + "property": { + "type": "string" + } + } + }, + "arithmeticExpression": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "+", + "-", + "*", + "/", + "^", + "%", + "div" + ] + }, + "args": { + "$ref": "#/components/schemas/arithmeticOperands" + } + } + }, + "functionRef": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "not": { + "enum": [ + "and", + "or", + "not", + "=", + "<>", + "<", + ">", + "<=", + ">=", + "like", + "between", + "in", + "isNull", + "casei", + "accenti", + "s_contains", + "s_crosses", + "s_disjoint", + "s_equals", + "s_intersects", + "s_overlaps", + "s_touches", + "s_within", + "t_after", + "t_before", + "t_contains", + "t_disjoint", + "t_during", + "t_equals", + "t_finishedBy", + "t_finishes", + "t_intersects", + "t_meets", + "t_metBy", + "t_overlappedBy", + "t_overlaps", + "t_startedBy", + "t_starts", + "a_containedBy", + "a_contains", + "a_equals", + "a_overlaps", + "+", + "-", + "*", + "/", + "^", + "%", + "div" + ] + } + }, + "args": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/characterExpression" + }, + { + "$ref": "#/components/schemas/numericExpression" + }, + { + "$ref": "#/components/schemas/cql2" + }, + { + "$ref": "#/components/schemas/spatialInstance" + }, + { + "$ref": "#/components/schemas/temporalInstance" + }, + { + "$ref": "#/components/schemas/arrayExpression" + }, + { + "$ref": "#/components/schemas/propertyRef" + } + ] + } + } + } + }, + "arithmeticOperands": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/arithmeticExpression" + }, + { + "$ref": "#/components/schemas/propertyRef" + }, + { + "$ref": "#/components/schemas/functionRef" + }, + { + "type": "number" + } + ] + } + }, + "numericExpression": { + "oneOf": [ + { + "$ref": "#/components/schemas/arithmeticExpression" + }, + { + "type": "number" + } + ] + }, + "point": { + "title": "GeoJSON Point", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Point" + ] + }, + "coordinates": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + "linestring": { + "title": "GeoJSON LineString", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "LineString" + ] + }, + "coordinates": { + "type": "array", + "minItems": 2, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + "polygon": { + "title": "GeoJSON Polygon", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Polygon" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 4, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + "multipoint": { + "title": "GeoJSON MultiPoint", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiPoint" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + "multilinestring": { + "title": "GeoJSON MultiLineString", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiLineString" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + "multipolygon": { + "title": "GeoJSON MultiPolygon", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiPolygon" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "array", + "minItems": 4, + "items": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + } + } + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + "geometrycollection": { + "title": "GeoJSON GeometryCollection", + "type": "object", + "required": [ + "type", + "geometries" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "GeometryCollection" + ] + }, + "geometries": { + "type": "array", + "minItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/point" + }, + { + "$ref": "#/components/schemas/linestring" + }, + { + "$ref": "#/components/schemas/polygon" + }, + { + "$ref": "#/components/schemas/multipoint" + }, + { + "$ref": "#/components/schemas/multilinestring" + }, + { + "$ref": "#/components/schemas/multipolygon" + } + ] + } + } + } + }, + "geometryLiteral": { + "oneOf": [ + { + "$ref": "#/components/schemas/point" + }, + { + "$ref": "#/components/schemas/linestring" + }, + { + "$ref": "#/components/schemas/polygon" + }, + { + "$ref": "#/components/schemas/multipoint" + }, + { + "$ref": "#/components/schemas/multilinestring" + }, + { + "$ref": "#/components/schemas/multipolygon" + }, + { + "$ref": "#/components/schemas/geometrycollection" + } + ] + }, + "definitions-bbox": { + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 + }, + { + "minItems": 6, + "maxItems": 6 + } + ], + "items": { + "type": "number" + } + }, + "bboxLiteral": { + "type": "object", + "required": [ + "bbox" + ], + "properties": { + "bbox": { + "$ref": "#/components/schemas/definitions-bbox" + } + } + }, + "spatialInstance": { + "oneOf": [ + { + "$ref": "#/components/schemas/geometryLiteral" + }, + { + "$ref": "#/components/schemas/bboxLiteral" + } + ] + }, + "dateString": { + "type": "string", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$" + }, + "dateInstant": { + "type": "object", + "required": [ + "date" + ], + "properties": { + "date": { + "$ref": "#/components/schemas/dateString" + } + } + }, + "timestampString": { + "type": "string", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" + }, + "timestampInstant": { + "type": "object", + "required": [ + "timestamp" + ], + "properties": { + "timestamp": { + "$ref": "#/components/schemas/timestampString" + } + } + }, + "instantInstance": { + "oneOf": [ + { + "$ref": "#/components/schemas/dateInstant" + }, + { + "$ref": "#/components/schemas/timestampInstant" + } + ] + }, + "instantString": { + "oneOf": [ + { + "$ref": "#/components/schemas/dateString" + }, + { + "$ref": "#/components/schemas/timestampString" + } + ] + }, + "intervalArray": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/instantString" + }, + { + "type": "string", + "enum": [ + ".." + ] + }, + { + "$ref": "#/components/schemas/propertyRef" + }, + { + "$ref": "#/components/schemas/functionRef" + } + ] + } + }, + "intervalInstance": { + "type": "object", + "required": [ + "interval" + ], + "properties": { + "interval": { + "$ref": "#/components/schemas/intervalArray" + } + } + }, + "temporalInstance": { + "oneOf": [ + { + "$ref": "#/components/schemas/instantInstance" + }, + { + "$ref": "#/components/schemas/intervalInstance" + } + ] + }, + "arrayExpression": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/characterExpression" + }, + { + "$ref": "#/components/schemas/numericExpression" + }, + { + "$ref": "#/components/schemas/cql2" + }, + { + "$ref": "#/components/schemas/spatialInstance" + }, + { + "$ref": "#/components/schemas/temporalInstance" + }, + { + "$ref": "#/components/schemas/arrayExpression" + }, + { + "$ref": "#/components/schemas/propertyRef" + } + ] + } + }, + "casei": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "casei" + ] + }, + "args": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/characterExpression" + }, + { + "$ref": "#/components/schemas/propertyRef" + }, + { + "$ref": "#/components/schemas/functionRef" + } + ] + }, + "minItems": 1, + "maxItems": 1 + } + } + }, + "accenti": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "accenti" + ] + }, + "args": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/characterExpression" + }, + { + "$ref": "#/components/schemas/propertyRef" + }, + { + "$ref": "#/components/schemas/functionRef" + } + ] + }, + "minItems": 1, + "maxItems": 1 + } + } + }, + "scalarExpression": { + "oneOf": [ + { + "$ref": "#/components/schemas/characterExpression" + }, + { + "$ref": "#/components/schemas/numericExpression" + }, + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/instantInstance" + }, + { + "$ref": "#/components/schemas/functionRef" + }, + { + "$ref": "#/components/schemas/propertyRef" + } + ] + }, + "scalarOperands": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "$ref": "#/components/schemas/scalarExpression" + } + }, + "binaryComparisonPredicate": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "=", + "<>", + "<", + ">", + "<=", + ">=" + ] + }, + "args": { + "$ref": "#/components/schemas/scalarOperands" + } + } + }, + "patternExpression": { + "oneOf": [ + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "casei" + ] + }, + "args": { + "type": "array", + "items": { + "$ref": "#/components/schemas/patternExpression" + }, + "minItems": 1, + "maxItems": 1 + } + } + }, + { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "accenti" + ] + }, + "args": { + "type": "array", + "items": { + "$ref": "#/components/schemas/patternExpression" + }, + "minItems": 1, + "maxItems": 1 + } + } + }, + { + "type": "string" + } + ] + }, + "isLikeOperands": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/characterExpression" + }, + { + "$ref": "#/components/schemas/propertyRef" + }, + { + "$ref": "#/components/schemas/functionRef" + }, + { + "$ref": "#/components/schemas/patternExpression" + } + ] + } + }, + "isLikePredicate": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "like" + ] + }, + "args": { + "$ref": "#/components/schemas/isLikeOperands" + } + } + }, + "isBetweenOperands": { + "type": "array", + "minItems": 3, + "maxItems": 3, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/numericExpression" + }, + { + "$ref": "#/components/schemas/propertyRef" + }, + { + "$ref": "#/components/schemas/functionRef" + } + ] + } + }, + "isBetweenPredicate": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "between" + ] + }, + "args": { + "$ref": "#/components/schemas/isBetweenOperands" + } + } + }, + "inListOperands": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/scalarExpression" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/scalarExpression" + } + } + ] + } + }, + "isInListPredicate": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "in" + ] + }, + "args": { + "$ref": "#/components/schemas/inListOperands" + } + } + }, + "isNullOperand": { + "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/characterExpression" + }, + { + "$ref": "#/components/schemas/numericExpression" + }, + { + "$ref": "#/components/schemas/cql2" + }, + { + "$ref": "#/components/schemas/spatialInstance" + }, + { + "$ref": "#/components/schemas/temporalInstance" + }, + { + "$ref": "#/components/schemas/propertyRef" + } + ] + } + }, + "isNullPredicate": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "isNull" + ] + }, + "args": { + "$ref": "#/components/schemas/isNullOperand" + } + } + }, + "comparisonPredicate": { + "oneOf": [ + { + "$ref": "#/components/schemas/binaryComparisonPredicate" + }, + { + "$ref": "#/components/schemas/isLikePredicate" + }, + { + "$ref": "#/components/schemas/isBetweenPredicate" + }, + { + "$ref": "#/components/schemas/isInListPredicate" + }, + { + "$ref": "#/components/schemas/isNullPredicate" + } + ] + }, + "spatialOperands": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/spatialInstance" + }, + { + "$ref": "#/components/schemas/propertyRef" + }, + { + "$ref": "#/components/schemas/functionRef" + } + ] + } + }, + "spatialPredicate": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "s_contains", + "s_crosses", + "s_disjoint", + "s_equals", + "s_intersects", + "s_overlaps", + "s_touches", + "s_within" + ] + }, + "args": { + "$ref": "#/components/schemas/spatialOperands" + } + } + }, + "temporalOperands": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/temporalInstance" + }, + { + "$ref": "#/components/schemas/propertyRef" + }, + { + "$ref": "#/components/schemas/functionRef" + } + ] + } + }, + "temporalPredicate": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "t_after", + "t_before", + "t_contains", + "t_disjoint", + "t_during", + "t_equals", + "t_finishedBy", + "t_finishes", + "t_intersects", + "t_meets", + "t_metBy", + "t_overlappedBy", + "t_overlaps", + "t_startedBy", + "t_starts" + ] + }, + "args": { + "$ref": "#/components/schemas/temporalOperands" + } + } + }, + "arrayOperands": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/arrayExpression" + }, + { + "$ref": "#/components/schemas/propertyRef" + }, + { + "$ref": "#/components/schemas/functionRef" + } + ] + } + }, + "arrayPredicate": { + "type": "object", + "required": [ + "op", + "args" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "a_containedBy", + "a_contains", + "a_equals", + "a_overlaps" + ] + }, + "args": { + "$ref": "#/components/schemas/arrayOperands" + } + } + }, + "ogcapppkg-array": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/executionUnit" + }, + { + "$ref": "#/components/schemas/link" + }, + { + "$ref": "#/components/schemas/qualifiedValue" + } + ] + } + }, + "CWLKeywordList": { + "title": "KeywordList", + "type": "array", + "description": "Keywords applied to the process for search and categorization purposes.", + "items": { + "type": "string", + "title": "keyword", + "minLength": 1 + } + }, + "CWLTextPatternID": { + "description": "Identifier with text pattern that can allow additional non-ASCII characters depending on regex implementation.\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." + }, + "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." + }, + "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+)$" + } + }, + "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 + }, + "CUDAComputeCapability": { + "oneOf": [ + { + "type": "string", + "title": "CUDA compute capability", + "description": "The compute capability supported by the GPU hardware.", + "pattern": "^\\d+\\.\\d+$" + }, + { + "$ref": "#/components/schemas/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" + }, + "ReferenceURL": { + "type": "string", + "format": "url", + "pattern": "^((?:http|ftp)s?:\\/\\/)?(?!.*\\/\\/.*$)(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,6}\\.?|[A-Za-z0-9-]{2,}\\.?)|localhost|\\[[a-f0-9:]+\\]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:\\/?|[/?]\\S+)$" + }, + "CWLTypeSymbolValues": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "title": "CWLTypeSymbolValues" + }, + "CWLTypeSymbols": { + "type": "array", + "title": "CWLTypeSymbols (Allowed values composing the enum).", + "items": { + "$ref": "#/components/schemas/CWLTypeSymbolValues" + } + }, + "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\\-.]+$" + }, + "CWLFormat": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLExpression" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CWLExpression" + } + } + ] + }, + "LoadListingEnum": { + "type": "string", + "title": "LoadListingEnum", + "enum": [ + "no_listing", + "shallow_listing", + "deep_listing" + ] + }, + "CWLDirectoryOnlyParameters": { + "type": "object", + "properties": { + "loadListing": { + "$ref": "#/components/schemas/LoadListingEnum" + } + } + }, + "CWLTypeRecordFieldsItem": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLTypeRecordFieldDef" + }, + { + "required": [ + "name" + ] + } + ] + }, + "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\\-.]+$" + }, + "InlineJavascriptLibObject": { + "type": "object", + "properties": { + "$include": { + "type": "string" + } + }, + "required": [ + "$include" + ], + "additionalProperties": false + }, + "InlineJavascriptLibItem": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/InlineJavascriptLibObject" + } + ] + }, + "InlineJavascriptLibraries": { + "type": "array", + "title": "InlineJavascriptLibraries", + "description": "Additional code fragments that will also be inserted before executing the expression code.\nAllows for function definitions that may be called from CWL expressions.\n", + "items": { + "title": "exp_lib", + "$ref": "#/components/schemas/InlineJavascriptLibItem" + } + }, + "ResourceCoresMinimum": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceCoresMinimum (Minimum reserved number of CPU cores).", + "description": "Minimum reserved number of CPU cores.\n\nMay be a fractional value to indicate to a scheduling algorithm that one core can be allocated to\nmultiple jobs. For example, a value of 0.25 indicates that up to 4 jobs\nmay run in parallel on 1 core. A value of 1.25 means that up to 3 jobs\ncan run on a 4 core system (4/1.25 ~ 3).\n\nProcesses can only share a core allocation if the sum of each of their 'ramMax', 'tmpdirMax', and\n'outdirMax' requests also do not exceed the capacity of the node.\n\nProcesses sharing a core must have the same level of isolation (typically a container\nor VM) that they would normally have.\n\nThe reported number of CPU cores reserved for the process, which is available to expressions\non the 'CommandLineTool' as 'runtime.cores', must be a non-zero integer, and may be calculated by\nrounding up the cores request to the next whole number.\n\nScheduling systems may allocate fractional CPU resources by setting quotas or scheduling weights.\nScheduling systems that do not support fractional CPUs may round up the request to the next whole number.\n", + "default": 1 + }, + "ResourceCoresMaximum": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceCoresMaximum (Maximum reserved number of CPU cores).", + "description": "Maximum reserved number of CPU cores.\nSee 'coresMin' for discussion about fractional CPU requests.\n" + }, + "ResourceRAMMinimum": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceRAMMinimum (Minimum reserved RAM in mebibytes).", + "description": "Minimum reserved RAM in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual RAM request must be rounded up\nto the next whole number.\n\nThe reported amount of RAM reserved for the process, which is available to\nexpressions on the 'CommandLineTool' as 'runtime.ram', must be a non-zero integer.\n", + "default": 256 + }, + "ResourceRAMMaximum": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceRAMMaximum (Maximum reserved RAM in mebibytes).", + "description": "Maximum reserved RAM in mebibytes (2**20).\nSee 'ramMin' for discussion about fractional RAM requests.\n" + }, + "ResourceTmpDirMinimum": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceTmpDirMinimum (Minimum reserved filesystem based storage for the designated temporary) directory in mebibytes.", + "description": "Minimum reserved filesystem based storage for the designated temporary\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.tmpdirSize', must be a non-zero integer.\n", + "default": 1024 + }, + "ResourceTmpDirMaximum": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceTmpDirMaximum (Maximum reserved filesystem based storage for the designated temporary directory in mebibytes).", + "description": "Maximum reserved filesystem based storage for the designated temporary directory in mebibytes (2**20).\nSee 'tmpdirMin' for discussion about fractional storage requests.\n" + }, + "ResourceOutDirMinimum": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceOutDirMinimum (Minimum reserved filesystem based storage for the designated output directory in mebibytes).", + "description": "Minimum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\n\nMay be a fractional value. If so, the actual storage request must be rounded\nup to the next whole number.\n\nThe reported amount of storage reserved for the process, which is available\nto expressions on the 'CommandLineTool' as 'runtime.outdirSize', must be a non-zero integer.\n", + "default": 1024 + }, + "ResourceOutDirMaximum": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResourceQuantityOrFractional" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "ResourceOutDirMaximum (Maximum reserved filesystem based storage for the designated output directory in mebibytes).", + "description": "Maximum reserved filesystem based storage for the designated output\ndirectory in mebibytes (2**20).\nSee 'outdirMin' for discussion about fractional storage requests.\n", + "default": 1 + }, + "TimeLimitValue": { + "oneOf": [ + { + "type": "number", + "minimum": 0 }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "TimeLimitValue", + "description": "The time limit, in seconds.\n\nA time limit of zero means no time limit.\nNegative time limits are an error.\n" + }, + "EnableReuseValue": { + "oneOf": [ { "type": "boolean" + }, + { + "$ref": "#/components/schemas/CWLExpression" + } + ], + "title": "EnableReuseValue", + "description": "Indicates if reuse is enabled for this tool.\n\nCan be an expression when combined with 'InlineJavascriptRequirement'\n(see also: https://www.commonwl.org/v1.2/CommandLineTool.html#Expression).\n" + }, + "BuiltinRequirement": { + "type": "object", + "title": "BuiltinRequirement", + "description": "Hint indicating that the Application Package corresponds to a\nbuiltin process of this instance. (note: can only be an 'hint'\nas it is unofficial CWL specification).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "BuiltinRequirement" + ] + }, + "process": { + "description": "Builtin process identifier.", + "$ref": "#/components/schemas/CWLTextPatternID" + } + }, + "required": [ + "process", + "class" + ], + "additionalProperties": false + }, + "OGCAPIRequirement": { + "type": "object", + "title": "OGCAPIRequirement", + "description": "Hint indicating that the Application Package corresponds to an\nOGC API - Processes provider that should be remotely executed and monitored\nby this instance. (note: can only be an 'hint' as it is unofficial CWL specification).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "OGCAPIRequirement" + ] + }, + "process": { + "description": "Process location.", + "$ref": "#/components/schemas/ReferenceURL" + } + }, + "required": [ + "process" + ], + "additionalProperties": false + }, + "WPS1Requirement": { + "type": "object", + "title": "WPS1Requirement", + "description": "Hint indicating that the Application Package corresponds to a\nWPS-1 provider process that should be remotely executed and monitored by this\ninstance. (note: can only be an ''hint'' as it is unofficial CWL specification).\n", + "properties": { + "class": { + "type": "string", + "enum": [ + "WPS1Requirement" + ] + }, + "process": { + "description": "Process identifier of the remote WPS provider.", + "$ref": "#/components/schemas/CWLTextPatternID" + }, + "provider": { + "description": "WPS provider endpoint.", + "$ref": "#/components/schemas/ReferenceURL" + } + }, + "required": [ + "process", + "provider" + ], + "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" + ] + } + } + } + }, + "CWLHintsMapExtras": { + "type": "object", + "properties": { + "BuiltinRequirement": { + "$ref": "#/components/schemas/BuiltinRequirement" + }, + "OGCAPIRequirement": { + "$ref": "#/components/schemas/OGCAPIRequirement" + }, + "WPS1Requirement": { + "$ref": "#/components/schemas/WPS1Requirement" + } + }, + "additionalProperties": { + "$ref": "#/components/schemas/UnknownRequirement" + } + }, + "CWLHintsItemExtras": { + "oneOf": [ + { + "$ref": "#/components/schemas/BuiltinRequirement" + }, + { + "$ref": "#/components/schemas/OGCAPIRequirement" + }, + { + "$ref": "#/components/schemas/WPS1Requirement" + }, + { + "$ref": "#/components/schemas/UnknownRequirement" } ] }, - "enumeration": { + "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/CWLRequirementsItem" + }, + { + "$ref": "#/components/schemas/CWLHintsItemExtras" + } + ] + }, + "CommandParts": { + "type": "array", + "title": "Command Parts", + "items": { + "type": "string", + "title": "cmd" + }, + "additionalProperties": false + }, + "CWLInputItemBase": { "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLType" + }, + { + "$ref": "#/components/schemas/CWLInputStdIn" + } + ] + }, + "inputBinding": { + "$ref": "#/components/schemas/InputBinding" + }, + "id": { + "description": "Identifier of the CWL input.", + "$ref": "#/components/schemas/CWLIdentifier" + } + }, "required": [ "type", - "enum" + "id" ], + "additionalProperties": {} + }, + "CWLInputObjectBase": { + "type": "object", "properties": { "type": { - "type": "string", - "enum": [ - "enum" - ] + "$ref": "#/components/schemas/CWLType" }, - "enum": { - "type": "array", - "items": { - "type": "string" - } + "inputBinding": { + "$ref": "#/components/schemas/InputBinding" } - } - }, - "processes-list": { - "type": "string", - "enum": [ - "RenderMap", - "ElevationContours", - "OSMERE" - ] + }, + "required": [ + "type" + ], + "additionalProperties": {} }, - "processSummary": { + "CWLInputObject": { + "title": "CWLInputObject (CWL type definition with parameters).", "allOf": [ { - "$ref": "#/components/schemas/descriptionType" + "$ref": "#/components/schemas/CWLInputObjectBase" }, { - "type": "object", - "required": [ - "id", - "version" - ], - "properties": { - "id": { - "type": "string" - }, - "version": { - "type": "string" - }, - "jobControlOptions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/jobControlOptions" - } + "$ref": "#/components/schemas/CWLDefaultTypedConditional" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + } + ] + }, + "OutputBinding": { + "type": "object", + "title": "OutputBinding", + "description": "Defines how to retrieve the output result from the command.", + "properties": { + "glob": { + "description": "Glob pattern to find the output on disk or mounted docker volume.", + "oneOf": [ + { + "$ref": "#/components/schemas/CWLExpression" }, - "links": { + { "type": "array", "items": { - "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" + "$ref": "#/components/schemas/CWLExpression" } } - } + ] + } + } + }, + "CWLOutputObjectBase": { + "type": "object", + "title": "CWLOutputObject (CWL type definition with parameters).", + "properties": { + "type": { + "$ref": "#/components/schemas/CWLType" + }, + "outputBinding": { + "$ref": "#/components/schemas/OutputBinding" } + }, + "required": [ + "type" ] }, - "process": { - "allOf": [ + "CWLScatterMulti": { + "type": "array", + "title": "CWLScatterMulti", + "items": { + "$ref": "#/components/schemas/CWLIdentifier" + } + }, + "CWLScatter": { + "oneOf": [ { - "$ref": "#/components/schemas/processSummary" + "$ref": "#/components/schemas/CWLIdentifier" }, { - "type": "object", - "properties": { - "inputs": { - "additionalProperties": { - "$ref": "#/components/schemas/inputDescription" - } - }, - "outputs": { - "additionalProperties": { - "$ref": "#/components/schemas/outputDescription" - } - } - } + "$ref": "#/components/schemas/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" + }, + "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" ] }, - "processList": { + "CWLGraphItemBase": { "type": "object", - "required": [ - "processes", - "links" - ], + "title": "CWLGraphItem", "properties": { - "processes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/processSummary" - } + "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" + ] }, - "links": { - "type": "array", - "items": { - "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" - } + "id": { + "$ref": "#/components/schemas/CWLIdentifier" + }, + "intent": { + "$ref": "#/components/schemas/CWLIntent" + }, + "requirements": { + "$ref": "#/components/schemas/CWLRequirements" + }, + "hints": { + "$ref": "#/components/schemas/CWLHints" + }, + "baseCommand": { + "$ref": "#/components/schemas/CWLCommand" + }, + "arguments": { + "$ref": "#/components/schemas/CWLArguments" + }, + "inputs": { + "$ref": "#/components/schemas/CWLInputsDefinition" + }, + "outputs": { + "$ref": "#/components/schemas/CWLOutputsDefinition" + }, + "scatter": { + "$ref": "#/components/schemas/CWLScatter" + }, + "scatterMethod": { + "$ref": "#/components/schemas/CWLScatterMethod" } - } + }, + "required": [ + "class", + "id", + "inputs", + "outputs" + ] }, - "jobList": { + "CWLGraphItem": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "$ref": "#/components/schemas/CWLGraphItemBase" + } + ] + }, + "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 + }, + "CWLGraphBase": { "type": "object", - "required": [ - "jobs", - "links" - ], "properties": { - "jobs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/statusInfo" - } + "$graph": { + "$ref": "#/components/schemas/CWLGraphList" + } + }, + "required": [ + "$graph" + ] + }, + "LinkMergeMethod": { + "type": "string", + "enum": [ + "merge_nested", + "merge_flattened" + ] + }, + "CWLWorkflowStepInput": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepInputBase" }, - "links": { - "type": "array", - "items": { - "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" - } + { + "$ref": "#/components/schemas/CWLWorkflowStepInputDefault" } - } + ] }, - "bbox-processes": { + "CWLWorkflowNested": { + "description": "Same as 'CWLWorkflow', but 'cwlVersion' not repeated (only at root).", + "allOf": [ + { + "$ref": "#/components/schemas/CWLMetadata" + }, + { + "$ref": "#/components/schemas/CWLDocumentation" + }, + { + "$ref": "#/components/schemas/CWLWorkflowClass" + }, + { + "$ref": "#/components/schemas/CWLWorkflowBase" + } + ] + }, + "CWLWorkflowStepOutId": { "type": "object", - "required": [ - "bbox" - ], "properties": { - "bbox": { - "type": "array", - "oneOf": [ - { - "minItems": 4, - "maxItems": 4 - }, - { - "minItems": 6, - "maxItems": 6 - } - ], - "items": { - "type": "number" - } - }, - "crs": { - "anyOf": [ - { - "type": "string", - "format": "uri", - "enum": [ - "http://www.opengis.net/def/crs/OGC/1.3/CRS84", - "http://www.opengis.net/def/crs/OGC/0/CRS84h" - ], - "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" - }, - { - "type": "string", - "format": "uri", - "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" - } - ] + "id": { + "$ref": "#/components/schemas/CWLIdentifier" } - } + }, + "required": [ + "id" + ], + "additionalProperties": false }, - "descriptionType": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "keywords": { - "type": "array", - "items": { - "type": "string" + "$defs-CWLWorkflowStepOut": { + "description": "Mapping of Workflow step inputs to nested CWL tool definitions inputs or outputs.", + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLIdentifier" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepOutId" } + ] + } + }, + "IdentifierArray": { + "type": "array", + "title": "IdentifierArray", + "items": { + "$ref": "#/components/schemas/CWLTextPatternID" + }, + "minItems": 1 + }, + "Scatter": { + "oneOf": [ + { + "$ref": "#/components/schemas/CWLTextPatternID" }, - "metadata": { - "type": "array", - "items": { - "$ref": "#/components/schemas/metadata" - } + { + "$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" }, - "binaryValue": { - "type": "string" + "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" + ] }, - "execute-workflow": { + "CWLWorkflowStepItem": { + "allOf": [ + { + "$ref": "#/components/schemas/CWLWorkflowStepId" + }, + { + "$ref": "#/components/schemas/CWLWorkflowStepObject" + } + ] + }, + "execute-workflows": { "allOf": [ { "type": "object", @@ -5925,30 +6493,12 @@ }, "inputs": { "additionalProperties": { - "oneOf": [ - { - "$ref": "#/components/schemas/inlineOrRefValue-workflows" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/inlineOrRefValue-workflows" - } - } - ] + "$ref": "#/components/schemas/input-workflows" } }, "outputs": { "additionalProperties": { - "type": "object", - "properties": { - "format": { - "$ref": "#/components/schemas/format" - }, - "$output": { - "type": "string" - } - } + "$ref": "#/components/schemas/output-workflows" } }, "subscriber": { @@ -5978,215 +6528,205 @@ } ] }, - "inputParameterized": { + "inputProcess": { "allOf": [ { "type": "object", "required": [ - "$input" - ], - "properties": { - "$input": { - "type": "string" - } - } + "process" + ] }, { - "$ref": "#/components/schemas/fieldsModifiers" + "$ref": "#/components/schemas/execute-workflows" } ] }, - "format": { - "type": "object", - "properties": { - "mediaType": { - "type": "string" - }, - "encoding": { - "type": "string" + "inputValue-workflows": { + "oneOf": [ + { + "$ref": "#/components/schemas/valueNoObject-workflows" }, - "schema": { - "oneOf": [ - { - "type": "string", - "format": "url" - }, - { - "type": "object" - } - ] + { + "type": "object" } - } + ] }, - "inputDescription": { + "qualifiedValue-workflows": { "allOf": [ { - "$ref": "#/components/schemas/descriptionType" - }, - { - "$ref": "#/components/schemas/dataClasses" - }, - { - "$ref": "#/components/schemas/dataAccessAPIs" + "$ref": "#/components/schemas/format" }, { - "type": "object", - "properties": { - "executionUnitRequirements": { - "type": "object", - "properties": { - "remote-access": { - "type": "boolean" - }, - "staging": { - "type": "string", - "enum": [ - "local-file", - "remote-access" - ] - } - } - } - } + "$ref": "#/components/schemas/fieldsModifiers" }, { "type": "object", "required": [ - "schema" + "value" ], "properties": { - "schema": { - "$ref": "#/components/schemas/schema" - }, - "minOccurs": { - "type": "integer", - "default": 1 - }, - "maxOccurs": { - "oneOf": [ - { - "type": "integer", - "default": 1 - }, - { - "type": "string", - "enum": [ - "unbounded" - ] - } - ] - }, - "valuePassing": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "byValue", - "byReference" - ] - }, - "default": [ - "byValue", - "byReference" - ] + "value": { + "$ref": "#/components/schemas/inputValue-workflows" } } } ] }, - "inputValue": { - "anyOf": [ + "input-workflows": { + "oneOf": [ { - "$ref": "#/components/schemas/valueNoObject" + "$ref": "#/components/schemas/inlineOrRefValue-workflows" }, { - "type": "object" + "type": "array", + "items": { + "$ref": "#/components/schemas/inlineOrRefValue-workflows" + } } ] }, - "collectionValue": { - "allOf": [ - { + "output-workflows": { + "type": "object", + "properties": { + "format": { "$ref": "#/components/schemas/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\".", - "type": "string", - "format": "uri-reference" - }, - "bbox": { - "description": "Only resources that have a geometry that intersects the bounding box\nare selected. The bounding box is provided as four or six numbers,\ndepending on whether the coordinate reference system includes a\nvertical axis (height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)\n\nIf the value consists of four numbers, the coordinate reference\nsystem is WGS84 longitude/latitude\n (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in the\nparameter `bboxCrs`.\n\nIf the value consists of six numbers, the coordinate reference system\nis WGS84 (http://www.opengis.net/def/crs/OGC/0/CRS84h) longitude/\nlatitude/ ellipsoidal height unless a different coordinate reference\nsystem is specified in the parameter `bboxCrs`.\n\nFor WGS84 longitude/latitude the values are in most cases the sequence\nof minimum longitude, minimum latitude, maximum longitude and maximum\nlatitude. However, in cases where the box spans the antimeridian the\nfirst value (west-most box edge) is larger than the third value\n(east-most box edge).\n\nIf the vertical axis is included, the third and the sixth number are\nthe bottom and the top of the 3-dimensional bounding box.\n\nIf a resource has multiple spatial geometry properties, it is the\ndecision of the server whether only a single spatial geometry property\nis used to determine the extent or all relevant geometries.", - "type": "array", - "oneOf": [ - { - "minItems": 4, - "maxItems": 4 - }, - { - "minItems": 6, - "maxItems": 6 - } - ], - "items": { - "type": "number" - } - }, - "bboxCrs": { - "description": "Asserts the CRS used for the coordinate values of the `bbox`\nparameter. The default is WGS 84 or WGS84h depending on whether\nellipsoidal height is included or not:\n * WGS 84 longitude/latitude [4 numbers]\n (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\n * WGS 84h longitude/latitude/ellipsoidal height [6 numbers]\n (http://www.opengis.net/def/crs/OGC/0/CRS84h_", - "type": "string", - "format": "uri" - }, - "geometry": { - "description": "Only resources that have a geometry that intersects the geometry\nspecified using the `geometry` parameter are selected. The value of\nthe `geometry` parameter can be specified using WKT or GeoJSON.\nIf a resource has multiple spatial geometry properties, it is the\ndecision of the server whether only a single spatial geometry property\nis used to determine the extent or all relevant geometries.", - "oneOf": [ - { - "type": "string" - }, - { - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Point" - ] - }, - "coordinates": { + "$output": { + "type": "string" + } + } + }, + "FeatureCollection": { + "title": "GeoJSON FeatureCollection", + "type": "object", + "required": [ + "type", + "features" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "FeatureCollection" + ] + }, + "features": { + "type": "array", + "items": { + "title": "GeoJSON Feature", + "type": "object", + "required": [ + "type", + "properties", + "geometry" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feature" + ] + }, + "id": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "properties": { + "type": "object", + "nullable": true + }, + "geometry": { + "oneOf": [ + { + "title": "GeoJSON Point", + "type": "object", + "nullable": true, + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Point" + ] + }, + "coordinates": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + } + } + }, + { + "title": "GeoJSON LineString", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "LineString" + ] + }, + "coordinates": { + "type": "array", + "minItems": 2, + "items": { "type": "array", "minItems": 2, "items": { "type": "number" } } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } } - }, - { - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MultiPoint" - ] - }, - "coordinates": { + } + }, + { + "title": "GeoJSON Polygon", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Polygon" + ] + }, + "coordinates": { + "type": "array", + "items": { "type": "array", + "minItems": 4, "items": { "type": "array", "minItems": 2, @@ -6195,77 +6735,103 @@ } } } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } } - }, - { - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "LineString" - ] - }, - "coordinates": { + } + }, + { + "title": "GeoJSON MultiPoint", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiPoint" + ] + }, + "coordinates": { + "type": "array", + "items": { "type": "array", "minItems": 2, "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } + "type": "number" } } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } } - }, - { - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MultiLineString" - ] - }, - "coordinates": { + } + }, + { + "title": "GeoJSON MultiLineString", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiLineString" + ] + }, + "coordinates": { + "type": "array", + "items": { "type": "array", + "minItems": 2, "items": { "type": "array", "minItems": 2, "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } + "type": "number" } } } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } } - }, - { - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Polygon" - ] - }, - "coordinates": { + } + }, + { + "title": "GeoJSON MultiPolygon", + "type": "object", + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MultiPolygon" + ] + }, + "coordinates": { + "type": "array", + "items": { "type": "array", "items": { "type": "array", @@ -6278,953 +6844,1054 @@ } } } - } - } - }, - { - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MultiPolygon" - ] - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "array", - "minItems": 4, - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - } - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "geometries" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "GeometryCollection" - ] - }, - "geometries": { - "type": "array", - "items": { - "$ref": "#/components/schemas/collectionValue/allOf/1/properties/geometry/oneOf/1" - } - } - } - } - ] - } - ] - }, - "geometryCrs": { - "description": "Asserts the CRS used for the coordinate values of the `geometry`\nparameter. The default is WGS 84 or WGS84h depending on whether\nellipsoidal height is included or not:\n * WGS 84 longitude/latitude [4 numbers]\n (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\n * WGS 84h longitude/latitude/ellipsoidal height [6 numbers]\n (http://www.opengis.net/def/crs/OGC/0/CRS84h_", - "type": "string" - }, - "datetime": { - "description": "Either a date-time or an interval, half-bounded or bounded. Date and\ntime expressions adhere to RFC 3339. Half-bounded intervals are\nexpressed using double-dots.\n\nExamples:\n * A date-time:\n \"2018-02-12T23:20:50Z\"\n * A bounded interval:\n \"2018-02-12T00:00:00Z/2018-03-18T12:31:12Z\"\n * Half-bounded intervals:\n \"2018-02-12T00:00:00Z/..\" or \"../2018-03-18T12:31:12Z\"\n\nOnly resources that have a temporal property that intersects the\nvalue of `datetime` are selected.\n\nIf a resource has multiple temporal properties, it is the decision of\nthe server whether only a single temporal property is used to\ndetermine the extent or all relevant temporal properties.", - "type": "string" - }, - "limit": { - "description": "The optional limit parameter limits the number of items that are\npresented in the response document.\nOnly items are counted that are on the first level of the collection\nin the response document. Nested objects contained within the\nexplicitly requested items shall not be counted.", - "type": "integer", - "minimum": 1, - "maximum": 10000, - "default": 10 - }, - "crs": { - "description": "If the parameter is specified, then the coordinates of all\ngeometry-valued properties in the response document are in\nthe requested CRS. Otherwise the coordinates are in the default CRS,\nthat is http://www.opengis.net/def/crs/OGC/1.3/CRS84 for coordinates\nwithout height and http://www.opengis.net/def/crs/OGC/0/CRS84h for\ncoordinates with ellipsoidal height.", - "type": "string", - "format": "uri" - }, - "filter": { - "description": "A search or filter condition. This condition determines which\nresources from the OGC API collection are included in the result\nset and are thus passed as values to the corresponding process input.\nThe `filter` parameter can be a string where the search condition is\nencoded in some text-based query langauge (e.g. cql2-text) or a\nCQL2 JSON object that encodes the search condition using JSON.", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/CQL2" - } - ] - }, - "filterCrs": { - "description": "Asserts the CRS used for the coordinate values of the `filter`\nparameter. The default is WGS 84 or WGS 84h depending on whether\nellispoidal jeight is included with the coordinates or not:\n * WGS 84 longitude/latitude\n (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\n * WGS 84h longitude/latitude/ellipsoidal height\n (http://www.opengis.net/def/crs/OGC/0/CRS84h_", - "type": "string", - "format": "uri-reference" - }, - "filterLang": { - "description": "Indicates the language used to encode a filter expression specified\nusing the `filter` parameter. Query languages can include CQL2 text,\nCQL 2 JSON or OGC Filter Encoding (XML).", - "type": "string", - "enum": [ - "cql2-text", - "cql2-json", - "fes-xml" - ] - }, - "subset": { - "description": "Retrieve only part of the data by slicing or trimming along one or\nmore axis. For trimming: {axisAbbrev}({low}:{high}) (preserves\ndimensionality). An asterisk (`*`) can be used instead of {low} or\n{high} to indicate the minimum/maximum value. For slicing:\n{axisAbbrev}({value}) (reduces dimensionality).", - "type": "array", - "items": { - "type": "string" - } - }, - "subsetCrs": { - "description": "Asserts the CRS used for the coordinate values of the `subset`\nparameter. The default is WGS 84 or WGS 84h depending on whether\nellispoidal height in included with the coordinates or not:\n * WGS 84 longitude/latitude\n (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\n * WGS 84h longitude/latitude/ellipsoidal height\n (http://www.opengis.net/def/crs/OGC/0/CRS84h_", - "type": "string" - }, - "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" - } - ] + } + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } } } } ] + }, + "bbox": { + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } } - }, - "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" } } - } - ] - }, - "valueNoObject": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "integer" }, - { - "type": "boolean" - }, - { + "bbox": { "type": "array", + "minItems": 4, "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/inputValue" - }, - { - "$ref": "#/components/schemas/qualifiedValue" - } - ] + "type": "number" } - }, - { - "$ref": "#/components/schemas/binaryValue" - }, - { - "$ref": "#/components/schemas/bbox-processes" - }, - { - "$ref": "#/components/schemas/collectionValue" } - ] + } }, - "valueNoObject-workflows": { + "roles": { + "title": "Types or roles", + "description": "The list of duties, job functions or permissions assigned by the system and associated with the context of this member.", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "contact": { + "type": "object", + "title": "Contact information", + "description": "Identification of, and means of communication with, person responsible\nfor the resource.", "anyOf": [ { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "integer" - }, - { - "type": "boolean" - }, - { - "type": "array", - "items": {} + "required": [ + "name" + ] }, { - "$ref": "#/components/schemas/binaryValue" + "required": [ + "organization" + ] + } + ], + "properties": { + "identifier": { + "type": "string", + "title": "Identifier of the contact", + "description": "A value uniquely identifying a contact." }, - { - "$ref": "#/components/schemas/bbox-processes" + "name": { + "type": "string", + "title": "name of the contact person", + "description": "The name of the responsible person." }, - { - "$ref": "#/components/schemas/collectionValue" + "position": { + "type": "string", + "title": "position in the organization", + "description": "The name of the role or position of the responsible person taken\nfrom the organization's formal organizational hierarchy or chart." }, - { - "allOf": [ - { - "type": "object", - "required": [ - "process" - ] - }, - { - "$ref": "#/components/schemas/execute-workflow" - } - ] + "organization": { + "type": "string", + "title": "Name of the organization", + "description": "Organization/affiliation of the contact." }, - { - "$ref": "#/components/schemas/inputParameterized" - } - ] - }, - "jobControlOptions": { - "type": "string", - "enum": [ - "sync-execute", - "async-execute", - "dismiss" - ] - }, - "metadata": { - "oneOf": [ - { + "logo": { + "title": "Logo of the contact", + "description": "Link to a graphic identifying a contact. The link relation should be `icon`\nand the media type should be an image media type.", "allOf": [ { - "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" + "$ref": "#/components/schemas/link" }, { "type": "object", + "required": [ + "rel", + "type" + ], "properties": { - "role": { - "type": "string" + "rel": { + "enum": [ + "icon" + ] } } } ] }, - { - "type": "object", - "properties": { - "role": { - "type": "string" - }, - "title": { - "type": "string" - }, - "lang": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] + "phones": { + "type": "array", + "title": "Telephone numbers", + "description": "Telephone numbers at which contact can be made.", + "items": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string", + "title": "Phone number.", + "description": "The value is the phone number itself.", + "pattern": "^\\+[1-9]{1}[0-9]{3,14}$", + "example": "+14165550142" + }, + "roles": { + "title": "Type of phone number.", + "description": "The type of phone number (e.g. home, work, fax, etc.).", + "$ref": "#/components/schemas/roles" + } } } - } - ] - }, - "output": { - "type": "object", - "properties": { - "format": { - "$ref": "#/components/schemas/format" - } - } - }, - "outputDescription": { - "allOf": [ - { - "$ref": "#/components/schemas/descriptionType" - }, - { - "$ref": "#/components/schemas/dataClasses" }, - { - "$ref": "#/components/schemas/dataAccessAPIs" - }, - { - "type": "object", - "required": [ - "schema" - ], - "properties": { - "schema": { - "$ref": "#/components/schemas/schema" + "emails": { + "type": "array", + "title": "Email addresses", + "description": "Email addresses at which contact can be made.", + "items": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string", + "title": "Email address", + "description": "The value is the email itself.", + "format": "email" + }, + "roles": { + "title": "Type of email", + "description": "The type of email (e.g. home, work, etc.).", + "$ref": "#/components/schemas/roles" + } } } - } - ] - }, - "qualifiedValue": { - "allOf": [ - { - "$ref": "#/components/schemas/format" }, - { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "$ref": "#/components/schemas/inputValue" + "addresses": { + "type": "array", + "title": "Postal addresses", + "description": "Physical locations at which contact can be made.", + "items": { + "type": "object", + "properties": { + "deliveryPoint": { + "type": "array", + "title": "Details of the address", + "description": "Address lines for the location (e.g. street name and door number).", + "items": { + "type": "string" + } + }, + "city": { + "type": "string", + "title": "City", + "description": "City for the location." + }, + "administrativeArea": { + "type": "string", + "title": "State of province", + "description": "State or province of the location." + }, + "postalCode": { + "type": "string", + "title": "Postal code", + "description": "ZIP or other postal code." + }, + "country": { + "type": "string", + "title": "Country", + "description": "Country of the physical address. ISO 3166-1 is recommended." + }, + "roles": { + "title": "Type of postal address", + "description": "The type of postal address (e.g. office, home, etc.).", + "$ref": "#/components/schemas/roles" + } } } + }, + "links": { + "type": "array", + "title": "Links about the contact", + "description": "On-line information about the contact.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/link" + }, + { + "type": "object", + "required": [ + "type" + ] + } + ] + } + }, + "hoursOfService": { + "type": "string", + "title": "Hours of service", + "description": "Time period when the contact can be contacted.", + "example": "Hours: Mo-Fr 10am-7pm Sa 10am-22pm Su 10am-21pm" + }, + "contactInstructions": { + "type": "string", + "title": "Contact instructions", + "description": "Supplemental instructions on how or when to contact can be made." + }, + "roles": { + "title": "Types of contact person", + "description": "The set of named duties, job functions and/or permissions associated with this contact. (e.g. developer, administrator, etc.).", + "$ref": "#/components/schemas/roles" } - ] + } }, - "reference": { + "format-2": { "type": "object", - "required": [ - "$ref" + "anyOf": [ + { + "required": [ + "name" + ] + }, + { + "required": [ + "mediaType" + ] + } ], "properties": { - "$ref": { - "type": "string", - "format": "uri-reference" + "name": { + "title": "Name of the format", + "description": "Name of the format.", + "type": "string" + }, + "mediaType": { + "title": "Media type of the format", + "description": "Media type of the format.", + "type": "string" } - }, - "additionalProperties": false - }, - "results": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/inlineOrRefValue" } }, - "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", + "theme": { "type": "object", "required": [ - "type", - "properties" + "concepts", + "scheme" ], "properties": { - "type": { - "type": "string", - "enum": [ - "object" - ] - }, - "required": { + "concepts": { "type": "array", + "title": "List of concepts in the vocabulary", + "description": "One or more entity/concept identifiers from this knowledge system. it is recommended that a resolvable URI be used for each entity/concept identifier.", "minItems": 1, "items": { - "type": "string" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { "type": "object", + "required": [ + "id" + ], "properties": { - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "type": { + "id": { "type": "string", - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "enum": { - "type": "array", - "minItems": 1, - "items": {}, - "uniqueItems": true - }, - "format": { - "type": "string" + "title": "Identifier for the concept", + "description": "Identifier for the concept in the knowledge system.", + "minLength": 1 }, - "contentMediaType": { - "type": "string" - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "pattern": { + "title": { "type": "string", - "format": "regex" - }, - "maxItems": { - "type": "integer", - "minimum": 0 - }, - "minItems": { - "type": "integer", - "default": 0, - "minimum": 0 + "title": "Title of the concept", + "description": "A human readable title for the concept." }, - "x-ogc-definition": { + "description": { "type": "string", - "format": "uri" - }, - "x-ogc-unit": { - "type": "string" + "title": "Description of the concept", + "description": "A human readable description for the concept." }, - "x-ogc-unitLang": { - "type": "string" + "url": { + "type": "string", + "format": "uri", + "title": "URI of the concept", + "description": "A URI providing further description of the concept. It is called \"definition\" in STA." } } } + }, + "scheme": { + "type": "string", + "title": "Identifier of the vocabulary", + "description": "An identifier for the knowledge organization system used to classify the resource. It is recommended that the identifier be a resolvable URI. The list of schemes used in a searchable catalog can be determined by inspecting the server's OpenAPI document or, if the server implements CQL2, by exposing a queryable (e.g. named `scheme`) and enumerating the list of schemes in the queryable's schema definition." } } }, - "statusCode": { - "type": "string", - "nullable": false, - "enum": [ - "accepted", - "running", - "successful", - "failed", - "dismissed" - ] - }, - "subscriber": { - "description": "Optional URIs for callbacks for this job.\n\nSupport for this parameter is not required and the parameter may be\nremoved from the API definition, if conformance class **'callback'**\nis not listed in the conformance declaration under `/conformance`.", + "language": { "type": "object", + "title": "Resource language", + "description": "The language used for textual values in this resource.", + "required": [ + "code" + ], "properties": { - "successUri": { + "code": { "type": "string", - "format": "uri" + "title": "Code", + "description": "The language tag as per RFC-5646.", + "example": "el" }, - "inProgressUri": { + "name": { "type": "string", - "format": "uri" + "minLength": 1, + "title": "Original name", + "description": "The untranslated name of the language.", + "example": "Ελληνικά" }, - "failedUri": { + "alternate": { "type": "string", - "format": "uri" + "title": "Translated name", + "description": "The name of the language in another well-understood language, usually English.", + "example": "Greek" + }, + "dir": { + "type": "string", + "title": "Direction of the text", + "description": "The direction for text in this language. The default, `ltr` (left-to-right), represents the most common situation. However, care should be taken to set the value of `dir` appropriately if the language direction is not `ltr`. Other values supported are `rtl` (right-to-left), `ttb` (top-to-bottom), and `btt` (bottom-to-top).", + "enum": [ + "ltr", + "rtl", + "ttb", + "btt" + ], + "default": "ltr" } } }, - "inlineOrRefValue": { - "oneOf": [ - { - "$ref": "#/components/schemas/valueNoObject" + "collectionProperties": { + "type": "object", + "required": [ + "id", + "links" + ], + "properties": { + "id": { + "type": "string", + "title": "Identifier of the resource", + "description": "Identifier of the collection, for example, used in URI path parameters.", + "minLength": 1, + "example": "dem" }, - { - "$ref": "#/components/schemas/qualifiedValue" + "title": { + "type": "string", + "title": "Title of the collection", + "description": "A short, human-readable summary of the collection.", + "example": "Digital Elevation Model" }, - { - "allOf": [ + "description": { + "type": "string", + "title": "Description of the collection", + "description": "A human-readable explanation about data in the collection.", + "example": "A Digital Elevation Model." + }, + "attribution": { + "type": "string", + "title": "Attribution for the collection", + "description": "Attribution for the collection, providing a way to identify the source of the geographic information, which can contain markup text whose format may be indicated in the `attributionMediaType` property. That format can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`).\nIf the 'attributionMediaType' indicates something other than `text/plain`, the `attribution` element string should be interpreted by a markup parser selected based on that media type to be presented to the user\n(e.g., `text/markdown` will be parsed by a library supporting CommonMark). By allowing markup, the attribution string can import images (e.g., organization logos) and format the text (e.g., the name of the organization in italics)." + }, + "attributionMediaType": { + "title": "Media type of the attribution", + "description": "Media type for the markup language of the attribution: It can be either plain text (`text/plain`), HTML (`text/html`) or https://commonmark.org/[CommonMark] (`text/markdown`).", + "enum": [ + "text/plain", + "text/html", + "text/markdown" + ] + }, + "accessConstraints": { + "title": "Access Constraints of the collection", + "description": "Restrictions on the availability of the collection that the user needs to be aware of before using or redistributing the data:\n\n* unclassified: Available for general disclosure\n* restricted: Not for general disclosure\n* confidential: Available for someone who can be entrusted with information\n* secret: Kept or meant to be kept private, unknown, or hidden from all but a select group of people\n* topSecret: Of the highest secrecy", + "enum": [ + "unclassified", + "restricted", + "confidential", + "secret", + "topSecret" + ] + }, + "publisher": { + "type": "string", + "title": "Responsible party publishing the collection", + "description": "Organization or individual responsible for making the data available" + }, + "contacts": { + "type": "array", + "title": "A list of contacts", + "description": "A list of contacts qualified by their role(s) in association to the collection.", + "minItems": 1, + "items": { + "$ref": "#/components/schemas/contact" + } + }, + "license": { + "type": "string", + "title": "License associated to the collection", + "description": "The legal provisions under which the data of this collection is made available." + }, + "rights": { + "type": "string", + "title": "Rights over the collection", + "description": "A statement that concerns all rights not addressed by the license such as a copyright statement." + }, + "formats": { + "title": "Formats for distributing the collection", + "description": "A list of formats in which the data of this collection is distributed", + "type": "array", + "items": { + "$ref": "#/components/schemas/format-2" + } + }, + "keywords": { + "type": "array", + "title": "Keywords representing aspects of the collection", + "description": "The topic or topics of the resource. Typically represented using free-form keywords, tags, key phrases, or classification codes.", + "items": { + "type": "string" + } + }, + "themes": { + "type": "array", + "title": "Themes represented by the resource", + "description": "A knowledge organization system used to classify the resource.", + "minItems": 1, + "items": { + "$ref": "#/components/schemas/theme" + } + }, + "resourceLanguages": { + "type": "array", + "title": "The list of languages of the collection", + "description": "The list of languages in which the data of this collection is available.", + "items": { + "$ref": "#/components/schemas/language" + } + }, + "links": { + "type": "array", + "title": "Links relevant to this collection", + "description": "Links to this or other resources related to this collection.", + "example": [ { - "type": "object", - "required": [ - "rel" - ], - "properties": { - "rel": { - "type": "string" - }, - "type": { - "type": "string" - }, - "hreflang": { - "type": "string" - }, - "title": { - "type": "string" - }, - "length": { - "type": "integer" - } - } + "href": "http://data.example.org/collections/dem?f=json", + "rel": "self", + "type": "application/json", + "title": "Digital Elevation Model" }, { - "type": "object", - "properties": { - "method": { - "type": "string", - "enum": [ - "POST", - "GET", - "DELETE", - "PATCH" - ] - }, - "body": {}, - "headers": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } + "href": "http://data.example.org/collections/dem?f=html", + "rel": "alternate", + "type": "application/json", + "title": "Digital Elevation Model" }, { - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "type": "string" - } + "href": "http://data.example.org/collections/dem/coverage", + "rel": "coverage", + "type": "image/tiff; application=geotiff", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage/domainset", + "rel": "domainset", + "type": "application/json", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage/rangetype", + "rel": "rangetype", + "type": "application/json", + "title": "Digital Elevation Model" + }, + { + "href": "http://data.example.org/collections/dem/coverage/metadata", + "rel": "metadata", + "type": "application/json", + "title": "Digital Elevation Model" + } + ], + "items": { + "$ref": "#/components/schemas/link" + } + }, + "itemType": { + "title": "Type of the items in the collection", + "description": "Indicator about the type of the items in the collection if the collection has an accessible `/collections/{collectionId}/items` endpoint (e.g., `feature` or `record`).", + "type": "string", + "default": "feature" + }, + "dataType": { + "title": "Nature of the data in the collection", + "description": "Nature of the data in the collection. For example, this could be set to `map`, `vector` or `coverage`. It is not an indication of the available data access mechanism, but a hint regarding the internal representation of the data.", + "$ref": "#/components/schemas/dataType" + }, + "parent": { + "title": "Identifier of a parent collection (if this collection is part of a hierarchy)", + "description": "If this collection is part of a hierarchy, this property allows to identify another collection within the same dataset as its parent (by setting `parent` to the `id` of that collection), enabling clients to construct a hierarchy.", + "type": "string" + }, + "geoDataClasses": { + "title": "Class of data in the collection", + "description": "One or more classes of geospatial data, identified by a URI, which implies compatibility with a particular schema (fields/properties, as defined in OGC API - Common - Part 3: Schemas) for one or more collections, each with particular semantic definitions and data types. This is useful for example to determine compatibility with styles or processes, or to identify a particular collection within a dataset based on semantics.", + "type": "array", + "items": { + "type": "string", + "format": "uri" + } + }, + "defaultFields": { + "title": "List of fields returned by default", + "description": "A sorted list of field names. For a Features data access mechanism, it is the list of returnable properties included by default and complementing the geometry of the features. For a Coverage data access mechanism, they are names of fields whose values are included by default. Note that an API may provide a mechanism (e.g., a query parameter called `properties` or `exclude-properties`) to override this default list in customized responses.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "crs": { + "title": "List of coordinate reference systems supported in the collection", + "description": "The list of coordinate reference systems supported by the API; if present, the list should include the default coordinate reference system (usually listed first). Each item should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" } - } + ] + }, + "default": [ + "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + ], + "example": [ + "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "http://www.opengis.net/def/crs/EPSG/0/4326" ] - } - ] - }, - "inlineOrRefValue-workflows": { - "oneOf": [ - { - "$ref": "#/components/schemas/valueNoObject-workflows" }, - { - "allOf": [ - { - "$ref": "#/components/schemas/format" - }, + "storageCrs": { + "title": "Storage or native CRS of the data in the collection", + "description": "The native coordinate reference system (i.e., the most efficient CRS in which to request the data, possibly how the data is stored on the server); this is the default output coordinate reference system for Maps and Coverages. This should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ { - "$ref": "#/components/schemas/fieldsModifiers" + "type": "string" }, { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "oneOf": [ - { - "$ref": "#/components/schemas/valueNoObject-workflows" - }, - { - "type": "object" - } - ] - } - } + "type": "object" } - ] + ], + "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "example": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + }, + "epoch": { + "title": "Epoch of the data in the collection", + "description": "Epoch of the native (storage) Coordinate Reference System (CRS)", + "type": "number", + "example": 2021.33 + }, + "geometryDimension": { + "title": "Number of spatial dimensions of the primary geometry for the data", + "description": "Number of spatial dimensions of the primary geometry of individual elements of the data: 0 for points, 1 for curves, 2 for surfaces, 3 for solids and unspecified when mixed or unknown. Not to be confused with the dimensions of the domain which are defined by the extent element.", + "type": "integer", + "minimum": 0, + "maximum": 3 }, - { - "$ref": "#/components/schemas/link" + "minScaleDenominator": { + "title": "Minimum scale denominator for the collection", + "description": "Minimum scale denominator for usage of the collection.", + "type": "number" + }, + "maxScaleDenominator": { + "title": "Maximum scale denominator for the collection", + "description": "Maximum scale denominator for usage of the collection.", + "type": "number" + }, + "minCellSize": { + "title": "Minimum cell size for the collection", + "description": "Minimum cell size for usage of the collection.", + "type": "number" + }, + "maxCellSize": { + "title": "Maximum cell size for the collection", + "description": "Maximum cell size for usage of the collection.", + "type": "number" + }, + "created": { + "title": "Timestamp when the collection was first produced", + "description": "Timestamp indicating when the data in the collection was first produced.", + "type": "string", + "format": "date-time" + }, + "updated": { + "title": "Timestamp of the last change/revision to the collection", + "description": "Timestamp of the last change/revision to the data in the collection.", + "type": "string", + "format": "date-time" } - ] + } }, - "fieldsModifiers": { + "regularGrid": { "type": "object", + "title": "Regular grid", + "description": "Regular grid with samples spaced at equal intervals.", + "required": [ + "resolution", + "firstCoordinate" + ], "properties": { - "filter": { + "resolution": { + "title": "Resolution", + "description": "Resolution of regularly gridded data along the dimension in the collection.", "oneOf": [ { - "type": "string" + "type": "string", + "nullable": true, + "example": "PT1H" }, { - "description": "Basic CQL2-JSON definition", - "type": "array", - "items": { - "type": "object" - } + "type": "number", + "example": 0.0006866455078 } ] }, - "filter-lang": { - "type": "string", - "example": "cql2-text" - }, - "filter-crs": { - "type": "string", - "format": "uri-reference" + "availableResolutions": { + "title": "Available resolutions", + "description": "List of resolutions made available by the API. If not specified, there are no limit other than the limits indicated in `minCellSize` and `maxCellSize` of the collection description (though the API might still allow requesting data beyond these).", + "type": "array", + "items": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "number" + } + ] + }, + "example": [ + "P1H", + "P1D", + "P1M" + ] }, - "aliases": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "firstCoordinate": { + "title": "First coordinate", + "description": "First coordinate where a regular grid begins, with subsequent coordinates adding `resolution` unit at each step.", + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "number" + } + ], + "example": -180 }, - "properties": { + "relativeBounds": { + "title": "Relative bounds", + "description": "Distance in units from coordinate to the lower and upper bounds of each cell for regular grids, describing the geometry of the cells.", "type": "array", + "minItems": 2, + "maxItems": 2, "items": { - "type": "string" - } + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "number" + } + ] + }, + "example": [ + -0.5, + 0.5 + ] + } + } + }, + "irregularGrid": { + "type": "object", + "title": "Irregular grid.", + "description": "Irregular grid with samples spaced at different intervals.", + "required": [ + "coordinates" + ], + "properties": { + "coordinates": { + "title": "Coordinates of the irregular cells", + "description": "List of coordinates along the dimension for which data organized as an irregular grid in the collection is available.\n(e.g., 2, 10, 80, 100).", + "type": "array", + "minItems": 1, + "items": { + "oneOf": [ + { + "type": "string", + "nullable": true, + "example": "2020-11-12T12:15:00Z" + }, + { + "type": "number", + "example": 12.3 + } + ] + }, + "example": [ + 2, + 10, + 80, + 100 + ] }, - "sortBy": { + "boundsCoordinates": { + "title": "Bounds coordinates", + "description": "For irregular grids, an ordered list of the coordinates in absolute units of the lower and upper bounds of the dimension for each cell.", "type": "array", + "minItems": 1, "items": { - "type": "string" - } + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "number" + } + ] + } + }, + "example": [ + [ + -180, + -179 + ], + [ + -179, + -178 + ] + ] } } }, - "statusInfo": { + "grid": { + "type": "object", + "title": "Grid.", + "description": "Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the dimension.", "allOf": [ - { - "$ref": "#/components/schemas/descriptionType" - }, { "type": "object", "required": [ - "id", - "status", - "processingEntityType" + "cellsCount" ], "properties": { - "id": { - "type": "string" - }, - "processID": { - "type": "string", - "format": "uri" - }, - "processingEntityType": { - "description": "The type of entity that created the job and is doing the processing.\nThis includes all the data access apis listed in \"apis.yaml\" plus\nthe processing APIs of OGC API Processes and OpenEO.", - "anyOf": [ - { - "$ref": "#/components/schemas/apis" - }, - { - "type": "string", - "enum": [ - "ogc-api-processes", - "openeo" - ] - } - ] - }, - "profileEntityType": { - "description": "The type of entity requesting this status information. This may\nbe differernt than the processing entity. For example, the\nprocessing entity may be OGC API Processes but the status\ninformation is requested via the OpenEO API.", - "anyOf": [ - { - "$ref": "#/components/schemas/apis" - }, - { - "type": "string", - "enum": [ - "ogc-api-processes", - "openeo" - ] - } - ] - }, - "request": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object" - }, - { - "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" - } - ] - }, - "status": { - "$ref": "#/components/schemas/statusCode" - }, - "message": { - "type": "string" - }, - "exception": { - "$ref": "#/components/schemas/exception" + "cellsCount": { + "title": "Cell count", + "description": "Number of samples available along the dimension for data organized as a regular or irregular grid.", + "type": "integer", + "example": 50 + } + } + }, + { + "oneOf": [ + { + "$ref": "#/components/schemas/regularGrid" }, - "created": { - "type": "string", - "format": "date-time" + { + "$ref": "#/components/schemas/irregularGrid" + } + ] + } + ] + }, + "spatialExtent": { + "title": "Spatial extent", + "description": "The spatial extent of the data in the collection.", + "type": "object", + "properties": { + "bbox": { + "title": "Bounding box in the 'crs' coordinates", + "description": "One or more bounding boxes that describe the spatial extent of the dataset.\n\nThe first bounding box describes the overall spatial\nextent of the data. All subsequent bounding boxes describe\nmore precise bounding boxes, e.g., to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", + "type": "array", + "minItems": 1, + "items": { + "description": "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)\n\nIf the value consists of four numbers, the coordinate reference system is\nWGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in `crs` property.\n\nIf the value consists of six numbers, the coordinate reference system is WGS 84\nlongitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h)\nunless a different coordinate reference system is specified in `crs` property.\n\nFor WGS 84 longitude/latitude the values are in most cases the sequence of\nminimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value\n(west-most box edge) is larger than the third value (east-most box edge).\n\nIf the vertical axis is included, the third and the sixth number are\nthe bottom and the top of the 3-dimensional bounding box.\n\nIf a feature has multiple spatial geometry properties, it is the decision of the\nserver whether only a single spatial geometry property is used to determine\nthe extent or all relevant geometries.", + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 + }, + { + "minItems": 6, + "maxItems": 6 + } + ], + "items": { + "type": "number" }, - "started": { - "type": "string", - "format": "date-time" + "example": [ + -180, + -90, + 180, + 90 + ] + } + }, + "storageCrsBbox": { + "title": "Bounding box in the storage CRS", + "description": "One or more bounding boxes that describe the spatial extent of the dataset in the storage (native) CRS (`storageCrs` property).\n\nThe first bounding box describes the overall spatial\nextent of the data. All subsequent bounding boxes describe\nmore precise bounding boxes, e.g., to identify clusters of data.\nClients only interested in the overall spatial extent will\nonly need to access the first item in each array.", + "type": "array", + "minItems": 1, + "items": { + "description": "Each bounding box is provided as four or six numbers, depending on\nwhether the coordinate reference system includes a vertical axis\n(height or depth):\n\n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Minimum value, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Maximum value, coordinate axis 3 (optional)", + "type": "array", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 + }, + { + "minItems": 6, + "maxItems": 6 + } + ], + "items": { + "type": "number" }, - "finished": { - "type": "string", - "format": "date-time" + "example": [ + -180, + -90, + 180, + 90 + ] + } + }, + "crs": { + "title": "Coordinate reference system", + "description": "Coordinate reference system of the coordinates of the `bbox` property.\nThe default reference system is WGS 84 longitude/latitude.\nWGS 84 longitude/latitude/ellipsoidal height for coordinates with height.\nFor data not referenced to Earth, another CRS may be specified.\nThis should be a URI to a registered CRS if one is available, or a full description of the CRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" }, - "updated": { + { "type": "string", - "format": "date-time" - }, - "progress": { - "type": "integer", - "minimum": 0, - "maximum": 100 + "enum": [ + "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "http://www.opengis.net/def/crs/OGC/0/CRS84h" + ] }, - "links": { - "type": "array", - "items": { - "$ref": "#/components/schemas/inlineOrRefValue/oneOf/2" - } + { + "type": "object" } - } - } - ] - }, - "dataAccessAPIs": { - "type": "object", - "properties": { - "dataAccessAPIs": { + ], + "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + }, + "grid": { + "title": "Grid description", + "description": "Provides information about the limited availability of data within the collection organized\nas a grid (regular or irregular) along each spatial dimension.", "type": "array", + "minItems": 2, + "maxItems": 3, "items": { - "$ref": "#/components/schemas/apis" + "$ref": "#/components/schemas/grid" } } } }, - "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" - ] - }, - "dataClasses": { + "temporalExtent": { + "title": "Temporal extent", + "description": "The temporal extent of the data in the collection.", "type": "object", "properties": { - "dataClasses": { + "interval": { + "title": "Temporal intervals", + "description": "One or more time intervals that describe the temporal extent of the dataset.\n\nThe first time interval describes the overall\ntemporal extent of the data. All subsequent time intervals describe\nmore precise time intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item in each array.", "type": "array", + "minItems": 1, "items": { - "type": "string", - "format": "uri" + "description": "Begin and end times of the time interval. The timestamps are in the\ntemporal coordinate reference system specified in `trs`. By default\nthis is the Gregorian calendar, expressed using RFC 3339 section 5.6.\nNote that these times may be specified using time zone offsets to UTC time other than zero.\n\nThe value `null` for start or end time is supported and indicates a half-bounded time interval.", + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": "2011-11-11T12:22:11Z" + } } + }, + "trs": { + "title": "Temporal Coordinate Reference System", + "description": "Coordinate reference system of the coordinates in the temporal extent\n(property `interval`). The default reference system is the Gregorian calendar.\nFor data for which the Gregorian calendar is not suitable, such as geological time scale, another temporal reference system may be used.\nThis should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" + ] + }, + { + "type": "object" + } + ], + "default": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" + }, + "grid": { + "$ref": "#/components/schemas/grid" } } }, - "ogcapppkg": { + "additionalDimensionExtent": { + "title": "Extent of any additional dimensions", + "description": "The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial.", "type": "object", - "required": [ - "executionUnit" + "oneOf": [ + { + "required": [ + "interval", + "definition" + ] + }, + { + "required": [ + "interval", + "trs" + ] + }, + { + "required": [ + "interval", + "vrs" + ] + } ], "properties": { - "processDescription": { - "type": "object", - "required": [ - "process" - ], - "properties": { - "process": { - "$ref": "#/components/schemas/process" + "interval": { + "title": "Interval of the extent of this dimension", + "description": "One or more intervals that describe the extent for this dimension of the dataset.\nThe value `null` is supported and indicates an unbounded or half-bounded interval.\nThe first interval describes the overall extent of the data for this dimension.\nAll subsequent intervals describe more precise intervals, e.g., to identify clusters of data.\nClients only interested in the overall extent will only need\nto access the first item (a pair of lower and upper bound values).", + "type": "array", + "minItems": 1, + "items": { + "description": "Lower and upper bound values of the interval. The values\nare in the coordinate reference system specified in `crs`, `trs` or `vrs`.", + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "oneOf": [ + { + "type": "string", + "nullable": true, + "example": "2011-11-11T12:22:11Z" + }, + { + "type": "number", + "example": 32.7 + } + ] } } }, - "executionUnit": { - "oneOf": [ + "trs": { + "title": "Temporal Coordinate Reference System", + "description": "Temporal Coordinate Reference System (e.g. as defined by Features for 'temporal'). This should be a URI to a registered TRS if one is available, or a full description of the TRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ { - "description": "Resource containing an executable or runtime information for executing the process.", - "type": "object", - "required": [ - "type", - "image" - ], - "properties": { - "type": { - "description": "Type of execution unit.", - "type": "string", - "enum": [ - "docker", - "oci" - ] - }, - "image": { - "description": "Container image reference for the execution unit.", - "type": "string" - }, - "deployment": { - "description": "Deployment information for the execution unit.", - "type": "string", - "enum": [ - "local", - "remote", - "hpc", - "cloud" - ] - }, - "config": { - "type": "object", - "description": "Hardware requirements and configuration properties for executing the process.", - "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 - } - }, - "additionalProperties": true, - "example": { - "type": "docker", - "image": "mydocker/ndvi:latest", - "deployment": "local", - "config": { - "cpuMin": 2, - "cpuMax": 5, - "memoryMin": 1, - "memoryMax": 3 - } - } + "type": "string" }, { - "$ref": "#/components/schemas/link" - }, + "type": "object" + } + ] + }, + "vrs": { + "title": "Vertical Coordinate Reference System", + "description": "Vertical Coordinate Reference System (e.g. as defined in EDR for 'vertical'). This should be a URI to a registered VRS if one is available, or a full description of the VRS otherwise using e.g., a WKT2CRS string, or a PROJJSON, or CRS JSON object.", + "anyOf": [ { - "$ref": "#/components/schemas/qualifiedValue" + "type": "string" }, { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ogcapppkg/properties/executionUnit/oneOf/0" - }, - { - "$ref": "#/components/schemas/link" - }, - { - "$ref": "#/components/schemas/qualifiedValue" - } - ] - } + "type": "object" } ] - } - } - }, - "staticIndicator": { - "allOf": [ - { - "$ref": "#/components/schemas/processSummary" }, - { - "type": "object", - "properties": { - "mutable": { - "type": "boolean", - "default": true - } - } + "grid": { + "$ref": "#/components/schemas/grid" + }, + "definition": { + "type": "string", + "format": "uri", + "title": "Observed property definition", + "description": "A URI for the definition of the measured or observed property corresponding to this dimension." + }, + "unit": { + "type": "string", + "title": "Units of measurement", + "description": "The unit of measure in which the interval and/or grid values are expressed." + }, + "unitLang": { + "type": "string", + "default": "UCUM", + "title": "Units of measurement vocabulary", + "description": "The language (or vocabulary) in which the unit is expressed (defaults to \"UCUM\" if not specified)." + }, + "variableType": { + "title": "Variable type", + "description": "The type of variable which may inform correct interpretation and interpolation methods.", + "type": "string", + "enum": [ + "continuous", + "numericalOrdinal", + "numericalNominal", + "categoricalOrdinal", + "categoricalNominal" + ] } - ] + } } }, "parameters": { @@ -7400,6 +8067,9 @@ } }, "w": { + "$ref": "#/components/parameters/w-param" + }, + "w-param": { "name": "w", "description": "Point to the workflow identifier for deploying a CWL containing multiple workflow definitions", "in": "query", @@ -7407,75 +8077,110 @@ "schema": { "type": "string" } - } - }, - "responses": { - "NotFound": { - "description": "The requested resource does not exist on the server. For example, a path parameter had an incorrect value.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/exception" - } - }, - "text/html": { - "schema": { - "type": "string" - } - } + }, + "response": { + "name": "response", + "in": "query", + "description": "For executing the process using the _Collection Output_ mechanism, where the\nclient is redirected (_303_ status) to either an OGC API landing page or\ncollection resource, from which one or more OGC API data access mechanism\nis available. Data access requests may trigger processing on-demand for\na given area, time and resolution of interest.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "collection", + "landingPage" + ] } }, - "NotAcceptable": { - "description": "Content negotiation failed. For example, the `Accept` header submitted in the request did not support any of the media types supported by the server for the requested resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/exception" - } - }, - "text/html": { - "schema": { - "type": "string" - } - } + "prefer-header-execution": { + "in": "header", + "description": "Indicates client preferences, including whether the client is capable of asynchronous processing.\nA `respond-async` preference indicates a preference for asynchronous processing.\nA `wait: s` preference indicates that the client prefers to wait up to x seconds to receive a reponse synchronously before the server falls back to asynchronous processing.", + "name": "Prefer", + "schema": { + "type": "string" } }, - "ServerError": { - "description": "A server error occurred.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/exception" - } - }, - "text/html": { - "schema": { - "type": "string" - } - } + "prefer-header-results": { + "in": "header", + "description": "Indicates client preferences, such as whether the client wishes a self-contained or minimal response.\nA `return=minimal` preference indicates that the client would prefer that links be returned to larger object to minimize the response payload.\nA `return=representation` indicates that the client would prefer if the server can return a self-contained response.", + "name": "Prefer", + "schema": { + "type": "string" } + } + }, + "responses": { + "NotFound": { + "$ref": "#/components/responses/rNotFound" + }, + "NotAcceptable": { + "$ref": "#/components/responses/rNotAcceptable" + }, + "ServerError": { + "$ref": "#/components/responses/rServerError" }, "InvalidParameter": { - "description": "A query parameter has an invalid value.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/exception" - } - }, - "text/html": { - "schema": { - "type": "string" - } - } - } + "$ref": "#/components/responses/rInvalidParameter" }, "NotAllowed": { - "description": "The method is not allowed at the path.", + "$ref": "#/components/responses/rNotAllowed" + }, + "Exception": { + "$ref": "#/components/responses/rException" + }, + "LandingPage": { + "$ref": "#/components/responses/rLandingPage" + }, + "Conformance": { + "$ref": "#/components/responses/rConformance" + }, + "API": { + "$ref": "#/components/responses/rAPI" + }, + "Enumeration": { + "$ref": "#/components/responses/rEnumeration" + }, + "ProcessList": { + "$ref": "#/components/responses/rProcessList" + }, + "ProcessDescription": { + "$ref": "#/components/responses/rProcessDescription" + }, + "Results": { + "$ref": "#/components/responses/rResults" + }, + "Status": { + "$ref": "#/components/responses/rStatus" + }, + "JobList": { + "$ref": "#/components/responses/rJobList" + }, + "ExecuteAsync": { + "$ref": "#/components/responses/rExecuteAsync" + }, + "ExecuteSync": { + "$ref": "#/components/responses/rExecuteSync" + }, + "ExecuteSyncRawRef": { + "$ref": "#/components/responses/rExecuteSyncRawRef" + }, + "EmptyResponse": { + "$ref": "#/components/responses/rEmpty" + }, + "DeployProcess": { + "$ref": "#/components/responses/rDeployProcess" + }, + "DuplicateProcess": { + "$ref": "#/components/responses/rDuplicateProcess" + }, + "ImmutableProcess": { + "$ref": "#/components/responses/rImmutableProcess" + }, + "rLandingPage": { + "description": "The landing page provides links to the API definition (link relation `service-desc`, in this case path `/api`),\nto the Conformance declaration (path `/conformance`, link relation `http://www.opengis.net/def/rel/ogc/1.0/conformance`), and to other resources.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/exception" + "$ref": "#/components/schemas/landingPage" } }, "text/html": { @@ -7485,8 +8190,8 @@ } } }, - "Exception": { - "description": "An error occured.", + "rNotAcceptable": { + "description": "Content negotiation failed. For example, the `Accept` header submitted in the request did not support any of the media types supported by the server for the requested resource.", "content": { "application/json": { "schema": { @@ -7500,12 +8205,12 @@ } } }, - "LandingPage": { - "description": "The landing page provides links to the API definition (link relation `service-desc`, in this case path `/api`),\nto the Conformance declaration (path `/conformance`, link relation `http://www.opengis.net/def/rel/ogc/1.0/conformance`), and to other resources.", + "rServerError": { + "description": "A server error occurred.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/landingPage" + "$ref": "#/components/schemas/exception" } }, "text/html": { @@ -7515,7 +8220,7 @@ } } }, - "Conformance": { + "rConformance": { "description": "The URIs of all conformance classes supported by the server\n\nTo support \"generic\" clients that want to access multiple\nOGC API - Processes implementations - and not \"just\" a specific\nAPI / server, the server declares the conformance\nclasses it implements and conforms to.", "content": { "application/json": { @@ -7561,7 +8266,7 @@ } } }, - "API": { + "rAPI": { "description": "The OpenAPI definition of the API.", "content": { "application/vnd.oai.openapi+json;version=3.0": { @@ -7576,7 +8281,7 @@ } } }, - "Enumeration": { + "rEnumeration": { "description": "An enumerated list of valid string values for API parameters.", "content": { "application/json": { @@ -7591,81 +8296,90 @@ } } }, - "ProcessList": { - "description": "Information about the available processes", + "rNotFound": { + "description": "The requested resource does not exist on the server. For example, a path parameter had an incorrect value.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/processList" + "$ref": "#/components/schemas/exception" + } + }, + "text/html": { + "schema": { + "type": "string" } } } }, - "ProcessDescription": { - "description": "A process description.", + "rProcessList": { + "description": "Information about the available processes", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/process" + "$ref": "#/components/schemas/processList" } } } }, - "Results": { - "description": "The processing results of a job.", + "rProcessDescription": { + "description": "A process description.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/results" + "$ref": "#/components/schemas/process" } } } }, - "Status": { - "description": "The status of a job.", + "rWorkflowNotFound": { + "description": "The requested workflow does not exist on the server.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/statusInfo" + "$ref": "#/components/schemas/exception" + } + }, + "text/html": { + "schema": { + "type": "string" } } } }, - "JobList": { - "description": "A list of jobs for this process.", + "rImmutableProcess": { + "description": "the processes is not mutable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/jobList" + "$ref": "#/components/schemas/exception" } - } - } - }, - "ExecuteAsync": { - "description": "Started asynchronous execution. Created job.", - "headers": { - "Location": { - "schema": { - "type": "string" - }, - "description": "URL to check the status of the execution/job." }, - "Preference-Applied": { + "text/html": { "schema": { "type": "string" - }, - "description": "The preference applied to execute the process asynchronously (see. RFC 2740)." + } } - }, + } + }, + "rDuplicateProcess": { + "description": "the processes being added is already deployed (i.e. duplicate)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/statusInfo" + "$ref": "#/components/schemas/exception" + } + }, + "text/html": { + "schema": { + "type": "string" } } } }, - "ExecuteSync": { + "rEmpty": { + "description": "successful operation (no response body)" + }, + "rExecuteSync": { "description": "Result of synchronous execution", "content": { "application/json": { @@ -7730,324 +8444,80 @@ "format": "geojson-feature-collection" }, { - "title": "GeoJSON FeatureCollection", - "type": "object", - "required": [ - "type", - "features" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "FeatureCollection" - ] - }, - "features": { - "type": "array", - "items": { - "title": "GeoJSON Feature", - "type": "object", - "required": [ - "type", - "properties", - "geometry" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feature" - ] - }, - "id": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "properties": { - "type": "object", - "nullable": true - }, - "geometry": { - "oneOf": [ - { - "title": "GeoJSON Point", - "type": "object", - "nullable": true, - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Point" - ] - }, - "coordinates": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON LineString", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "LineString" - ] - }, - "coordinates": { - "type": "array", - "minItems": 2, - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON Polygon", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Polygon" - ] - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "minItems": 4, - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON MultiPoint", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MultiPoint" - ] - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON MultiLineString", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MultiLineString" - ] - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - }, - { - "title": "GeoJSON MultiPolygon", - "type": "object", - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MultiPolygon" - ] - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "array", - "minItems": 4, - "items": { - "type": "array", - "minItems": 2, - "items": { - "type": "number" - } - } - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - } - ] - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } - } - }, - "bbox": { - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - } - } + "$ref": "#/components/schemas/FeatureCollection" } ] } } } }, - "ExecuteSyncRawRef": { - "description": "Synchronous execution response.", + "rExecuteAsync": { + "description": "Started asynchronous execution. Created job.", "headers": { - "Link": { + "Location": { "schema": { "type": "string" }, - "description": "One or more Link headers pointing to each raw output." + "description": "URL to check the status of the execution/job." + }, + "Preference-Applied": { + "schema": { + "type": "string" + }, + "description": "The preference applied to execute the process asynchronously (see. RFC 2740)." + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/statusInfo" + } } } }, - "EmptyResponse": { - "description": "successful operation (no response body)" - }, - "DeployProcess": { - "description": "the process is deployed", + "rExecuteCollectionRedirect": { + "description": "For _Collection Output_ execution, redirection to an OGC API landing page or collection.", "headers": { "Location": { "schema": { "type": "string" }, - "description": "URL to fetch the processDescription of the deployed process" + "description": "Location for redirection to an [OGC API landing page](https://schemas.opengis.net/ogcapi/tiles/part1/1.0/openapi/schemas/common-core/landingPage.yaml) (for `response=landingPage`) as described in\n[OGC API - Common - Part 1: Core](http://docs.ogc.org/DRAFTS/19-072.html#_landing_page_requirements_class) or\nan [OGC API collection description](https://schemas.opengis.net/ogcapi/tiles/part1/1.0/openapi/schemas/common-geodata/collectionInfo.yaml) (for `response=landingPage`) as described in\n[OGC API - Common - Part 2: Geospatial data](http://docs.ogc.org/DRAFTS/20-024.html#collection-description).\nThe collection redirected to or the collections linked from the landing page redirected to\nmust contain links to at least one data access mechanism (such as [_OGC API - Tiles_](https://opengeospatial.github.io/ogcna-auto-review/20-057.html),\n[_DGGS_](https://opengeospatial.github.io/ogcna-auto-review/21-038.html),\n[_Coverages_](http://docs.ogc.org/DRAFTS/19-087.html),\n[_Features_](https://docs.opengeospatial.org/is/17-069r4/17-069r4.html),\n[_EDR_](https://docs.ogc.org/is/19-086r5/19-086r5.html), or\n[_Maps_](http://docs.ogc.org/DRAFTS/20-058.html)...) to retrieve output results, which may\ntrigger on-demand processing." } - }, + } + }, + "rJobList": { + "description": "A list of jobs for this process.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/staticIndicator" + "$ref": "#/components/schemas/jobList" } } } }, - "DuplicateProcess": { - "description": "the processes being added is already deployed (i.e. duplicate)", + "rStatus": { + "description": "The status of a job.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/statusInfo" + } + } + } + }, + "rResults": { + "description": "The processing results of a job.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/results" + } + } + } + }, + "rInvalidParameter": { + "description": "A query parameter has an invalid value.", "content": { "application/json": { "schema": { @@ -8061,8 +8531,23 @@ } } }, - "ImmutableProcess": { - "description": "the processes is not mutable", + "rNotAllowed": { + "description": "The method is not allowed at the path.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/exception" + } + }, + "text/html": { + "schema": { + "type": "string" + } + } + } + }, + "rException": { + "description": "An error occured.", "content": { "application/json": { "schema": { @@ -8075,7 +8560,36 @@ } } } + }, + "rExecuteSyncRawRef": { + "description": "Synchronous execution response.", + "headers": { + "Link": { + "schema": { + "type": "string" + }, + "description": "One or more Link headers pointing to each raw output." + } + } + }, + "rDeployProcess": { + "description": "the process is deployed", + "headers": { + "Location": { + "schema": { + "type": "string" + }, + "description": "URL to fetch the processDescription of the deployed process" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/staticIndicator" + } + } + } } } } -} +} \ No newline at end of file diff --git a/openapi/update.sh b/openapi/update.sh index 189ce395..42dd7839 100755 --- a/openapi/update.sh +++ b/openapi/update.sh @@ -18,4 +18,4 @@ do \ done # Bundle with swagger-cli -swagger-cli bundle ogcapi-processes.yaml -o ogcapi-processes.bundled.json +redocly bundle ogcapi-processes.yaml -o ogcapi-processes.bundled.json