OData TC meeting #122 Wednesday Mar 02 and Thursday Mar 03, 2016 (Face to Face, Zurich, CH)

Acting chair: Ralf

Chat transcript from room: odatatc
Meeting period: 2016-03-02 09:00 CET until 2016-03-03 17:00 CET

1. Roll call

1.1 Members present

        Gerald Krause (SAP SE)
        Hubert Heijkers (IBM)
        Ken Baclawski (Northeastern University)
        Mark Biamonte (Progress Software)
        Martin Zurmuehl (SAP SE)
        Michael Pizzo (Microsoft) a.k.a. Mike
        Ralf Handl (SAP SE)
        Ram Jeyaraman (Microsoft)
        Ramesh Reddy (Red Hat)
        Stefan Hagen (Individual)

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

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

2. Approve agenda

Proposed Agenda has been posted by Mike via https://lists.oasis-open.org/archives/odata/201603/msg00017.html (the dates should target March 2nd and 3rd though) and location reference as in mail from Hubert: https://lists.oasis-open.org/archives/odata/201601/msg00071.html

The agenda is approved.

3. Approve minutes from previous meeting(s)

3.1 Minutes from February 25, 2016 TC meeting #121

https://www.oasis-open.org/apps/org/workgroup/odata/download.php/57641/odata-meeting-121_on-20160225-minutes.html

Minutes approved unchanged as published

4. Review action items

4.1 Action items due March 02, 2016

None

5. Errata 3 Issues

5.1 Review applications of Errata 3 issue resolutions (This is a carryover from previous meeting)

Ralf: We left in JSON Format, chapter 12

Ralf: Agreement to issue application

Mark: Review of JSON Format complete

Mark: Reviewing changes to CSDL Document

Ralf: Discussion on ODATA-803 - Collection-valued property: Define default value for nullable facet

Mike: I move we reopen Issue ODATA-803 to consider meaning of absence of nullable facet for collections. Mark seconds.

No objections, issue is reopened

Hubert: I'd argue that Nullable being true for collection valued properties would be the exceptional case.

Hubert: As such this changes what clients might expect to be able to do, insert null values in these collections, whereas before they, presumable, would have not assumed to be able to do so in the absence of the Nullable facet

Mike: Upon reviewing, while clients can't assume that absence means you can insert a null value, saying that absence means true implies that the client can insert null values. Then saying that they may not be able to insert null values even in this case makes the presence of nullable=true meaningless.

Mike: in addition, this default is likely to be the wrong choice in most cases.

Mike: Proposal:

Absence of nullable facet on collection means it's unknown if you can insert nulls. You can try, but it may fail. Nullable=true means that the collection *may* contain null values (although attempting to insert a null value may still fail for a variety of reasons) Nullable=false means that the collection can not contain null values

Mark: I move that we accept the revised proposal for ODATA-803. Ramesh seconds.

No objections, motion passes

Ralf: 13.1.2 Attribute Extends: make additional text a note because we don't want to introduce normative language in an erratum.

Ralf: Finished CSDL document

Ralf: Starting with Errata document for OData

Ralf: No comments

Ralf: Starting with Errata document for JSON Format

Ralf: No comments

Ralf: Finished with reviewing documents

Ralf: I move to close issues ODATA-656, ODATA-781, ODATA-819, ODATA-821, ODATA-822, ODATA-823, ODATA-825, ODATA-826, ODATA-828, ODATA-830, ODATA-831, ODATA-832, ODATA-835, ODATA-837, ODATA-840, ODATA-847, ODATA-850, ODATA-852, ODATA-853, ODATA-861, ODATA-865, ODATA-869, ODATA-870, ODATA-877, ODATA-878, ODATA-880, ODATA-885, ODATA-891, ODATA-892, ODATA-893, ODATA-896, ODATA-899, ODATA-903 as applied. Mike seconds.

No objections, motion passes

