From 4923547fcbc830b66beb199d9c025cab3c6bc9fa Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Thu, 7 Sep 2023 03:11:40 -0400 Subject: [PATCH] OpenAPI Definition: Updated --- .../openapi/ogcapi-coverages-1.bundled.json | 3472 ++++++++++++----- standard/openapi/ogcapi-coverages-1.yaml | 22 +- .../paths/coverages-core/pDomainSet.yaml | 21 - .../paths/coverages-core/pMetadata.yaml | 16 - .../paths/coverages-core/pRangeSet.yaml | 25 - .../paths/coverages-core/pRangeType.yaml | 15 - .../openapi/paths/coverages-core/pSchema.yaml | 17 + .../responses/coverages-core/rCoverage.yaml | 31 +- .../responses/coverages-core/rDomainSet.yaml | 8 - .../responses/coverages-core/rMetadata.yaml | 8 - .../responses/coverages-core/rRangeSet.yaml | 8 - .../responses/coverages-core/rRangeType.yaml | 8 - .../openapi/schemas/tms/propertiesSchema.yaml | 11 +- 13 files changed, 2588 insertions(+), 1074 deletions(-) delete mode 100644 standard/openapi/paths/coverages-core/pDomainSet.yaml delete mode 100644 standard/openapi/paths/coverages-core/pMetadata.yaml delete mode 100644 standard/openapi/paths/coverages-core/pRangeSet.yaml delete mode 100644 standard/openapi/paths/coverages-core/pRangeType.yaml create mode 100644 standard/openapi/paths/coverages-core/pSchema.yaml delete mode 100644 standard/openapi/responses/coverages-core/rDomainSet.yaml delete mode 100644 standard/openapi/responses/coverages-core/rMetadata.yaml delete mode 100644 standard/openapi/responses/coverages-core/rRangeSet.yaml delete mode 100644 standard/openapi/responses/coverages-core/rRangeType.yaml diff --git a/standard/openapi/ogcapi-coverages-1.bundled.json b/standard/openapi/ogcapi-coverages-1.bundled.json index 66bea38..56eadfc 100644 --- a/standard/openapi/ogcapi-coverages-1.bundled.json +++ b/standard/openapi/ogcapi-coverages-1.bundled.json @@ -289,8 +289,1781 @@ ], "responses": { "200": { - "description": "A full coverage.", + "description": "A coverage, including any self-describing information supported by the encoding.", "content": { + "application/prs.coverage+json": { + "schema": { + "$id": "https://schemas.opengis.net/covjson/1.0/coveragejson.json", + "$schema": "http://json-schema.org/draft-07/schema", + "description": "A CoverageJSON object", + "type": "object", + "properties": { + "type": { + "enum": [ + "Domain", + "NdArray", + "TiledNdArray", + "Coverage", + "CoverageCollection" + ] + } + }, + "required": [ + "type" + ], + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "Domain" + } + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/domain" + } + }, + { + "if": { + "properties": { + "type": { + "const": "NdArray" + } + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/ndArray" + } + }, + { + "if": { + "properties": { + "type": { + "const": "TiledNdArray" + } + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/tiledNdArray" + } + }, + { + "if": { + "properties": { + "type": { + "const": "Coverage" + } + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/coverage" + } + }, + { + "if": { + "properties": { + "type": { + "const": "CoverageCollection" + } + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/coverageCollection" + } + } + ], + "definitions": { + "anyAxis": { + "description": "Validates any axis", + "if": { + "required": [ + "values" + ] + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/valuesAxis" + }, + "else": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericRegularlySpacedAxis" + } + }, + "coverage": { + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/coverageBase" + }, + { + "required": [ + "parameters" + ], + "properties": { + "domain": { + "if": { + "type": "object" + }, + "then": { + "required": [ + "referencing" + ] + } + } + } + } + ] + }, + "coverageBase": { + "description": "A Coverage, representing a mapping from a domain to sets of data values described by parameters.", + "type": "object", + "properties": { + "type": { + "const": "Coverage" + }, + "id": { + "type": "string" + }, + "domainType": { + "type": "string" + }, + "domain": { + "allOf": [ + { + "type": [ + "string", + "object" + ] + }, + { + "if": { + "type": "object" + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/domainBase" + } + } + ] + }, + "parameters": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/parameter" + } + } + }, + "parameterGroups": { + "type": "array", + "items": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/parameterGroup" + } + }, + "ranges": { + "type": "object", + "patternProperties": { + ".+": { + "allOf": [ + { + "type": [ + "string", + "object" + ] + }, + { + "if": { + "type": "object" + }, + "then": { + "properties": { + "type": { + "enum": [ + "NdArray", + "TiledNdArray" + ] + } + }, + "required": [ + "type" + ] + } + }, + { + "if": { + "type": "object", + "properties": { + "type": { + "const": "NdArray" + } + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/ndArray" + } + }, + { + "if": { + "type": "object", + "properties": { + "type": { + "const": "TiledNdArray" + } + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/tiledNdArray" + } + } + ] + } + } + }, + "rangeAlternates": { + "type": "object" + } + }, + "required": [ + "type", + "domain", + "ranges" + ] + }, + "coverageCollection": { + "description": "A collection of coverage objects", + "properties": { + "type": { + "const": "CoverageCollection" + }, + "domainType": { + "type": "string" + }, + "parameters": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/parameter" + } + } + }, + "parameterGroups": { + "type": "array", + "items": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/parameterGroup" + } + }, + "referencing": { + "type": "array", + "items": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/referenceSystemConnection" + } + }, + "coverages": { + "type": "array", + "items": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/coverageBase" + } + } + }, + "required": [ + "type", + "coverages" + ], + "allOf": [ + { + "$comment": "If no parameters are present at collection level then each coverage must have their own", + "if": { + "not": { + "required": [ + "parameters" + ] + } + }, + "then": { + "properties": { + "coverages": { + "items": { + "required": [ + "parameters" + ] + } + } + } + } + }, + { + "$comment": "If no \"referencing\" member is present at collection level then each coverage domain must have its own", + "if": { + "not": { + "required": [ + "referencing" + ] + } + }, + "then": { + "properties": { + "coverages": { + "items": { + "properties": { + "domain": { + "if": { + "type": "object" + }, + "then": { + "required": [ + "referencing" + ] + } + } + } + } + } + } + } + } + ] + }, + "domain": { + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/domainBase" + }, + { + "required": [ + "referencing" + ] + } + ] + }, + "domainBase": { + "description": "A Domain, which defines a set of positions and their extent in one or more referencing systems", + "type": "object", + "properties": { + "type": { + "const": "Domain" + }, + "domainType": { + "type": "string" + }, + "axes": { + "type": "object", + "description": "Set of Axis objects, keyed by axis identifier", + "minProperties": 1, + "patternProperties": { + ".+": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/anyAxis" + } + } + }, + "referencing": { + "type": "array", + "items": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/referenceSystemConnection" + } + } + }, + "required": [ + "type", + "axes" + ], + "dependencies": { + "domainType": { + "allOf": [ + { + "if": { + "properties": { + "domainType": { + "const": "Grid" + } + } + }, + "then": { + "description": "Grid domain: x and y are required, z and t optional", + "properties": { + "axes": { + "properties": { + "x": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericAxis" + }, + "y": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericAxis" + }, + "z": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericAxis" + }, + "t": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringValuesAxis" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "Trajectory" + } + } + }, + "then": { + "description": "Trajectory domain: mandatory composite axis and optional z axis", + "properties": { + "axes": { + "properties": { + "composite": { + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/tupleValuesAxis" + }, + { + "properties": { + "values": { + "items": { + "$comment": "In a Trajectory, tuples always have 3 (txy) or 4 (txyz) values", + "minItems": 3, + "maxItems": 4 + } + }, + "coordinates": { + "enum": [ + [ + "t", + "x", + "y", + "z" + ], + [ + "t", + "x", + "y" + ] + ] + } + } + } + ] + }, + "z": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + } + }, + "required": [ + "composite" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "VerticalProfile" + } + } + }, + "then": { + "description": "Vertical Profile domain: mandatory x, y and z axis and optional t axis", + "properties": { + "axes": { + "properties": { + "x": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "y": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "z": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericAxis" + }, + "t": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringSingleValueAxis" + } + }, + "required": [ + "x", + "y", + "z" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "Point" + } + } + }, + "then": { + "description": "Point domain: mandatory x and y axis, optional z and t axis", + "properties": { + "axes": { + "properties": { + "x": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "y": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "z": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "t": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringSingleValueAxis" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "PointSeries" + } + } + }, + "then": { + "description": "PointSeries domain: mandatory x, y and t axis, optional z axis", + "properties": { + "axes": { + "properties": { + "x": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "y": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "z": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "t": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringValuesAxis" + } + }, + "required": [ + "x", + "y", + "t" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "MultiPoint" + } + } + }, + "then": { + "description": "MultiPoint domain: mandatory composite axis, optional t axis", + "properties": { + "axes": { + "properties": { + "composite": { + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/tupleValuesAxis" + }, + { + "properties": { + "values": { + "items": { + "$comment": "In a MultiPoint, tuples always have 2 (xy) or 3 values (xyz)", + "minItems": 2, + "maxItems": 3 + } + }, + "coordinates": { + "enum": [ + [ + "x", + "y", + "z" + ], + [ + "x", + "y" + ] + ] + } + } + } + ] + }, + "t": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringSingleValueAxis" + } + }, + "required": [ + "composite" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "MultiPointSeries" + } + } + }, + "then": { + "description": "MultiPointSeries domain: mandatory composite and t axes", + "properties": { + "axes": { + "properties": { + "composite": { + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/tupleValuesAxis" + }, + { + "properties": { + "values": { + "items": { + "$comment": "In a MultiPointSeries, tuples always have 2 (xy) or 3 values (xyz)", + "minItems": 2, + "maxItems": 3 + } + }, + "coordinates": { + "enum": [ + [ + "x", + "y", + "z" + ], + [ + "x", + "y" + ] + ] + } + } + } + ] + }, + "t": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringValuesAxis" + } + }, + "required": [ + "composite", + "t" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "Section" + } + } + }, + "then": { + "description": "Section domain: mandatory composite and z axes", + "properties": { + "axes": { + "properties": { + "composite": { + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/tupleValuesAxis" + }, + { + "properties": { + "values": { + "items": { + "$comment": "In a Section, tuples always have 3 values (txy)", + "minItems": 3, + "maxItems": 3 + } + }, + "coordinates": { + "const": [ + "t", + "x", + "y" + ] + } + } + } + ] + }, + "z": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericAxis" + } + }, + "required": [ + "composite", + "z" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "Polygon" + } + } + }, + "then": { + "description": "Polygon domain: mandatory composite axis, optional z and t axes", + "properties": { + "axes": { + "properties": { + "composite": { + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/polygonValuesAxis" + }, + { + "properties": { + "values": { + "$comment": "There can only be one polygon in the axis", + "maxItems": 1 + }, + "coordinates": { + "const": [ + "x", + "y" + ] + } + } + } + ] + }, + "z": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "t": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringSingleValueAxis" + } + }, + "required": [ + "composite" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "PolygonSeries" + } + } + }, + "then": { + "description": "PolygonSeries domain: mandatory composite axis, optional z and t axes", + "properties": { + "axes": { + "properties": { + "composite": { + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/polygonValuesAxis" + }, + { + "properties": { + "values": { + "$comment": "There can only be one polygon in the axis", + "maxItems": 1 + }, + "coordinates": { + "const": [ + "x", + "y" + ] + } + } + } + ] + }, + "z": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "t": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringValuesAxis" + } + }, + "required": [ + "composite" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "MultiPolygon" + } + } + }, + "then": { + "description": "MultiPolygon domain: mandatory composite axis, optional z and t axes", + "properties": { + "axes": { + "properties": { + "composite": { + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/polygonValuesAxis" + }, + { + "properties": { + "coordinates": { + "const": [ + "x", + "y" + ] + } + } + } + ] + }, + "z": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "t": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringSingleValueAxis" + } + }, + "required": [ + "composite" + ], + "additionalProperties": false + } + } + } + }, + { + "if": { + "properties": { + "domainType": { + "const": "MultiPolygonSeries" + } + } + }, + "then": { + "description": "MultiPolygonSeries domain: mandatory composite axis, optional z and t axes", + "properties": { + "axes": { + "properties": { + "composite": { + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/polygonValuesAxis" + }, + { + "properties": { + "coordinates": { + "const": [ + "x", + "y" + ] + } + } + } + ] + }, + "z": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericSingleValueAxis" + }, + "t": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringValuesAxis" + } + }, + "required": [ + "composite" + ], + "additionalProperties": false + } + } + } + } + ] + } + } + }, + "i18n": { + "type": "object", + "description": "Object representing an internationalised string where keys are BCP 47 language tags.", + "patternProperties": { + "^(((([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})+))*))$": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ndArray": { + "type": "object", + "description": "Object representing a multidimensional (>= 0D) array with named axes, encoded as a flat one-dimensional array in row-major order", + "properties": { + "type": { + "const": "NdArray" + }, + "dataType": { + "enum": [ + "float", + "integer", + "string" + ] + }, + "shape": { + "type": "array", + "items": { + "type": "number" + } + }, + "axisNames": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "values": { + "type": "array", + "minItems": 1 + } + }, + "allOf": [ + { + "if": { + "properties": { + "dataType": { + "const": "float" + } + } + }, + "then": { + "properties": { + "values": { + "items": { + "type": [ + "number", + "null" + ] + } + } + } + } + }, + { + "if": { + "properties": { + "dataType": { + "const": "integer" + } + } + }, + "then": { + "properties": { + "values": { + "items": { + "type": [ + "integer", + "null" + ] + } + } + } + } + }, + { + "if": { + "properties": { + "dataType": { + "const": "string" + } + } + }, + "then": { + "properties": { + "values": { + "items": { + "type": [ + "string", + "null" + ] + } + } + } + } + }, + { + "if": { + "anyOf": [ + { + "properties": { + "values": { + "minItems": 2 + } + } + }, + { + "properties": { + "shape": { + "minItems": 1 + } + }, + "required": [ + "shape" + ] + }, + { + "properties": { + "axisNames": { + "minItems": 1 + } + }, + "required": [ + "axisNames" + ] + } + ] + }, + "then": { + "properties": { + "shape": { + "minItems": 1 + }, + "axisNames": { + "minItems": 1 + } + }, + "required": [ + "shape", + "axisNames" + ] + } + } + ], + "required": [ + "type", + "dataType", + "values" + ] + }, + "numericAxis": { + "description": "Simple axis with numeric values", + "if": { + "required": [ + "values" + ] + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericValuesAxis" + }, + "else": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericRegularlySpacedAxis" + } + }, + "numericRegularlySpacedAxis": { + "description": "A regularly-spaced numeric axis", + "properties": { + "start": { + "type": "number" + }, + "stop": { + "type": "number" + }, + "num": { + "type": "integer", + "minimum": 1 + } + }, + "required": [ + "start", + "stop", + "num" + ], + "additionalProperties": false + }, + "numericSingleValueAxis": { + "description": "Axis defined by single numeric value", + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericValuesAxis" + }, + { + "properties": { + "values": { + "maxItems": 1 + } + } + } + ] + }, + "numericValuesAxis": { + "description": "Axis defined by list of numeric axis values and optional bounds", + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/valuesAxisBase" + }, + { + "properties": { + "values": { + "items": { + "type": "number" + } + }, + "bounds": { + "items": { + "type": "number" + } + } + }, + "additionalProperties": false + } + ] + }, + "observedProperty": { + "type": "object", + "description": "A definition of the quantity being measured.", + "properties": { + "id": { + "type": "string" + }, + "label": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + }, + "description": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + }, + "categories": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "label": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + }, + "description": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + } + }, + "required": [ + "id", + "label" + ] + }, + "minItems": 1 + } + }, + "required": [ + "label" + ] + }, + "parameter": { + "type": "object", + "description": "Represents metadata about the values of the coverage", + "properties": { + "id": { + "type": "string" + }, + "type": { + "description": "Type of the parameter object, must be \"Parameter\"", + "const": "Parameter" + }, + "description": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + }, + "observedProperty": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/observedProperty" + }, + "unit": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/unit" + }, + "categoryEncoding": { + "type": "object", + "description": "Maps IDs of categories in the observedProperty to range values", + "patternProperties": { + ".+": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "array", + "items": { + "type": "integer" + }, + "minItems": 1, + "uniqueItems": true + } + ] + } + } + } + }, + "required": [ + "type", + "observedProperty" + ] + }, + "parameterGroup": { + "type": "object", + "description": "Represents logical groups of parameters", + "properties": { + "type": { + "description": "Type of the parameter group object, must be \"ParameterGroup\"", + "const": "ParameterGroup" + }, + "id": { + "type": "string" + }, + "label": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + }, + "description": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + }, + "observedProperty": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/observedProperty" + }, + "members": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "uniqueItems": true + } + }, + "required": [ + "type", + "members" + ], + "anyOf": [ + { + "required": [ + "label" + ] + }, + { + "required": [ + "observedProperty" + ] + } + ] + }, + "polygonValuesAxis": { + "description": "Polygon-based axis", + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/valuesAxisBase" + }, + { + "properties": { + "dataType": { + "const": "polygon" + }, + "values": { + "items": { + "description": "A GeoJSON polygon", + "type": "array", + "items": { + "type": "array", + "items": { + "description": "The inner array: the coordinates themselves", + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2 + }, + "minItems": 1 + }, + "minItems": 1 + } + }, + "coordinates": {} + }, + "required": [ + "dataType", + "values", + "coordinates" + ], + "additionalProperties": false + } + ] + }, + "primitiveValuesAxis": { + "description": "Validates any axis with primitive values", + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/valuesAxisBase" + }, + { + "$comment": "This redundant branch exists to fail early with succinct errors", + "properties": { + "values": { + "items": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + } + } + } + }, + { + "if": { + "properties": { + "values": { + "items": { + "type": "number" + } + } + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/numericValuesAxis" + }, + "else": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringValuesAxis" + } + } + ] + }, + "referenceSystem": { + "type": "object", + "properties": { + "type": { + "type": "string" + } + }, + "required": [ + "type" + ], + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "TemporalRS" + } + } + }, + "then": { + "description": "Temporal reference system", + "properties": { + "calendar": { + "type": "string", + "oneOf": [ + { + "const": "Gregorian" + }, + { + "pattern": "^https?://" + } + ] + }, + "timeScale": { + "type": "string" + } + }, + "required": [ + "calendar" + ] + } + }, + { + "if": { + "properties": { + "type": { + "const": "IdentifierRS" + } + } + }, + "then": { + "description": "An identifier-based reference system", + "properties": { + "id": { + "type": "string" + }, + "label": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + }, + "description": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + }, + "targetConcept": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/targetConcept" + }, + "identifiers": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/targetConcept" + } + } + } + }, + "required": [ + "targetConcept" + ] + } + } + ] + }, + "referenceSystemConnection": { + "description": "Reference System Connection object: connects coordinates to reference systems", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "system": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/referenceSystem" + } + }, + "required": [ + "coordinates", + "system" + ] + }, + "stringSingleValueAxis": { + "description": "Axis defined by single string value", + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/stringValuesAxis" + }, + { + "properties": { + "values": { + "maxItems": 1 + } + } + } + ] + }, + "stringValuesAxis": { + "description": "Simple axis with string values (e.g. time strings)", + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/valuesAxisBase" + }, + { + "properties": { + "values": { + "items": { + "type": "string" + } + }, + "bounds": { + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + ] + }, + "targetConcept": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "label": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + }, + "description": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + } + }, + "required": [ + "label" + ] + }, + "tiledNdArray": { + "type": "object", + "description": "Object representing a multidimensional (>= 1D) array with named axes split up into sets of linked NdArray documents", + "properties": { + "type": { + "const": "TiledNdArray" + }, + "dataType": { + "enum": [ + "float", + "integer", + "string" + ] + }, + "shape": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 1 + }, + "axisNames": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "uniqueItems": true + }, + "tileSets": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "properties": { + "tileShape": { + "type": "array", + "items": { + "type": [ + "number", + "null" + ] + }, + "minItems": 1 + }, + "urlTemplate": { + "type": "string", + "description": "RFC 6570 Level 1 URI template" + } + }, + "required": [ + "tileShape", + "urlTemplate" + ] + } + } + }, + "required": [ + "type", + "dataType", + "shape", + "axisNames", + "tileSets" + ] + }, + "tupleValuesAxis": { + "description": "Tuple-based axis", + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/valuesAxisBase" + }, + { + "properties": { + "dataType": { + "const": "tuple" + }, + "values": { + "items": { + "description": "A tuple of axis values (numbers or strings)", + "type": "array", + "items": { + "type": [ + "number", + "string" + ] + }, + "minItems": 2 + } + }, + "coordinates": {} + }, + "required": [ + "dataType", + "values", + "coordinates" + ], + "additionalProperties": false + } + ] + }, + "unit": { + "type": "object", + "description": "The units of measure", + "properties": { + "id": { + "type": "string" + }, + "label": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/i18n" + }, + "symbol": { + "allOf": [ + { + "type": [ + "string", + "object" + ] + }, + { + "if": { + "type": "object" + }, + "then": { + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "type", + "value" + ] + } + } + ] + } + }, + "anyOf": [ + { + "required": [ + "label" + ] + }, + { + "required": [ + "symbol" + ] + } + ] + }, + "valuesAxis": { + "description": "Validates any values-based axis", + "allOf": [ + { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/valuesAxisBase" + }, + { + "if": { + "not": { + "required": [ + "dataType" + ] + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/primitiveValuesAxis" + } + } + ], + "dependencies": { + "dataType": { + "allOf": [ + { + "if": { + "properties": { + "dataType": { + "const": "tuple" + } + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/tupleValuesAxis" + } + }, + { + "if": { + "properties": { + "dataType": { + "const": "polygon" + } + } + }, + "then": { + "$ref": "#/paths/~1collections~1%7BcollectionId%7D~1coverage/get/responses/200/content/application~1prs.coverage%2Bjson/schema/definitions/polygonValuesAxis" + } + } + ] + } + } + }, + "valuesAxisBase": { + "$comment": "Base schema for values-based axis schemas", + "properties": { + "dataType": { + "type": "string", + "not": { + "const": "primitive" + } + }, + "values": { + "type": "array", + "minItems": 1, + "uniqueItems": true + }, + "coordinates": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 2 + }, + "bounds": { + "description": "Optional axis bounds. Must be twice as long (and same data type) as \"values\"", + "type": "array", + "minItems": 2 + } + }, + "required": [ + "values" + ] + } + } + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/coverageSchema" @@ -302,172 +2075,46 @@ "format": "binary" } }, - "multipart/related": { + "application/x-netcdf": { "schema": { "type": "string", "format": "binary" } }, - "text/html": { + "vnd.las": { "schema": { - "type": "string" + "type": "string", + "format": "binary" } - } - } - }, - "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/subset-crs" - }, - { - "$ref": "#/components/parameters/f-domainset" - } - ], - "responses": { - "200": { - "description": "A coverages domainset.", - "content": { - "application/json": { + }, + "vnd.laszip": { "schema": { - "$ref": "#/components/schemas/domainSet" + "type": "string", + "format": "binary" } }, - "text/html": { + "image/png": { "schema": { - "type": "string" + "type": "string", + "format": "binary" } - } - } - }, - "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": { + }, + "image/jxl": { "schema": { - "$ref": "#/components/schemas/rangeType" + "type": "string", + "format": "binary" } }, - "text/html": { + "image/jp2": { "schema": { - "type": "string" + "type": "string", + "format": "binary" } - } - } - }, - "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" - } - ], - "responses": { - "200": { - "description": "A coverage's range set.", - "content": { - "application/json": { + }, + "application/x-zarr": { "schema": { - "$ref": "#/components/schemas/rangeSet" + "type": "string", + "format": "binary" } }, "text/html": { @@ -483,14 +2130,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": "getCoverageSchema", "parameters": [ { "$ref": "#/components/parameters/collectionId-coverage" @@ -501,11 +2148,125 @@ ], "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" + "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 + }, + "x-ogc-observedProperty": { + "type": "string" + }, + "x-ogc-observedPropertyURI": { + "type": "string", + "format": "uri" + }, + "x-ogc-uom": { + "type": "string" + }, + "x-ogc-uomURI": { + "type": "string", + "format": "uri" + }, + "x-ogc-fieldIndex": { + "type": "integer", + "minimum": 0 + } + } + } + } + } } }, "text/html": { @@ -1265,182 +3026,148 @@ "minimum": 0, "example": 127 }, - "domainSet": { + "coverageSchema": { + "title": "Coverage object", + "description": "Component of OGC Coverage Implementation Schema 1.1. Last updated: 2016-may-18. Copyright (c) 2016 Open Geospatial Consortium, Inc. All Rights Reserved. To obtain additional rights of use, visit http://www.opengeospatial.org/legal/.", "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" + "domainSet", + "rangeSet", + "rangeType" ], "properties": { + "id": { + "type": "string" + }, "type": { "enum": [ - "DomainSet" + "CoverageByDomainAndRange" ] }, - "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.", + "envelope": { + "title": "envelope", + "description": "The envelope around a coverage is defined by the lower and upper bound of each axis, respectively. 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" + "type", + "srsName", + "axisLabels", + "axis" ], - "additionalProperties": false, "properties": { "type": { "enum": [ - "GeneralGridCoverage" + "EnvelopeByAxis" ] }, "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" - } - } + "type": "string", + "format": "uri" + }, + "axisLabels": { + "type": "array", + "items": { + "type": "string" + } + }, + "axis": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "lowerBound", + "upperBound", + "uomLabel" + ], + "additionalProperties": false, + "properties": { + "type": { + "enum": [ + "AxisExtent" + ] }, - { - "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" + "id": { + "type": "string" + }, + "axisLabel": { + "type": "string" + }, + "lowerBound": { + "oneOf": [ + { + "type": "number" }, - "uomLabel": { - "type": "string" + { + "type": "string", + "nullable": true }, - "resolution": { - "type": "number" + { + "type": "boolean" } - } + ] }, - { - "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" + "upperBound": { + "oneOf": [ + { + "type": "number" }, - "uomLabel": { - "type": "string" + { + "type": "string", + "nullable": true }, - "coordinate": { - "type": "array", - "items": { - "type": "string" - } + { + "type": "boolean" } - } + ] + }, + "uomLabel": { + "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": [ - { + } + } + }, + "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", - "axisLabels", - "uomLabels", - "coordinates" + "type" ], + "additionalProperties": false, "properties": { "type": { "enum": [ - "DisplacementAxisNest" + "GeneralGridCoverage" ] }, "id": { "type": "string" }, - "axisLabel": { - "type": "string" - }, "srsName": { "type": "string", "format": "uri" @@ -1451,194 +3178,422 @@ "type": "string" } }, - "uomLabels": { + "axis": { "type": "array", "items": { - "type": "string" + "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" + } + } + } + } + ] } }, - "coordinates": { - "type": "array", - "items": { - "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" + } + } } - } - } - } - }, - { - "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" + "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" + } } }, - "uomLabels": { - "type": "array", - "items": { - "type": "string" + "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" + } + } } - }, - "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" + "type", + "directMultiPoint" ], "properties": { "type": { "enum": [ - "GridLimits" + "DomainSet" ] }, - "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" + "directMultiPoint": { + "oneOf": [ + { + "required": [ + "type", + "coordinates" + ], + "properties": { + "type": { + "enum": [ + "DirectMultiPoint" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + } }, - "upperBound": { - "type": "number" + { + "required": [ + "type", + "coordinatesRef" + ], + "properties": { + "type": { + "enum": [ + "DirectMultiPointRef" + ] + }, + "coordinatesRef": { + "type": "string", + "format": "uri" + } + } } - } + ] + } + } + }, + { + "required": [ + "type", + "fileReference" + ], + "properties": { + "type": { + "enum": [ + "DomainSetRef" + ] }, - "srsName": { + "id": { "type": "string", "format": "uri" }, - "axisLabels": { - "type": "array", - "items": { - "type": "string" - } + "fileReference": { + "type": "string", + "format": "uri" } } } - } - } - } - }, - { - "required": [ - "type", - "directMultiPoint" - ], - "properties": { - "type": { - "enum": [ - "DomainSet" ] }, - "directMultiPoint": { + "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", - "coordinates" + "dataBlock" ], "properties": { "type": { "enum": [ - "DirectMultiPoint" + "RangeSet" ] }, - "coordinates": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "string" + "dataBlock": { + "title": "dataBlock", + "description": "Data block objects", + "type": "object", + "required": [ + "type", + "values" + ], + "properties": { + "type": { + "enum": [ + "VDataBlock", + "CVDataBlock" + ] + }, + "values": { + "type": "array", + "items": { + "type": "string" + } } } } @@ -1647,372 +3602,169 @@ { "required": [ "type", - "coordinatesRef" + "fileReference" ], "properties": { "type": { "enum": [ - "DirectMultiPointRef" + "RangeSetRef" ] }, - "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": { + "fileReference": { + "type": "array", + "items": { "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", - "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": [ - "type", - "fileReference" - ], - "properties": { - "type": { - "enum": [ - "RangeSetRef" - ] - }, - "fileReference": { - "type": "array", - "items": { - "type": "string", - "format": "uri" - } - } - } - } - ] - }, - "coverageSchema": { - "title": "Coverage object", - "description": "Component of OGC Coverage Implementation Schema 1.1. Last updated: 2016-may-18. Copyright (c) 2016 Open Geospatial Consortium, Inc. All Rights Reserved. To obtain additional rights of use, visit http://www.opengeospatial.org/legal/.", - "type": "object", - "oneOf": [ - { - "required": [ - "type", - "domainSet", - "rangeSet", - "rangeType" - ], - "properties": { - "id": { - "type": "string" - }, - "type": { - "enum": [ - "CoverageByDomainAndRange" + } + } + } + } ] }, - "envelope": { - "title": "envelope", - "description": "The envelope around a coverage is defined by the lower and upper bound of each axis, respectively. 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.", + "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", - "required": [ - "type", - "srsName", - "axisLabels", - "axis" - ], - "properties": { - "type": { - "enum": [ - "EnvelopeByAxis" - ] - }, - "id": { - "type": "string" - }, - "srsName": { - "type": "string", - "format": "uri" - }, - "axisLabels": { - "type": "array", - "items": { - "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" + "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 +3914,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 +4141,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": "#/paths/~1collections~1%7BcollectionId%7D~1schema/get/responses/200/content/application~1json/schema" } ] }, @@ -3018,54 +4660,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", @@ -3446,7 +5040,7 @@ "domainSet": { "allOf": [ { - "$ref": "#/components/schemas/domainSet" + "$ref": "#/components/schemas/coverageSchema/oneOf/0/properties/domainSet" } ], "example": { @@ -3504,7 +5098,7 @@ "rangeType": { "allOf": [ { - "$ref": "#/components/schemas/rangeType" + "$ref": "#/components/schemas/coverageSchema/oneOf/0/properties/rangeType" } ], "example": { diff --git a/standard/openapi/ogcapi-coverages-1.yaml b/standard/openapi/ogcapi-coverages-1.yaml index 5728249..600cbea 100644 --- a/standard/openapi/ogcapi-coverages-1.yaml +++ b/standard/openapi/ogcapi-coverages-1.yaml @@ -40,14 +40,8 @@ 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' + /collections/{collectionId}/schema: + $ref: 'paths/coverages-core/pSchema.yaml' # Coverage Tiles /collections/{collectionId}/coverage/tiles: @@ -96,12 +90,6 @@ components: $ref: 'schemas/common-geodata/numberMatched.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' @@ -166,12 +154,6 @@ components: # 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' # Tiles - Core tileMatrix: diff --git a/standard/openapi/paths/coverages-core/pDomainSet.yaml b/standard/openapi/paths/coverages-core/pDomainSet.yaml deleted file mode 100644 index ac55cc3..0000000 --- a/standard/openapi/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/standard/openapi/paths/coverages-core/pMetadata.yaml b/standard/openapi/paths/coverages-core/pMetadata.yaml deleted file mode 100644 index f073bfe..0000000 --- a/standard/openapi/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/standard/openapi/paths/coverages-core/pRangeSet.yaml b/standard/openapi/paths/coverages-core/pRangeSet.yaml deleted file mode 100644 index 8fb7eec..0000000 --- a/standard/openapi/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/standard/openapi/paths/coverages-core/pRangeType.yaml b/standard/openapi/paths/coverages-core/pRangeType.yaml deleted file mode 100644 index ee3a9cd..0000000 --- a/standard/openapi/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/standard/openapi/paths/coverages-core/pSchema.yaml b/standard/openapi/paths/coverages-core/pSchema.yaml new file mode 100644 index 0000000..8bae67c --- /dev/null +++ b/standard/openapi/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: getCoverageSchema + 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/standard/openapi/responses/coverages-core/rCoverage.yaml b/standard/openapi/responses/coverages-core/rCoverage.yaml index a9fb7d4..a613f74 100644 --- a/standard/openapi/responses/coverages-core/rCoverage.yaml +++ b/standard/openapi/responses/coverages-core/rCoverage.yaml @@ -1,5 +1,8 @@ -description: A full coverage. +description: A coverage, including any self-describing information supported by the encoding. content: + application/prs.coverage+json: + schema: + $ref: 'https://schemas.opengis.net/covjson/1.0/coveragejson.json' application/json: schema: $ref: '../../schemas/cis/coverage-schema.yaml' @@ -7,7 +10,31 @@ content: 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/standard/openapi/responses/coverages-core/rDomainSet.yaml b/standard/openapi/responses/coverages-core/rDomainSet.yaml deleted file mode 100644 index 90e48f1..0000000 --- a/standard/openapi/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/standard/openapi/responses/coverages-core/rMetadata.yaml b/standard/openapi/responses/coverages-core/rMetadata.yaml deleted file mode 100644 index 4175237..0000000 --- a/standard/openapi/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/standard/openapi/responses/coverages-core/rRangeSet.yaml b/standard/openapi/responses/coverages-core/rRangeSet.yaml deleted file mode 100644 index 31bdacf..0000000 --- a/standard/openapi/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/standard/openapi/responses/coverages-core/rRangeType.yaml b/standard/openapi/responses/coverages-core/rRangeType.yaml deleted file mode 100644 index 254d00e..0000000 --- a/standard/openapi/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/standard/openapi/schemas/tms/propertiesSchema.yaml b/standard/openapi/schemas/tms/propertiesSchema.yaml index f2363a1..74c290e 100644 --- a/standard/openapi/schemas/tms/propertiesSchema.yaml +++ b/standard/openapi/schemas/tms/propertiesSchema.yaml @@ -73,13 +73,16 @@ properties: type: integer default: 0 minimum: 0 - observedProperty: + x-ogc-observedProperty: type: string - observedPropertyURI: + x-ogc-observedPropertyURI: type: string format: uri - uom: + x-ogc-uom: type: string - uomURI: + x-ogc-uomURI: type: string format: uri + x-ogc-fieldIndex: + type: integer + minimum: 0