From 430b3b697dc2ac27907da40fe4ea1ea65d80a73a Mon Sep 17 00:00:00 2001 From: Panagiotis Vretanos Date: Fri, 29 Dec 2023 23:10:41 -0500 Subject: [PATCH] Patch OpenAPI building blocks file and example. Update all instances of "catalogue" to "catalog". --- core/examples/json/collection.json | 8 +- core/examples/json/collections.json | 22 +- .../collection.json | 0 .../dataset_example/README.md | 1 + .../dataset_example/nz-building-outlines.xml | 0 .../nz-buildings-collection.json | 0 .../dataset_example/nz-buildings-record.json | 0 .../imagery_example/collection.json | 0 ...1_M0000676_F2N_20120513_225701_HH_RAW.json | 0 .../imagery_example/raw/collection.json | 0 .../imagery_example/scn/collection.json | 0 .../imagery_example/scw/collection.json | 0 .../imagery_example/sgf/collection.json | 0 .../imagery_example/sgx/collection.json | 0 ...1_M0630938_F2N_20120513_225708_HH_SLC.json | 0 ...1_M0634795_F3F_20120614_110311_HH_SLC.json | 0 ...1_M0634796_F3F_20120614_110317_HH_SLC.json | 0 ...1_M0634798_F3F_20121012_110325_HH_SLC.json | 0 ...1_M0634799_F3F_20121012_110331_HH_SLC.json | 0 .../imagery_example/slc/collection.json | 0 .../dataset_example/README.md | 1 - core/examples/json/defaultSortOrder.json | 8 +- core/examples/json/record-collection.json | 18 +- .../openapi/ogcapi-records-1-example1.yaml | 52 +- core/openapi/ogcapi-records-1.yaml | 1134 +++++++++-------- core/openapi/parameters/externalId.yaml | 2 +- core/openapi/responses/Collection.yaml | 4 +- core/openapi/responses/Collections.yaml | 8 + core/openapi/responses/Sortables.yaml | 12 +- .../schemas/{common => }/collections.yaml | 2 +- .../schemas/featureCollectionGeoJSON.yaml | 2 +- core/openapi/schemas/license.yaml | 2 +- core/openapi/schemas/recordGeoJSON.yaml | 4 +- core/openapi/schemas/schema.yaml | 1026 +++++++++++++++ core/openapi/schemas/theme.yaml | 2 +- .../ATS_class_local-resources-catalog.adoc | 2 +- .../ATS_class_searchable-catalog_crs.adoc | 4 +- ...TS_class_searchable-catalog_filtering.adoc | 4 +- .../autodiscovery/ATS_link.adoc | 4 +- .../crawlable-catalog/ATS_catalog-links.adoc | 2 +- .../ATS_catalog-location.adoc | 2 +- .../crawlable-catalog/ATS_catalog.adoc | 2 +- .../crawlable-catalog/ATS_itemType.adoc | 2 +- .../crawlable-catalog/ATS_record.adoc | 2 +- .../ATS_property-title.adoc | 2 +- .../ATS_conformance.adoc | 2 +- .../ATS_queryables-link.adoc | 6 +- .../ATS_media-type-default.adoc | 4 +- .../searchable-catalog/ATS_core.adoc | 2 +- .../ATS_conformance.adoc | 6 +- .../ATS_mandatory-queryables.adoc | 2 +- core/standard/clause_7_building_blocks.adoc | 2 +- 52 files changed, 1718 insertions(+), 640 deletions(-) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/collection.json (100%) create mode 100644 core/examples/json/crawlable_catalog/dataset_example/README.md rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/dataset_example/nz-building-outlines.xml (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/dataset_example/nz-buildings-collection.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/dataset_example/nz-buildings-record.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/collection.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/raw/2012-05-13/RS1_M0000676_F2N_20120513_225701_HH_RAW.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/raw/collection.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/scn/collection.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/scw/collection.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/sgf/collection.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/sgx/collection.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/slc/2012-05-13/RS1_M0630938_F2N_20120513_225708_HH_SLC.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/slc/2012-06-14/RS1_M0634795_F3F_20120614_110311_HH_SLC.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/slc/2012-06-14/RS1_M0634796_F3F_20120614_110317_HH_SLC.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/slc/2012-10-12/RS1_M0634798_F3F_20121012_110325_HH_SLC.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/slc/2012-10-12/RS1_M0634799_F3F_20121012_110331_HH_SLC.json (100%) rename core/examples/json/{crawlable_catalogue => crawlable_catalog}/imagery_example/slc/collection.json (100%) delete mode 100644 core/examples/json/crawlable_catalogue/dataset_example/README.md create mode 100644 core/openapi/responses/Collections.yaml rename core/openapi/schemas/{common => }/collections.yaml (82%) create mode 100644 core/openapi/schemas/schema.yaml diff --git a/core/examples/json/collection.json b/core/examples/json/collection.json index 3961bc4a..7060090b 100644 --- a/core/examples/json/collection.json +++ b/core/examples/json/collection.json @@ -1,13 +1,13 @@ { "id": "sentinel1cat", "itemType": "record", - "title": "Sentinel-1 Catalogue", - "description": "A sample catalogue of Sentinel-1 products stored in S3 on AWS.", + "title": "Sentinel-1 Catalog", + "description": "A sample catalog of Sentinel-1 products stored in S3 on AWS.", "links": [ { - "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogues/collections/sentinel1cat/items", + "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogs/collections/sentinel1cat/items", "rel": "items", - "title": "Catalogue records describing SENTINEL-1 products." + "title": "Catalog records describing SENTINEL-1 products." } ] } diff --git a/core/examples/json/collections.json b/core/examples/json/collections.json index 8c543cef..30ae1a54 100644 --- a/core/examples/json/collections.json +++ b/core/examples/json/collections.json @@ -1,19 +1,19 @@ { "links": [ { - "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogues/collections?f=application%2Fjson", + "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogs/collections?f=application%2Fjson", "rel": "self", "type": "application/json", "title": "this document" }, { - "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogues/collections?f=text%2Fxml", + "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogs/collections?f=text%2Fxml", "rel": "alternate", "type": "text/xml", "title": "this document as XML" }, { - "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogues/collections?f=text%2Fhtml", + "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogs/collections?f=text%2Fhtml", "rel": "alternate", "type": "text/html", "title": "this document as HTML" @@ -23,26 +23,26 @@ { "id": "radarsat2cat", "itemType": "record", - "title": "CubeWerx RADARSAT-2 Catalogue", - "description": "A sample catalogue of RADARSAT-2 products stored in S3 on AWS.", + "title": "CubeWerx RADARSAT-2 Catalog", + "description": "A sample catalog of RADARSAT-2 products stored in S3 on AWS.", "links": [ { - "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogues/collections/s1tepcat", + "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogs/collections/s1tepcat", "rel": "collection", - "title": "Root URL for this record collection. At this endpoint you can retrieve a description of this catalogue as well as hypermedia controls that allow you to query the catalogue." + "title": "Root URL for this record collection. At this endpoint you can retrieve a description of this catalog as well as hypermedia controls that allow you to query the catalog." } ] }, { "id": "sentinel1cat", "itemType": "record", - "title": "CubeWerx Sentinel-1 Catalogue", - "description": "A sample catalogue of Sentinel-1 products stored in S3 on AWS.", + "title": "CubeWerx Sentinel-1 Catalog", + "description": "A sample catalog of Sentinel-1 products stored in S3 on AWS.", "links": [ { - "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogues/collections/sentinel1cat", + "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogs/collections/sentinel1cat", "rel": "collection", - "title": "Root URL for this record collection. At this endpoint you can retrieve a description of this catalogue as well as hypermedia controls that allow you to query the catalogue." + "title": "Root URL for this record collection. At this endpoint you can retrieve a description of this catalog as well as hypermedia controls that allow you to query the catalog." } ] } diff --git a/core/examples/json/crawlable_catalogue/collection.json b/core/examples/json/crawlable_catalog/collection.json similarity index 100% rename from core/examples/json/crawlable_catalogue/collection.json rename to core/examples/json/crawlable_catalog/collection.json diff --git a/core/examples/json/crawlable_catalog/dataset_example/README.md b/core/examples/json/crawlable_catalog/dataset_example/README.md new file mode 100644 index 00000000..47fca35f --- /dev/null +++ b/core/examples/json/crawlable_catalog/dataset_example/README.md @@ -0,0 +1 @@ +TODO: Need to add a crawlable catalog example for datasets (e.g. a set of SHAPE files or GeoPackages, etc.). diff --git a/core/examples/json/crawlable_catalogue/dataset_example/nz-building-outlines.xml b/core/examples/json/crawlable_catalog/dataset_example/nz-building-outlines.xml similarity index 100% rename from core/examples/json/crawlable_catalogue/dataset_example/nz-building-outlines.xml rename to core/examples/json/crawlable_catalog/dataset_example/nz-building-outlines.xml diff --git a/core/examples/json/crawlable_catalogue/dataset_example/nz-buildings-collection.json b/core/examples/json/crawlable_catalog/dataset_example/nz-buildings-collection.json similarity index 100% rename from core/examples/json/crawlable_catalogue/dataset_example/nz-buildings-collection.json rename to core/examples/json/crawlable_catalog/dataset_example/nz-buildings-collection.json diff --git a/core/examples/json/crawlable_catalogue/dataset_example/nz-buildings-record.json b/core/examples/json/crawlable_catalog/dataset_example/nz-buildings-record.json similarity index 100% rename from core/examples/json/crawlable_catalogue/dataset_example/nz-buildings-record.json rename to core/examples/json/crawlable_catalog/dataset_example/nz-buildings-record.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/collection.json b/core/examples/json/crawlable_catalog/imagery_example/collection.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/collection.json rename to core/examples/json/crawlable_catalog/imagery_example/collection.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/raw/2012-05-13/RS1_M0000676_F2N_20120513_225701_HH_RAW.json b/core/examples/json/crawlable_catalog/imagery_example/raw/2012-05-13/RS1_M0000676_F2N_20120513_225701_HH_RAW.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/raw/2012-05-13/RS1_M0000676_F2N_20120513_225701_HH_RAW.json rename to core/examples/json/crawlable_catalog/imagery_example/raw/2012-05-13/RS1_M0000676_F2N_20120513_225701_HH_RAW.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/raw/collection.json b/core/examples/json/crawlable_catalog/imagery_example/raw/collection.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/raw/collection.json rename to core/examples/json/crawlable_catalog/imagery_example/raw/collection.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/scn/collection.json b/core/examples/json/crawlable_catalog/imagery_example/scn/collection.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/scn/collection.json rename to core/examples/json/crawlable_catalog/imagery_example/scn/collection.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/scw/collection.json b/core/examples/json/crawlable_catalog/imagery_example/scw/collection.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/scw/collection.json rename to core/examples/json/crawlable_catalog/imagery_example/scw/collection.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/sgf/collection.json b/core/examples/json/crawlable_catalog/imagery_example/sgf/collection.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/sgf/collection.json rename to core/examples/json/crawlable_catalog/imagery_example/sgf/collection.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/sgx/collection.json b/core/examples/json/crawlable_catalog/imagery_example/sgx/collection.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/sgx/collection.json rename to core/examples/json/crawlable_catalog/imagery_example/sgx/collection.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/slc/2012-05-13/RS1_M0630938_F2N_20120513_225708_HH_SLC.json b/core/examples/json/crawlable_catalog/imagery_example/slc/2012-05-13/RS1_M0630938_F2N_20120513_225708_HH_SLC.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/slc/2012-05-13/RS1_M0630938_F2N_20120513_225708_HH_SLC.json rename to core/examples/json/crawlable_catalog/imagery_example/slc/2012-05-13/RS1_M0630938_F2N_20120513_225708_HH_SLC.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/slc/2012-06-14/RS1_M0634795_F3F_20120614_110311_HH_SLC.json b/core/examples/json/crawlable_catalog/imagery_example/slc/2012-06-14/RS1_M0634795_F3F_20120614_110311_HH_SLC.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/slc/2012-06-14/RS1_M0634795_F3F_20120614_110311_HH_SLC.json rename to core/examples/json/crawlable_catalog/imagery_example/slc/2012-06-14/RS1_M0634795_F3F_20120614_110311_HH_SLC.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/slc/2012-06-14/RS1_M0634796_F3F_20120614_110317_HH_SLC.json b/core/examples/json/crawlable_catalog/imagery_example/slc/2012-06-14/RS1_M0634796_F3F_20120614_110317_HH_SLC.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/slc/2012-06-14/RS1_M0634796_F3F_20120614_110317_HH_SLC.json rename to core/examples/json/crawlable_catalog/imagery_example/slc/2012-06-14/RS1_M0634796_F3F_20120614_110317_HH_SLC.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/slc/2012-10-12/RS1_M0634798_F3F_20121012_110325_HH_SLC.json b/core/examples/json/crawlable_catalog/imagery_example/slc/2012-10-12/RS1_M0634798_F3F_20121012_110325_HH_SLC.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/slc/2012-10-12/RS1_M0634798_F3F_20121012_110325_HH_SLC.json rename to core/examples/json/crawlable_catalog/imagery_example/slc/2012-10-12/RS1_M0634798_F3F_20121012_110325_HH_SLC.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/slc/2012-10-12/RS1_M0634799_F3F_20121012_110331_HH_SLC.json b/core/examples/json/crawlable_catalog/imagery_example/slc/2012-10-12/RS1_M0634799_F3F_20121012_110331_HH_SLC.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/slc/2012-10-12/RS1_M0634799_F3F_20121012_110331_HH_SLC.json rename to core/examples/json/crawlable_catalog/imagery_example/slc/2012-10-12/RS1_M0634799_F3F_20121012_110331_HH_SLC.json diff --git a/core/examples/json/crawlable_catalogue/imagery_example/slc/collection.json b/core/examples/json/crawlable_catalog/imagery_example/slc/collection.json similarity index 100% rename from core/examples/json/crawlable_catalogue/imagery_example/slc/collection.json rename to core/examples/json/crawlable_catalog/imagery_example/slc/collection.json diff --git a/core/examples/json/crawlable_catalogue/dataset_example/README.md b/core/examples/json/crawlable_catalogue/dataset_example/README.md deleted file mode 100644 index 515771cb..00000000 --- a/core/examples/json/crawlable_catalogue/dataset_example/README.md +++ /dev/null @@ -1 +0,0 @@ -TODO: Need to add a crawlable catalogue example for datasets (e.g. a set of SHAPE files or GeoPackages, etc.). diff --git a/core/examples/json/defaultSortOrder.json b/core/examples/json/defaultSortOrder.json index 0374652b..1627b13e 100644 --- a/core/examples/json/defaultSortOrder.json +++ b/core/examples/json/defaultSortOrder.json @@ -1,14 +1,14 @@ { "id": "sentinel1cat", "itemType": "record", - "title": "Sentinel-1 Catalogue", - "description": "A sample catalogue of Sentinel-1 products stored in S3 on AWS.", + "title": "Sentinel-1 Catalog", + "description": "A sample catalog of Sentinel-1 products stored in S3 on AWS.", "defaultSortOrder": [ "-updated", "-area"], "links": [ { - "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogues/collections/sentinel1cat/items", + "href": "http://www.pvretano.com/cubewerx/cubeserv/default/ogcapi/catalogs/collections/sentinel1cat/items", "rel": "items", - "title": "Catalogue records describing SENTINEL-1 products." + "title": "Catalog records describing SENTINEL-1 products." } ] } diff --git a/core/examples/json/record-collection.json b/core/examples/json/record-collection.json index e24fef23..5b6a696a 100644 --- a/core/examples/json/record-collection.json +++ b/core/examples/json/record-collection.json @@ -13,56 +13,56 @@ ], "links": [ { - "href": "https://example.org/collections/myCatalogue?f=json...", + "href": "https://example.org/collections/myCatalog?f=json...", "rel": "collection", "type": "application/geo+json", "title": "Link to the containing collection in JSON" }, { - "href": "https://example.org/collections/myCatalogue?f=html...", + "href": "https://example.org/collections/myCatalog?f=html...", "rel": "collection", "type": "text/html", "title": "Link to the containing collection in HTML" }, { - "href": "https://example.org/collections/myCatalogue?f=xml...", + "href": "https://example.org/collections/myCatalog?f=xml...", "rel": "collection", "type": "text/xml", "title": "Link to the containing collection in XML" }, { - "href": "https://example.org/collections/myCatalogue/items?f=json&...", + "href": "https://example.org/collections/myCatalog/items?f=json&...", "rel": "self", "type": "application/geo+json", "title": "Link to this response" }, { - "href": "https://example.org/collections/myCatalogue/items?f=html&...", + "href": "https://example.org/collections/myCatalog/items?f=html&...", "rel": "alternate", "type": "text/html", "title": "Link to this response in HTML" }, { - "href": "https://example.org/collections/myCatalogue/items?f=atom&...", + "href": "https://example.org/collections/myCatalog/items?f=atom&...", "rel": "alternate", "type": "application/atom+xml", "title": "Link to this response in ATOM (i.e. as an ATOM feed)" }, { - "href": "https://example.org/collections/myCatalogue/items?f=json&startIndex=20&limit=10...", + "href": "https://example.org/collections/myCatalog/items?f=json&startIndex=20&limit=10...", "rel": "next", "type": "application/geo+json", "title": "Link to the next set of records in GeoJSON" }, { - "href": "https://example.org/collections/myCatalogue/items?f=html&startIndex=20&limit=10...", + "href": "https://example.org/collections/myCatalog/items?f=html&startIndex=20&limit=10...", "rel": "next", "type": "text/html", "title": "Link to the next set of records in HTML" }, { - "href": "https://example.org/collections/myCatalogue/items?f=atom&startIndex=20&limit=10...", + "href": "https://example.org/collections/myCatalog/items?f=atom&startIndex=20&limit=10...", "rel": "next", "type": "application/atom+xml", "title": "Link to the next set of records in ATOM (i.e. as an ATOM feed)" diff --git a/core/examples/openapi/ogcapi-records-1-example1.yaml b/core/examples/openapi/ogcapi-records-1-example1.yaml index 3f6ab7c6..7d869276 100644 --- a/core/examples/openapi/ogcapi-records-1-example1.yaml +++ b/core/examples/openapi/ogcapi-records-1-example1.yaml @@ -52,7 +52,7 @@ paths: '/conformance': get: tags: - - Capabilities + - Conformance summary: information about specifications that this API conforms to description: |- A list of all conformance classes specified in a standard that the @@ -66,7 +66,7 @@ paths: '/collections': get: tags: - - Capabilities + - Collections summary: the record collections in the dataset operationId: getCollections responses: @@ -74,15 +74,15 @@ paths: $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/Collections' '500': $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/ServerError' - '/collections/{collectionId}': + '/collections/{catalogId}': get: tags: - - Capabilities + - Collection summary: |- - describe the record collection with id `collectionId` + describe the record collection with id `catalogId` operationId: describeCollection parameters: - - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/collectionId' + - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/catalogId' responses: '200': $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/Collection' @@ -90,23 +90,7 @@ paths: $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/NotFound' '500': $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/ServerError' - '/collections/{collectionId}/api': - get: - tags: - - OpenSearchDescriptionDocument - summary: |- - get the OpenSearchDescriptionDocument for the record collection with id `collectionId` - operationId: getOpenSearchDescriptionDocument - parameters: - - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/collectionId' - responses: - '200': - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/OpenSearchDescriptionDocument' - '404': - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/NotFound' - '500': - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/ServerError' - '/collections/{collectionId}/sortables': + '/collections/{catalogId}/sortables': get: tags: - Sortables @@ -114,7 +98,7 @@ paths: get the list of sortable properties operationId: getSortables parameters: - - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/collectionId' + - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/catalogId' responses: '200': $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/Sortables' @@ -122,13 +106,13 @@ paths: $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/NotFound' '500': $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/ServerError' - '/collections/{collectionId}/items': + '/collections/{catalogId}/items': get: tags: - - Data + - Records summary: fetch records description: |- - Fetch records of the record collection with id `collectionId`. + 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 @@ -137,7 +121,7 @@ paths: Use content negotiation to request HTML or GeoJSON. operationId: getRecords parameters: - - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/collectionId' + - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/catalogId' - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/bbox' - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/datetime' - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/limit' @@ -154,23 +138,23 @@ paths: $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/NotFound' '500': $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/ServerError' - '/collections/{collectionId}/items/{recordId}': + '/collections/{catalogId}/items/{recordId}': get: tags: - - Data + - Record summary: fetch a single record description: |- Fetch the record with id `recordId` in the record collection - with id `collectionId`. + with id `catalogId`. Use content negotiation to request HTML or GeoJSON. - operationId: getFeature + operationId: getRecord parameters: - - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/collectionId' + - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/catalogId' - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/parameters/recordId' responses: '200': - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/Feature' + $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/Record' '404': $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/openapi/ogcapi-records-1.yaml#/components/responses/NotFound' '500': diff --git a/core/openapi/ogcapi-records-1.yaml b/core/openapi/ogcapi-records-1.yaml index db1f6991..f4d7959e 100644 --- a/core/openapi/ogcapi-records-1.yaml +++ b/core/openapi/ogcapi-records-1.yaml @@ -1,124 +1,92 @@ ---- -openapi: 3.0.3 +openapi: 3.0.2 info: - title: "Building Blocks specified in OGC API - Records - Part 1: Core" + 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.ogc.org/DRAFTS/20-004.html). + [OGC standard "OGC API - Records - Part 1: Core"](http://docs.opengeospatial.org/is/20-004/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/ . + Copyright (c) 2019 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.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 + name: Panagiotis Vretanos + email: pvretano@cubewerx.com license: name: OGC License - url: 'https://www.ogc.org/legal/' + url: 'http://www.opengeospatial.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 + - type: array + minItems: 4 maxItems: 4 - - minItems: 6 + items: + type: number + - type: array + minItems: 6 maxItems: 6 - items: - type: number + items: + type: number style: form explode: false + catalogId: + name: catalogId + in: path + required: true + schema: + type: string 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 + externalId: + name: externalId + in: query + required: false + schema: + type: array: + items: + type: string + explode: false + style: form + language: + name: language + in: query + schema: + type: array + items: + type: string + 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]+))?$" + example: 'de;q=0.7' + explode: false + style: form 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 + 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 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 @@ -126,287 +94,403 @@ components: 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 + recordId: + name: recordId + in: path + required: true schema: - type: array - items: - type: string - explode: false - style: form - externalId: - name: externalId + type: string + sortby: + name: sortby 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 + minItems: 1 items: type: string + pattern: '[+|-]?[A-Za-z_].*' explode: false style: form - sortby: - name: sortby + type: + name: type 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 + style: form schemas: - collectionInfo: + common: + collectionInfo: + allOf: + - $ref: "#/components/schemas/common/links" + - type: object + required: + - id + - links + - itemType + properties: + id: + type: string + title: + type: string + description: + type: string + extent: + $ref: "#/components/schemas/common/extent" + itemType: + type: string + enum: + - collection + - record + crs: + type: array + items: + type: string + default: + - http://www.opengis.net/def/crs/OGC/1.3/CRS84 + defaultSortOrder: + type: array + items: + type: string + collections: + allOf: + - $ref: "#/components/schemas/common/links" + - type: object + required: + - links + - collections + properties: + collections: + type: array + items: + $ref: "#components/schemas/catalog" + confClasses: + type: object + required: + - conformsTo + properties: + conformsTo: + type: array + items: + type: string + exception: + type: object + required: + - code + properties: + code: + type: string + description: + type: string + extent: + type: object + properties: + spatial: + type: object + properties: + bbox: + type: array + minItems: 1 + items: + type: array + minItems: 4 + maxItems: 6 + items: + type: number + example: + - -180 + - -90 + - 180 + - 90 + crs: + 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: + type: object + properties: + interval: + type: array + minItems: 1 + items: + type: array + minItems: 2 + maxItems: 2 + items: + type: string + format: date-time + nullable: true + example: + - '2011-11-11T12:22:11Z' + - null + resolution: + type: string + trs: + type: string + enum: + - 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' + default: 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' + landingPage: + allOf: + - $ref: "#/components/schemas/common/link.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. + linkBase: + type: object + properties: + rel: + type: string + example: alternate + type: + type: string + example: application/geo+json + hreflang: + type: string + example: en + title: + type: string + example: "Trierer Strasse 70, 53115 Bonn" + length: + type: integer + created: + type: string + format: date-time + updated: + type: string + format: date-time + links: + type: object + properties: + links: + type: array + items: + $ref: "#/components/schemas/common/link" + linkTemplates: + type: array + items: + $ref: "#/components/schemas/common/linkTemplate" + linkTemplate: + allOf: + - $ref: "#/components/schemas/common/linkBase" + - type: object + required: link-template + properties: + link-template: + type: string + example: http://data.example.com/buildings/(building-id} + variables: + type: object + varBase: + type: string + format: url + link: + allOf: + - $ref: "#/components/schemas/common/linkBase" + - type: object + required: href + properties: + href: + type: string + format: url + example: http://data.example.com/buildings/123 + catalog: + allOf: + $ref: "#/components/schemas/common/collectionInfo" + type: object + required: + - title + - type + - itemType + properties: + type: + type: string + enum: + - catalog + itemType: + oneOf: + - type: string + enum: + - record + - type: array + items: + type: string + enum: + - record + - catalog + - collection + - other + conformsTo: + $ref: "#/components/schemas/confClasses" + created: + type: string + format: date-time + updated: + type: string + format: date-time + keywords: + type: array + items: + type: string + language: + $ref: language.yaml + languages: + type: array + items: + $ref: language.yaml + themes: + type: array + minItems: 1 + items: + $ref: theme.yaml + contacts: + type: array + items: + $ref: contact.yaml + license: + $ref: license.yaml + rights: + type: string + additionalProperties: true + contact: type: object - required: - - id - - links + anyOf: + - required: + - name + - required: + - organization properties: - id: - description: identifier of the collection used, for example, in URIs + identifier: type: string - title: - description: human readable title of the collection + name: type: string - description: - description: a description of the records in the collection + position: type: string - links: - type: array - items: - $ref: "#/components/schemas/link" - linkTemplates: - type: array - items: - $ref: "#/components/schemas/linkTemplate" - 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). + organization: type: string - default: record - crs: - description: |- - the list of coordinate reference systems supported by the service + logo: + allOf: + - $ref: common/link.yaml + - type: object + required: + - rel + - type + properties: + rel: + enum: + - icon + phones: 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" - linkTemplates: + type: object + required: + - value + properties: + value: + type: string + description: The value is the phone number itself. + pattern: "^\\+[1-9]{1}[0-9]{3,14}$" + example: "+14165550142" + roles: + $ref: roles.yaml + emails: type: array items: - $ref: "#/components/schemas/linkTemplate" - collections: + type: object + required: + - value + properties: + value: + type: string + format: email + roles: + $ref: roles.yaml + addresses: type: array items: - $ref: "#/components/schemas/collectionInfo" - confClasses: - type: object - required: - - conformsTo - properties: - conformsTo: + type: object + properties: + deliveryPoint: + + type: array + items: + type: string + city: + type: string + administrativeArea: + type: string + postalCode: + type: string + country: + type: string + roles: + $ref: roles.yaml + links: type: array items: - type: string - exception: - type: object - description: |- - information about the exception; an error code plus an optional - description. - required: - - code - properties: - code: + allOf: + - $ref: common/link.yaml + - type: object + required: + - type + hoursOfService: type: string - description: + example: "Hours: Mo-Fr 10am-7pm Sa 10am-22pm Su 10am-21pm" + contactInstructions: 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 + roles: + $ref: roles.yaml + featureCollectionGeoJSON: + allOf: + - $ref: "#/components/schemas/common/links" + - type: object + required: + - type + - features 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: 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. + - FeatureCollection + features: 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. + $ref: "#/components/schemas/recordGeoJSON" + timeStamp: 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: + format: date-time + numberMatched: + type: integer + minimum: 0 + numberReturned: + type: integer + minimum: 0 + geometrycollectionGeoJSON: type: object required: - type - - features + - geometries properties: type: type: string enum: - - FeatureCollection - features: - type: array - items: - $ref: "#/components/schemas/recordGeoJSON" - links: + - GeometryCollection + geometries: 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" + $ref: "#/components/schemas/geometryGeoJSON" geometryGeoJSON: oneOf: - $ref: "#/components/schemas/pointGeoJSON" @@ -416,37 +500,28 @@ components: - $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: + language: type: object required: - - links + - code properties: - title: - type: string - description: + code: type: string - links: - type: array - items: - $ref: "#/components/schemas/link" - linkTemplates: - type: array - items: - $ref: "#/components/schemas/linkTemplate" + name: + type: string + minLength: 1 + alternate: + type: string + dir: + type: string + enum: + - ltr + - rtl + - ttb + - btt + default: ltr + license: + type: string linestringGeoJSON: type: object required: @@ -465,42 +540,6 @@ components: 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 - created: - type: string - format: date-time - updated: - type: string - format: date-time - linkTemplate: - allOf: - - $ref: "#/components/schemas/link" - - oneOf: - - type: object - properties: - variables: - type: object - - type: object - properties: - varBase: - type: string - format: url multilinestringGeoJSON: type: object required: @@ -560,23 +599,6 @@ components: 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: @@ -612,215 +634,251 @@ components: minItems: 2 items: type: number - sortable: + recordGeoJSON: + allOf: + - $ref: "#/components/schemas/common/links" + - type: object + required: + - id + - type + - time + - geometry + - properties + - links + properties: + id: + type: string + format: uri + conformsTo: + $ref: "#/components/schemas/common/conformsTo" + type: + type: string + enum: + - Feature + time: + $ref: time.yaml + geometry: + oneOf: + - enum: + - null + - $ref: "#/components/schemas/geometryGeoJSON" + properties: + type: object + required: + - type + - title + properties: + created: + type: string + format: date-time + updated: + type: string + format: date-time + type: + type: string + maxLength: 64 + title: + type: string + description: + type: string + keywords: + type: array + items: + type: string + language: + $ref: language.yaml + languages: + type: array + items: + $ref: language.yaml + resourceLanguages: + type: array + items: + $ref: language.yaml + externalIds: + type: array + items: + type: object + properties: + scheme: + type: string + value: + type: string + required: + - value + themes: + type: array + minItems: 1 + items: + $ref: theme.yaml + formats: + type: array + items: + type: string + contacts: + type: array + items: + $ref: contact.yaml + license: + $ref: license.yaml + rights: + type: string + roles: + type: array + minItems: 1 + items: + type: string + theme: type: object required: - - id + - concepts + - scheme properties: - id: - description: the identifier/name for the sortable - type: string - title: - description: a human readable title for the sortable + concepts: + type: array + minItems: 1 + items: + type: object + required: + - id + properties: + id: + type: string + title: + type: string + description: + type: string + url: + type: string + format: uri + scheme: type: string - description: - description: a human-readable narrative describing the sortable + time: + type: object + nullable: true + properties: + date: type: string - language: - description: the language used for the title and description + pattern: "^\\d{4}-\\d{2}-\\d{2}$" + timestamp: type: string - links: + pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" + interval: type: array + minItems: 2 + maxItems: 2 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' + 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 + example: + - 'P1D' 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`). + Collections: content: application/json: schema: - $ref: '#/components/schemas/landingPage' + $ref: '#/components/schemas/collections' 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. + Collection: content: application/json: schema: - $ref: '#/components/schemas/confClasses' + $ref: '#/components/schemas/catalog' 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'). + ConformanceDeclaration: content: application/json: schema: - $ref: '#/components/schemas/collections' + $ref: '#/components/schemas/common/confClasses' + example: + conformsTo: + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/crawlable-catalog' + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/searchable-catalog' + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/local-resources-catalog' + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/record-core' + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/record-collection' + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/record-api' + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/sorting' + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/cql' + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/json' + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/html' + - 'http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/autodiscovery' 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'). + InvalidParameter: content: application/json: schema: - $ref: '#/components/schemas/collectionInfo' + $ref: '#/components/schemas/common/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`). - - The XML representation of the response document is an ATOM feed. + LandingPage: content: - application/geo+json: + application/json: schema: - $ref: '#/components/schemas/featureCollectionGeoJSON' + $ref: '#/components/schemas/common/landingPage' text/html: schema: type: string - application/atom+xml: + NotAcceptable: + content: + application/json: + schema: + $ref: "#/components/schemas/common/exception" + text/html: 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. + NotFound: content: - application/geo+json: + application/json: schema: - $ref: '#/components/schemas/recordGeoJSON' + $ref: "#/components/schemas/common/exception" text/html: schema: type: string - application/atom+xml: + Records: + content: + application/geo+json: + schema: + $ref: '#/components/schemas/featureCollectionGeoJSON' + text/html: schema: type: string - Sortables: - description: |- - Fetch the list of sortable properties. + Record: content: - application/json: + application/geo+json: schema: - type: array - items: - $ref: "#/components/schemas/sortable" - OpenSearchDescriptionDocument: - description: |- - description document for OpenSearch clients - content: - application/opensearchdescription+xml: + $ref: '#/components/schemas/recordGeoJSON' + text/html: schema: type: string - InvalidParameter: - description: |- - A query parameter has an invalid value. + ServerError: content: application/json: schema: - $ref: '#/components/schemas/exception' + $ref: '#/components/schemas/common/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. + Sortables: content: application/json: schema: - $ref: '#/components/schemas/exception' + type: object text/html: schema: type: string diff --git a/core/openapi/parameters/externalId.yaml b/core/openapi/parameters/externalId.yaml index 5c08d754..735e5a7e 100644 --- a/core/openapi/parameters/externalId.yaml +++ b/core/openapi/parameters/externalId.yaml @@ -3,7 +3,7 @@ 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). + that was not assigned by the catalog (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. diff --git a/core/openapi/responses/Collection.yaml b/core/openapi/responses/Collection.yaml index 3b21efb0..bffc815c 100644 --- a/core/openapi/responses/Collection.yaml +++ b/core/openapi/responses/Collection.yaml @@ -8,7 +8,7 @@ description: |- includes: * A local identifier for the collection that is unique for the + - catalogue; + 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 + @@ -22,7 +22,7 @@ description: |- content: application/json: schema: - $ref: '../schemas/common/collectionInfo.yaml' + $ref: '../schemas/catalog.yaml' text/html: schema: type: string diff --git a/core/openapi/responses/Collections.yaml b/core/openapi/responses/Collections.yaml new file mode 100644 index 00000000..0f8c6fb6 --- /dev/null +++ b/core/openapi/responses/Collections.yaml @@ -0,0 +1,8 @@ +--- +content: + application/json: + schema: + $ref: '../schemas/collections.yaml' + text/html: + schema: + type: string diff --git a/core/openapi/responses/Sortables.yaml b/core/openapi/responses/Sortables.yaml index 711c1309..85b14bc9 100644 --- a/core/openapi/responses/Sortables.yaml +++ b/core/openapi/responses/Sortables.yaml @@ -1,6 +1,8 @@ --- -type: object -title: Sortables -description: Describes the properties that can be used to sort the results -additionalProperties: - $ref: 'https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v3.0/schema.json#/definitions/Schema' +content: + application/json: + schema: + $ref: '../schema/schema.yaml' + text/html: + schema: + type: string diff --git a/core/openapi/schemas/common/collections.yaml b/core/openapi/schemas/collections.yaml similarity index 82% rename from core/openapi/schemas/common/collections.yaml rename to core/openapi/schemas/collections.yaml index 5f0bab3a..29bb2272 100644 --- a/core/openapi/schemas/common/collections.yaml +++ b/core/openapi/schemas/collections.yaml @@ -9,4 +9,4 @@ allOf: collections: type: array items: - $ref: collectionInfo.yaml + $ref: catalog.yaml diff --git a/core/openapi/schemas/featureCollectionGeoJSON.yaml b/core/openapi/schemas/featureCollectionGeoJSON.yaml index 1329e867..6ae56f43 100644 --- a/core/openapi/schemas/featureCollectionGeoJSON.yaml +++ b/core/openapi/schemas/featureCollectionGeoJSON.yaml @@ -13,7 +13,7 @@ allOf: features: type: array items: - $ref: record.yaml + $ref: recordGeoJSON.yaml timeStamp: type: string format: date-time diff --git a/core/openapi/schemas/license.yaml b/core/openapi/schemas/license.yaml index 00f23e54..d4071d1e 100644 --- a/core/openapi/schemas/license.yaml +++ b/core/openapi/schemas/license.yaml @@ -14,5 +14,5 @@ description: 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 catalogue in the first place since there is no point in making + in the catalog in the first place since there is no point in making such a resource discoverable. diff --git a/core/openapi/schemas/recordGeoJSON.yaml b/core/openapi/schemas/recordGeoJSON.yaml index 77a96f5b..417781b4 100644 --- a/core/openapi/schemas/recordGeoJSON.yaml +++ b/core/openapi/schemas/recordGeoJSON.yaml @@ -13,7 +13,7 @@ allOf: id: type: string description: - A unique identifier of the catalogue record. + A unique identifier of the catalog record. format: uri conformsTo: $ref: common/confClasses.yaml#/properties/conformsTo @@ -88,7 +88,7 @@ allOf: type: array description: An identifier for the resource assigned by an external (to the - catalogue) entity. + catalog) entity. items: type: object properties: diff --git a/core/openapi/schemas/schema.yaml b/core/openapi/schemas/schema.yaml new file mode 100644 index 00000000..077c05cd --- /dev/null +++ b/core/openapi/schemas/schema.yaml @@ -0,0 +1,1026 @@ +id: https://spec.openapis.org/oas/3.0/schema/2021-09-28 +$schema: http://json-schema.org/draft-04/schema# +description: The description of OpenAPI v3.0.x documents, as defined by https://spec.openapis.org/oas/v3.0.3 +type: object +required: + - openapi + - info + - paths +properties: + openapi: + type: string + pattern: ^3\.0\.\d(-.+)?$ + info: + $ref: '#/definitions/Info' + externalDocs: + $ref: '#/definitions/ExternalDocumentation' + servers: + type: array + items: + $ref: '#/definitions/Server' + security: + type: array + items: + $ref: '#/definitions/SecurityRequirement' + tags: + type: array + items: + $ref: '#/definitions/Tag' + uniqueItems: true + paths: + $ref: '#/definitions/Paths' + components: + $ref: '#/definitions/Components' +patternProperties: + '^x-': {} +additionalProperties: false +definitions: + Reference: + type: object + required: + - $ref + patternProperties: + '^\$ref$': + type: string + format: uri-reference + Info: + type: object + required: + - title + - version + properties: + title: + type: string + description: + type: string + termsOfService: + type: string + format: uri-reference + contact: + $ref: '#/definitions/Contact' + license: + $ref: '#/definitions/License' + version: + type: string + patternProperties: + '^x-': {} + additionalProperties: false + + + Contact: + type: object + properties: + name: + type: string + url: + type: string + format: uri-reference + email: + type: string + format: email + patternProperties: + '^x-': {} + additionalProperties: false + + License: + type: object + required: + - name + properties: + name: + type: string + url: + type: string + format: uri-reference + patternProperties: + '^x-': {} + additionalProperties: false + + Server: + type: object + required: + - url + properties: + url: + type: string + description: + type: string + variables: + type: object + additionalProperties: + $ref: '#/definitions/ServerVariable' + patternProperties: + '^x-': {} + additionalProperties: false + + ServerVariable: + type: object + required: + - default + properties: + enum: + type: array + items: + type: string + default: + type: string + description: + type: string + patternProperties: + '^x-': {} + additionalProperties: false + + Components: + type: object + properties: + schemas: + type: object + patternProperties: + '^[a-zA-Z0-9\.\-_]+$': + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + responses: + type: object + patternProperties: + '^[a-zA-Z0-9\.\-_]+$': + oneOf: + - $ref: '#/definitions/Reference' + - $ref: '#/definitions/Response' + parameters: + type: object + patternProperties: + '^[a-zA-Z0-9\.\-_]+$': + oneOf: + - $ref: '#/definitions/Reference' + - $ref: '#/definitions/Parameter' + examples: + type: object + patternProperties: + '^[a-zA-Z0-9\.\-_]+$': + oneOf: + - $ref: '#/definitions/Reference' + - $ref: '#/definitions/Example' + requestBodies: + type: object + patternProperties: + '^[a-zA-Z0-9\.\-_]+$': + oneOf: + - $ref: '#/definitions/Reference' + - $ref: '#/definitions/RequestBody' + headers: + type: object + patternProperties: + '^[a-zA-Z0-9\.\-_]+$': + oneOf: + - $ref: '#/definitions/Reference' + - $ref: '#/definitions/Header' + securitySchemes: + type: object + patternProperties: + '^[a-zA-Z0-9\.\-_]+$': + oneOf: + - $ref: '#/definitions/Reference' + - $ref: '#/definitions/SecurityScheme' + links: + type: object + patternProperties: + '^[a-zA-Z0-9\.\-_]+$': + oneOf: + - $ref: '#/definitions/Reference' + - $ref: '#/definitions/Link' + callbacks: + type: object + patternProperties: + '^[a-zA-Z0-9\.\-_]+$': + oneOf: + - $ref: '#/definitions/Reference' + - $ref: '#/definitions/Callback' + patternProperties: + '^x-': {} + additionalProperties: false + + Schema: + type: object + properties: + title: + type: string + multipleOf: + type: number + minimum: 0 + exclusiveMinimum: true + maximum: + type: number + exclusiveMaximum: + type: boolean + default: false + minimum: + type: number + exclusiveMinimum: + type: boolean + default: false + maxLength: + type: integer + minimum: 0 + minLength: + type: integer + minimum: 0 + default: 0 + pattern: + type: string + format: regex + maxItems: + type: integer + minimum: 0 + minItems: + type: integer + minimum: 0 + default: 0 + uniqueItems: + type: boolean + default: false + maxProperties: + type: integer + minimum: 0 + minProperties: + type: integer + minimum: 0 + default: 0 + required: + type: array + items: + type: string + minItems: 1 + uniqueItems: true + enum: + type: array + items: {} + minItems: 1 + uniqueItems: false + type: + type: string + enum: + - array + - boolean + - integer + - number + - object + - string + not: + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + allOf: + type: array + items: + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + oneOf: + type: array + items: + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + anyOf: + type: array + items: + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + items: + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + properties: + type: object + additionalProperties: + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + additionalProperties: + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + - type: boolean + default: true + description: + type: string + format: + type: string + default: {} + nullable: + type: boolean + default: false + discriminator: + $ref: '#/definitions/Discriminator' + readOnly: + type: boolean + default: false + writeOnly: + type: boolean + default: false + example: {} + externalDocs: + $ref: '#/definitions/ExternalDocumentation' + deprecated: + type: boolean + default: false + xml: + $ref: '#/definitions/XML' + patternProperties: + '^x-': {} + additionalProperties: false + + Discriminator: + type: object + required: + - propertyName + properties: + propertyName: + type: string + mapping: + type: object + additionalProperties: + type: string + + XML: + type: object + properties: + name: + type: string + namespace: + type: string + format: uri + prefix: + type: string + attribute: + type: boolean + default: false + wrapped: + type: boolean + default: false + patternProperties: + '^x-': {} + additionalProperties: false + + Response: + type: object + required: + - description + properties: + description: + type: string + headers: + type: object + additionalProperties: + oneOf: + - $ref: '#/definitions/Header' + - $ref: '#/definitions/Reference' + content: + type: object + additionalProperties: + $ref: '#/definitions/MediaType' + links: + type: object + additionalProperties: + oneOf: + - $ref: '#/definitions/Link' + - $ref: '#/definitions/Reference' + patternProperties: + '^x-': {} + additionalProperties: false + + MediaType: + type: object + properties: + schema: + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + example: {} + examples: + type: object + additionalProperties: + oneOf: + - $ref: '#/definitions/Example' + - $ref: '#/definitions/Reference' + encoding: + type: object + additionalProperties: + $ref: '#/definitions/Encoding' + patternProperties: + '^x-': {} + additionalProperties: false + allOf: + - $ref: '#/definitions/ExampleXORExamples' + + Example: + type: object + properties: + summary: + type: string + description: + type: string + value: {} + externalValue: + type: string + format: uri-reference + patternProperties: + '^x-': {} + additionalProperties: false + + Header: + type: object + properties: + description: + type: string + required: + type: boolean + default: false + deprecated: + type: boolean + default: false + allowEmptyValue: + type: boolean + default: false + style: + type: string + enum: + - simple + default: simple + explode: + type: boolean + allowReserved: + type: boolean + default: false + schema: + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + content: + type: object + additionalProperties: + $ref: '#/definitions/MediaType' + minProperties: 1 + maxProperties: 1 + example: {} + examples: + type: object + additionalProperties: + oneOf: + - $ref: '#/definitions/Example' + - $ref: '#/definitions/Reference' + patternProperties: + '^x-': {} + additionalProperties: false + allOf: + - $ref: '#/definitions/ExampleXORExamples' + - $ref: '#/definitions/SchemaXORContent' + + Paths: + type: object + patternProperties: + '^\/': + $ref: '#/definitions/PathItem' + '^x-': {} + additionalProperties: false + + PathItem: + type: object + properties: + $ref: + type: string + summary: + type: string + description: + type: string + get: + $ref: '#/definitions/Operation' + put: + $ref: '#/definitions/Operation' + post: + $ref: '#/definitions/Operation' + delete: + $ref: '#/definitions/Operation' + options: + $ref: '#/definitions/Operation' + head: + $ref: '#/definitions/Operation' + patch: + $ref: '#/definitions/Operation' + trace: + $ref: '#/definitions/Operation' + servers: + type: array + items: + $ref: '#/definitions/Server' + parameters: + type: array + items: + oneOf: + - $ref: '#/definitions/Parameter' + - $ref: '#/definitions/Reference' + uniqueItems: true + patternProperties: + '^x-': {} + additionalProperties: false + + Operation: + type: object + required: + - responses + properties: + tags: + type: array + items: + type: string + summary: + type: string + description: + type: string + externalDocs: + $ref: '#/definitions/ExternalDocumentation' + operationId: + type: string + parameters: + type: array + items: + oneOf: + - $ref: '#/definitions/Parameter' + - $ref: '#/definitions/Reference' + uniqueItems: true + requestBody: + oneOf: + - $ref: '#/definitions/RequestBody' + - $ref: '#/definitions/Reference' + responses: + $ref: '#/definitions/Responses' + callbacks: + type: object + additionalProperties: + oneOf: + - $ref: '#/definitions/Callback' + - $ref: '#/definitions/Reference' + deprecated: + type: boolean + default: false + security: + type: array + items: + $ref: '#/definitions/SecurityRequirement' + servers: + type: array + items: + $ref: '#/definitions/Server' + patternProperties: + '^x-': {} + additionalProperties: false + + Responses: + type: object + properties: + default: + oneOf: + - $ref: '#/definitions/Response' + - $ref: '#/definitions/Reference' + patternProperties: + '^[1-5](?:\d{2}|XX)$': + oneOf: + - $ref: '#/definitions/Response' + - $ref: '#/definitions/Reference' + '^x-': {} + minProperties: 1 + additionalProperties: false + + + SecurityRequirement: + type: object + additionalProperties: + type: array + items: + type: string + + Tag: + type: object + required: + - name + properties: + name: + type: string + description: + type: string + externalDocs: + $ref: '#/definitions/ExternalDocumentation' + patternProperties: + '^x-': {} + additionalProperties: false + + ExternalDocumentation: + type: object + required: + - url + properties: + description: + type: string + url: + type: string + format: uri-reference + patternProperties: + '^x-': {} + additionalProperties: false + + ExampleXORExamples: + description: Example and examples are mutually exclusive + not: + required: [example, examples] + + SchemaXORContent: + description: Schema and content are mutually exclusive, at least one is required + not: + required: [schema, content] + oneOf: + - required: [schema] + - required: [content] + description: Some properties are not allowed if content is present + allOf: + - not: + required: [style] + - not: + required: [explode] + - not: + required: [allowReserved] + - not: + required: [example] + - not: + required: [examples] + + Parameter: + type: object + properties: + name: + type: string + in: + type: string + description: + type: string + required: + type: boolean + default: false + deprecated: + type: boolean + default: false + allowEmptyValue: + type: boolean + default: false + style: + type: string + explode: + type: boolean + allowReserved: + type: boolean + default: false + schema: + oneOf: + - $ref: '#/definitions/Schema' + - $ref: '#/definitions/Reference' + content: + type: object + additionalProperties: + $ref: '#/definitions/MediaType' + minProperties: 1 + maxProperties: 1 + example: {} + examples: + type: object + additionalProperties: + oneOf: + - $ref: '#/definitions/Example' + - $ref: '#/definitions/Reference' + patternProperties: + '^x-': {} + additionalProperties: false + required: + - name + - in + allOf: + - $ref: '#/definitions/ExampleXORExamples' + - $ref: '#/definitions/SchemaXORContent' + - $ref: '#/definitions/ParameterLocation' + + ParameterLocation: + description: Parameter location + oneOf: + - description: Parameter in path + required: + - required + properties: + in: + enum: [path] + style: + enum: [matrix, label, simple] + default: simple + required: + enum: [true] + + - description: Parameter in query + properties: + in: + enum: [query] + style: + enum: [form, spaceDelimited, pipeDelimited, deepObject] + default: form + + - description: Parameter in header + properties: + in: + enum: [header] + style: + enum: [simple] + default: simple + + - description: Parameter in cookie + properties: + in: + enum: [cookie] + style: + enum: [form] + default: form + + RequestBody: + type: object + required: + - content + properties: + description: + type: string + content: + type: object + additionalProperties: + $ref: '#/definitions/MediaType' + required: + type: boolean + default: false + patternProperties: + '^x-': {} + additionalProperties: false + + SecurityScheme: + oneOf: + - $ref: '#/definitions/APIKeySecurityScheme' + - $ref: '#/definitions/HTTPSecurityScheme' + - $ref: '#/definitions/OAuth2SecurityScheme' + - $ref: '#/definitions/OpenIdConnectSecurityScheme' + + APIKeySecurityScheme: + type: object + required: + - type + - name + - in + properties: + type: + type: string + enum: + - apiKey + name: + type: string + in: + type: string + enum: + - header + - query + - cookie + description: + type: string + patternProperties: + '^x-': {} + additionalProperties: false + + HTTPSecurityScheme: + type: object + required: + - scheme + - type + properties: + scheme: + type: string + bearerFormat: + type: string + description: + type: string + type: + type: string + enum: + - http + patternProperties: + '^x-': {} + additionalProperties: false + oneOf: + - description: Bearer + properties: + scheme: + type: string + pattern: ^[Bb][Ee][Aa][Rr][Ee][Rr]$ + + - description: Non Bearer + not: + required: [bearerFormat] + properties: + scheme: + not: + type: string + pattern: ^[Bb][Ee][Aa][Rr][Ee][Rr]$ + + OAuth2SecurityScheme: + type: object + required: + - type + - flows + properties: + type: + type: string + enum: + - oauth2 + flows: + $ref: '#/definitions/OAuthFlows' + description: + type: string + patternProperties: + '^x-': {} + additionalProperties: false + + OpenIdConnectSecurityScheme: + type: object + required: + - type + - openIdConnectUrl + properties: + type: + type: string + enum: + - openIdConnect + openIdConnectUrl: + type: string + format: uri-reference + description: + type: string + patternProperties: + '^x-': {} + additionalProperties: false + + OAuthFlows: + type: object + properties: + implicit: + $ref: '#/definitions/ImplicitOAuthFlow' + password: + $ref: '#/definitions/PasswordOAuthFlow' + clientCredentials: + $ref: '#/definitions/ClientCredentialsFlow' + authorizationCode: + $ref: '#/definitions/AuthorizationCodeOAuthFlow' + patternProperties: + '^x-': {} + additionalProperties: false + + ImplicitOAuthFlow: + type: object + required: + - authorizationUrl + - scopes + properties: + authorizationUrl: + type: string + format: uri-reference + refreshUrl: + type: string + format: uri-reference + scopes: + type: object + additionalProperties: + type: string + patternProperties: + '^x-': {} + additionalProperties: false + + PasswordOAuthFlow: + type: object + required: + - tokenUrl + - scopes + properties: + tokenUrl: + type: string + format: uri-reference + refreshUrl: + type: string + format: uri-reference + scopes: + type: object + additionalProperties: + type: string + patternProperties: + '^x-': {} + additionalProperties: false + + ClientCredentialsFlow: + type: object + required: + - tokenUrl + - scopes + properties: + tokenUrl: + type: string + format: uri-reference + refreshUrl: + type: string + format: uri-reference + scopes: + type: object + additionalProperties: + type: string + patternProperties: + '^x-': {} + additionalProperties: false + + AuthorizationCodeOAuthFlow: + type: object + required: + - authorizationUrl + - tokenUrl + - scopes + properties: + authorizationUrl: + type: string + format: uri-reference + tokenUrl: + type: string + format: uri-reference + refreshUrl: + type: string + format: uri-reference + scopes: + type: object + additionalProperties: + type: string + patternProperties: + '^x-': {} + additionalProperties: false + + Link: + type: object + properties: + operationId: + type: string + operationRef: + type: string + format: uri-reference + parameters: + type: object + additionalProperties: {} + requestBody: {} + description: + type: string + server: + $ref: '#/definitions/Server' + patternProperties: + '^x-': {} + additionalProperties: false + not: + description: Operation Id and Operation Ref are mutually exclusive + required: [operationId, operationRef] + + Callback: + type: object + additionalProperties: + $ref: '#/definitions/PathItem' + patternProperties: + '^x-': {} + + Encoding: + type: object + properties: + contentType: + type: string + headers: + type: object + additionalProperties: + oneOf: + - $ref: '#/definitions/Header' + - $ref: '#/definitions/Reference' + style: + type: string + enum: + - form + - spaceDelimited + - pipeDelimited + - deepObject + explode: + type: boolean + allowReserved: + type: boolean + default: false + patternProperties: + '^x-': {} + additionalProperties: false diff --git a/core/openapi/schemas/theme.yaml b/core/openapi/schemas/theme.yaml index 5d0ac5de..4e643a4f 100644 --- a/core/openapi/schemas/theme.yaml +++ b/core/openapi/schemas/theme.yaml @@ -35,7 +35,7 @@ properties: 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 catalogue can be determined by inspecting + 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 diff --git a/core/standard/abstract_tests/ATS_class_local-resources-catalog.adoc b/core/standard/abstract_tests/ATS_class_local-resources-catalog.adoc index 15fcd399..38738bad 100644 --- a/core/standard/abstract_tests/ATS_class_local-resources-catalog.adoc +++ b/core/standard/abstract_tests/ATS_class_local-resources-catalog.adoc @@ -4,7 +4,7 @@ 2+|*Conformance Class* 2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/local-resources-catalog |Target type |Web API -|Dependency |<> +|Dependency |<> |Requirements class |<> |=== diff --git a/core/standard/abstract_tests/ATS_class_searchable-catalog_crs.adoc b/core/standard/abstract_tests/ATS_class_searchable-catalog_crs.adoc index 094f3c8f..d80930cb 100644 --- a/core/standard/abstract_tests/ATS_class_searchable-catalog_crs.adoc +++ b/core/standard/abstract_tests/ATS_class_searchable-catalog_crs.adoc @@ -4,8 +4,8 @@ 2+|*Conformance Class* 2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/searchable-catalog/crs |Target type |Web API -|Dependency |<> -|Requirements class |<> +|Dependency |<> +|Requirements class |<> |=== ==== CRS diff --git a/core/standard/abstract_tests/ATS_class_searchable-catalog_filtering.adoc b/core/standard/abstract_tests/ATS_class_searchable-catalog_filtering.adoc index 36bb3639..771c7f68 100644 --- a/core/standard/abstract_tests/ATS_class_searchable-catalog_filtering.adoc +++ b/core/standard/abstract_tests/ATS_class_searchable-catalog_filtering.adoc @@ -6,7 +6,7 @@ |Target type |Web API |Dependency |<> |Dependency |<> -|Requirements class |<> +|Requirements class |<> |=== ==== Conformance @@ -15,4 +15,4 @@ include::searchable-catalog_filtering/ATS_conformance.adoc[] ==== Queryables -include::searchable-catalog_filtering/ATS_mandatory-queryables.adoc[] \ No newline at end of file +include::searchable-catalog_filtering/ATS_mandatory-queryables.adoc[] diff --git a/core/standard/abstract_tests/autodiscovery/ATS_link.adoc b/core/standard/abstract_tests/autodiscovery/ATS_link.adoc index cfc0213c..e6491146 100644 --- a/core/standard/abstract_tests/autodiscovery/ATS_link.adoc +++ b/core/standard/abstract_tests/autodiscovery/ATS_link.adoc @@ -2,12 +2,12 @@ [width="90%",cols="2,6a"] |=== ^|*Abstract Test {counter:ats-id}* |*/conf/autodiscovery/link* -^|Test Purpose |Validate the behaviour of link relations for catalogue autodiscovery. +^|Test Purpose |Validate the behaviour of link relations for catalog autodiscovery. ^|Requirement |<> ^|Test Method |. Construct a path for a landing page . Issue an HTTP GET request on the path . Parse all link objects -. Check that at least one link contains a `+rel+` of `+http://www.opengis.net/def/rel/ogc/1.0/catalogue+`. +. Check that at least one link contains a `+rel+` of `+http://www.opengis.net/def/rel/ogc/1.0/catalog+`. . Check that the `+type+` attribute exists with a valid media type. . Check that the `+href+` attribute exists. . Issue an HTTP GET request on the value of the `+href+` attribute. diff --git a/core/standard/abstract_tests/crawlable-catalog/ATS_catalog-links.adoc b/core/standard/abstract_tests/crawlable-catalog/ATS_catalog-links.adoc index 5d8e24d1..403209e9 100644 --- a/core/standard/abstract_tests/crawlable-catalog/ATS_catalog-links.adoc +++ b/core/standard/abstract_tests/crawlable-catalog/ATS_catalog-links.adoc @@ -3,7 +3,7 @@ |=== ^|*Abstract Test {counter:ats-id}* |*/conf/crawlable-catalog/catalog-links* ^|Test Purpose |Validate crawlable catalog collection links. -^|Requirement |<> +^|Requirement |<> ^|Test Method |. Parse the catalog structure and create a list of all links available . Check that the list includes a link (``rel=self``) that points to itself. . Check that the list includes a link (``rel=alternate``) for each alternative representation of itself. diff --git a/core/standard/abstract_tests/crawlable-catalog/ATS_catalog-location.adoc b/core/standard/abstract_tests/crawlable-catalog/ATS_catalog-location.adoc index dffc287b..b0f9b264 100644 --- a/core/standard/abstract_tests/crawlable-catalog/ATS_catalog-location.adoc +++ b/core/standard/abstract_tests/crawlable-catalog/ATS_catalog-location.adoc @@ -3,7 +3,7 @@ |=== ^|*Abstract Test {counter:ats-id}* |*/conf/crawlable-catalog/catalog-location* ^|Test Purpose |Validate crawlable catalog location. -^|Requirement |<> +^|Requirement |<> ^|Test Method |. Retrieve the top level collection object . Check that the collection path is a valid web-accessible location |=== diff --git a/core/standard/abstract_tests/crawlable-catalog/ATS_catalog.adoc b/core/standard/abstract_tests/crawlable-catalog/ATS_catalog.adoc index 45f9f266..815931c0 100644 --- a/core/standard/abstract_tests/crawlable-catalog/ATS_catalog.adoc +++ b/core/standard/abstract_tests/crawlable-catalog/ATS_catalog.adoc @@ -2,7 +2,7 @@ [width="90%",cols="2,6a"] |=== ^|*Abstract Test {counter:ats-id}* |*/conf/crawlable-catalog/catalog* -^|Test Purpose |Validate crawlable catalogue collections. +^|Test Purpose |Validate crawlable catalog collections. ^|Requirement |<> ^|Test Method |. Parse the catalog structure and create a list of all collections available . For each item in the list, retrieve the collection object diff --git a/core/standard/abstract_tests/crawlable-catalog/ATS_itemType.adoc b/core/standard/abstract_tests/crawlable-catalog/ATS_itemType.adoc index 3eb62efa..98e52456 100644 --- a/core/standard/abstract_tests/crawlable-catalog/ATS_itemType.adoc +++ b/core/standard/abstract_tests/crawlable-catalog/ATS_itemType.adoc @@ -2,7 +2,7 @@ [width="90%",cols="2,6a"] |=== ^|*Abstract Test {counter:ats-id}* |*/conf/crawlable-catalog/itemType* -^|Test Purpose |Validate crawlable catalogue collection itemType list. +^|Test Purpose |Validate crawlable catalog collection itemType list. ^|Requirement |<> ^|Test Method |. Parse the collection object . Check that the collection is valid using the provided JSON-Schema (http://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/collection.yaml) diff --git a/core/standard/abstract_tests/crawlable-catalog/ATS_record.adoc b/core/standard/abstract_tests/crawlable-catalog/ATS_record.adoc index 740c4aad..9123281d 100644 --- a/core/standard/abstract_tests/crawlable-catalog/ATS_record.adoc +++ b/core/standard/abstract_tests/crawlable-catalog/ATS_record.adoc @@ -3,7 +3,7 @@ |=== ^|*Abstract Test {counter:ats-id}* |*/conf/crawlable-catalog/record* ^|Test Purpose |Validate crawlable catalog records. -^|Requirement |<> +^|Requirement |<> ^|Test Method |. Parse the catalog structure and create a list of all records available . For each item in the list, retrieve the record object . Check that the record is valid using the provided JSON-Schema (https://github.com/opengeospatial/ogcapi-records/blob/master/core/openapi/schemas/recordGeoJSON.yaml) diff --git a/core/standard/abstract_tests/local-resources-catalog/ATS_property-title.adoc b/core/standard/abstract_tests/local-resources-catalog/ATS_property-title.adoc index 60cacb46..5ceac2a4 100644 --- a/core/standard/abstract_tests/local-resources-catalog/ATS_property-title.adoc +++ b/core/standard/abstract_tests/local-resources-catalog/ATS_property-title.adoc @@ -1,7 +1,7 @@ [[ats_local-resources-catalog_property-title-def]] [width="90%",cols="2,6a"] |=== -^|*Abstract Test {counter:ats-id}* |*/conf/local-resources-catalogue/property-title-def* +^|*Abstract Test {counter:ats-id}* |*/conf/local-resources-catalog/property-title-def* ^|Test Purpose |Validate title property. ^|Requirement |<> ^|Test Method |. Construct a path for a local resource object diff --git a/core/standard/abstract_tests/local-resources-catalog_filtering/ATS_conformance.adoc b/core/standard/abstract_tests/local-resources-catalog_filtering/ATS_conformance.adoc index ea754daa..831609c8 100644 --- a/core/standard/abstract_tests/local-resources-catalog_filtering/ATS_conformance.adoc +++ b/core/standard/abstract_tests/local-resources-catalog_filtering/ATS_conformance.adoc @@ -6,6 +6,6 @@ ^|Requirement |<> ^|Test Method |. Construct a path for a conformance page . Issue an HTTP GET request on the path -. Check that the `+conformsTo+` array contains the value `+http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/local-resources-catalogue_cql2-filter+`. +. Check that the `+conformsTo+` array contains the value `+http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/local-resources-catalog_cql2-filter+`. |=== diff --git a/core/standard/abstract_tests/local-resources-catalog_filtering/ATS_queryables-link.adoc b/core/standard/abstract_tests/local-resources-catalog_filtering/ATS_queryables-link.adoc index c266ac2c..f5e60273 100644 --- a/core/standard/abstract_tests/local-resources-catalog_filtering/ATS_queryables-link.adoc +++ b/core/standard/abstract_tests/local-resources-catalog_filtering/ATS_queryables-link.adoc @@ -2,10 +2,10 @@ [width="90%",cols="2,6a"] |=== ^|*Abstract Test {counter:ats-id}* |*/conf/local-resources-catalog/filtering/queryables-link* -^|Test Purpose |Validate queryables link for local resources catalogue. +^|Test Purpose |Validate queryables link for local resources catalog. ^|Requirement |<> -^|Test Method |. Construct a path for the local resources catalogue -. Issue an HTTP GET request and retrieve the catalogue object. +^|Test Method |. Construct a path for the local resources catalog +. Issue an HTTP GET request and retrieve the catalog object. . Parse the links section . Check that the links section contains a link with ``rel="http://www.opengis.net/def/rel/ogc/1.0/queryables"`` . Check that this link points to a resource for discovering the list of record properties (and their types) and that they can be used to construct a filter expression. diff --git a/core/standard/abstract_tests/record-collection/ATS_media-type-default.adoc b/core/standard/abstract_tests/record-collection/ATS_media-type-default.adoc index b8c08487..690a7e50 100644 --- a/core/standard/abstract_tests/record-collection/ATS_media-type-default.adoc +++ b/core/standard/abstract_tests/record-collection/ATS_media-type-default.adoc @@ -6,7 +6,7 @@ ^|Requirement |<> ^|Test Method |. Construct a path for a given collection . Issue a HTTP GET request on the path -. Check if the <> is advertised for the catalogue. +. Check if the <> is advertised for the catalog. . If yes, then check that the media type for content is JSON or GeoJSON. . If no, then check that the media type for content is HTML. -|=== \ No newline at end of file +|=== diff --git a/core/standard/abstract_tests/searchable-catalog/ATS_core.adoc b/core/standard/abstract_tests/searchable-catalog/ATS_core.adoc index 159bd064..630e9311 100644 --- a/core/standard/abstract_tests/searchable-catalog/ATS_core.adoc +++ b/core/standard/abstract_tests/searchable-catalog/ATS_core.adoc @@ -1,4 +1,4 @@ -[[ats_searchable-catalogue_core]] +[[ats_searchable-catalog_core]] [width="90%",cols="2,6a"] |=== ^|*Abstract Test {counter:ats-id}* |*/conf/searchable-catalog/core* diff --git a/core/standard/abstract_tests/searchable-catalog_filtering/ATS_conformance.adoc b/core/standard/abstract_tests/searchable-catalog_filtering/ATS_conformance.adoc index 36b7515c..ae6d0146 100644 --- a/core/standard/abstract_tests/searchable-catalog_filtering/ATS_conformance.adoc +++ b/core/standard/abstract_tests/searchable-catalog_filtering/ATS_conformance.adoc @@ -1,9 +1,9 @@ [[ats_searchable-catalog_filtering]] [width="90%",cols="2,6a"] |=== -^|*Abstract Test {counter:ats-id}* |*/conf/searchable-catalogue/filtering* -^|Test Purpose |Validate searchable catalogue CQL filtering. -^|Requirement |<> +^|*Abstract Test {counter:ats-id}* |*/conf/searchable-catalog/filtering* +^|Test Purpose |Validate searchable catalog CQL filtering. +^|Requirement |<> ^|Test Method |. Construct a path for a conformance page . Issue an HTTP GET request on the path . Check that the `+conformsTo+` array contains the value `+http://www.opengis.net/spec/ogcapi-records-1/1.0/req/cql-filter+`. diff --git a/core/standard/abstract_tests/searchable-catalog_filtering/ATS_mandatory-queryables.adoc b/core/standard/abstract_tests/searchable-catalog_filtering/ATS_mandatory-queryables.adoc index ef28bdd8..416f582b 100644 --- a/core/standard/abstract_tests/searchable-catalog_filtering/ATS_mandatory-queryables.adoc +++ b/core/standard/abstract_tests/searchable-catalog_filtering/ATS_mandatory-queryables.adoc @@ -2,7 +2,7 @@ [width="90%",cols="2,6a"] |=== ^|*Abstract Test {counter:ats-id}* |*/conf/searchable-catalog/mandatory-queryables* -^|Test Purpose |Validate searchable catalogue CQL filtering. +^|Test Purpose |Validate searchable catalog CQL filtering. ^|Requirement |<> ^|Test Method |. Construct a path for a collection queryables page . Issue an HTTP GET request on the path diff --git a/core/standard/clause_7_building_blocks.adoc b/core/standard/clause_7_building_blocks.adoc index ce2a0c12..e3ed3c76 100644 --- a/core/standard/clause_7_building_blocks.adoc +++ b/core/standard/clause_7_building_blocks.adoc @@ -297,7 +297,7 @@ Link-Template: