From ad17dc2f5f1a6177262acefbc0f0f3fc18a69079 Mon Sep 17 00:00:00 2001 From: rng Date: Mon, 28 Sep 2026 17:24:44 +1000 Subject: [PATCH 1/3] Update schema and update codegen version --- coverages/pom.xml | 14 +- .../coverages/ogcapi-coverages-1.bundled.json | 2441 ++++++++--------- .../schema/coverages/ogcapi-coverages-1.yaml | 99 +- .../parameters/common-geodata/bbox.yaml | 25 +- .../parameters/common-geodata/datetime.yaml | 10 +- .../bbox-crs.yaml | 0 .../{common-crs => coverages-core}/crs.yaml | 0 .../coverages-core/exclude-properties.yaml | 9 + .../parameters/coverages-core/height.yaml | 9 + .../parameters/coverages-core/properties.yaml | 16 +- .../parameters/coverages-core/resolution.yaml | 19 + .../parameters/coverages-core/sceneId.yaml | 6 + .../subset-crs.yaml | 0 .../subset.yaml | 4 +- .../parameters/coverages-core/width.yaml | 9 + .../unspecified/f-coverageTile.yaml | 3 +- .../paths/coverages-core/pCoverage.yaml | 15 +- .../paths/coverages-core/pDomainSet.yaml | 21 - .../paths/coverages-core/pMetadata.yaml | 16 - .../paths/coverages-core/pRangeSet.yaml | 25 - .../paths/coverages-core/pRangeType.yaml | 15 - .../paths/coverages-core/pScene.yaml | 17 + .../paths/coverages-core/pSceneCoverage.yaml | 29 + .../coverages-core/pSceneCoverageTile.yaml | 28 + .../coverages-core/pSceneCoverageTileSet.yaml | 19 + .../pSceneCoverageTileSetsList.yaml | 18 + .../paths/coverages-core/pScenesList.yaml | 16 + .../paths/coverages-core/pSchema.yaml | 17 + .../paths/dynamic/pAllCollections.yaml | 2 +- .../paths/dynamic/pCoverageCollections.yaml | 2 +- .../paths/dynamic/pTileMatrixSets.yaml | 2 +- .../pCollectionCoverageTile.yaml | 10 +- .../pCollectionCoverageTileSet.yaml | 2 +- .../pCollectionCoverageTileSetsList.yaml | 2 +- .../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/rCoverage.yaml | 36 +- .../responses/coverages-core/rDomainSet.yaml | 8 - .../responses/coverages-core/rMetadata.yaml | 8 - .../responses/coverages-core/rRangeSet.yaml | 8 - .../responses/coverages-core/rRangeType.yaml | 8 - .../responses/coverages-core/rScene.yaml | 45 + .../responses/coverages-core/rScenesList.yaml | 9 + .../responses/coverages-core/rSchema.yaml | 8 + .../schemas/cis/coverage-schema.yaml | 18 +- .../coverages/schemas/common-core/link.yaml | 7 - ...ollectionInfo.yaml => collectionDesc.yaml} | 8 + .../schemas/common-geodata/collections.yaml | 10 +- .../coverages/schemas/common-geodata/crs.yaml | 2 +- .../schemas/common-geodata/dataType.yaml | 2 +- .../schemas/common-geodata/extent-uad.yaml | 17 +- .../schemas/common-geodata/extent.yaml | 85 +- .../schemas/common-geodata/numberMatched.yaml | 3 +- .../common-geodata/numberReturned.yaml | 8 +- .../schemas/coverages-core/coverageInfo.yaml | 73 - .../schemas/coverages-core/coverages.yaml | 8 - .../position-query-response.yaml | 11 + .../schemas/coverages-core/scene.yaml | 27 + .../schemas/coverages-core/sceneItem.yaml | 12 + .../schemas/coverages-core/scenesList.yaml | 24 + .../schemas/tms/propertiesSchema.yaml | 11 +- pom.xml | 2 +- records/pom.xml | 4 +- .../ogcapi-records-1-building-blocks.yaml | 972 +++++++ .../ogcapi-records-1-example-all-in-one.yaml | 1775 ++++++++++++ ...s-1-example-ref-buildingblocks-bundle.yaml | 243 ++ ...api-records-1-example-ref-schema-repo.yaml | 242 ++ .../schema/records/ogcapi-records-1.yaml | 805 ------ .../schema/records/parameters/catalogId.yaml | 7 + .../records/parameters/externalIds.yaml | 16 + .../schema/records/parameters/ids.yaml | 15 + .../schema/records/parameters/language.yaml | 20 + .../schema/records/parameters/profile.yaml | 15 + .../schema/records/parameters/q.yaml | 17 + .../schema/records/parameters/recordId.yaml | 7 + .../schema/records/parameters/sortby.yaml | 19 + .../schema/records/parameters/type.yaml | 17 + .../schema/records/responses/BadRequest.yaml | 10 + .../schema/records/responses/Catalog.yaml | 28 + .../schema/records/responses/Catalogs.yaml | 10 + .../responses/ConformanceDeclaration.yaml | 10 + .../records/responses/InvalidParameter.yaml | 10 + .../schema/records/responses/LandingPage.yaml | 13 + .../records/responses/NotAcceptable.yaml | 12 + .../schema/records/responses/NotFound.yaml | 11 + .../schema/records/responses/Record.yaml | 11 + .../schema/records/responses/Records.yaml | 28 + .../schema/records/responses/ServerError.yaml | 10 + .../schema/records/responses/Sortables.yaml | 12 + .../schema/records/schemas/catalog.yaml | 29 + .../schemas/catalogCommonProperties.yaml | 60 + .../schema/records/schemas/catalogs.yaml | 12 + .../schema/records/schemas/collection.yaml | 12 + .../schema/records/schemas/contact.yaml | 125 + .../records/schemas/defaultSortOrder.yaml | 15 + .../schema/records/schemas/format.yaml | 12 + .../schema/records/schemas/landingPage.yaml | 9 + .../schema/records/schemas/language.yaml | 36 + .../schema/records/schemas/license.yaml | 18 + .../schema/records/schemas/link.yaml | 10 + .../schema/records/schemas/linkBase.yaml | 45 + .../schema/records/schemas/linkTemplate.yaml | 28 + .../schemas/recordCollectionGeoJSON.yaml | 12 + .../schemas/recordCommonProperties.yaml | 103 + .../schema/records/schemas/recordGeoJSON.yaml | 49 + .../schema/records/schemas/recordJSON.yaml | 36 + .../schema/records/schemas/roles.yaml | 8 + .../schema/records/schemas/scheme.yaml | 21 + .../schema/records/schemas/theme.yaml | 44 + .../schema/records/schemas/time.yaml | 27 + 113 files changed, 6084 insertions(+), 2534 deletions(-) rename coverages/src/main/resources/schema/coverages/parameters/{common-crs => coverages-core}/bbox-crs.yaml (100%) rename coverages/src/main/resources/schema/coverages/parameters/{common-crs => coverages-core}/crs.yaml (100%) create mode 100644 coverages/src/main/resources/schema/coverages/parameters/coverages-core/exclude-properties.yaml create mode 100644 coverages/src/main/resources/schema/coverages/parameters/coverages-core/height.yaml create mode 100644 coverages/src/main/resources/schema/coverages/parameters/coverages-core/resolution.yaml create mode 100644 coverages/src/main/resources/schema/coverages/parameters/coverages-core/sceneId.yaml rename coverages/src/main/resources/schema/coverages/parameters/{common-crs => coverages-core}/subset-crs.yaml (100%) rename coverages/src/main/resources/schema/coverages/parameters/{common-geodata => coverages-core}/subset.yaml (55%) create mode 100644 coverages/src/main/resources/schema/coverages/parameters/coverages-core/width.yaml delete mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pDomainSet.yaml delete mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pMetadata.yaml delete mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pRangeSet.yaml delete mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pRangeType.yaml create mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pScene.yaml create mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverage.yaml create mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTile.yaml create mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTileSet.yaml create mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTileSetsList.yaml create mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pScenesList.yaml create mode 100644 coverages/src/main/resources/schema/coverages/paths/coverages-core/pSchema.yaml delete mode 100644 coverages/src/main/resources/schema/coverages/responses/coverages-core/rDomainSet.yaml delete mode 100644 coverages/src/main/resources/schema/coverages/responses/coverages-core/rMetadata.yaml delete mode 100644 coverages/src/main/resources/schema/coverages/responses/coverages-core/rRangeSet.yaml delete mode 100644 coverages/src/main/resources/schema/coverages/responses/coverages-core/rRangeType.yaml create mode 100644 coverages/src/main/resources/schema/coverages/responses/coverages-core/rScene.yaml create mode 100644 coverages/src/main/resources/schema/coverages/responses/coverages-core/rScenesList.yaml create mode 100644 coverages/src/main/resources/schema/coverages/responses/coverages-core/rSchema.yaml rename coverages/src/main/resources/schema/coverages/schemas/common-geodata/{collectionInfo.yaml => collectionDesc.yaml} (86%) delete mode 100644 coverages/src/main/resources/schema/coverages/schemas/coverages-core/coverageInfo.yaml delete mode 100644 coverages/src/main/resources/schema/coverages/schemas/coverages-core/coverages.yaml create mode 100644 coverages/src/main/resources/schema/coverages/schemas/coverages-core/position-query-response.yaml create mode 100644 coverages/src/main/resources/schema/coverages/schemas/coverages-core/scene.yaml create mode 100644 coverages/src/main/resources/schema/coverages/schemas/coverages-core/sceneItem.yaml create mode 100644 coverages/src/main/resources/schema/coverages/schemas/coverages-core/scenesList.yaml create mode 100644 records/src/main/resources/schema/records/ogcapi-records-1-building-blocks.yaml create mode 100644 records/src/main/resources/schema/records/ogcapi-records-1-example-all-in-one.yaml create mode 100644 records/src/main/resources/schema/records/ogcapi-records-1-example-ref-buildingblocks-bundle.yaml create mode 100644 records/src/main/resources/schema/records/ogcapi-records-1-example-ref-schema-repo.yaml delete mode 100644 records/src/main/resources/schema/records/ogcapi-records-1.yaml create mode 100644 records/src/main/resources/schema/records/parameters/catalogId.yaml create mode 100644 records/src/main/resources/schema/records/parameters/externalIds.yaml create mode 100644 records/src/main/resources/schema/records/parameters/ids.yaml create mode 100644 records/src/main/resources/schema/records/parameters/language.yaml create mode 100644 records/src/main/resources/schema/records/parameters/profile.yaml create mode 100644 records/src/main/resources/schema/records/parameters/q.yaml create mode 100644 records/src/main/resources/schema/records/parameters/recordId.yaml create mode 100644 records/src/main/resources/schema/records/parameters/sortby.yaml create mode 100644 records/src/main/resources/schema/records/parameters/type.yaml create mode 100644 records/src/main/resources/schema/records/responses/BadRequest.yaml create mode 100644 records/src/main/resources/schema/records/responses/Catalog.yaml create mode 100644 records/src/main/resources/schema/records/responses/Catalogs.yaml create mode 100644 records/src/main/resources/schema/records/responses/ConformanceDeclaration.yaml create mode 100644 records/src/main/resources/schema/records/responses/InvalidParameter.yaml create mode 100644 records/src/main/resources/schema/records/responses/LandingPage.yaml create mode 100644 records/src/main/resources/schema/records/responses/NotAcceptable.yaml create mode 100644 records/src/main/resources/schema/records/responses/NotFound.yaml create mode 100644 records/src/main/resources/schema/records/responses/Record.yaml create mode 100644 records/src/main/resources/schema/records/responses/Records.yaml create mode 100644 records/src/main/resources/schema/records/responses/ServerError.yaml create mode 100644 records/src/main/resources/schema/records/responses/Sortables.yaml create mode 100644 records/src/main/resources/schema/records/schemas/catalog.yaml create mode 100644 records/src/main/resources/schema/records/schemas/catalogCommonProperties.yaml create mode 100644 records/src/main/resources/schema/records/schemas/catalogs.yaml create mode 100644 records/src/main/resources/schema/records/schemas/collection.yaml create mode 100644 records/src/main/resources/schema/records/schemas/contact.yaml create mode 100644 records/src/main/resources/schema/records/schemas/defaultSortOrder.yaml create mode 100644 records/src/main/resources/schema/records/schemas/format.yaml create mode 100644 records/src/main/resources/schema/records/schemas/landingPage.yaml create mode 100644 records/src/main/resources/schema/records/schemas/language.yaml create mode 100644 records/src/main/resources/schema/records/schemas/license.yaml create mode 100644 records/src/main/resources/schema/records/schemas/link.yaml create mode 100644 records/src/main/resources/schema/records/schemas/linkBase.yaml create mode 100644 records/src/main/resources/schema/records/schemas/linkTemplate.yaml create mode 100644 records/src/main/resources/schema/records/schemas/recordCollectionGeoJSON.yaml create mode 100644 records/src/main/resources/schema/records/schemas/recordCommonProperties.yaml create mode 100644 records/src/main/resources/schema/records/schemas/recordGeoJSON.yaml create mode 100644 records/src/main/resources/schema/records/schemas/recordJSON.yaml create mode 100644 records/src/main/resources/schema/records/schemas/roles.yaml create mode 100644 records/src/main/resources/schema/records/schemas/scheme.yaml create mode 100644 records/src/main/resources/schema/records/schemas/theme.yaml create mode 100644 records/src/main/resources/schema/records/schemas/time.yaml diff --git a/coverages/pom.xml b/coverages/pom.xml index ae3cad47..3f38126c 100644 --- a/coverages/pom.xml +++ b/coverages/pom.xml @@ -117,7 +117,19 @@ import au\.org\.aodn\.ogcapi\.coverages\.model\.TimeStamp - + + + + + import io\.swagger\.v3\.oas\.annotations\.media\.Schema; + + + + @Schema + @io.swagger.v3.oas.annotations.media.Schema diff --git a/coverages/src/main/resources/schema/coverages/ogcapi-coverages-1.bundled.json b/coverages/src/main/resources/schema/coverages/ogcapi-coverages-1.bundled.json index 66bea38b..997c68ee 100644 --- a/coverages/src/main/resources/schema/coverages/ogcapi-coverages-1.bundled.json +++ b/coverages/src/main/resources/schema/coverages/ogcapi-coverages-1.bundled.json @@ -102,7 +102,7 @@ "API" ], "operationId": "getAPICollections", - "summary": "Retrieve the list of collections available from this API implementation & deployment.", + "summary": "JSON enumeration of all the collections available from this API implementation & deployment (for inclusion in the API definition).", "parameters": [ { "$ref": "#/components/parameters/f-metadata" @@ -130,7 +130,7 @@ "API" ], "operationId": "getAPICoverageCollections", - "summary": "Retrieve the list of coverages collections available from this API implementation & deployment.", + "summary": "JSON enumeration of the coverage collections available from this API implementation & deployment (for inclusion in the API definition).", "parameters": [ { "$ref": "#/components/parameters/f-metadata" @@ -158,7 +158,7 @@ "API" ], "operationId": "getAPITileMatrixSets", - "summary": "Retrieve the list of shared TileMatrixSets available from this API implementation & deployment.", + "summary": "JSON enumeration of the shared TileMatrixSets available from this API implementation & deployment (for inclusion in the API definition).", "parameters": [ { "$ref": "#/components/parameters/f-metadata" @@ -266,216 +266,33 @@ "$ref": "#/components/parameters/properties" }, { - "$ref": "#/components/parameters/scale-factor" + "$ref": "#/components/parameters/exclude-properties" }, { - "$ref": "#/components/parameters/scale-axes" + "$ref": "#/components/parameters/resolution" }, { - "$ref": "#/components/parameters/scale-size" + "$ref": "#/components/parameters/width" }, { - "$ref": "#/components/parameters/subset-crs" - }, - { - "$ref": "#/components/parameters/bbox-crs" - }, - { - "$ref": "#/components/parameters/crs" - }, - { - "$ref": "#/components/parameters/f-coverage" - } - ], - "responses": { - "200": { - "description": "A full coverage.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/coverageSchema" - } - }, - "image/tiff; application=geotiff": { - "schema": { - "type": "string", - "format": "binary" - } - }, - "multipart/related": { - "schema": { - "type": "string", - "format": "binary" - } - }, - "text/html": { - "schema": { - "type": "string" - } - } - } - }, - "default": { - "$ref": "#/components/responses/Exception" - } - } - } - }, - "/collections/{collectionId}/coverage/domainset": { - "get": { - "tags": [ - "Coverage" - ], - "summary": "Retrieve a coverage's domainset; use content negotiation to request HTML or JSON", - "description": "a coverage's domainset", - "operationId": "getCoverageDomainSet", - "parameters": [ - { - "$ref": "#/components/parameters/collectionId-coverage" - }, - { - "$ref": "#/components/parameters/subset" - }, - { - "$ref": "#/components/parameters/bbox" - }, - { - "$ref": "#/components/parameters/datetime" - }, - { - "$ref": "#/components/parameters/crs" - }, - { - "$ref": "#/components/parameters/bbox-crs" + "$ref": "#/components/parameters/height" }, { "$ref": "#/components/parameters/subset-crs" }, - { - "$ref": "#/components/parameters/f-domainset" - } - ], - "responses": { - "200": { - "description": "A coverages domainset.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/domainSet" - } - }, - "text/html": { - "schema": { - "type": "string" - } - } - } - }, - "default": { - "$ref": "#/components/responses/Exception" - } - } - } - }, - "/collections/{collectionId}/coverage/rangetype": { - "get": { - "tags": [ - "Coverage" - ], - "summary": "Retrieve a coverage's rangetype; use content negotiation to request HTML or JSON", - "description": "a coverage's rangetype", - "operationId": "getCoverageRangeType", - "parameters": [ - { - "$ref": "#/components/parameters/collectionId-coverage" - }, - { - "$ref": "#/components/parameters/f-rangetype" - } - ], - "responses": { - "200": { - "description": "A coverage's rangetype.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/rangeType" - } - }, - "text/html": { - "schema": { - "type": "string" - } - } - } - }, - "default": { - "$ref": "#/components/responses/Exception" - } - } - } - }, - "/collections/{collectionId}/coverage/rangeset": { - "get": { - "tags": [ - "Coverage" - ], - "summary": "Retrieve a coverage's rangeset (i.e., the data record values only); use content negotiation to specify output format", - "description": "a coverage's rangeset", - "operationId": "getCoverageRangeSet", - "parameters": [ - { - "$ref": "#/components/parameters/collectionId-coverage" - }, - { - "$ref": "#/components/parameters/subset" - }, - { - "$ref": "#/components/parameters/bbox" - }, - { - "$ref": "#/components/parameters/datetime" - }, - { - "$ref": "#/components/parameters/properties" - }, - { - "$ref": "#/components/parameters/scale-factor" - }, - { - "$ref": "#/components/parameters/scale-axes" - }, - { - "$ref": "#/components/parameters/scale-size" - }, { "$ref": "#/components/parameters/bbox-crs" }, - { - "$ref": "#/components/parameters/subset-crs" - }, { "$ref": "#/components/parameters/crs" }, { - "$ref": "#/components/parameters/f-rangeset" + "$ref": "#/components/parameters/f-coverage" } ], "responses": { "200": { - "description": "A coverage's range set.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/rangeSet" - } - }, - "text/html": { - "schema": { - "type": "string" - } - } - } + "$ref": "#/components/responses/Coverage" }, "default": { "$ref": "#/components/responses/Exception" @@ -483,14 +300,14 @@ } } }, - "/collections/{collectionId}/coverage/metadata": { + "/collections/{collectionId}/schema": { "get": { "tags": [ "Coverage" ], - "summary": "retrieve a coverage's metadata; use content negotiation to request HTML or GeoJSON", - "description": "a coverage's metadata", - "operationId": "getCoverageMetadata", + "summary": "Retrieve the schema of the coverage identified by {collectionId}", + "description": "Schema for coverage identified by {collectionId}.\nUse content negotiation to request required format.", + "operationId": "getCollectionSchema", "parameters": [ { "$ref": "#/components/parameters/collectionId-coverage" @@ -501,11 +318,11 @@ ], "responses": { "200": { - "description": "A coverage's metadata.", + "description": "Collection schema describing all fields of the coverage", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/coverageSchema/oneOf/0/properties/metadata" + "$ref": "#/components/schemas/schema" } }, "text/html": { @@ -521,10 +338,10 @@ } } }, - "/collections/{collectionId}/coverage/tiles": { + "/collections/{collectionId}/tiles": { "get": { "tags": [ - "Coverage Tiles" + "Tiled Coverage Data" ], "summary": "Retrieve the list of available coverage tilesets for the specified collection.", "operationId": ".collection.coverage.getTileSetsList", @@ -552,10 +369,10 @@ } } }, - "/collections/{collectionId}/coverage/tiles/{tileMatrixSetId}": { + "/collections/{collectionId}/tiles/{tileMatrixSetId}": { "get": { "tags": [ - "Coverage Tiles" + "Tiled Coverage Data" ], "summary": "Retrieve the coverage tileset metadata for the specified collection and tiling scheme (tile matrix set)", "operationId": ".collection.coverage.getTileSet", @@ -586,12 +403,12 @@ } } }, - "/collections/{collectionId}/coverage/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}": { + "/collections/{collectionId}/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}": { "get": { "tags": [ - "Coverage Tiles" + "Tiled Coverage Data" ], - "summary": "Retrieve coverage tiles", + "summary": "Retrieve tiled coverage data", "operationId": ".collection.coverage.getTile", "parameters": [ { @@ -683,15 +500,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.", @@ -779,24 +587,20 @@ "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", "items": { - "$ref": "#/components/schemas/collectionInfo" + "$ref": "#/components/schemas/collectionDesc" } } } }, - "collectionInfo": { + "collectionDesc": { "type": "object", "required": [ "id", @@ -818,6 +622,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": [ @@ -884,6 +692,12 @@ "http://www.opengis.net/def/crs/EPSG/0/4326" ] }, + "storageCrs": { + "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", + "type": "string", + "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "example": "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + }, "dataType": { "allOf": [ { @@ -927,11 +741,39 @@ "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.", + "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": { + "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)\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.", + "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": [ { @@ -955,7 +797,7 @@ } }, "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.", + "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 non-terrestrial coordinate reference system, another CRS may be specified.", "type": "string", "enum": [ "http://www.opengis.net/def/crs/OGC/1.3/CRS84", @@ -1025,7 +867,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, @@ -1036,6 +878,7 @@ }, "example": [ "2011-11-11T12:22:11Z", + "2011-11-11T08:22:11-04:00", null ] } @@ -1047,6 +890,46 @@ "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" ], "default": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" + }, + "grid": { + "type": "object", + "description": "Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the temporal dimension.", + "properties": { + "coordinates": { + "description": "List of coordinates along the temporal dimension for which data organized as an irregular grid in the collection is available\n(e.g., \"2017-11-14T09:00Z\",\"2017-11-14T12:00Z\",\"2017-11-14T15:00Z\",\"2017-11-14T18:00Z\",\"2017-11-14T21:00Z\").", + "type": "array", + "minItems": 1, + "items": { + "type": "string", + "nullable": true + }, + "example": [ + [ + "2020-11-12T12:15Z", + "2020-11-12T12:30Z", + "2020-11-12T12:45Z" + ] + ] + }, + "cellsCount": { + "description": "Number of samples available along the temporal dimension for data organized as a regular grid.\nFor values representing the whole area of contiguous cells spanning _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_.\nFor values representing infinitely small point cells spaced by _resolution_ units along the dimension, this will be (_upperBound_ - _lowerBound_) / _resolution_ + 1.", + "type": "integer", + "example": 50 + }, + "resolution": { + "description": "Resolution of regularly gridded data along the temporal dimension in the collection", + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "number" + } + ], + "example": "PT1H" + } + } } } } @@ -1068,7 +951,7 @@ { "required": [ "interval", - "crs" + "definition" ] }, { @@ -1107,15 +990,12 @@ }, "example": [ "2011-11-11T12:22:11Z", + "2011-11-11T08:22:11-04:00", 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')" @@ -1172,6 +1052,20 @@ ] } } + }, + "definition": { + "type": "string", + "format": "uri", + "description": "A URI to the definition of the measured or observed property corresponding to this dimension." + }, + "unit": { + "type": "string", + "description": "The unit of measure in which the interval and/or grid values are expressed." + }, + "unitLang": { + "type": "string", + "default": "UCUM", + "description": "The language (or vocabulary) in which the unit is expressed (defaults to \"UCUM\" if not specified)." } } } @@ -1208,7 +1102,7 @@ "wkt": { "allOf": [ { - "description": "A string defining the CRS using the JSON encodng for Well-known text representation of coordinate reference systems 2.0" + "description": "An object defining the CRS using the JSON encoding for Well-known text representation of coordinate reference systems 2.0" }, { "type": "object" @@ -1233,7 +1127,7 @@ ] }, "dataType": { - "oneOf": [ + "anyOf": [ { "type": "string" }, @@ -1254,647 +1148,130 @@ "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 elements in the response.\nA server may omit this information, if the information about the\nnumber of elements is not known or difficult to compute.\nIf the value is provided, the value shall be identical to the number\nof 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`.", + "description": "The number of elements in the response that match the selection parameters like `bbox`.", "type": "integer", "minimum": 0, "example": 127 }, - "domainSet": { + "schema": { + "description": "Attributes of the features or rangetypes of a coverage. Defined by a subset of the JSON Schema for the properties of a feature", "type": "object", - "title": "domainSet", - "description": "The domainSet describes the *direct positions* of the coverage, i.e., the locations for which values are available.", - "oneOf": [ - { - "required": [ - "type", - "generalGrid" - ], - "properties": { - "type": { - "enum": [ - "DomainSet" - ] - }, - "generalGrid": { - "title": "General Grid", - "description": "A general n-D grid is defined through a sequence of axes, each of which can be of a particular axis type.", - "type": "object", - "required": [ - "type" - ], - "additionalProperties": false, - "properties": { - "type": { - "enum": [ - "GeneralGridCoverage" - ] - }, - "id": { - "type": "string" - }, - "srsName": { - "type": "string", - "format": "uri" - }, - "axisLabels": { - "type": "array", - "items": { - "type": "string" - } - }, - "axis": { - "type": "array", - "items": { - "type": "object", - "oneOf": [ - { - "title": "Index Axis", - "description": "An Index Axis is an axis with only integer positions allowed.", - "required": [ - "type", - "axisLabel", - "lowerBound", - "upperBound" - ], - "additionalProperties": false, - "properties": { - "type": { - "enum": [ - "IndexAxis" - ] - }, - "id": { - "type": "string" - }, - "axisLabel": { - "type": "string" - }, - "lowerBound": { - "type": "number" - }, - "upperBound": { - "type": "number" - } - } - }, - { - "title": "Regular Axis", - "description": "A Regular Axis is an axis where all direct coordinates are at a common distance from its immediate neighbors.", - "required": [ - "type", - "axisLabel", - "lowerBound", - "upperBound", - "resolution", - "uomLabel" - ], - "additionalProperties": false, - "properties": { - "type": { - "enum": [ - "RegularAxis" - ] - }, - "id": { - "type": "string" - }, - "axisLabel": { - "type": "string" - }, - "lowerBound": { - "type": "string" - }, - "upperBound": { - "type": "string" - }, - "uomLabel": { - "type": "string" - }, - "resolution": { - "type": "number" - } - } - }, - { - "title": "Irregular Axis", - "description": "An irregular axis enumerates all possible direct position coordinates.", - "required": [ - "type", - "axisLabel", - "uomLabel", - "coordinate" - ], - "additionalProperties": false, - "properties": { - "type": { - "enum": [ - "IrregularAxis" - ] - }, - "id": { - "type": "string" - }, - "axisLabel": { - "type": "string" - }, - "uomLabel": { - "type": "string" - }, - "coordinate": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - ] - } - }, - "displacement": { - "title": "Displacement", - "description": "A Displacement is a warped axis nest where points on the grid all have their individual direct position coordinates. The sequenceRule element describes linearization order.", - "type": "object", - "oneOf": [ - { - "required": [ - "type", - "axisLabels", - "uomLabels", - "coordinates" - ], - "properties": { - "type": { - "enum": [ - "DisplacementAxisNest" - ] - }, - "id": { - "type": "string" - }, - "axisLabel": { - "type": "string" - }, - "srsName": { - "type": "string", - "format": "uri" - }, - "axisLabels": { - "type": "array", - "items": { - "type": "string" - } - }, - "uomLabels": { - "type": "array", - "items": { - "type": "string" - } - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - { - "required": [ - "type", - "axisLabels", - "uomLabels", - "coordinatesRef" - ], - "properties": { - "type": { - "enum": [ - "DisplacementAxisNestRef" - ] - }, - "id": { - "type": "string" - }, - "axisLabel": { - "type": "string" - }, - "srsName": { - "type": "string", - "format": "uri" - }, - "axisLabels": { - "type": "array", - "items": { - "type": "string" - } - }, - "uomLabels": { - "type": "array", - "items": { - "type": "string" - } - }, - "coordinatesRef": { - "type": "string", - "format": "uri" - } - } - } - ] - }, - "model": { - "title": "Sensor model", - "description": "A Transformation By Sensor Model is a transformation definition which is given by a SensorML 2.0 transformation specification.", - "type": "object", - "required": [ - "type", - "sensorModelRef" - ], - "properties": { - "type": { - "enum": [ - "TransformationBySensorModel" - ] - }, - "id": { - "type": "string" - }, - "axisLabels": { - "type": "array", - "items": { - "type": "string" - } - }, - "uomLabels": { - "type": "array", - "items": { - "type": "string" - } - }, - "sensorModelRef": { - "type": "string", - "format": "uri" - }, - "sensorInstanceRef": { - "type": "string", - "format": "uri" - } - } - }, - "gridLimits": { - "title": "Grid limits", - "description": "This is the boundary of the array underlying the grid, given by its diagonal corner points in integer _60_3D. The grid limits can be omitted in case all axes are of type index axis, because then it repeats the grid information in a redundant way. The purpose of the axisLabels attribute, which lists the axis labels of all axisExtent elements in proper sequence, is to enforce axis sequence also in XML systems which do not preserve document order.", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "enum": [ - "GridLimits" - ] - }, - "indexAxis": { - "title": "Index Axis", - "description": "An Index Axis is an axis with only integer positions allowed.", - "type": "object", - "required": [ - "type", - "lowerBound", - "upperBound" - ], - "additionalProperties": false, - "properties": { - "type": { - "enum": [ - "IndexAxis" - ] - }, - "id": { - "type": "string" - }, - "axisLabel": { - "type": "string" - }, - "lowerBound": { - "type": "number" - }, - "upperBound": { - "type": "number" - } - } - }, - "srsName": { - "type": "string", - "format": "uri" - }, - "axisLabels": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - } - }, - { - "required": [ - "type", - "directMultiPoint" - ], - "properties": { - "type": { - "enum": [ - "DomainSet" - ] - }, - "directMultiPoint": { - "oneOf": [ - { - "required": [ - "type", - "coordinates" - ], - "properties": { - "type": { - "enum": [ - "DirectMultiPoint" - ] - }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - { - "required": [ - "type", - "coordinatesRef" - ], - "properties": { - "type": { - "enum": [ - "DirectMultiPointRef" - ] - }, - "coordinatesRef": { - "type": "string", - "format": "uri" - } - } - } - ] - } - } - }, - { - "required": [ - "type", - "fileReference" - ], - "properties": { - "type": { - "enum": [ - "DomainSetRef" - ] - }, - "id": { - "type": "string", - "format": "uri" - }, - "fileReference": { - "type": "string", - "format": "uri" - } - } - } - ] - }, - "rangeType": { - "title": "rangeType", - "description": "The rangeType element describes the structure and semantics of a coverage's range values, including (optionally) restrictions on the interpolation allowed on such values.", - "type": "object", - "oneOf": [ - { - "required": [ - "type", - "field" - ], - "properties": { - "type": { - "enum": [ - "DataRecord" - ] - }, - "field": { - "type": "array", - "items": { - "title": "DataRecord field", - "description": "e.g. Quantity or Count", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "enum": [ - "Quantity", - "Count" - ] - }, - "id": { - "type": "string", - "format": "uri" - }, - "name": { - "type": "string" - }, - "definition": { - "type": "string", - "format": "uri" - }, - "uom": { - "title": "units of measure", - "description": "units of measure", - "type": "object", - "required": [ - "type", - "code" - ], - "properties": { - "type": { - "enum": [ - "UnitReference" - ] - }, - "id": { - "type": "string", - "format": "uri" - }, - "code": { - "type": "string" - } - } - }, - "constraint": { - "title": "Constraint", - "description": "Constraint", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "enum": [ - "AllowedValues" - ] - }, - "id": { - "type": "string", - "format": "uri" - }, - "interval": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - }, - "interpolationRestriction": { - "title": "interpolationRestriction", - "description": "Interpolation restriction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "enum": [ - "InterpolationRestriction" - ] - }, - "id": { - "type": "string", - "format": "uri" - }, - "allowedInterpolation": { - "type": "array", - "items": { - "type": "string", - "format": "uri" - } - } - } - } - } + "required": [ + "type", + "properties" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "object" + ] }, - { - "required": [ - "type", - "fileReference" - ], - "properties": { - "type": { - "enum": [ - "RangeTypeRef" - ] - }, - "id": { - "type": "string", - "format": "uri" - }, - "fileReference": { - "type": "string", - "format": "uri" - } - } - } - ] - }, - "rangeSet": { - "title": "rangeSet", - "description": "The rangeSet lists a value for each of the coverage's direct positions. Values resemble the *payload* information of some particular direct positions. Values can be composite (with a single nesting level, i.e.: composites always consist of atomics), or atomic (emulated through single-component composites) whereby the sequence, structure, and meaning of every value is defined through the rangeType. Values can be represented in-line or by reference to an external file which may have any suitable encoding.", - "type": "object", - "oneOf": [ - { - "required": [ - "type", - "dataBlock" - ], - "properties": { - "type": { - "enum": [ - "RangeSet" - ] - }, - "dataBlock": { - "title": "dataBlock", - "description": "Data block objects", - "type": "object", - "required": [ - "type", - "values" - ], - "properties": { - "type": { - "enum": [ - "VDataBlock", - "CVDataBlock" - ] - }, - "values": { - "type": "array", - "items": { - "type": "string" - } - } - } - } + "required": { + "description": "Implements 'multiplicity' by citing property 'name' defined as 'additionalProperties'", + "type": "array", + "minItems": 1, + "items": { + "type": "string" } }, - { - "required": [ - "type", - "fileReference" - ], - "properties": { - "type": { - "enum": [ - "RangeSetRef" - ] - }, - "fileReference": { - "type": "array", - "items": { + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "description": "No property names are defined but any property name they should be described by JSON Schema. So 'additionalProperties' implements 'name'.", + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "description": "Implements 'description'", + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "enum": { + "description": "Implements 'acceptedValues'", + "type": "array", + "minItems": 1, + "items": {}, + "uniqueItems": true + }, + "format": { + "description": "Complements implementation of 'type'", + "type": "string" + }, + "contentMediaType": { + "description": "Implements 'mediaType'", + "type": "string" + }, + "maximum": { + "description": "Implements 'range'", + "type": "number" + }, + "exclusiveMaximum": { + "description": "Implements 'range'", + "type": "number" + }, + "minimum": { + "description": "Implements 'range'", + "type": "number" + }, + "exclusiveMinimum": { + "description": "Implements 'range'", + "type": "number" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "maxItems": { + "description": "Implements 'upperMultiplicity'", + "type": "integer", + "minimum": 0 + }, + "minItems": { + "description": "Implements 'lowerMultiplicity'", + "type": "integer", + "default": 0, + "minimum": 0 + }, + "x-ogc-definition": { + "type": "string", + "format": "uri" + }, + "x-ogc-unit": { + "type": "string" + }, + "x-ogc-unitLang": { "type": "string", "format": "uri" + }, + "x-ogc-propertySeq": { + "type": "integer", + "minimum": 0 } } } } - ] + } }, "coverageSchema": { "title": "Coverage object", @@ -1946,73 +1323,695 @@ "type": "string" } }, - "axis": { - "type": "array", - "items": { - "type": "object", - "required": [ - "type", - "lowerBound", - "upperBound", - "uomLabel" - ], - "additionalProperties": false, - "properties": { - "type": { - "enum": [ - "AxisExtent" - ] - }, - "id": { - "type": "string" - }, - "axisLabel": { - "type": "string" - }, - "lowerBound": { - "oneOf": [ - { - "type": "number" + "axis": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "lowerBound", + "upperBound", + "uomLabel" + ], + "additionalProperties": false, + "properties": { + "type": { + "enum": [ + "AxisExtent" + ] + }, + "id": { + "type": "string" + }, + "axisLabel": { + "type": "string" + }, + "lowerBound": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "nullable": true + }, + { + "type": "boolean" + } + ] + }, + "upperBound": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "nullable": true + }, + { + "type": "boolean" + } + ] + }, + "uomLabel": { + "type": "string" + } + } + } + } + } + }, + "domainSet": { + "type": "object", + "title": "domainSet", + "description": "The domainSet describes the *direct positions* of the coverage, i.e., the locations for which values are available.", + "oneOf": [ + { + "required": [ + "type", + "generalGrid" + ], + "properties": { + "type": { + "enum": [ + "DomainSet" + ] + }, + "generalGrid": { + "title": "General Grid", + "description": "A general n-D grid is defined through a sequence of axes, each of which can be of a particular axis type.", + "type": "object", + "required": [ + "type" + ], + "additionalProperties": false, + "properties": { + "type": { + "enum": [ + "GeneralGridCoverage" + ] + }, + "id": { + "type": "string" + }, + "srsName": { + "type": "string", + "format": "uri" + }, + "axisLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "axis": { + "type": "array", + "items": { + "type": "object", + "oneOf": [ + { + "title": "Index Axis", + "description": "An Index Axis is an axis with only integer positions allowed.", + "required": [ + "type", + "axisLabel", + "lowerBound", + "upperBound" + ], + "additionalProperties": false, + "properties": { + "type": { + "enum": [ + "IndexAxis" + ] + }, + "id": { + "type": "string" + }, + "axisLabel": { + "type": "string" + }, + "lowerBound": { + "type": "number" + }, + "upperBound": { + "type": "number" + } + } + }, + { + "title": "Regular Axis", + "description": "A Regular Axis is an axis where all direct coordinates are at a common distance from its immediate neighbors.", + "required": [ + "type", + "axisLabel", + "lowerBound", + "upperBound", + "resolution", + "uomLabel" + ], + "additionalProperties": false, + "properties": { + "type": { + "enum": [ + "RegularAxis" + ] + }, + "id": { + "type": "string" + }, + "axisLabel": { + "type": "string" + }, + "lowerBound": { + "type": "string" + }, + "upperBound": { + "type": "string" + }, + "uomLabel": { + "type": "string" + }, + "resolution": { + "type": "number" + } + } + }, + { + "title": "Irregular Axis", + "description": "An irregular axis enumerates all possible direct position coordinates.", + "required": [ + "type", + "axisLabel", + "uomLabel", + "coordinate" + ], + "additionalProperties": false, + "properties": { + "type": { + "enum": [ + "IrregularAxis" + ] + }, + "id": { + "type": "string" + }, + "axisLabel": { + "type": "string" + }, + "uomLabel": { + "type": "string" + }, + "coordinate": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + } + }, + "displacement": { + "title": "Displacement", + "description": "A Displacement is a warped axis nest where points on the grid all have their individual direct position coordinates. The sequenceRule element describes linearization order.", + "type": "object", + "oneOf": [ + { + "required": [ + "type", + "axisLabels", + "uomLabels", + "coordinates" + ], + "properties": { + "type": { + "enum": [ + "DisplacementAxisNest" + ] + }, + "id": { + "type": "string" + }, + "axisLabel": { + "type": "string" + }, + "srsName": { + "type": "string", + "format": "uri" + }, + "axisLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "uomLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + { + "required": [ + "type", + "axisLabels", + "uomLabels", + "coordinatesRef" + ], + "properties": { + "type": { + "enum": [ + "DisplacementAxisNestRef" + ] + }, + "id": { + "type": "string" + }, + "axisLabel": { + "type": "string" + }, + "srsName": { + "type": "string", + "format": "uri" + }, + "axisLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "uomLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "coordinatesRef": { + "type": "string", + "format": "uri" + } + } + } + ] + }, + "model": { + "title": "Sensor model", + "description": "A Transformation By Sensor Model is a transformation definition which is given by a SensorML 2.0 transformation specification.", + "type": "object", + "required": [ + "type", + "sensorModelRef" + ], + "properties": { + "type": { + "enum": [ + "TransformationBySensorModel" + ] + }, + "id": { + "type": "string" + }, + "axisLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "uomLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "sensorModelRef": { + "type": "string", + "format": "uri" + }, + "sensorInstanceRef": { + "type": "string", + "format": "uri" + } + } + }, + "gridLimits": { + "title": "Grid limits", + "description": "This is the boundary of the array underlying the grid, given by its diagonal corner points in integer _60_3D. The grid limits can be omitted in case all axes are of type index axis, because then it repeats the grid information in a redundant way. The purpose of the axisLabels attribute, which lists the axis labels of all axisExtent elements in proper sequence, is to enforce axis sequence also in XML systems which do not preserve document order.", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "enum": [ + "GridLimits" + ] + }, + "indexAxis": { + "title": "Index Axis", + "description": "An Index Axis is an axis with only integer positions allowed.", + "type": "object", + "required": [ + "type", + "lowerBound", + "upperBound" + ], + "additionalProperties": false, + "properties": { + "type": { + "enum": [ + "IndexAxis" + ] + }, + "id": { + "type": "string" + }, + "axisLabel": { + "type": "string" + }, + "lowerBound": { + "type": "number" + }, + "upperBound": { + "type": "number" + } + } + }, + "srsName": { + "type": "string", + "format": "uri" + }, + "axisLabels": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + { + "required": [ + "type", + "directMultiPoint" + ], + "properties": { + "type": { + "enum": [ + "DomainSet" + ] + }, + "directMultiPoint": { + "oneOf": [ + { + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "enum": [ + "DirectMultiPoint" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + { + "required": [ + "type", + "coordinatesRef" + ], + "properties": { + "type": { + "enum": [ + "DirectMultiPointRef" + ] + }, + "coordinatesRef": { + "type": "string", + "format": "uri" + } + } + } + ] + } + } + }, + { + "required": [ + "type", + "fileReference" + ], + "properties": { + "type": { + "enum": [ + "DomainSetRef" + ] + }, + "id": { + "type": "string", + "format": "uri" + }, + "fileReference": { + "type": "string", + "format": "uri" + } + } + } + ] + }, + "rangeSet": { + "title": "rangeSet", + "description": "The rangeSet lists a value for each of the coverage's direct positions. Values resemble the *payload* information of some particular direct positions. Values can be composite (with a single nesting level, i.e.: composites always consist of atomics), or atomic (emulated through single-component composites) whereby the sequence, structure, and meaning of every value is defined through the rangeType. Values can be represented in-line or by reference to an external file which may have any suitable encoding.", + "type": "object", + "oneOf": [ + { + "required": [ + "type", + "dataBlock" + ], + "properties": { + "type": { + "enum": [ + "RangeSet" + ] + }, + "dataBlock": { + "title": "dataBlock", + "description": "Data block objects", + "type": "object", + "required": [ + "type", + "values" + ], + "properties": { + "type": { + "enum": [ + "VDataBlock", + "CVDataBlock" + ] + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + { + "required": [ + "type", + "fileReference" + ], + "properties": { + "type": { + "enum": [ + "RangeSetRef" + ] + }, + "fileReference": { + "type": "array", + "items": { + "type": "string", + "format": "uri" + } + } + } + } + ] + }, + "rangeType": { + "title": "rangeType", + "description": "The rangeType element describes the structure and semantics of a coverage's range values, including (optionally) restrictions on the interpolation allowed on such values.", + "type": "object", + "oneOf": [ + { + "required": [ + "type", + "field" + ], + "properties": { + "type": { + "enum": [ + "DataRecord" + ] + }, + "field": { + "type": "array", + "items": { + "title": "DataRecord field", + "description": "e.g. Quantity or Count", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "enum": [ + "Quantity", + "Count" + ] }, - { + "id": { "type": "string", - "nullable": true + "format": "uri" }, - { - "type": "boolean" - } - ] - }, - "upperBound": { - "oneOf": [ - { - "type": "number" + "name": { + "type": "string" }, - { + "definition": { "type": "string", - "nullable": true + "format": "uri" }, - { - "type": "boolean" + "uom": { + "title": "units of measure", + "description": "units of measure", + "type": "object", + "required": [ + "type", + "code" + ], + "properties": { + "type": { + "enum": [ + "UnitReference" + ] + }, + "id": { + "type": "string", + "format": "uri" + }, + "code": { + "type": "string" + } + } + }, + "constraint": { + "title": "Constraint", + "description": "Constraint", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "enum": [ + "AllowedValues" + ] + }, + "id": { + "type": "string", + "format": "uri" + }, + "interval": { + "type": "array", + "items": { + "type": "string" + } + } + } } - ] - }, - "uomLabel": { - "type": "string" + } + } + }, + "interpolationRestriction": { + "title": "interpolationRestriction", + "description": "Interpolation restriction", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "enum": [ + "InterpolationRestriction" + ] + }, + "id": { + "type": "string", + "format": "uri" + }, + "allowedInterpolation": { + "type": "array", + "items": { + "type": "string", + "format": "uri" + } + } } } } + }, + { + "required": [ + "type", + "fileReference" + ], + "properties": { + "type": { + "enum": [ + "RangeTypeRef" + ] + }, + "id": { + "type": "string", + "format": "uri" + }, + "fileReference": { + "type": "string", + "format": "uri" + } + } } - } - }, - "domainSet": { - "$ref": "#/components/schemas/domainSet" - }, - "rangeSet": { - "$ref": "#/components/schemas/rangeSet" - }, - "rangeType": { - "$ref": "#/components/schemas/rangeType" + ] }, "metadata": { "title": "Metadata", @@ -2162,7 +2161,7 @@ } }, "rangeType": { - "$ref": "#/components/schemas/rangeType" + "$ref": "#/components/schemas/coverageSchema/oneOf/0/properties/rangeType" }, "metadata": { "$ref": "#/components/schemas/coverageSchema/oneOf/0/properties/metadata" @@ -2389,117 +2388,7 @@ "description": "Properties represented by the features in this layer. Can be the attributes of a feature dataset (datatype=geometries) or the rangeType of a coverage (datatype=coverage)" }, { - "description": "Attributes of the features or rangetypes of a coverage. 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": { - "description": "Implements 'multiplicity' by citing property 'name' defined as 'additionalProperties'", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "description": "No property names are defined but any property name they should be described by JSON Schema. So 'additionalProperties' implements 'name'.", - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "description": { - "description": "Implements 'description'", - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "enum": { - "description": "Implements 'acceptedValues'", - "type": "array", - "minItems": 1, - "items": {}, - "uniqueItems": true - }, - "format": { - "description": "Complements implementation of 'type'", - "type": "string" - }, - "contentMediaType": { - "description": "Implements 'mediaType'", - "type": "string" - }, - "maximum": { - "description": "Implements 'range'", - "type": "number" - }, - "exclusiveMaximum": { - "description": "Implements 'range'", - "type": "number" - }, - "minimum": { - "description": "Implements 'range'", - "type": "number" - }, - "exclusiveMinimum": { - "description": "Implements 'range'", - "type": "number" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "maxItems": { - "description": "Implements 'upperMultiplicity'", - "type": "integer", - "minimum": 0 - }, - "minItems": { - "description": "Implements 'lowerMultiplicity'", - "type": "integer", - "default": 0, - "minimum": 0 - }, - "observedProperty": { - "type": "string" - }, - "observedPropertyURI": { - "type": "string", - "format": "uri" - }, - "uom": { - "type": "string" - }, - "uomURI": { - "type": "string", - "format": "uri" - } - } - } - } - } + "$ref": "#/components/schemas/schema" } ] }, @@ -2883,18 +2772,91 @@ "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" }, "style": "form", - "explode": false + "explode": false + }, + "bbox": { + "name": "bbox", + "in": "query", + "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", + "oneOf": [ + { + "minItems": 4, + "maxItems": 4 + }, + { + "minItems": 6, + "maxItems": 6 + } + ], + "items": { + "type": "number" + } + }, + "style": "form", + "explode": false + }, + "resolution": { + "name": "resolution", + "in": "query", + "description": "Request a specific resolution for one or more dimension in terms of the minimum distance between two samples.\nFor a regular grid coverage output, the resolution corresponds to the grid resolution.\nThe parameter value is a comma separated list of dimensions followed by values in parentheses.\nFor example, `resolution=Lat(0.5),Lon(0.5),time(P1D)` specifies a 0.5 degrees spatial resolution and a daily temporal resolution.\nFor server supporting Spatial subsetting, the `Lat` and `Lon` dimensions are supported for a geographic output CRS,\nthe `E` and `N` dimensions are supported for a projected output CRS, and the `x` and `y` dimensions are supported for a 3D Cartesian CRS,\nwith the resolution specified in positive CRS units.\nFor a 3D geographic CRS, the resolution for an additional `h` dimension can be specified corresponding to the height above the ellipsoid.\nFor a 3D Cartesian CRS, the resolution for an additional `z` dimension can be specified corresponding to the vertical or third dimension.\nFor server supporting Temporal subsetting, the `time` dimension is supported referring to the primary temporal dimensions,\nwith units specified in ISO 8601 UTC / Gregorian date and time.\nFor server supporting General subsetting, a resolution for additional dimensions, as named in the collection description's extent,\ncan also be specified in the units of those dimensions.", + "required": false, + "schema": { + "type": "string" + } + }, + "properties": { + "name": "properties", + "in": "query", + "description": "Select specific data record fields (measured/observed properties) to be returned.\nThe selected field names must be one of the fields defined in the collection's logical schema (the fields of the RangeType DataRecord in the Coverage Implementation Schema model).", + "required": false, + "schema": { + "type": "string" + } + }, + "exclude-properties": { + "name": "exclude-properties", + "in": "query", + "description": "Exclude specific data record fields (measured/observed properties) from being returned using a comma-separated list of field names.\nThe field name must be one of the fields defined in the associated data resource's logical schema.", + "required": false, + "schema": { + "type": "string" + } + }, + "width": { + "name": "width", + "in": "query", + "description": "Number of cells across the coverage dimension corresponding to the spatial dimension represented horizontally on a map, such as longitude or easting.", + "required": false, + "style": "form", + "explode": false, + "schema": { + "type": "integer" + } + }, + "height": { + "name": "height", + "in": "query", + "description": "Number of cells across the coverage dimension corresponding to the spatial dimension represented vertically on a 2D map, such as latitude or northing.", + "required": false, + "style": "form", + "explode": false, + "schema": { + "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", + "description": "Retrieve only part of the data by slicing or trimming along one or more axis\nFor trimming: {axisAbbrev}({low}:{high}) (preserves dimensionality)\nFor slicing: {axisAbbrev}({value}) (reduces dimensionality)\nFor multi-slicing: {axisAbbrev}({value1},{value2}[,...]) (reduces dimensionality)\nAn asterisk (`*`) can be used instead of {low} or {high} to indicate the minimum/maximum value.\nFor a temporal dimension, a single asterisk can be used to indicate the high value.\n", "style": "form", "explode": false, "required": false, @@ -2905,31 +2867,6 @@ } } }, - "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.", - "required": false, - "schema": { - "type": "array", - "oneOf": [ - { - "minItems": 4, - "maxItems": 4 - }, - { - "minItems": 6, - "maxItems": 6 - } - ], - "items": { - "type": "number", - "format": "double" - } - }, - "style": "form", - "explode": false - }, "crs": { "name": "crs", "in": "query", @@ -2963,42 +2900,6 @@ "type": "string" } }, - "scale-factor": { - "name": "scale-factor", - "in": "query", - "description": "For each axis, the returned coverage will contain the number of original\nsampled values, divided by the scale-factor.", - "required": false, - "schema": { - "type": "number" - } - }, - "scale-axes": { - "name": "scale-axes", - "in": "query", - "description": "Returns a coverage re-scaled so as to contain `{number}` times less sample\nvalues along the corresponding axisName axis, and all original values along\nthe dimensions of unspecified axes\n```\nScalingSpec: \"scale-axes\"=axisName({number})[,axisName({number})]*\naxisName: {NCName}\n\nWhere:\n {number} is an integer or floating-point number, and {axisName} is the\n same as one of the axisLabels defined in the DomainSet\n```", - "required": false, - "schema": { - "type": "string" - } - }, - "scale-size": { - "name": "scale-size", - "in": "query", - "description": "When `scale-size` is used, the returned coverage will contain exactly the\nspecified number of sample values along each axis which is specified, and\nthe original number of sample values for unspecified axes.\n```\nScalingSpec: \"scale-size\"=axisName({number})[,axisName({number})]*\naxisName: {text}\n\nWhere:\n {number} is an integer or floating-point number and {axisName}\n is the same as one of the axisLabels defined in the DomainSet\n```", - "required": false, - "schema": { - "type": "string" - } - }, - "properties": { - "name": "properties", - "in": "query", - "description": "Select specific data record fields (measured/observed properties) to be returned.\n\n```\nRangeSubsetSpec: \"properties\"=field[,fieldName]*\nfield: {fieldName}|{fieldIndex}|\"*\"\nfieldName: {text}\nfieldIndex: {number}\n\nWhere:\n {number} is an integer number, and\n {text} is some general ASCII text.\n```\n\nThe field name must be one of the id defined in the RangeType DataRecord fields.\nThe field index must be an integer between 0 and the number of fields - 1 defined in the RangeType DataRecord fields.\nAn asterisk indicates to also include subsequent fields.", - "required": false, - "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.", @@ -3018,54 +2919,6 @@ }, "style": "form" }, - "f-rangeset": { - "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.", - "explode": false, - "in": "query", - "required": false, - "schema": { - "default": "json", - "enum": [ - "json", - "html" - ], - "type": "string" - }, - "style": "form" - }, - "f-domainset": { - "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.", - "explode": false, - "in": "query", - "required": false, - "schema": { - "default": "json", - "enum": [ - "json", - "html" - ], - "type": "string" - }, - "style": "form" - }, - "f-rangetype": { - "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.", - "explode": false, - "in": "query", - "required": false, - "schema": { - "default": "json", - "enum": [ - "json", - "html" - ], - "type": "string" - }, - "style": "form" - }, "tileMatrix": { "name": "tileMatrix", "in": "path", @@ -3111,14 +2964,15 @@ "f-coverageTile": { "name": "f", "in": "query", - "description": "The format of the coverage tile response (e.g. tiff). Accepted values are 'tiff' (GeoTIFF), 'netcdf', or 'png'.", + "description": "The format of the tiled coverage data response (e.g. tiff). Accepted values are 'tiff' (GeoTIFF), 'netcdf', or 'png'.", "required": false, "schema": { "type": "string", "enum": [ "png", "geotiff", - "netcdf" + "netcdf", + "covjson" ] }, "style": "form", @@ -3187,7 +3041,7 @@ } }, "Exception": { - "description": "An error occured.", + "description": "An error occurred.", "content": { "application/json": { "schema": { @@ -3240,7 +3094,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)" } ] } @@ -3265,14 +3119,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" ] } @@ -3295,6 +3157,113 @@ } } }, + "Coverage": { + "description": "A coverage, including any self-describing information supported by the encoding.", + "content": { + "application/vnd.cov+json": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/coverageSchema" + }, + { + "anyOf": [ + { + "type": "object", + "example": { + "temperature": 28, + "relativeHumidity": 0.35 + } + }, + { + "type": "array", + "items": { + "anyOf": [ + { + "type": "object", + "example": { + "temperature": 28, + "relativeHumidity": 0.35 + } + }, + { + "example": 352 + } + ] + }, + "example": [ + "foxes", + "wolves" + ] + }, + { + "example": 352 + } + ] + } + ] + } + }, + "image/tiff; application=geotiff": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/x-netcdf": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "vnd.las": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "vnd.laszip": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/png": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jxl": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jp2": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/x-zarr": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "text/html": { + "schema": { + "type": "string" + } + } + } + }, "Enumeration": { "description": "An enumerated list of valid string values for API parameters.", "content": { @@ -3315,22 +3284,7 @@ "content": { "application/json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/collections" - }, - { - "type": "object", - "properties": { - "collections": { - "type": "array", - "items": { - "$ref": "#/components/responses/Collection/content/application~1json/schema" - } - } - } - } - ] + "$ref": "#/components/schemas/collections" }, "example": { "links": [ @@ -3373,28 +3327,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 data (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/vnd.cov+json", + "title": "Elevation data (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 data (as CIS JSON)" }, { "href": "https://creativecommons.org/publicdomain/zero/1.0/", @@ -3425,118 +3379,7 @@ "content": { "application/json": { "schema": { - "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." - } - }, - "domainSet": { - "allOf": [ - { - "$ref": "#/components/schemas/domainSet" - } - ], - "example": { - "type": "DomainSet", - "generalGrid": { - "type": "GeneralGridCoverage", - "srsName": "http://www.opengis.net/def/crs/EPSG/0/4326", - "axisLabels": [ - "Lat", - "Long" - ], - "axis": [ - { - "type": "RegularAxis", - "axisLabel": "Lat", - "lowerBound": -90, - "upperBound": 90, - "uomLabel": "deg", - "resolution": 1 - }, - { - "type": "RegularAxis", - "axisLabel": "Long", - "lowerBound": -180, - "upperBound": 180, - "uomLabel": "deg", - "resolution": 1 - } - ], - "gridLimits": { - "type": "GridLimits", - "srsName": "http://www.opengis.net/def/crs/OGC/0/Index2D", - "axisLabels": [ - "i", - "j" - ], - "axis": [ - { - "type": "IndexAxis", - "axisLabel": "i", - "lowerBound": 0, - "upperBound": 180 - }, - { - "type": "IndexAxis", - "axisLabel": "j", - "lowerBound": 0, - "upperBound": 360 - } - ] - } - } - } - }, - "rangeType": { - "allOf": [ - { - "$ref": "#/components/schemas/rangeType" - } - ], - "example": { - "type": "DataRecord", - "field": { - "type": "Quantity", - "id": "dem_field", - "name": "dem field", - "definition": "unsignedInt", - "uom": { - "type": "UnitReference", - "code": "m" - }, - "constraint": { - "type": "AllowedValues", - "interval": [ - 0, - 10000 - ] - } - }, - "interpolationRestriction": { - "type": "InterpolationRestriction", - "allowedInterpolation": [ - "linear" - ] - } - } - } - } - } - ] + "$ref": "#/components/schemas/collectionDesc" }, "example": { "id": "elevation", @@ -3556,28 +3399,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 (as 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/vnd.cov+json", + "title": "Elevation data (as 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 data (as CIS JSON)" }, { "href": "https://creativecommons.org/publicdomain/zero/1.0/", diff --git a/coverages/src/main/resources/schema/coverages/ogcapi-coverages-1.yaml b/coverages/src/main/resources/schema/coverages/ogcapi-coverages-1.yaml index 57282495..ba98a68e 100644 --- a/coverages/src/main/resources/schema/coverages/ogcapi-coverages-1.yaml +++ b/coverages/src/main/resources/schema/coverages/ogcapi-coverages-1.yaml @@ -40,23 +40,32 @@ paths: # OGC API - Coverages - Part 1: Core /collections/{collectionId}/coverage: $ref: 'paths/coverages-core/pCoverage.yaml' - /collections/{collectionId}/coverage/domainset: - $ref: 'paths/coverages-core/pDomainSet.yaml' - /collections/{collectionId}/coverage/rangetype: - $ref: 'paths/coverages-core/pRangeType.yaml' - /collections/{collectionId}/coverage/rangeset: - $ref: 'paths/coverages-core/pRangeSet.yaml' - /collections/{collectionId}/coverage/metadata: - $ref: 'paths/coverages-core/pMetadata.yaml' - - # Coverage Tiles - /collections/{collectionId}/coverage/tiles: + /collections/{collectionId}/schema: + $ref: 'paths/coverages-core/pSchema.yaml' + + # Scenes + #/collections/{collectionId}/scenes: + # $ref: 'paths/coverages-core/pScenesList.yaml' + #/collections/{collectionId}/scenes/{sceneId}: + # $ref: 'paths/coverages-core/pScene.yaml' + #/collections/{collectionId}/scenes/{sceneId}/coverage: + # $ref: 'paths/coverages-core/pSceneCoverage.yaml' + + # Tiled Coverage Data + /collections/{collectionId}/tiles: $ref: 'paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSetsList.yaml' - /collections/{collectionId}/coverage/tiles/{tileMatrixSetId}: + /collections/{collectionId}/tiles/{tileMatrixSetId}: $ref: 'paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSet.yaml' - /collections/{collectionId}/coverage/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}: + /collections/{collectionId}/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}: $ref: 'paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTile.yaml' + #/collections/{collectionId}/scenes/{sceneId}/tiles: + # $ref: 'paths/coverages-core/pSceneCoverageTileSetsList.yaml' + #/collections/{collectionId}/scenes/{sceneId}/tiles/{tileMatrixSetId}: + # $ref: 'paths/coverages-core/pSceneCoverageTileSet.yaml' + #/collections/{collectionId}/scenes/{sceneId}/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}: + # $ref: 'paths/coverages-core/pSceneCoverageTile.yaml' + components: schemas: # $ref: './schemas/index.yaml' # Not supported? @@ -76,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: @@ -94,14 +103,10 @@ components: $ref: 'schemas/common-geodata/numberReturned.yaml' numberMatched: $ref: 'schemas/common-geodata/numberMatched.yaml' + schema: + $ref: 'schemas/tms/propertiesSchema.yaml' # CIS - domainSet: - $ref: 'schemas/cis/domainSet.yaml' - rangeType: - $ref: 'schemas/cis/rangeType.yaml' - rangeSet: - $ref: 'schemas/cis/rangeSet.yaml' coverageSchema: $ref: 'schemas/cis/coverage-schema.yaml' @@ -140,38 +145,36 @@ 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 + # Coverages - Core + resolution: + $ref: 'parameters/coverages-core/resolution.yaml' + properties: + $ref: 'parameters/coverages-core/properties.yaml' + exclude-properties: + $ref: 'parameters/coverages-core/exclude-properties.yaml' + width: + $ref: 'parameters/coverages-core/width.yaml' + height: + $ref: 'parameters/coverages-core/height.yaml' + subset: + $ref: 'parameters/coverages-core/subset.yaml' crs: - $ref: 'parameters/common-crs/crs.yaml' + $ref: 'parameters/coverages-core/crs.yaml' subset-crs: - $ref: 'parameters/common-crs/subset-crs.yaml' + $ref: 'parameters/coverages-core/subset-crs.yaml' bbox-crs: - $ref: 'parameters/common-crs/bbox-crs.yaml' - - # Coverages - Core (unspecified) - scale-factor: - $ref: 'parameters/coverages-core/scale-factor.yaml' - scale-axes: - $ref: 'parameters/coverages-core/scale-axes.yaml' - scale-size: - $ref: 'parameters/coverages-core/scale-size.yaml' - properties: - $ref: 'parameters/coverages-core/properties.yaml' + $ref: 'parameters/coverages-core/bbox-crs.yaml' # Coverages - Core (unspecified) f-coverage: $ref: 'parameters/unspecified/f-coverage.yaml' - f-rangeset: - $ref: 'parameters/unspecified/f-rangeset.yaml' - f-domainset: - $ref: 'parameters/unspecified/f-domainset.yaml' - f-rangetype: - $ref: 'parameters/unspecified/f-rangetype.yaml' + + # Coverages - Scenes + #sceneId: + # $ref: 'parameters/coverages-core/sceneId.yaml' # Tiles - Core tileMatrix: @@ -208,6 +211,16 @@ components: API: $ref: 'responses/common-core/rAPI.yaml' + # Coverages - Core + Coverage: + $ref: 'responses/coverages-core/rCoverage.yaml' + + # Coverages - Scenes + #Scene: + # $ref: 'responses/coverages-core/rScene.yaml' + #ScenesList: + # $ref: 'responses/coverages-core/rScenesList.yaml' + # Dynamic enumeration of resources specific to this implementation Enumeration: $ref: 'responses/dynamic/rEnumeration.yaml' diff --git a/coverages/src/main/resources/schema/coverages/parameters/common-geodata/bbox.yaml b/coverages/src/main/resources/schema/coverages/parameters/common-geodata/bbox.yaml index f7353abe..5f477e49 100644 --- a/coverages/src/main/resources/schema/coverages/parameters/common-geodata/bbox.yaml +++ b/coverages/src/main/resources/schema/coverages/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/coverages/src/main/resources/schema/coverages/parameters/common-geodata/datetime.yaml b/coverages/src/main/resources/schema/coverages/parameters/common-geodata/datetime.yaml index 28d58c6e..6780b220 100644 --- a/coverages/src/main/resources/schema/coverages/parameters/common-geodata/datetime.yaml +++ b/coverages/src/main/resources/schema/coverages/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/coverages/src/main/resources/schema/coverages/parameters/common-crs/bbox-crs.yaml b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/bbox-crs.yaml similarity index 100% rename from coverages/src/main/resources/schema/coverages/parameters/common-crs/bbox-crs.yaml rename to coverages/src/main/resources/schema/coverages/parameters/coverages-core/bbox-crs.yaml diff --git a/coverages/src/main/resources/schema/coverages/parameters/common-crs/crs.yaml b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/crs.yaml similarity index 100% rename from coverages/src/main/resources/schema/coverages/parameters/common-crs/crs.yaml rename to coverages/src/main/resources/schema/coverages/parameters/coverages-core/crs.yaml diff --git a/coverages/src/main/resources/schema/coverages/parameters/coverages-core/exclude-properties.yaml b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/exclude-properties.yaml new file mode 100644 index 00000000..c15d5205 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/exclude-properties.yaml @@ -0,0 +1,9 @@ +name: exclude-properties +in: query +description: |- + Exclude specific data record fields (measured/observed properties) from being returned using a comma-separated list of field names. + The field name must be one of the fields defined in the associated data resource's logical schema. + +required: false +schema: + type: string diff --git a/coverages/src/main/resources/schema/coverages/parameters/coverages-core/height.yaml b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/height.yaml new file mode 100644 index 00000000..ac806085 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/height.yaml @@ -0,0 +1,9 @@ +name: height +in: query +description: >- + Number of cells across the coverage dimension corresponding to the spatial dimension represented vertically on a 2D map, such as latitude or northing. +required: false +style: form +explode: false +schema: + type: integer diff --git a/coverages/src/main/resources/schema/coverages/parameters/coverages-core/properties.yaml b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/properties.yaml index 806463c6..ee145788 100644 --- a/coverages/src/main/resources/schema/coverages/parameters/coverages-core/properties.yaml +++ b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/properties.yaml @@ -2,21 +2,7 @@ name: properties in: query description: |- Select specific data record fields (measured/observed properties) to be returned. - - ``` - RangeSubsetSpec: "properties"=field[,fieldName]* - field: {fieldName}|{fieldIndex}|"*" - fieldName: {text} - fieldIndex: {number} - - Where: - {number} is an integer number, and - {text} is some general ASCII text. - ``` - - The field name must be one of the id defined in the RangeType DataRecord fields. - The field index must be an integer between 0 and the number of fields - 1 defined in the RangeType DataRecord fields. - An asterisk indicates to also include subsequent fields. + The selected field names must be one of the fields defined in the collection's logical schema (the fields of the RangeType DataRecord in the Coverage Implementation Schema model). required: false schema: diff --git a/coverages/src/main/resources/schema/coverages/parameters/coverages-core/resolution.yaml b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/resolution.yaml new file mode 100644 index 00000000..9bcb4c3b --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/resolution.yaml @@ -0,0 +1,19 @@ +name: resolution +in: query +description: |- + Request a specific resolution for one or more dimension in terms of the minimum distance between two samples. + For a regular grid coverage output, the resolution corresponds to the grid resolution. + The parameter value is a comma separated list of dimensions followed by values in parentheses. + For example, `resolution=Lat(0.5),Lon(0.5),time(P1D)` specifies a 0.5 degrees spatial resolution and a daily temporal resolution. + For server supporting Spatial subsetting, the `Lat` and `Lon` dimensions are supported for a geographic output CRS, + the `E` and `N` dimensions are supported for a projected output CRS, and the `x` and `y` dimensions are supported for a 3D Cartesian CRS, + with the resolution specified in positive CRS units. + For a 3D geographic CRS, the resolution for an additional `h` dimension can be specified corresponding to the height above the ellipsoid. + For a 3D Cartesian CRS, the resolution for an additional `z` dimension can be specified corresponding to the vertical or third dimension. + For server supporting Temporal subsetting, the `time` dimension is supported referring to the primary temporal dimensions, + with units specified in ISO 8601 UTC / Gregorian date and time. + For server supporting General subsetting, a resolution for additional dimensions, as named in the collection description's extent, + can also be specified in the units of those dimensions. +required: false +schema: + type: string diff --git a/coverages/src/main/resources/schema/coverages/parameters/coverages-core/sceneId.yaml b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/sceneId.yaml new file mode 100644 index 00000000..71b949c3 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/sceneId.yaml @@ -0,0 +1,6 @@ +name: sceneId +in: path +description: Local identifier of a scene +required: true +schema: + type: string diff --git a/coverages/src/main/resources/schema/coverages/parameters/common-crs/subset-crs.yaml b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/subset-crs.yaml similarity index 100% rename from coverages/src/main/resources/schema/coverages/parameters/common-crs/subset-crs.yaml rename to coverages/src/main/resources/schema/coverages/parameters/coverages-core/subset-crs.yaml diff --git a/coverages/src/main/resources/schema/coverages/parameters/common-geodata/subset.yaml b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/subset.yaml similarity index 55% rename from coverages/src/main/resources/schema/coverages/parameters/common-geodata/subset.yaml rename to coverages/src/main/resources/schema/coverages/parameters/coverages-core/subset.yaml index c3dcf2a8..4cb36051 100644 --- a/coverages/src/main/resources/schema/coverages/parameters/common-geodata/subset.yaml +++ b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/subset.yaml @@ -3,8 +3,10 @@ in: query description: | Retrieve only part of the data by slicing or trimming along one or more axis For trimming: {axisAbbrev}({low}:{high}) (preserves dimensionality) - An asterisk (`*`) can be used instead of {low} or {high} to indicate the minimum/maximum value. For slicing: {axisAbbrev}({value}) (reduces dimensionality) + For multi-slicing: {axisAbbrev}({value1},{value2}[,...]) (reduces dimensionality) + An asterisk (`*`) can be used instead of {low} or {high} to indicate the minimum/maximum value. + For a temporal dimension, a single asterisk can be used to indicate the high value. style: form explode: false required: false diff --git a/coverages/src/main/resources/schema/coverages/parameters/coverages-core/width.yaml b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/width.yaml new file mode 100644 index 00000000..ef2bd9e0 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/parameters/coverages-core/width.yaml @@ -0,0 +1,9 @@ +name: width +in: query +description: >- + Number of cells across the coverage dimension corresponding to the spatial dimension represented horizontally on a map, such as longitude or easting. +required: false +style: form +explode: false +schema: + type: integer diff --git a/coverages/src/main/resources/schema/coverages/parameters/unspecified/f-coverageTile.yaml b/coverages/src/main/resources/schema/coverages/parameters/unspecified/f-coverageTile.yaml index a34755fd..410c0aaf 100644 --- a/coverages/src/main/resources/schema/coverages/parameters/unspecified/f-coverageTile.yaml +++ b/coverages/src/main/resources/schema/coverages/parameters/unspecified/f-coverageTile.yaml @@ -1,6 +1,6 @@ name: f in: query -description: The format of the coverage tile response (e.g. tiff). Accepted values are 'tiff' (GeoTIFF), 'netcdf', or 'png'. +description: The format of the tiled coverage data response (e.g. tiff). Accepted values are 'tiff' (GeoTIFF), 'netcdf', or 'png'. required: false schema: type: string @@ -8,5 +8,6 @@ schema: - png - geotiff - netcdf + - covjson style: form explode: false diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pCoverage.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pCoverage.yaml index 5b2aaf94..eefead0e 100644 --- a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pCoverage.yaml +++ b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pCoverage.yaml @@ -9,16 +9,17 @@ 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' - - $ref: '../../parameters/coverages-core/scale-factor.yaml' - - $ref: '../../parameters/coverages-core/scale-axes.yaml' - - $ref: '../../parameters/coverages-core/scale-size.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/exclude-properties.yaml' + - $ref: '../../parameters/coverages-core/resolution.yaml' + - $ref: '../../parameters/coverages-core/width.yaml' + - $ref: '../../parameters/coverages-core/height.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/coverages/src/main/resources/schema/coverages/paths/coverages-core/pDomainSet.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pDomainSet.yaml deleted file mode 100644 index ac55cc3d..00000000 --- a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pDomainSet.yaml +++ /dev/null @@ -1,21 +0,0 @@ -# DomainSet -get: - tags: - - Coverage - summary: Retrieve a coverage's domainset; use content negotiation to request HTML or JSON - description: a coverage's domainset - operationId: getCoverageDomainSet - parameters: - - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' - - $ref: '../../parameters/common-geodata/subset.yaml' - - $ref: '../../parameters/common-geodata/bbox.yaml' - - $ref: '../../parameters/common-geodata/datetime.yaml' - - $ref: '../../parameters/common-crs/crs.yaml' - - $ref: '../../parameters/common-crs/bbox-crs.yaml' - - $ref: '../../parameters/common-crs/subset-crs.yaml' - - $ref: '../../parameters/unspecified/f-domainset.yaml' - responses: - '200': - $ref: '../../responses/coverages-core/rDomainSet.yaml' - default: - $ref: '../../responses/common-core/rException.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pMetadata.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pMetadata.yaml deleted file mode 100644 index f073bfe9..00000000 --- a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pMetadata.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Metadata -get: - tags: - - Coverage - summary: retrieve a coverage's metadata; use content negotiation to request - HTML or GeoJSON - description: a coverage's metadata - operationId: getCoverageMetadata - parameters: - - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' - - $ref: '../../parameters/unspecified/f-metadata.yaml' - responses: - '200': - $ref: '../../responses/coverages-core/rMetadata.yaml' - default: - $ref: '../../responses/common-core/rException.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pRangeSet.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pRangeSet.yaml deleted file mode 100644 index 8fb7eec6..00000000 --- a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pRangeSet.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# RangeSet -get: - tags: - - Coverage - summary: Retrieve a coverage's rangeset (i.e., the data record values only); use content negotiation to specify output format - description: a coverage's rangeset - operationId: getCoverageRangeSet - parameters: - - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' - - $ref: '../../parameters/common-geodata/subset.yaml' - - $ref: '../../parameters/common-geodata/bbox.yaml' - - $ref: '../../parameters/common-geodata/datetime.yaml' - - $ref: '../../parameters/coverages-core/properties.yaml' - - $ref: '../../parameters/coverages-core/scale-factor.yaml' - - $ref: '../../parameters/coverages-core/scale-axes.yaml' - - $ref: '../../parameters/coverages-core/scale-size.yaml' - - $ref: '../../parameters/common-crs/bbox-crs.yaml' - - $ref: '../../parameters/common-crs/subset-crs.yaml' - - $ref: '../../parameters/common-crs/crs.yaml' - - $ref: '../../parameters/unspecified/f-rangeset.yaml' - responses: - '200': - $ref: '../../responses/coverages-core/rRangeSet.yaml' - default: - $ref: '../../responses/common-core/rException.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pRangeType.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pRangeType.yaml deleted file mode 100644 index ee3a9cd3..00000000 --- a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pRangeType.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# RangeType -get: - tags: - - Coverage - summary: Retrieve a coverage's rangetype; use content negotiation to request HTML or JSON - description: a coverage's rangetype - operationId: getCoverageRangeType - parameters: - - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' - - $ref: '../../parameters/unspecified/f-rangetype.yaml' - responses: - '200': - $ref: '../../responses/coverages-core/rRangeType.yaml' - default: - $ref: '../../responses/common-core/rException.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pScene.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pScene.yaml new file mode 100644 index 00000000..0c48cf11 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pScene.yaml @@ -0,0 +1,17 @@ +# Scene +get: + tags: + - Scenes + summary: Retrieve metadata for a particular scene + description: |- + Retrieve metadata for a particular scene + operationId: getScene + parameters: + - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' + - $ref: '../../parameters/coverages-core/sceneId.yaml' + - $ref: '../../parameters/unspecified/f-metadata.yaml' + responses: + '200': + $ref: '../../responses/coverages-core/rScene.yaml' + default: + $ref: '../../responses/common-core/rException.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverage.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverage.yaml new file mode 100644 index 00000000..e9031412 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverage.yaml @@ -0,0 +1,29 @@ +# Scene Coverage +get: + tags: + - Scenes + summary: Retrieve the coverage for scene {sceneId} of {collectionId} + description: |- + Coverage for scene {sceneId} of collection identified by {collectionId}. + Use content negotiation to request required format. + operationId: getSceneCoverage + parameters: + - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' + - $ref: '../../parameters/coverages-core/sceneId.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' + - $ref: '../../parameters/coverages-core/exclude-properties.yaml' + - $ref: '../../parameters/coverages-core/resolution.yaml' + - $ref: '../../parameters/coverages-core/width.yaml' + - $ref: '../../parameters/coverages-core/height.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': + $ref: '../../responses/coverages-core/rCoverage.yaml' + default: + $ref: '../../responses/common-core/rException.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTile.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTile.yaml new file mode 100644 index 00000000..ce09edba --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTile.yaml @@ -0,0 +1,28 @@ +get: + tags: + - Tiled Coverage Data + summary: Retrieve coverage scene tiles + operationId: .collection.scene.coverage.getTile + parameters: + - $ref: '../../parameters/tiles-core/tileMatrix.yaml' + - $ref: '../../parameters/tiles-core/tileRow.yaml' + - $ref: '../../parameters/tiles-core/tileCol.yaml' + - $ref: '../../parameters/common-geodata/datetime.yaml' + - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' + - $ref: '../../parameters/coverages-core/sceneId.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: + '200': + $ref: '../../responses/tiles-core/rCoverageTile.yaml' + '204': + $ref: '../../responses/tiles-core/rEmptyTile.yaml' + '404': + $ref: '../../responses/common-core/rNotFound.yaml' + '406': + $ref: '../../responses/common-core/rNotAcceptable.yaml' + '500': + $ref: '../../responses/common-core/rServerError.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTileSet.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTileSet.yaml new file mode 100644 index 00000000..af54829a --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTileSet.yaml @@ -0,0 +1,19 @@ +get: + tags: + - Tiled Coverage Data + summary: Retrieve the coverage scene tileset metadata for the specified collection, scene and tiling scheme (tile matrix set) + operationId: .collection.scene.coverage.getTileSet + parameters: + - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' + - $ref: '../../parameters/coverages-core/sceneId.yaml' + - $ref: '../../parameters/unspecified/tileMatrixSetId.yaml' + - $ref: '../../parameters/unspecified/f-metadata.yaml' + responses: + '200': + $ref: '../../responses/tiles-core/rTileSet.yaml' + '404': + $ref: '../../responses/common-core/rNotFound.yaml' + '406': + $ref: '../../responses/common-core/rNotAcceptable.yaml' + '500': + $ref: '../../responses/common-core/rServerError.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTileSetsList.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTileSetsList.yaml new file mode 100644 index 00000000..66886f62 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSceneCoverageTileSetsList.yaml @@ -0,0 +1,18 @@ +get: + tags: + - Tiled Coverage Data + summary: Retrieve the list of available coverage tilesets for the specified coverage scene. + operationId: .collection.scene.coverage.getTileSetsList + parameters: + - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' + - $ref: '../../parameters/coverages-core/sceneId.yaml' + - $ref: '../../parameters/unspecified/f-metadata.yaml' + responses: + '200': + $ref: '../../responses/tiles-core/rTileSetsList.yaml' + '404': + $ref: '../../responses/common-core/rNotFound.yaml' + '406': + $ref: '../../responses/common-core/rNotAcceptable.yaml' + '500': + $ref: '../../responses/common-core/rServerError.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pScenesList.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pScenesList.yaml new file mode 100644 index 00000000..c0051f11 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pScenesList.yaml @@ -0,0 +1,16 @@ +# Scenes List +get: + tags: + - Scenes + summary: Retrieve the list of scenes comprising this collection + description: |- + The list of scenes comprising this collection. + operationId: getCollectionScenes + parameters: + - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' + - $ref: '../../parameters/unspecified/f-metadata.yaml' + responses: + '200': + $ref: '../../responses/coverages-core/rScenesList.yaml' + default: + $ref: '../../responses/common-core/rException.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSchema.yaml b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSchema.yaml new file mode 100644 index 00000000..65d86f9a --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/paths/coverages-core/pSchema.yaml @@ -0,0 +1,17 @@ +# Schema +get: + tags: + - Coverage + summary: Retrieve the schema of the coverage identified by {collectionId} + description: |- + Schema for coverage identified by {collectionId}. + Use content negotiation to request required format. + operationId: getCollectionSchema + parameters: + - $ref: '../../parameters/common-geodata/collectionId-coverage.yaml' + - $ref: '../../parameters/unspecified/f-metadata.yaml' + responses: + '200': + $ref: '../../responses/coverages-core/rSchema.yaml' + default: + $ref: '../../responses/common-core/rException.yaml' diff --git a/coverages/src/main/resources/schema/coverages/paths/dynamic/pAllCollections.yaml b/coverages/src/main/resources/schema/coverages/paths/dynamic/pAllCollections.yaml index 95b6b093..2836a991 100644 --- a/coverages/src/main/resources/schema/coverages/paths/dynamic/pAllCollections.yaml +++ b/coverages/src/main/resources/schema/coverages/paths/dynamic/pAllCollections.yaml @@ -3,7 +3,7 @@ get: tags: - API operationId: getAPICollections - summary: Retrieve the list of collections available from this API implementation & deployment. + summary: JSON enumeration of all the collections available from this API implementation & deployment (for inclusion in the API definition). parameters: - $ref: '../../parameters/unspecified/f-metadata.yaml' responses: diff --git a/coverages/src/main/resources/schema/coverages/paths/dynamic/pCoverageCollections.yaml b/coverages/src/main/resources/schema/coverages/paths/dynamic/pCoverageCollections.yaml index d83635fe..55b78313 100644 --- a/coverages/src/main/resources/schema/coverages/paths/dynamic/pCoverageCollections.yaml +++ b/coverages/src/main/resources/schema/coverages/paths/dynamic/pCoverageCollections.yaml @@ -3,7 +3,7 @@ get: tags: - API operationId: getAPICoverageCollections - summary: Retrieve the list of coverages collections available from this API implementation & deployment. + summary: JSON enumeration of the coverage collections available from this API implementation & deployment (for inclusion in the API definition). parameters: - $ref: '../../parameters/unspecified/f-metadata.yaml' responses: diff --git a/coverages/src/main/resources/schema/coverages/paths/dynamic/pTileMatrixSets.yaml b/coverages/src/main/resources/schema/coverages/paths/dynamic/pTileMatrixSets.yaml index 4734b9a4..bd2f89de 100644 --- a/coverages/src/main/resources/schema/coverages/paths/dynamic/pTileMatrixSets.yaml +++ b/coverages/src/main/resources/schema/coverages/paths/dynamic/pTileMatrixSets.yaml @@ -3,7 +3,7 @@ get: tags: - API operationId: getAPITileMatrixSets - summary: Retrieve the list of shared TileMatrixSets available from this API implementation & deployment. + summary: JSON enumeration of the shared TileMatrixSets available from this API implementation & deployment (for inclusion in the API definition). parameters: - $ref: '../../parameters/unspecified/f-metadata.yaml' responses: diff --git a/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTile.yaml b/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTile.yaml index d88aacfe..b28d719e 100644 --- a/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTile.yaml +++ b/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTile.yaml @@ -1,7 +1,7 @@ get: tags: - - Coverage Tiles - summary: Retrieve coverage tiles + - Tiled Coverage Data + summary: Retrieve tiled coverage data operationId: .collection.coverage.getTile parameters: - $ref: '../../../../parameters/tiles-core/tileMatrix.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/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSet.yaml b/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSet.yaml index f1e00220..4a34a4d8 100644 --- a/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSet.yaml +++ b/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSet.yaml @@ -1,6 +1,6 @@ get: tags: - - Coverage Tiles + - Tiled Coverage Data summary: Retrieve the coverage tileset metadata for the specified collection and tiling scheme (tile matrix set) operationId: .collection.coverage.getTileSet parameters: diff --git a/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSetsList.yaml b/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSetsList.yaml index 1f7ee29a..be307249 100644 --- a/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSetsList.yaml +++ b/coverages/src/main/resources/schema/coverages/paths/tiles-core/collection-tiles/coverage-tiles/pCollectionCoverageTileSetsList.yaml @@ -1,6 +1,6 @@ get: tags: - - Coverage Tiles + - Tiled Coverage Data summary: Retrieve the list of available coverage tilesets for the specified collection. operationId: .collection.coverage.getTileSetsList parameters: diff --git a/coverages/src/main/resources/schema/coverages/responses/common-core/rConformance.yaml b/coverages/src/main/resources/schema/coverages/responses/common-core/rConformance.yaml index 53997644..3be97952 100644 --- a/coverages/src/main/resources/schema/coverages/responses/common-core/rConformance.yaml +++ b/coverages/src/main/resources/schema/coverages/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/coverages/src/main/resources/schema/coverages/responses/common-core/rException.yaml b/coverages/src/main/resources/schema/coverages/responses/common-core/rException.yaml index a87132b0..b53adee1 100644 --- a/coverages/src/main/resources/schema/coverages/responses/common-core/rException.yaml +++ b/coverages/src/main/resources/schema/coverages/responses/common-core/rException.yaml @@ -1,4 +1,4 @@ -description: An error occured. +description: An error occurred. content: application/json: schema: diff --git a/coverages/src/main/resources/schema/coverages/responses/common-core/rLandingPage.yaml b/coverages/src/main/resources/schema/coverages/responses/common-core/rLandingPage.yaml index 53539c02..2973a204 100644 --- a/coverages/src/main/resources/schema/coverages/responses/common-core/rLandingPage.yaml +++ b/coverages/src/main/resources/schema/coverages/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/coverages/src/main/resources/schema/coverages/responses/common-geodata/rCollection.yaml b/coverages/src/main/resources/schema/coverages/responses/common-geodata/rCollection.yaml index cfcc6514..7eeeca11 100644 --- a/coverages/src/main/resources/schema/coverages/responses/common-geodata/rCollection.yaml +++ b/coverages/src/main/resources/schema/coverages/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/vnd.cov+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/coverages/src/main/resources/schema/coverages/responses/common-geodata/rCollectionsList.yaml b/coverages/src/main/resources/schema/coverages/responses/common-geodata/rCollectionsList.yaml index f076d371..6b9da3c2 100644 --- a/coverages/src/main/resources/schema/coverages/responses/common-geodata/rCollectionsList.yaml +++ b/coverages/src/main/resources/schema/coverages/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/vnd.cov+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/coverages/src/main/resources/schema/coverages/responses/coverages-core/rCoverage.yaml b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rCoverage.yaml index a9fb7d45..df746ea4 100644 --- a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rCoverage.yaml +++ b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rCoverage.yaml @@ -1,13 +1,43 @@ -description: A full coverage. +description: A coverage, including any self-describing information supported by the encoding. content: + application/vnd.cov+json: + schema: + type: string + # SwaggerUI Validation errors? $ref: 'https://schemas.opengis.net/covjson/1.0/coveragejson.json' application/json: schema: - $ref: '../../schemas/cis/coverage-schema.yaml' + anyOf: + - $ref: '../../schemas/cis/coverage-schema.yaml' + - $ref: '../../schemas/coverages-core/position-query-response.yaml' image/tiff; application=geotiff: schema: type: string format: binary - multipart/related: + application/x-netcdf: + schema: + type: string + format: binary + vnd.las: + schema: + type: string + format: binary + vnd.laszip: + schema: + type: string + format: binary + image/png: + schema: + type: string + format: binary + image/jxl: + schema: + type: string + format: binary + image/jp2: + schema: + type: string + format: binary + application/x-zarr: schema: type: string format: binary diff --git a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rDomainSet.yaml b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rDomainSet.yaml deleted file mode 100644 index 90e48f11..00000000 --- a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rDomainSet.yaml +++ /dev/null @@ -1,8 +0,0 @@ -description: A coverages domainset. -content: - application/json: - schema: - $ref: '../../schemas/cis/domainSet.yaml' - text/html: - schema: - type: string diff --git a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rMetadata.yaml b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rMetadata.yaml deleted file mode 100644 index 41752376..00000000 --- a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rMetadata.yaml +++ /dev/null @@ -1,8 +0,0 @@ -description: A coverage's metadata. -content: - application/json: - schema: - $ref: '../../schemas/cis/metadata.yaml' - text/html: - schema: - type: string diff --git a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rRangeSet.yaml b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rRangeSet.yaml deleted file mode 100644 index 31bdacf6..00000000 --- a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rRangeSet.yaml +++ /dev/null @@ -1,8 +0,0 @@ -description: A coverage's range set. -content: - application/json: - schema: - $ref: '../../schemas/cis/rangeSet.yaml' - text/html: - schema: - type: string diff --git a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rRangeType.yaml b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rRangeType.yaml deleted file mode 100644 index 254d00e5..00000000 --- a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rRangeType.yaml +++ /dev/null @@ -1,8 +0,0 @@ -description: A coverage's rangetype. -content: - application/json: - schema: - $ref: '../../schemas/cis/rangeType.yaml' - text/html: - schema: - type: string diff --git a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rScene.yaml b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rScene.yaml new file mode 100644 index 00000000..e7cf63bb --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rScene.yaml @@ -0,0 +1,45 @@ +description: |- + Information about a particular scene of a coverage. +content: + 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/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 diff --git a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rScenesList.yaml b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rScenesList.yaml new file mode 100644 index 00000000..7b2e44d8 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rScenesList.yaml @@ -0,0 +1,9 @@ +description: |- + The individual scenes comprising the coverage +content: + application/json: + schema: + $ref: '../../schemas/coverages-core/scenesList.yaml' + text/html: + schema: + type: string diff --git a/coverages/src/main/resources/schema/coverages/responses/coverages-core/rSchema.yaml b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rSchema.yaml new file mode 100644 index 00000000..a27d5c27 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/responses/coverages-core/rSchema.yaml @@ -0,0 +1,8 @@ +description: Collection schema describing all fields of the coverage +content: + application/json: + schema: + $ref: '../../schemas/tms/propertiesSchema.yaml' + text/html: + schema: + type: string diff --git a/coverages/src/main/resources/schema/coverages/schemas/cis/coverage-schema.yaml b/coverages/src/main/resources/schema/coverages/schemas/cis/coverage-schema.yaml index 6e93b4e7..7bfefc78 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/cis/coverage-schema.yaml +++ b/coverages/src/main/resources/schema/coverages/schemas/cis/coverage-schema.yaml @@ -15,15 +15,15 @@ oneOf: enum: - CoverageByDomainAndRange envelope: - $ref: 'schemas/cis/envelope.yaml' + $ref: 'envelope.yaml' domainSet: - $ref: 'schemas/cis/domainSet.yaml' + $ref: 'domainSet.yaml' rangeSet: - $ref: 'schemas/cis/rangeSet.yaml' + $ref: 'rangeSet.yaml' rangeType: - $ref: 'schemas/cis/rangeType.yaml' + $ref: 'rangeType.yaml' metadata: - $ref: 'schemas/cis/metadata.yaml' + $ref: 'metadata.yaml' - required: - type - partitionSet @@ -35,10 +35,10 @@ oneOf: enum: - CoverageByPartitioning envelope: - $ref: 'schemas/cis/envelope.yaml' + $ref: 'envelope.yaml' partitionSet: - $ref: 'schemas/cis/partitioningSet.yaml' + $ref: 'partitioningSet.yaml' rangeType: - $ref: 'schemas/cis/rangeType.yaml' + $ref: 'rangeType.yaml' metadata: - $ref: 'schemas/cis/metadata.yaml' + $ref: 'metadata.yaml' diff --git a/coverages/src/main/resources/schema/coverages/schemas/common-core/link.yaml b/coverages/src/main/resources/schema/coverages/schemas/common-core/link.yaml index 82f62318..35ce773e 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/common-core/link.yaml +++ b/coverages/src/main/resources/schema/coverages/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/coverages/src/main/resources/schema/coverages/schemas/common-geodata/collectionInfo.yaml b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/collectionDesc.yaml similarity index 86% rename from coverages/src/main/resources/schema/coverages/schemas/common-geodata/collectionInfo.yaml rename to coverages/src/main/resources/schema/coverages/schemas/common-geodata/collectionDesc.yaml index 4dec6a04..fb3e7b17 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/collectionInfo.yaml +++ b/coverages/src/main/resources/schema/coverages/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: @@ -60,6 +63,11 @@ properties: example: - http://www.opengis.net/def/crs/OGC/1.3/CRS84 - http://www.opengis.net/def/crs/EPSG/0/4326 + storageCrs: + 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 + type: string + default: http://www.opengis.net/def/crs/OGC/1.3/CRS84 + example: http://www.opengis.net/def/crs/OGC/1.3/CRS84 dataType: allOf: - description: Type of data represented in the collection diff --git a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/collections.yaml b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/collections.yaml index 2e57c44a..432b49d8 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/collections.yaml +++ b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/collections.yaml @@ -11,14 +11,10 @@ properties: 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 items: - $ref: 'collectionInfo.yaml' + $ref: 'collectionDesc.yaml' diff --git a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/crs.yaml b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/crs.yaml index c7c7bfa7..491ff05f 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/crs.yaml +++ b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/crs.yaml @@ -16,7 +16,7 @@ oneOf: properties: wkt: allOf: - - description: A string defining the CRS using the JSON encodng for Well-known text representation of coordinate reference systems 2.0 + - description: An object defining the CRS using the JSON encoding for Well-known text representation of coordinate reference systems 2.0 - type: object # - $ref: 'projJSON.yaml' - required: - referenceSystem diff --git a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/dataType.yaml b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/dataType.yaml index 6aa967cb..dadac26a 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/dataType.yaml +++ b/coverages/src/main/resources/schema/coverages/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/coverages/src/main/resources/schema/coverages/schemas/common-geodata/extent-uad.yaml b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/extent-uad.yaml index 7e38641a..8aad409a 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/extent-uad.yaml +++ b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/extent-uad.yaml @@ -10,7 +10,7 @@ allOf: 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, definition ] - required: [ interval, trs ] - required: [ interval, vrs ] properties: @@ -38,11 +38,9 @@ allOf: - type: number example: - '2011-11-11T12:22:11Z' + - '2011-11-11T08:22:11-04:00' - 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') @@ -83,3 +81,14 @@ allOf: example: - "PT1H" - 0.0006866455078 + definition: + type: string + format: uri + description: A URI to the definition of the measured or observed property corresponding to this dimension. + unit: + type: string + description: The unit of measure in which the interval and/or grid values are expressed. + unitLang: + type: string + default: UCUM + description: The language (or vocabulary) in which the unit is expressed (defaults to "UCUM" if not specified). diff --git a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/extent.yaml b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/extent.yaml index 6f4a3fd1..acd7ad30 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/extent.yaml +++ b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/extent.yaml @@ -17,9 +17,7 @@ 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. @@ -42,11 +40,11 @@ properties: 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`. + 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 a parameter `bbox-crs`. + 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. @@ -72,14 +70,48 @@ properties: - -90 - 180 - 90 + storageCrsBbox: + 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: 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 + 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. - Extensions may support additional coordinate reference systems and add - additional enum values. + For non-terrestrial coordinate reference system, another CRS may be specified. type: string enum: - 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' @@ -144,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 @@ -156,6 +189,7 @@ properties: nullable: true example: - '2011-11-11T12:22:11Z' + - '2011-11-11T08:22:11-04:00' - null trs: description: |- @@ -168,3 +202,34 @@ properties: 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" diff --git a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/numberMatched.yaml b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/numberMatched.yaml index feb63abf..b87beeda 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/numberMatched.yaml +++ b/coverages/src/main/resources/schema/coverages/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`. + The number of elements in the response that match the selection parameters like `bbox`. type: integer minimum: 0 example: 127 diff --git a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/numberReturned.yaml b/coverages/src/main/resources/schema/coverages/schemas/common-geodata/numberReturned.yaml index cbe9a364..b51eaca1 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/common-geodata/numberReturned.yaml +++ b/coverages/src/main/resources/schema/coverages/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 elements in the response. + 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 items in the "features" array. + of elements in the response. type: integer minimum: 0 example: 10 diff --git a/coverages/src/main/resources/schema/coverages/schemas/coverages-core/coverageInfo.yaml b/coverages/src/main/resources/schema/coverages/schemas/coverages-core/coverageInfo.yaml deleted file mode 100644 index d86c4f06..00000000 --- a/coverages/src/main/resources/schema/coverages/schemas/coverages-core/coverageInfo.yaml +++ /dev/null @@ -1,73 +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. - domainSet: - allOf: - - $ref: '../cis/domainSet.yaml' - example: - type: DomainSet - generalGrid: - type: GeneralGridCoverage - srsName: 'http://www.opengis.net/def/crs/EPSG/0/4326' - axisLabels: - - Lat - - Long - axis: - - type: RegularAxis - axisLabel: Lat - lowerBound: -90 - upperBound: 90 - uomLabel: deg - resolution: 1 - - type: RegularAxis - axisLabel: Long - lowerBound: -180 - upperBound: 180 - uomLabel: deg - resolution: 1 - gridLimits: - type: GridLimits - srsName: 'http://www.opengis.net/def/crs/OGC/0/Index2D' - axisLabels: - - i - - j - axis: - - type: IndexAxis - axisLabel: i - lowerBound: 0 - upperBound: 180 - - type: IndexAxis - axisLabel: j - lowerBound: 0 - upperBound: 360 - rangeType: - allOf: - - $ref: '../cis/rangeType.yaml' - example: - type: DataRecord - field: - type: Quantity - id: dem_field - name: dem field - definition: unsignedInt - uom: - type: UnitReference - code: m - constraint: - type: AllowedValues - interval: - - 0 - - 10000 - interpolationRestriction: - type: InterpolationRestriction - allowedInterpolation: - - linear diff --git a/coverages/src/main/resources/schema/coverages/schemas/coverages-core/coverages.yaml b/coverages/src/main/resources/schema/coverages/schemas/coverages-core/coverages.yaml deleted file mode 100644 index ebf5085f..00000000 --- a/coverages/src/main/resources/schema/coverages/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' diff --git a/coverages/src/main/resources/schema/coverages/schemas/coverages-core/position-query-response.yaml b/coverages/src/main/resources/schema/coverages/schemas/coverages-core/position-query-response.yaml new file mode 100644 index 00000000..7a7e0cd6 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/schemas/coverages-core/position-query-response.yaml @@ -0,0 +1,11 @@ +anyOf: +- type: object + example: { "temperature": 28, "relativeHumidity": 0.35 } +- type: array + items: + anyOf: + - type: object + example: { "temperature": 28, "relativeHumidity": 0.35 } + - example: 352 + example: [ "foxes", "wolves" ] +- example: 352 diff --git a/coverages/src/main/resources/schema/coverages/schemas/coverages-core/scene.yaml b/coverages/src/main/resources/schema/coverages/schemas/coverages-core/scene.yaml new file mode 100644 index 00000000..d586f809 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/schemas/coverages-core/scene.yaml @@ -0,0 +1,27 @@ +type: object +required: + - id + - crs + - storageCrs + - links +properties: + id: + type: + oneOf: + - string + - integer + extent: + $ref: '../common-geodata/extent-uad.yaml' + crs: + type: array + items: + type: string + format: uri + minItems: 1 + storageCrs: + type: string + format: uri + links: + type: array + items: + $ref: '../common-core/link.yaml' diff --git a/coverages/src/main/resources/schema/coverages/schemas/coverages-core/sceneItem.yaml b/coverages/src/main/resources/schema/coverages/schemas/coverages-core/sceneItem.yaml new file mode 100644 index 00000000..a02b6c21 --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/schemas/coverages-core/sceneItem.yaml @@ -0,0 +1,12 @@ +type: object +required: +- id +properties: + id: + oneOf: + - type: string + - type: integer + links: + type: array + items: + $ref: '../common-core/link.yaml' diff --git a/coverages/src/main/resources/schema/coverages/schemas/coverages-core/scenesList.yaml b/coverages/src/main/resources/schema/coverages/schemas/coverages-core/scenesList.yaml new file mode 100644 index 00000000..5edd3e0d --- /dev/null +++ b/coverages/src/main/resources/schema/coverages/schemas/coverages-core/scenesList.yaml @@ -0,0 +1,24 @@ +type: object +required: + - links + - scenes +properties: + scenes: + type: array + items: + $ref: 'sceneItem.yaml' + links: + type: array + items: + $ref: '../common-core/link.yaml' + timeStamp: + type: string + format: date-time + numberMatched: + type: integer + minimum: 0 + example: 1 + numberReturned: + type: integer + minimum: 0 + example: 1 diff --git a/coverages/src/main/resources/schema/coverages/schemas/tms/propertiesSchema.yaml b/coverages/src/main/resources/schema/coverages/schemas/tms/propertiesSchema.yaml index f2363a11..5d547cf3 100644 --- a/coverages/src/main/resources/schema/coverages/schemas/tms/propertiesSchema.yaml +++ b/coverages/src/main/resources/schema/coverages/schemas/tms/propertiesSchema.yaml @@ -73,13 +73,14 @@ properties: type: integer default: 0 minimum: 0 - observedProperty: - type: string - observedPropertyURI: + x-ogc-definition: type: string format: uri - uom: + x-ogc-unit: type: string - uomURI: + x-ogc-unitLang: type: string format: uri + x-ogc-propertySeq: + type: integer + minimum: 0 diff --git a/pom.xml b/pom.xml index fabcdac9..2e3e58c6 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 1.5.5.Final 1.18.30 0.2.0 - 3.0.69 + 3.0.82 29.6 true true diff --git a/records/pom.xml b/records/pom.xml index b541b103..594a95d4 100644 --- a/records/pom.xml +++ b/records/pom.xml @@ -75,7 +75,7 @@ ${project.groupId}.records.model ${project.groupId}.records.api ${project.groupId}.records.invoker - ${project.basedir}/src/main/resources/schema/records/ogcapi-records-1.yaml + ${project.basedir}/src/main/resources/schema/records/ogcapi-records-1-building-blocks.yaml ${project.build.directory}/generated-sources true @@ -108,7 +108,7 @@ import au\.org\.aodn\.ogcapi\.records\.model\.TimeStamp; - + diff --git a/records/src/main/resources/schema/records/ogcapi-records-1-building-blocks.yaml b/records/src/main/resources/schema/records/ogcapi-records-1-building-blocks.yaml new file mode 100644 index 00000000..ca2b888d --- /dev/null +++ b/records/src/main/resources/schema/records/ogcapi-records-1-building-blocks.yaml @@ -0,0 +1,972 @@ +openapi: 3.0.3 +info: + title: "Building Blocks specified in OGC API - Features - Part 1: Core" + description: |- + Common components used in the [OGC standard "OGC API - Records - Part 1: Core"](https://docs.opengeospatial.org/is/20-004r1/20-004r1.html). + OGC API - Records - Part 1: Core is an OGC Standard. + Copyright (c) 2019 Open Geospatial Consortium. + To obtain additional rights of use, visit https://www.ogc.org/about-ogc/policies. + This document is also available on [OGC](https://schemas.opengis.net/ogcapi/records/part1/1.0/openapi/ogcapi-records-1-building-blocks.yaml). + version: '1.0.0' + contact: + name: Panagiotis Vretanos + email: pvretano@cubewerx.com + license: + name: OGC License + url: 'https://www.ogc.org/about-ogc/policies' +components: + parameters: + bbox: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/bbox.yaml' + catalogId: + name: catalogId + in: path + description: local identifier of a catalog + required: true + schema: + type: string + datetime: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/datetime.yaml' + externalIds: + name: externalIds + in: query + description: |- + The optional externalIds parameter allows a specific list of records, + identified by their external identifiers, to be fetched from a catalog. + Only records where one of their associated external identifiers equals + one of the values listed for this parameter shall appear in the + response. + required: false + schema: + type: array + items: + type: string + pattern: ([^:]+:)?[^:]+ + explode: false + style: form + ids: + name: ids + in: query + description: + The optional ids parameter allows a specific list of records, identified + by their identifiers, to be fetched from a catalog. Only records whose + identifier matches one of the values listed for this parameter shall + appear in the response. + required: false + schema: + type: array + items: + type: string + explode: false + style: form + language: + name: language + in: query + description: |- + Optional way to query for specific languages for environments that can't + send HTTP headers in a simple way (e.g. a Web Browser). + The parameter accepts a comma-separated list of language identifiers, + optionally with priority per language. + This parameter value follows the specification of the `Accept-Language` + HTTP header. + schema: + type: array + items: + type: string + description: |- + The language tag as per RFC 5646, with optional priority parameter + `q` (0 - 1). + pattern: "^((?:(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((?:([A-Za-z]{2,3}(-(?:[A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-(?:[A-Za-z]{4}))?(-(?:[A-Za-z]{2}|[0-9]{3}))?(-(?:[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-(?:[0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(?:x(-[A-Za-z0-9]{1,8})+))?)|(?:x(-[A-Za-z0-9]{1,8})+))(?:;q=(?:1|1\\.0+|0|0\\.[0-9]+))?$" + explode: false + style: form + limit: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/limit.yaml' + profile: + name: profile + in: query + description: |- + One or more identifiers that provide information about additional + semantics (constraints, conventions, extensions), in addition to + those defined by the media type, that are associated with the + target resource. + required: false + schema: + type: array + items: + type: string + explode: false + style: form + q: + name: q + in: query + description: |- + The optional q parameter supports keyword searching. Only records + whose text fields contain one or more of the specified search terms + are selected. The specific set of text keys/fields/properties of a + record to which the q operator is applied is up to the discretion + of the server. Implementations should, however, apply the q + operator to the title, description and keywords keys/fields/properties. + required: false + schema: + type: array + items: + type: string + explode: false + style: form + recordId: + name: recordId + in: path + description: local identifier of a record + required: true + schema: + type: string + sortby: + name: sortby + in: query + description: |- + Specifies a comma-separated list of property names by which the + response shall be sorted. If the property name is preceded by a + plus (+) sign it indicates an ascending sort for that property. + If the property name is preceded by a minus (-) sign it indicates a + descending sort for that property. If the property is not preceded + by a plus or minus, then the default sort order implied is + ascending (+). + required: false + schema: + type: array + minItems: 1 + items: + type: string + pattern: '[+|-]?[A-Za-z_].*' + explode: false + style: form + type: + name: type + in: query + description: |- + The optional type parameter allows a specific list of records, + identified by their resource type, to be fetched from a catalog. + Only records whose resource type matches one of the values listed + for this parameter shall appear in the response. + required: false + schema: + type: array + items: + type: string + explode: false + style: form + schemas: + catalogCommonProperties: + allOf: + - $ref: '#/components/schemas/recordCommonProperties' + - type: object + required: + - type + properties: + type: + description: |- + Fixed to "Collection" for collections of records and/or + subordinate catalogs. Wanted to use the JSON-Schema const + key work but all the swagger validators tried complained + about it. + type: string + enum: + - Collection + conformsTo: + type: array + description: |- + The extensions/conformance classes used in this collection. + items: + type: string + recordsArrayName: + description: |- + If records are encoded in-line within the catalog object, + this member advertises the name of the array member that + contains the catalog records. By default the name of the + records array is "records". However, the name of this + array member may be different. A local resources catalog + is an example of a circumstance where the records array + member may be named something other than "records". For + example, in the case of a local resource catalog at the + /collections endpoint, the name of the records array is + "collections". + type: string + default: records + records: + type: array + description: |- + An array of records that are part of this catalog that + are encoded in-line within the catalog object. + The items schema is intentionally general (i.e. object) + to accomodate records that have been extended beyond + the core record schema. + items: + type: object + links: + type: array + items: + $ref: '#/components/schemas/link' + linkTemplates: + type: array + items: + $ref: '#/components/schemas/linkTemplate' + defaultSortOrder: + $ref: '#/components/schemas/defaultSortOrder' + schemes: + type: array + description: |- + A list of schemes used in this context. + items: + $ref: '#/components/schemas/scheme' + catalogs: + allOf: + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/collections.yaml' + - type: object + properties: + collections: + type: array + items: + $ref: '#/components/schemas/catalog' + linkTemplates: + type: array + items: + $ref: '#/components/schemas/linkTemplate' + catalog: + allOf: + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/collection.yaml' + - $ref: '#/components/schemas/catalogCommonProperties' + - type: object + properties: + itemType: + description: |- + If this catalog is a homogenous collection + of records then itemType is a string of fixed + value of record. + If this catalog is a homogenous collection + of other catalogs then itemType is a string of + fixed value of catalog. + If this catalog is a heterogenous collection + of records and catalogs then itemType is a array + indicated that item types of the members of this + collections (i.e. record and/or catalog). + oneOf: + - type: string + enum: + - record + - catalog + - type: array + items: + type: string + enum: + - record + - catalog + contact: + type: object + description: |- + Identification of, and means of communication with, person responsible + for the resource. + anyOf: + - required: + - name + - required: + - organization + properties: + identifier: + type: string + description: |- + A value uniquely identifying a contact. + name: + type: string + description: |- + The name of the responsible person. + position: + type: string + 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 + description: |- + Organization/affiliation of the contact. + logo: + description: |- + Graphic identifying a contact. The link relation should be `icon` + and 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 + description: Telephone numbers at which contact can be made. + items: + type: object + required: + - value + properties: + value: + type: string + description: The value is the phone number itself. + pattern: "^\\+[1-9]{1}[0-9]{3,14}$" + roles: + $ref: '#/components/schemas/roles' + emails: + type: array + description: Email addresses at which contact can be made. + items: + type: object + required: + - value + properties: + value: + type: string + description: The value is the email number itself. + format: email + roles: + $ref: '#/components/schemas/roles' + addresses: + type: array + description: Physical location at which contact can be made. + items: + type: object + properties: + deliveryPoint: + type: array + description: Address lines for the location. + items: + type: string + city: + type: string + description: City for the location. + administrativeArea: + type: string + description: State or province of the location. + postalCode: + type: string + description: ZIP or other postal code. + country: + type: string + description: |- + Country of the physical address. ISO 3166-1 is recommended. + roles: + $ref: '#/components/schemas/roles' + links: + type: array + description: On-line information about the contact. + items: + allOf: + - $ref: '#/components/schemas/link' + - type: object + required: + - type + hoursOfService: + type: string + description: Time period when the contact can be contacted. + contactInstructions: + type: string + description: |- + Supplemental instructions on how or when to contact the + responsible party. + roles: + $ref: '#/components/schemas/roles' + defaultSortOrder: + type: array + items: + type: object + required: + - field + - direction + properties: + field: + type: string + direction: + type: string + enum: + - asc + - desc + format: + type: object + anyOf: + - required: + - name + - required: + - mediaType + properties: + name: + type: string + mediaType: + type: string + landingPage: + allOf: + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/landingPage.yaml' + - type: object + properties: + linkTemplates: + type: array + items: + $ref: '#/components/schemas/linkTemplate' + language: + type: object + description: |- + The language used for textual values in this record. + required: + - code + properties: + code: + type: string + description: |- + The language tag as per RFC-5646. + name: + type: string + minLength: 1 + description: |- + The untranslated name of the language. + alternate: + type: string + description: |- + The name of the language in another well-understood language, + usually English. + dir: + type: string + 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 + license: + type: string + description: |- + A legal document under which the resource is made available. + If the resource is being made available under a common license + then use an SPDX license id (https://spdx.org/licenses/). + If the resource is being made available under multiple common + licenses then use an SPDX license expression v2.3 string + (https://spdx.github.io/spdx-spec/v2.3/SPDX-license-expressions/) + If the resource is being made available under one or more licenses + that haven't been assigned an SPDX identifier or one or more custom + licenses then use a string value of 'other' and include one or more + links (rel="license") in the `link` section of the record to the + file(s) that contains the text of the license(s). + There is also the case of a resource that is private or unpublished + and is thus unlicensed; in this case do not register such a resource + in the catalog in the first place since there is no point in making + such a resource discoverable. + linkBase: + type: object + properties: + rel: + type: string + description: The type or semantics of the relation. + type: + type: string + description: |- + A hint indicating what the media type of the + result of dereferencing the link should be. + hreflang: + type: string + description: |- + A hint indicating what the language of the + result of dereferencing the link should be. + title: + type: string + description: |- + Used to label the destination of a link + such that it can be used as a human-readable + identifier. + length: + type: integer + profile: + type: array + description: |- + One or more identifiers that provide information about additional + semantics (constraints, conventions, extensions), in addition to + those defined by the media type, that are associated with the + target resource. + items: + type: string + created: + type: string + description: |- + Date of creation of the resource pointed to + by the link. + format: date-time + updated: + type: string + description: |- + Most recent date on which the resource pointed + to by the link was changed. + format: date-time + linkTemplate: + allOf: + - $ref: '#/components/schemas/linkBase' + - type: object + required: + - uriTemplate + properties: + uriTemplate: + type: string + description: |- + Supplies a resolvable URI to a remote resource + (or resource fragment). + varBase: + type: string + description: |- + The base URI to which the variable name can be + appended to retrieve the definition of the + variable as a JSON Schema fragment. + format: uri-reference + variables: + type: object + description: |- + This object contains one key per substitution + variable in the templated URL. Each key defines + the schema of one substitution variable using a + JSON Schema fragment and can thus include things + like the data type of the variable, enumerations, + minimum values, maximum values, etc. + link: + type: object + allOf: + - $ref: '#/components/schemas/linkBase' + - type: object + required: + - href + properties: + href: + type: string + format: uri + recordCollectionGeoJSON: + allOf: + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/featureCollectionGeoJSON.yaml' + - type: object + properties: + features: + type: array + items: + $ref: '#/components/schemas/recordGeoJSON' + linkTemplates: + type: array + items: + $ref: '#/components/schemas/linkTemplate' + recordCommonProperties: + type: object + properties: + created: + type: string + description: |- + The date this record was created in the server. + format: date-time + updated: + type: string + description: |- + The most recent date on which the record was changed. + format: date-time + type: + type: string + description: |- + The nature or genre of the resource. The value + should be a code, convenient for filtering + records. Where available, a link to the canonical + URI of the record type resource will be added to + the 'links' property. + title: + type: string + description: |- + A human-readable name given to the resource. + description: + type: string + description: |- + A free-text account of the resource. + keywords: + type: array + 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 + description: |- + A knowledge organization system used to classify + the resource. + minItems: 1 + items: + $ref: '#/components/schemas/theme' + language: + $ref: '#/components/schemas/language' + languages: + type: array + description: |- + This list of languages in which this record is + available. + items: + $ref: '#/components/schemas/language' + resourceLanguages: + type: array + description: |- + The list of languages in which the resource + described by this record is available. + items: + $ref: '#/components/schemas/language' + externalIds: + type: array + description: |- + An identifier for the resource assigned by an + external (to the catalog) entity. + items: + type: object + properties: + scheme: + type: string + description: |- + A reference to an authority or identifier + for a knowledge organization system from + which the external identifier was obtained. + It is recommended that the identifier be a + resolvable URI. + value: + type: string + description: The value of the identifier. + required: + - value + formats: + type: array + description: |- + A list of available distributions of the resource. + items: + $ref: '#/components/schemas/format' + contacts: + type: array + description: |- + A list of contacts qualified by their role(s) in + association to the record or the resource described + by the record. + items: + $ref: '#/components/schemas/contact' + license: + $ref: '#/components/schemas/license' + rights: + type: string + description: |- + A statement that concerns all rights not addressed + by the license such as a copyright statement. + recordGeoJSON: + type: object + required: + - id + - type + - geometry + - properties + properties: + id: + oneOf: + - type: string + - type: integer + description: |- + A unique identifier of the catalog record. + type: + type: string + enum: + - Feature + time: + oneOf: + - type: object + nullable: true + - $ref: '#/components/schemas/time' + geometry: + oneOf: + - type: object + nullable: true + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/geometryGeoJSON.yaml' + conformsTo: + type: array + description: |- + The extensions/conformance classes used in this record. + items: + type: string + properties: + oneOf: + - type: object + nullable: true + - allOf: + - type: object + - $ref: '#/components/schemas/recordCommonProperties' + links: + type: array + items: + $ref: '#/components/schemas/link' + linkTemplates: + type: array + items: + $ref: '#/components/schemas/linkTemplate' + 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 + scheme: + type: object + required: + - scheme-id + - namespace + properties: + scheme-id: + type: string + description: |- + An identifier for this namespace. The identifier can be used as a + short-form for the namespace. + namespace: + type: string + description: |- + A declarative region that provides a scope to the identifiers + inside it. It is recommended that the value of namespace be a URI. + resolver: + description: |- + An extensible description of a mechanism that resolves a scheme + identifier (scheme-id) to its namespace. + type: object + theme: + type: object + required: + - concepts + - scheme + properties: + concepts: + type: array + 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 + description: An identifier for the concept. + title: + type: string + description: A human readable title for the concept. + description: + type: string + description: A human readable description for the concept. + url: + type: string + format: uri + description: A URI providing further description of the concept. + scheme: + type: string + 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. + time: + type: object + properties: + date: + type: string + pattern: "^\\d{4}-\\d{2}-\\d{2}$" + timestamp: + type: string + pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" + interval: + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - type: string + pattern: + "^\\d{4}-\\d{2}-\\d{2}$" + - type: string + pattern: + "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" + - type: string + enum: + - ".." + resolution: + type: string + description: |- + Minimum time period resolvable in the dataset, as an ISO 8601 + duration + responses: + BadRequest: + description: |- + A client error occurred. + content: + application/json: + schema: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' + text/html: + schema: + type: string + Catalogs: + description: + Information about the list of catalogs offered by this service. + content: + application/json: + schema: + $ref: '#/components/schemas/catalogs' + text/html: + schema: + type: string + Catalog: + description: |- + Information about the record collection with id `collectionId`. + + The response contains a link to the items in the collection + (path `/collections/{collectionId}/items`, link relation `items`) + as well as key information about the collection. This information + includes: + + * A local identifier for the collection that is unique for the + + catalog; + * A list of coordinate reference systems (CRS) in which geometries + + 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; + * An optional indicator about the type of the items in the collection + + (the default value, if the indicator is not provided, is 'record'). + content: + application/json: + schema: + $ref: '#/components/schemas/catalog' + text/html: + schema: + type: string + ConformanceDeclaration: + description: |- + The URIs of all conformance classes supported by the server. + content: + application/json: + schema: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/confClasses.yaml' + text/html: + schema: + type: string + LandingPage: + description: |- + The landing page provides links to the API definition (link relations + `service-desc` and `service-doc`), the Conformance declaration (path + `/conformance`, link relation `conformance`), and the Record Collections + (path `/collections`, link relation `data`). + content: + application/json: + schema: + $ref: '#/components/schemas/landingPage' + text/html: + schema: + type: string + 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: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' + text/html: + schema: + type: string + 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: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' + text/html: + schema: + type: string + Records: + description: + The response is a document consisting of records in the collection. + The records included in the response are determined by the server + based on the query parameters of the request. To support access to + larger collections without overloading the client, the API supports + paged access with links to the next page, if more records are selected + that the page size. + + The `bbox` and `datetime` parameter can be used to select only a + subset of the records in the collection (the records that are in the + bounding box or time interval). The `bbox` parameter matches all records + in the collection that are not associated with a location, too. The + `datetime` parameter matches all records in the collection that are + not associated with a time stamp or interval, too. + + The `limit` parameter may be used to control the subset of the + selected records that should be returned in the response, the page size. + Each page may include information about the number of selected and + returned records (`numberMatched` and `numberReturned`) as well as + links to support paging (link relation `next`). + content: + application/geo+json: + schema: + $ref: '#/components/schemas/recordCollectionGeoJSON' + text/html: + schema: + type: string + Record: + description: |- + Fetch the record with id `recordId` in the record collection + with id `collectionId` + content: + application/geo+json: + schema: + $ref: '#/components/schemas/recordGeoJSON' + text/html: + schema: + type: string + ServerError: + description: |- + A server error occurred. + content: + application/json: + schema: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' + text/html: + schema: + type: string + Sortables: + description: |- + A list of properties by which the server response may be sorted. + content: + application/json: + schema: + type: object + description: + A JSON Schema document that defines all the sortables. + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/ogcapi-records-1-example-all-in-one.yaml b/records/src/main/resources/schema/records/ogcapi-records-1-example-all-in-one.yaml new file mode 100644 index 00000000..a3957b2a --- /dev/null +++ b/records/src/main/resources/schema/records/ogcapi-records-1-example-all-in-one.yaml @@ -0,0 +1,1775 @@ +openapi: 3.0.3 +info: + title: "OGC API - Records - Part 1: Core" + version: '1.0.0' + description: |- + This is a sample OpenAPI definition that conforms to the conformance + classes of the "OGC API - Records - Part 1: Core" standard: + + * Searchable Catalog + * Searchable Catalog - Sorting + * Local Resources Catalog + * Local Resources Catalog - Query Parameters + * Local Resources Catalog - Sorting + * OpenAPI 3.0 + + This example is a generic definition that uses path parameters to + describe all catalogs and records. The generic OpenAPI definition + does not provide any details on the catalogs or the record content. + This information is only available by accessing the catalog and its + records. + contact: + name: CubeWerx Inc. + email: pvretano@cubewerx.com + url: 'https://www.cubewerx.com' + license: + name: CC-BY 4.0 license + url: 'https://creativecommons.org/licenses/by/4.0/' +servers: + - url: 'https://example.org/data' + description: Production server + - url: 'https://example.org/data-dev' + description: Development server +tags: + - name: Capabilities + description: |- + essential characteristics of this API + - name: Conformance + description: |- + list of conformance classes implemented by this API + - name: Collections + description: |- + list of catalogs offered by this API + - name: Collection + description: |- + description of a catalog offered by this API + - name: Sortables + description: |- + list of record properties by which responses can be sorted + - name: Records + description: |- + access to records + - name: Record + description: |- + access to a single record +paths: + '/': + get: + tags: + - Capabilities + summary: landing page + description: |- + The landing page provides links to the API definition, the conformance + statements and to the record collections in this dataset. + operationId: getLandingPage + parameters: + - $ref: '#/components/parameters/language' + - $ref: '#/components/parameters/profile' + responses: + '200': + $ref: '#/components/responses/LandingPage' + '4XX': + $ref: '#/components/responses/BadRequest' + '406': + $ref: '#/components/responses/NotAcceptable' + '5XX': + $ref: '#/components/responses/ServerError' + '/conformance': + get: + tags: + - Conformance + summary: information about specifications that this API conforms to + description: |- + A list of all conformance classes specified in a standard that the + server conforms to. + operationId: getConformanceDeclaration + responses: + '200': + $ref: '#/components/responses/ConformanceDeclaration' + '4XX': + $ref: '#/components/responses/BadRequest' + '406': + $ref: '#/components/responses/NotAcceptable' + '5XX': + $ref: '#/components/responses/ServerError' + '/collections': + get: + tags: + - Collections + summary: the record collections + description: |- + Fetch list of catalogs offered by this API + operationId: getCollections + parameters: + - $ref: '#/components/parameters/bbox' + - $ref: '#/components/parameters/datetime' + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/q' + - $ref: '#/components/parameters/type' + - $ref: '#/components/parameters/externalIds' + - $ref: '#/components/parameters/ids' + - $ref: '#/components/parameters/sortby' + - $ref: '#/components/parameters/language' + - $ref: '#/components/parameters/profile' + responses: + '200': + $ref: '#/components/responses/Catalogs' + '4XX': + $ref: '#/components/responses/BadRequest' + '406': + $ref: '#/components/responses/NotAcceptable' + '5XX': + $ref: '#/components/responses/ServerError' + '/collections/{catalogId}': + get: + tags: + - Collection + summary: |- + describe the record collection with id `catalogId` + description: |- + Fetch a detailed description of a catalog or collection of records + with id `catalogId`. + operationId: describeCollection + parameters: + - $ref: '#/components/parameters/catalogId' + - $ref: '#/components/parameters/language' + - $ref: '#/components/parameters/profile' + responses: + '200': + $ref: '#/components/responses/Catalog' + '4XX': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' + '5XX': + $ref: '#/components/responses/ServerError' + '/collections/{catalogId}/sortables': + get: + tags: + - Sortables + summary: |- + get the list of sortable properties + description: |- + Fetch the list of properties which can be used to sort the getRecords + response. + operationId: getSortables + parameters: + - $ref: '#/components/parameters/catalogId' + - $ref: '#/components/parameters/language' + - $ref: '#/components/parameters/profile' + responses: + '200': + $ref: '#/components/responses/Sortables' + '4XX': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' + '5XX': + $ref: '#/components/responses/ServerError' + '/collections/{catalogId}/items': + get: + tags: + - Records + summary: fetch records + description: |- + Fetch records from the record collection with id `catalogId`. + + Every record in a dataset belongs to a collection. A dataset may + consist of multiple record collections. A record collection is often a + collection of records of a similar type, based on a common schema. + + Use content negotiation to request HTML or GeoJSON. + operationId: getRecords + parameters: + - $ref: '#/components/parameters/catalogId' + - $ref: '#/components/parameters/bbox' + - $ref: '#/components/parameters/datetime' + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/q' + - $ref: '#/components/parameters/type' + - $ref: '#/components/parameters/externalIds' + - $ref: '#/components/parameters/ids' + - $ref: '#/components/parameters/sortby' + - $ref: '#/components/parameters/language' + - $ref: '#/components/parameters/profile' + responses: + '200': + $ref: '#/components/responses/Records' + '4XX': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' + '5XX': + $ref: '#/components/responses/ServerError' + '/collections/{catalogId}/items/{recordId}': + get: + tags: + - Record + summary: fetch a single record + description: |- + Fetch the record with id `recordId` from the record collection + with id `catalogId`. + + Use content negotiation to request HTML or GeoJSON. + operationId: getRecord + parameters: + - $ref: '#/components/parameters/catalogId' + - $ref: '#/components/parameters/recordId' + - $ref: '#/components/parameters/language' + - $ref: '#/components/parameters/profile' + responses: + '200': + $ref: '#/components/responses/Record' + '4XX': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '406': + $ref: '#/components/responses/NotAcceptable' + '5XX': + $ref: '#/components/responses/ServerError' +components: + parameters: + bbox: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/bbox.yaml' + + 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): + + * 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 + the 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 the parameter `bbox-crs`. + + The query parameter `bbox-crs` is specified in + OGC API - Features - Part 2: Coordinate Reference Systems by Reference. + + 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. + name: bbox + in: query + required: false + schema: + type: array + oneOf: + - minItems: 4 + maxItems: 4 + - minItems: 6 + maxItems: 6 + items: + type: number + style: form + explode: false + catalogId: + name: catalogId + in: path + description: local identifier of a catalog + required: true + schema: + type: string + datetime: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/datetime.yaml + + Either a date-time or an interval. Date and time expressions adhere to + RFC 3339. Intervals may be bounded or half-bounded (double-dots at + start or end). + + Examples: + + * 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" + + Only features 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 + server whether only a single temporal property is used to determine + the extent or all relevant temporal properties. + name: datetime + in: query + required: false + schema: + type: string + style: form + explode: false + externalIds: + name: externalIds + in: query + description: |- + The optional externalIds parameter allows a specific list of records, + identified by their external identifiers, to be fetched from a catalog. + Only records where one of their associated external identifiers equals + one of the values listed for this parameter shall appear in the + response. + required: false + schema: + type: array + items: + type: string + pattern: ([^:]+:)?[^:]+ + explode: false + style: form + ids: + name: ids + in: query + description: + The optional ids parameter allows a specific list of records, identified + by their identifiers, to be fetched from a catalog. Only records whose + identifier matches one of the values listed for this parameter shall + appear in the response. + required: false + schema: + type: array + items: + type: string + explode: false + style: form + language: + name: language + in: query + description: |- + Optional way to query for specific languages for environments that can't + send HTTP headers in a simple way (e.g. a Web Browser). + The parameter accepts a comma-separated list of language identifiers, + optionally with priority per language. + This parameter value follows the specification of the `Accept-Language` + HTTP header. + schema: + type: array + items: + type: string + description: |- + The language tag as per RFC 5646, with optional priority parameter + `q` (0 - 1). + pattern: "^((?:(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((?:([A-Za-z]{2,3}(-(?:[A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-(?:[A-Za-z]{4}))?(-(?:[A-Za-z]{2}|[0-9]{3}))?(-(?:[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-(?:[0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(?:x(-[A-Za-z0-9]{1,8})+))?)|(?:x(-[A-Za-z0-9]{1,8})+))(?:;q=(?:1|1\\.0+|0|0\\.[0-9]+))?$" + explode: false + style: form + limit: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/limit.yaml + + The optional limit parameter limits the number of items that are + presented in the response document. + + Only items are counted that are on the first level of the collection + in the response document. + Nested objects contained within the explicitly requested items shall + not be counted. + + Minimum = 1. Maximum = 10000. Default = 10. + name: limit + in: query + required: false + schema: + type: integer + minimum: 1 + maximum: 10000 + default: 10 + style: form + explode: false + profile: + name: profile + in: query + description: |- + One or more identifiers that provide information about additional + semantics (constraints, conventions, extensions), in addition to + those defined by the media type, that are associated with the + target resource. + required: false + schema: + type: array + items: + type: string + explode: false + style: form + q: + name: q + in: query + description: |- + The optional q parameter supports keyword searching. Only records + whose text fields contain one or more of the specified search terms + are selected. The specific set of text keys/fields/properties of a + record to which the q operator is applied is up to the discretion + of the server. Implementations should, however, apply the q + operator to the title, description and keywords keys/fields/properties. + required: false + schema: + type: array + items: + type: string + explode: false + style: form + recordId: + name: recordId + in: path + description: local identifier of a record + required: true + schema: + type: string + sortby: + name: sortby + in: query + description: |- + Specifies a comma-separated list of property names by which the + response shall be sorted. If the property name is preceded by a + plus (+) sign it indicates an ascending sort for that property. + If the property name is preceded by a minus (-) sign it indicates a + descending sort for that property. If the property is not preceded + by a plus or minus, then the default sort order implied is + ascending (+). + required: false + schema: + type: array + minItems: 1 + items: + type: string + pattern: '[+|-]?[A-Za-z_].*' + explode: false + style: form + type: + name: type + in: query + description: |- + The optional type parameter allows a specific list of records, + identified by their resource type, to be fetched from a catalog. + Only records whose resource type matches one of the values listed + for this parameter shall appear in the response. + required: false + schema: + type: array + items: + type: string + explode: false + style: form + schemas: + f-collections: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/collections.yaml + type: object + required: + - links + - collections + properties: + links: + type: array + items: + $ref: '#/components/schemas/link' + collections: + type: array + items: + $ref: '#/components/schemas/f-collection' + f-collection: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/collection.yaml + type: object + required: + - id + - links + properties: + id: + description: identifier of the collection used, for example, in URIs + type: string + example: address + title: + description: human readable title of the collection + type: string + example: address + description: + description: a description of the features in the collection + type: string + example: An address. + links: + type: array + items: + $ref: '#/components/schemas/link' + example: + - href: http://data.example.com/buildings + rel: item + - href: http://example.com/concepts/buildings.html + rel: describedby + type: text/html + extent: + $ref: '#/components/schemas/f-extent' + itemType: + description: |- + indicator about the type of the items in the collection (the + default value is 'feature'). + type: string + default: feature + crs: + description: |- + the list of coordinate reference systems supported by the service + 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 + f-extent: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/extent.yaml + + The extent of the features 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. + + An array of extents is provided for each extent type (spatial, + temporal). 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 extent in the array. + type: object + properties: + spatial: + description: |- + The spatial extent of the features 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 bounding box in the 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`. + + 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`. + + 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' + 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 temporal extent will + only need to access the first time interval in the array (a + pair of lower and upper bound instants). + 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` at start or end is supported and indicates + a half-bounded 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' + featureCollectionGeoJSON: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/featureCollectionGeoJSON.yaml + type: object + required: + - type + - features + properties: + type: + type: string + enum: + - FeatureCollection + features: + type: array + items: + $ref: '#/components/schemas/featureGeoJSON' + links: + type: array + items: + $ref: '#/components/schemas/link' + timeStamp: + type: string + format: date-time + numberMatched: + type: integer + minimum: 0 + numberReturned: + type: integer + minimum: 0 + featureGeoJSON: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/featureGeoJSON.yaml + type: object + required: + - type + - geometry + - properties + properties: + type: + type: string + enum: + - Feature + geometry: + $ref: '#/components/schemas/geometryGeoJSON' + properties: + type: object + nullable: true + id: + oneOf: + - type: string + - type: integer + links: + type: array + items: + $ref: '#/components/schemas/link' + geometryGeoJSON: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/geometryGeoJSON.yaml + 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' + pointGeoJSON: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/pointGeoJSON.yaml + type: object + required: + - type + - coordinates + properties: + type: + type: string + enum: + - Point + coordinates: + type: array + minItems: 2 + items: + type: number + multipointGeoJSON: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/multipointGeoJSON.yaml + type: object + required: + - type + - coordinates + properties: + type: + type: string + enum: + - MultiPoint + coordinates: + type: array + items: + type: array + minItems: 2 + items: + type: number + linestringGeoJSON: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/linestringGeoJSON.yaml + 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: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/multilinestringGeoJSON.yaml + 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: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/polygonGeoJSON.yaml + 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: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/multipolygonGeoJSON.yaml + 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 + geometrycollectionGeoJSON: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/geometrycollectionGeoJSON.yaml + type: object + required: + - type + - geometries + properties: + type: + type: string + enum: + - GeometryCollection + geometries: + type: array + items: + $ref: '#/components/schemas/geometryGeoJSON' + exception: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml + type: object + required: + - code + properties: + code: + type: string + description: + type: string + format: + type: object + anyOf: + - required: + - name + - required: + - mediaType + properties: + name: + type: string + mediaType: + type: string + f-landingPage: + description: |- + Imported from OGC API - Features - Part 1: Core + See: https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/landingPage.yaml + type: object + required: + - links + properties: + title: + type: string + example: Buildings in Bonn + description: + type: string + example: Access to data about buildings in the city of Bonn via a Web API that conforms to the OGC API Features specification. + links: + type: array + items: + $ref: '#/components/schemas/link' + confClasses: + type: object + required: + - conformsTo + properties: + conformsTo: + type: array + items: + type: string + example: "http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/core" + catalogCommonProperties: + allOf: + - $ref: '#/components/schemas/recordCommonProperties' + - type: object + required: + - type + properties: + type: + description: |- + Fixed to "Collection" for collections of records and/or + subordinate catalogs. Wanted to use the JSON-Schema const + key work but all the swagger validators tried complained + about it. + type: string + enum: + - Collection + conformsTo: + type: array + description: |- + The extensions/conformance classes used in this collection. + items: + type: string + recordsArrayName: + description: |- + If records are encoded in-line within the catalog object, + this member advertises the name of the array member that + contains the catalog records. By default the name of the + records array is "records". However, the name of this + array member may be different. A local resources catalog + is an example of a circumstance where the records array + member may be named something other than "records". For + example, in the case of a local resource catalog at the + /collections endpoint, the name of the records array is + "collections". + type: string + default: records + records: + type: array + description: |- + An array of records that are part of this catalog that + are encoded in-line within the catalog object. + The items schema is intentionally general (i.e. object) + to accomodate records that have been extended beyond + the core record schema. + items: + type: object + links: + type: array + items: + $ref: '#/components/schemas/link' + linkTemplates: + type: array + items: + $ref: '#/components/schemas/linkTemplate' + defaultSortOrder: + $ref: '#/components/schemas/defaultSortOrder' + schemes: + type: array + description: |- + A list of schemes used in this context. + items: + $ref: '#/components/schemas/scheme' + catalogs: + allOf: + - $ref: '#/components/schemas/f-collections' + - type: object + properties: + collections: + type: array + items: + $ref: '#/components/schemas/catalog' + linkTemplates: + type: array + items: + $ref: '#/components/schemas/linkTemplate' + catalog: + allOf: + - $ref: '#/components/schemas/f-collection' + - $ref: '#/components/schemas/catalogCommonProperties' + - type: object + properties: + itemType: + description: |- + If this catalog is a homogenous collection + of records then itemType is a string of fixed + value of record. + If this catalog is a homogenous collection + of other catalogs then itemType is a string of + fixed value of catalog. + If this catalog is a heterogenous collection + of records and catalogs then itemType is a array + indicated that item types of the members of this + collections (i.e. record and/or catalog). + oneOf: + - type: string + enum: + - record + - catalog + - type: array + items: + type: string + enum: + - record + - catalog + contact: + type: object + description: |- + Identification of, and means of communication with, person responsible + for the resource. + anyOf: + - required: + - name + - required: + - organization + properties: + identifier: + type: string + description: |- + A value uniquely identifying a contact. + name: + type: string + description: |- + The name of the responsible person. + position: + type: string + 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 + description: |- + Organization/affiliation of the contact. + logo: + description: |- + Graphic identifying a contact. The link relation should be `icon` + and 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 + description: Telephone numbers at which contact can be made. + items: + type: object + required: + - value + properties: + value: + type: string + description: The value is the phone number itself. + pattern: "^\\+[1-9]{1}[0-9]{3,14}$" + roles: + $ref: '#/components/schemas/roles' + emails: + type: array + description: Email addresses at which contact can be made. + items: + type: object + required: + - value + properties: + value: + type: string + description: The value is the email number itself. + format: email + roles: + $ref: '#/components/schemas/roles' + addresses: + type: array + description: Physical location at which contact can be made. + items: + type: object + properties: + deliveryPoint: + type: array + description: Address lines for the location. + items: + type: string + city: + type: string + description: City for the location. + administrativeArea: + type: string + description: State or province of the location. + postalCode: + type: string + description: ZIP or other postal code. + country: + type: string + description: |- + Country of the physical address. ISO 3166-1 is recommended. + roles: + $ref: '#/components/schemas/roles' + links: + type: array + description: On-line information about the contact. + items: + allOf: + - $ref: '#/components/schemas/link' + - type: object + required: + - type + hoursOfService: + type: string + description: Time period when the contact can be contacted. + contactInstructions: + type: string + description: |- + Supplemental instructions on how or when to contact the + responsible party. + roles: + $ref: '#/components/schemas/roles' + defaultSortOrder: + type: array + items: + type: object + required: + - field + - direction + properties: + field: + type: string + direction: + type: string + enum: + - asc + - desc + landingPage: + allOf: + - $ref: '#/components/schemas/f-landingPage' + - type: object + properties: + linkTemplates: + type: array + items: + $ref: '#/components/schemas/linkTemplate' + language: + type: object + description: |- + The language used for textual values in this record. + required: + - code + properties: + code: + type: string + description: |- + The language tag as per RFC-5646. + name: + type: string + minLength: 1 + description: |- + The untranslated name of the language. + alternate: + type: string + description: |- + The name of the language in another well-understood language, + usually English. + dir: + type: string + 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 + license: + type: string + description: |- + A legal document under which the resource is made available. + If the resource is being made available under a common license + then use an SPDX license id (https://spdx.org/licenses/). + If the resource is being made available under multiple common + licenses then use an SPDX license expression v2.3 string + (https://spdx.github.io/spdx-spec/v2.3/SPDX-license-expressions/) + If the resource is being made available under one or more licenses + that haven't been assigned an SPDX identifier or one or more custom + licenses then use a string value of 'other' and include one or more + links (rel="license") in the `link` section of the record to the + file(s) that contains the text of the license(s). + There is also the case of a resource that is private or unpublished + and is thus unlicensed; in this case do not register such a resource + in the catalog in the first place since there is no point in making + such a resource discoverable. + linkBase: + type: object + properties: + rel: + type: string + description: The type or semantics of the relation. + type: + type: string + description: |- + A hint indicating what the media type of the + result of dereferencing the link should be. + hreflang: + type: string + description: |- + A hint indicating what the language of the + result of dereferencing the link should be. + title: + type: string + description: |- + Used to label the destination of a link + such that it can be used as a human-readable + identifier. + length: + type: integer + profile: + type: array + description: |- + One or more identifiers that provide information about additional + semantics (constraints, conventions, extensions), in addition to + those defined by the media type, that are associated with the + target resource. + items: + type: string + created: + type: string + description: |- + Date of creation of the resource pointed to + by the link. + format: date-time + updated: + type: string + description: |- + Most recent date on which the resource pointed + to by the link was changed. + format: date-time + linkTemplate: + allOf: + - $ref: '#/components/schemas/linkBase' + - type: object + required: + - uriTemplate + properties: + uriTemplate: + type: string + description: |- + Supplies a resolvable URI to a remote resource + (or resource fragment). + varBase: + type: string + description: |- + The base URI to which the variable name can be + appended to retrieve the definition of the + variable as a JSON Schema fragment. + format: uri-reference + variables: + type: object + description: |- + This object contains one key per substitution + variable in the templated URL. Each key defines + the schema of one substitution variable using a + JSON Schema fragment and can thus include things + like the data type of the variable, enumerations, + minimum values, maximum values, etc. + link: + type: object + allOf: + - $ref: '#/components/schemas/linkBase' + - type: object + required: + - href + properties: + href: + type: string + format: uri + recordCollectionGeoJSON: + allOf: + - $ref: '#/components/schemas/featureCollectionGeoJSON' + - type: object + properties: + features: + type: array + items: + $ref: '#/components/schemas/recordGeoJSON' + linkTemplates: + type: array + items: + $ref: '#/components/schemas/linkTemplate' + recordCommonProperties: + type: object + properties: + created: + type: string + description: |- + The date this record was created in the server. + format: date-time + updated: + type: string + description: |- + The most recent date on which the record was changed. + format: date-time + type: + type: string + description: |- + The nature or genre of the resource. The value + should be a code, convenient for filtering + records. Where available, a link to the canonical + URI of the record type resource will be added to + the 'links' property. + title: + type: string + description: |- + A human-readable name given to the resource. + description: + type: string + description: |- + A free-text account of the resource. + keywords: + type: array + 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 + description: |- + A knowledge organization system used to classify + the resource. + minItems: 1 + items: + $ref: '#/components/schemas/theme' + language: + $ref: '#/components/schemas/language' + languages: + type: array + description: |- + This list of languages in which this record is + available. + items: + $ref: '#/components/schemas/language' + resourceLanguages: + type: array + description: |- + The list of languages in which the resource + described by this record is available. + items: + $ref: '#/components/schemas/language' + externalIds: + type: array + description: |- + An identifier for the resource assigned by an + external (to the catalog) entity. + items: + type: object + properties: + scheme: + type: string + description: |- + A reference to an authority or identifier + for a knowledge organization system from + which the external identifier was obtained. + It is recommended that the identifier be a + resolvable URI. + value: + type: string + description: The value of the identifier. + required: + - value + formats: + type: array + description: |- + A list of available distributions of the resource. + items: + $ref: '#/components/schemas/format' + contacts: + type: array + description: |- + A list of contacts qualified by their role(s) in + association to the record or the resource described + by the record. + items: + $ref: '#/components/schemas/contact' + license: + $ref: '#/components/schemas/license' + rights: + type: string + description: |- + A statement that concerns all rights not addressed + by the license such as a copyright statement. + recordGeoJSON: + type: object + required: + - id + - type + - geometry + - properties + properties: + id: + oneOf: + - type: string + - type: integer + description: |- + A unique identifier of the catalog record. + type: + type: string + enum: + - Feature + time: + oneOf: + - type: object + nullable: true + - $ref: '#/components/schemas/time' + geometry: + oneOf: + - type: object + nullable: true + - $ref: '#/components/schemas/geometryGeoJSON' + conformsTo: + type: array + description: |- + The extensions/conformance classes used in this record. + items: + type: string + properties: + oneOf: + - type: object + nullable: true + - allOf: + - type: object + - $ref: '#/components/schemas/recordCommonProperties' + links: + type: array + items: + $ref: '#/components/schemas/link' + linkTemplates: + type: array + items: + $ref: '#/components/schemas/linkTemplate' + 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 + scheme: + type: object + required: + - scheme-id + - namespace + properties: + scheme-id: + type: string + description: |- + An identifier for this namespace. The identifier can be used as a + short-form for the namespace. + namespace: + type: string + description: |- + A declarative region that provides a scope to the identifiers + inside it. It is recommended that the value of namespace be a URI. + resolver: + description: |- + An extensible description of a mechanism that resolves a scheme + identifier (scheme-id) to its namespace. + type: object + theme: + type: object + required: + - concepts + - scheme + properties: + concepts: + type: array + 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 + description: An identifier for the concept. + title: + type: string + description: A human readable title for the concept. + description: + type: string + description: A human readable description for the concept. + url: + type: string + format: uri + description: A URI providing further description of the concept. + scheme: + type: string + 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. + time: + type: object + properties: + date: + type: string + pattern: "^\\d{4}-\\d{2}-\\d{2}$" + timestamp: + type: string + pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" + interval: + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - type: string + pattern: + "^\\d{4}-\\d{2}-\\d{2}$" + - type: string + pattern: + "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" + - type: string + enum: + - ".." + resolution: + type: string + description: |- + Minimum time period resolvable in the dataset, as an ISO 8601 + duration + responses: + BadRequest: + description: |- + A client error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/exception' + text/html: + schema: + type: string + Catalogs: + description: + Information about the list of catalogs offered by this service. + content: + application/json: + schema: + $ref: '#/components/schemas/catalogs' + text/html: + schema: + type: string + Catalog: + description: |- + Information about the record collection with id `collectionId`. + + The response contains a link to the items in the collection + (path `/collections/{collectionId}/items`, link relation `items`) + as well as key information about the collection. This information + includes: + + * A local identifier for the collection that is unique for the + + catalog; + * A list of coordinate reference systems (CRS) in which geometries + + 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; + * An optional indicator about the type of the items in the collection + + (the default value, if the indicator is not provided, is 'record'). + content: + application/json: + schema: + $ref: '#/components/schemas/catalog' + text/html: + schema: + type: string + ConformanceDeclaration: + description: |- + The URIs of all conformance classes supported by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/confClasses' + text/html: + schema: + type: string + LandingPage: + description: |- + The landing page provides links to the API definition (link relations + `service-desc` and `service-doc`), the Conformance declaration (path + `/conformance`, link relation `conformance`), and the Record Collections + (path `/collections`, link relation `data`). + content: + application/json: + schema: + $ref: '#/components/schemas/landingPage' + text/html: + schema: + type: string + 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 + 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 + Records: + description: + The response is a document consisting of records in the collection. + The records included in the response are determined by the server + based on the query parameters of the request. To support access to + larger collections without overloading the client, the API supports + paged access with links to the next page, if more records are selected + that the page size. + + The `bbox` and `datetime` parameter can be used to select only a + subset of the records in the collection (the records that are in the + bounding box or time interval). The `bbox` parameter matches all records + in the collection that are not associated with a location, too. The + `datetime` parameter matches all records in the collection that are + not associated with a time stamp or interval, too. + + The `limit` parameter may be used to control the subset of the + selected records that should be returned in the response, the page size. + Each page may include information about the number of selected and + returned records (`numberMatched` and `numberReturned`) as well as + links to support paging (link relation `next`). + content: + application/geo+json: + schema: + $ref: '#/components/schemas/recordCollectionGeoJSON' + text/html: + schema: + type: string + Record: + description: |- + Fetch the record with id `recordId` in the record collection + with id `collectionId` + content: + application/geo+json: + schema: + $ref: '#/components/schemas/recordGeoJSON' + text/html: + schema: + type: string + ServerError: + description: |- + A server error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/exception' + text/html: + schema: + type: string + Sortables: + description: |- + A list of properties by which the server response may be sorted. + content: + application/json: + schema: + type: object + description: + A JSON Schema document that defines all the sortables. + text/html: + schema: + type: string + securitySchemes: + openIdConnect: + type: "openIdConnect" + openIdConnectUrl: "https://accounts.google.com/.well-known/openid-configuration" +security: + - openIdConnect: [] diff --git a/records/src/main/resources/schema/records/ogcapi-records-1-example-ref-buildingblocks-bundle.yaml b/records/src/main/resources/schema/records/ogcapi-records-1-example-ref-buildingblocks-bundle.yaml new file mode 100644 index 00000000..62a34e7d --- /dev/null +++ b/records/src/main/resources/schema/records/ogcapi-records-1-example-ref-buildingblocks-bundle.yaml @@ -0,0 +1,243 @@ +openapi: 3.0.3 +info: + title: "OGC API - Records - Part 1: Core" + version: '1.0.0' + description: |- + This is a sample OpenAPI definition that conforms to the conformance + classes of the "OGC API - Records - Part 1: Core" standard: + + * Searchable Catalog + * Searchable Catalog - Sorting + * Local Resources Catalog + * Local Resources Catalog - Query Parameters + * Local Resources Catalog - Sorting + * OpenAPI 3.0 + + This example is a generic definition that uses path parameters to + describe all catalogs and records. The generic OpenAPI definition + does not provide any details on the catalogs or the record content. + This information is only available by accessing the catalog and its + records. + contact: + name: CubeWerx Inc. + email: pvretano@cubewerx.com + url: 'https://www.cubewerx.com' + license: + name: CC-BY 4.0 license + url: 'https://creativecommons.org/licenses/by/4.0/' +servers: + - url: 'https://example.org/data' + description: Production server + - url: 'https://example.org/data-dev' + description: Development server +tags: + - name: Capabilities + description: |- + essential characteristics of this API + - name: Conformance + description: |- + list of conformance classes implemented by this API + - name: Collections + description: |- + list of catalogs offered by this API + - name: Collection + description: |- + description of a catalog offered by this API + - name: Sortables + description: |- + list of record properties by which responses can be sorted + - name: Records + description: |- + access to records + - name: Record + description: |- + access to a single record +paths: + '/': + get: + tags: + - Capabilities + summary: landing page + description: |- + The landing page provides links to the API definition, the conformance + statements and to the record collections in this dataset. + operationId: getLandingPage + parameters: + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/language' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/profile' + responses: + '200': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/LandingPage' + '4XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/BadRequest' + '406': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotAcceptable' + '5XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/ServerError' + '/conformance': + get: + tags: + - Conformance + summary: information about specifications that this API conforms to + description: |- + A list of all conformance classes specified in a standard that the + server conforms to. + operationId: getConformanceDeclaration + responses: + '200': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/ConformanceDeclaration' + '4XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/BadRequest' + '406': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotAcceptable' + '5XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/ServerError' + '/collections': + get: + tags: + - Collections + summary: the record collections + description: |- + Fetch list of catalogs offered by this API + operationId: getCollections + parameters: + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/bbox' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/datetime' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/limit' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/q' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/type' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/externalIds' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/ids' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/sortby' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/language' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/profile' + responses: + '200': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/Catalogs' + '4XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/BadRequest' + '406': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotAcceptable' + '5XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/ServerError' + '/collections/{catalogId}': + get: + tags: + - Collection + summary: |- + describe the record collection with id `catalogId` + description: |- + Fetch a detailed description of a catalog or collection of records + with id `catalogId`. + operationId: describeCollection + parameters: + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/catalogId' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/language' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/profile' + responses: + '200': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/Catalog' + '4XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/BadRequest' + '404': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotFound' + '406': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotAcceptable' + '5XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/ServerError' + '/collections/{catalogId}/sortables': + get: + tags: + - Sortables + summary: |- + get the list of sortable properties + description: |- + Fetch the list of properties which can be used to sort the getRecords + response. + operationId: getSortables + parameters: + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/catalogId' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/language' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/profile' + responses: + '200': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/Sortables' + '4XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/BadRequest' + '404': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotFound' + '406': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotAcceptable' + '5XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/ServerError' + '/collections/{catalogId}/items': + get: + tags: + - Records + summary: fetch records + description: |- + Fetch records from the record collection with id `catalogId`. + + Every record in a dataset belongs to a collection. A dataset may + consist of multiple record collections. A record collection is often a + collection of records of a similar type, based on a common schema. + + Use content negotiation to request HTML or GeoJSON. + operationId: getRecords + parameters: + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/catalogId' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/bbox' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/datetime' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/limit' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/q' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/type' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/externalIds' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/ids' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/sortby' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/language' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/profile' + responses: + '200': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/Records' + '4XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/BadRequest' + '404': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotFound' + '406': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotAcceptable' + '5XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/ServerError' + '/collections/{catalogId}/items/{recordId}': + get: + tags: + - Record + summary: fetch a single record + description: |- + Fetch the record with id `recordId` from the record collection + with id `catalogId`. + + Use content negotiation to request HTML or GeoJSON. + operationId: getRecord + parameters: + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/catalogId' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/recordId' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/language' + - $ref: 'ogcapi-records-1-building-blocks.yaml#/components/parameters/profile' + responses: + '200': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/Record' + '4XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/BadRequest' + '404': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotFound' + '406': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/NotAcceptable' + '5XX': + $ref: 'ogcapi-records-1-building-blocks.yaml#/components/responses/ServerError' +components: + securitySchemes: + openIdConnect: + type: "openIdConnect" + openIdConnectUrl: "https://accounts.google.com/.well-known/openid-configuration" +security: + - openIdConnect: [] diff --git a/records/src/main/resources/schema/records/ogcapi-records-1-example-ref-schema-repo.yaml b/records/src/main/resources/schema/records/ogcapi-records-1-example-ref-schema-repo.yaml new file mode 100644 index 00000000..12f9b9b7 --- /dev/null +++ b/records/src/main/resources/schema/records/ogcapi-records-1-example-ref-schema-repo.yaml @@ -0,0 +1,242 @@ +openapi: 3.0.3 +info: + title: "OGC API - Records - Part 1: Core" + version: '1.0.0' + description: |- + This is a sample OpenAPI definition that conforms to the conformance + classes of the "OGC API - Records - Part 1: Core" standard: + + * Searchable Catalog + * Searchable Catalog - Sorting + * Local Resources Catalog + * Local Resources Catalog - Query Parameters + * Local Resources Catalog - Sorting + * OpenAPI 3.0 + + This example is a generic definition that uses path parameters to + describe all catalogs and records. The generic OpenAPI definition + does not provide any details on the catalogs or the record content. + This information is only available by accessing the catalog and its + records. + contact: + name: CubeWerx Inc. + email: pvretano@cubewerx.com + url: 'https://www.cubewerx.com' + license: + name: CC-BY 4.0 license + url: 'https://creativecommons.org/licenses/by/4.0/' +servers: + - url: 'https://example.org/data' + description: Production server + - url: 'https://example.org/data-dev' + description: Development server +tags: + - name: Capabilities + description: |- + essential characteristics of this API + - name: Conformance + description: |- + list of conformance classes implemented by this API + - name: Collections + description: |- + list of catalogs offered by this API + - name: Collection + description: |- + description of a catalog offered by this API + - name: Sortables + description: |- + list of record properties by which responses can be sorted + - name: Records + description: |- + access to records + - name: Record + description: |- + access to a single record +paths: + '/': + get: + tags: + - Capabilities + summary: landing page + description: |- + The landing page provides links to the API definition, the conformance + statements and to the record collections in this dataset. + operationId: getLandingPage + parameters: + - $ref: 'parameters/language.yaml' + - $ref: 'parameters/profile.yaml' + responses: + '200': + $ref: 'responses/LandingPage.yaml' + '4XX': + $ref: 'responses/BadRequest.yaml' + '406': + $ref: 'responses/NotAcceptable.yaml' + '5XX': + $ref: 'responses/ServerError.yaml' + '/conformance': + get: + tags: + - Conformance + summary: information about specifications that this API conforms to + description: |- + A list of all conformance classes specified in a standard that the + server conforms to. + operationId: getConformanceDeclaration + responses: + '200': + $ref: 'responses/ConformanceDeclaration.yaml' + '4XX': + $ref: 'responses/BadRequest.yaml' + '406': + $ref: 'responses/NotAcceptable.yaml' + '5XX': + $ref: 'responses/ServerError.yaml' + '/collections': + get: + tags: + - Collections + summary: the record collections + description: |- + Fetch list of catalogs offered by this API + operationId: getCollections + parameters: + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/bbox.yaml' + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/datetime.yaml' + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/limit.yaml' + - $ref: 'parameters/q.yaml' + - $ref: 'parameters/type.yaml' + - $ref: 'parameters/externalIds.yaml' + - $ref: 'parameters/ids.yaml' + - $ref: 'parameters/sortby.yaml' + - $ref: 'parameters/language.yaml' + - $ref: 'parameters/profile.yaml' + responses: + '200': + $ref: 'responses/Catalogs.yaml' + '4XX': + $ref: 'responses/BadRequest.yaml' + '406': + $ref: 'responses/NotAcceptable.yaml' + '500': + $ref: 'responses/ServerError.yaml' + '/collections/{catalogId}': + get: + tags: + - Collection + summary: |- + describe the record collection with id `catalogId` + description: |- + Fetch a detailed description of the catalog with id `catalogId`. + operationId: describeCollection + parameters: + - $ref: 'parameters/catalogId.yaml' + - $ref: 'parameters/language.yaml' + - $ref: 'parameters/profile.yaml' + responses: + '200': + $ref: 'responses/Catalog.yaml' + '4XX': + $ref: 'responses/BadRequest.yaml' + '404': + $ref: 'responses/NotFound.yaml' + '406': + $ref: 'responses/NotAcceptable.yaml' + '5XX': + $ref: 'responses/ServerError.yaml' + '/collections/{catalogId}/sortables': + get: + tags: + - Sortables + summary: |- + get the list of sortable properties + description: |- + Fetch the list of properties which can be used to sort the getRecords + response. + operationId: getSortables + parameters: + - $ref: 'parameters/catalogId.yaml' + - $ref: 'parameters/language.yaml' + - $ref: 'parameters/profile.yaml' + responses: + '200': + $ref: 'responses/Sortables.yaml' + '4XX': + $ref: 'responses/BadRequest.yaml' + '404': + $ref: 'responses/NotFound.yaml' + '406': + $ref: 'responses/NotAcceptable.yaml' + '5XX': + $ref: 'responses/ServerError.yaml' + '/collections/{catalogId}/items': + get: + tags: + - Records + summary: fetch records + description: |- + Fetch records of the record collection with id `catalogId`. + + Every record in a dataset belongs to a collection. A dataset may + consist of multiple record collections. A record collection is often a + collection of records of a similar type, based on a common schema. + + Use content negotiation to request HTML or GeoJSON. + operationId: getRecords + parameters: + - $ref: 'parameters/catalogId.yaml' + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/bbox.yaml' + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/datetime.yaml' + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/parameters/limit.yaml' + - $ref: 'parameters/q.yaml' + - $ref: 'parameters/type.yaml' + - $ref: 'parameters/externalIds.yaml' + - $ref: 'parameters/ids.yaml' + - $ref: 'parameters/sortby.yaml' + - $ref: 'parameters/language.yaml' + - $ref: 'parameters/profile.yaml' + responses: + '200': + $ref: 'responses/Records.yaml' + '4XX': + $ref: 'responses/BadRequest.yaml' + '404': + $ref: 'responses/NotFound.yaml' + '406': + $ref: 'responses/NotAcceptable.yaml' + '5XX': + $ref: 'responses/ServerError.yaml' + '/collections/{catalogId}/items/{recordId}': + get: + tags: + - Record + summary: fetch a single record + description: |- + Fetch the record with id `recordId` in the record collection + with id `catalogId`. + + Use content negotiation to request HTML or GeoJSON. + operationId: getRecord + parameters: + - $ref: 'parameters/catalogId.yaml' + - $ref: 'parameters/recordId.yaml' + - $ref: 'parameters/language.yaml' + - $ref: 'parameters/profile.yaml' + responses: + '200': + $ref: 'responses/Record.yaml' + '4XX': + $ref: 'responses/BadRequest.yaml' + '404': + $ref: 'responses/NotFound.yaml' + '406': + $ref: 'responses/NotAcceptable.yaml' + '5XX': + $ref: 'responses/ServerError.yaml' +components: + securitySchemes: + openIdConnect: + type: "openIdConnect" + openIdConnectUrl: "https://accounts.google.com/.well-known/openid-configuration" +security: + - openIdConnect: [] diff --git a/records/src/main/resources/schema/records/ogcapi-records-1.yaml b/records/src/main/resources/schema/records/ogcapi-records-1.yaml deleted file mode 100644 index bf084ca7..00000000 --- a/records/src/main/resources/schema/records/ogcapi-records-1.yaml +++ /dev/null @@ -1,805 +0,0 @@ ---- -openapi: 3.0.3 -info: - title: "Building Blocks specified in OGC API - Records - Part 1: Core" - description: |- - Common components used in the - [OGC standard "OGC API - Records - Part 1: Core"] - (https://docs.ogc.org/DRAFTS/20-004.html). - - OGC API - Records - Part 1: Core 1.0 is an OGC Standard. - Copyright (c) 2020 Open Geospatial Consortium. - To obtain additional rights of use, visit - https://www.ogc.org/legal/ . - - This document is also available on - [OGC](http://schemas.opengis.net/ogcapi/records/part1/1.0/openapi/ogcapi-records-1.yaml). - version: '1.0.0' - contact: - name: Panagiotis (Peter) A. Vretanos - email: pvretano@pvretano.com - license: - name: OGC License - url: 'https://www.ogc.org/legal/' -components: - parameters: - bbox: - name: bbox - in: query - description: |- - Only records 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): - - * 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) - - The coordinate reference system of the values is WGS 84 long/lat - (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 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 record 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 - oneOf: - - minItems: 4 - maxItems: 4 - - minItems: 6 - maxItems: 6 - items: - type: number - style: form - explode: false - datetime: - name: datetime - in: query - description: |- - Either a date-time or an interval, open or closed. Date and time - expressions adhere to RFC 3339. Open intervals are expressed using - double-dots. - - Examples: - - * A date-time: "2018-02-12T23:20:50Z" - * A closed interval: "2018-02-12T00:00:00Z/2018-03-18T12:31:12Z" - * Open intervals: "2018-02-12T00:00:00Z/.." or "../2018-03-18T12:31:12Z" - - Only records that have a temporal property that intersects the value of - `datetime` are selected. It is left to 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 - style: form - explode: false - limit: - name: limit - in: query - description: |- - The optional limit parameter limits the number of items that are - presented in the response document. Only items are counted that - are on the first level of the collection in the response document. - Nested objects contained within the explicitly requested items - shall not be counted. - required: false - schema: - type: integer - minimum: 1 - maximum: 10000 - default: 10 - style: form - explode: false - q: - name: q - in: query - description: |- - The optional q parameter supports keyword searching. Only records - whose text fields contain one or more of the specified search terms - are selected. The specific set of text keys/fields/properties of a - record to which the q operator is applied is up to the description - of the server. Implementations should, however, apply the q - operator to the title, description and keywords keys/fields/properties. - required: false - schema: - type: array - items: - type: string - explode: false - style: form - type: - name: type - in: query - description: |- - The optional type parameter supports searching by resource type. Only - records whose type, as indicated by the value of the type core - queryable, is equal to one of the listed values shall be selected. - required: false - schema: - type: array - items: - type: string - explode: false - style: form - externalId: - name: externalId - in: query - description: |- - The optional externalId parameter supports searching by an identifier - that was not assigned by the catalogue (i.e. an external identifier). - Only records with an external identifer, as indicated by the value of - the externalId core queryable array, that is equal to one of the listed - values shall be selected. - required: false - schema: - type: array - items: - type: string - explode: false - style: form - sortby: - name: sortby - in: query - required: false - schema: - type: array - minItems: 1 - items: - type: string - pattern: '[+|-][A-Za-z_][A-Za-z_0-9]*' - style: form - explode: false - collectionId: - name: collectionId - in: path - description: local identifier of a collection - required: true - schema: - type: string - recordId: - name: recordId - in: path - description: local identifier of a record - required: true - schema: - type: string - schemas: - collectionInfo: - type: object - required: - - id - - links - properties: - id: - description: identifier of the collection used, for example, in URIs - type: string - title: - description: human readable title of the collection - type: string - description: - description: a description of the records in the collection - type: string - links: - type: array - items: - $ref: "#/components/schemas/link" - extent: - $ref: "#/components/schemas/extent" - itemType: - description: |- - indicator about the type of the items in the collection (the - default value is 'record' for OGC API - Records). - type: string - default: record - crs: - description: |- - the list of coordinate reference systems supported by the service - type: array - items: - type: string - default: - - http://www.opengis.net/def/crs/OGC/1.3/CRS84 - collections: - type: object - required: - - links - - collections - properties: - links: - type: array - items: - $ref: "#/components/schemas/link" - collections: - type: array - items: - $ref: "#/components/schemas/collectionInfo" - confClasses: - type: object - required: - - conformsTo - properties: - conformsTo: - type: array - items: - type: string - exception: - type: object - description: |- - information about the exception; an error code plus an optional - description. - required: - - code - properties: - code: - type: string - description: - type: string - extent: - type: object - description: |- - The extent of the records 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. - properties: - spatial: - description: |- - The spatial extent of the records 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. If multiple - areas are provided, the union of the bounding boxes describes - the spatial extent. - 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) - - The coordinate reference system of the values is WGS 84 - long/lat (http://www.opengis.net/def/crs/OGC/1.3/CRS84) - unless a different coordinate reference system is specified - in `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 record 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 this is the only supported - coordinate reference system. 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' - default: 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' - temporal: - description: |- - The temporal extent of the records in the collection. - type: object - properties: - interval: - description: |- - One or more time intervals that describe the temporal extent of - the dataset. The value `null` is supported and indicates an - open time interval. In the Core only a single time interval is - supported. Extensions may support multiple intervals. If - multiple intervals are provided, the union of the intervals - describes the temporal extent. - 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. - 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' - featureCollectionGeoJSON: - type: object - required: - - type - - features - properties: - type: - type: string - enum: - - FeatureCollection - features: - type: array - items: - $ref: "#/components/schemas/recordGeoJSON" - links: - type: array - items: - $ref: "#/components/schemas/link" - timeStamp: - $ref: "#/components/schemas/timeStamp" - numberMatched: - $ref: "#/components/schemas/numberMatched" - numberReturned: - $ref: "#/components/schemas/numberReturned" - recordGeoJSON: - $ref: "schemas/recordGeoJSON.yaml" - 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" - landingPage: - type: object - required: - - links - properties: - title: - type: string - description: - type: string - links: - type: array - items: - $ref: "#/components/schemas/link" - 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 - link: - type: object - required: - - href - properties: - href: - type: string - rel: - type: string - type: - type: string - hreflang: - type: string - title: - type: string - length: - type: integer - templated: - type: boolean - variables: - type: object - created: - type: string - format: date-time - updated: - type: string - format: date-time - 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 - multipointGeoJSON: - type: object - required: - - type - - coordinates - properties: - type: - type: string - enum: - - MultiPoint - coordinates: - type: array - 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 - numberMatched: - description: |- - The number of records of the record type that match the selection - parameters like `bbox`. - type: integer - minimum: 0 - numberReturned: - description: |- - The number of records in the record collection. - - A server may omit this information in a response, if the information - about the number of records is not known or difficult to compute. - - If the value is provided, the value shall be identical to the number - of items in the "records" array. - type: integer - minimum: 0 - pointGeoJSON: - type: object - required: - - type - - coordinates - properties: - type: - type: string - enum: - - Point - coordinates: - 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 - sortable: - type: object - required: - - id - properties: - id: - description: the identifier/name for the sortable - type: string - title: - description: a human readable title for the sortable - type: string - description: - description: a human-readable narrative describing the sortable - type: string - language: - description: the language used for the title and description - type: string - links: - type: array - items: - $ref: "#/components/schemas/link" - timeStamp: - description: |- - This property indicates the time and date when the response was - generated. - type: string - format: date-time - example: '2017-08-17T08:05:32Z' - responses: - LandingPage: - description: |- - The landing page provides links to the API definition - (link relations `service-desc` and `service-doc`), - the Conformance declaration (path `/conformance`, - link relation `conformance`), and the Record - Collections (path `/collections`, link relation - `data`). - content: - application/json: - schema: - $ref: '#/components/schemas/landingPage' - text/html: - schema: - type: string - ConformanceDeclaration: - description: |- - The URIs of all conformance classes supported by the server. - - To support "generic" clients that want to access multiple - OGC API - Records implementations - and not "just" a specific - API / server, the server declares the conformance - classes it implements and conforms to. - content: - application/json: - schema: - $ref: '#/components/schemas/confClasses' - text/html: - schema: - type: string - Collections: - description: |- - The record collections shared by this API. - - Catalogues are organized as one or more record collections. This - resource provides information about and access to these collections. - - The response contains the list of record collections (itemType=record). - For each record collection, a link to the items in the collection - (path `/collections/{collectionId}/items`, link relation `items`) as - well as key information about the collection. This information - includes... - - * A local identifier for the collection that is unique for the + - catalogue; - * A list of coordinate reference systems (CRS) in which geometries + - 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; - * An optional indicator about the type of the items in the collection + - (the default value, if the indicator is not provided, is 'record'). - content: - application/json: - schema: - $ref: '#/components/schemas/collections' - text/html: - schema: - type: string - Collection: - description: |- - Information about the record collection with id `collectionId`. - - The response contains a link to the items in the collection - (path `/collections/{collectionId}/items`, link relation `items`) - as well as key information about the collection. This information - includes: - - * A local identifier for the collection that is unique for the + - catalogue; - * A list of coordinate reference systems (CRS) in which geometries + - 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; - * An optional indicator about the type of the items in the collection + - (the default value, if the indicator is not provided, is 'record'). - content: - application/json: - schema: - $ref: '#/components/schemas/collectionInfo' - text/html: - schema: - type: string - Records: - description: |- - The response is a document consisting of records in the collection. - The records included in the response are determined by the server - based on the query parameters of the request. To support access to - larger collections without overloading the client, the API supports - paged access with links to the next page, if more records are selected - that the page size. - - The `bbox` and `datetime` parameter can be used to select only a - subset of the records in the collection (the records that are in the - bounding box or time interval). The `bbox` parameter matches all records - in the collection that are not associated with a location, too. The - `datetime` parameter matches all records in the collection that are - not associated with a time stamp or interval, too. - - The `limit` parameter may be used to control the subset of the - selected records that should be returned in the response, the page size. - Each page may include information about the number of selected and - returned records (`numberMatched` and `numberReturned`) as well as - links to support paging (link relation `next`). - - The XML representation of the response document is an ATOM feed. - content: - application/geo+json: - schema: - $ref: '#/components/schemas/featureCollectionGeoJSON' - text/html: - schema: - type: string - application/atom+xml: - schema: - type: string - Record: - description: |- - Fetch the record with id `recordId` in the record collection - with id `collectionId`. The XML representation of a record - is an ATOM entry. - content: - application/geo+json: - schema: - $ref: '#/components/schemas/recordGeoJSON' - text/html: - schema: - type: string - application/atom+xml: - schema: - type: string - Sortables: - description: |- - Fetch the list of sortable properties. - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/sortable" - OpenSearchDescriptionDocument: - description: |- - description document for OpenSearch clients - content: - application/opensearchdescription+xml: - schema: - type: string - InvalidParameter: - description: |- - A query parameter has an invalid value. - content: - application/json: - schema: - $ref: '#/components/schemas/exception' - text/html: - schema: - type: string - NotFound: - description: |- - The requested resource does not exist on the server. For example, - a path parameter had an incorrect value. - 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. - ServerError: - description: |- - A server error occurred. - content: - application/json: - schema: - $ref: '#/components/schemas/exception' - text/html: - schema: - type: string diff --git a/records/src/main/resources/schema/records/parameters/catalogId.yaml b/records/src/main/resources/schema/records/parameters/catalogId.yaml new file mode 100644 index 00000000..1549eab7 --- /dev/null +++ b/records/src/main/resources/schema/records/parameters/catalogId.yaml @@ -0,0 +1,7 @@ +--- +name: catalogId +in: path +description: local identifier of a catalog +required: true +schema: + type: string diff --git a/records/src/main/resources/schema/records/parameters/externalIds.yaml b/records/src/main/resources/schema/records/parameters/externalIds.yaml new file mode 100644 index 00000000..7a763be6 --- /dev/null +++ b/records/src/main/resources/schema/records/parameters/externalIds.yaml @@ -0,0 +1,16 @@ +--- +name: externalIds +in: query +description: |- + The optional externalIds parameter allows a specific list of records, + identified by their external identifiers, to be fetched from a catalog. + Only records where one of their associated external identifiers equals + one of the values listed for this parameter shall appear in the response. +required: false +schema: + type: array + items: + type: string + pattern: ([^:]+:)?[^:]+ +explode: false +style: form diff --git a/records/src/main/resources/schema/records/parameters/ids.yaml b/records/src/main/resources/schema/records/parameters/ids.yaml new file mode 100644 index 00000000..9dc4f30e --- /dev/null +++ b/records/src/main/resources/schema/records/parameters/ids.yaml @@ -0,0 +1,15 @@ +--- +name: ids +in: query +description: |- + The optional ids parameter allows a specific list of records, identified + by their identifiers, to be fetched from a catalog. Only records whose + identifier matches one of the values listed for this parameter shall appear + in the response. +required: false +schema: + type: array + items: + type: string +explode: false +style: form diff --git a/records/src/main/resources/schema/records/parameters/language.yaml b/records/src/main/resources/schema/records/parameters/language.yaml new file mode 100644 index 00000000..c233cd89 --- /dev/null +++ b/records/src/main/resources/schema/records/parameters/language.yaml @@ -0,0 +1,20 @@ +--- +name: language +in: query +description: |- + Optional way to query for specific languages for environments that can't + send HTTP headers in a simple way (e.g. a Web Browser). + The parameter accepts a comma-separated list of language identifiers, + optionally with priority per language. + This parameter value follows the specification of the `Accept-Language` + HTTP header. +schema: + type: array + items: + type: string + description: + The language tag as per RFC 5646, with optional priority parameter + `q` (0 - 1). + pattern: "^((?:(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((?:([A-Za-z]{2,3}(-(?:[A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-(?:[A-Za-z]{4}))?(-(?:[A-Za-z]{2}|[0-9]{3}))?(-(?:[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-(?:[0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(?:x(-[A-Za-z0-9]{1,8})+))?)|(?:x(-[A-Za-z0-9]{1,8})+))(?:;q=(?:1|1\\.0+|0|0\\.[0-9]+))?$" +explode: false +style: form diff --git a/records/src/main/resources/schema/records/parameters/profile.yaml b/records/src/main/resources/schema/records/parameters/profile.yaml new file mode 100644 index 00000000..924ec2f0 --- /dev/null +++ b/records/src/main/resources/schema/records/parameters/profile.yaml @@ -0,0 +1,15 @@ +--- +name: profile +in: query +description: |- + One or more identifiers that provide information about additional + semantics (constraints, conventions, extensions), in addition to + those defined by the media type, that are associated with the + target resource. +required: false +schema: + type: array + items: + type: string +explode: false +style: form diff --git a/records/src/main/resources/schema/records/parameters/q.yaml b/records/src/main/resources/schema/records/parameters/q.yaml new file mode 100644 index 00000000..6f15cd82 --- /dev/null +++ b/records/src/main/resources/schema/records/parameters/q.yaml @@ -0,0 +1,17 @@ +--- +name: q +in: query +description: |- + The optional q parameter supports keyword searching. Only records + whose text fields contain one or more of the specified search terms + are selected. The specific set of text keys/fields/properties of a + record to which the q operator is applied is up to the discretion + of the server. Implementations should, however, apply the q + operator to the title, description and keywords keys/fields/properties. +required: false +schema: + type: array + items: + type: string +explode: false +style: form diff --git a/records/src/main/resources/schema/records/parameters/recordId.yaml b/records/src/main/resources/schema/records/parameters/recordId.yaml new file mode 100644 index 00000000..b197319e --- /dev/null +++ b/records/src/main/resources/schema/records/parameters/recordId.yaml @@ -0,0 +1,7 @@ +--- +name: recordId +in: path +description: local identifier of a record +required: true +schema: + type: string diff --git a/records/src/main/resources/schema/records/parameters/sortby.yaml b/records/src/main/resources/schema/records/parameters/sortby.yaml new file mode 100644 index 00000000..ee64e96c --- /dev/null +++ b/records/src/main/resources/schema/records/parameters/sortby.yaml @@ -0,0 +1,19 @@ +--- +name: sortby +in: query +description: |- + Specifies a comma-separated list of property names by which the response shall + be sorted. If the property name is preceded by a plus (+) sign it indicates + an ascending sort for that property. If the property name is preceded by a + minus (-) sign it indicates a descending sort for that property. If the + property is not preceded by a plus or minus, then the default sort order + implied is ascending (+). +required: false +schema: + type: array + minItems: 1 + items: + type: string + pattern: '[+|-]?[A-Za-z_].*' +explode: false +style: form diff --git a/records/src/main/resources/schema/records/parameters/type.yaml b/records/src/main/resources/schema/records/parameters/type.yaml new file mode 100644 index 00000000..4f405e86 --- /dev/null +++ b/records/src/main/resources/schema/records/parameters/type.yaml @@ -0,0 +1,17 @@ +--- +name: type +in: query +description: |- + The optional type parameter allows a specific list of records, identified + by their resource type, to be fetched from a catalog. Only records whose + resource type matches one of the values listed for this parameter shall + appear in the response. +required: false +schema: + type: array + items: + type: string +explode: false +style: form + + diff --git a/records/src/main/resources/schema/records/responses/BadRequest.yaml b/records/src/main/resources/schema/records/responses/BadRequest.yaml new file mode 100644 index 00000000..e4a63a8f --- /dev/null +++ b/records/src/main/resources/schema/records/responses/BadRequest.yaml @@ -0,0 +1,10 @@ +--- +description: |- + A client error occurred. +content: + application/json: + schema: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/Catalog.yaml b/records/src/main/resources/schema/records/responses/Catalog.yaml new file mode 100644 index 00000000..bffc815c --- /dev/null +++ b/records/src/main/resources/schema/records/responses/Catalog.yaml @@ -0,0 +1,28 @@ +--- +description: |- + Information about the record collection with id `collectionId`. + + The response contains a link to the items in the collection + (path `/collections/{collectionId}/items`, link relation `items`) + as well as key information about the collection. This information + includes: + + * A local identifier for the collection that is unique for the + + catalog; + * A list of coordinate reference systems (CRS) in which geometries + + 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; + * An optional indicator about the type of the items in the collection + + (the default value, if the indicator is not provided, is 'record'). +content: + application/json: + schema: + $ref: '../schemas/catalog.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/Catalogs.yaml b/records/src/main/resources/schema/records/responses/Catalogs.yaml new file mode 100644 index 00000000..9da255b2 --- /dev/null +++ b/records/src/main/resources/schema/records/responses/Catalogs.yaml @@ -0,0 +1,10 @@ +--- +description: |- + Information about the list of catalogs offered by this service. +content: + application/json: + schema: + $ref: '../schemas/catalogs.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/ConformanceDeclaration.yaml b/records/src/main/resources/schema/records/responses/ConformanceDeclaration.yaml new file mode 100644 index 00000000..0c427529 --- /dev/null +++ b/records/src/main/resources/schema/records/responses/ConformanceDeclaration.yaml @@ -0,0 +1,10 @@ +--- +description: |- + The URIs of all conformance classes supported by the server. +content: + application/json: + schema: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/confClasses.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/InvalidParameter.yaml b/records/src/main/resources/schema/records/responses/InvalidParameter.yaml new file mode 100644 index 00000000..cd552e23 --- /dev/null +++ b/records/src/main/resources/schema/records/responses/InvalidParameter.yaml @@ -0,0 +1,10 @@ +--- +description: |- + A query parameter has an invalid value. +content: + application/json: + schema: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/LandingPage.yaml b/records/src/main/resources/schema/records/responses/LandingPage.yaml new file mode 100644 index 00000000..716c3443 --- /dev/null +++ b/records/src/main/resources/schema/records/responses/LandingPage.yaml @@ -0,0 +1,13 @@ +--- +description: |- + The landing page provides links to the API definition (link relations + `service-desc` and `service-doc`), the Conformance declaration (path + `/conformance`, link relation `conformance`), and the Record Collections + (path `/collections`, link relation `data`). +content: + application/json: + schema: + $ref: '../schemas/landingPage.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/NotAcceptable.yaml b/records/src/main/resources/schema/records/responses/NotAcceptable.yaml new file mode 100644 index 00000000..887e9382 --- /dev/null +++ b/records/src/main/resources/schema/records/responses/NotAcceptable.yaml @@ -0,0 +1,12 @@ +--- +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: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/NotFound.yaml b/records/src/main/resources/schema/records/responses/NotFound.yaml new file mode 100644 index 00000000..6082df46 --- /dev/null +++ b/records/src/main/resources/schema/records/responses/NotFound.yaml @@ -0,0 +1,11 @@ +--- +description: |- + The requested resource does not exist on the server. For example, + a path parameter had an incorrect value. +content: + application/json: + schema: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/Record.yaml b/records/src/main/resources/schema/records/responses/Record.yaml new file mode 100644 index 00000000..69b6e5f4 --- /dev/null +++ b/records/src/main/resources/schema/records/responses/Record.yaml @@ -0,0 +1,11 @@ +--- +description: |- + Fetch the record with id `recordId` in the record collection + with id `collectionId` +content: + application/geo+json: + schema: + $ref: '../schemas/recordGeoJSON.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/Records.yaml b/records/src/main/resources/schema/records/responses/Records.yaml new file mode 100644 index 00000000..4a1b280b --- /dev/null +++ b/records/src/main/resources/schema/records/responses/Records.yaml @@ -0,0 +1,28 @@ +--- +description: |- + The response is a document consisting of records in the collection. + The records included in the response are determined by the server + based on the query parameters of the request. To support access to + larger collections without overloading the client, the API supports + paged access with links to the next page, if more records are selected + that the page size. + + The `bbox` and `datetime` parameter can be used to select only a + subset of the records in the collection (the records that are in the + bounding box or time interval). The `bbox` parameter matches all records + in the collection that are not associated with a location, too. The + `datetime` parameter matches all records in the collection that are + not associated with a time stamp or interval, too. + + The `limit` parameter may be used to control the subset of the + selected records that should be returned in the response, the page size. + Each page may include information about the number of selected and + returned records (`numberMatched` and `numberReturned`) as well as + links to support paging (link relation `next`). +content: + application/geo+json: + schema: + $ref: '../schemas/recordCollectionGeoJSON.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/ServerError.yaml b/records/src/main/resources/schema/records/responses/ServerError.yaml new file mode 100644 index 00000000..83c20c33 --- /dev/null +++ b/records/src/main/resources/schema/records/responses/ServerError.yaml @@ -0,0 +1,10 @@ +--- +description: |- + A server error occurred. +content: + application/json: + schema: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/responses/Sortables.yaml b/records/src/main/resources/schema/records/responses/Sortables.yaml new file mode 100644 index 00000000..78ad86ac --- /dev/null +++ b/records/src/main/resources/schema/records/responses/Sortables.yaml @@ -0,0 +1,12 @@ +--- +description: |- + A list of properties by which the server response may be sorted. +content: + application/json: + schema: + type: object + description: + A JSON Schema document that defines all the sortables. + text/html: + schema: + type: string diff --git a/records/src/main/resources/schema/records/schemas/catalog.yaml b/records/src/main/resources/schema/records/schemas/catalog.yaml new file mode 100644 index 00000000..6b337eec --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/catalog.yaml @@ -0,0 +1,29 @@ +--- +allOf: + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/collection.yaml' + - $ref: 'catalogCommonProperties.yaml' + - type: object + properties: + itemType: + description: |- + If this catalog is a homogenous collection + of records then itemType is a string of fixed + value of record. + If this catalog is a homogenous collection + of other catalogs then itemType is a string of + fixed value of catalog. + If this catalog is a heterogenous collection + of records and catalogs then itemType is a array + indicated that item types of the members of this + collections (i.e. record and/or catalog). + oneOf: + - type: string + enum: + - record + - catalog + - type: array + items: + type: string + enum: + - record + - catalog diff --git a/records/src/main/resources/schema/records/schemas/catalogCommonProperties.yaml b/records/src/main/resources/schema/records/schemas/catalogCommonProperties.yaml new file mode 100644 index 00000000..6a7d617d --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/catalogCommonProperties.yaml @@ -0,0 +1,60 @@ +--- +allOf: + - $ref: 'recordCommonProperties.yaml' + - type: object + required: + - type + properties: + type: + description: |- + Fixed to "Collection" for collections of records and/or subordinate + catalogs. + type: string + enum: + - Collection + conformsTo: + type: array + description: |- + The extensions/conformance classes used in this collection. + items: + type: string + recordsArrayName: + description: |- + If records are encoded in-line within the catalog object, + this member advertises the name of the array member that + contains the catalog records. By default the name of the + records array is "records". However, the name of this + array member may be different. A local resources catalog + is an example of a circumstance where the records array + member may be named something other than "records". For + example, in the case of a local resource catalog at the + /collections endpoint, the name of the records array is + "collections". + type: string + default: records + records: + type: array + description: |- + An array of records that are part of this catalog that + are encoded in-line within the catalog object. + The items schema is intentionally general (i.e. object) + to accomodate records that have been extended beyond + the core record schema. + items: + type: object + links: + type: array + items: + $ref: 'link.yaml' + linkTemplates: + type: array + items: + $ref: 'linkTemplate.yaml' + defaultSortOrder: + $ref: 'defaultSortOrder.yaml' + schemes: + type: array + description: |- + A list of schemes used in this context. + items: + $ref: 'scheme.yaml' diff --git a/records/src/main/resources/schema/records/schemas/catalogs.yaml b/records/src/main/resources/schema/records/schemas/catalogs.yaml new file mode 100644 index 00000000..bfa1dd94 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/catalogs.yaml @@ -0,0 +1,12 @@ +allOf: + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/collections.yaml' + - type: object + properties: + collections: + type: array + items: + $ref: 'catalog.yaml' + linkTemplates: + type: array + items: + $ref: 'linkTemplate.yaml' diff --git a/records/src/main/resources/schema/records/schemas/collection.yaml b/records/src/main/resources/schema/records/schemas/collection.yaml new file mode 100644 index 00000000..e0fe15e5 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/collection.yaml @@ -0,0 +1,12 @@ +--- +allOf: + - $ref: 'catalog.yaml' + - type: object + properties: + itemType: + description: |- + For a collection of records, the itemType is + fixed to "record". + type: string + enum: + - record diff --git a/records/src/main/resources/schema/records/schemas/contact.yaml b/records/src/main/resources/schema/records/schemas/contact.yaml new file mode 100644 index 00000000..bf7d8c34 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/contact.yaml @@ -0,0 +1,125 @@ +--- +type: object +description: |- + Identification of, and means of communication with, person responsible + for the resource. +anyOf: + - required: + - name + - required: + - organization +properties: + identifier: + type: string + description: |- + A value uniquely identifying a contact. + name: + type: string + description: |- + The name of the responsible person. + position: + type: string + 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 + description: |- + Organization/affiliation of the contact. + logo: + description: |- + Graphic identifying a contact. The link relation should be `icon` + and the media type should be an image media type. + allOf: + - $ref: 'link.yaml' + - type: object + required: + - rel + - type + properties: + rel: + enum: + - icon + phones: + type: array + description: Telephone numbers at which contact can be made. + items: + type: object + required: + - value + properties: + value: + type: string + description: The value is the phone number itself. + pattern: "^\\+[1-9]{1}[0-9]{3,14}$" + roles: + description: + The type of phone number (e.g. home, work, fax, etc.). + $ref: 'roles.yaml' + emails: + type: array + description: Email addresses at which contact can be made. + items: + type: object + required: + - value + properties: + value: + type: string + description: The value is the email number itself. + format: email + roles: + description: + The type of email (e.g. home, work, etc.). + $ref: 'roles.yaml' + addresses: + type: array + description: Physical location at which contact can be made. + items: + type: object + properties: + deliveryPoint: + type: array + description: Address lines for the location. + items: + type: string + city: + type: string + description: City for the location. + administrativeArea: + type: string + description: State or province of the location. + postalCode: + type: string + description: ZIP or other postal code. + country: + type: string + description: |- + Country of the physical address. ISO 3166-1 is recommended. + roles: + description: |- + The type of address (e.g. office, home, etc.). + $ref: 'roles.yaml' + links: + type: array + description: On-line information about the contact. + items: + allOf: + - $ref: 'link.yaml' + - type: object + required: + - type + hoursOfService: + type: string + description: Time period when the contact can be contacted. + contactInstructions: + type: string + description: |- + Supplemental instructions on how or when to contact the + responsible party. + roles: + 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/records/src/main/resources/schema/records/schemas/defaultSortOrder.yaml b/records/src/main/resources/schema/records/schemas/defaultSortOrder.yaml new file mode 100644 index 00000000..039da486 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/defaultSortOrder.yaml @@ -0,0 +1,15 @@ +--- +type: array +items: + type: object + required: + - field + - direction + properties: + field: + type: string + direction: + type: string + enum: + - asc + - desc diff --git a/records/src/main/resources/schema/records/schemas/format.yaml b/records/src/main/resources/schema/records/schemas/format.yaml new file mode 100644 index 00000000..ec9a57f7 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/format.yaml @@ -0,0 +1,12 @@ +--- +type: object +anyOf: +- required: + - name +- required: + - mediaType +properties: + name: + type: string + mediaType: + type: string diff --git a/records/src/main/resources/schema/records/schemas/landingPage.yaml b/records/src/main/resources/schema/records/schemas/landingPage.yaml new file mode 100644 index 00000000..4114d105 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/landingPage.yaml @@ -0,0 +1,9 @@ +--- +allOf: + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/landingPage.yaml' + - type: object + properties: + linkTemplates: + type: array + items: + $ref: 'linkTemplate.yaml' diff --git a/records/src/main/resources/schema/records/schemas/language.yaml b/records/src/main/resources/schema/records/schemas/language.yaml new file mode 100644 index 00000000..937e34fe --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/language.yaml @@ -0,0 +1,36 @@ +--- +type: object +description: |- + The language used for textual values in this record. +required: + - code +properties: + code: + type: string + description: |- + The language tag as per RFC-5646. + name: + type: string + minLength: 1 + description: |- + The untranslated name of the language. + alternate: + type: string + description: |- + The name of the language in another well-understood language, + usually English. + dir: + type: string + 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/records/src/main/resources/schema/records/schemas/license.yaml b/records/src/main/resources/schema/records/schemas/license.yaml new file mode 100644 index 00000000..e980bfc2 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/license.yaml @@ -0,0 +1,18 @@ +--- +type: string +description: |- + A legal document under which the resource is made available. + If the resource is being made available under a common license + then use an SPDX license id (https://spdx.org/licenses/). + If the resource is being made available under multiple common + licenses then use an SPDX license expression v2.3 string + (https://spdx.github.io/spdx-spec/v2.3/SPDX-license-expressions/) + If the resource is being made available under one or more licenses + that haven't been assigned an SPDX identifier or one or more custom + licenses then use a string value of 'other' and include one or more + links (rel="license") in the `link` section of the record to the + file(s) that contains the text of the license(s). + There is also the case of a resource that is private or unpublished + and is thus unlicensed; in this case do not register such a resource + in the catalog in the first place since there is no point in making + such a resource discoverable. diff --git a/records/src/main/resources/schema/records/schemas/link.yaml b/records/src/main/resources/schema/records/schemas/link.yaml new file mode 100644 index 00000000..f1539883 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/link.yaml @@ -0,0 +1,10 @@ +--- +type: object +allOf: + - $ref: 'linkBase.yaml' + - type: object + required: + - href + properties: + href: + type: string diff --git a/records/src/main/resources/schema/records/schemas/linkBase.yaml b/records/src/main/resources/schema/records/schemas/linkBase.yaml new file mode 100644 index 00000000..ad23e031 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/linkBase.yaml @@ -0,0 +1,45 @@ +--- +type: object +properties: + rel: + type: string + description: The type or semantics of the relation. + type: + type: string + description: |- + A hint indicating what the media type of the + result of dereferencing the link should be. + hreflang: + type: string + description: |- + A hint indicating what the language of the + result of dereferencing the link should be. + title: + type: string + description: |- + Used to label the destination of a link + such that it can be used as a human-readable + identifier. + length: + type: integer + profile: + type: array + description: |- + One or more identifiers that provide information about additional + semantics (constraints, conventions, extensions), in addition to + those defined by the media type, that are associated with the + target resource. + items: + type: string + created: + type: string + description: |- + Date of creation of the resource pointed to + by the link. + format: date-time + updated: + type: string + description: |- + Most recent date on which the resource pointed + to by the link was changed. + format: date-time diff --git a/records/src/main/resources/schema/records/schemas/linkTemplate.yaml b/records/src/main/resources/schema/records/schemas/linkTemplate.yaml new file mode 100644 index 00000000..2b6368dc --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/linkTemplate.yaml @@ -0,0 +1,28 @@ +--- +allOf: + - $ref: 'linkBase.yaml' + - type: object + required: + - uriTemplate + properties: + uriTemplate: + type: string + description: |- + Supplies a resolvable URI to a remote resource + (or resource fragment). + varBase: + type: string + description: |- + The base URI to which the variable name can be + appended to retrieve the definition of the + variable as a JSON Schema fragment. + format: uri-reference + variables: + type: object + description: |- + This object contains one key per substitution + variable in the templated URL. Each key defines + the schema of one substitution variable using a + JSON Schema fragment and can thus include things + like the data type of the variable, enumerations, + minimum values, maximum values, etc. diff --git a/records/src/main/resources/schema/records/schemas/recordCollectionGeoJSON.yaml b/records/src/main/resources/schema/records/schemas/recordCollectionGeoJSON.yaml new file mode 100644 index 00000000..d2853117 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/recordCollectionGeoJSON.yaml @@ -0,0 +1,12 @@ +allOf: + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/featureCollectionGeoJSON.yaml' + - type: object + properties: + features: + type: array + items: + $ref: 'recordGeoJSON.yaml' + linkTemplates: + type: array + items: + $ref: 'linkTemplate.yaml' diff --git a/records/src/main/resources/schema/records/schemas/recordCommonProperties.yaml b/records/src/main/resources/schema/records/schemas/recordCommonProperties.yaml new file mode 100644 index 00000000..d1ab6602 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/recordCommonProperties.yaml @@ -0,0 +1,103 @@ +--- +type: object +properties: + created: + type: string + description: |- + The date this record was created in the server. + format: date-time + updated: + type: string + description: |- + The most recent date on which the record was changed. + format: date-time + type: + type: string + description: |- + The nature or genre of the resource. The value + should be a code, convenient for filtering + records. Where available, a link to the canonical + URI of the record type resource will be added to + the 'links' property. + title: + type: string + description: |- + A human-readable name given to the resource. + description: + type: string + description: |- + A free-text account of the resource. + keywords: + type: array + 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 + description: |- + A knowledge organization system used to classify + the resource. + minItems: 1 + items: + $ref: 'theme.yaml' + language: + $ref: 'language.yaml' + languages: + type: array + description: |- + This list of languages in which this record is + available. + items: + $ref: 'language.yaml' + resourceLanguages: + type: array + description: |- + The list of languages in which the resource + described by this record is available. + items: + $ref: 'language.yaml' + externalIds: + type: array + description: |- + An identifier for the resource assigned by an + external (to the catalog) entity. + items: + type: object + properties: + scheme: + type: string + description: |- + A reference to an authority or identifier + for a knowledge organization system from + which the external identifier was obtained. + It is recommended that the identifier be a + resolvable URI. + value: + type: string + description: The value of the identifier. + required: + - value + formats: + type: array + description: |- + A list of available distributions of the resource. + items: + $ref: 'format.yaml' + contacts: + type: array + description: |- + A list of contacts qualified by their role(s) in + association to the record or the resource described + by the record. + items: + $ref: 'contact.yaml' + license: + $ref: 'license.yaml' + rights: + type: string + description: |- + A statement that concerns all rights not addressed + by the license such as a copyright statement. diff --git a/records/src/main/resources/schema/records/schemas/recordGeoJSON.yaml b/records/src/main/resources/schema/records/schemas/recordGeoJSON.yaml new file mode 100644 index 00000000..e9e4fcb7 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/recordGeoJSON.yaml @@ -0,0 +1,49 @@ +--- +type: object +required: + - id + - type + - geometry + - properties +properties: + id: + oneOf: + - type: string + - type: integer + description: |- + A unique identifier of the catalog record. + type: + type: string + enum: + - Feature + time: + oneOf: + - type: object + nullable: true + - $ref: 'time.yaml' + geometry: + oneOf: + - type: object + nullable: true + - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/geometryGeoJSON.yaml' + conformsTo: + type: array + description: |- + The extensions/conformance classes used in this record. + items: + type: string + properties: + oneOf: + - type: object + nullable: true + - allOf: + - type: object + - $ref: 'recordCommonProperties.yaml' + links: + type: array + items: + $ref: 'link.yaml' + linkTemplates: + type: array + items: + $ref: 'linkTemplate.yaml' diff --git a/records/src/main/resources/schema/records/schemas/recordJSON.yaml b/records/src/main/resources/schema/records/schemas/recordJSON.yaml new file mode 100644 index 00000000..34c855f0 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/recordJSON.yaml @@ -0,0 +1,36 @@ +--- +allOf: + - $ref: 'recordCommonProperties.yaml' + - type: + object + required: + - id + properties: + id: + description: |- + The unique identifier for this record. + oneOf: + - type: string + - type: integer + time: + $ref: 'time.yaml' + geometry: + $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/geometryGeoJSON.yaml' + conformsTo: + type: array + description: |- + The extensions/conformance classes used in this record. + items: + type: string + links: + description: |- + A list of static links associated with this record. + type: array + items: + $ref: 'link.yaml' + linkTemplates: + description: |- + A list of dynamic links associated with this record. + type: array + items: + $ref: 'linkTemplate.yaml' diff --git a/records/src/main/resources/schema/records/schemas/roles.yaml b/records/src/main/resources/schema/records/schemas/roles.yaml new file mode 100644 index 00000000..f3501589 --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/roles.yaml @@ -0,0 +1,8 @@ +--- +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/records/src/main/resources/schema/records/schemas/scheme.yaml b/records/src/main/resources/schema/records/schemas/scheme.yaml new file mode 100644 index 00000000..b50ae78a --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/scheme.yaml @@ -0,0 +1,21 @@ +--- +type: object +required: + - scheme-id + - namespace +properties: + scheme-id: + type: string + description: |- + An identifier for this namespace. The identifier can be used as a + short-form for the namespace. + namespace: + type: string + description: |- + A declarative region that provides a scope to the identifiers inside it. + It is recommended that the value of namespace be a URI. + resolver: + description: |- + An extensible description of a mechanism that resolves a scheme + identifier (scheme-id) to its namespace. + type: object diff --git a/records/src/main/resources/schema/records/schemas/theme.yaml b/records/src/main/resources/schema/records/schemas/theme.yaml new file mode 100644 index 00000000..18787c5a --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/theme.yaml @@ -0,0 +1,44 @@ +--- +type: object +required: + - concepts + - scheme +properties: + concepts: + type: array + 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 + description: An identifier for the concept. + title: + type: string + description: A human readable title for the concept. + description: + type: string + description: A human readable description for the concept. + url: + type: string + format: uri + description: A URI providing further description of the concept. + scheme: + type: string + 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. + + diff --git a/records/src/main/resources/schema/records/schemas/time.yaml b/records/src/main/resources/schema/records/schemas/time.yaml new file mode 100644 index 00000000..7aab73cd --- /dev/null +++ b/records/src/main/resources/schema/records/schemas/time.yaml @@ -0,0 +1,27 @@ +--- +nullable: true +type: object +properties: + date: + type: string + pattern: "^\\d{4}-\\d{2}-\\d{2}$" + timestamp: + type: string + pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" + interval: + type: array + minItems: 2 + maxItems: 2 + items: + oneOf: + - type: string + pattern: "^\\d{4}-\\d{2}-\\d{2}$" + - type: string + pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" + - type: string + enum: + - ".." + resolution: + type: string + description: |- + Minimum time period resolvable in the dataset, as an ISO 8601 duration From b5b627beef7f59d1f9214e86a8181b7f734af51e Mon Sep 17 00:00:00 2001 From: rng Date: Mon, 28 Sep 2026 17:27:43 +1000 Subject: [PATCH 2/3] Update version to avoid security warning --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2e3e58c6..02e82da8 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ org.springdoc springdoc-openapi-starter-webmvc-ui - 2.8.17 + 2.9.1 com.github.joschi.jackson From 28ec838f78ef180adb28af495a266cc0da2f4aa7 Mon Sep 17 00:00:00 2001 From: rng Date: Mon, 28 Sep 2026 17:33:06 +1000 Subject: [PATCH 3/3] precommit --- .../parameters/common-geodata/bbox.yaml | 6 +- .../ogcapi-records-1-building-blocks.yaml | 34 ++++----- .../ogcapi-records-1-example-all-in-one.yaml | 70 +++++++++---------- ...api-records-1-example-ref-schema-repo.yaml | 2 +- .../schema/records/parameters/profile.yaml | 2 +- .../schema/records/parameters/type.yaml | 2 - .../schema/records/responses/Sortables.yaml | 2 +- .../schema/records/schemas/catalog.yaml | 2 +- .../schemas/catalogCommonProperties.yaml | 6 +- .../schema/records/schemas/contact.yaml | 2 +- .../schema/records/schemas/linkBase.yaml | 2 +- .../schema/records/schemas/linkTemplate.yaml | 2 +- .../schema/records/schemas/scheme.yaml | 4 +- .../schema/records/schemas/theme.yaml | 2 - 14 files changed, 67 insertions(+), 71 deletions(-) diff --git a/coverages/src/main/resources/schema/coverages/parameters/common-geodata/bbox.yaml b/coverages/src/main/resources/schema/coverages/parameters/common-geodata/bbox.yaml index 5f477e49..2d22b8a2 100644 --- a/coverages/src/main/resources/schema/coverages/parameters/common-geodata/bbox.yaml +++ b/coverages/src/main/resources/schema/coverages/parameters/common-geodata/bbox.yaml @@ -13,10 +13,10 @@ description: >- * Maximum value, coordinate axis 3 (optional) If the value consists of four numbers, the coordinate reference system is - WGS84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) + 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`. - If the value consists of six numbers, the coordinate reference system is WGS 84 + 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`. @@ -28,7 +28,7 @@ description: >- If the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box. - If a resource has multiple spatial geometry properties, it is the decision of the server + 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 diff --git a/records/src/main/resources/schema/records/ogcapi-records-1-building-blocks.yaml b/records/src/main/resources/schema/records/ogcapi-records-1-building-blocks.yaml index ca2b888d..b6a50d30 100644 --- a/records/src/main/resources/schema/records/ogcapi-records-1-building-blocks.yaml +++ b/records/src/main/resources/schema/records/ogcapi-records-1-building-blocks.yaml @@ -47,7 +47,7 @@ components: ids: name: ids in: query - description: + description: The optional ids parameter allows a specific list of records, identified by their identifiers, to be fetched from a catalog. Only records whose identifier matches one of the values listed for this parameter shall @@ -86,7 +86,7 @@ components: in: query description: |- One or more identifiers that provide information about additional - semantics (constraints, conventions, extensions), in addition to + semantics (constraints, conventions, extensions), in addition to those defined by the media type, that are associated with the target resource. required: false @@ -181,13 +181,13 @@ components: recordsArrayName: description: |- If records are encoded in-line within the catalog object, - this member advertises the name of the array member that + this member advertises the name of the array member that contains the catalog records. By default the name of the - records array is "records". However, the name of this + records array is "records". However, the name of this array member may be different. A local resources catalog is an example of a circumstance where the records array member may be named something other than "records". For - example, in the case of a local resource catalog at the + example, in the case of a local resource catalog at the /collections endpoint, the name of the records array is "collections". type: string @@ -257,7 +257,7 @@ components: - type: array items: type: string - enum: + enum: - record - catalog contact: @@ -293,7 +293,7 @@ components: Graphic identifying a contact. The link relation should be `icon` and the media type should be an image media type. allOf: - - $ref: '#/components/schemas/link' + - $ref: '#/components/schemas/link' - type: object required: - rel @@ -315,7 +315,7 @@ components: description: The value is the phone number itself. pattern: "^\\+[1-9]{1}[0-9]{3,14}$" roles: - $ref: '#/components/schemas/roles' + $ref: '#/components/schemas/roles' emails: type: array description: Email addresses at which contact can be made. @@ -329,7 +329,7 @@ components: description: The value is the email number itself. format: email roles: - $ref: '#/components/schemas/roles' + $ref: '#/components/schemas/roles' addresses: type: array description: Physical location at which contact can be made. @@ -355,13 +355,13 @@ components: description: |- Country of the physical address. ISO 3166-1 is recommended. roles: - $ref: '#/components/schemas/roles' + $ref: '#/components/schemas/roles' links: type: array description: On-line information about the contact. items: allOf: - - $ref: '#/components/schemas/link' + - $ref: '#/components/schemas/link' - type: object required: - type @@ -374,7 +374,7 @@ components: Supplemental instructions on how or when to contact the responsible party. roles: - $ref: '#/components/schemas/roles' + $ref: '#/components/schemas/roles' defaultSortOrder: type: array items: @@ -493,7 +493,7 @@ components: type: array description: |- One or more identifiers that provide information about additional - semantics (constraints, conventions, extensions), in addition to + semantics (constraints, conventions, extensions), in addition to those defined by the media type, that are associated with the target resource. items: @@ -516,7 +516,7 @@ components: - type: object required: - uriTemplate - properties: + properties: uriTemplate: type: string description: |- @@ -725,13 +725,13 @@ components: scheme: type: object required: - - scheme-id + - scheme-id - namespace properties: scheme-id: type: string description: |- - An identifier for this namespace. The identifier can be used as a + An identifier for this namespace. The identifier can be used as a short-form for the namespace. namespace: type: string @@ -969,4 +969,4 @@ components: A JSON Schema document that defines all the sortables. text/html: schema: - type: string + type: string diff --git a/records/src/main/resources/schema/records/ogcapi-records-1-example-all-in-one.yaml b/records/src/main/resources/schema/records/ogcapi-records-1-example-all-in-one.yaml index a3957b2a..4a73a77b 100644 --- a/records/src/main/resources/schema/records/ogcapi-records-1-example-all-in-one.yaml +++ b/records/src/main/resources/schema/records/ogcapi-records-1-example-all-in-one.yaml @@ -245,36 +245,36 @@ components: selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth): - + * Lower left corner, coordinate axis 1 * Lower left corner, coordinate axis 2 * Minimum value, coordinate axis 3 (optional) * Upper right corner, coordinate axis 1 * Upper right corner, coordinate axis 2 * Maximum value, coordinate axis 3 (optional) - + If the value consists of four numbers, the coordinate reference system is 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 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 the parameter `bbox-crs`. - + The query parameter `bbox-crs` is specified in OGC API - Features - Part 2: Coordinate Reference Systems by Reference. - + 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. @@ -314,10 +314,10 @@ components: * 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 `datetime` are selected. - + If 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. @@ -348,7 +348,7 @@ components: ids: name: ids in: query - description: + description: The optional ids parameter allows a specific list of records, identified by their identifiers, to be fetched from a catalog. Only records whose identifier matches one of the values listed for this parameter shall @@ -387,12 +387,12 @@ components: The optional limit parameter limits the number of items that are presented in the response document. - + Only items are counted that are on the first level of the collection in the response document. Nested objects contained within the explicitly requested items shall not be counted. - + Minimum = 1. Maximum = 10000. Default = 10. name: limit in: query @@ -409,7 +409,7 @@ components: in: query description: |- One or more identifiers that provide information about additional - semantics (constraints, conventions, extensions), in addition to + semantics (constraints, conventions, extensions), in addition to those defined by the media type, that are associated with the target resource. required: false @@ -594,28 +594,28 @@ components: * 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`. - + 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`. - + 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 @@ -657,7 +657,7 @@ components: 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 @@ -672,7 +672,7 @@ components: 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` at start or end is supported and indicates a half-bounded interval. type: array @@ -990,13 +990,13 @@ components: recordsArrayName: description: |- If records are encoded in-line within the catalog object, - this member advertises the name of the array member that + this member advertises the name of the array member that contains the catalog records. By default the name of the - records array is "records". However, the name of this + records array is "records". However, the name of this array member may be different. A local resources catalog is an example of a circumstance where the records array member may be named something other than "records". For - example, in the case of a local resource catalog at the + example, in the case of a local resource catalog at the /collections endpoint, the name of the records array is "collections". type: string @@ -1066,7 +1066,7 @@ components: - type: array items: type: string - enum: + enum: - record - catalog contact: @@ -1102,7 +1102,7 @@ components: Graphic identifying a contact. The link relation should be `icon` and the media type should be an image media type. allOf: - - $ref: '#/components/schemas/link' + - $ref: '#/components/schemas/link' - type: object required: - rel @@ -1124,7 +1124,7 @@ components: description: The value is the phone number itself. pattern: "^\\+[1-9]{1}[0-9]{3,14}$" roles: - $ref: '#/components/schemas/roles' + $ref: '#/components/schemas/roles' emails: type: array description: Email addresses at which contact can be made. @@ -1138,7 +1138,7 @@ components: description: The value is the email number itself. format: email roles: - $ref: '#/components/schemas/roles' + $ref: '#/components/schemas/roles' addresses: type: array description: Physical location at which contact can be made. @@ -1164,13 +1164,13 @@ components: description: |- Country of the physical address. ISO 3166-1 is recommended. roles: - $ref: '#/components/schemas/roles' + $ref: '#/components/schemas/roles' links: type: array description: On-line information about the contact. items: allOf: - - $ref: '#/components/schemas/link' + - $ref: '#/components/schemas/link' - type: object required: - type @@ -1183,7 +1183,7 @@ components: Supplemental instructions on how or when to contact the responsible party. roles: - $ref: '#/components/schemas/roles' + $ref: '#/components/schemas/roles' defaultSortOrder: type: array items: @@ -1290,7 +1290,7 @@ components: type: array description: |- One or more identifiers that provide information about additional - semantics (constraints, conventions, extensions), in addition to + semantics (constraints, conventions, extensions), in addition to those defined by the media type, that are associated with the target resource. items: @@ -1313,7 +1313,7 @@ components: - type: object required: - uriTemplate - properties: + properties: uriTemplate: type: string description: |- @@ -1522,13 +1522,13 @@ components: scheme: type: object required: - - scheme-id + - scheme-id - namespace properties: scheme-id: type: string description: |- - An identifier for this namespace. The identifier can be used as a + An identifier for this namespace. The identifier can be used as a short-form for the namespace. namespace: type: string @@ -1766,7 +1766,7 @@ components: A JSON Schema document that defines all the sortables. text/html: schema: - type: string + type: string securitySchemes: openIdConnect: type: "openIdConnect" diff --git a/records/src/main/resources/schema/records/ogcapi-records-1-example-ref-schema-repo.yaml b/records/src/main/resources/schema/records/ogcapi-records-1-example-ref-schema-repo.yaml index 12f9b9b7..ef7ee491 100644 --- a/records/src/main/resources/schema/records/ogcapi-records-1-example-ref-schema-repo.yaml +++ b/records/src/main/resources/schema/records/ogcapi-records-1-example-ref-schema-repo.yaml @@ -12,7 +12,7 @@ info: * Local Resources Catalog - Query Parameters * Local Resources Catalog - Sorting * OpenAPI 3.0 - + This example is a generic definition that uses path parameters to describe all catalogs and records. The generic OpenAPI definition does not provide any details on the catalogs or the record content. diff --git a/records/src/main/resources/schema/records/parameters/profile.yaml b/records/src/main/resources/schema/records/parameters/profile.yaml index 924ec2f0..5081a94b 100644 --- a/records/src/main/resources/schema/records/parameters/profile.yaml +++ b/records/src/main/resources/schema/records/parameters/profile.yaml @@ -3,7 +3,7 @@ name: profile in: query description: |- One or more identifiers that provide information about additional - semantics (constraints, conventions, extensions), in addition to + semantics (constraints, conventions, extensions), in addition to those defined by the media type, that are associated with the target resource. required: false diff --git a/records/src/main/resources/schema/records/parameters/type.yaml b/records/src/main/resources/schema/records/parameters/type.yaml index 4f405e86..dd074b2f 100644 --- a/records/src/main/resources/schema/records/parameters/type.yaml +++ b/records/src/main/resources/schema/records/parameters/type.yaml @@ -13,5 +13,3 @@ schema: type: string explode: false style: form - - diff --git a/records/src/main/resources/schema/records/responses/Sortables.yaml b/records/src/main/resources/schema/records/responses/Sortables.yaml index 78ad86ac..6260f496 100644 --- a/records/src/main/resources/schema/records/responses/Sortables.yaml +++ b/records/src/main/resources/schema/records/responses/Sortables.yaml @@ -9,4 +9,4 @@ content: A JSON Schema document that defines all the sortables. text/html: schema: - type: string + type: string diff --git a/records/src/main/resources/schema/records/schemas/catalog.yaml b/records/src/main/resources/schema/records/schemas/catalog.yaml index 6b337eec..712b5743 100644 --- a/records/src/main/resources/schema/records/schemas/catalog.yaml +++ b/records/src/main/resources/schema/records/schemas/catalog.yaml @@ -24,6 +24,6 @@ allOf: - type: array items: type: string - enum: + enum: - record - catalog diff --git a/records/src/main/resources/schema/records/schemas/catalogCommonProperties.yaml b/records/src/main/resources/schema/records/schemas/catalogCommonProperties.yaml index 6a7d617d..a6e9c39e 100644 --- a/records/src/main/resources/schema/records/schemas/catalogCommonProperties.yaml +++ b/records/src/main/resources/schema/records/schemas/catalogCommonProperties.yaml @@ -21,13 +21,13 @@ allOf: recordsArrayName: description: |- If records are encoded in-line within the catalog object, - this member advertises the name of the array member that + this member advertises the name of the array member that contains the catalog records. By default the name of the - records array is "records". However, the name of this + records array is "records". However, the name of this array member may be different. A local resources catalog is an example of a circumstance where the records array member may be named something other than "records". For - example, in the case of a local resource catalog at the + example, in the case of a local resource catalog at the /collections endpoint, the name of the records array is "collections". type: string diff --git a/records/src/main/resources/schema/records/schemas/contact.yaml b/records/src/main/resources/schema/records/schemas/contact.yaml index bf7d8c34..87ef2ae1 100644 --- a/records/src/main/resources/schema/records/schemas/contact.yaml +++ b/records/src/main/resources/schema/records/schemas/contact.yaml @@ -31,7 +31,7 @@ properties: Graphic identifying a contact. The link relation should be `icon` and the media type should be an image media type. allOf: - - $ref: 'link.yaml' + - $ref: 'link.yaml' - type: object required: - rel diff --git a/records/src/main/resources/schema/records/schemas/linkBase.yaml b/records/src/main/resources/schema/records/schemas/linkBase.yaml index ad23e031..44db3806 100644 --- a/records/src/main/resources/schema/records/schemas/linkBase.yaml +++ b/records/src/main/resources/schema/records/schemas/linkBase.yaml @@ -26,7 +26,7 @@ properties: type: array description: |- One or more identifiers that provide information about additional - semantics (constraints, conventions, extensions), in addition to + semantics (constraints, conventions, extensions), in addition to those defined by the media type, that are associated with the target resource. items: diff --git a/records/src/main/resources/schema/records/schemas/linkTemplate.yaml b/records/src/main/resources/schema/records/schemas/linkTemplate.yaml index 2b6368dc..ac5a8b5c 100644 --- a/records/src/main/resources/schema/records/schemas/linkTemplate.yaml +++ b/records/src/main/resources/schema/records/schemas/linkTemplate.yaml @@ -4,7 +4,7 @@ allOf: - type: object required: - uriTemplate - properties: + properties: uriTemplate: type: string description: |- diff --git a/records/src/main/resources/schema/records/schemas/scheme.yaml b/records/src/main/resources/schema/records/schemas/scheme.yaml index b50ae78a..3479bf4b 100644 --- a/records/src/main/resources/schema/records/schemas/scheme.yaml +++ b/records/src/main/resources/schema/records/schemas/scheme.yaml @@ -1,13 +1,13 @@ --- type: object required: - - scheme-id + - scheme-id - namespace properties: scheme-id: type: string description: |- - An identifier for this namespace. The identifier can be used as a + An identifier for this namespace. The identifier can be used as a short-form for the namespace. namespace: type: string diff --git a/records/src/main/resources/schema/records/schemas/theme.yaml b/records/src/main/resources/schema/records/schemas/theme.yaml index 18787c5a..263b0f2b 100644 --- a/records/src/main/resources/schema/records/schemas/theme.yaml +++ b/records/src/main/resources/schema/records/schemas/theme.yaml @@ -40,5 +40,3 @@ properties: CQL2, by exposing a queryable (e.g. named `scheme`) and enumerating the list of schemes in the queryable's schema definition. - -