From dd8af9db1a8c2a7a08b8875e7ac768fa3def52e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= Date: Thu, 13 Feb 2025 08:36:19 +0100 Subject: [PATCH 1/6] Omission of collection-valued parameters/properties --- docs/odata-csdl-xml/odata-csdl-xml.html | 3 ++- docs/odata-csdl-xml/odata-csdl-xml.md | 8 +++++++- docs/odata-json-format/odata-json-format.html | 3 ++- docs/odata-json-format/odata-json-format.md | 9 +++++++-- docs/odata-protocol/odata-protocol.html | 5 +++-- docs/odata-protocol/odata-protocol.md | 6 ++++-- odata-csdl/12 Action and Function.md | 8 +++++++- odata-json-format/16 Bound Function.md | 9 +++++++-- odata-protocol/8 Header Fields.md | 6 ++++-- 9 files changed, 43 insertions(+), 14 deletions(-) diff --git a/docs/odata-csdl-xml/odata-csdl-xml.html b/docs/odata-csdl-xml/odata-csdl-xml.html index 8eb5d574..0c891868 100644 --- a/docs/odata-csdl-xml/odata-csdl-xml.html +++ b/docs/odata-csdl-xml/odata-csdl-xml.html @@ -1934,7 +1934,8 @@

Attribute TypeFor collection-valued parameters the value of Type is the character sequence Collection( followed by the qualified name of the parameter’s type, followed by a closing parenthesis ).

Attribute Nullable

The value of Nullable is one of the Boolean literals true or false. Absence of the attribute means true.

-

The value true means that the parameter accepts a null value.

+

For single-valued parameters the value true means that the parameter accepts a null value.

+

For collection-valued parameters the parameter value will always be a collection that MAY be empty. In this case Nullable applies to items of the collection and specifies whether the collection MAY contain null values.

Annotation Core.OptionalParameter

A parameter that is annotated with the term Core.OptionalParameter MAY be omitted when invoking the function or action.

diff --git a/docs/odata-csdl-xml/odata-csdl-xml.md b/docs/odata-csdl-xml/odata-csdl-xml.md index 9b762167..a44d8e64 100644 --- a/docs/odata-csdl-xml/odata-csdl-xml.md +++ b/docs/odata-csdl-xml/odata-csdl-xml.md @@ -2846,7 +2846,13 @@ type, followed by a closing parenthesis `)`. The value of `Nullable` is one of the Boolean literals `true` or `false`. Absence of the attribute means `true`. -The value `true` means that the parameter accepts a `null` value. +For single-valued parameters the value `true` means that the parameter +accepts a `null` value. + +For collection-valued parameters the parameter value will always be a +collection that MAY be empty. In this case `Nullable` applies to items +of the collection and specifies whether the collection MAY contain +`null` values. ::: ### Annotation `Core.OptionalParameter` diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html index 243ac6f8..2f44e825 100644 --- a/docs/odata-json-format/odata-json-format.html +++ b/docs/odata-json-format/odata-json-format.html @@ -2089,7 +2089,8 @@

}

Inside a batch request the common expressions can also be value references starting with $, as introduced in OData-Protocol, section 11.7.6.

-

Non-binding parameters that are nullable or annotated with the term Core.OptionalParameter defined in OData-VocCore MAY be omitted from the request body. If an omitted parameter is not annotated (and thus nullable), it MUST be interpreted as having the null value. If it is annotated and the annotation specifies a DefaultValue, the omitted parameter is interpreted as having that default value. If omitted and the annotation does not specify a default value, the service is free on how to interpret the omitted parameter. Note: a nullable non-binding parameter is equivalent to being annotated as optional with a default value of null.

+

Non-binding single-valued parameters that are nullable or annotated with the term Core.OptionalParameter defined in OData-VocCore MAY be omitted from the request body. If an omitted single-valued parameter is not annotated (and thus nullable), it MUST be interpreted as having the null value. If it is annotated and the annotation specifies a DefaultValue, the omitted parameter is interpreted as having that default value. If omitted and the annotation does not specify a default value, the service is free on how to interpret the omitted parameter. Note: a nullable non-binding parameter is equivalent to being annotated as optional with a default value of null.

