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..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
@@ -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..02e82da8 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
@@ -56,7 +56,7 @@
org.springdoc
springdoc-openapi-starter-webmvc-ui
- 2.8.17
+ 2.9.1
com.github.joschi.jackson
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
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..b6a50d30
--- /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..4a73a77b
--- /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..ef7ee491
--- /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..5081a94b
--- /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..dd074b2f
--- /dev/null
+++ b/records/src/main/resources/schema/records/parameters/type.yaml
@@ -0,0 +1,15 @@
+---
+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..6260f496
--- /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..712b5743
--- /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..a6e9c39e
--- /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..87ef2ae1
--- /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..44db3806
--- /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..ac5a8b5c
--- /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..3479bf4b
--- /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..263b0f2b
--- /dev/null
+++ b/records/src/main/resources/schema/records/schemas/theme.yaml
@@ -0,0 +1,42 @@
+---
+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