Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NonInsertableProperties and NonUpdatableProperties for contained entities - allowed alternative #253

Merged
merged 7 commits into from
May 15, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions examples/Org.OData.Capabilities.V1.capabilities.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ For the header level, the entity set is annotated directly.
}
```

The item level has no named entity set. It is annotated using `NavigationRestrictions` on header level and `InsertRestrictions` and `UpdateRestrictions` on item level. When a property could be expressed either on the deeper item level or on the higher-up header level, the deeper level is generally preferred: For example, the `NonUpdatableProperties` property in the deeper `UpdateRestrictions` is favored over its commented-out namesake in the higher-up `NavigationRestrictions`, and the commented-out `Updatable` is even invalid, because the instance path to `canUpdate` is collection-valued. But the higher-up `InsertRestrictions/Insertable` and `UpdateRestrictions/FilterSegmentSupported` cannot be avoided, because the instance paths to `canInsertItems` and `canUpdateSubsetOfItems` must be evaluated on header level.
The item level has no named entity set. It is annotated using `NavigationRestrictions` on header level and `InsertRestrictions` and `UpdateRestrictions` on item level. When a property could be expressed either on the deeper item level or on the higher-up header level, the deeper level is generally preferred: For example, annotating the `Headers/Items` target with `UpdateRestrictions/NonUpdatableProperties` is favored over the commented-out annotation `NavigationRestrictions/UpdateRestrictions/NonUpdatableProperties` on the `Headers` target, and the commented-out `Updatable` is even invalid, because the instance path to `canUpdate` is collection-valued. But annotating `NavigationRestrictions/InsertRestrictions/Insertable` and `NavigationRestrictions/UpdateRestrictions/FilterSegmentSupported` on the `Headers` target cannot be avoided, because the instance paths to `canInsertItems` and `canUpdateSubsetOfItems` must be evaluated on header level.

```jsonc
"self.Container/Headers": {
Expand Down Expand Up @@ -49,7 +49,7 @@ The item level has no named entity set. It is annotated using `NavigationRestric
}
```

However, if insertability was static, the value would be a boolean literal and no path expressions would be required. In that case the deeper `InsertRestrictions/Insertable` term would be favored over the higher-up one.
However, if insertability was static, the value would be a boolean literal and no path expressions would be required. In that case directly annotating the `Headers/Items` target with `InsertRestrictions/Insertable` would be favored over annotating the `Headers` target with `NavigationRestrictions/InsertRestrictions/Insertable`.

```jsonc
"self.Container/Headers/Items": {
Expand All @@ -60,7 +60,18 @@ However, if insertability was static, the value would be a boolean literal and n
}
```

The subitem level is annotated using `NavigationRestrictions` on item level and `InsertRestrictions` and `UpdateRestrictions` on subitem level.
If limitations, such as tool restrictions, prevent annotation targets with navigation properties in them, like the `Headers/Items` target, then non-insertable and non-updatable properties on item and subitem level would be annotated on the `Headers` target:

```jsonc
"self.Container/Headers": {
"@Capabilities.InsertRestrictions": {
"NonInsertableProperties": ["uuid", "Items/uuid", "Items/Subitems/uuid"],
"NonUpdatableProperties": ["uuid", "Items/uuid", "Items/Subitems/uuid"]
}
}
```

If there are no such limitations, the subitem level is annotated using `NavigationRestrictions` on item level and `InsertRestrictions` and `UpdateRestrictions` on subitem level.

```jsonc
"self.Container/Headers/Items": {
Expand Down