+

Non-binding collection-valued parameters MAY be omitted from the request body regardless of nullability or optionality. Unless a Core.OptionalValue with DefaultValue is annotated, the interpretation of such an omitted parameter is up to the service, this includes assuming an empty collection or reporting an error.

Example 54:

{
diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md
index e91a3a14..ccafe19d 100644
--- a/docs/odata-json-format/odata-json-format.md
+++ b/docs/odata-json-format/odata-json-format.md
@@ -3145,10 +3145,10 @@ Content-Type: application/json
 Inside a batch request the common expressions can also be value references
 starting with `$`, as introduced in [OData-Protocol, section 11.7.6](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#ReferencingValuesfromResponseBodies).
 
-Non-binding parameters that are nullable or annotated with the term
+Non-binding single-valued parameters that are nullable or annotated with the term
 [`Core.OptionalParameter`](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#OptionalParameter) defined in
 [OData-VocCore](#ODataVocCore) MAY be omitted from the request body.
-If an omitted parameter is not annotated (and thus nullable), it MUST be
+If an omitted single-valued parameter is not annotated (and thus nullable), it MUST be
 interpreted as having the `null` value. If it is annotated
 and the annotation specifies a `DefaultValue`, the omitted
 parameter is interpreted as having that default value. If omitted and
@@ -3157,6 +3157,11 @@ how to interpret the omitted parameter. Note: a nullable non-binding
 parameter is equivalent to being annotated as optional with a default
 value of `null`.
 
+Non-binding collection-valued parameters MAY be omitted from the request body regardless
+of nullability or optionality. Unless a `Core.OptionalValue` with `DefaultValue` is annotated,
+the interpretation of such an omitted parameter is up to the service,
+this includes assuming an empty collection or reporting an error.
+
 ::: example
 Example 54:
 ```json
diff --git a/docs/odata-protocol/odata-protocol.html b/docs/odata-protocol/odata-protocol.html
index b7d303f4..940b6cad 100644
--- a/docs/odata-protocol/odata-protocol.html
+++ b/docs/odata-protocol/odata-protocol.html
@@ -1071,8 +1071,9 @@ 

8.2.8.6 Preference omit-values

The omit-values preference specifies values that MAY be omitted from a response payload. Valid values are nulls or defaults.

-

If nulls is specified, then the service MAY omit properties containing null values from the response, in which case it MUST specify the Preference-Applied response header with omit-values=nulls.

-

If defaults is specified, then the service MAY omit properties containing default values from the response, including nulls for properties that have no other defined default value. Nulls MUST be included for properties that have a non-null default value defined. If the service omits default values, it MUST specify the Preference-Applied response header with omit-values=defaults.

+

If nulls is specified, then the service MAY omit single-valued properties having null values from the response, in which case it MUST specify the Preference-Applied response header with omit-values=nulls.

+

If defaults is specified, then the service MAY omit single-valued properties containing default values from the response, including nulls for properties that have no other defined default value. Nulls MUST be included for properties that have a non-null default value defined. If the service omits default values, it MUST specify the Preference-Applied response header with omit-values=defaults.

+

Collection-valued properties cannot be omitted in this way.

Properties with instance annotations are not affected by this preference and MUST be included in the payload if they would be included without this preference. Clients MUST NOT try to reconstruct a null or default value for properties for which an instance annotation is present and no property value is present, for example if the property is omitted due to permissions and has been replaced with the instance annotation Core.Permissions and a value of None, see OData-VocCore.

Properties with null or default values MUST be included in delta payloads, if modified.

The response to a POST operation MUST include any properties not set to their default value, and the response to a PUT or PATCH operation MUST include any properties whose values were changed as part of the operation.

diff --git a/docs/odata-protocol/odata-protocol.md b/docs/odata-protocol/odata-protocol.md index 8e75197b..82f528cd 100644 --- a/docs/odata-protocol/odata-protocol.md +++ b/docs/odata-protocol/odata-protocol.md @@ -1496,17 +1496,19 @@ SHOULD be used. The `omit-values` preference specifies values that MAY be omitted from a response payload. Valid values are `nulls` or `defaults`. -If `nulls` is specified, then the service MAY omit properties containing +If `nulls` is specified, then the service MAY omit single-valued properties having null values from the response, in which case it MUST specify the `Preference-Applied` response header with `omit-values=nulls`. -If `defaults` is specified, then the service MAY omit properties +If `defaults` is specified, then the service MAY omit single-valued properties containing default values from the response, including nulls for properties that have no other defined default value. Nulls MUST be included for properties that have a non-null default value defined. If the service omits default values, it MUST specify the `Preference-Applied` response header with `omit-values=defaults`. +Collection-valued properties cannot be omitted in this way. + Properties with instance annotations are not affected by this preference and MUST be included in the payload if they would be included without this preference. Clients MUST NOT try to reconstruct a null or default diff --git a/odata-csdl/12 Action and Function.md b/odata-csdl/12 Action and Function.md index 23358fb3..500054c1 100644 --- a/odata-csdl/12 Action and Function.md +++ b/odata-csdl/12 Action and Function.md @@ -428,7 +428,13 @@ type, followed by a closing parenthesis `)`. The value of `Nullable` is one of the Boolean literals `true` or `false`. Absence of the attribute means `true`. -The value `true` means that the parameter accepts a `null` value. +For single-valued parameters the value `true` means that the parameter +accepts a `null` value. + +For collection-valued parameters the parameter value will always be a +collection that MAY be empty. In this case `Nullable` applies to items +of the collection and specifies whether the collection MAY contain +`null` values. ::: ### ##subisec Annotation `Core.OptionalParameter` diff --git a/odata-json-format/16 Bound Function.md b/odata-json-format/16 Bound Function.md index 9cb2d9da..20daa11c 100644 --- a/odata-json-format/16 Bound Function.md +++ b/odata-json-format/16 Bound Function.md @@ -325,10 +325,10 @@ Content-Type: application/json Inside a batch request the common expressions can also be value references starting with `$`, as introduced in [#OData-Protocol#ReferencingValuesfromResponseBodies]. -Non-binding parameters that are nullable or annotated with the term +Non-binding single-valued parameters that are nullable or annotated with the term [`Core.OptionalParameter`]($$$OData-VocCore$$$#OptionalParameter) defined in [OData-VocCore](#ODataVocCore) MAY be omitted from the request body. -If an omitted parameter is not annotated (and thus nullable), it MUST be +If an omitted single-valued parameter is not annotated (and thus nullable), it MUST be interpreted as having the `null` value. If it is annotated and the annotation specifies a `DefaultValue`, the omitted parameter is interpreted as having that default value. If omitted and @@ -337,6 +337,11 @@ how to interpret the omitted parameter. Note: a nullable non-binding parameter is equivalent to being annotated as optional with a default value of `null`. +Non-binding collection-valued parameters MAY be omitted from the request body regardless +of nullability or optionality. Unless a `Core.OptionalValue` with `DefaultValue` is annotated, +the interpretation of such an omitted parameter is up to the service, +this includes assuming an empty collection or reporting an error. + ::: example Example ##ex: ```json diff --git a/odata-protocol/8 Header Fields.md b/odata-protocol/8 Header Fields.md index e85c0b97..c69d6a87 100644 --- a/odata-protocol/8 Header Fields.md +++ b/odata-protocol/8 Header Fields.md @@ -599,17 +599,19 @@ SHOULD be used. The `omit-values` preference specifies values that MAY be omitted from a response payload. Valid values are `nulls` or `defaults`. -If `nulls` is specified, then the service MAY omit properties containing +If `nulls` is specified, then the service MAY omit single-valued properties having null values from the response, in which case it MUST specify the `Preference-Applied` response header with `omit-values=nulls`. -If `defaults` is specified, then the service MAY omit properties +If `defaults` is specified, then the service MAY omit single-valued properties containing default values from the response, including nulls for properties that have no other defined default value. Nulls MUST be included for properties that have a non-null default value defined. If the service omits default values, it MUST specify the `Preference-Applied` response header with `omit-values=defaults`. +Collection-valued properties cannot be omitted in this way. + Properties with instance annotations are not affected by this preference and MUST be included in the payload if they would be included without this preference. Clients MUST NOT try to reconstruct a null or default From 603251106ec86f773fcdc313cadbedde5e0262be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= Date: Thu, 20 Feb 2025 10:44:42 +0100 Subject: [PATCH 2/6] TC 2025-02-19 --- docs/odata-json-format/odata-json-format.html | 7 ++++++- docs/odata-json-format/odata-json-format.md | 3 ++- docs/odata-protocol/odata-protocol.html | 2 +- docs/odata-protocol/odata-protocol.md | 2 +- odata-json-format/1 Introduction.md | 3 +++ odata-json-format/16 Bound Function.md | 2 +- odata-protocol/8 Header Fields.md | 2 +- 7 files changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html index 57164fa0..ce8c3893 100644 --- a/docs/odata-json-format/odata-json-format.html +++ b/docs/odata-json-format/odata-json-format.html @@ -413,6 +413,11 @@

Allow common expressions in action payloads 341 + +Section 18 +Omission of collection-valued action parameters +2045 + @@ -2099,7 +2104,7 @@

Inside a batch request the common expressions can also be value references starting with $, as introduced in OData-Protocol, section 11.7.6.

Non-binding single-valued parameters that are nullable or annotated with the term Core.OptionalParameter defined in OData-VocCore MAY be omitted from the request body. If an omitted single-valued parameter is not annotated (and thus nullable), it MUST be interpreted as having the null value. If it is annotated and the annotation specifies a DefaultValue, the omitted parameter is interpreted as having that default value. If omitted and the annotation does not specify a default value, the service is free on how to interpret the omitted parameter. Note: a nullable non-binding parameter is equivalent to being annotated as optional with a default value of null.

-

Non-binding collection-valued parameters MAY be omitted from the request body regardless of nullability or optionality. Unless a Core.OptionalValue with DefaultValue is annotated, the interpretation of such an omitted parameter is up to the service, this includes assuming an empty collection or reporting an error.

+

Non-binding collection-valued parameters MAY be omitted from the request body regardless of nullability or optionality. Unless a Core.OptionalValue with NonPrimitiveDefaultValue is annotated, the interpretation of such an omitted parameter is up to the service, this includes assuming an empty collection or reporting an error.

Example 54:

{
diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md
index f1d61ff4..2cddf5bf 100644
--- a/docs/odata-json-format/odata-json-format.md
+++ b/docs/odata-json-format/odata-json-format.md
@@ -223,6 +223,7 @@ Section | Feature / Change | Issue
 [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 18](#ActionInvocation)| Allow common expressions in action payloads| [341](https://github.com/oasis-tcs/odata-specs/issues/341)
+[Section 18](#ActionInvocation)| Omission of collection-valued action parameters| [2045](https://github.com/oasis-tcs/odata-specs/issues/2045)
 
 ## 1.2 Glossary
 
@@ -3161,7 +3162,7 @@ parameter is equivalent to being annotated as optional with a default
 value of `null`.
 
 Non-binding collection-valued parameters MAY be omitted from the request body regardless
-of nullability or optionality. Unless a `Core.OptionalValue` with `DefaultValue` is annotated,
+of nullability or optionality. Unless a `Core.OptionalValue` with `NonPrimitiveDefaultValue` is annotated,
 the interpretation of such an omitted parameter is up to the service,
 this includes assuming an empty collection or reporting an error.
 
diff --git a/docs/odata-protocol/odata-protocol.html b/docs/odata-protocol/odata-protocol.html
index abf1f5b9..b4387f1b 100644
--- a/docs/odata-protocol/odata-protocol.html
+++ b/docs/odata-protocol/odata-protocol.html
@@ -1077,7 +1077,7 @@ 

OData-VocCore.

Properties with null or default values MUST be included in delta payloads, if modified.

diff --git a/docs/odata-protocol/odata-protocol.md b/docs/odata-protocol/odata-protocol.md index eb31d790..7cfd3193 100644 --- a/docs/odata-protocol/odata-protocol.md +++ b/docs/odata-protocol/odata-protocol.md @@ -1502,7 +1502,7 @@ null values from the response, in which case it MUST specify the `Preference-Applied` response header with `omit-values=nulls`. If `defaults` is specified, then the service MAY omit single-valued properties -containing default values from the response, including nulls for +having default values from the response, including nulls for properties that have no other defined default value. Nulls MUST be included for properties that have a non-null default value defined. If the service omits default values, it MUST specify the diff --git a/odata-json-format/1 Introduction.md b/odata-json-format/1 Introduction.md index fe81cf42..c80346ae 100644 --- a/odata-json-format/1 Introduction.md +++ b/odata-json-format/1 Introduction.md @@ -42,6 +42,9 @@ Removed reference to obsolete version of GeoJSON| [Section ##ActionInvocation]| Allow common expressions in action payloads| [341](https://github.com/oasis-tcs/odata-specs/issues/341) +[Section ##ActionInvocation]| +Omission of collection-valued action parameters| +[2045](https://github.com/oasis-tcs/odata-specs/issues/2045) ## ##subsec Glossary diff --git a/odata-json-format/16 Bound Function.md b/odata-json-format/16 Bound Function.md index 20daa11c..31283e81 100644 --- a/odata-json-format/16 Bound Function.md +++ b/odata-json-format/16 Bound Function.md @@ -338,7 +338,7 @@ parameter is equivalent to being annotated as optional with a default value of `null`. Non-binding collection-valued parameters MAY be omitted from the request body regardless -of nullability or optionality. Unless a `Core.OptionalValue` with `DefaultValue` is annotated, +of nullability or optionality. Unless a `Core.OptionalValue` with `NonPrimitiveDefaultValue` is annotated, the interpretation of such an omitted parameter is up to the service, this includes assuming an empty collection or reporting an error. diff --git a/odata-protocol/8 Header Fields.md b/odata-protocol/8 Header Fields.md index c69d6a87..3a58fbf0 100644 --- a/odata-protocol/8 Header Fields.md +++ b/odata-protocol/8 Header Fields.md @@ -604,7 +604,7 @@ null values from the response, in which case it MUST specify the `Preference-Applied` response header with `omit-values=nulls`. If `defaults` is specified, then the service MAY omit single-valued properties -containing default values from the response, including nulls for +having default values from the response, including nulls for properties that have no other defined default value. Nulls MUST be included for properties that have a non-null default value defined. If the service omits default values, it MUST specify the From 7a2fa63dc9499f63be0ceadf4342c90f93bb371d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= Date: Thu, 20 Feb 2025 13:47:35 +0100 Subject: [PATCH 3/6] DefaultsToEmptyCollection --- docs/odata-json-format/odata-json-format.html | 2 +- docs/odata-json-format/odata-json-format.md | 2 +- odata-json-format/16 Bound Function.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html index ce8c3893..5b06b6b0 100644 --- a/docs/odata-json-format/odata-json-format.html +++ b/docs/odata-json-format/odata-json-format.html @@ -2104,7 +2104,7 @@

Inside a batch request the common expressions can also be value references starting with $, as introduced in OData-Protocol, section 11.7.6.

Non-binding single-valued parameters that are nullable or annotated with the term Core.OptionalParameter defined in OData-VocCore MAY be omitted from the request body. If an omitted single-valued parameter is not annotated (and thus nullable), it MUST be interpreted as having the null value. If it is annotated and the annotation specifies a DefaultValue, the omitted parameter is interpreted as having that default value. If omitted and the annotation does not specify a default value, the service is free on how to interpret the omitted parameter. Note: a nullable non-binding parameter is equivalent to being annotated as optional with a default value of null.

-

Non-binding collection-valued parameters MAY be omitted from the request body regardless of nullability or optionality. Unless a Core.OptionalValue with NonPrimitiveDefaultValue is annotated, the interpretation of such an omitted parameter is up to the service, this includes assuming an empty collection or reporting an error.

+

Non-binding collection-valued parameters MAY be omitted from the request body regardless of nullability or optionality. Unless a Core.OptionalValue is annotated with DefaultsToEmptyCollection as true, the interpretation of such an omitted parameter is up to the service, this includes assuming an empty collection or reporting an error.

Example 54:

{
diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md
index 2cddf5bf..7a71b7cf 100644
--- a/docs/odata-json-format/odata-json-format.md
+++ b/docs/odata-json-format/odata-json-format.md
@@ -3162,7 +3162,7 @@ parameter is equivalent to being annotated as optional with a default
 value of `null`.
 
 Non-binding collection-valued parameters MAY be omitted from the request body regardless
-of nullability or optionality. Unless a `Core.OptionalValue` with `NonPrimitiveDefaultValue` is annotated,
+of nullability or optionality. Unless a `Core.OptionalValue` is annotated with `DefaultsToEmptyCollection` as true,
 the interpretation of such an omitted parameter is up to the service,
 this includes assuming an empty collection or reporting an error.
 
diff --git a/odata-json-format/16 Bound Function.md b/odata-json-format/16 Bound Function.md
index 31283e81..ca2b0554 100644
--- a/odata-json-format/16 Bound Function.md	
+++ b/odata-json-format/16 Bound Function.md	
@@ -338,7 +338,7 @@ parameter is equivalent to being annotated as optional with a default
 value of `null`.
 
 Non-binding collection-valued parameters MAY be omitted from the request body regardless
-of nullability or optionality. Unless a `Core.OptionalValue` with `NonPrimitiveDefaultValue` is annotated,
+of nullability or optionality. Unless a `Core.OptionalValue` is annotated with `DefaultsToEmptyCollection` as true,
 the interpretation of such an omitted parameter is up to the service,
 this includes assuming an empty collection or reporting an error.
 

From 69262bf471e08f829f359789cdda5471bf8440ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= 
Date: Thu, 20 Feb 2025 17:23:27 +0100
Subject: [PATCH 4/6] wordsmithing

---
 docs/odata-json-format/odata-json-format.html | 2 +-
 docs/odata-json-format/odata-json-format.md   | 2 +-
 odata-json-format/16 Bound Function.md        | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html
index 5b06b6b0..c25e6738 100644
--- a/docs/odata-json-format/odata-json-format.html
+++ b/docs/odata-json-format/odata-json-format.html
@@ -2104,7 +2104,7 @@ 

Inside a batch request the common expressions can also be value references starting with $, as introduced in OData-Protocol, section 11.7.6.

Non-binding single-valued parameters that are nullable or annotated with the term Core.OptionalParameter defined in OData-VocCore MAY be omitted from the request body. If an omitted single-valued parameter is not annotated (and thus nullable), it MUST be interpreted as having the null value. If it is annotated and the annotation specifies a DefaultValue, the omitted parameter is interpreted as having that default value. If omitted and the annotation does not specify a default value, the service is free on how to interpret the omitted parameter. Note: a nullable non-binding parameter is equivalent to being annotated as optional with a default value of null.

-

Non-binding collection-valued parameters MAY be omitted from the request body regardless of nullability or optionality. Unless a Core.OptionalValue is annotated with DefaultsToEmptyCollection as true, the interpretation of such an omitted parameter is up to the service, this includes assuming an empty collection or reporting an error.

+

Non-binding collection-valued parameters MAY be omitted from the request body regardless of nullability or optionality. Unless a Core.OptionalValue is annotated with DefaultsToEmptyCollection as true, the interpretation of such an omitted parameter is up to the service, possible interpretations include assuming an empty collection or reporting an error.

Example 54:

{
diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md
index 7a71b7cf..1a50279b 100644
--- a/docs/odata-json-format/odata-json-format.md
+++ b/docs/odata-json-format/odata-json-format.md
@@ -3164,7 +3164,7 @@ value of `null`.
 Non-binding collection-valued parameters MAY be omitted from the request body regardless
 of nullability or optionality. Unless a `Core.OptionalValue` is annotated with `DefaultsToEmptyCollection` as true,
 the interpretation of such an omitted parameter is up to the service,
-this includes assuming an empty collection or reporting an error.
+possible interpretations include assuming an empty collection or reporting an error.
 
 ::: example
 Example 54:
diff --git a/odata-json-format/16 Bound Function.md b/odata-json-format/16 Bound Function.md
index ca2b0554..53fa19ff 100644
--- a/odata-json-format/16 Bound Function.md	
+++ b/odata-json-format/16 Bound Function.md	
@@ -340,7 +340,7 @@ value of `null`.
 Non-binding collection-valued parameters MAY be omitted from the request body regardless
 of nullability or optionality. Unless a `Core.OptionalValue` is annotated with `DefaultsToEmptyCollection` as true,
 the interpretation of such an omitted parameter is up to the service,
-this includes assuming an empty collection or reporting an error.
+possible interpretations include assuming an empty collection or reporting an error.
 
 ::: example
 Example ##ex:

From 86079536839f144eb5f3478bf8bcf3c40e9e38e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= 
Date: Wed, 26 Feb 2025 18:46:29 +0100
Subject: [PATCH 5/6] TC 2025-02-26

---
 docs/odata-json-format/odata-json-format.html | 2 +-
 docs/odata-json-format/odata-json-format.md   | 6 +++---
 odata-json-format/16 Bound Function.md        | 6 +++---
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html
index c25e6738..80178d01 100644
--- a/docs/odata-json-format/odata-json-format.html
+++ b/docs/odata-json-format/odata-json-format.html
@@ -2104,7 +2104,7 @@ 

Inside a batch request the common expressions can also be value references starting with $, as introduced in OData-Protocol, section 11.7.6.

Non-binding single-valued parameters that are nullable or annotated with the term Core.OptionalParameter defined in OData-VocCore MAY be omitted from the request body. If an omitted single-valued parameter is not annotated (and thus nullable), it MUST be interpreted as having the null value. If it is annotated and the annotation specifies a DefaultValue, the omitted parameter is interpreted as having that default value. If omitted and the annotation does not specify a default value, the service is free on how to interpret the omitted parameter. Note: a nullable non-binding parameter is equivalent to being annotated as optional with a default value of null.

-

Non-binding collection-valued parameters MAY be omitted from the request body regardless of nullability or optionality. Unless a Core.OptionalValue is annotated with DefaultsToEmptyCollection as true, the interpretation of such an omitted parameter is up to the service, possible interpretations include assuming an empty collection or reporting an error.

+

Non-binding collection-valued parameters MAY be omitted from the request body regardless of nullability or optionality. The interpretation of such an omitted parameter is up to the service, possible interpretations include assuming an empty collection or, for parameters not annotated as Core.OptionalParameter, reporting an error.

Example 54:

{
diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md
index 1a50279b..f997cce7 100644
--- a/docs/odata-json-format/odata-json-format.md
+++ b/docs/odata-json-format/odata-json-format.md
@@ -3162,9 +3162,9 @@ parameter is equivalent to being annotated as optional with a default
 value of `null`.
 
 Non-binding collection-valued parameters MAY be omitted from the request body regardless
-of nullability or optionality. Unless a `Core.OptionalValue` is annotated with `DefaultsToEmptyCollection` as true,
-the interpretation of such an omitted parameter is up to the service,
-possible interpretations include assuming an empty collection or reporting an error.
+of nullability or optionality. The interpretation of such an omitted parameter is up to the service,
+possible interpretations include assuming an empty collection or,
+for parameters not annotated as `Core.OptionalParameter`, reporting an error.
 
 ::: example
 Example 54:
diff --git a/odata-json-format/16 Bound Function.md b/odata-json-format/16 Bound Function.md
index 53fa19ff..25d964a1 100644
--- a/odata-json-format/16 Bound Function.md	
+++ b/odata-json-format/16 Bound Function.md	
@@ -338,9 +338,9 @@ parameter is equivalent to being annotated as optional with a default
 value of `null`.
 
 Non-binding collection-valued parameters MAY be omitted from the request body regardless
-of nullability or optionality. Unless a `Core.OptionalValue` is annotated with `DefaultsToEmptyCollection` as true,
-the interpretation of such an omitted parameter is up to the service,
-possible interpretations include assuming an empty collection or reporting an error.
+of nullability or optionality. The interpretation of such an omitted parameter is up to the service,
+possible interpretations include assuming an empty collection or,
+for parameters not annotated as `Core.OptionalParameter`, reporting an error.
 
 ::: example
 Example ##ex:

From 1d37a9646f1e6870e5c4708e938a8e7f10d998ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= 
Date: Wed, 5 Mar 2025 18:29:39 +0100
Subject: [PATCH 6/6] TC 2025-03-05

---
 docs/odata-json-format/odata-json-format.html | 2 +-
 docs/odata-json-format/odata-json-format.md   | 6 +++---
 odata-json-format/16 Bound Function.md        | 6 +++---
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html
index 80178d01..9121cce6 100644
--- a/docs/odata-json-format/odata-json-format.html
+++ b/docs/odata-json-format/odata-json-format.html
@@ -2104,7 +2104,7 @@ 

Inside a batch request the common expressions can also be value references starting with $, as introduced in OData-Protocol, section 11.7.6.

Non-binding single-valued parameters that are nullable or annotated with the term Core.OptionalParameter defined in OData-VocCore MAY be omitted from the request body. If an omitted single-valued parameter is not annotated (and thus nullable), it MUST be interpreted as having the null value. If it is annotated and the annotation specifies a DefaultValue, the omitted parameter is interpreted as having that default value. If omitted and the annotation does not specify a default value, the service is free on how to interpret the omitted parameter. Note: a nullable non-binding parameter is equivalent to being annotated as optional with a default value of null.

-

Non-binding collection-valued parameters MAY be omitted from the request body regardless of nullability or optionality. The interpretation of such an omitted parameter is up to the service, possible interpretations include assuming an empty collection or, for parameters not annotated as Core.OptionalParameter, reporting an error.

+

The interpretation of an omitted non-binding collection-valued parameter is up to the service regardless of its nullability or optionality. Possible interpretations include assuming an empty collection or, for parameters not annotated as Core.OptionalParameter, reporting an error.

Example 54:

{
diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md
index f997cce7..7f7a55db 100644
--- a/docs/odata-json-format/odata-json-format.md
+++ b/docs/odata-json-format/odata-json-format.md
@@ -3161,9 +3161,9 @@ how to interpret the omitted parameter. Note: a nullable non-binding
 parameter is equivalent to being annotated as optional with a default
 value of `null`.
 
-Non-binding collection-valued parameters MAY be omitted from the request body regardless
-of nullability or optionality. The interpretation of such an omitted parameter is up to the service,
-possible interpretations include assuming an empty collection or,
+The interpretation of an omitted non-binding collection-valued parameter
+is up to the service regardless of its nullability or optionality.
+Possible interpretations include assuming an empty collection or,
 for parameters not annotated as `Core.OptionalParameter`, reporting an error.
 
 ::: example
diff --git a/odata-json-format/16 Bound Function.md b/odata-json-format/16 Bound Function.md
index 25d964a1..40659fd2 100644
--- a/odata-json-format/16 Bound Function.md	
+++ b/odata-json-format/16 Bound Function.md	
@@ -337,9 +337,9 @@ how to interpret the omitted parameter. Note: a nullable non-binding
 parameter is equivalent to being annotated as optional with a default
 value of `null`.
 
-Non-binding collection-valued parameters MAY be omitted from the request body regardless
-of nullability or optionality. The interpretation of such an omitted parameter is up to the service,
-possible interpretations include assuming an empty collection or,
+The interpretation of an omitted non-binding collection-valued parameter
+is up to the service regardless of its nullability or optionality.
+Possible interpretations include assuming an empty collection or,
 for parameters not annotated as `Core.OptionalParameter`, reporting an error.
 
 ::: example