From 40767d8bd77bb75f537b5b40146be125e8140670 Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Thu, 16 May 2024 21:04:54 -0400 Subject: [PATCH] 13-hierarchy: Initial draft of hierarchical collections - Describes latest proposal agreed to in the SWG on 2024-05-16 in ( fixes #11 and #298 ) - TODO: Still need to add OpenAPI definitions - 11-sorting, 12-filtering, 14-schemas: set up requirement class tables --- .../clause_11_sortable_collections.adoc | 2 +- .../clause_12_filterable_collections.adoc | 2 +- .../clause_13_hierarchical_collections.adoc | 357 +++++++++++++++++- collections/clause_14_schemas.adoc | 3 +- .../hierarchy/PER_collection_children.adoc | 6 + .../hierarchy/PER_parent_default_html.adoc | 6 + .../hierarchy/REC_parent_convention.adoc | 7 + .../hierarchy/REQ_ancestor_parameter.adoc | 7 + .../hierarchy/REQ_parent_parameter.adoc | 8 + .../hierarchy/REQ_parent_property.adoc | 8 + .../requirements_class_filtering.adoc | 10 + .../requirements_class_hierarchy.adoc | 8 + .../requirements_class_schemas.adoc | 8 + ...irements_class_searchable_collections.adoc | 1 + .../requirements_class_sorting.adoc | 9 + 15 files changed, 437 insertions(+), 5 deletions(-) create mode 100644 collections/recommendations/hierarchy/PER_collection_children.adoc create mode 100644 collections/recommendations/hierarchy/PER_parent_default_html.adoc create mode 100644 collections/recommendations/hierarchy/REC_parent_convention.adoc create mode 100644 collections/requirements/hierarchy/REQ_ancestor_parameter.adoc create mode 100644 collections/requirements/hierarchy/REQ_parent_parameter.adoc create mode 100644 collections/requirements/hierarchy/REQ_parent_property.adoc create mode 100644 collections/requirements/requirements_class_filtering.adoc create mode 100644 collections/requirements/requirements_class_hierarchy.adoc create mode 100644 collections/requirements/requirements_class_schemas.adoc create mode 100644 collections/requirements/requirements_class_sorting.adoc diff --git a/collections/clause_11_sortable_collections.adoc b/collections/clause_11_sortable_collections.adoc index 900f49a..9ade986 100644 --- a/collections/clause_11_sortable_collections.adoc +++ b/collections/clause_11_sortable_collections.adoc @@ -2,4 +2,4 @@ == Requirements Class "Sortable Collections" :sectnums: -// TODO: include::requirements/requirements_class_sortable_collections.adoc[] +include::requirements/requirements_class_sorting.adoc[] diff --git a/collections/clause_12_filterable_collections.adoc b/collections/clause_12_filterable_collections.adoc index e2cac7c..27453e4 100644 --- a/collections/clause_12_filterable_collections.adoc +++ b/collections/clause_12_filterable_collections.adoc @@ -2,4 +2,4 @@ == Requirements Class "Filtering Collections with CQL2" :sectnums: -// TODO: include::requirements/requirements_class_filterable_collections.adoc[] +include::requirements/requirements_class_filtering.adoc[] diff --git a/collections/clause_13_hierarchical_collections.adoc b/collections/clause_13_hierarchical_collections.adoc index 98899ee..b5c3813 100644 --- a/collections/clause_13_hierarchical_collections.adoc +++ b/collections/clause_13_hierarchical_collections.adoc @@ -2,5 +2,360 @@ == Requirements Class "Hierarchical Collections" :sectnums: -// TODO: include::requirements/requirements_class_hierarchical_collections.adoc[] +include::requirements/requirements_class_hierarchy.adoc[] +This "Hierarchical Collections" requirement class allows to organize a large number of collections according to a single pre-determined hierarchy. +This capability addresses two primary use cases: + +- Drilling down through a very large number of collections in a tree-like manner, allowing clients to explore the entire hierarchy without first needing to retrieve the entire list of collections. + The hierarchical organization also allows to present the list of collections in a hierarchical manner, for example using a tree view control, and makes it easier to discover or browse to a + particular collection of interest using such an interface, with the ability to expand and collapse branches of the hierarchy. + For example, data collections may be organized as a hierarchy of countries, states, and cities. +- The `ancestor` parameter defined herein allows to load a limited subset of interest from the available collections. + In conjunction with the "Searchable Collections" and/or "Filtering collections using CQL2" requirement classes, this parameter also allows to narrow down a search to a particular branch of the hierarchy. + +NOTE: This requirement class does not address the use cases of defining simultaneous multiple hierarchies -- a collection can have a single `parent` collection. +Such multiple hierarchies capability could be defined independently (for example, the https://docs.ogc.org/per/18-045.html#hierarchical_paths_extension[`/themes` extension] proposed previously), +or the use case could be addressed through the `keywords` and/or `themes` core queryable properties defined by _OGC API - Records_ and applicable to the "Searchable Collections" requirement class. + +All collections of the hierarchy, whether leaf colections, top-level collections, or anywhere in between, may or may not directly offer access to data using one or more access mechanisms +defined in one or more OGC API data access standards, such as _OGC API - Tiles_, _OGC API - Maps_, _OGC API - Features_ or _OGC API - Coverages_ (or others). +Those access mechanisms will be included as usual in `links` of the collections. + +In the case where a parent collection offers a direct data access mechanism while also having children collections, the `collections=` query parameter might be applicable to some of these access mechanisms, +in a similar way to how `collections=` is applicable to data access mechanisms tied to the root of the API (see for example the "Collection Selection" requirement classes of _OGC API - Maps_ and _OGC API - Tiles_). + +A client that is not aware of the capability defined in this requirement class can safely ignore it without any impact, and will simply treat the list of collections in the usual flat manner, + as defined in the "Collections" requirement class. + +=== `parent` property in collection description + +A new `parent` property is defined to include in the collection description resources (`/collections/{collectionId}`) +and collection listing resource (`/collections`), indicating the `{collectionId}` of the parent for that collection. +The property is omitted or set to a _null_ value for top-level collections. + +include::requirements/hierarchy/REQ_parent_property.adoc[] + +Although not required, it is recommended that the identifier of children collections start by their parent collection identifier, +followed by a specific separator (such as the colon `:`), followed by their distinctive part. +Programmatic clients should not establish the hierarchical relationships based on the presence of that separator nor of the parent collecton identifier +within a collection identifier, but it is a useful hint for users, including to allow editing the URLs of a collection in a browser's address bar to directly access the parent collection. + +include::recommendations/hierarchy/REC_parent_convention.adoc[] + +In the HTML representation of a collection description resource (`/collections/{collectionId}`), it can be useful to directly show the +list of children collections, allowing a user to directly click and explore the hierarchy this way. +For programmatic clients, a separate `/collections?parent={parentId}` request is performed instead to retrieve the list of children collections (see below). + +include::recommendations/hierarchy/PER_collection_children.adoc[] + +Example of a collection description response for `/collections/{collectionsId}`: + +```json +{ + "id": "can:qc:mtl", + "parent": "can:qc", + "links": [ + { "rel": "self", "/collections/can:qc:mtl" }, + { "rel": "items", "href": "/collections/can:qc:mtl/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:qc:mtl/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:qc:mtl/tiles" } + ], + ... +} +``` + +Example of a hierarchical collection listing response for `/collections`: + +```json +{ + "collections": [ + { + "id": "can", + "links": [ + { "rel": "self", "href": "/collections/can" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can/map" } + ] + }, + { + "id": "usa", + "links": [ + { "rel": "self", "href": "/collections/usa" }, + { "rel": "[ogc-rel:map]", "href": "/collections/usa/map" } + ] + }, + { + "id": "can:qc", "parent": "can", + "links": [ + { "rel": "self", "href": "/collections/can:qc" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:qc/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:qc/tiles" } + ] + }, + { + "id": "can:qc:qc", "parent": "can:qc", + "links": [ + { "rel": "self", "href": "/collections/can:qc:qc" }, + { "rel": "items", "href": "/collections/can:qc:qc/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:qc:qc/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:qc:qc/tiles" } + ] + }, + { + "id": "can:qc:mtl", "parent": "can:qc", + "links": [ + { "rel": "self", "href": "/collections/can:qc:mtl" }, + { "rel": "items", "href": "/collections/can:qc:mtl/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:qc:mtl/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:qc:mtl/tiles" } + ] + }, + { + "id": "can:on", "parent": "can", + "links": [ + { "rel": "self", "href": "/collections/can:on" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:on/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:on/tiles" } + ] + }, + { + "id": "can:on:tor", "parent": "can:on", + "links": [ + { "rel": "self", "href": "/collections/can:on:tor" }, + { "rel": "items", "href": "/collections/can:on:tor/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:on:tor/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:on:tor/tiles" } + ] + }, + { + "id": "can:on:ott", "parent": "can:on", + "links": [ + { "rel": "self", "href": "/collections/can:on:ott" }, + { "rel": "items", "href": "/collections/can:on:ott/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:on:ott/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:on:ott/tiles" } + ] + }, + { + "id": "usa:ny", "parent": "usa", + "links": [ + { "rel": "self", "href": "/collections/usa:ny" }, + { "rel": "[ogc-rel:map]", "href": "/collections/usa:ny/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/usa:ny/tiles" } + ] + }, + { + "id": "usa:ny:ny", "parent": "usa:ny", + "links": [ + { "rel": "self", "href": "/collections/usa:ny:ny" }, + { "rel": "items", "href": "/collections/usa:ny:ny/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/usa:ny:ny/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/usa:ny:ny/tiles" } + ] + }, + { + "id": "usa:ny:su", "parent": "usa:ny", + "links": [ + { "rel": "self", "href": "/collections/usa:ny:su" }, + { "rel": "items", "href": "/collections/usa:ny:su/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/usa:ny:su/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/usa:ny:su/tiles" } + ] + }, + { + "id": "usa:ca", "parent": "usa", + "links": [ + { "rel": "self", "href": "/collections/usa:ca" }, + { "rel": "[ogc-rel:map]", "href": "/collections/usa:ca/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/usa:ca/tiles" } + ] + }, + { + "id": "usa:ca:sf", "parent": "usa:ca", + "links": [ + { "rel": "self", "href": "/collections/usa:ca:sf" }, + { "rel": "items", "href": "/collections/usa:ca:sf/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/usa:ca:sf/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/usa:ca:sf/tiles" } + ] + }, + { + "id": "usa:ca:sd", "parent": "usa:ca", + "links": [ + { "rel": "self", "href": "/collections/usa:ca:sd" }, + { "rel": "items", "href": "/collections/usa:ca:sd/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/usa:ca:sd/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/usa:ca:sd/tiles" } + ] + } + ] + ... +} +``` + +=== `parent` query parameter for `/collections` + +A `parent` query parameter is defined to filter the list of collections returned to only those whose immediate parent is identified by the specified parent id. + +A special value of `none` (which must be avoided as a collection id) takes the special meaning of returning only the top-level collections without a parent. + +include::requirements/hierarchy/REQ_parent_parameter.adoc[] + +In order to allow implementations and deployments to present a list of collections in a hierarchical manner by default in a browser, +a permission specific to an HTML representation is introduced. +Since such an HTML representation is not primarily intended for consumption by programmatic clients, this should not impact compatibility with clients not implementing this extension. + +include::recommendations/hierarchy/PER_parent_default_html.adoc[] + +Example response, based on the hierarchical collections listed earlier, for `/collections?parent=none`: + +```json +{ + "collections": [ + { + "id": "can", + "links": [ + { "rel": "self", "href": "/collections/can" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can/map" } + ] + }, + { + "id": "usa", + "links": [ + { "rel": "self", "href": "/collections/usa" }, + { "rel": "[ogc-rel:map]", "href": "/collections/usa/map" } + ] + } + ] + ... +} +``` + +Example response, based on the hierarchical collections listed earlier, for `/collections?parent=can`: + +```json +{ + "collections": [ + { + "id": "can:qc", "parent": "can", + "links": [ + { "rel": "self", "href": "/collections/can:qc" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:qc/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:qc/tiles" } + ] + }, + { + "id": "can:on", "parent": "can", + "links": [ + { "rel": "self", "href": "/collections/can:on" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:on/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:on/tiles" } + ] + } + ] + ... +} +``` + +Example response, based on the hierarchical collections listed earlier, for `/collections?parent=can:qc`: + +```json +{ + "collections": [ + { + "id": "can:qc:qc", "parent": "can:qc", + "links": [ + { "rel": "self", "href": "/collections/can:qc:qc" }, + { "rel": "items", "href": "/collections/can:qc:qc/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:qc:qc/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:qc:qc/tiles" } + ] + }, + { + "id": "can:qc:mtl", "parent": "can:qc", + "links": [ + { "rel": "self", "href": "/collections/can:qc:mtl" }, + { "rel": "items", "href": "/collections/can:qc:mtl/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:qc:mtl/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:qc:mtl/tiles" } + ] + }, + ] + ... +} +``` + +=== `ancestor` query parameter for `/collections` + +An `ancestor` query parameter is also defined to filter the list of collections returned to only those having parent identified by the specified parent id as an ancestor. + +include::requirements/hierarchy/REQ_ancestor_parameter.adoc[] + +Example response, based on the hierarchical collections listed earlier, for `/collections?ancestor=can`: + +```json +{ + "collections": [ + { + "id": "can:qc", "parent": "can", + "links": [ + { "rel": "self", "href": "/collections/can:qc" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:qc/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:qc/tiles" } + ] + }, + { + "id": "can:qc:qc", "parent": "can:qc", + "links": [ + { "rel": "self", "href": "/collections/can:qc:qc" }, + { "rel": "items", "href": "/collections/can:qc:qc/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:qc:qc/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:qc:qc/tiles" } + ] + }, + { + "id": "can:qc:mtl", "parent": "can:qc", + "links": [ + { "rel": "self", "href": "/collections/can:qc:mtl" }, + { "rel": "items", "href": "/collections/can:qc:mtl/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:qc:mtl/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:qc:mtl/tiles" } + ] + }, + { + "id": "can:on", "parent": "can", + "links": [ + { "rel": "self", "href": "/collections/can:on" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:on/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:on/tiles" } + ] + }, + { + "id": "can:on:tor", "parent": "can:on", + "links": [ + { "rel": "self", "href": "/collections/can:on:tor" }, + { "rel": "items", "href": "/collections/can:on:tor/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:on:tor/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:on:tor/tiles" } + ] + }, + { + "id": "can:on:ott", "parent": "can:on", + "links": [ + { "rel": "self", "href": "/collections/can:on:ott" }, + { "rel": "items", "href": "/collections/can:on:ott/items" }, + { "rel": "[ogc-rel:map]", "href": "/collections/can:on:ott/map" }, + { "rel": "[ogc-rel:tilesets-vector]", "href": "/collections/can:on:ott/tiles" } + ] + } + ] + ... +} +``` + +The following example query demonstrates combining filtering by ancestor with capabilities defined in "Searchable Collections" to look for collections related to precipitations +in a hierarchy within the descendants of a collection with the identifier `canada`: + +``` +GET /collections?ancestor=canada&q=precipitations +``` diff --git a/collections/clause_14_schemas.adoc b/collections/clause_14_schemas.adoc index e38ea9c..192e295 100644 --- a/collections/clause_14_schemas.adoc +++ b/collections/clause_14_schemas.adoc @@ -2,5 +2,4 @@ == Requirements Class "Schemas" :sectnums: -// TODO: include::requirements/requirements_class_schemas.adoc[] - +include::requirements/requirements_class_schemas.adoc[] diff --git a/collections/recommendations/hierarchy/PER_collection_children.adoc b/collections/recommendations/hierarchy/PER_collection_children.adoc new file mode 100644 index 0000000..b708ce6 --- /dev/null +++ b/collections/recommendations/hierarchy/PER_collection_children.adoc @@ -0,0 +1,6 @@ +[[per_hierarchy_collection_children]] +[width="90%",cols="2,6a"] +|=== +^|*Permission {counter:per-id}* |*/per/hierarchy/parent_default_html* +^|A |For representations not intended primarily for consumption by machines, such as an HTML representation, an implementation MAY include clickable links to the immediate children collections to facilitate browsing through the hierarchy. +|=== diff --git a/collections/recommendations/hierarchy/PER_parent_default_html.adoc b/collections/recommendations/hierarchy/PER_parent_default_html.adoc new file mode 100644 index 0000000..1fd7648 --- /dev/null +++ b/collections/recommendations/hierarchy/PER_parent_default_html.adoc @@ -0,0 +1,6 @@ +[[per_hierarchy_parent_default_html]] +[width="90%",cols="2,6a"] +|=== +^|*Permission {counter:per-id}* |*/per/hierarchy/parent_default_html* +^|A |For representations not intended primarily for consumption by machines, such as an HTML representation, an implementation MAY assume a default value of `none` for the `parent` query parameter, so as to present the collections in a hierarchical manner and avoid an unnecessarily large response when a large number of collections are available. +|=== diff --git a/collections/recommendations/hierarchy/REC_parent_convention.adoc b/collections/recommendations/hierarchy/REC_parent_convention.adoc new file mode 100644 index 0000000..06503c2 --- /dev/null +++ b/collections/recommendations/hierarchy/REC_parent_convention.adoc @@ -0,0 +1,7 @@ +[[rec_hierarchy_parent-convention]] +[width="90%",cols="2,6a"] +|=== +^|*Recommendation {counter:rec-id}* |*/rec/hierarchy/parent-convention* +^|A |The identifiers for children collections SHOULD follow the pattern `{parentCollectionId}{separator}{distinctivePart}`. For example, the collection with identifier `can:qc:mtl` whose parent collection has the identifier `can:qc` follows this pattern. +^|B |The same single separator character (for example, a colon `:`) SHOULD be used for all collections throughout a Web API deployment. +|=== diff --git a/collections/requirements/hierarchy/REQ_ancestor_parameter.adoc b/collections/requirements/hierarchy/REQ_ancestor_parameter.adoc new file mode 100644 index 0000000..ded3edc --- /dev/null +++ b/collections/requirements/hierarchy/REQ_ancestor_parameter.adoc @@ -0,0 +1,7 @@ +[[req_hierarchy_ancestor-parameter]] +[width="90%",cols="2,6a"] +|=== +^|*Requirement {counter:req-id}* |*/req/hierarchy/ancestor-parameter* +^|A |The implementation SHALL support an `ancestor` parameter for listing collections at the resource `/collections` whose string value represents a specified ancestor collection identifier. +^|B |The response for listing collections when this parameter is used SHALL only include collections whose immediate parent, or any ancestor from that parent up to the root of the hierarchy, corresponds to the specified collection identifier. +|=== diff --git a/collections/requirements/hierarchy/REQ_parent_parameter.adoc b/collections/requirements/hierarchy/REQ_parent_parameter.adoc new file mode 100644 index 0000000..6735ac8 --- /dev/null +++ b/collections/requirements/hierarchy/REQ_parent_parameter.adoc @@ -0,0 +1,8 @@ +[[req_hierarchy_parent-parameter]] +[width="90%",cols="2,6a"] +|=== +^|*Requirement {counter:req-id}* |*/req/hierarchy/parent-parameter* +^|A |The implementation SHALL support a `parent` query parameter for listing collections at the resource `/collections` whose string value represents a specified parent collection identifier. +^|B |The response for listing collections when this parameter is used SHALL only include collections whose immediate parent corresponds to the specified collection identifier. +^|C |When the special value of `none` is used for the `parent` parameter, only top-level collections without a parent SHALL be returned. +|=== diff --git a/collections/requirements/hierarchy/REQ_parent_property.adoc b/collections/requirements/hierarchy/REQ_parent_property.adoc new file mode 100644 index 0000000..dee17f9 --- /dev/null +++ b/collections/requirements/hierarchy/REQ_parent_property.adoc @@ -0,0 +1,8 @@ +[[req_hierarchy_parent-property]] +[width="90%",cols="2,6a"] +|=== +^|*Requirement {counter:req-id}* |*/req/hierarchy/parent-property* +^|A |For collections organized into a hierarchy which are not top-level collections, the collection object response for both listing collections (`/collections`) and for individual collection description (`/collections/{collectionId}`) SHALL include a `parent` property set to the collection identifier of the parent collection. +^|B |The `parent` property in collection objects for top-level collections SHALL be omitted or set to a null value. +^|C |Collection identifiers SHALL NOT use the reserved value of `none`. +|=== diff --git a/collections/requirements/requirements_class_filtering.adoc b/collections/requirements/requirements_class_filtering.adoc new file mode 100644 index 0000000..167ee83 --- /dev/null +++ b/collections/requirements/requirements_class_filtering.adoc @@ -0,0 +1,10 @@ +[[rc_filtering]] +[cols="1,4",width="90%"] +|=== +2+|*Requirements Class* +2+|http://www.opengis.net/spec/ogcapi-common-2/1.0/req/filtering +|Target type |Web API +|Dependency |<> +|Dependency |https://www.opengis.net/spec/ogcapi-records-1/1.0/req/local-resources-catalog/filtering +|Dependency |https://www.opengis.net/spec/cql2/1.0/req/basic-cql2 +|=== diff --git a/collections/requirements/requirements_class_hierarchy.adoc b/collections/requirements/requirements_class_hierarchy.adoc new file mode 100644 index 0000000..cafffef --- /dev/null +++ b/collections/requirements/requirements_class_hierarchy.adoc @@ -0,0 +1,8 @@ +[[rc_hierarchy]] +[cols="1,4",width="90%"] +|=== +2+|*Requirements Class* +2+|http://www.opengis.net/spec/ogcapi-common-2/1.0/req/hierarchy +|Target type |Web API +|Dependency |<> +|=== diff --git a/collections/requirements/requirements_class_schemas.adoc b/collections/requirements/requirements_class_schemas.adoc new file mode 100644 index 0000000..bac824f --- /dev/null +++ b/collections/requirements/requirements_class_schemas.adoc @@ -0,0 +1,8 @@ +[[rc_schemas]] +[cols="1,4",width="90%"] +|=== +2+|*Requirements Class* +2+|http://www.opengis.net/spec/ogcapi-common-2/1.0/req/schemas +|Target type |Web API +|Dependency |<> +|=== diff --git a/collections/requirements/requirements_class_searchable_collections.adoc b/collections/requirements/requirements_class_searchable_collections.adoc index 9c55b5b..7bab89b 100644 --- a/collections/requirements/requirements_class_searchable_collections.adoc +++ b/collections/requirements/requirements_class_searchable_collections.adoc @@ -6,4 +6,5 @@ |Target type |Web API |Dependency |<> |Dependency |<> +|Dependency |https://www.opengis.net/spec/ogcapi-records-1/1.0/req/local-resources-catalog/query-parameters |=== diff --git a/collections/requirements/requirements_class_sorting.adoc b/collections/requirements/requirements_class_sorting.adoc new file mode 100644 index 0000000..f073b2d --- /dev/null +++ b/collections/requirements/requirements_class_sorting.adoc @@ -0,0 +1,9 @@ +[[rc_sorting]] +[cols="1,4",width="90%"] +|=== +2+|*Requirements Class* +2+|http://www.opengis.net/spec/ogcapi-common-2/1.0/req/sorting +|Target type |Web API +|Dependency |<> +|Dependency |https://www.opengis.net/spec/ogcapi-records-1/1.0/req/local-resources-catalog/sorting +|===