From c717321c7878cbacb2e21e33fc86a6a2c8575407 Mon Sep 17 00:00:00 2001 From: Matthias Mohr Date: Sat, 10 Oct 2026 12:56:14 +0200 Subject: [PATCH] Add processing:datastrip_id --- CHANGELOG.md | 1 + README.md | 25 ++++++++++++++ examples/item-sentinel-2.json | 64 +++++++++++++++++++++++++++++++++++ json-schema/schema.json | 17 ++++++++++ 4 files changed, 107 insertions(+) create mode 100644 examples/item-sentinel-2.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d4dacc..289e544 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The fields can be used in Provider Objects in Item Properties and Assets - The JSON Schema validates the fields in Collection summaries - Relation type `source_for` for forward provenance (inverse of `derived_from`) +- `processing:datastrip_id` to identify the part of a datatake that the ground segment processed as one unit ### Changed diff --git a/README.md b/README.md index d5edfae..d0484f3 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ and therefore are shared across all items, it is recommended adding the fields t - Examples: - [Item example](examples/item.json): Shows the basic usage of the extension in a STAC Item - [Collection example](examples/collection.json): Shows the basic usage of the extension in a STAC Collection + - [Sentinel-2 Item example](examples/item-sentinel-2.json): Shows the datastrip identifier in a STAC Item - [JSON Schema](json-schema/schema.json) - [Changelog](./CHANGELOG.md) @@ -44,6 +45,7 @@ The fields in the table below can be used in these parts of STAC documents: | processing:datetime | string | Processing date and time of the corresponding data formatted according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6), in UTC. | | processing:version | string | The version of the primary processing software or processing chain that produced the data. For example, this could be the processing baseline for the Sentinel missions. | | processing:software | Map | A dictionary with name/version for key/value describing one or more applications or libraries that were involved during the production of the data for provenance purposes. | +| processing:datastrip_id | string | The identifier of the datastrip, i.e. the part of a datatake that the ground segment processed as one unit. See [Datastrip ID](#datastrip-id) for details. | In more detail, the following restrictions apply: @@ -93,6 +95,29 @@ In Item Properties: If you need more information, you could also link to such files via the relation type `processing-software`. - `version` is usually not used in the context of processing and describes the version of the metadata. +### Datastrip ID + +A datatake is one continuous acquisition by an instrument in one mode. +Some ground segments don't process a datatake as a whole. +Instead, they process parts of it independently, e.g. the parts that different ground stations received. +Sentinel-2 calls such a part a *datastrip*, and Landsat 7 calls it a *subinterval*. +`processing:datastrip_id` gives the identifier of the datastrip that the data was produced from. + +The value is an opaque string. +Use the identifier as given by the provider and don't change its format. +Some providers assign new datastrip identifiers for each processing level or processing run. +Thus Items of the same acquisition at different processing levels may have different values. + +For the identifier of the datatake itself, use `instrument:datatake_id` from the +[Instruments extension](https://github.com/stac-extensions/instruments). +If the ground segment processes the datatake as a whole, don't provide `processing:datastrip_id`. +Note that some providers (e.g. Airbus for Pléiades) use the term *data strip* for the whole acquisition. +Such identifiers are datatake identifiers and should be provided in `instrument:datatake_id` instead. + +If the data of an Item comes from more than one datastrip, don't provide this field in the Item properties. +Instead, provide it in the Assets if each Asset comes from a single datastrip. +Collections should not summarize this field. + ### Linking the Items In Items that declare this processing extension, it is recommended to add one or more diff --git a/examples/item-sentinel-2.json b/examples/item-sentinel-2.json new file mode 100644 index 0000000..404291a --- /dev/null +++ b/examples/item-sentinel-2.json @@ -0,0 +1,64 @@ +{ + "stac_version": "1.1.0", + "stac_extensions": [ + "https://stac-extensions.github.io/processing/v1.2.0/schema.json" + ], + "type": "Feature", + "id": "S2A_MSIL2A_20250626T101701_R065_T32UQU_20250626T142217", + "bbox": [ + 11.667, + 47.72, + 12.586, + 48.721 + ], + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.667, + 47.72 + ], + [ + 12.586, + 47.72 + ], + [ + 12.586, + 48.721 + ], + [ + 11.667, + 48.721 + ], + [ + 11.667, + 47.72 + ] + ] + ] + }, + "properties": { + "datetime": "2025-06-26T10:17:01.024Z", + "constellation": "sentinel-2", + "platform": "sentinel-2a", + "instruments": [ + "msi" + ], + "processing:level": "L2", + "processing:version": "05.11", + "processing:datetime": "2025-06-26T14:22:17Z", + "processing:datastrip_id": "S2A_OPER_MSI_L2A_DS_2APS_20250626T142217_S20250626T102649_N05.11" + }, + "links": [ + { + "href": "https://example.com/examples/item-sentinel-2.json", + "rel": "self" + } + ], + "assets": { + "data": { + "href": "https://example.com/examples/file.xyz" + } + } +} diff --git a/json-schema/schema.json b/json-schema/schema.json index 518f507..c557f7a 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -155,6 +155,14 @@ } ] }, + "processing:datastrip_id": { + "title": "Datastrip ID", + "type": "string", + "minLength": 1, + "examples": [ + "S2A_OPER_MSI_L2A_DS_2APS_20250626T142217_S20250626T102649_N05.11" + ] + }, "fields": { "$comment": "Don't require fields here as they would be required in all places where the fields are referenced.", "type": "object", @@ -179,6 +187,9 @@ }, "processing:software": { "$ref": "#/definitions/processing:software" + }, + "processing:datastrip_id": { + "$ref": "#/definitions/processing:datastrip_id" } }, "patternProperties": { @@ -275,6 +286,12 @@ "items": { "$ref": "#/definitions/processing:software" } + }, + "processing:datastrip_id": { + "type": ["array", "object"], + "items": { + "$ref": "#/definitions/processing:datastrip_id" + } } }, "patternProperties": {