List of the 33 issues closed above as applied:

  1. ODATA-656 - Requesting clarity on payload ordering constraints for clients
  2. ODATA-781 - substring: what to return if the start index is outside the first argument string, or the desired length exceeds the remaining string length
  3. ODATA-819 - 10.2.2: Clarify whether enum types allow multiple members with the same value
  4. ODATA-821 - 14.2.1 Attribute Target: targeting of nested properties of structured types
  5. ODATA-822 - Async Batch Request: Bug in example 85
  6. ODATA-823 - Header Content-Transfer-Encoding not used in HTTP
  7. ODATA-825 - AnnotationPath expression: traversal of multiple collection-valued scalar or navigation properties
  8. ODATA-826 - Wrong Target attribute value in Edm.Metadata.Annotation/Target navigation property
  9. ODATA-828 - Update I-JSON reference
  10. ODATA-830 - Header OData-EntityId: when required
  11. ODATA-831 - MetadataService.edmx: type of OpenType property should be Edm.Boolean
  12. ODATA-832 - 15.6: typo in diagram (Function/Action swapped)
  13. ODATA-835 - 5.1: PATCH missing in list of operations that do not allow system query options
  14. ODATA-837 - Example 28: replace $deltaToken with a valid custom query option
  15. ODATA-840 - Add example for $expand=NavProp/$count
  16. ODATA-847 - Clarification: use of Schema namespace aliases within URLs
  17. ODATA-850 - Improve document structure for functions used in common expressions
  18. ODATA-852 - 8.3.1: superfluous text paragraph 3, sentence 1
  19. ODATA-853 - 8.3.3: last sentence should use "header" instead of "preference"
  20. ODATA-861 - Define behavior when neither accept header or $format query parameter is specified
  21. ODATA-865 - 14.2.1 Attribute Target: complete list of externally targetable CSDL elements
  22. ODATA-869 - Explicitly state the location of the Content-ID header in a change set
  23. ODATA-870 - Round-off description for creating related entities when creating an entity
  24. ODATA-877 - Must delta responses continue to track "orphaned" entities?
  25. ODATA-878 - Example 84: EntityContainer is a Singleton, not an EntitySet
  26. ODATA-880 - 14.5.10: edm:Null can have edm:Annotation child elements
  27. ODATA-885 - Permissions should apply to more than just properties
  28. ODATA-891 - Misleading reference to "open" in description of $select
  29. ODATA-892 - Clarify dynamic properties support in $filter, $orderby, $expand
  30. ODATA-893 - Is @odata.type required on update of a derived type
  31. ODATA-896 - Reconsider guidance on odata.count position (public comment c201512e00001)
  32. ODATA-899 - Type cast segment after $all
  33. ODATA-903 - ABNF: should allow cast segment following collection of complex types

5.2 Errata 3 Issues in New/Open State - Issues for V4.0_ERRATA03 in New or Open state

5.2.1 ODATA-908 - 8.1.1 Header Content-Type: is only SHOULD in RFC7231

Ralf: ODATA-908 is now OPEN

Mike: Proposal is to change Content-type from MUST to SHOULD for media types only.

Mark: I move that we accept ODATA-908 as proposed. Mike seconds.

No objections. ODATA-908 is RESOLVED as proposed.

5.2.2 ODATA-916 - Define what services (and clients?) do with unknown format parameters

Ralf: ODATA-916 is OPEN

Mark: I move that we accept ODATA-916 as proposed. Ramesh seconds.

No objections. ODATA-916 is RESOLVED as proposed.

5.2.3 ODATA-913 - Should we specify a default response format if neither Accept header nor system query $format are specified

Ralf: ODATA-913 is OPEN

Mark: I move that we accept ODATA-913 as proposed. Mike seconds.

No objections. ODATA-913 is RESOLVED as proposed.

5.2.4 ODATA-912 - Clarify what clients should do if they see an unknown/invalid expression for a known annotation term

Ralf: ODATA-912 is OPEN

Mark: I move that we accept ODATA-912 as proposed. Ramesh seconds.

No objections. ODATA-912 is RESOLVED as proposed.

5.2.5 ODATA-915 - Be consistent in citing rules around namespace qualification

Ralf: ODATA-915 is OPEN

Ralf: I move that we accept ODATA-915 as proposed. Ramesh seconds.

No objections. ODATA-915 is RESOLVED as proposed.

5.2.6 ODATA-917 - 5.1.1.2.1 Addition and 5.1.1.2.2 Subtraction: Date add/sub Duration is DateTimeOffset - but in which time zone?

Ralf: ODATA-917 is OPEN

Ralf: P42DT12H53M == 24.1253

Ralf: P42DT12H53M == 42.1253

Mike: I move that we resolve ODATA-917 as proposed. Mark seconds.

No objections. ODATA-917 is RESOLVED as proposed.

5.2.7 ODATA-882 - Mismatch between 11.2.6 Requesting Related Entities and 11.2.7 Requesting Entity References

Mark: I move that we accept ODATA-882 as proposed. Ramesh seconds.

