OData TC meeting #176 Thursday June 01, 2017

Acting chair: Ralf

Chat transcript from room: odatatc
2017-06-01 0700-1000 PDT

1. Roll call

1.1 Members present

    George Ericson (Dell)
    Gerald Krause (SAP SE)
    Hubert Heijkers (IBM)
    Mark Biamonte (Progress Software)
    Martin Zurmuehl (SAP SE)
    Matthew Borges (SAP SE) a.k.a. Matt
    Michael Pizzo (IBM) a.k.a. Mike
    Ralf Handl (SAP SE)
    Ramesh Reddy (Red Hat)
    Stefan Hagen (Individual)

Quorum achieved. Details cf. normative attendance sheet for this meeting (event_id=43980).

Notes taken by all and subsequently edited for readability by Stefan.

2. Approve agenda

Agenda is approved unchanged as published.

3. Approve minutes from previous meeting(s)

3.1 Minutes from May 18, 2017 TC meeting #175

https://www.oasis-open.org/committees/download.php/60763/odata-meeting-175_on-20170518-minutes.html

Minutes approved unchanged as published.

4. Review action items [Link to Action item list]

4.1 Action items due

None

5. V4.01

5.1 Issues for V4.01_CSD02

5.1.1 ODATA-1075 - Introduce subsetof operator for checking whether a collection is a subset or equal to another collection

Mike: In reviewing the application, three questions came up:

1) is [1,1,2] subsetof [1,2] ? (do elements of the left operand have to occur at least as many times in the right operand) 

For ordered collections: 
2) is [3,1] subsetof [4,1,3]? (does order matter) 
3) is [4,3] subsetof [4,1,3]? (can sequence have gaps) 

For unordered collections both #2 and #3 should be true

Hubert and Mike: Tendency for items in right operand having to occur at least as many times as in left operand, so 1) would be false

Hubert: Tendency for ordering should not matter, introduce a separate operator for "subsequence preserving order"

Mike: Also need to define behavior if one is unordered and one is not ordered.

Mike: Option: subsetof is always unordered. a "contains" operator could apply only to ordered collections to take into account ordering.

Mike: What about null values?

Mike: null value is a value like any other value; you have to have at least as many null values in the right operand as the left

Mike: Proposal: define subsetof always to require that each element of the left operand occur at least as many times in the right operand, and that order does not matter. If we have someone asking for an operator that requires preservation of order with ordered collections we can add one at that time.

Mike: General question: when do we use functions and when do we use operators?

Mike: Functions are extensible. Operators have to be defined by TC.

Ralf: should we rename to "subCollectionOf" so it doesn't imply operands are sets. https://en.wikipedia.org/wiki/Subsequence

Mike: subSequence could be used for the ordered comparison.

Mike: For subsequence (as defined in Wikipedia) [4,3] would be a subsequence of [4,1,3].

Mike: Wikipedia defines a subset operator for "multisets":

Ralf: https://en.wikipedia.org/wiki/Multiset - essentially what our unordered collections are

Mike: The set indicator function of a subset is smaller than or equal to that of the superset

A  B   x , 1 A ( x )  1 B ( x ) . {\displaystyle A\subseteq B\Leftrightarrow \forall x,\,\mathbf {1} _{A}(x)\leq \mathbf {1} _{B}(x).}

Hubert: [4,1,5] contains [1,5]

Ralf:: [4,1,5] contains [4,5] eq false

Hubert: [4,5] sequenceof [4,1,5] eq true

Hubert: [4,5] subsequenceof [4,1,5] eq true

Ralf: contains([4,1,5],[1,5]) --> true

Ralf: contains('abc','ab')

Ralf: contains(Firstname,'al')

Ralf: $filter=contains(Firstname,'al')

George: How is case covered? 'Al' vs 'al'

Hubert: Propose we, apart from contains, also overwrite the startswith, endswith, indexof and substring??? functions with versions that accept collections

Ralf: only for ordered collections

Ralf: Strings essentially are ordered collections of characters

Ralf: Need also subsequenceof and subsetof, either as functions or as operators

Mike: Summary:

From 2017-6-1 discussion:
1) elements of the left operand have to occur at least as many times in the right operand (sos [1,1,2] subsetof [1,2]  => false 
2) subsetof should never take order (or gaps) into account:
   i [3,1] subsetof [4,1,3] => true 
  ii [4,3] subsetof [4,1,3] => true
3) for ordered collections, a "subsequence" operator could take order into account. subsequence is defined by Wikipedia to ignore gaps:
   i [3,1] subsetof [4,1,3] => false 
  ii [4,3] subsetof [4,1,3] => true
4) for ordered collections, an operator that takes gaps into account is really a "contains":
   i [3,1] contains [4,1,3] => false 
  ii [4,3] contains [4,1,3] => false
5) for ordered collections we could also define startswith, endswith, and indexof.

Question: which should we add now (versus wait for scenarios for) and should we add as functions or as operators?

Hubert: ~/Products?$filter=contains(CustomersThatBoughtThisProduct,[MostFavoriteCustomer(),LeastFavoriteCustomer]) eq true

