From 2a23e67ecac83b2fd6df2084efadc62543968c09 Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Wed, 26 Jun 2024 01:37:20 -0400 Subject: [PATCH] openapi: Synchronization with Common - Also updated example conformance declaration, coverage links --- .../openapi/ogcapi-coverages-1.bundled.json | 249 ++++++++---------- standard/openapi/ogcapi-coverages-1.yaml | 28 +- .../parameters/common-geodata/bbox.yaml | 25 +- .../parameters/common-geodata/datetime.yaml | 10 +- .../bbox-crs.yaml | 0 .../{common-crs => coverages-core}/crs.yaml | 0 .../subset-crs.yaml | 0 .../subset.yaml | 0 .../paths/coverages-core/pCoverage.yaml | 8 +- .../paths/coverages-core/pSceneCoverage.yaml | 8 +- .../coverages-core/pSceneCoverageTile.yaml | 6 +- .../pCollectionCoverageTile.yaml | 6 +- .../responses/common-core/rConformance.yaml | 12 +- .../responses/common-core/rException.yaml | 2 +- .../responses/common-core/rLandingPage.yaml | 60 ++--- .../responses/common-geodata/rCollection.yaml | 84 +++--- .../common-geodata/rCollectionsList.yaml | 32 +-- .../responses/coverages-core/rScene.yaml | 9 +- .../openapi/schemas/common-core/link.yaml | 7 - ...ollectionInfo.yaml => collectionDesc.yaml} | 3 + .../schemas/common-geodata/collections.yaml | 2 +- .../schemas/common-geodata/extent-uad.yaml | 1 + .../schemas/common-geodata/extent.yaml | 4 +- .../common-geodata/numberReturned.yaml | 10 +- .../schemas/coverages-core/coverageInfo.yaml | 12 - .../schemas/coverages-core/coverages.yaml | 8 - 26 files changed, 264 insertions(+), 322 deletions(-) rename standard/openapi/parameters/{common-crs => coverages-core}/bbox-crs.yaml (100%) rename standard/openapi/parameters/{common-crs => coverages-core}/crs.yaml (100%) rename standard/openapi/parameters/{common-crs => coverages-core}/subset-crs.yaml (100%) rename standard/openapi/parameters/{common-geodata => coverages-core}/subset.yaml (100%) rename standard/openapi/schemas/common-geodata/{collectionInfo.yaml => collectionDesc.yaml} (97%) delete mode 100644 standard/openapi/schemas/coverages-core/coverageInfo.yaml delete mode 100644 standard/openapi/schemas/coverages-core/coverages.yaml diff --git a/standard/openapi/ogcapi-coverages-1.bundled.json b/standard/openapi/ogcapi-coverages-1.bundled.json index bb25a08..de67d76 100644 --- a/standard/openapi/ogcapi-coverages-1.bundled.json +++ b/standard/openapi/ogcapi-coverages-1.bundled.json @@ -755,15 +755,6 @@ "description": "A hint indicating what the media type of the result of dereferencing the link should be.", "example": "application/geo+json" }, - "templated": { - "type": "boolean", - "description": "This flag set to true if the link is a URL template." - }, - "varBase": { - "description": "A base path to retrieve semantic information about the variables used in URL template.", - "type": "string", - "example": "/ogcapi/vars/" - }, "hreflang": { "type": "string", "description": "A hint indicating what the language of the result of dereferencing the link should be.", @@ -863,12 +854,12 @@ "collections": { "type": "array", "items": { - "$ref": "#/components/schemas/collectionInfo" + "$ref": "#/components/schemas/collectionDesc" } } } }, - "collectionInfo": { + "collectionDesc": { "type": "object", "required": [ "id", @@ -890,6 +881,10 @@ "description": "a description of the data in the collection", "example": "A Digital Elevation Model." }, + "attribution": { + "type": "string", + "title": "attribution for the collection" + }, "links": { "type": "array", "example": [ @@ -1131,7 +1126,7 @@ "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.", + "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, @@ -1142,6 +1137,7 @@ }, "example": [ "2011-11-11T12:22:11Z", + "2011-11-11T08:22:11-04:00", null ] } @@ -1253,6 +1249,7 @@ }, "example": [ "2011-11-11T12:22:11Z", + "2011-11-11T08:22:11-04:00", 32.5, null ] @@ -1410,7 +1407,7 @@ "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.", + "description": "The number of items in the response.\nA server may omit this information, if the information about the \nnumber of items is not known or difficult to compute.\nIf the value is provided, the value shall be identical to the number\nof items in the response.", "type": "integer", "minimum": 0, "example": 10 @@ -1535,47 +1532,6 @@ } } }, - "coverages": { - "allOf": [ - { - "$ref": "#/components/schemas/collections" - }, - { - "type": "object", - "properties": { - "collections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/coverageInfo" - } - } - } - } - ] - }, - "coverageInfo": { - "allOf": [ - { - "$ref": "#/components/schemas/collectionInfo" - }, - { - "type": "object", - "required": [ - "extent" - ], - "properties": { - "orderedAxes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string", - "description": "axis labels of all dimensions listed in CRS order. Spatial dimensions should be listed separately here." - } - } - } - } - ] - }, "coverageSchema": { "title": "Coverage object", "description": "Component of OGC Coverage Implementation Schema 1.1. Last updated: 2016-may-18. Copyright (c) 2016 Open Geospatial Consortium, Inc. All Rights Reserved. To obtain additional rights of use, visit http://www.opengeospatial.org/legal/.", @@ -3075,7 +3031,7 @@ "datetime": { "name": "datetime", "in": "query", - "description": "Either a date-time or an interval, half-bounded or bounded. Date and time expressions\nadhere to RFC 3339. Half-bounded intervals are expressed using double-dots.\n\nExamples:\n\n* A date-time: \"2018-02-12T23:20:50Z\"\n* A bounded interval: \"2018-02-12T00:00:00Z/2018-03-18T12:31:12Z\"\n* Half-bounded intervals: \"2018-02-12T00:00:00Z/..\" or \"../2018-03-18T12:31:12Z\"\n\nOnly features that have a temporal property that intersects the value of\n`datetime` are selected.\n\nIf a feature has multiple temporal properties, it is the decision of the\nserver whether only a single temporal property is used to determine\nthe extent or all relevant temporal properties.", + "description": "Either a date-time or an interval. Date and time expressions adhere to RFC 3339, section 5.6. Intervals may be bounded or half-bounded (double-dots at start or end). Server implementations may or may not support times expressed using time offsets from UTC, but need to support UTC time with the notation ending with a Z.\nExamples:\n* A date-time: \"2018-02-12T23:20:50Z\" * A bounded interval: \"2018-02-12T00:00:00Z/2018-03-18T12:31:12Z\" * Half-bounded intervals: \"2018-02-12T00:00:00Z/..\" or \"../2018-03-18T12:31:12Z\"\nOnly resources that have a temporal property that intersects the value of `datetime` are selected.\nIf a feature has multiple temporal properties, it is the decision of the server whether only a single temporal property is used to determine the extent or all relevant temporal properties.", "required": false, "schema": { "type": "string" @@ -3083,24 +3039,10 @@ "style": "form", "explode": false }, - "subset": { - "name": "subset", - "in": "query", - "description": "Retrieve only part of the data by slicing or trimming along one or more axis\nFor trimming: {axisAbbrev}({low}:{high}) (preserves dimensionality)\n An asterisk (`*`) can be used instead of {low} or {high} to indicate the minimum/maximum value.\nFor slicing: {axisAbbrev}({value}) (reduces dimensionality)\n", - "style": "form", - "explode": false, - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, "bbox": { "name": "bbox", "in": "query", - "description": "Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth):\n* 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)\nThe coordinate reference system of the values is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate reference system is specified in the parameter `bbox-crs`.\nFor 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).\nIf the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box.\nIf 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.", + "description": "Only resources that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (elevation or depth):\n* 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)\nIf the value consists of four numbers, the coordinate reference system is WGS84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate reference system is specified in the parameter `bbox-crs`.\nIf 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`.\nFor WGS84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge).\nIf the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box.\nIf a resource has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries.", "required": false, "schema": { "type": "array", @@ -3115,46 +3057,12 @@ } ], "items": { - "type": "number", - "format": "double" + "type": "number" } }, "style": "form", "explode": false }, - "crs": { - "name": "crs", - "in": "query", - "description": "reproject the output to the given crs", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, - "subset-crs": { - "name": "subset-crs", - "in": "query", - "description": "crs for the specified subset", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, - "bbox-crs": { - "name": "bbox-crs", - "in": "query", - "description": "crs for the specified bbox", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, "sceneId": { "name": "sceneId", "in": "path", @@ -3222,6 +3130,53 @@ "type": "integer" } }, + "subset": { + "name": "subset", + "in": "query", + "description": "Retrieve only part of the data by slicing or trimming along one or more axis\nFor trimming: {axisAbbrev}({low}:{high}) (preserves dimensionality)\n An asterisk (`*`) can be used instead of {low} or {high} to indicate the minimum/maximum value.\nFor slicing: {axisAbbrev}({value}) (reduces dimensionality)\n", + "style": "form", + "explode": false, + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "crs": { + "name": "crs", + "in": "query", + "description": "reproject the output to the given crs", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + }, + "subset-crs": { + "name": "subset-crs", + "in": "query", + "description": "crs for the specified subset", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + }, + "bbox-crs": { + "name": "bbox-crs", + "in": "query", + "description": "crs for the specified bbox", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + }, "f-coverage": { "name": "f", "description": "The optional f parameter indicates the output format which the server shall provide as part of the response document. It has preference over the HTTP Accept header.", @@ -3362,7 +3317,7 @@ } }, "Exception": { - "description": "An error occured.", + "description": "An error occurred.", "content": { "application/json": { "schema": { @@ -3415,7 +3370,7 @@ "href": "http://data.example.org/collections", "rel": "http://www.opengis.net/def/rel/ogc/1.0/data", "type": "application/json", - "title": "Information about the collections (e.g. the coverages)" + "title": "Information about the collections (i.e.,. the coverages)" } ] } @@ -3440,14 +3395,22 @@ "example": { "conformsTo": [ "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/core", + "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/landing-page", "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/json", "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/html", "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/oas30", "http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/collections", - "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-coverage", + "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/core", + "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/subsetting", + "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/scaling", + "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/fieldselection", + "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/crs", + "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/tiles", + "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/netcdf", + "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geotiff", + "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/coveragejson", "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/cisjson", "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/html", - "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/coverage-subset", "http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/oas30" ] } @@ -3539,11 +3502,11 @@ } }, "Scene": { - "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:\n* a local identifier for the collection that is unique for the dataset;\n* 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);\n* an optional title and description for the collection;\n* 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;\n* 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').", + "description": "Information about a particular scene of a coverage.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/coverageInfo" + "$ref": "#/components/schemas/collectionDesc" }, "example": { "id": "elevation", @@ -3696,7 +3659,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/coverages" + "$ref": "#/components/schemas/collections" }, "example": { "links": [ @@ -3739,28 +3702,28 @@ }, "links": [ { - "href": "http://data.example.org/collections/elevation/coverage/domainset", - "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage-domainset", - "type": "application/json", - "title": "Elevation" + "href": "http://data.example.org/collections/elevation/schema", + "rel": "http://www.opengis.net/def/rel/ogc/1.0/schema", + "type": "application/schema+json", + "title": "Schema (fields)" }, { - "href": "http://data.example.org/collections/elevation/coverage/rangetype", - "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage-rangetype", - "type": "application/json", - "title": "Elevation" + "href": "http://data.example.org/collections/elevation/coverage.geotiff", + "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage", + "type": "image/tiff; application=geotiff", + "title": "Elevation (as GeoTIFF)" }, { - "href": "http://data.example.org/collections/elevation/coverage", - "rel": "items", - "type": "application/json", - "title": "Elevation" + "href": "http://data.example.org/collections/elevation/coverage.covjson", + "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage", + "type": "application/prs.coverage+json", + "title": "Elevation (as CoverageJSON)" }, { - "href": "http://data.example.org/collections/elevation/coverage.html", - "rel": "items", - "type": "text/html", - "title": "Elevation" + "href": "http://data.example.org/collections/elevation/coverage.cisjson", + "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage", + "type": "application/json", + "title": "Elevation (as CIS JSON)" }, { "href": "https://creativecommons.org/publicdomain/zero/1.0/", @@ -3791,7 +3754,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/coverageInfo" + "$ref": "#/components/schemas/collectionDesc" }, "example": { "id": "elevation", @@ -3811,28 +3774,28 @@ }, "links": [ { - "href": "http://data.example.org/collections/elevation/coverage/domainset", - "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage-domainset", - "type": "application/json", - "title": "Elevation" + "href": "http://data.example.org/collections/elevation/schema", + "rel": "http://www.opengis.net/def/rel/ogc/1.0/schema", + "type": "application/schema+json", + "title": "Schema (fields)" }, { - "href": "http://data.example.org/collections/elevation/coverage/rangetype", - "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage-rangetype", - "type": "application/json", - "title": "Elevation" + "href": "http://data.example.org/collections/elevation/coverage.tiff", + "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage", + "type": "image/tiff; application=geotiff", + "title": "Elevation data in GeoTIFF" }, { - "href": "http://data.example.org/collections/elevation/coverage", + "href": "http://data.example.org/collections/elevation/coverage.covjson", "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage", - "type": "application/json", - "title": "Elevation" + "type": "application/prs.coverage+json", + "title": "Elevation in CoverageJSON" }, { - "href": "http://data.example.org/collections/buildings/coverage.html", + "href": "http://data.example.org/collections/elevation/coverage.cisjson", "rel": "http://www.opengis.net/def/rel/ogc/1.0/coverage", - "type": "text/html", - "title": "Elevation" + "type": "application/json", + "title": "Elevation in CIS JSON" }, { "href": "https://creativecommons.org/publicdomain/zero/1.0/", diff --git a/standard/openapi/ogcapi-coverages-1.yaml b/standard/openapi/ogcapi-coverages-1.yaml index 786de76..45a4894 100644 --- a/standard/openapi/ogcapi-coverages-1.yaml +++ b/standard/openapi/ogcapi-coverages-1.yaml @@ -85,8 +85,8 @@ 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: @@ -106,12 +106,6 @@ components: schema: $ref: 'schemas/tms/propertiesSchema.yaml' - # Coverages - Core (this adds `orderedAxes`, which could possibly be defined in Common as well?) - coverages: - $ref: 'schemas/coverages-core/coverages.yaml' - coverageInfo: - $ref: 'schemas/coverages-core/coverageInfo.yaml' - # CIS coverageSchema: $ref: 'schemas/cis/coverage-schema.yaml' @@ -151,19 +145,9 @@ components: $ref: 'parameters/common-geodata/collectionId-coverage.yaml' datetime: $ref: 'parameters/common-geodata/datetime.yaml' - subset: - $ref: 'parameters/common-geodata/subset.yaml' bbox: $ref: 'parameters/common-geodata/bbox.yaml' - # Common - CRS - crs: - $ref: 'parameters/common-crs/crs.yaml' - subset-crs: - $ref: 'parameters/common-crs/subset-crs.yaml' - bbox-crs: - $ref: 'parameters/common-crs/bbox-crs.yaml' - # Coverages - Core sceneId: $ref: 'parameters/coverages-core/sceneId.yaml' @@ -179,6 +163,14 @@ components: $ref: 'parameters/coverages-core/width.yaml' height: $ref: 'parameters/coverages-core/height.yaml' + subset: + $ref: 'parameters/coverages-core/subset.yaml' + crs: + $ref: 'parameters/coverages-core/crs.yaml' + subset-crs: + $ref: 'parameters/coverages-core/subset-crs.yaml' + bbox-crs: + $ref: 'parameters/coverages-core/bbox-crs.yaml' # Coverages - Core (unspecified) f-coverage: diff --git a/standard/openapi/parameters/common-geodata/bbox.yaml b/standard/openapi/parameters/common-geodata/bbox.yaml index f7353ab..5f477e4 100644 --- a/standard/openapi/parameters/common-geodata/bbox.yaml +++ b/standard/openapi/parameters/common-geodata/bbox.yaml @@ -1,9 +1,9 @@ name: bbox in: query description: >- - Only features that have a geometry that intersects the bounding box are selected. + Only resources that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the - coordinate reference system includes a vertical axis (height or depth): + coordinate reference system includes a vertical axis (elevation or depth): * Lower left corner, coordinate axis 1 * Lower left corner, coordinate axis 2 @@ -12,20 +12,24 @@ description: >- * Upper right corner, coordinate axis 2 * Maximum value, coordinate axis 3 (optional) - The coordinate reference system of the values is WGS 84 longitude/latitude - (http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate - reference system is specified in the parameter `bbox-crs`. + If the value consists of four numbers, the coordinate reference system is + WGS84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) + unless a different coordinate reference system is specified in the parameter `bbox-crs`. - For WGS 84 longitude/latitude the values are in most cases the sequence of + 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 WGS84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge). - If the vertical axis is included, the third and the sixth number are - the bottom and the top of the 3-dimensional bounding box. + If 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 + If a resource has multiple spatial geometry properties, it is the decision of the server + whether only a single spatial geometry property is used to determine the extent or all relevant geometries. required: false schema: @@ -37,6 +41,5 @@ schema: maxItems: 6 items: type: number - format: double style: form explode: false diff --git a/standard/openapi/parameters/common-geodata/datetime.yaml b/standard/openapi/parameters/common-geodata/datetime.yaml index 28d58c6..6780b22 100644 --- a/standard/openapi/parameters/common-geodata/datetime.yaml +++ b/standard/openapi/parameters/common-geodata/datetime.yaml @@ -1,8 +1,10 @@ name: datetime in: query -description: |- - Either a date-time or an interval, half-bounded or bounded. Date and time expressions - adhere to RFC 3339. Half-bounded intervals are expressed using double-dots. +description: >- + Either a date-time or an interval. Date and time expressions + adhere to RFC 3339, section 5.6. Intervals may be bounded or half-bounded (double-dots at start or end). + Server implementations may or may not support times expressed using time offsets from UTC, but need to support + UTC time with the notation ending with a Z. Examples: @@ -10,7 +12,7 @@ description: |- * A bounded interval: "2018-02-12T00:00:00Z/2018-03-18T12:31:12Z" * Half-bounded intervals: "2018-02-12T00:00:00Z/.." or "../2018-03-18T12:31:12Z" - Only features that have a temporal property that intersects the value of + Only resources that have a temporal property that intersects the value of `datetime` are selected. If a feature has multiple temporal properties, it is the decision of the diff --git a/standard/openapi/parameters/common-crs/bbox-crs.yaml b/standard/openapi/parameters/coverages-core/bbox-crs.yaml similarity index 100% rename from standard/openapi/parameters/common-crs/bbox-crs.yaml rename to standard/openapi/parameters/coverages-core/bbox-crs.yaml diff --git a/standard/openapi/parameters/common-crs/crs.yaml b/standard/openapi/parameters/coverages-core/crs.yaml similarity index 100% rename from standard/openapi/parameters/common-crs/crs.yaml rename to standard/openapi/parameters/coverages-core/crs.yaml diff --git a/standard/openapi/parameters/common-crs/subset-crs.yaml b/standard/openapi/parameters/coverages-core/subset-crs.yaml similarity index 100% rename from standard/openapi/parameters/common-crs/subset-crs.yaml rename to standard/openapi/parameters/coverages-core/subset-crs.yaml diff --git a/standard/openapi/parameters/common-geodata/subset.yaml b/standard/openapi/parameters/coverages-core/subset.yaml similarity index 100% rename from standard/openapi/parameters/common-geodata/subset.yaml rename to standard/openapi/parameters/coverages-core/subset.yaml diff --git a/standard/openapi/paths/coverages-core/pCoverage.yaml b/standard/openapi/paths/coverages-core/pCoverage.yaml index 7434c2f..345829b 100644 --- a/standard/openapi/paths/coverages-core/pCoverage.yaml +++ b/standard/openapi/paths/coverages-core/pCoverage.yaml @@ -9,7 +9,7 @@ get: operationId: getCoverage parameters: - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' - - $ref: '../../parameters/common-geodata/subset.yaml' + - $ref: '../../parameters/coverages-core/subset.yaml' - $ref: '../../parameters/common-geodata/bbox.yaml' - $ref: '../../parameters/common-geodata/datetime.yaml' - $ref: '../../parameters/coverages-core/properties.yaml' @@ -18,9 +18,9 @@ get: - $ref: '../../parameters/coverages-core/scale-size.yaml' - $ref: '../../parameters/coverages-core/width.yaml' - $ref: '../../parameters/coverages-core/height.yaml' - - $ref: '../../parameters/common-crs/subset-crs.yaml' - - $ref: '../../parameters/common-crs/bbox-crs.yaml' - - $ref: '../../parameters/common-crs/crs.yaml' + - $ref: '../../parameters/coverages-core/subset-crs.yaml' + - $ref: '../../parameters/coverages-core/bbox-crs.yaml' + - $ref: '../../parameters/coverages-core/crs.yaml' - $ref: '../../parameters/unspecified/f-coverage.yaml' responses: '200': diff --git a/standard/openapi/paths/coverages-core/pSceneCoverage.yaml b/standard/openapi/paths/coverages-core/pSceneCoverage.yaml index f71f3d1..1c8d5f0 100644 --- a/standard/openapi/paths/coverages-core/pSceneCoverage.yaml +++ b/standard/openapi/paths/coverages-core/pSceneCoverage.yaml @@ -10,7 +10,7 @@ get: parameters: - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' - $ref: '../../parameters/coverages-core/sceneId.yaml' - - $ref: '../../parameters/common-geodata/subset.yaml' + - $ref: '../../parameters/coverages-core/subset.yaml' - $ref: '../../parameters/common-geodata/bbox.yaml' - $ref: '../../parameters/common-geodata/datetime.yaml' - $ref: '../../parameters/coverages-core/properties.yaml' @@ -19,9 +19,9 @@ get: - $ref: '../../parameters/coverages-core/scale-size.yaml' - $ref: '../../parameters/coverages-core/width.yaml' - $ref: '../../parameters/coverages-core/height.yaml' - - $ref: '../../parameters/common-crs/subset-crs.yaml' - - $ref: '../../parameters/common-crs/bbox-crs.yaml' - - $ref: '../../parameters/common-crs/crs.yaml' + - $ref: '../../parameters/coverages-core/subset-crs.yaml' + - $ref: '../../parameters/coverages-core/bbox-crs.yaml' + - $ref: '../../parameters/coverages-core/crs.yaml' - $ref: '../../parameters/unspecified/f-coverage.yaml' responses: '200': diff --git a/standard/openapi/paths/coverages-core/pSceneCoverageTile.yaml b/standard/openapi/paths/coverages-core/pSceneCoverageTile.yaml index 352cc2b..68a61a8 100644 --- a/standard/openapi/paths/coverages-core/pSceneCoverageTile.yaml +++ b/standard/openapi/paths/coverages-core/pSceneCoverageTile.yaml @@ -10,9 +10,9 @@ get: - $ref: '../../parameters/common-geodata/datetime.yaml' - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' - $ref: '../../parameters/coverages-core/sceneId.yaml' - - $ref: '../../parameters/common-geodata/subset.yaml' - - $ref: '../../parameters/common-crs/crs.yaml' - - $ref: '../../parameters/common-crs/subset-crs.yaml' + - $ref: '../../parameters/coverages-core/subset.yaml' + - $ref: '../../parameters/coverages-core/crs.yaml' + - $ref: '../../parameters/coverages-core/subset-crs.yaml' - $ref: '../../parameters/unspecified/tileMatrixSetId.yaml' - $ref: '../../parameters/unspecified/f-coverageTile.yaml' responses: diff --git a/standard/openapi/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTile.yaml b/standard/openapi/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTile.yaml index d88aacf..b766b20 100644 --- a/standard/openapi/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTile.yaml +++ b/standard/openapi/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTile.yaml @@ -9,9 +9,9 @@ get: - $ref: '../../../../parameters/tiles-core/tileCol.yaml' - $ref: '../../../../parameters/common-geodata/datetime.yaml' - $ref: '../../../../parameters/common-geodata/collectionId-coverage.yaml' - - $ref: '../../../../parameters/common-geodata/subset.yaml' - - $ref: '../../../../parameters/common-crs/crs.yaml' - - $ref: '../../../../parameters/common-crs/subset-crs.yaml' + - $ref: '../../../../parameters/coverages-core/subset.yaml' + - $ref: '../../../../parameters/coverages-core/crs.yaml' + - $ref: '../../../../parameters/coverages-core/subset-crs.yaml' - $ref: '../../../../parameters/unspecified/tileMatrixSetId.yaml' - $ref: '../../../../parameters/unspecified/f-coverageTile.yaml' responses: diff --git a/standard/openapi/responses/common-core/rConformance.yaml b/standard/openapi/responses/common-core/rConformance.yaml index 5399764..3be9795 100644 --- a/standard/openapi/responses/common-core/rConformance.yaml +++ b/standard/openapi/responses/common-core/rConformance.yaml @@ -7,12 +7,20 @@ content: example: conformsTo: - http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/core + - http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/landing-page - http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/json - http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/html - http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/oas30 - http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/collections - - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geodata-coverage + - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/core + - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/subsetting + - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/scaling + - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/fieldselection + - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/crs + - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/tiles + - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/netcdf + - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/geotiff + - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/coveragejson - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/cisjson - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/html - - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/coverage-subset - http://www.opengis.net/spec/ogcapi-coverages-1/1.0/conf/oas30 diff --git a/standard/openapi/responses/common-core/rException.yaml b/standard/openapi/responses/common-core/rException.yaml index a87132b..b53adee 100644 --- a/standard/openapi/responses/common-core/rException.yaml +++ b/standard/openapi/responses/common-core/rException.yaml @@ -1,4 +1,4 @@ -description: An error occured. +description: An error occurred. content: application/json: schema: diff --git a/standard/openapi/responses/common-core/rLandingPage.yaml b/standard/openapi/responses/common-core/rLandingPage.yaml index 53539c0..2973a20 100644 --- a/standard/openapi/responses/common-core/rLandingPage.yaml +++ b/standard/openapi/responses/common-core/rLandingPage.yaml @@ -2,33 +2,33 @@ description: |- The landing page provides links to the API definition (link relation `service-desc`, in this case path `/api`), to the Conformance declaration (path `/conformance`, link relation `conformance`), and to the Collections of geospatial data (path `/collections`, link relation `data`). content: - application/json: - schema: - $ref: '../../schemas/common-core/landingPage.yaml' - example: - title: Elevation in Bonn - description: Access to elevation data in the city of Bonn via a Web API that conforms to the OGC API - Coverages specification. - links: - - href: http://data.example.org/ - rel: self - type: application/json - title: this document - - href: http://data.example.org/api - rel: service-desc - type: application/vnd.oai.openapi+json;version=3.0 - title: the API definition - - href: http://data.example.org/api.html - rel: service-doc - type: text/html - title: the API documentation - - href: http://data.example.org/conformance - rel: http://www.opengis.net/def/rel/ogc/1.0/conformance - type: application/json - title: OGC API conformance classes implemented by this service - - href: http://data.example.org/collections - rel: http://www.opengis.net/def/rel/ogc/1.0/data - type: application/json - title: Information about the collections (e.g. the coverages) - text/html: - schema: - type: string + application/json: + schema: + $ref: '../../schemas/common-core/landingPage.yaml' + example: + title: Elevation in Bonn + description: Access to elevation data in the city of Bonn via a Web API that conforms to the OGC API - Coverages specification. + links: + - href: http://data.example.org/ + rel: self + type: application/json + title: this document + - href: http://data.example.org/api + rel: service-desc + type: application/vnd.oai.openapi+json;version=3.0 + title: the API definition + - href: http://data.example.org/api.html + rel: service-doc + type: text/html + title: the API documentation + - href: http://data.example.org/conformance + rel: http://www.opengis.net/def/rel/ogc/1.0/conformance + type: application/json + title: OGC API conformance classes implemented by this service + - href: http://data.example.org/collections + rel: http://www.opengis.net/def/rel/ogc/1.0/data + type: application/json + title: Information about the collections (i.e.,. the coverages) + text/html: + schema: + type: string diff --git a/standard/openapi/responses/common-geodata/rCollection.yaml b/standard/openapi/responses/common-geodata/rCollection.yaml index cfcc651..568159a 100644 --- a/standard/openapi/responses/common-geodata/rCollection.yaml +++ b/standard/openapi/responses/common-geodata/rCollection.yaml @@ -6,45 +6,45 @@ description: |- * 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/coverages-core/coverageInfo.yaml' - example: - id: elevation - title: Elevation - description: Elevation in the city of Bonn. - extent: - spatial: - bbox: - - - 7.01 - - 50.63 - - 7.22 - - 50.78 - links: - - href: http://data.example.org/collections/elevation/coverage/domainset - rel: http://www.opengis.net/def/rel/ogc/1.0/coverage-domainset - type: application/json - title: Elevation - - href: http://data.example.org/collections/elevation/coverage/rangetype - rel: http://www.opengis.net/def/rel/ogc/1.0/coverage-rangetype - type: application/json - title: Elevation - - href: http://data.example.org/collections/elevation/coverage - rel: http://www.opengis.net/def/rel/ogc/1.0/coverage - type: application/json - title: Elevation - - href: http://data.example.org/collections/buildings/coverage.html - rel: http://www.opengis.net/def/rel/ogc/1.0/coverage - type: text/html - title: Elevation - - href: https://creativecommons.org/publicdomain/zero/1.0/ - rel: license - type: text/html - title: CC0-1.0 - - href: https://creativecommons.org/publicdomain/zero/1.0/rdf - rel: license - type: application/rdf+xml - title: CC0-1.0 - text/html: - schema: - type: string + application/json: + schema: + $ref: '../../schemas/common-geodata/collectionDesc.yaml' + example: + id: elevation + title: Elevation + description: Elevation in the city of Bonn. + extent: + spatial: + bbox: + - - 7.01 + - 50.63 + - 7.22 + - 50.78 + links: + - href: http://data.example.org/collections/elevation/schema + rel: http://www.opengis.net/def/rel/ogc/1.0/schema + type: application/schema+json + title: Schema (fields) + - href: http://data.example.org/collections/elevation/coverage.tiff + rel: http://www.opengis.net/def/rel/ogc/1.0/coverage + type: image/tiff; application=geotiff + title: Elevation data (as GeoTIFF) + - href: http://data.example.org/collections/elevation/coverage.covjson + rel: http://www.opengis.net/def/rel/ogc/1.0/coverage + type: application/prs.coverage+json + title: Elevation data (as CoverageJSON) + - href: http://data.example.org/collections/elevation/coverage.cisjson + rel: http://www.opengis.net/def/rel/ogc/1.0/coverage + type: application/json + title: Elevation data (as CIS JSON) + - href: https://creativecommons.org/publicdomain/zero/1.0/ + rel: license + type: text/html + title: CC0-1.0 + - href: https://creativecommons.org/publicdomain/zero/1.0/rdf + rel: license + type: application/rdf+xml + title: CC0-1.0 + text/html: + schema: + type: string diff --git a/standard/openapi/responses/common-geodata/rCollectionsList.yaml b/standard/openapi/responses/common-geodata/rCollectionsList.yaml index f076d37..d075c03 100644 --- a/standard/openapi/responses/common-geodata/rCollectionsList.yaml +++ b/standard/openapi/responses/common-geodata/rCollectionsList.yaml @@ -8,7 +8,7 @@ description: |- content: application/json: schema: - $ref: '../../schemas/coverages-core/coverages.yaml' + $ref: '../../schemas/common-geodata/collections.yaml' example: links: - href: http://data.example.org/collections.json @@ -36,22 +36,22 @@ content: - 7.22 - 50.78 links: - - href: http://data.example.org/collections/elevation/coverage/domainset - rel: http://www.opengis.net/def/rel/ogc/1.0/coverage-domainset + - href: http://data.example.org/collections/elevation/schema + rel: http://www.opengis.net/def/rel/ogc/1.0/schema + type: application/schema+json + title: Schema (fields) + - href: http://data.example.org/collections/elevation/coverage.geotiff + rel: http://www.opengis.net/def/rel/ogc/1.0/coverage + type: image/tiff; application=geotiff + title: Elevation data (as GeoTIFF) + - href: http://data.example.org/collections/elevation/coverage.covjson + rel: http://www.opengis.net/def/rel/ogc/1.0/coverage + type: application/prs.coverage+json + title: Elevation data (as CoverageJSON) + - href: http://data.example.org/collections/elevation/coverage.cisjson + rel: http://www.opengis.net/def/rel/ogc/1.0/coverage type: application/json - title: Elevation - - href: http://data.example.org/collections/elevation/coverage/rangetype - rel: http://www.opengis.net/def/rel/ogc/1.0/coverage-rangetype - type: application/json - title: Elevation - - href: http://data.example.org/collections/elevation/coverage - rel: items - type: application/json - title: Elevation - - href: http://data.example.org/collections/elevation/coverage.html - rel: items - type: text/html - title: Elevation + title: Elevation data (as CIS JSON) - href: https://creativecommons.org/publicdomain/zero/1.0/ rel: license type: text/html diff --git a/standard/openapi/responses/coverages-core/rScene.yaml b/standard/openapi/responses/coverages-core/rScene.yaml index cfcc651..e7cf63b 100644 --- a/standard/openapi/responses/coverages-core/rScene.yaml +++ b/standard/openapi/responses/coverages-core/rScene.yaml @@ -1,14 +1,9 @@ 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: - * 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); - * 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'). + Information about a particular scene of a coverage. content: application/json: schema: - $ref: '../../schemas/coverages-core/coverageInfo.yaml' + $ref: '../../schemas/common-geodata/collectionDesc.yaml' example: id: elevation title: Elevation diff --git a/standard/openapi/schemas/common-core/link.yaml b/standard/openapi/schemas/common-core/link.yaml index 82f6231..35ce773 100644 --- a/standard/openapi/schemas/common-core/link.yaml +++ b/standard/openapi/schemas/common-core/link.yaml @@ -15,13 +15,6 @@ properties: type: string description: A hint indicating what the media type of the result of dereferencing the link should be. example: application/geo+json - templated: - type: boolean - description: This flag set to true if the link is a URL template. - varBase: - description: A base path to retrieve semantic information about the variables used in URL template. - type: string - example: /ogcapi/vars/ hreflang: type: string description: A hint indicating what the language of the result of dereferencing the link should be. diff --git a/standard/openapi/schemas/common-geodata/collectionInfo.yaml b/standard/openapi/schemas/common-geodata/collectionDesc.yaml similarity index 97% rename from standard/openapi/schemas/common-geodata/collectionInfo.yaml rename to standard/openapi/schemas/common-geodata/collectionDesc.yaml index bc92cfd..fb3e7b1 100644 --- a/standard/openapi/schemas/common-geodata/collectionInfo.yaml +++ b/standard/openapi/schemas/common-geodata/collectionDesc.yaml @@ -15,6 +15,9 @@ properties: type: string description: a description of the data in the collection example: A Digital Elevation Model. + attribution: + type: string + title: attribution for the collection links: type: array example: diff --git a/standard/openapi/schemas/common-geodata/collections.yaml b/standard/openapi/schemas/common-geodata/collections.yaml index 2e57c44..38eb877 100644 --- a/standard/openapi/schemas/common-geodata/collections.yaml +++ b/standard/openapi/schemas/common-geodata/collections.yaml @@ -21,4 +21,4 @@ properties: collections: type: array items: - $ref: 'collectionInfo.yaml' + $ref: 'collectionDesc.yaml' diff --git a/standard/openapi/schemas/common-geodata/extent-uad.yaml b/standard/openapi/schemas/common-geodata/extent-uad.yaml index 0e25313..8aad409 100644 --- a/standard/openapi/schemas/common-geodata/extent-uad.yaml +++ b/standard/openapi/schemas/common-geodata/extent-uad.yaml @@ -38,6 +38,7 @@ allOf: - type: number example: - '2011-11-11T12:22:11Z' + - '2011-11-11T08:22:11-04:00' - 32.5 - null trs: diff --git a/standard/openapi/schemas/common-geodata/extent.yaml b/standard/openapi/schemas/common-geodata/extent.yaml index d1a7782..acd7ad3 100644 --- a/standard/openapi/schemas/common-geodata/extent.yaml +++ b/standard/openapi/schemas/common-geodata/extent.yaml @@ -176,7 +176,8 @@ properties: 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. + 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 @@ -188,6 +189,7 @@ properties: nullable: true example: - '2011-11-11T12:22:11Z' + - '2011-11-11T08:22:11-04:00' - null trs: description: |- diff --git a/standard/openapi/schemas/common-geodata/numberReturned.yaml b/standard/openapi/schemas/common-geodata/numberReturned.yaml index 7efb409..9227518 100644 --- a/standard/openapi/schemas/common-geodata/numberReturned.yaml +++ b/standard/openapi/schemas/common-geodata/numberReturned.yaml @@ -1,9 +1,9 @@ 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. + The number of items in the response. + A server may omit this information, if the information about the + number of items 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. + of items in the response. type: integer minimum: 0 -example: 10 \ No newline at end of file +example: 10 diff --git a/standard/openapi/schemas/coverages-core/coverageInfo.yaml b/standard/openapi/schemas/coverages-core/coverageInfo.yaml deleted file mode 100644 index 418c2dd..0000000 --- a/standard/openapi/schemas/coverages-core/coverageInfo.yaml +++ /dev/null @@ -1,12 +0,0 @@ -allOf: - - $ref: '../common-geodata/collectionInfo.yaml' - - type: object - required: - - extent - properties: - orderedAxes: - type: array - minItems: 1 - items: - type: string - description: axis labels of all dimensions listed in CRS order. Spatial dimensions should be listed separately here. diff --git a/standard/openapi/schemas/coverages-core/coverages.yaml b/standard/openapi/schemas/coverages-core/coverages.yaml deleted file mode 100644 index ebf5085..0000000 --- a/standard/openapi/schemas/coverages-core/coverages.yaml +++ /dev/null @@ -1,8 +0,0 @@ -allOf: - - $ref: '../common-geodata/collections.yaml' - - type: object - properties: - collections: - type: array - items: - $ref: 'coverageInfo.yaml'