No objections. ODATA-882 is RESOLVED as proposed.

5.2.8 ODATA-785 - Numeric promotion (on overflow) across "number type families" is undesirable

Ralf: ODATA-785 is already OPEN

Ramesh: I move that we accept ODATA-785 as proposed. Mike seconds.

No objections. ODATA-785 is RESOLVED as proposed.

5.2.9 ODATA-784 - Need to specify the behaviour of arithmetic operators on Decimal type

Ralf: ODATA-784 is OPEN

Mike: I move that we accept ODATA-784 as proposed. Mark seconds.

No objections. ODATA-784 is RESOLVED as proposed.

6. OData JSON CSDL

Ralf: Demo of Swagger as carrier format for JSON CSDL

Ralf: Showing TripPin service in Swagger UI

Ralf: Interactively explore metadata and try out requests online

6.1 Public Review Comments

6.1.1 ODATA-907 - Consider Swagger for describing OData metadata in JSON format (public comment c201602e00000)

Ralf: ODATA-907 is OPEN

Ralf: I move that we accept ODATA-907 as proposed. Stefan seconds.

No objections. ODATA-907 is RESOLVED as proposed.

6.1.2 ODATA-902 - 4.5.2: make "annotations" a hash-map with the target as key

Ralf: ODATA-902 is OPEN

Ralf: I move that we accept ODATA-902 as proposed. Stefan seconds.

No objections. ODATA-902 is RESOLVED as proposed.

6.1.3 ODATA-910 - Consider format that is tailored for programmatic access (public comment c201602e00002)

Ralf: ODATA-910 is OPEN

Ralf: Consider this when reworking JSON CSDL to be based on Swagger / OpenAPI

6.1.4 ODATA-914 - ODATA-914: Comments from OASIS Technical Advisory Board (TAB)

Ralf: ODATA-914 is OPEN

Stefan: I move to apply the proposed changes. Mark seconds.

No objections. ODATA-914 is RESOLVED as proposed.

6.1.5 ODATA-911 - Miscellanous feedback (public comment c201602e00003)

Ralf: ODATA-911 is OPEN

Ralf: I move that we accept ODATA-911 as proposed. Stefan seconds.

No objections. ODATA-911 is RESOLVED as proposed.

6.2 Other Issues in New or Open state

6.2.1 ODATA-906 - Consider how to specify an included namespace as a default in JSON CSDL

Ralf: ODATA-906 is OPEN

Ralf: Postpone until after next draft of JSON CSDL is available and we know how namespaces are reflected

6.2.2 ODATA-890 - Specify how to get from a JSON message to a JSON schema for validating this message

Ralf: ODATA-890 is OPEN

Ralf: Probably covered by /paths section of a Swagger document, park until next revision of JSON CSDL is prepared

6.2.3 ODATA-889 - Make edm.json a stand-alone schema

Ralf: ODATA-889 is OPEN

Ralf: I move that we close ODATA-889 without action. Mark seconds.

No objections. ODATA-889 is CLOSED without action.

6.2.4 ODATA-863 - Represent Terms similar to Types

Ralf: ODATA-863 is OPEN

Ralf: Postpone until next revision of JSON CSDL is prepared

7. Review application of Errata03 issues resolved on Day one

Mike walks all through the documents

Ralf: I move to CLOSE issues ODATA-784, ODATA-785, ODATA-882, ODATA-908, ODATA-913, ODATA-915, and ODATA-916, and ODATA-917 as applied. Stefan seconds.

No objections, motion passes

List of the 8 issues closed above as applied:

  1. ODATA-784 - Need to specify the behaviour of arithmetic operators on Decimal type
  2. ODATA-785 - Numeric promotion (on overflow) across "number type families" is undesirable
  3. ODATA-882 - Mismatch between 11.2.6 Requesting Related Entities and 11.2.7 Requesting Entity References
  4. ODATA-908 - 8.1.1 Header Content-Type: is only SHOULD in RFC7231
  5. ODATA-913 - Should we specify a default response format if neither Accept header nor system query $format are specified
  6. ODATA-915 - Be consistent in citing rules around namespace qualification
  7. ODATA-916 - Define what services (and clients?) do with unknown format parameters
  8. ODATA-917 - 5.1.1.2.1 Addition and 5.1.1.2.2 Subtraction: Date add/sub Duration is DateTimeOffset - but in which time zone?

8. V4.01 issues - Issues for V4.01_WD01 in New or Open state

8.1 Set Operations