Hubert: ~/Products?$filter=contains(CustomersThatBoughtThisProduct,[{"@odata.id":"Customers('MostFavoriteCustomerID')"},{"@odata.id":"Customers('LeastFavoriteCustomerID')"}]) eq true

Mike: Updated Proposal

1) subsetOf always requires that each element of the left operand occur at least as many times in the right operand, and that order does not matter so:  
    subsetof([1,1,2],[1,2])  => false 
subsetof should never take order (or gaps) into account:
    subsetof([4,1,3],[3,1]) => true 
    subsetof([4,1,3],[4,3]) => true

2) for ordered collections, add a "subsequenceof" function that takes order into account and ignores gaps:
    subsequenceof([4,1,3], [3,1])  => false 
    subsequenceof([4,1,3],[4,3]) => true

3) add support for ordered collections to contains, startswith, endswith, indexof, and substring, that takes gaps into account.

Hubert: I move to resolve ODATA-1075 as per the amended proposal.

Mike: updated:

Restrict "in" to mean just "member of" 
Add "subsetof" function:

1) subsetOf always requires that each element of the left operand occur at least as many times in the right operand, and that order does not matter so:  
    subsetof([1,2],[1,1,2])  => false 
subsetof should never take order (or gaps) into account:
    subsetof([4,1,3],[3,1]) => true 
    subsetof([4,1,3],[4,3]) => true

2) for ordered collections, add a "subsequenceof" function that takes order into account and ignores gaps:
    subsequenceof([4,1,3], [3,1])  => false 
    subsequenceof([4,1,3],[4,3]) => true

3) add support for ordered collections to contains (that takes gaps into account) as well as startswith, endswith, indexof, and substring.

Ralf: indexof('Alfred','lf') --> 1

Ralf: contains('Alfred','lf') --> true

Ralf: hassubset([0,1,2],[1,2]) --> true

Mike: alternate (clearer) naming:

Restrict "in" to mean just "member of" 
Add "hassubset" function:

1) hassubset always requires that each element of the right argument occurs at least as many times in the left argument, and that order does not matter so:  
    hassubset([1,2],[1,1,2])  => false 
hassubset should never take order (or gaps) into account:
    hassubset([4,1,3],[3,1]) => true 
    hassubset([4,1,3],[4,3]) => true

2) for ordered collections, add a "hassubsequence" function that takes order into account and ignores gaps:
    hassubsequence([4,1,3], [3,1])  => false 
    hassubsequence([4,1,3],[4,3]) => true

3) add support for ordered collections to contains (that takes gaps into account) as well as startswith, endswith, indexof, and substring.

Hubert: I move to resolve ODATA-1075 as per the latest amended proposal. Mike seconds

Ralf: ODATA-1075 is RESOLVED as proposed

5.2 Document walkthrough

5.2.1 Part 1: Protocol

URL = https://www.oasis-open.org/committees/download.php/60437/odata-v4.01-wd02-part1-protocol-2017-04-05.docx

Finished already.

5.2.2 Part 2: URL Conventions

URL = https://www.oasis-open.org/committees/download.php/60438/odata-v4.01-wd02-part2-url-conventions-2017-04-05.docx

Finished already.

5.2.3 JSON Format

URL = https://www.oasis-open.org/committees/download.php/60365/odata-json-format-v4.01-wd02-2017-03-24.docx

Completed

5.2.4 CSDL JSON Representation

URL = https://www.oasis-open.org/committees/download.php/60500/odata-csdl-json-v4.01-wd01-2017-04-10.docx

Skipped - Note: Planned to start with this next meeting!

5.2.5 CSDL XML Representation

URL = https://www.oasis-open.org/committees/download.php/60499/odata-csdl-xml-v4.01-wd02-2017-04-10.docx

All go over the document, discuss, and changes are applied directly to the online editor revision

Completed - Note: Planned to start with this next meeting!

5.2.6 New in OData 4.01

URL = https://www.oasis-open.org/committees/download.php/60439/new-in-odata-v4.01-wd01-2017-04-05.docx

Skipped - Note: Planned to shortly go over this next meeting as last document to walk through!

6. Next meetings

6.1 Next Meeting on Thursday June 08, 2017 during 8-12 am PDT (17:00-21:00 CEST)

Mike: Important to try get the documents out next week, so make it a four-hour meeting?

Ralf: 8-12 am PDT 17:00-21:00 CEST

All agree

All will prepare to start walking through the CSDL JSON Representation in that meeting.

Note: The meeting starts at the usual time, but for two hours longer, so that the final walk-throughs and archive for submission preparation can take place and we may hopefully progress the bundle further

6.2 Meeting after that on Thursday June 15, 2017 during 8-10 am PDT (17:00-19:00 CEST)

Ralf: Public holiday in Germany

Stefan will not be available on June, 15

Hubert is out

George can't attend

Mike: Can't make June 22 (the week after the 15th)

7. AOB and wrap up

None

Meeting adjourned by chair.