Skip to content

Commit e2f5c49

Browse files
committed
First try at supporting JSON Schema in summaries #1045
1 parent bb15ca6 commit e2f5c49

File tree

7 files changed

+41
-15
lines changed

7 files changed

+41
-15
lines changed

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,16 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
77

88
## [Unreleased]
99

10+
### Added
11+
12+
- Summaries are allowed to specify JSON Schema in addition to ranges and sets of values. ([#1045](https://github.com/radiantearth/stac-spec/issues/1045))
13+
1014
### Changed
1115

1216
- 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))
1317
- Updated examples for automatic collection creation from code and validation ([#1080](https://github.com/radiantearth/stac-spec/pull/1080)
1418
- Clarified that stac_extensions should also list extensions that are used in Collection summaries. ([#1077](https://github.com/radiantearth/stac-spec/issues/1077))
19+
- The Stats Object for Summaries has been renamed to Range Object (no functional change).
1520

1621
## [v1.0.0-rc.2] - 2021-03-30
1722

@@ -46,7 +51,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
4651

4752
### Changed
4853

49-
- The [Stats Object](collection-spec/collection-spec.md#stats-object) for Collection `summaries` changed `min` to `minimum` and `max` to `maximum` to align with JSON Schema. ([#967](https://github.com/radiantearth/stac-spec/pull/967))
54+
- The [Stats Object](collection-spec/collection-spec.md#range-object) for Collection `summaries` changed `min` to `minimum` and `max` to `maximum` to align with JSON Schema. ([#967](https://github.com/radiantearth/stac-spec/pull/967))
5055
- URIs (usually found int properties like `href`, `url`) are now validated using the `iri-reference` format in JSON Schema (allows international characters in URIs) ([#953](https://github.com/radiantearth/stac-spec/pull/953))
5156
- Enhanced the way the spec talks about ID's to encourage more global uniqueness. ([#883](https://github.com/radiantearth/stac-spec/pull/883))
5257
- Clarified how collection-level asset object properties do not remove the need for item-level asset object properties in the `item-assets` extension ([#880](https://github.com/radiantearth/stac-spec/pull/880))

catalog-spec/catalog-spec.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ also a valid STAC Catalog.
4949
| id | string | **REQUIRED.** Identifier for the Catalog. |
5050
| title | string | A short descriptive one-line title for the Catalog. |
5151
| description | string | **REQUIRED.** Detailed multi-line description to fully explain the Catalog. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. |
52-
| summaries | Map<string, \[*]\|[Stats Object](../collection-spec/collection-spec.md#stats-object)> | A map of property summaries, either a set of values or statistics such as a range. More info in the [Collection spec](../collection-spec/collection-spec.md#summaries). |
52+
| summaries | Map<string, \[\*]\|[Range Object](../collection-spec/collection-spec.md#range-object)\|[JSON Schema Object](../collection-spec/collection-spec.md#json-schema-object)> | A map of property summaries, either a set of values, a range of values or a [JSON Schema](https://json-schema.org). More info in the [Collection spec](../collection-spec/collection-spec.md#summaries). |
5353
| links | [[Link Object](#link-object)] | **REQUIRED.** A list of references to other documents. |
5454

5555
### Additional Field Information

catalog-spec/json-schema/catalog-core.json

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,18 @@
9999
"summaries": {
100100
"type": "object",
101101
"additionalProperties": {
102-
"oneOf": [
102+
"anyOf": [
103103
{
104-
"title": "Stats",
104+
"title": "JSON Schema",
105+
"type": "object",
106+
"allOf": [
107+
{
108+
"$ref": "http://json-schema.org/draft-07/schema"
109+
}
110+
]
111+
},
112+
{
113+
"title": "Range",
105114
"type": "object",
106115
"required": [
107116
"minimum",
@@ -129,7 +138,7 @@
129138
"type": "array",
130139
"minItems": 1,
131140
"items": {
132-
"description": "Any data type could occur."
141+
"description": "For each field only the original data type of the property can occur (except for arrays), but we can't validate that in JSON Schema yet. See the sumamry description in the STAC specification for details."
133142
}
134143
}
135144
]

collection-spec/collection-spec.md

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
- [Link Object](#link-object)
1717
- [Relation types](#relation-types)
1818
- [Asset Object](#asset-object)
19-
- [Stats Object](#stats-object)
19+
- [Range Object](#range-object)
20+
- [JSON Schema Object](#json-schema-object)
2021
- [Media Type for STAC Collections](#media-type-for-stac-collections)
2122
- [Standalone Collections](#standalone-collections)
2223

@@ -54,7 +55,7 @@ specified in [*OGC API - Features*](https://ogcapi.ogc.org/features/), but they
5455
| license | string | **REQUIRED.** Collection's license(s), either a SPDX [License identifier](https://spdx.org/licenses/), `various` if multiple licenses apply or `proprietary` for all other cases. |
5556
| providers | \[[Provider Object](#provider-object)] | A list of providers, which may include all organizations capturing or processing the data or the hosting provider. Providers should be listed in chronological order with the most recent provider being the last element of the list. |
5657
| extent | [Extent Object](#extent-object) | **REQUIRED.** Spatial and temporal extents. |
57-
| summaries | Map<string, \[*]\|[Stats Object](#stats-object)> | STRONGLY RECOMMENDED. A map of property summaries, either a set of values or statistics such as a range. |
58+
| summaries | Map<string, \[\*]\|[Range Object](#range-object)\|[JSON Schema Object](#json-schema-object)> | STRONGLY RECOMMENDED. A map of property summaries, either a set of values, a range of values or a [JSON Schema](https://json-schema.org). |
5859
| links | \[[Link Object](#link-object)] | **REQUIRED.** A list of references to other documents. |
5960
| assets | Map<string, [Asset Object](#asset-object)> | Dictionary of asset objects that can be downloaded, each with a unique key. |
6061

@@ -95,12 +96,12 @@ Summaries help to fully define Collections, especially if they don't link to any
9596
build tailored user interfaces for querying the data, by presenting the potential values that are available.
9697
Summaries should summarize all values in every Item underneath the collection, including in any nested sub-Catalogs.
9798

98-
A summary for a field can be specified in two ways:
99+
A summary for a field can be specified in three ways:
99100

100101
1. A set of all distinct values in an array: The set of values must contain at least one element and it is strongly recommended to list all values.
101102
If the field summarizes an array (e.g. [`instruments`](../item-spec/common-metadata.md#instrument)),
102103
the field's array elements of each Item must be merged to a single array with unique elements.
103-
2. Statistics in a [Stats Object](#stats-object): Statistics by default only specify the range (minimum and maximum values),
104+
2. A Range in a [Range Object](#range-object): Statistics by default only specify the range (minimum and maximum values),
104105
but can optionally be accompanied by additional statistical values.
105106
The range specified by the `minimum` and `maximum` properties can specify the potential range of values,
106107
but it is recommended to be as precise as possible.
@@ -281,9 +282,9 @@ or streamed. The definition provided here, at the Collection level, is the same
281282
| type | string | [Media type](../item-spec/item-spec.md#asset-media-type) of the asset. See the [common media types](../best-practices.md#common-media-types-in-stac) in the best practice doc for commonly used asset types. |
282283
| roles | \[string] | The [semantic roles](../item-spec/item-spec.md#asset-role-types) of the asset, similar to the use of `rel` in links. |
283284

284-
### Stats Object
285+
### Range Object
285286

286-
For a good understanding of the summarized field, statistics can be added.
287+
For summaries with a lot of continuous values, statistics can be added.
287288
By default, only ranges with a minimum and a maximum value can be specified.
288289
Ranges can be specified for [ordinal](https://en.wikipedia.org/wiki/Level_of_measurement#Ordinal_scale) values only,
289290
which means they need to have a rank order.
@@ -295,6 +296,14 @@ Implementors are free to add other derived statistical values to the object, for
295296
| minimum | number\|string | **REQUIRED.** Minimum value. |
296297
| maximum | number\|string | **REQUIRED.** Maximum value. |
297298

299+
### JSON Schema Object
300+
301+
For a full understanding of the summarized field, a JSON Schema can be added for each summarized field.
302+
This allows very fine-grained information for each field and each value as JSON Schema is also extensible.
303+
304+
It is recommended to use [JSON Schema draft-07](https://json-schema.org/specification-links.html#draft-7)
305+
to align with the JSON Schemas provided by STAC.
306+
298307
## Media Type for STAC Collections
299308

300309
A STAC Collection is a JSON file ([RFC 8259](https://tools.ietf.org/html/rfc8259)), and thus should use the

examples/collection-only/collection.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,11 @@
7878
"minimum": 6.78,
7979
"maximum": 89.9
8080
},
81-
"sci:citation": [
82-
"Copernicus Sentinel data [Year]"
83-
],
81+
"sci:citation": {
82+
"$schema": "http://json-schema.org/draft-07/schema#",
83+
"type": "string",
84+
"pattern": "Copernicus Sentinel data \\d{4}"
85+
},
8486
"gsd": [
8587
10,
8688
30,

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"publish-schemas": "node .circleci/publish-schemas.js"
1313
},
1414
"dependencies": {
15+
"fs-extra": "^8.1.0",
1516
"gh-pages": "^3.0.0",
1617
"klaw-sync": "^6.0.0",
1718
"remark-cli": "^8.0.0",
@@ -21,6 +22,6 @@
2122
"remark-preset-lint-markdown-style-guide": "^3.0.0",
2223
"remark-preset-lint-recommended": "^4.0.0",
2324
"remark-validate-links": "^10.0.0",
24-
"stac-node-validator": "^1.0.1"
25+
"stac-node-validator": "^1.1.0"
2526
}
2627
}

schema.json

Whitespace-only changes.

0 commit comments

Comments
 (0)