8.1.1 Review Revised Proposal

All go over the revised proposal based on the mail from Mike: https://lists.oasis-open.org/archives/odata/201603/msg00018.html which addresses the following 6 issues in context:

  1. ODATA-613 - Allow POST to entity sets using the delta-response
  2. ODATA-615 - Allow PATCH and DELETE with $filter on collections to modify or delete all (and only) the matching entities
  3. ODATA-616 - Allow POST to collections of complex and primitive types, and DELETE with $filter
  4. ODATA-666 - Define Deep Update and Deep Upsert operations
  5. ODATA-820 - Allow indexing into collections
  6. ODATA-876 - Allow services to return contained entities inline for delta responses

8.2 Extensions to URL conventions

8.2.1 ODATA-617 - Allow eq/ne comparison of instances of same structured (complex or entity) type, allow eq/ne comparison with null for 0..1 nav props

Ralf: ODATA-617 is OPEN

Mike: Proposal:
can compare ordered collections: same members, same position
can compare unordered collections: same members, any order. don't expect this to work though...
can compare complex types by value (may fail if complex type contains unordered collection)
can compare two entities (as being the same reference)

  ex: Person(1)/BestFriend eq Person(2)/WorstEnemy
  ex: Person(1)/BestFriend eq {"@odata.id":"/People(1)"}

can compare entities to null:

  ex: Person(1)/BestFriend eq null

Mike: I move that we accept ODATA-617 as proposed. Mark seconds.

No objections. ODATA-617 is RESOLVED as proposed.

8.2.2 ODATA-572 - Clarify that eq, ne can be used with complex type

Ralf: ODATA-572 is OPEN

Mike: I move we resolve the now opened ODATA-572 as a duplicate of ODATA-617. Mark seconds.

No objections. ODATA-572 is RESOLVED as proposed.

Mike: I move further clarify the rules around comparing complex types containing navigation properties:

Mark seconds.

No objections. Motion passes.

8.2.3 ODATA-897 - Allow the count of a filtered/searched collection in common expressions (proposed)

Ralf: ODATA-897 is OPEN

Ralf: Already allowed:

expandItem        = STAR [ ref / OPEN levels CLOSE ]
                  / expandPath
                    [ ref   [ OPEN expandRefOption   *( SEMI expandRefOption   ) CLOSE ]
                    / count [ OPEN expandCountOption *( SEMI expandCountOption ) CLOSE ]
expandCountOption = filter
                  / search

Mike: So we already support this in expand; we just can't use it in an expression ($filter or $orderby)

Mike: I move that we resolve ODATA-897 as proposed. Mark seconds.

No objections. ODATA-897 is RESOLVED as proposed.

8.2.4 ODATA-888 - ttt

Ralf: ODATA-888 is OPEN

Mark: I move that ODATA-888 be RESOLVED as proposed. Mike seconds.

No objections. ODATA-888 is RESOLVED as proposed.

8.2.5 ODATA-901 - substring: Define negative index for substring function

Ralf: ODATA-901 is OPEN

Mike: Discussion of ODATA-901

Mark: I move we resolve ODATA-901 as proposed. Gerald seconds.

Mike: Seems a useful shorthand, especially for long expressions.

No objections. ODATA-901 is RESOLVED as proposed.

8.2.6 ODATA-482 - Allow inlining stream properties and media resources

Ralf: ODATA-482 is OPEN

All discuss and update the issues proposal

Ralf: http://services.odata.org/V4/OData/OData.svc/PersonDetails?$select=Photo&$format=application/json;odata.metadata=full

Mike: Proposal:

  1. Allow payloads to contain Base64-encoded streams
    1. GET response payloads
    2. POST/PUT/PATCH requests
    3. Delta payloads
  2. Media streams in the payload are named using the name of the property
  3. Media-entity stream is represented with a property named "$value"
  4. Generalize $expand to also allow stream properties and represent the related content in Base64-encoded form.

For stream property: GET People(1)?$expand=photo
For media entity: GET Resumes(1)?$expand=$value

Expand=* =>only navigation properties - streams are not included automatically by * but may be included explicitly.

Ramesh: I move ODATA-482 be resolved as proposed. Mark seconds.

No objections. ODATA-482 is RESOLVED as proposed.

Break of 5 minutes

Marker of current progress ...

Near Real Time Draft of Minutes with timestamp 20160303T150000Z

This draft will be overwritten with successive revisions as the face to face meeting is ongoing. Hint: Before tea break on day two.