From be40027ddc5c2cc1afcd7b5e51e9f7fe0dc1a224 Mon Sep 17 00:00:00 2001 From: Matthias Mohr Date: Wed, 14 Apr 2021 18:19:01 +0200 Subject: [PATCH 1/6] Clarification on multiple bounding boxes in an extent. #1064 https://github.com/opengeospatial/ogcapi-features/pull/520 --- CHANGELOG.md | 3 +++ collection-spec/collection-spec.md | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a8027a1..0d51bcb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Changed +- The first extent in a Collection is always the overall extent, followed by more specific extents. ([#1064](https://github.com/radiantearth/stac-spec/issues/1064), [opengeospatial/ogcapi-features#520](https://github.com/opengeospatial/ogcapi-features/pull/520)) + ## [v1.0.0-rc.2] - 2021-03-30 ### Changed diff --git a/collection-spec/collection-spec.md b/collection-spec/collection-spec.md index f781bb91..d3b4c2da 100644 --- a/collection-spec/collection-spec.md +++ b/collection-spec/collection-spec.md @@ -147,7 +147,12 @@ The object describes the spatial extents of the Collection. | ------- | ------------ | -------------------------------------------------------------------- | | bbox | \[\[number]] | **REQUIRED.** Potential *spatial extents* covered by the Collection. | -**bbox**: Bounding Boxes of the assets represented by this Collection using either 2D or 3D geometries. Each outer array element can be a separate bounding box, but it is recommended to only use multiple bounding boxes if a union of them would then include a large uncovered area (e.g. the union of Germany and Chile). +**bbox**: Each outer array element can be a separate spatial extent describing the bounding Boxes of the assets represented by this Collection using either 2D or 3D geometries. + +The first bounding box always describes the overall spatial extent of the data. All subsequent bounding boxes can be +used to provide a more precise description of the extent and identify clusters of data. +Clients only interested in the overall spatial extent will only need to access the first item in each array. +It is recommended to only use multiple bounding boxes if a union of them would then include a large uncovered area (e.g. the union of Germany and Chile). The length of the inner array must be 2*n where n is the number of dimensions. The array contains all axes of the southwesterly most extent followed by all axes of the northeasterly most extent specified in Longitude/Latitude or Longitude/Latitude/Elevation based on [WGS 84](http://www.opengis.net/def/crs/OGC/1.3/CRS84). When using 3D geometries, the elevation of the southwesterly most extent is the minimum depth/height in meters and the elevation of the northeasterly most extent is the maximum. @@ -161,7 +166,12 @@ The object describes the temporal extents of the Collection. | -------- | ------------------ | --------------------------------------------------------------------- | | interval | \[\[string\|null]] | **REQUIRED.** Potential *temporal extents* covered by the Collection. | -**interval**: Each outer array element can be a separate temporal extent, but it is recommended to only use multiple temporal extents if a union of them would then include a large uncovered time span (e.g. only having data for the years 2000, 2010 and 2020). +**interval**: Each outer array element can be a separate temporal extent. +The first time interval always describes the overall temporal extent of the data. All subsequent time intervals +can be used to provide a more precise description of the extent and identify clusters of data. +Clients only interested in the overall extent will only need to access the first item in each array. +It is recommended to only use multiple temporal extents if a union of them would then include a large +uncovered time span (e.g. only having data for the years 2000, 2010 and 2020). Each inner array consists of exactly two dates and times. Each date and time MUST be formatted according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). The temporal reference system is the Gregorian calendar. From 90f8d37ba6b065240061c8da33cecfffe89b67f0 Mon Sep 17 00:00:00 2001 From: Matthias Mohr Date: Thu, 15 Apr 2021 14:37:12 +0200 Subject: [PATCH 2/6] Update STAC Node Validator and fix examples --- examples/extensions-collection/proj-example/proj-example.json | 1 - package.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/extensions-collection/proj-example/proj-example.json b/examples/extensions-collection/proj-example/proj-example.json index 91fa8130..e8e0d89f 100644 --- a/examples/extensions-collection/proj-example/proj-example.json +++ b/examples/extensions-collection/proj-example/proj-example.json @@ -242,7 +242,6 @@ "eo:bands": [ { "name": "B8", - "common_name": "panchromatic", "center_wavelength": 0.59, "full_width_half_max": 0.18 } diff --git a/package.json b/package.json index 3fb2aeee..a787cad3 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,6 @@ "remark-preset-lint-markdown-style-guide": "^3.0.0", "remark-preset-lint-recommended": "^4.0.0", "remark-validate-links": "^10.0.0", - "stac-node-validator": "^0.4.6" + "stac-node-validator": "^1.0.1" } } From 6c8df30064e2552b0070404effca6e9acbc836cb Mon Sep 17 00:00:00 2001 From: Matthias Mohr Date: Thu, 15 Apr 2021 16:07:22 +0200 Subject: [PATCH 3/6] Item: Validate that collection property is set if link with collection rel type is available #1088 --- .../proj-example/proj-example.json | 5 +++ item-spec/item-spec.md | 2 +- item-spec/json-schema/item.json | 42 ++++++++++++++++--- 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/examples/extensions-collection/proj-example/proj-example.json b/examples/extensions-collection/proj-example/proj-example.json index e8e0d89f..71d3b2d3 100644 --- a/examples/extensions-collection/proj-example/proj-example.json +++ b/examples/extensions-collection/proj-example/proj-example.json @@ -219,6 +219,11 @@ "rel": "parent", "href": "../collection.json", "type": "application/json" + }, + { + "rel": "collection", + "href": "../collection.json", + "type": "application/json" } ], "assets": { diff --git a/item-spec/item-spec.md b/item-spec/item-spec.md index 84209294..e36b3551 100644 --- a/item-spec/item-spec.md +++ b/item-spec/item-spec.md @@ -63,7 +63,7 @@ inherited from GeoJSON. | properties | [Properties Object](#properties-object) | **REQUIRED.** A dictionary of additional metadata for the Item. | | links | \[[Link Object](#link-object)] | **REQUIRED.** List of link objects to resources and related URLs. A link with the `rel` set to `self` is strongly recommended. | | assets | Map | **REQUIRED.** Dictionary of asset objects that can be downloaded, each with a unique key. | -| collection | string | The `id` of the STAC Collection this Item references to (see [`collection` relation type](#relation-types)). This field is *required* if such a relation type is present. This field provides an easy way for a user to search for any Items that belong in a specified Collection. Must be a non-empty string. | +| collection | string | The `id` of the STAC Collection this Item references to (see [`collection` relation type](#relation-types)). This field is *required* if such a relation type is present and is *not allowed* otherwise. This field provides an easy way for a user to search for any Items that belong in a specified Collection. Must be a non-empty string. | ### Additional Field Information diff --git a/item-spec/json-schema/item.json b/item-spec/json-schema/item.json index 34d351f3..e228e2d2 100644 --- a/item-spec/json-schema/item.json +++ b/item-spec/json-schema/item.json @@ -159,12 +159,42 @@ ] } ] - }, - "collection": { - "title": "Collection ID", - "description": "The ID of the STAC Collection this Item references to.", - "type": "string", - "minLength": 1 + } + }, + "if": { + "properties": { + "links": { + "contains": { + "required": [ + "rel" + ], + "properties": { + "rel": { + "const": "collection" + } + } + } + } + } + }, + "then": { + "required": [ + "collection" + ], + "properties": { + "collection": { + "title": "Collection ID", + "description": "The ID of the STAC Collection this Item references to.", + "type": "string", + "minLength": 1 + } + } + }, + "else": { + "properties": { + "collection": { + "not": {} + } } } } From 9c6be4b5ece6cf774228432eed0dea36c66a6f3c Mon Sep 17 00:00:00 2001 From: Matthias Mohr Date: Thu, 15 Apr 2021 16:12:31 +0200 Subject: [PATCH 4/6] Collectionless item has collection field & link #1081 --- CHANGELOG.md | 1 + examples/catalog.json | 6 ++++++ examples/collectionless-item.json | 12 +++--------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a8027a1..ac468ee2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed +- Examples - Collection Assets were specified as required (only in written text, not in JSON Schema), but that was incorrectly copied over from the former `collection-assets` extension. Collection Assets are not required. - Clarified that the values in summaries (both for ranges and sets of values) must follow the data type of the property they summarize. ([#1069](https://github.com/radiantearth/stac-spec/pull/1069)) diff --git a/examples/catalog.json b/examples/catalog.json index 1bac09f9..c309c1f6 100644 --- a/examples/catalog.json +++ b/examples/catalog.json @@ -21,6 +21,12 @@ "type": "application/json", "title": "Collection with no items (standalone)" }, + { + "rel": "item", + "href": "./collectionless-item.json", + "type": "application/json", + "title": "Collection with no items (standalone)" + }, { "rel": "self", "href": "https://raw.githubusercontent.com/radiantearth/stac-spec/v1.0.0-rc.2/examples/catalog.json", diff --git a/examples/collectionless-item.json b/examples/collectionless-item.json index 250bb704..c2384f52 100644 --- a/examples/collectionless-item.json +++ b/examples/collectionless-item.json @@ -73,20 +73,14 @@ }, "collection": "CS3", "links": [ - { - "rel": "collection", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - }, { "rel": "root", - "href": "./collection.json", + "href": "./catalog.json", "type": "application/json" }, { - "rel": "root", - "href": "./collection.json", + "rel": "parent", + "href": "./catalog.json", "type": "application/json" }, { From 840a4cfc512f615767ee28eadb0a18b7103bdd92 Mon Sep 17 00:00:00 2001 From: Matthias Mohr Date: Thu, 15 Apr 2021 16:18:58 +0200 Subject: [PATCH 5/6] Remove collection field --- examples/collectionless-item.json | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/collectionless-item.json b/examples/collectionless-item.json index c2384f52..a1b890c1 100644 --- a/examples/collectionless-item.json +++ b/examples/collectionless-item.json @@ -71,7 +71,6 @@ "cs:sat_id": "CS3", "cs:product_level": "LV1B" }, - "collection": "CS3", "links": [ { "rel": "root", From 93765a55968d66b3efbf5f9bc8594623132cd07b Mon Sep 17 00:00:00 2001 From: Chris Holmes Date: Thu, 15 Apr 2021 08:15:50 -0700 Subject: [PATCH 6/6] Made requirement for collection fields / rels clearer --- item-spec/item-spec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/item-spec/item-spec.md b/item-spec/item-spec.md index e36b3551..6349b015 100644 --- a/item-spec/item-spec.md +++ b/item-spec/item-spec.md @@ -183,7 +183,7 @@ This happens where there is not a clear official option, or where STAC uses an o | self | STRONGLY RECOMMENDED. *Absolute* URL to the Item if it is available at a public URL. This is particularly useful when in a download package that includes metadata, so that the downstream user can know where the data has come from. | | root | URL to the root STAC Catalog or Collection. | | parent | URL to the parent STAC Catalog or Collection. | -| collection | STRONGLY RECOMMENDED. URL to a Collection. *Absolute* URLs should be used whenever possible. The referenced Collection is STRONGLY RECOMMENDED to implement the same STAC version as the Item. | +| collection | STRONGLY RECOMMENDED. URL to a Collection. *Absolute* URLs should be used whenever possible. The referenced Collection is STRONGLY RECOMMENDED to implement the same STAC version as the Item. A link with this `rel` type is *required* if the `collection` field in properties is present. | | derived_from | URL to a STAC Item that was used as input data in the creation of this Item. | A more complete list of potential `rel` types and their meaning in STAC can be found in the [Using Relation