The problem I see here is that the three use cases you mentioned all have different distinctions:
when deep insert works
whenever the service or underlying business logic wants it to work: deep insert also works along non-containment navigations, i.e. create a new customer and âdeep-createâ
the customerâs first order, despite both having own top-level entity sets and the navigation property from Customer to Order is non-contained
when an aggregation function can be used
canât answer that at the current fluent state of the aggregation discussion
ð
when a context url is a path vs a type
Itâs a path if there is a sequence of containment navigation or non-containment navigation with a unambiguous navigation property bindings, and a type in all other
cases, especially in MEST cases â Multiple Entity Sets per Type
I donât see one new âterminology termâ that can explain all three of them, we probably need at least three new pieces of terminology.
From: Christof Sprenger <>
Sent: Wednesday, 28 April 2021 20:21
To: ; Michael Pizzo <>; Handl, Ralf <>;
Subject: RE: Terminology for "owned data"
Thanks George,
Yes, definitely helpful.
My goal with the discussion I want to have is to actually agree on something like what you wrote about composition.
But more importantly to give it a name so that we donât always have to explain when some feature/operation/capability applies (or can be applied) and when not (e.g. when deep insert works, when an aggregation function
can be used, when a context url is a path vs a type, â ).
Christof
From: Ericson, George <>
Sent: Wednesday, April 28, 2021 11:07
To: Christof Sprenger <>; Michael Pizzo <>;
;
Subject: [EXTERNAL] RE: Terminology for "owned data"
Some thoughts on this topic.
I consider OData containment as semantically the same as UML composition.
UML defines AggregationKind='composite' as an indication that a
Property is aggregated compositely, i.e., the composite object has responsibility for the existence and storage of the composed objects.
By the UML definition, all OData Properties, EntitySets, Singletons and NavigationProperties with ContainsTarget=True are composite objects.
In OData, a contained value is aggregated by an OData composite object. (Entities are a special kind of value.)
EntitySets, Singletons, and NavigationProperties have values that are Entities.
URLs are always only addresses. Composite objects own their component objects. So, an URL can address a composite object.
In response to a GET, a By-Value and By-Reference representation of an Entity value is orthogonal to composition (or ownership).
Hope some of that is helpful,
George
From:
<>
On Behalf Of Christof Sprenger
Sent: Wednesday, April 28, 2021 12:47 PM
To: Michael Pizzo; ;
Subject: [odata] Terminology for "owned data"
[EXTERNAL EMAIL]
Hello,
Wasnât sure how to frame the following as an Issue, so I am starting with an email.
In recent TC meetings and in my day job we often need to distinguish between different paths/URLS and if they are returning something contained or not. We had the discussion a few times during the review of aggregation,
and I had to go into it internally to discuss deep inserts.
The closest I could find is in
10.2 Collection
of Entities [docs.oasis-open.org]. There is the distinction between contained Entities and âothersâ. But a) the description for âothersâ is quite lengthy and it is not clear that this covers all the other cases b) it is the first time in that document
that the phrase ââ entities are containedâ is actually used, c) this only addresses collection of Entities and sections 10.3-10.15 have
to essentially make similar statements or refer to 10.2.
4.3.2 Canonical
URL for Contained Entities [docs.oasis-open.org] also mentions quote: â[â] contained entities (i.e. related via a containment navigation property
[â]â .
It feels weird that the phrase âcontained entitiesâ is previously not mentioned and quickly defined in the spot (in parenthesis, without mentioning a path of containment navigation property)
Would it not be helpful to introduce terminology that clearly categorize URLs into
Response contains data that is âownedâ by this URL (e.g. entity-set, a path of only containment navigation properties, â )
Owned in the sense that this is where it is stored and all create-update-delete operations âgoâ
Response contains data that is âreferencedâ (e.g. a function, multiple navigation property bindings, â)
I hope that such a definition would help with describing and discussing many problems but I am not really able (as you can see above) to get to a crisp definition.
Have I overlooked that kind of definition ? If not, can/should this be a topic for the TC?
Christof