From 196f42dd6abc4cf8a9d93423fe017768dd0a1260 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= Date: Thu, 28 Nov 2024 09:43:50 +0100 Subject: [PATCH 1/5] Fixes #2021 --- docs/odata-json-format/odata-json-format.html | 2 +- docs/odata-json-format/odata-json-format.md | 2 ++ docs/odata-protocol/odata-protocol.html | 17 +++++++++++------ docs/odata-protocol/odata-protocol.md | 6 ++++-- odata-json-format/4 Common Characteristics.md | 2 ++ odata-protocol/1 Introduction.md | 5 ++++- odata-protocol/11.4 Data Modification.md | 3 ++- 7 files changed, 26 insertions(+), 11 deletions(-) diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html index 243ac6f8..a1b3890c 100644 --- a/docs/odata-json-format/odata-json-format.html +++ b/docs/odata-json-format/odata-json-format.html @@ -778,7 +778,7 @@

The etag control information MAY be applied to an entity or collection in a response. The value of the control information is an entity tag (ETag) which is an opaque string value that can be used in a subsequent request to determine if the value of the entity or collection has changed.

-

For details on how ETags are used, see OData-Protocol, section 11.4.1.1.

+

For details on how ETags are used, see OData-Protocol, section 11.4.1.1. The special value "@etag": "" has the same meaning as the header If-None-Match: *, see OData-Protocol, section 11.4.4.

The etag control information is ignored in request payloads for single entities and not written in responses if metadata=none is requested.

diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md index e91a3a14..5227d0af 100644 --- a/docs/odata-json-format/odata-json-format.md +++ b/docs/odata-json-format/odata-json-format.md @@ -1047,6 +1047,8 @@ opaque string value that can be used in a subsequent request to determine if the value of the entity or collection has changed. For details on how ETags are used, see [OData-Protocol, section 11.4.1.1](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#UseofETagsforAvoidingUpdateConflicts). +The special value `"@etag": ""` has the same meaning as the header `If-None-Match: *`, +see [OData-Protocol, section 11.4.4](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#UpsertanEntity). The `etag` control information is ignored in request payloads for single entities and not written in responses if diff --git a/docs/odata-protocol/odata-protocol.html b/docs/odata-protocol/odata-protocol.html index dc4c035f..c956f53a 100644 --- a/docs/odata-protocol/odata-protocol.html +++ b/docs/odata-protocol/odata-protocol.html @@ -584,9 +584,9 @@

356 -Section 11.4.2.2](#CreateRelatedEntitiesWhenCreatinganEntity) Deep-insert response includes at least the properties present in the request +Section 11.4.2.2 +Deep-insert response includes at least the properties present in the request 363 - Section 11.4.3 @@ -599,21 +599,26 @@

455 +Section 11.4.4 +Empty @etag to prevent inserts +2021 + + Section 11.4.9.3 Setting a complex property to a different type 534 - + Section 11.4.13 Semantics of continue-on-error when replacing a collection of entities 358 - + Section 12 Allow 400 Bad Request in addition to 501 Not Implemented for unsupported functionality 391 - + Section 12.3 Encoding of plus character in URLs 485 @@ -2563,7 +2568,7 @@

11.

Singleton entities can be upserted if they are nullable. Services supporting this SHOULD advertise it by annotating the singleton with the term Capabilities.UpdateRestrictions (nested property Upsertable with value true) defined in OData-VocCap.

A key property whose value is provided in the request URL SHOULD be omitted from the request body. If key properties are provided in the request URL and the request body with different values, services MUST either fail the request or ignore the value in the request body.

To ensure that an update request is not treated as an insert, the client MAY specify an If-Match header in the update request. The service MUST NOT treat an update request containing an If-Match header as an insert.

-

A PUT or PATCH request MUST NOT be treated as an update if an If-None-Match header is specified with a value of *.

+

A PUT or PATCH request MUST NOT be treated as an update if an If-None-Match header is specified with a value of * or the @etag control information OData-JSON, section 4.6.10 is specified with an empty string as value.

11.4.5 Delete an Entity

diff --git a/docs/odata-protocol/odata-protocol.md b/docs/odata-protocol/odata-protocol.md index 42bd081a..dcc083f6 100644 --- a/docs/odata-protocol/odata-protocol.md +++ b/docs/odata-protocol/odata-protocol.md @@ -358,9 +358,10 @@ Section | Feature / Change | Issue [Section 10.2](#CollectionofEntities)| Context URLs use parentheses-style keys without percent-encoding| [368](https://github.com/oasis-tcs/odata-specs/issues/368) [Section 11.4](#DataModification)| Response code `204 No Content` after successful data modification if requested response could not be constructed| [443](https://github.com/oasis-tcs/odata-specs/issues/443) [Section 11.4.2](#CreateanEntity)| Services can validate non-insertable property values in insert payloads| [356](https://github.com/oasis-tcs/odata-specs/issues/356) -|Section 11.4.2.2](#CreateRelatedEntitiesWhenCreatinganEntity) Deep-insert response includes at least the properties present in the request| [363](https://github.com/oasis-tcs/odata-specs/issues/363) +[Section 11.4.2.2](#CreateRelatedEntitiesWhenCreatinganEntity)| Deep-insert response includes at least the properties present in the request| [363](https://github.com/oasis-tcs/odata-specs/issues/363) [Section 11.4.3](#UpdateanEntity)| Services can validate non-updatable property values in update payloads| [356](https://github.com/oasis-tcs/odata-specs/issues/356) [Section 11.4.4](#UpsertanEntity)| Upserts to single-valued non-containment navigation properties| [455](https://github.com/oasis-tcs/odata-specs/issues/455) +[Section 11.4.4](#UpsertanEntity)| Empty `@etag` to prevent inserts| [2021](https://github.com/oasis-tcs/odata-specs/issues/2021) [Section 11.4.9.3](#UpdateaComplexProperty)| Setting a complex property to a different type| [534](https://github.com/oasis-tcs/odata-specs/issues/534) [Section 11.4.13](#ReplaceaCollectionofEntities)| Semantics of `continue-on-error` when replacing a collection of entities | [358](https://github.com/oasis-tcs/odata-specs/issues/358) [Section 12](#Conformance) | Allow `400 Bad Request` in addition to `501 Not Implemented` for unsupported functionality| [391](https://github.com/oasis-tcs/odata-specs/issues/391) @@ -4711,7 +4712,8 @@ request. The service MUST NOT treat an update request containing an A `PUT` or `PATCH` request MUST NOT be treated as an update if an [`If-None-Match`](#HeaderIfNoneMatch) header is specified with a value -of `*`. +of `*` or the `@etag` control information [OData-JSON, section 4.6.10](https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html#ControlInformationetagodataetag) +is specified with an empty string as value. ### 11.4.5 Delete an Entity diff --git a/odata-json-format/4 Common Characteristics.md b/odata-json-format/4 Common Characteristics.md index b09a8501..96212944 100644 --- a/odata-json-format/4 Common Characteristics.md +++ b/odata-json-format/4 Common Characteristics.md @@ -499,6 +499,8 @@ opaque string value that can be used in a subsequent request to determine if the value of the entity or collection has changed. For details on how ETags are used, see [#OData-Protocol#UseofETagsforAvoidingUpdateConflicts]. +The special value `"@etag": ""` has the same meaning as the header `If-None-Match: *`, +see [#OData-Protocol#UpsertanEntity]. The `etag` control information is ignored in request payloads for single entities and not written in responses if diff --git a/odata-protocol/1 Introduction.md b/odata-protocol/1 Introduction.md index f1dc9565..0c0cafca 100644 --- a/odata-protocol/1 Introduction.md +++ b/odata-protocol/1 Introduction.md @@ -36,7 +36,7 @@ Response code `204 No Content` after successful data modification if requested r [Section ##CreateanEntity]| Services can validate non-insertable property values in insert payloads| [356](https://github.com/oasis-tcs/odata-specs/issues/356) -|Section ##CreateRelatedEntitiesWhenCreatinganEntity] +[Section ##CreateRelatedEntitiesWhenCreatinganEntity]| Deep-insert response includes at least the properties present in the request| [363](https://github.com/oasis-tcs/odata-specs/issues/363) [Section ##UpdateanEntity]| @@ -45,6 +45,9 @@ Services can validate non-updatable property values in update payloads| [Section ##UpsertanEntity]| Upserts to single-valued non-containment navigation properties| [455](https://github.com/oasis-tcs/odata-specs/issues/455) +[Section ##UpsertanEntity]| +Empty `@etag` to prevent inserts| +[2021](https://github.com/oasis-tcs/odata-specs/issues/2021) [Section ##UpdateaComplexProperty]| Setting a complex property to a different type| [534](https://github.com/oasis-tcs/odata-specs/issues/534) diff --git a/odata-protocol/11.4 Data Modification.md b/odata-protocol/11.4 Data Modification.md index 8ee964bd..9b2eea9b 100644 --- a/odata-protocol/11.4 Data Modification.md +++ b/odata-protocol/11.4 Data Modification.md @@ -696,7 +696,8 @@ request. The service MUST NOT treat an update request containing an A `PUT` or `PATCH` request MUST NOT be treated as an update if an [`If-None-Match`](#HeaderIfNoneMatch) header is specified with a value -of `*`. +of `*` or the `@etag` control information [#OData-JSON#ControlInformationetagodataetag] +is specified with an empty string as value. ### ##subsubsec Delete an Entity From 16c5799c48b166337f4c107d66c5be62c04004a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= Date: Thu, 28 Nov 2024 15:34:43 +0100 Subject: [PATCH 2/5] @ralfhandl's suggestion --- docs/odata-json-format/odata-json-format.html | 2 +- docs/odata-json-format/odata-json-format.md | 4 ++-- docs/odata-protocol/odata-protocol.html | 13 +++++++------ docs/odata-protocol/odata-protocol.md | 9 ++++++--- odata-json-format/4 Common Characteristics.md | 4 ++-- odata-protocol/1 Introduction.md | 6 +++--- odata-protocol/11.4 Data Modification.md | 7 +++++-- 7 files changed, 26 insertions(+), 19 deletions(-) diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html index a1b3890c..c20e7c00 100644 --- a/docs/odata-json-format/odata-json-format.html +++ b/docs/odata-json-format/odata-json-format.html @@ -778,7 +778,7 @@

The etag control information MAY be applied to an entity or collection in a response. The value of the control information is an entity tag (ETag) which is an opaque string value that can be used in a subsequent request to determine if the value of the entity or collection has changed.

-

For details on how ETags are used, see OData-Protocol, section 11.4.1.1. The special value "@etag": "" has the same meaning as the header If-None-Match: *, see OData-Protocol, section 11.4.4.

+

For details on how ETags are used, see OData-Protocol, section 11.4.1.1. The special value "@etag": "" is equivalent to the header If-None-Match: *, see OData-Protocol, section 11.4.12.

The etag control information is ignored in request payloads for single entities and not written in responses if metadata=none is requested.

diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md index 5227d0af..dc88008f 100644 --- a/docs/odata-json-format/odata-json-format.md +++ b/docs/odata-json-format/odata-json-format.md @@ -1047,8 +1047,8 @@ opaque string value that can be used in a subsequent request to determine if the value of the entity or collection has changed. For details on how ETags are used, see [OData-Protocol, section 11.4.1.1](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#UseofETagsforAvoidingUpdateConflicts). -The special value `"@etag": ""` has the same meaning as the header `If-None-Match: *`, -see [OData-Protocol, section 11.4.4](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#UpsertanEntity). +The special value `"@etag": ""` is equivalent to the header `If-None-Match: *`, +see [OData-Protocol, section 11.4.12](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#UpdateaCollectionofEntities). The `etag` control information is ignored in request payloads for single entities and not written in responses if diff --git a/docs/odata-protocol/odata-protocol.html b/docs/odata-protocol/odata-protocol.html index c956f53a..c7633b11 100644 --- a/docs/odata-protocol/odata-protocol.html +++ b/docs/odata-protocol/odata-protocol.html @@ -599,15 +599,15 @@

455 -Section 11.4.4 -Empty @etag to prevent inserts -2021 - - Section 11.4.9.3 Setting a complex property to a different type 534 + +Section 11.4.12 +Control information to prevent updates +2021 + Section 11.4.13 Semantics of continue-on-error when replacing a collection of entities @@ -2568,7 +2568,7 @@

11.

Singleton entities can be upserted if they are nullable. Services supporting this SHOULD advertise it by annotating the singleton with the term Capabilities.UpdateRestrictions (nested property Upsertable with value true) defined in OData-VocCap.

A key property whose value is provided in the request URL SHOULD be omitted from the request body. If key properties are provided in the request URL and the request body with different values, services MUST either fail the request or ignore the value in the request body.

To ensure that an update request is not treated as an insert, the client MAY specify an If-Match header in the update request. The service MUST NOT treat an update request containing an If-Match header as an insert.

-

A PUT or PATCH request MUST NOT be treated as an update if an If-None-Match header is specified with a value of * or the @etag control information OData-JSON, section 4.6.10 is specified with an empty string as value.

+

A PUT or PATCH request MUST NOT be treated as an update if an If-None-Match header is specified with a value of *.

11.4.5 Delete an Entity

@@ -2764,6 +2764,7 @@

Core.ContentID term defined in OData-VocCore. Services that respond with 200 OK SHOULD annotate the entities in the response using the same Core.ContentID value as specified in the request.

Services SHOULD advertise support for updating a collection using a delta payload through the DeltaUpdateSupported property of the Capabilities.UpdateRestrictions term, and SHOULD advertise support for returning the Core.ContentID through the ContentIDSupported property of the Capabilities.DeepUpdateSupport term, both defined in OData-VocCap.

For each entity being updated or removed, clients MAY specify an ETag value obtained from a previous request. If an ETag is provided that does not match the ETag value of the entity being updated or removed, or if an ETag is provided when adding or updating an entity that does not currently exist, then services that support ETags MUST NOT apply the change and instead report a 412 Precondition Failed error. The special value * can be used to match any existing entity but fail if the entity does not already exist.

+

Added/changed entities that specify format-specific control information equivalent to an If-Match-None: * header OData-JSON, section 4.6.10 MUST NOT be treated as an update.

The response, if requested, is a delta payload, in the same structure and order as the request payload, representing the applied changes.

11.4.12.1 Error Handling when Updating a Collection of Entities

diff --git a/docs/odata-protocol/odata-protocol.md b/docs/odata-protocol/odata-protocol.md index dcc083f6..9ec59e66 100644 --- a/docs/odata-protocol/odata-protocol.md +++ b/docs/odata-protocol/odata-protocol.md @@ -361,8 +361,8 @@ Section | Feature / Change | Issue [Section 11.4.2.2](#CreateRelatedEntitiesWhenCreatinganEntity)| Deep-insert response includes at least the properties present in the request| [363](https://github.com/oasis-tcs/odata-specs/issues/363) [Section 11.4.3](#UpdateanEntity)| Services can validate non-updatable property values in update payloads| [356](https://github.com/oasis-tcs/odata-specs/issues/356) [Section 11.4.4](#UpsertanEntity)| Upserts to single-valued non-containment navigation properties| [455](https://github.com/oasis-tcs/odata-specs/issues/455) -[Section 11.4.4](#UpsertanEntity)| Empty `@etag` to prevent inserts| [2021](https://github.com/oasis-tcs/odata-specs/issues/2021) [Section 11.4.9.3](#UpdateaComplexProperty)| Setting a complex property to a different type| [534](https://github.com/oasis-tcs/odata-specs/issues/534) +[Section 11.4.12](#UpdateaCollectionofEntities)| Control information to prevent updates| [2021](https://github.com/oasis-tcs/odata-specs/issues/2021) [Section 11.4.13](#ReplaceaCollectionofEntities)| Semantics of `continue-on-error` when replacing a collection of entities | [358](https://github.com/oasis-tcs/odata-specs/issues/358) [Section 12](#Conformance) | Allow `400 Bad Request` in addition to `501 Not Implemented` for unsupported functionality| [391](https://github.com/oasis-tcs/odata-specs/issues/391) [Section 12.3](#InteroperableODataClients) | Encoding of plus character in URLs | [485](https://github.com/oasis-tcs/odata-specs/issues/485) @@ -4712,8 +4712,7 @@ request. The service MUST NOT treat an update request containing an A `PUT` or `PATCH` request MUST NOT be treated as an update if an [`If-None-Match`](#HeaderIfNoneMatch) header is specified with a value -of `*` or the `@etag` control information [OData-JSON, section 4.6.10](https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html#ControlInformationetagodataetag) -is specified with an empty string as value. +of `*`. ### 11.4.5 Delete an Entity @@ -5184,6 +5183,10 @@ then services that support ETags MUST NOT apply the change and instead [report](#ErrorHandlingwhenUpdatingaCollectionofEntities) a `412 Precondition Failed` error. The special value `*` can be used to match any existing entity but fail if the entity does not already exist. +Added/changed entities that specify format-specific control information +equivalent to an `If-Match-None: *` header [OData-JSON, section 4.6.10](https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html#ControlInformationetagodataetag) +MUST NOT be treated as an update. + The response, if requested, is a delta payload, in the same structure and order as the request payload, representing the applied changes. diff --git a/odata-json-format/4 Common Characteristics.md b/odata-json-format/4 Common Characteristics.md index 96212944..5ec11f9a 100644 --- a/odata-json-format/4 Common Characteristics.md +++ b/odata-json-format/4 Common Characteristics.md @@ -499,8 +499,8 @@ opaque string value that can be used in a subsequent request to determine if the value of the entity or collection has changed. For details on how ETags are used, see [#OData-Protocol#UseofETagsforAvoidingUpdateConflicts]. -The special value `"@etag": ""` has the same meaning as the header `If-None-Match: *`, -see [#OData-Protocol#UpsertanEntity]. +The special value `"@etag": ""` is equivalent to the header `If-None-Match: *`, +see [#OData-Protocol#UpdateaCollectionofEntities]. The `etag` control information is ignored in request payloads for single entities and not written in responses if diff --git a/odata-protocol/1 Introduction.md b/odata-protocol/1 Introduction.md index 0c0cafca..91a8b640 100644 --- a/odata-protocol/1 Introduction.md +++ b/odata-protocol/1 Introduction.md @@ -45,12 +45,12 @@ Services can validate non-updatable property values in update payloads| [Section ##UpsertanEntity]| Upserts to single-valued non-containment navigation properties| [455](https://github.com/oasis-tcs/odata-specs/issues/455) -[Section ##UpsertanEntity]| -Empty `@etag` to prevent inserts| -[2021](https://github.com/oasis-tcs/odata-specs/issues/2021) [Section ##UpdateaComplexProperty]| Setting a complex property to a different type| [534](https://github.com/oasis-tcs/odata-specs/issues/534) +[Section ##UpdateaCollectionofEntities]| +Control information to prevent updates| +[2021](https://github.com/oasis-tcs/odata-specs/issues/2021) [Section ##ReplaceaCollectionofEntities]| Semantics of `continue-on-error` when replacing a collection of entities | [358](https://github.com/oasis-tcs/odata-specs/issues/358) [Section ##Conformance] | Allow `400 Bad Request` in addition to `501 Not Implemented` for unsupported functionality| [391](https://github.com/oasis-tcs/odata-specs/issues/391) [Section ##InteroperableODataClients] | Encoding of plus character in URLs | [485](https://github.com/oasis-tcs/odata-specs/issues/485) diff --git a/odata-protocol/11.4 Data Modification.md b/odata-protocol/11.4 Data Modification.md index 9b2eea9b..47fcdd5c 100644 --- a/odata-protocol/11.4 Data Modification.md +++ b/odata-protocol/11.4 Data Modification.md @@ -696,8 +696,7 @@ request. The service MUST NOT treat an update request containing an A `PUT` or `PATCH` request MUST NOT be treated as an update if an [`If-None-Match`](#HeaderIfNoneMatch) header is specified with a value -of `*` or the `@etag` control information [#OData-JSON#ControlInformationetagodataetag] -is specified with an empty string as value. +of `*`. ### ##subsubsec Delete an Entity @@ -1168,6 +1167,10 @@ then services that support ETags MUST NOT apply the change and instead [report](#ErrorHandlingwhenUpdatingaCollectionofEntities) a `412 Precondition Failed` error. The special value `*` can be used to match any existing entity but fail if the entity does not already exist. +Added/changed entities that specify format-specific control information +equivalent to an `If-Match-None: *` header [#OData-JSON#ControlInformationetagodataetag] +MUST NOT be treated as an update. + The response, if requested, is a delta payload, in the same structure and order as the request payload, representing the applied changes. From d82e8da3f5b51f61bf348c2ffd6fff49b9ad88ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= Date: Thu, 28 Nov 2024 17:15:52 +0100 Subject: [PATCH 3/5] @ralfhandl's suggestion --- docs/odata-json-format/odata-json-format.html | 11 ++++++++--- docs/odata-json-format/odata-json-format.md | 4 +++- odata-json-format/1 Introduction.md | 3 +++ odata-json-format/4 Common Characteristics.md | 3 ++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html index c20e7c00..b6b17c64 100644 --- a/docs/odata-json-format/odata-json-format.html +++ b/docs/odata-json-format/odata-json-format.html @@ -389,16 +389,21 @@

1928 +Section 4.6.10 +Control information "@etag": "" to prevent updates +2021 + + Section 4.6.12 mediaContentType can be null 536 - + Section 7, Section A.2 Removed reference to obsolete version of GeoJSON 456 - + Section 15.3 type control information, if present, must come immediately after removed @@ -778,7 +783,7 @@

The etag control information MAY be applied to an entity or collection in a response. The value of the control information is an entity tag (ETag) which is an opaque string value that can be used in a subsequent request to determine if the value of the entity or collection has changed.

-

For details on how ETags are used, see OData-Protocol, section 11.4.1.1. The special value "@etag": "" is equivalent to the header If-None-Match: *, see OData-Protocol, section 11.4.12.

+

For details on how ETags are used, see OData-Protocol, section 11.4.1.1. The special value "@etag": "*" is equivalent to the header If-Match: *, and the special value "@etag": "" is equivalent to the header If-None-Match: *, see OData-Protocol, section 11.4.12.

The etag control information is ignored in request payloads for single entities and not written in responses if metadata=none is requested.

diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md index dc88008f..5e0dd114 100644 --- a/docs/odata-json-format/odata-json-format.md +++ b/docs/odata-json-format/odata-json-format.md @@ -218,6 +218,7 @@ Section | Feature / Change | Issue --------|------------------|------ [Section 4.6.1](#ControlInformationcontextodatacontext)| Fragment portion of Context URL is not percent-encoded| [368](https://github.com/oasis-tcs/odata-specs/issues/368) [Section 4.6.8](#ControlInformationidodataid)| Transient entities can be identifiable| [1928](https://github.com/oasis-tcs/odata-specs/issues/1928) +[Section 4.6.10](#ControlInformationetagodataetag)| Control information `"@etag": ""` to prevent updates| [2021](https://github.com/oasis-tcs/odata-specs/issues/2021) [Section 4.6.12](#ControlInformationmediaodatamedia)| `mediaContentType` can be `null`| [536](https://github.com/oasis-tcs/odata-specs/issues/536) [Section 7](#StructuralProperty), [Section A.2](#InformativeReferences)| Removed reference to obsolete version of GeoJSON| [456](https://github.com/oasis-tcs/odata-specs/issues/456) [Section 15.3](#DeletedEntity) | `type` control information, if present, must come immediately after `removed` | @@ -1047,7 +1048,8 @@ opaque string value that can be used in a subsequent request to determine if the value of the entity or collection has changed. For details on how ETags are used, see [OData-Protocol, section 11.4.1.1](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#UseofETagsforAvoidingUpdateConflicts). -The special value `"@etag": ""` is equivalent to the header `If-None-Match: *`, +The special value `"@etag": "*"` is equivalent to the header `If-Match: *`, +and the special value `"@etag": ""` is equivalent to the header `If-None-Match: *`, see [OData-Protocol, section 11.4.12](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#UpdateaCollectionofEntities). The `etag` control information is ignored in request payloads for diff --git a/odata-json-format/1 Introduction.md b/odata-json-format/1 Introduction.md index 9d8e31c5..fdaa5e3c 100644 --- a/odata-json-format/1 Introduction.md +++ b/odata-json-format/1 Introduction.md @@ -27,6 +27,9 @@ Fragment portion of Context URL is not percent-encoded| [Section ##ControlInformationidodataid]| Transient entities can be identifiable| [1928](https://github.com/oasis-tcs/odata-specs/issues/1928) +[Section ##ControlInformationetagodataetag]| +Control information `"@etag": ""` to prevent updates| +[2021](https://github.com/oasis-tcs/odata-specs/issues/2021) [Section ##ControlInformationmediaodatamedia]| `mediaContentType` can be `null`| [536](https://github.com/oasis-tcs/odata-specs/issues/536) diff --git a/odata-json-format/4 Common Characteristics.md b/odata-json-format/4 Common Characteristics.md index 5ec11f9a..268816ac 100644 --- a/odata-json-format/4 Common Characteristics.md +++ b/odata-json-format/4 Common Characteristics.md @@ -499,7 +499,8 @@ opaque string value that can be used in a subsequent request to determine if the value of the entity or collection has changed. For details on how ETags are used, see [#OData-Protocol#UseofETagsforAvoidingUpdateConflicts]. -The special value `"@etag": ""` is equivalent to the header `If-None-Match: *`, +The special value `"@etag": "*"` is equivalent to the header `If-Match: *`, +and the special value `"@etag": ""` is equivalent to the header `If-None-Match: *`, see [#OData-Protocol#UpdateaCollectionofEntities]. The `etag` control information is ignored in request payloads for From 5b4f91b269f49e5f1918bd4dc74dc95785d25a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= Date: Thu, 28 Nov 2024 17:18:39 +0100 Subject: [PATCH 4/5] typo --- docs/odata-json-format/odata-json-format.html | 8 ++++++-- docs/odata-json-format/odata-json-format.md | 3 +-- odata-json-format/1 Introduction.md | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html index b6b17c64..821b539e 100644 --- a/docs/odata-json-format/odata-json-format.html +++ b/docs/odata-json-format/odata-json-format.html @@ -406,11 +406,15 @@

Section 15.3 type control information, if present, must come immediately after removed - +1985 + + +Section 18 +Allow common expressions in action payloads +341 -

1985 Section 18| Allow common expressions in action payloads| 341

1.2 Glossary

diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md index 5e0dd114..39893b62 100644 --- a/docs/odata-json-format/odata-json-format.md +++ b/docs/odata-json-format/odata-json-format.md @@ -221,8 +221,7 @@ Section | Feature / Change | Issue [Section 4.6.10](#ControlInformationetagodataetag)| Control information `"@etag": ""` to prevent updates| [2021](https://github.com/oasis-tcs/odata-specs/issues/2021) [Section 4.6.12](#ControlInformationmediaodatamedia)| `mediaContentType` can be `null`| [536](https://github.com/oasis-tcs/odata-specs/issues/536) [Section 7](#StructuralProperty), [Section A.2](#InformativeReferences)| Removed reference to obsolete version of GeoJSON| [456](https://github.com/oasis-tcs/odata-specs/issues/456) -[Section 15.3](#DeletedEntity) | `type` control information, if present, must come immediately after `removed` | -[1985](https://github.com/oasis-tcs/odata-specs/issues/1985) +[Section 15.3](#DeletedEntity) | `type` control information, if present, must come immediately after `removed`| [1985](https://github.com/oasis-tcs/odata-specs/issues/1985) [Section 18](#ActionInvocation)| Allow common expressions in action payloads| [341](https://github.com/oasis-tcs/odata-specs/issues/341) ## 1.2 Glossary diff --git a/odata-json-format/1 Introduction.md b/odata-json-format/1 Introduction.md index fdaa5e3c..fb21afbc 100644 --- a/odata-json-format/1 Introduction.md +++ b/odata-json-format/1 Introduction.md @@ -37,7 +37,7 @@ Control information `"@etag": ""` to prevent updates| Removed reference to obsolete version of GeoJSON| [456](https://github.com/oasis-tcs/odata-specs/issues/456) [Section ##DeletedEntity] | -`type` control information, if present, must come immediately after `removed` | +`type` control information, if present, must come immediately after `removed`| [1985](https://github.com/oasis-tcs/odata-specs/issues/1985) [Section ##ActionInvocation]| Allow common expressions in action payloads| From 98da93a935ff9f16181c03bac5ca0daab955a355 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= Date: Fri, 29 Nov 2024 10:32:07 +0100 Subject: [PATCH 5/5] For consistency --- docs/odata-json-format/odata-json-format.md | 2 +- odata-json-format/1 Introduction.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md index 39893b62..a00c1232 100644 --- a/docs/odata-json-format/odata-json-format.md +++ b/docs/odata-json-format/odata-json-format.md @@ -221,7 +221,7 @@ Section | Feature / Change | Issue [Section 4.6.10](#ControlInformationetagodataetag)| Control information `"@etag": ""` to prevent updates| [2021](https://github.com/oasis-tcs/odata-specs/issues/2021) [Section 4.6.12](#ControlInformationmediaodatamedia)| `mediaContentType` can be `null`| [536](https://github.com/oasis-tcs/odata-specs/issues/536) [Section 7](#StructuralProperty), [Section A.2](#InformativeReferences)| Removed reference to obsolete version of GeoJSON| [456](https://github.com/oasis-tcs/odata-specs/issues/456) -[Section 15.3](#DeletedEntity) | `type` control information, if present, must come immediately after `removed`| [1985](https://github.com/oasis-tcs/odata-specs/issues/1985) +[Section 15.3](#DeletedEntity)| `type` control information, if present, must come immediately after `removed`| [1985](https://github.com/oasis-tcs/odata-specs/issues/1985) [Section 18](#ActionInvocation)| Allow common expressions in action payloads| [341](https://github.com/oasis-tcs/odata-specs/issues/341) ## 1.2 Glossary diff --git a/odata-json-format/1 Introduction.md b/odata-json-format/1 Introduction.md index fb21afbc..fe81cf42 100644 --- a/odata-json-format/1 Introduction.md +++ b/odata-json-format/1 Introduction.md @@ -36,7 +36,7 @@ Control information `"@etag": ""` to prevent updates| [Section ##StructuralProperty], [Section ##InformativeReferences]| Removed reference to obsolete version of GeoJSON| [456](https://github.com/oasis-tcs/odata-specs/issues/456) -[Section ##DeletedEntity] | +[Section ##DeletedEntity]| `type` control information, if present, must come immediately after `removed`| [1985](https://github.com/oasis-tcs/odata-specs/issues/1985) [Section ##ActionInvocation]|