OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

odata message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: RE: Agenda for OData TC meeting on 2018-06-28 - chat transcript


[17:01] anonymous1 morphed into Ted Jones (Red Hat)
[17:01] Room information was updated by: Ralf Handl (SAP SE)
Here [1] is a draft agenda for the OData TC (Technical Committee) meeting scheduled on Thursday June 28, 2018 during 8-10 am PDT (17:00-19:00 CEST). For additional information, such as dial-in details and chat room, refer to [2]. For TC timeline, see [3]. Feel free to suggest additions or modifications. 
 
Thanks.
 
[1] Agenda
 
1.Roll call [8:00 am PT]
a.Self-registration link: https://www.oasis-open.org/apps/org/workgroup/odata/event.php?event_id=46262 
 
2.Approve agenda [8:05 am PT]
 
3.Approve minutes from previous meeting(s) [8:10 am PT]
a.Minutes from June 21, 2018 TC meeting: https://www.oasis-open.org/committees/download.php/63317/odata-meeting-218_on-20180621-minutes.html 
 
4.Review action items [Action item list: https://www.oasis-open.org/apps/org/workgroup/odata/members/action_items.php] [8:15am PT]
a.Action items due
i.none
 
5.Issues [8:20 am PT]
a.Data Aggregation: NEW or OPEN
i.ODATA-1040 Clarification of term "_expression_"
ii.ODATA-1038 Clarify term "simple value"
iii.ODATA-977 Allow POST with $apply to invoke an action to an aggregated result
iv.ODATA-972 Example 30: wrong result
v.ODATA-971 7.1: Add example for grouping by single-valued navigation property
vi.ODATA-968 3.1.4: add example for from in aggregate() with multiple arguments
vii.ODATA-967 Chapter 3: remove restriction for input type of bound functions
viii.ODATA-947 Transformation for computing ratios with aggregated values
ix.ODATA-945 Correct examples 53 and 54
x.ODATA-944 Clarify scope of property paths in transformations
xi.ODATA-943 Correct broken link for Groupable Property
xii.ODATA-909 ABNF for pathPrefix should also allow qualifiedComplexTypeName
xiii.ODATA-905 Example 67: result row for USA, Sugar missing, Example 68: last total should be 7
xiv.ODATA-904 Example 55: clarify groupby in combination with relationships of instance cardinality zero
xv.ODATA-839 A recursive hierarchy annotation may also contain a navigation property to the children nodes
 
b.V4.01: NEW or OPEN 
i.ODATA-1195 11.2.6.6: value of $search is search _expression_, not boolean _expression_
ii.ODATA-1191 Make sure that all model elements are annotatable
iii.ODATA-1190 Add matchesPattern as a $filter function
iv.ODATA-1189 Conformance: Nullable for collections
v.ODATA-1188 Allow using instance annotations in $select and $expand
vi.ODATA-1187 No way to bind nav prop on recursively nested (contained or complex) type
vii.ODATA-1183 Allow Singletons to be null
viii.ODATA-1180 Cast between enumeration types and integer types 
ix.ODATA-1177 Core: add term SchemaLocation
x.ODATA-1171 Consider using matrix parameters for filter segments
xi.ODATA-1168 Clarify the use of ETags for Avoiding Update Conflicts
xii.ODATA-1165 Describe $expand and $select via prose text and examples, remove ABNF snippets
xiii.ODATA-1148 PATCH with nested nav props should not remove omitted resources
xiv.ODATA-1143 Extend the Property metatype to allow a type that is an EntityType.
xv.ODATA-1141 Upsert: clarify upsert along nullable single-valued navigation path
xvi.ODATA-1135 Document use of JSON $schema
xvii.ODATA-1088 Clarify effect of applying an Annotation to an element
 
c.Vocabularies: NEW or OPEN with concrete proposal
i.ODATA-1194 Add term Core.Example to allow including annotation examples in term definitions
ii.ODATA-1192 Capabilities vocabulary: invalid DefaultValue for KeyAsSegmentSupported
iii.ODATA-1176 Capabilities: add new term SelectRestrictions
iv.ODATA-1167 Add way to specify which batch formats (if any) are supported by a service
v.ODATA-1064 Add ability to annotate collections to return only count and NextLink
 
d.Vocabularies: NEW or OPEN that need more discussion
i.ODATA-1193 Automated vocabulary checks indicate some potential issues
ii.ODATA-1099 Add annotations to describe custom query options and custom headers
iii.ODATA-1005 Make sure we have capabilities for all new 4.01 functionality
iv.ODATA-884 Add term ErrorCodes to describe possible codes in error messages (public comment c201510e00019)
 
6.Next meetings [9:50 am PT]
a.Thursday July 5, 2018 during 8-10 am PDT (17:00-19:00 CEST): no meeting due to public holiday in the US on July 4
b.Thursday July 12, 2018 during 8-10 am PDT (17:00-19:00 CEST)
c.Thursday July 19, 2018 during 8-10 am PDT (17:00-19:00 CEST)
 
7.AOB and wrap up [9:55 am PT]
 
[2] References
Chat room: http://webconf.soaphub.org/conf/room/odatatc 
Conference call & Screen sharing: https://sap.emea.pgiconnect.com/OData-TC 
Conference call details: https://www.oasis-open.org/apps/org/workgroup/odata/download.php/56760/TC%20meeting%20dial-in%20details.htm 
 
[3] Timeline
https://www.oasis-open.org/committees/download.php/62637/TC%20Timeline-2018-03-02.docx
[17:01] anonymous morphed into George Ericson (Dell)
[17:02] Ralf Handl (SAP SE): Voting Members: 4 of 11 (36%) (used for quorum calculation)
[17:02] anonymous morphed into Hubert Heijkers (IBM)
[17:03] Ralf Handl (SAP SE): Voting Members: 5 of 11 (45%) (used for quorum calculation)
[17:04] Ralf Handl (SAP SE): Voting Members: 6 of 11 (54%) (used for quorum calculation)
[17:05] Ralf Handl (SAP SE): Quorum achieved: yes
[17:05] Ralf Handl (SAP SE): 2.Approve agenda [8:05 am PT]
[17:07] Ralf Handl (SAP SE): Agenda is approved
[17:07] Ralf Handl (SAP SE): 3.Approve minutes from previous meeting(s) [8:10 am PT]
a.Minutes from June 21, 2018 TC meeting: https://www.oasis-open.org/committees/download.php/63317/odata-meeting-218_on-20180621-minutes.html
[17:07] Ralf Handl (SAP SE): Minutes are approved
[17:07] Ralf Handl (SAP SE): 4.Review action items [Action item list: https://www.oasis-open.org/apps/org/workgroup/odata/members/action_items.php] [8:15am PT]
a.Action items due
i.none
[17:08] Ralf Handl (SAP SE): 5.Issues [8:20 am PT]
a.Data Aggregation: NEW or OPEN
[17:09] Ralf Handl (SAP SE): xv.ODATA-839 A recursive hierarchy annotation may also contain a navigation property to the children nodes
[17:09] Ralf Handl (SAP SE): https://issues.oasis-open.org/browse/ODATA-839
[17:09] Ralf Handl (SAP SE): Proposal:
<ComplexType Name="RecursiveHierarchyType">
  <Property Type="Edm.PropertyPath" Name="NodeProperty" Nullable="false">
    <Annotation Term="Core.Description" String="Property holding the hierarchy node value"/>
  </Property>
  <Property Type="Edm.NavigationPropertyPath" Name="ParentNavigationProperty" Nullable="false">
    <Annotation Term="Core.Description" String="Property for navigating to the parent node"/>
  </Property>
  <Property Type="Edm.NavigationPropertyPath" Name="ChildrenNavigationProperty" Nullable="true">
    <Annotation Term="Core.Description" String="Property for navigating to the children nodes"/>
  </Property>
  <Property Type="Edm.PropertyPath" Name="DistanceFromRootProperty" Nullable="true">
    <Annotation Term="Core.Description" String="Property holding the number of edges between the node and the root node"/>
  </Property>
  <Property Type="Edm.PropertyPath" Name="IsLeafProperty" Nullable="true">
    <Annotation Term="Core.RequiresType" String="Edm.Boolean"/>
    <Annotation Term="Core.Description" String="Property indicating whether the node is a leaf of the hierarchy"/>
  </Property>
</ComplexType>
[17:10] Ralf Handl (SAP SE): Description
Consider a client processing entities according to their hierarchical structure imposed by the given hierarchy annotation.
 
If the client wants to retrieve the descendants for the next three levels, this could be accomplished with a single request that makes use of a (cyclic) navigation property pointing to the children of a node. Assuming this navigation property has name childrenNodes, and the corresponding navigation property annotated as ParentNavigationProperty has name parentNode, the request would be:
 
GET set(nodeId)?$expand=childrenNodes($levels=3;$select=parentNode/nodeId,nodeId)
 
In order to let clients detect the availability of such navigations, the existing RecursiveHierarchy term needs to be Extended as proposed.
[17:11] Ralf Handl (SAP SE): ODATA-839 is OPEN
[17:11] Ralf Handl (SAP SE): Naming: ParentNavigationProperty
[17:12] Ralf Handl (SAP SE): Proposals: ChildrenNavigationProperty or ChildNavigationProperty
[17:12] Ralf Handl (SAP SE): Result is an array of children
[17:13] Ralf Handl (SAP SE): George: children is more appropriate
[17:13] Ralf Handl (SAP SE): Mike agrees: navigates to a collection of children
[17:15] Hubert Heijkers (IBM): I move to resolve ODATA-839 as proposed
[17:15] George Ericson (Dell): Second
[17:16] Ralf Handl (SAP SE): ODATA-839 is RESOLVED as proposed
[17:16] Ralf Handl (SAP SE): xiv.ODATA-904 Example 55: clarify groupby in combination with relationships of instance cardinality zero
[17:16] Ralf Handl (SAP SE): https://issues.oasis-open.org/browse/ODATA-904
[17:16] Ralf Handl (SAP SE): Description
Example 55:
 
GET ~/Customers?$apply=groupby((Country,Sales/Product/Name))
 
The example result does not contain an entry for country France. The example data contains a customer in France that does not have any sales.
 
The prose text before the example states expansion "in a left-outer-join fashion".
 
This would suggest that a result row is missing:
 
{ "@odata.id": null, "Country": "France", "Sales": [ { "Product":
 
{ "Name": null }
} ] }
 
This would be consistent with both the left-outer-join statement and the URL conventions for path expressions where properties of related entities are treated as null if no entity is related:
 
the left-outer join would produce a single Sales row containing only null values, including the related product and its name
this would create a ("France",null) group during aggregation
folding back into the original shape would create the additional entry
[17:19] Ralf Handl (SAP SE): Alternative:
{ "@odata.id": null, "Country": "France", "Sales": [ ] }
[17:22] Ralf Handl (SAP SE): Hubert prefers the alternative of an empty Sales array
[17:22] Ralf Handl (SAP SE): George agrees
[17:22] Ralf Handl (SAP SE): ODATA-904 is OPEN
[17:24] Hubert Heijkers (IBM): I move to resolve ODATA-904 with the updated proposal to use the alternative representation using the empty array.
[17:24] George Ericson (Dell): Second
[17:25] Ralf Handl (SAP SE): Updated proposal:
 
Explicitly state what "left-outer-join fashion" means, i.e. not inventing dummy records with null values, instead use empty arrays that match the $expand structure:
 
 
 
{ "@odata.id": null, "Country": "France", "Sales": [ ] }
 
 
Fix the unbalanced curly braces in all result rows while we are at it.
[17:25] Ralf Handl (SAP SE): ODATA-904 is RESOLVED with the amended proposal
[17:25] Ralf Handl (SAP SE): xiii.ODATA-905 Example 67: result row for USA, Sugar missing, Example 68: last total should be 7
[17:26] Ralf Handl (SAP SE): https://issues.oasis-open.org/browse/ODATA-905
[17:26] Ralf Handl (SAP SE): Example 67: transformation sequences are also useful inside groupby: To get the aggregated amount by only considering the top two sales amounts per product and county:
 
GET ~/Sales?$apply=groupby((Customer/Country,Product/Name,Currency/Code),
 
                      topcount(2,Amount)/aggregate(Amount with sum as Total))
 
results in
 
{
 
  "@odata.context":
     "$metadata#Sales(Customer(Country),Product(Name),Total,Currency(Code))",
 
  "value": [
    { "@odata.id": null, "Customer": { "Country": "Netherlands" },
 
      "Product": { "Name": "Paper" },
 
      "Total":  3, "Currency": { "Code": "EUR" }
 
    },
    { "@odata.id": null, "Customer": { "Country": "Netherlands" },
 
      "Product": { "Name": "Sugar" },
 
      "Total":  2, "Currency": { "Code": "EUR" }
 
    },
    { "@odata.id": null, "Customer": { "Country": "USA" },
 
      "Product": { "Name": "Coffee" },
 
      "Total": 12, "Currency": { "Code": "USD" }
 
    },
    { "@odata.id": null, "Customer": { "Country": "USA" },
 
      "Product": { "Name": "Paper" },
 
      "Total":  5, "Currency": { "Code": "USD" } 
 
    }
  ]
 
}
[17:32] Ralf Handl (SAP SE): Example data: http://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/cs02/odata-data-aggregation-ext-v4.0-cs02.html#_Toc435016565
[17:35] Ralf Handl (SAP SE): Sugar is indeed missing
[17:36] Ralf Handl (SAP SE): Example 68:
The function takes the name of a numeric property as a parameter, retains those entities that topcount also would retain, and replaces the remaining entities by a single aggregated entity, where only the numeric property has a defined value being the aggregated value over those remaining entities:
 
GET ~/Sales?$apply=groupby((Customer/Country,Product/Name),
 
                         aggregate(Amount with sum as Total))
 
                  /groupby((Customer/Country),
 
                           Self.TopCountAndBalance(Count=1,Property='Total'))
 
results in
 
{
 
  "@odata.context": "$metadata#Sales(Customer(Country),Product(Name),Total)",
 
  "value": [
    { "@odata.id": null, "Customer": { "Country": "Netherlands" },
 
      "Product": { "Name": "Paper" }, "Total":  3 },
    { "@odata.id": null, "Customer": { "Country": "Netherlands" },
 
      "Product": { "Name": "**Other**" }, "Total":  2 },
    { "@odata.id": null, "Customer": { "Country": "USA" },
 
      "Product": { "Name": "Coffee" }, "Total": 12 },
    { "@odata.id": null, "Customer": { "Country": "USA" },
 
      "Product": { "Name": "**Other**" }, "Total":  5 }
  ]
 
}
[17:38] Ralf Handl (SAP SE): Last total indeed is 7
[17:38] Ralf Handl (SAP SE): ODATA-905 is OPEN
[17:39] Hubert Heijkers (IBM): I move to resolve ODATA-905 as proposed
[17:39] George Ericson (Dell): Second
[17:40] Ralf Handl (SAP SE): ODATA-905 is RESOLVED as proposed
[17:40] Ralf Handl (SAP SE): xii.ODATA-909 ABNF for pathPrefix should also allow qualifiedComplexTypeName
[17:40] Ralf Handl (SAP SE): https://issues.oasis-open.org/browse/ODATA-909
[17:40] Ralf Handl (SAP SE): https://tools.oasis-open.org/version-control/browse/wsvn/odata/trunk/spec/ABNF/odata-aggregation-abnf.txt?op=diff&rev=789
[17:41] Ralf Handl (SAP SE): ODATA-909 is OPEN
[17:43] Hubert Heijkers (IBM): I move to resolve ODATA-909 as proposed
[17:43] George Ericson (Dell): Second
[17:43] Ralf Handl (SAP SE): ODATA-909 is RESOLVED as proposed
[17:44] Hubert Heijkers (IBM): I move to close ODATA-909 as applied
[17:44] George Ericson (Dell): Second
[17:44] Ralf Handl (SAP SE): ODATA-909 is CLOSED as applied
[17:44] Ralf Handl (SAP SE): xi.ODATA-943 Correct broken link for Groupable Property
[17:44] Ralf Handl (SAP SE): https://issues.oasis-open.org/browse/ODATA-943
[17:45] Ralf Handl (SAP SE): Section 2.1 includes a definition for the term groupable property. The link behind it does not point to section 6.2.1 as expected.
[17:45] Ralf Handl (SAP SE): ODATA-943 is OPEN
[17:45] Hubert Heijkers (IBM): I move to resolve ODATA-943 as proposed
[17:46] George Ericson (Dell): second
[17:46] Ralf Handl (SAP SE): ODATA-943 is RESOLVED as proposed
[17:46] Hubert Heijkers (IBM): I move to close ODATA-943 as applied
[17:46] George Ericson (Dell): second
[17:47] Ralf Handl (SAP SE): ODATA-943 is CLOSED as applied
[17:47] Ralf Handl (SAP SE): x.ODATA-944 Clarify scope of property paths in transformations
[17:47] Ralf Handl (SAP SE): https://issues.oasis-open.org/browse/ODATA-944
[17:47] Ralf Handl (SAP SE): Description:
Property paths in transformations always relate to the structure of the immediate input set, which is either the collection identified by the request resource path or the output of the preceding transformation. 
For some transformations, this has been specified explicitly, e.g. in section 3.1 for the aggregate transformation: an _expression_ valid in a $filter system query option on the input set. But not for all, e.g. section 3.12 does not make a statement for the expand transformation. In order to avoid any possible misinterpretation or confusion, the document should spell this out clearly.
[17:48] Ralf Handl (SAP SE): Proposal:
Add another sentence to section 3, at the end of the third para (enclosed with *): 
"So the actual (or relevant) structure of each intermediary result will resemble a projection of the original data model that could also have been formed using the standard system query options $expand and $select defined in [OData-Protocol], with dynamic properties representing the aggregate values. The parameters of set transformations allow specifying how the result instances are constructed from the input instances. This especially means that all property paths relate to the structure of the immediate input set."
[17:49] Ralf Handl (SAP SE): ODATA-944 is OPEN
[17:50] Mark Biamonte (Progress): I have joined the call sorry I am late getting on
[17:51] Hubert Heijkers (IBM): I move to resolve ODATA-944 as proposed.
[17:51] George Ericson (Dell): Second
[17:51] Ralf Handl (SAP SE): ODATA-944 is RESOLVED as proposed
[17:52] Ralf Handl (SAP SE): ix.ODATA-945 Correct examples 53 and 54
[17:52] Ralf Handl (SAP SE): https://issues.oasis-open.org/browse/ODATA-945
[17:53] Ralf Handl (SAP SE): Description
Example 53 requests aggregation of property path Sales/Amount, but the response shows the dynamic property Total nested inside Sales. Rightly, it should have been added to the type containing the original _expression_ (section 3.1.1).
In example 54, the response payload shows the dynamic property Total nested within Sales. According to the request, which uses the path _expression_ Sales/Amount for aggregation, the Total property should be at the top level.
[17:53] Ralf Handl (SAP SE): Proposal:
 
Example 53: Replace response payload with
{
"@odata.context": "$metadata#Products(Name,Total)",
"value": [
{ "@odata.id": null, "Name": "Coffee", "Total": 12 }
,
{ "@odata.id": null, "Name": "Paper", "Total": 8 }
,
{ "@odata.id": null, "Name": "Pencil", "Total": null }
,
 
{ "@odata.id": null, "Name": "Sugar", "Total": 4 }
]
}
 
Example 54: Modify request to properly reflect the nesting shown in the response: 
GET ~/Products?$apply=groupby((Name,Sales/Currency/Code),
aggregate(Sales(Amount with sum as Total)))
[17:55] Ralf Handl (SAP SE): Current text:
Example 53: 
 
GET ~/Products?$apply=groupby((Name),
                              aggregate(Sales/Amount with sum as Total))
 
results in
 
{
 
  "@odata.context": "$metadata#Products(Name,Sales(Total))",
 
  "value": [
    { "@odata.id": null, "Name": "Coffee", "Sales": [ { "Total":   12 } ] },
    { "@odata.id": null, "Name": "Paper",  "Sales": [ { "Total":    8 } ] },
    { "@odata.id": null, "Name": "Pencil", "Sales": [ { "Total": null } ] },
    { "@odata.id": null, "Name": "Sugar",  "Sales": [ { "Total":    4 } ] }
  ]
 
}
 
Note that the base set of the request is Products, so there is a result item for product Pencil even though there are no sales item. As aggregate returns exactly one result item even if there are no items to be aggregated, the Sales navigation propertys value is an array with one element representing the sum over no input values, which is null.
 
Example 54: careful observers will notice that the above amounts have been aggregated across currencies, which is semantically wrong. Yet it is the correct response to the question asked, so be careful what you ask for. The semantically meaningful question
 
GET ~/Products?$apply=groupby((Name,Sales/Currency/Code),
                              aggregate(Sales/Amount with sum as Total))
 
results in
 
{
 
  "@odata.context": "$metadata#Products(Name,Sales(Total,Currency(Code)))",
 
  "value": [
    { "@odata.id": null, "Name": "Coffee",
 
      "Sales": [ { "Total": 12, "Currency": { "Code": "USD" } } ] },
    { "@odata.id": null, "Name: "Paper",
 
      "Sales": [ { "Total":  3, "Currency": { "Code": "EUR" } },
                 { "Total":  5, "Currency": { "Code": "USD" } } ] },
    { "@odata.id": null, "Name: "Pencil",
 
      "Sales": [] },
    { "@odata.id": null, "Name: "Sugar",  
      "Sales": [ { "Total":  2, "Currency": { "Code": "EUR" } },
                 { "Total":  2, "Currency": { "Code": "USD" } } ] }
  ]
 
}
 
Note that navigation properties are "expanded" in a left-outer-join fashion, starting from the target of the aggregation request, before grouping the entities for aggregation. Afterwards the results are folded back to match the cardinality of the navigation properties.
[17:56] Ralf Handl (SAP SE): Correct request URL for 54 is
 
GET ~/Products?$apply=groupby((Name,Sales/Currency/Code),
aggregate(Sales(Amount with sum as Total)))
[18:04] Ralf Handl (SAP SE): ODATA-945 is OPEN
[18:05] Ralf Handl (SAP SE): Hubert: we have to explain more about the differences
[18:06] Ralf Handl (SAP SE): Plain paths with / work like compute: pull arguments from related entities, place result "at the top"
[18:07] Ralf Handl (SAP SE): Parentheses can be used to place the result within the related/nested structure
[18:07] Ralf Handl (SAP SE): Slight difference:
GET ~/Products?$apply=groupby((Name,Sales/Currency/Code),aggregate(Sales(Amount with sum as Total)))
GET ~/Products?$apply=groupby((Name,Sales/Currency/Code),aggregate(Sales/Amount with sum as Total))
[18:10] Ralf Handl (SAP SE): 3.1.1 Keyword as
Aggregate expressions can define an alias using the as keyword, followed by a SimpleIdentifier (see [OData-CSDL, section 17.2]).
 
The alias will introduce a dynamic property in the aggregated result set. The introduced dynamic property is added to the type containing the original _expression_ or custom aggregate. The alias MUST NOT collide with names of declared properties, custom aggregates, or other aliases in that type.
[18:11] Ralf Handl (SAP SE): Sales/Amount with sum as Total
[18:12] Ralf Handl (SAP SE): Sales(Amount with sum as Total)
[18:14] Ralf Handl (SAP SE): George: be more explicit in the definition and not define by example
[18:15] Ralf Handl (SAP SE): First example: in top context we are interested in the Amount
[18:15] Ralf Handl (SAP SE): Second example: we are interested in the Sales, and within the Sales in the Amount
[18:16] Ralf Handl (SAP SE): Need to revise the specification text: section 3.1.1
[18:17] Ralf Handl (SAP SE): vii.ODATA-967 Chapter 3: remove restriction for input type of bound functions
[18:17] Ralf Handl (SAP SE): https://issues.oasis-open.org/browse/ODATA-967
[18:18] Ralf Handl (SAP SE): Description:
When generalizing $apply from "entities" to "instances" of any type we forgot to reformulate the paragraph on service defined "custom functiions".
[18:19] Ralf Handl (SAP SE): Proposal:
Prose spec chapter 3, second-to-last paragraph new:
 
Service-defined bound functions that take a collection as their binding parameter MAY be used as set transformations within $apply if the type of the binding parameter matches the type of the result set of the preceding transformation. If it returns a collection, further transformations can follow the bound function. The parameter syntax for bound function segments is identical to the parameter syntax for bound functions in resource path segments or $filter expressions. See section 7.6 for an example.
 
old:
 
Service-defined bound functions that take an entity set as their binding parameter MAY be used as set transformations within $apply if the type of the binding parameter matches the type of the result set of the preceding transformation. If it returns an entity set, further transformations can follow the bound function. The parameter syntax for bound function segments is identical to the parameter syntax for bound functions in resource path segments or $filter expressions. See section 7.6 for an example.
 
ABNF new:
 
customFunction = namespace "." ( entityColFunction / complexColFunction / primitiveColFunction ) functionExprParameters
 
old:
 
customFunction = namespace "." entityColFunction functionExprParameters
[18:20] Ralf Handl (SAP SE): George: use "structured values" instead of "instances"
[18:22] Ralf Handl (SAP SE): ODATA-967 is OPEN
[18:22] Hubert Heijkers (IBM): I move to resolve ODATA-967 as proposed
[18:22] George Ericson (Dell): Second
[18:22] Ralf Handl (SAP SE): ODATA-967 is RESOLVED as proposed
[18:23] Ralf Handl (SAP SE): vi.ODATA-968 3.1.4: add example for from in aggregate() with multiple arguments
[18:23] Ralf Handl (SAP SE): https://issues.oasis-open.org/browse/ODATA-968
[18:23] Ralf Handl (SAP SE): Description
Explain how in aggregate() with multiple arguments the "from" keyword can be resolved into a groupby/aggregate sequence by initially grouping by all "from" properties appearing in any argument.
 
Will probably work only if all "from" chains are compatible, i.e. there exists a "super-chain" so that any from chain is a sub-chain of this super-chain.
 
1) from A from B from D,from A from C from D works with super-chain from A from B from C from D (B and C can be swapped to get another possible super-chain.
 
2) from A from B, from B from A won't work
[18:28] Ralf Handl (SAP SE): GET ~/Sales?$apply=aggregate(Amount with sum as DailyAverage from Time with average)
[18:28] Ralf Handl (SAP SE): GET ~/Sales?$apply=groupby((Time),aggregate(Amount with sum as Total)) 
                  /aggregate(Total with average as DailyAverage)
[18:32] Ralf Handl (SAP SE): GET ~/Sales?$apply=groupby((Time/Date),aggregate(Amount with sum as Total)) 
                  /aggregate(Total with average as DailyAverage)
[18:37] Ralf Handl (SAP SE): Ralf: should we keep this in, seeing how much trouble we had reconstructing the non-intuitive meaning of the "from" syntax?
[18:39] Ralf Handl (SAP SE): ODATA-968 is OPEN
[18:39] Ralf Handl (SAP SE): Hubert: park this and reconstruct together with Gerald why we invented the "from" syntax
[18:41] Ralf Handl (SAP SE): v.ODATA-971 7.1: Add example for grouping by single-valued navigation property
[18:41] Ralf Handl (SAP SE): https://issues.oasis-open.org/browse/ODATA-971
[18:42] Ralf Handl (SAP SE): Description:
Section 7.1 defines the result of grouping by a single-valued navigation property without giving an example.
 
Any example in this section that groups by the key property of a related entity could be rephrased to group by the navigation property instead. Here's how example 52 would look like:
 
GET ~Sales?$apply=groupby((Customer,Product))
and results in
{
"@odata.context": "$metadata#Sales(Customer(Name,ID),Product(Name))",
"value": [
{ "@odata.id": null, "Customer@odata.navigationLink": "Customers('C1')", "Product@odata.navigationLink": "Products('P2')" }
,
{ "@odata.id": null, "Customer@odata.navigationLink": "Customers('C1')", "Product@odata.navigationLink": "Products('P3')" }
,
{ "@odata.id": null, "Customer@odata.navigationLink": "Customers('C1')", "Product@odata.navigationLink": "Products('P1')"}
,
{ "@odata.id": null, "Customer@odata.navigationLink": "Customers('C2')", "Product@odata.navigationLink": "Products('P2')" }
,
{ "@odata.id": null, "Customer@odata.navigationLink": "Customers('C2')", "Product@odata.navigationLink": "Products('P3')" }
,
{ "@odata.id": null, "Customer@odata.navigationLink": "Customers('C3')", "Product@odata.navigationLink": "Products('P3')"}
},
 
{ "@odata.id": null, "Customer@odata.navigationLink": "Customers('C3')", "Product@odata.navigationLink": "Products('P1')" }
]
}
[18:47] Ralf Handl (SAP SE): GET ~Sales?$apply=groupby((Customer/ID,Product/ID))
and results in
{
"@odata.context": "$metadata#Sales(Customer(ID),Product(ID))",
"value": [
{ "@odata.id": null, "Customer":{"ID": "C1"}, "Product":{"ID": "P2"} },
[18:57] Ralf Handl (SAP SE): ODATA-971 is OPEN
[18:57] Ralf Handl (SAP SE): Response seems somewhat non-intuitive but can be derived from JSON Format rules
[18:58] Ralf Handl (SAP SE): 6.Next meetings [9:50 am PT]
a.Thursday July 5, 2018 during 8-10 am PDT (17:00-19:00 CEST): no meeting due to public holiday in the US on July 4
b.Thursday July 12, 2018 during 8-10 am PDT (17:00-19:00 CEST)
c.Thursday July 19, 2018 during 8-10 am PDT (17:00-19:00 CEST)
[18:59] Ralf Handl (SAP SE): Hubert can't attend July 12
[19:00] Ralf Handl (SAP SE): 7.AOB and wrap up [9:55 am PT]
[19:00] Ralf Handl (SAP SE): Meeting is adjourned

 

 

From: odata@lists.oasis-open.org [mailto:odata@lists.oasis-open.org] On Behalf Of Handl, Ralf
Sent: Dienstag, 26. Juni 2018 09:39
To: odata@lists.oasis-open.org
Subject: [CAUTION] [odata] Agenda for OData TC meeting on 2018-06-28

 

Here [1] is a draft agenda for the OData TC (Technical Committee) meeting scheduled on Thursday June 28, 2018 during 8-10 am PDT (17:00-19:00 CEST). For additional information, such as dial-in details and chat room, refer to [2]. For TC timeline, see [3]. Feel free to suggest additions or modifications.

 

Thanks.

 

[1] Agenda

 

1.        Roll call [8:00 am PT]

    1. Self-registration link: https://www.oasis-open.org/apps/org/workgroup/odata/event.php?event_id=46262

 

2.        Approve agenda [8:05 am PT]

 

3.        Approve minutes from previous meeting(s) [8:10 am PT]

    1. Minutes from June 21, 2018 TC meeting: https://www.oasis-open.org/committees/download.php/63317/odata-meeting-218_on-20180621-minutes.html

 

4.        Review action items [Action item list: https://www.oasis-open.org/apps/org/workgroup/odata/members/action_items.php] [8:15am PT]

    1. Action items due

                                  i.    none

 

5.        Issues [8:20 am PT]

    1. Data Aggregation: NEW or OPEN

                                  i.    ODATA-1040 Clarification of term "_expression_"

                                 ii.    ODATA-1038 Clarify term "simple value"

                                iii.    ODATA-977 Allow POST with $apply to invoke an action to an aggregated result

                                iv.    ODATA-972 Example 30: wrong result

                                 v.    ODATA-971 7.1: Add example for grouping by single-valued navigation property

                                vi.    ODATA-968 3.1.4: add example for from in aggregate() with multiple arguments

                               vii.    ODATA-967 Chapter 3: remove restriction for input type of bound functions

                              viii.    ODATA-947 Transformation for computing ratios with aggregated values

                                ix.    ODATA-945 Correct examples 53 and 54

                                 x.    ODATA-944 Clarify scope of property paths in transformations

                                xi.    ODATA-943 Correct broken link for Groupable Property

                               xii.    ODATA-909 ABNF for pathPrefix should also allow qualifiedComplexTypeName

                              xiii.    ODATA-905 Example 67: result row for USA, Sugar missing, Example 68: last total should be 7

                              xiv.    ODATA-904 Example 55: clarify groupby in combination with relationships of instance cardinality zero

                               xv.    ODATA-839 A recursive hierarchy annotation may also contain a navigation property to the children nodes

 

    1. V4.01: NEW or OPEN

                                  i.    ODATA-1195 11.2.6.6: value of $search is search _expression_, not boolean _expression_

                                 ii.    ODATA-1191 Make sure that all model elements are annotatable

                                iii.    ODATA-1190 Add matchesPattern as a $filter function

                                iv.    ODATA-1189 Conformance: Nullable for collections

                                 v.    ODATA-1188 Allow using instance annotations in $select and $expand

                                vi.    ODATA-1187 No way to bind nav prop on recursively nested (contained or complex) type

                               vii.    ODATA-1183 Allow Singletons to be null

                              viii.    ODATA-1180 Cast between enumeration types and integer types

                                ix.    ODATA-1177 Core: add term SchemaLocation

                                 x.    ODATA-1171 Consider using matrix parameters for filter segments

                                xi.    ODATA-1168 Clarify the use of ETags for Avoiding Update Conflicts

                               xii.    ODATA-1165 Describe $expand and $select via prose text and examples, remove ABNF snippets

                              xiii.    ODATA-1148 PATCH with nested nav props should not remove omitted resources

                              xiv.    ODATA-1143 Extend the Property metatype to allow a type that is an EntityType.

                               xv.    ODATA-1141 Upsert: clarify upsert along nullable single-valued navigation path

                              xvi.    ODATA-1135 Document use of JSON $schema

                             xvii.    ODATA-1088 Clarify effect of applying an Annotation to an element

 

    1. Vocabularies: NEW or OPEN with concrete proposal

                                  i.    ODATA-1194 Add term Core.Example to allow including annotation examples in term definitions

                                 ii.    ODATA-1192 Capabilities vocabulary: invalid DefaultValue for KeyAsSegmentSupported

                                iii.    ODATA-1176 Capabilities: add new term SelectRestrictions

                                iv.    ODATA-1167 Add way to specify which batch formats (if any) are supported by a service

                                 v.    ODATA-1064 Add ability to annotate collections to return only count and NextLink

 

    1. Vocabularies: NEW or OPEN that need more discussion

                                  i.    ODATA-1193 Automated vocabulary checks indicate some potential issues

                                 ii.    ODATA-1099 Add annotations to describe custom query options and custom headers

                                iii.    ODATA-1005 Make sure we have capabilities for all new 4.01 functionality

                                iv.    ODATA-884 Add term ErrorCodes to describe possible codes in error messages (public comment c201510e00019)

 

6.        Next meetings [9:50 am PT]

    1. Thursday July 5, 2018 during 8-10 am PDT (17:00-19:00 CEST): no meeting due to public holiday in the US on July 4
    2. Thursday July 12, 2018 during 8-10 am PDT (17:00-19:00 CEST)
    3. Thursday July 19, 2018 during 8-10 am PDT (17:00-19:00 CEST)

 

7.        AOB and wrap up [9:55 am PT]

 

[2] References

 

[3] Timeline



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]