diff --git a/README.md b/README.md index d1c5941b0..9238487d9 100644 --- a/README.md +++ b/README.md @@ -64,3 +64,4 @@ OData Version 4.02. Part 2: URL Conventions|Committee Specification Draft 01|[Sp OData JSON Format Version 4.02|Committee Specification Draft 01|[Specification](https://github.com/oasis-tcs/odata-specs/tree/core/V4.02_CSD01/docs/odata-json-format)|[OASIS](https://docs.oasis-open.org/odata/odata-json-format/v4.02/csd01/) OData Common Schema Definition Language (CSDL) JSON Representation Version 4.02|Committee Specification Draft 01|[Specification](https://github.com/oasis-tcs/odata-specs/tree/core/V4.02_CSD01/docs/odata-csdl-json) [Schemas](https://github.com/oasis-tcs/odata-csdl-schemas/tree/core/V4.02_CSD01/schemas)|[OASIS](https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/csd01/) OData Common Schema Definition Language (CSDL) XML Representation Version 4.02|Committee Specification Draft 01|[Specification](https://github.com/oasis-tcs/odata-specs/tree/core/V4.02_CSD01/docs/odata-csdl-xml) [Schemas](https://github.com/oasis-tcs/odata-csdl-schemas/tree/core/V4.02_CSD01/schemas)|[OASIS](https://docs.oasis-open.org/odata/odata-csdl-xml/v4.02/csd01/) +OData Vocabularies Version 4.0|Committee Specification Draft 02|[Specification](https://github.com/oasis-tcs/odata-specs/tree/vocabularies/V4.0_CSD02/docs/odata-vocabularies) [Vocabularies](https://github.com/oasis-tcs/odata-vocabularies/tree/vocabularies/V4.0_CSD02/vocabularies)|[OASIS](https://docs.oasis-open.org/odata/odata-vocabularies/v4.0/csd02/) diff --git a/docs/odata-csdl-json/odata-csdl-json.html b/docs/odata-csdl-json/odata-csdl-json.html index 797bf9c24..d99c4ac30 100644 --- a/docs/odata-csdl-json/odata-csdl-json.html +++ b/docs/odata-csdl-json/odata-csdl-json.html @@ -146,8 +146,8 @@

Abstract:

OData services are described by an Entity Model (EDM). The Common Schema Definition Language (CSDL) defines specific representations of the entity data model exposed by an OData service, using XML, JSON, and other formats. This document (OData CSDL JSON Representation) specifically defines the JSON representation of CSDL.

Status:

-

This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical.

-

TC members should send comments on this specification to the TC’s email list. Others should send comments to the TC’s public comment list, after subscribing to it by following the instructions at the “Send A Comment” button on the TC’s web page at https://www.oasis-open.org/committees/odata/.

+

This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical.

+

TC members should send comments on this specification to the TC’s email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like “Comment on OData CSDL”.

This specification is provided under the RF on RAND Terms Mode of the OASIS IPR Policy, the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC’s web page (https://www.oasis-open.org/committees/odata/ipr.php).

Note that any machine-readable content (Computer Language Definitions) declared Normative for this Work Product is provided in separate plain text files. In the event of a discrepancy between any such plain text file and display content in the Work Product’s prose narrative document(s), the content in the separate plain text file prevails.

Key words:

@@ -161,9 +161,9 @@

Notices

Distributed under the terms of the OASIS IPR Policy.

The name “OASIS” is a trademark of OASIS, the owner and developer of this specification, and should be used only to refer to the organization and its official outputs.

For complete copyright information please see the full Notices section in an Appendix below.

-
+

Table of Contents

@@ -375,8 +375,8 @@

Table of Contents

  • E Notices
  • -
    +

    1 Introduction

    @@ -485,10 +485,10 @@

    Representation-Specific Headline

    by using either new Number("...", "json") or new Number("...", "xml"). Lines between the next and the closing : belong to the JSON variant only. --> -
    +

    2 JSON Representation

    @@ -561,9 +561,9 @@

    OData-CSDL-Schema provided as an additional artifact of this prose specification. This schema only defines the shape of a well-formed CSDL JSON document but is not descriptive enough to define what a correct CSDL JSON document MUST be in every imaginable use case. This specification document defines additional rules that correct CSDL JSON documents MUST fulfill. In case of doubt on what makes a CSDL JSON document correct the rules defined in this specification document take precedence.

    -

    +

    3 Entity Model

    @@ -914,9 +914,9 @@

    3.7 Annotation

    Many parts of the model can be decorated with additional information using annotations. Annotations are identified by their term name and an optional qualifier that allows applying the same term multiple times to the same model element.

    A model element MUST NOT specify more than one annotation for a given combination of term and qualifier.

    -

    +

    4 CSDL JSON Document

    @@ -1089,9 +1089,9 @@

    5 Schema

    @@ -1150,9 +1150,9 @@

    $Annotations< } } -

    +

    6 Entity Type

    @@ -1350,9 +1350,9 @@

    $Key

    Example 19 (based on example 16): in a query part the value assigned to the name attribute must be used

    GET http://example.org/OData.svc/Categories?$filter=Info/ID le 100
    -
    +

    7 Structural Property

    @@ -1428,9 +1428,9 @@

    7.3 Defaul

    $DefaultValue

    The value of $DefaultValue is the type-specific JSON representation of the default value of the property, see OData-JSON. For properties of type Edm.Decimal and Edm.Int64 the representation depends on the media type parameter IEEE754Compatible.

    -

    +

    8 Navigation Property

    @@ -1610,9 +1610,9 @@

    $OnDelete

    } } -
    +

    9 Complex Type

    @@ -1692,9 +1692,9 @@

    $OpenType

    The value of $OpenType is one of the Boolean literals true or false. Absence of the member means false.

    -

    +

    10 Enumeration Type

    @@ -1790,9 +1790,9 @@

    Enum "@Core.Description": "Method of shipping" } -

    +

    11 Type Definition

    @@ -1841,9 +1841,9 @@

    $UnderlyingT

    Additional facets appropriate for the underlying type MAY be specified when the type definition is used but the facets specified in the type definition MUST NOT be re-specified.

    For a type definition with underlying type Edm.PrimitiveType no facets are applicable, neither in the definition itself nor when the type definition is used, and these should be ignored by the client.

    Where type definitions are used, the type definition is returned in place of the primitive type wherever the type is specified in a response.

    -

    +

    12 Action and Function

    @@ -2004,9 +2004,9 @@

    $Nullabl } ] -

    +

    13 Entity Container

    @@ -2255,9 +2255,9 @@

    $Enti

    $IncludeInServiceDocument

    The value of $IncludeInServiceDocument is one of the Boolean literals true or false. Absence of the member means false.

    -

    +

    14 Vocabulary and Annotation

    @@ -2866,7 +2866,7 @@

    14.3.13 Geo Valu

    Example 58:

    -
    "Location": {"type": "Point", "coordinates": [142.1,64.1]}
    +
    "Location": { "type": "Point", "coordinates": [142.1,64.1] }

    @@ -2878,7 +2878,7 @@

    14.3.14

    The annotation (property) being assigned a stream value MUST be annotated with term Core.MediaType and the media type of the stream as its value.

    Example 59:

    -
    "JsonStream": {"foo":true,"bar":42},
    +
    "JsonStream": { "foo":true,"bar":42 },
     "JsonStream@Core.MediaType": "application/json",
     
     "TextStream": "Hello World!",
    @@ -3793,10 +3793,10 @@ 

    $UrlRef

    "$UrlRef": "http://host/wiki/HowToUse" }
    -

    +

    15 Identifier and Path Values

    @@ -3839,9 +3839,9 @@

    15.4 Target Pat
    MySchema.MyEntityContainer/MySingleton/My.EntityType/MyContainmentNavProperty
    MySchema.MyEntityContainer/MySingleton/MyComplexProperty/MyContainmentNavProp
    -

    +

    16 CSDL Examples

    @@ -4124,9 +4124,9 @@

    } } -

    +

    17 Conformance

    @@ -4157,8 +4157,8 @@

    17 Conformance
  • SHOULD NOT include constant Geo or Stream values in annotations
  • Conforming clients MUST be prepared to consume a model that uses any or all constructs defined in this specification, including custom annotations, and MUST ignore constructs not defined in this version of the specification.

    -

    +

    Appendix A. References

    @@ -4226,9 +4226,9 @@

    [OpenUI5]

    OpenUI5 — OData V4 Metadata JSON Format.
    https://openui5.hana.ondemand.com/topic/87aac894a40640f89920d7b2a414499b.

    -
    +

    Appendix B. Table of JSON Objects and Members

    @@ -4392,8 +4392,8 @@

    Appendix C. Acknowledgments

    @@ -4473,9 +4473,9 @@

    C.2 Partici -

    +

    Appendix D. Revision History

    @@ -4499,8 +4499,8 @@

    Appendix E. Notices

    diff --git a/docs/odata-csdl-json/odata-csdl-json.md b/docs/odata-csdl-json/odata-csdl-json.md index 5ed5ac72a..7c37b334c 100644 --- a/docs/odata-csdl-json/odata-csdl-json.md +++ b/docs/odata-csdl-json/odata-csdl-json.md @@ -62,9 +62,9 @@ This specification is related to: OData services are described by an Entity Model (EDM). The Common Schema Definition Language (CSDL) defines specific representations of the entity data model exposed by an OData service, using XML, JSON, and other formats. This document (OData CSDL JSON Representation) specifically defines the JSON representation of CSDL. #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData CSDL". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). @@ -4181,7 +4181,7 @@ Values are represented as GeoJSON, see [OData-JSON](#ODataJSON). ::: {.varjson .example} Example 58: ```json -"Location": {"type": "Point", "coordinates": [142.1,64.1]} +"Location": { "type": "Point", "coordinates": [142.1,64.1] } ``` ::: @@ -4201,7 +4201,7 @@ and the media type of the stream as its value. ::: {.varjson .example} Example 59: ```json -"JsonStream": {"foo":true,"bar":42}, +"JsonStream": { "foo":true,"bar":42 }, "JsonStream@Core.MediaType": "application/json", "TextStream": "Hello World!", diff --git a/docs/odata-csdl-json/odata-csdl-json.pdf b/docs/odata-csdl-json/odata-csdl-json.pdf index 619bcfaa6..8eddc6626 100644 Binary files a/docs/odata-csdl-json/odata-csdl-json.pdf and b/docs/odata-csdl-json/odata-csdl-json.pdf differ diff --git a/docs/odata-csdl-xml/odata-csdl-xml.html b/docs/odata-csdl-xml/odata-csdl-xml.html index 4ad857ae9..afc41cc0e 100644 --- a/docs/odata-csdl-xml/odata-csdl-xml.html +++ b/docs/odata-csdl-xml/odata-csdl-xml.html @@ -151,8 +151,8 @@

    Declared XML namespaces:

    Abstract:

    OData services are described by an Entity Model (EDM). The Common Schema Definition Language (CSDL) defines specific representations of the entity data model exposed by an OData service, using XML, JSON, and other formats. This document (OData CSDL XML Representation) specifically defines the XML representation of CSDL.

    Status:

    -

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical.

    -

    TC members should send comments on this specification to the TC’s email list. Others should send comments to the TC’s public comment list, after subscribing to it by following the instructions at the “Send A Comment” button on the TC’s web page at https://www.oasis-open.org/committees/odata/.

    +

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical.

    +

    TC members should send comments on this specification to the TC’s email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like “Comment on OData CSDL”.

    This specification is provided under the RF on RAND Terms Mode of the OASIS IPR Policy, the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC’s web page (https://www.oasis-open.org/committees/odata/ipr.php).

    Note that any machine-readable content (Computer Language Definitions) declared Normative for this Work Product is provided in separate plain text files. In the event of a discrepancy between any such plain text file and display content in the Work Product’s prose narrative document(s), the content in the separate plain text file prevails.

    Key words:

    @@ -166,9 +166,9 @@

    Notices

    Distributed under the terms of the OASIS IPR Policy.

    The name “OASIS” is a trademark of OASIS, the owner and developer of this specification, and should be used only to refer to the organization and its official outputs.

    For complete copyright information please see the full Notices section in an Appendix below.

    -
    +

    Table of Contents

    @@ -375,8 +375,8 @@

    Table of Contents

  • E Notices
  • -
    +

    1 Introduction

    @@ -489,12 +489,12 @@

    Representation-Specific Headline

    by using either new Number("...", "json") or new Number("...", "xml"). Lines between the next and the closing : belong to the JSON variant only. --> -
    - -
    +
    + +

    2 XML Representation

    @@ -557,9 +557,9 @@

    members of enumeration types and items within a collection expression.

    OData does not impose any ordering constraints on XML attributes within XML elements.

    -

    +

    3 Entity Model

    @@ -894,9 +894,9 @@

    3.7 Annotation

    Many parts of the model can be decorated with additional information using annotations. Annotations are identified by their term name and an optional qualifier that allows applying the same term multiple times to the same model element.

    A model element MUST NOT specify more than one annotation for a given combination of term and qualifier.

    -

    +

    4 CSDL XML Document

    @@ -1049,9 +1049,9 @@

    5 Schema

    @@ -1106,9 +1106,9 @@

    </Annotations> -

    +

    6 Entity Type

    @@ -1274,9 +1274,9 @@

    example 16): in a query part the value assigned to the name attribute must be used

    GET http://example.org/OData.svc/Categories?$filter=Info/ID le 100
    -

    +

    7 Structural Property

    @@ -1346,9 +1346,9 @@

    7.3 Defaul

    Attribute DefaultValue

    Default values of type Edm.String MUST be represented according to the XML escaping rules for character data in attribute values. Values of other primitive types MUST be represented according to the appropriate alternative in the primitiveValue rule defined in OData-ABNF, i.e. Edm.Binary as binaryValue, Edm.Boolean as booleanValue etc.

    -

    +

    8 Navigation Property

    @@ -1510,9 +1510,9 @@

    </NavigationProperty> </EntityType> -

    +

    9 Complex Type

    @@ -1578,9 +1578,9 @@

    Attribute OpenType

    The value of OpenType is one of the Boolean literals true or false. Absence of the attribute means false.

    -

    +

    10 Enumeration Type

    @@ -1678,9 +1678,9 @@

    </Member> </EnumType> -

    +

    11 Type Definition

    @@ -1724,9 +1724,9 @@

    Additional facets appropriate for the underlying type MAY be specified when the type definition is used but the facets specified in the type definition MUST NOT be re-specified.

    For a type definition with underlying type Edm.PrimitiveType no facets are applicable, neither in the definition itself nor when the type definition is used, and these should be ignored by the client.

    Where type definitions are used, the type definition is returned in place of the primitive type wherever the type is specified in a response.

    -

    +

    12 Action and Function

    @@ -1872,9 +1872,9 @@

    <ReturnType Type="Collection(self.Product)" /> </Function> -

    +

    13 Entity Container

    @@ -2083,9 +2083,9 @@

    Attribute IncludeInServiceDocument

    The value of IncludeInServiceDocument is one of the Boolean literals true or false. Absence of the attribute means false.

    -
    +

    14 Vocabulary and Annotation

    @@ -3548,10 +3548,10 @@

    Expression < <Annotation Term="Core.LongDescription" UrlRef="http://host/wiki/HowToUse" /> -

    +

    15 Identifier and Path Values

    @@ -3594,9 +3594,9 @@

    15.4 Target Pat
    MySchema.MyEntityContainer/MySingleton/My.EntityType/MyContainmentNavProperty
    MySchema.MyEntityContainer/MySingleton/MyComplexProperty/MyContainmentNavProp
    -

    +

    16 CSDL Examples

    @@ -3761,9 +3761,9 @@

    </edmx:DataServices> </edmx:Edmx> -

    +

    17 Conformance

    @@ -3794,8 +3794,8 @@

    17 Conformance
  • SHOULD NOT include constant Geo or Stream values in annotations
  • Conforming clients MUST be prepared to consume a model that uses any or all constructs defined in this specification, including custom annotations, and MUST ignore constructs not defined in this version of the specification.

    -

    +

    Appendix A. References

    @@ -3864,9 +3864,9 @@
    [XML-Schema-2]
    http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/. Latest version available at http://www.w3.org/TR/xmlschema11-2/.

    [Well-Known Text]

    OpenGIS Implementation Specification for Geographic information – Simple feature access – Part 1: Common architecture, May 2011. Open Geospatial Consortium. https://www.ogc.org/standard/sfa/.

    -
    +

    Appendix B. Table of XML Elements and Attributes

    @@ -4111,8 +4111,8 @@

    Expression edm:UrlRef -

    +

    Appendix C. Acknowledgments

    @@ -4186,9 +4186,9 @@

    C.2 Partici -

    +

    Appendix D. Revision History

    @@ -4212,8 +4212,8 @@

    Appendix E. Notices

    diff --git a/docs/odata-csdl-xml/odata-csdl-xml.md b/docs/odata-csdl-xml/odata-csdl-xml.md index a0cde72db..e7e2a3b52 100644 --- a/docs/odata-csdl-xml/odata-csdl-xml.md +++ b/docs/odata-csdl-xml/odata-csdl-xml.md @@ -65,9 +65,9 @@ This specification is related to: OData services are described by an Entity Model (EDM). The Common Schema Definition Language (CSDL) defines specific representations of the entity data model exposed by an OData service, using XML, JSON, and other formats. This document (OData CSDL XML Representation) specifically defines the XML representation of CSDL. #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData CSDL". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). diff --git a/docs/odata-csdl-xml/odata-csdl-xml.pdf b/docs/odata-csdl-xml/odata-csdl-xml.pdf index 12b22597c..2509f1638 100644 Binary files a/docs/odata-csdl-xml/odata-csdl-xml.pdf and b/docs/odata-csdl-xml/odata-csdl-xml.pdf differ diff --git a/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.html b/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.html index 3645845d0..485b51620 100644 --- a/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.html +++ b/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.html @@ -151,8 +151,8 @@

    Abstract:

    This specification adds basic grouping and aggregation functionality (e.g. sum, min, and max) to the Open Data Protocol (OData) without changing any of the base principles of OData.

    Status:

    -

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical.

    -

    TC members should send comments on this specification to the TC’s email list. Others should send comments to the TC’s public comment list, after subscribing to it by following the instructions at the “Send A Comment” button on the TC’s web page at https://www.oasis-open.org/committees/odata/.

    +

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical.

    +

    TC members should send comments on this specification to the TC’s email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like “Comment on OData Data Aggregation”.

    This specification is provided under the RF on RAND Terms Mode of the OASIS IPR Policy, the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC’s web page (https://www.oasis-open.org/committees/odata/ipr.php).

    Note that any machine-readable content (Computer Language Definitions) declared Normative for this Work Product is provided in separate plain text files. In the event of a discrepancy between any such plain text file and display content in the Work Product’s prose narrative document(s), the content in the separate plain text file prevails.

    Key words:

    @@ -166,9 +166,9 @@

    Notices

    Distributed under the terms of the OASIS IPR Policy.

    The name “OASIS” is a trademark of OASIS, the owner and developer of this specification, and should be used only to refer to the organization and its official outputs.

    For complete copyright information please see the full Notices section in an Appendix below.

    -
    +

    Table of Contents

    @@ -317,8 +317,8 @@

    Table of Contents

  • D Notices
  • -
    +

    1 Introduction

    @@ -394,10 +394,10 @@

    2 Overview

    @@ -1544,9 +1544,9 @@

    Note that this result contains seven fully qualified aggregate values, followed by fifteen rollup rows with subtotal values.

    -

    +

    3 System Query Option $apply

    @@ -2555,9 +2555,9 @@

    3.9 ABNF for Extended URL Conventions

    The normative ABNF construction rules for this specification are defined in OData-Agg-ABNF. They incrementally extend the rules defined in OData-ABNF.

    -
    +

    4 Cross-Joins and Aggregation

    @@ -2599,8 +2599,8 @@

    }

    The entity container may be annotated in the same way as entity sets to express which aggregate queries are supported, see section 5.

    -

    +

    5 Vocabulary for Data Aggregation

    @@ -2956,9 +2956,9 @@

    Example 59: assume the product is an implicit input for a function bound to a collection of Sales, then aggregating away the product makes this function inapplicable.

    -

    +

    6 Hierarchical Transformations

    @@ -3313,9 +3313,9 @@

    ] } -

    +

    7 Examples

    @@ -4727,16 +4727,16 @@

    ] } -

    +

    8 Conformance

    Conforming services MUST follow all rules of this specification for the set transformations and aggregation methods they support. They MUST implement all set transformations and aggregation methods they advertise via the annotation ApplySupported.

    Conforming clients MUST be prepared to consume a model that uses any or all of the constructs defined in this specification, including custom aggregation methods defined by the service, and MUST ignore any constructs not defined in this version of the specification.

    -
    +

    Appendix A. References

    @@ -4778,9 +4778,9 @@
    [RFC2119]
    [RFC8174]

    Leiba, B., “Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words”, BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017
    https://www.rfc-editor.org/info/rfc8174.

    -
    +

    Appendix B. Acknowledgments

    @@ -4854,9 +4854,9 @@

    B.2 Partici -

    +

    Appendix C. Revision History

    @@ -4908,8 +4908,8 @@

    Appendix D. Notices

    diff --git a/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.md b/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.md index dd7b0e5f6..5749ad417 100644 --- a/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.md +++ b/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.md @@ -65,9 +65,9 @@ This specification is related to: This specification adds basic grouping and aggregation functionality (e.g. sum, min, and max) to the Open Data Protocol (OData) without changing any of the base principles of OData. #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData Data Aggregation". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). diff --git a/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.pdf b/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.pdf index 52e93956f..055e69ac5 100644 Binary files a/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.pdf and b/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.pdf differ diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html index 213db717e..32da9f7a6 100644 --- a/docs/odata-json-format/odata-json-format.html +++ b/docs/odata-json-format/odata-json-format.html @@ -142,8 +142,8 @@

    Abstract:

    The Open Data Protocol (OData) for representing and interacting with structured content is comprised of a set of specifications. The core specification for the protocol is in OData Version 4.02 Part 1: Protocol. This document extends the core specification by defining representations for OData requests and responses using a JSON format.

    Status:

    -

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical.

    -

    TC members should send comments on this specification to the TC’s email list. Others should send comments to the TC’s public comment list, after subscribing to it by following the instructions at the “Send A Comment” button on the TC’s web page at https://www.oasis-open.org/committees/odata/.

    +

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical.

    +

    TC members should send comments on this specification to the TC’s email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like “Comment on OData JSON Format”.

    This specification is provided under the RF on RAND Terms Mode of the OASIS IPR Policy, the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC’s web page (https://www.oasis-open.org/committees/odata/ipr.php).

    Note that any machine-readable content (Computer Language Definitions) declared Normative for this Work Product is provided in separate plain text files. In the event of a discrepancy between any such plain text file and display content in the Work Product’s prose narrative document(s), the content in the separate plain text file prevails.

    Key words:

    @@ -157,9 +157,9 @@

    Notices

    Distributed under the terms of the OASIS IPR Policy.

    The name “OASIS” is a trademark of OASIS, the owner and developer of this specification, and should be used only to refer to the organization and its official outputs.

    For complete copyright information please see the full Notices section in an Appendix below.

    -
    +

    Table of Contents

    @@ -298,8 +298,8 @@

    Table of Contents

  • E Notices
  • -
    +

    1 Introduction

    @@ -385,10 +385,10 @@

    2 JSON Format Design

    @@ -398,8 +398,8 @@

    Payload Ordering Constraints.

    -

    +

    3 Requesting the JSON Format

    @@ -487,9 +487,9 @@

    4 Common Characteristics

    @@ -772,10 +772,10 @@

    } -

    +

    5 Service Document

    @@ -824,8 +824,8 @@

    5 ] } -

    +

    6 Entity

    @@ -874,8 +874,8 @@

    6 Entity

    "Orders@navigationLink": "Customers('ALFKI')/Orders" } -
    +

    7 Structural Property

    @@ -886,7 +886,7 @@

    7.1

    Primitive values are represented following the rules of RFC8259.

    Values of type Edm.Boolean are represented as the JSON literals true and false

    -

    Values of types Edm.Byte, Edm.SByte, Edm.Int16, Edm.Int32, Edm.Int64, Edm.Single, Edm.Double, and Edm.Decimal are represented as JSON numbers, except for -INF, INF, and NaN which are represented as strings.

    +

    Values of types Edm.Byte, Edm.SByte, Edm.Int16, Edm.Int32, Edm.Int64, Edm.Single, Edm.Double, and Edm.Decimal are represented as JSON numbers, except for -INF, INF, and NaN which are represented as strings, and except when the IEEE754Compatible format parameter demands representation of Edm.Int64 and Edm.Decimal as strings.

    Values of type Edm.String are represented as JSON strings, using the JSON string escaping rules.

    Values of type Edm.Binary, Edm.Date, Edm.DateTimeOffset, Edm.Duration, Edm.Guid, and Edm.TimeOfDay are represented as JSON strings whose content satisfies the rules binaryValue, dateValue, dateTimeOffsetValue, durationValue, guidValue, and timeOfDayValue respectively, in OData-ABNF.

    Primitive values that cannot be represented, for example due to server conversion issues or IEEE754 limitations on the size of an Edm.Int64 or Edm.Decimal value, are annotated with the Core.ValueException term. In this case, the payload MAY include an approximation of the value and MAY specify a string representation of the exact value in the value property of the annotation.

    @@ -912,7 +912,7 @@

    7.1 "GuidValue": "01234567-89ab-cdef-0123-456789abcdef", "Int64Value": 0, "ColorEnumValue": "Yellow", - "GeographyPoint": {"type": "Point", "coordinates": [142.1,64.1]} + "GeographyPoint": { "type": "Point", "coordinates": [142.1,64.1] } }

    @@ -952,7 +952,6 @@

    "EmailAddresses@nextLink": "…" } -

    A collection of primitive values that occurs in a property of type Edm.Untyped is interpreted as a collection of Edm.Boolean, Edm.String, and Edm.Decimal values, depending on the JavaScript type.

    7.4 Collection of Complex Values

    @@ -982,10 +981,11 @@

    7.5 Untype

    OData 4.01 adds the built-in abstract types Edm.Untyped and Collection(Edm.Untyped)that services can use to advertise in metadata that there is a property of a particular name present, but there is no type to describe the structure of the property’s values.

    The value of an Edm.Untyped property MAY be a primitive value, a structural value, or a collection. If a collection, it may contain any combination of primitive values, structural values, and collections.

    -

    The value of a property of type Collection(Edm.Untyped)MUST be a collection, and it MAY contain any combination of primitive values, structural values, and collections.

    +

    The value of a property of type Collection(Edm.Untyped)MUST be a collection, and it MAY contain any combination of primitive values, structural values, and collections. Enumeration values within an untyped collection SHOULD be represented as a string, using the enumerationMember.

    Untyped values are the only place where a collection can directly contain a collection, or a collection can contain a mix of primitive values, structural values, and collections.

    All children of an untyped property are assumed to be untyped unless they are annotated with the type control information, in which case they MUST conform to the type described by the control information.

    -
    +

    A primitive value within an untyped collection is interpreted as an Edm.Boolean, Edm.String, or Edm.Decimal value, depending on the JavaScript type.

    +

    Collections directly contained within an untyped collection are themselves untyped.

    @@ -1091,7 +1091,7 @@

    8.5 Bin Content-Type: application/json { - "Category": {"@id": "Categories(6)"} + "Category": { "@id": "Categories(6)" } }
    @@ -1143,9 +1143,9 @@

    8.6 }

    Note: the collection ETag for a navigation property may or may not be identical to the ETag of the containing entity, the example shows a different ETag for the Items collection.

    -

    +

    9 Stream Property

    @@ -1172,8 +1172,8 @@

    9 Str } -

    +

    10 Media Entity

    @@ -1190,8 +1190,8 @@

    10 Media Enti } -

    +

    11 Individual Property or Operation Response

    @@ -1240,8 +1240,8 @@

    }

    Note: the context URL is optional in requests.

    -

    +

    12 Collection of Operation Responses

    @@ -1249,8 +1249,8 @@

    streaming=true media type parameter is set, it MUST come before the value name/value pair. If the response represents a partial result, the count name/value pair MUST appear in the first partial response, and it MAY appear in subsequent partial responses (in which case it may vary from response to response).

    The value of the value name/value pair is an array of objects, each object representing a single operation response. Note: if the operation response is a collection, each single operation response object itself contains a name/value pair named value.

    -

    +

    13 Collection of Entities

    @@ -1273,8 +1273,8 @@

    "@nextLink": "…?$skiptoken=342r89" } -

    +

    14 Entity Reference

    @@ -1298,8 +1298,8 @@

    1 ] } -

    +

    15 Delta Payload

    @@ -1831,9 +1831,9 @@

    } } -

    +

    16 Bound Function

    @@ -1888,8 +1888,8 @@

    16 Boun } } -

    +

    17 Bound Action

    @@ -1944,8 +1944,8 @@

    17 Bound Acti } } -

    +

    18 Action Invocation

    @@ -1965,8 +1965,8 @@

    }

    In order to invoke an action with no non-binding parameters, the client passes an empty JSON object in the body of the request. 4.01 Services MUST also support clients passing an empty request body for this case.

    -

    +

    19 Batch Requests and Responses

    @@ -2306,9 +2306,9 @@

    ] } -

    +

    20 Instance Annotations

    @@ -2352,9 +2352,9 @@

    collectionAnnotations control information to the array containing the primitive member.

    The control information must come with other annotations or control information immediately before or after the collection valued property. The name of the property representing the control information is the same as the name of the collection-valued property, followed by the “at” sign (@), followed by the collectionAnnotations identifier.

    -

    +

    21 Error Handling

    @@ -2429,16 +2429,16 @@

    collectionAnnotations control information.

    Services can return partial collections within a success payload, for example, if they encounter an error while retrieving the collection and the client has specified the continue-on-error preference. In this case, the service MUST include a nextLink. The nextLink can be used to attempt retrieving the remaining members of the collection and could return an error indicating that the remaining members are not available.

    -

    +

    22 Extensibility

    Implementations can add instance annotations of the form @namespace.termname or property@namespace.termname to any JSON object, where property MAY or MAY NOT match the name of a name/value pair within the JSON object. However, the namespace MUST NOT start with odata and SHOULD NOT be required to be understood by the receiving party in order to correctly interpret the rest of the payload as the receiving party MUST ignore unknown annotations not defined in this version of the OData JSON Specification.

    -
    +

    23 Conformance

    @@ -2529,8 +2529,8 @@

    23 Conformance
  • MUST honor the odata.etag control information within PUT, PATCH or DELETE payloads, if specified
  • MUST support returning, in the final response to an asynchronous request, the application/json payload that would have been returned had the operation completed synchronously
  • -

    +

    Appendix A. References

    @@ -2584,17 +2584,17 @@

    [ECMAScript]

    ECMAScript 2023 Language Specification, 14th Edition, June 2023. Standard ECMA-262. https://www.ecma-international.org/publications-and-standards/standards/ecma-262/.

    -
    +

    Appendix B. Safety, Security and Privacy Considerations

    This specification raises no security issues.

    This section is provided as a service to the application developers, information providers, and users of OData version 4.0 giving some references to starting points for securing OData services as specified. OData is a REST-full multi-format service that depends on other services and thus inherits both sides of the coin, security enhancements and concerns alike from the latter.

    For JSON-relevant security implications please cf. at least the relevant subsections of RFC8259 as starting point.

    -
    +

    Appendix C. Acknowledgments

    @@ -2673,9 +2673,9 @@

    C.2 Partici -

    +

    Appendix D. Revision History

    @@ -2697,8 +2697,8 @@

    Appendix E. Notices

    diff --git a/docs/odata-json-format/odata-json-format.md b/docs/odata-json-format/odata-json-format.md index bb5e9133d..adf117543 100644 --- a/docs/odata-json-format/odata-json-format.md +++ b/docs/odata-json-format/odata-json-format.md @@ -58,9 +58,9 @@ This specification is related to: The Open Data Protocol (OData) for representing and interacting with structured content is comprised of a set of specifications. The core specification for the protocol is in OData Version 4.02 Part 1: Protocol. This document extends the core specification by defining representations for OData requests and responses using a JSON format. #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData JSON Format". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). @@ -1372,7 +1372,9 @@ Values of types `Edm.Byte`, `Edm.SByte`, `Edm.Single`, `Edm.Double`, and `Edm.Decimal` are represented as JSON numbers, except for `-INF`, `INF`, and `NaN` which are -represented as strings. +represented as strings, and except when the [`IEEE754Compatible`](#ControllingtheRepresentationofNumbers) +format parameter demands representation of `Edm.Int64` and `Edm.Decimal` +as strings. Values of type `Edm.String` are represented as JSON strings, using the JSON string escaping rules. @@ -1429,7 +1431,7 @@ Example 12: "GuidValue": "01234567-89ab-cdef-0123-456789abcdef", "Int64Value": 0, "ColorEnumValue": "Yellow", - "GeographyPoint": {"type": "Point", "coordinates": [142.1,64.1]} + "GeographyPoint": { "type": "Point", "coordinates": [142.1,64.1] } } ``` ::: @@ -1485,10 +1487,6 @@ Example 14: partial collection of strings with next link ``` ::: -A collection of primitive values that occurs in a property of type `Edm.Untyped` -is interpreted as a collection of `Edm.Boolean`, `Edm.String`, and `Edm.Decimal` values, -depending on the JavaScript type. - ## 7.4 Collection of Complex Values A collection of complex values is represented as a JSON array; each @@ -1530,7 +1528,7 @@ collections. The value of a property of type `Collection(Edm.Untyped)`MUST be a collection, and it MAY contain any combination of primitive values, -structural values, and collections. +structural values, and collections. Enumeration values within an untyped collection SHOULD be represented as a string, using the `enumerationMember`. Untyped values are the only place where a collection can directly contain a collection, or a collection can contain a mix of primitive @@ -1542,6 +1540,10 @@ they are annotated with the control information, in which case they MUST conform to the type described by the control information. +A primitive value within an untyped collection is interpreted as an `Edm.Boolean`, `Edm.String`, or `Edm.Decimal` value, +depending on the JavaScript type. + +Collections directly contained within an untyped collection are themselves untyped. ------- # 8 Navigation Property @@ -1716,7 +1718,7 @@ PATCH http://host/service/Products(42) HTTP/1.1 Content-Type: application/json { - "Category": {"@id": "Categories(6)"} + "Category": { "@id": "Categories(6)" } } ``` ::: diff --git a/docs/odata-json-format/odata-json-format.pdf b/docs/odata-json-format/odata-json-format.pdf index 7d3c0663c..121fc7063 100644 Binary files a/docs/odata-json-format/odata-json-format.pdf and b/docs/odata-json-format/odata-json-format.pdf differ diff --git a/docs/odata-protocol/odata-protocol.html b/docs/odata-protocol/odata-protocol.html index c10d093e5..88616441d 100644 --- a/docs/odata-protocol/odata-protocol.html +++ b/docs/odata-protocol/odata-protocol.html @@ -146,8 +146,8 @@

    Abstract:

    The Open Data Protocol (OData) enables the creation of REST-based data services, which allow resources, identified using Uniform Resource Locators (URLs) and defined in an Entity Data Model (EDM), to be published and edited by Web clients using simple HTTP messages. This document defines the core semantics and facilities of the protocol.

    Status:

    -

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical.

    -

    TC members should send comments on this specification to the TC’s email list. Others should send comments to the TC’s public comment list, after subscribing to it by following the instructions at the “Send A Comment” button on the TC’s web page at https://www.oasis-open.org/committees/odata/.

    +

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical.

    +

    TC members should send comments on this specification to the TC’s email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like “Comment on OData Protocol”.

    This specification is provided under the RF on RAND Terms Mode of the OASIS IPR Policy, the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC’s web page (https://www.oasis-open.org/committees/odata/ipr.php).

    Note that any machine-readable content (Computer Language Definitions) declared Normative for this Work Product is provided in separate plain text files. In the event of a discrepancy between any such plain text file and display content in the Work Product’s prose narrative document(s), the content in the separate plain text file prevails.

    Key words:

    @@ -161,9 +161,9 @@

    Notices

    Distributed under the terms of the OASIS IPR Policy.

    The name “OASIS” is a trademark of OASIS, the owner and developer of this specification, and should be used only to refer to the organization and its official outputs.

    For complete copyright information please see the full Notices section in an Appendix below.

    -
    +

    Table of Contents

    @@ -485,8 +485,8 @@

    Table of Contents

  • E Notices
  • -
    +

    1 Introduction

    @@ -584,10 +584,10 @@

    2 Overview

    @@ -609,8 +609,8 @@

    2 Overview

  • OData should build incrementally. A very basic, compliant service should be easy to build, with additional work necessary only to support additional capabilities.
  • Keep it simple. Address the common cases and provide extensibility where necessary.
  • -
    +

    3 Data Model

    @@ -637,9 +637,9 @@

    3.1 Annotation

    Applied annotations consist of a term (the namespace-qualified name of the annotation being applied), a target (the model or instance element to which the term is applied), and a value. The value may be a static value, or an expression that may contain a path to one or more properties of an annotated entity.

    Annotation terms are defined in metadata and have a name and a type.

    A set of related terms in a common namespace comprises a Vocabulary.

    -

    +

    4 Service Model

    @@ -679,9 +679,9 @@

    5 Versioning

    @@ -715,9 +715,9 @@

    5

    Clients SHOULD be prepared for services to make such incremental changes to their model. In particular, clients SHOULD be prepared to receive properties and derived types not previously defined by the service.

    Services SHOULD NOT change their data model depending on the authenticated user. If the data model is user or user-group dependent, all changes MUST be safe changes as defined in this section when comparing the full model to the model visible to users with restricted authorizations.

    -

    +

    6 Extensibility

    @@ -763,9 +763,9 @@

    6.6 Format Extensibility

    An OData service MUST support OData-JSON and MAY support additional formats for both request and response bodies.

    -
    +

    7 Formats

    @@ -777,8 +777,8 @@

    7 Formats

    The format specification OData-JSON describes the media type and the format parameters for non-metadata requests and responses.

    For non-metadata requests, if neither the Accept header nor the $format query option are specified, the service MAY respond to requests in any format.

    Client libraries MUST retain the order of objects within an array in JSON responses, and elements in document order for XML responses, including CSDL documents.

    -
    +

    8 Header Fields

    @@ -1102,10 +1102,10 @@

    8.3.8 Header If a response varies depending on the OData-Version of the response, the service MUST include a Vary header listing the OData-MaxVersion request header field to allow correct caching of the response.

    If a response varies depending on the applied preferences (allow-entityreferences, include-annotations, omit-values, return), the service MUST include a Vary header listing the Prefer request header field to allow correct caching of the response.

    Alternatively, the server MAY include a Vary header with the special value * as defined by RFC9110, Section 8.2.1. Note that this will make it impossible for a proxy to cache the response, see RFC7240.

    -

    +

    9 Common Response Status Codes

    @@ -1213,9 +1213,9 @@

    9.5

    In the case that the service encounters an error after sending a success status to the client, the service MUST leave the response malformed according to its Content-Type or abort the response by causing an error on transport protocol level. Clients MUST treat the entire response as being in error.

    Services MAY include the header OData-Error as a trailing header if supported by the transport protocol (e.g. HTTP/1.1 with chunked transfer encoding, or HTTP/2).

    -

    +

    10 Context URL

    @@ -1524,9 +1524,9 @@

    OData-URL) use the built-in abstract complex type. Single instances in these responses do not have a context URL.

    -

    +

    11 Data Service Requests

    @@ -2281,8 +2281,8 @@

    1

    To delete an individual entity, the client makes a DELETE request to a URL that identifies the entity. Services MAY restrict deletes only to requests addressing the edit URL of the entity.

    The request body SHOULD be empty. Top-level singleton entities can be deleted if they are nullable. Services supporting this MAY advertise it by annotating the singleton with the term Capabilities.DeleteRestrictions (nested property Deletable with value true) defined in OData-VocCap.

    -

    On successful completion of the delete, the response MUST be 204 No Content and contain an empty body.

    +

    On successful completion of the delete, the response MUST either be 204 No Content and contain an empty body, or 200 OK and contain a representation of a deleted entity according to the specified format.

    Services MUST implicitly remove relations to and from an entity when deleting it; clients need not delete the relations explicitly.

    Services MAY implicitly delete or modify related entities if required by integrity constraints. If integrity constraints are declared in $metadata using a ReferentialConstraint element, services MUST modify affected related entities according to the declared integrity constraints, e.g. by deleting dependent entities, or setting dependent properties to null or their default value.

    One such integrity constraint results from using a navigation property in a key definition of an entity type. If the related “key” entity is deleted, the dependent entity is also deleted.

    @@ -2958,7 +2958,7 @@

    Host: myserver.mydomain.org:1234 Content-Type: application/json -{"Name": "Peter"} +{ "Name": "Peter" }
    • Resource path relative to the batch request URI.
    • @@ -3323,11 +3323,11 @@

      -

    +

    12 Conformance

    @@ -3590,9 +3590,9 @@

    MUST be prepared to receive any valid 4.01 response according to the requested format
  • SHOULD use capabilities (see OData-VocCap) to determine if a 4.01 feature is supported but MAY attempt syntax and be prepared to handle 400 Bad Request or 501 Not Implemented
  • -

    +

    Appendix A. References

    @@ -3652,9 +3652,9 @@
    [ECMAScript]

    ECMAScript 2023 Language Specification, 14th Edition, June 2023. Standard ECMA-262. https://www.ecma-international.org/publications-and-standards/standards/ecma-262/.

    [Well-Known Text]

    OpenGIS Implementation Specification for Geographic information – Simple feature access – Part 1: Common architecture, May 2011. Open Geospatial Consortium. https://www.ogc.org/standard/sfa/.

    -
    +

    Appendix B. Safety, Security and Privacy Considerations

    @@ -3664,9 +3664,9 @@

    B.1 Authentication

    OData Services requiring authentication SHOULD consider supporting basic authentication as defined in RFC7617 over HTTPS for the highest level of interoperability with generic clients. They MAY support other authentication methods.

    -
    +

    Appendix C. Acknowledgments

    @@ -3802,9 +3802,9 @@

    C.2 Partici -

    +

    Appendix D. Revision History

    @@ -3826,8 +3826,8 @@

    Appendix E. Notices

    diff --git a/docs/odata-protocol/odata-protocol.md b/docs/odata-protocol/odata-protocol.md index 12fb396f3..caeec20fe 100644 --- a/docs/odata-protocol/odata-protocol.md +++ b/docs/odata-protocol/odata-protocol.md @@ -64,9 +64,9 @@ This specification is related to: The Open Data Protocol (OData) enables the creation of REST-based data services, which allow resources, identified using Uniform Resource Locators (URLs) and defined in an Entity Data Model (EDM), to be published and edited by Web clients using simple HTTP messages. This document defines the core semantics and facilities of the protocol. #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData Protocol". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). @@ -4239,8 +4239,8 @@ within the `Manager` and `DirectReports` navigation properties "LastName": "Griswold", "Manager": { "@id": "Employees(0)" }, "DirectReports": [ - {"@id": "Employees(5)"}, - {"@id": "Employees(6)"} + { "@id": "Employees(5)" }, + { "@id": "Employees(6)" } ] } ``` @@ -4600,8 +4600,10 @@ annotating the singleton with the term `Capabilities.DeleteRestrictions` (nested property `Deletable` with value `true`) defined in [OData-VocCap](#ODataVocCap). -On successful completion of the delete, the response MUST be -[`204 No Content`](#ResponseCode204NoContent) and contain an empty body. +On successful completion of the delete, the response MUST either be +[`204 No Content`](#ResponseCode204NoContent) and contain an empty body, +or [`200 OK`](#ResponseCode200OK) and contain a representation of a +deleted entity according to the specified format. Services MUST implicitly remove relations to and from an entity when deleting it; clients need not delete the relations explicitly. @@ -5960,7 +5962,7 @@ PATCH /path/service/People(1) HTTP/1.1 Host: myserver.mydomain.org:1234 Content-Type: application/json -{"Name": "Peter"} +{ "Name": "Peter" } ``` ::: diff --git a/docs/odata-protocol/odata-protocol.pdf b/docs/odata-protocol/odata-protocol.pdf index 771acf4c1..140ce5154 100644 Binary files a/docs/odata-protocol/odata-protocol.pdf and b/docs/odata-protocol/odata-protocol.pdf differ diff --git a/docs/odata-temporal-ext/odata-temporal-ext.html b/docs/odata-temporal-ext/odata-temporal-ext.html index 835e2ca41..2aaa03f9c 100644 --- a/docs/odata-temporal-ext/odata-temporal-ext.html +++ b/docs/odata-temporal-ext/odata-temporal-ext.html @@ -152,8 +152,8 @@

    Abstract:

    This specification defines how to represent and interact with time-dependent data using the Open Data Protocol (OData).

    Status:

    -

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical.

    -

    TC members should send comments on this specification to the TC’s email list. Others should send comments to the TC’s public comment list, after subscribing to it by following the instructions at the “Send A Comment” button on the TC’s web page at https://www.oasis-open.org/committees/odata/.

    +

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical.

    +

    TC members should send comments on this specification to the TC’s email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like “Comment on OData Temporal”.

    This specification is provided under the RF on RAND Terms Mode of the OASIS IPR Policy, the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC’s web page (https://www.oasis-open.org/committees/odata/ipr.php).

    Note that any machine-readable content (Computer Language Definitions) declared Normative for this Work Product is provided in separate plain text files. In the event of a discrepancy between any such plain text file and display content in the Work Product’s prose narrative document(s), the content in the separate plain text file prevails.

    Key words:

    @@ -167,9 +167,9 @@

    Notices

    Distributed under the terms of the OASIS IPR Policy.

    The name “OASIS” is a trademark of OASIS, the owner and developer of this specification, and should be used only to refer to the organization and its official outputs.

    For complete copyright information please see the full Notices section in an Appendix below.

    -
    +

    Table of Contents

    @@ -242,8 +242,8 @@

    Table of Contents

  • D Notices
  • -
    +

    1 Introduction

    @@ -350,10 +350,10 @@

    2 Overview

    @@ -1356,9 +1356,9 @@

  • Change an employee’s association to a department in the past, present, or future.
  • -

    +

    3 Vocabulary for Temporal Data

    @@ -1464,8 +1464,8 @@

    } } -

    +

    4 Temporal Requests

    @@ -2363,17 +2363,17 @@

    5 Conformance

    Conforming services MUST follow all rules of this specification for the temporal system query options they support.

    Conforming clients MUST be prepared to consume a model that uses any or all constructs defined in this specification.

    -
    +

    Appendix A. References

    @@ -2430,9 +2430,9 @@
    [Snodgrass]
    http://www2.cs.arizona.edu/people/rts/tdbbook.pdf and http://www2.cs.arizona.edu/people/rts/pp30-31.pdf.

    [SQL:2011]

    ISO/IEC 9075-2:2011 Information technology - Database languages - SQL - Part 2: Foundation (SQL/Foundation).

    -
    +

    Appendix B. Acknowledgments

    @@ -2512,9 +2512,9 @@

    B.2 Partici -

    +

    Appendix C. Revision History

    @@ -2560,8 +2560,8 @@

    Appendix D. Notices

    diff --git a/docs/odata-temporal-ext/odata-temporal-ext.md b/docs/odata-temporal-ext/odata-temporal-ext.md index fa5420000..3357cf386 100644 --- a/docs/odata-temporal-ext/odata-temporal-ext.md +++ b/docs/odata-temporal-ext/odata-temporal-ext.md @@ -67,9 +67,9 @@ This specification is related to: This specification defines how to represent and interact with time-dependent data using the Open Data Protocol (OData). #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData Temporal". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). diff --git a/docs/odata-temporal-ext/odata-temporal-ext.pdf b/docs/odata-temporal-ext/odata-temporal-ext.pdf index cd041f5ff..149034ab2 100644 Binary files a/docs/odata-temporal-ext/odata-temporal-ext.pdf and b/docs/odata-temporal-ext/odata-temporal-ext.pdf differ diff --git a/docs/odata-url-conventions/odata-url-conventions.html b/docs/odata-url-conventions/odata-url-conventions.html index 41d827cdf..5e3e97cff 100644 --- a/docs/odata-url-conventions/odata-url-conventions.html +++ b/docs/odata-url-conventions/odata-url-conventions.html @@ -146,8 +146,8 @@

    Abstract:

    The Open Data Protocol (OData) enables the creation of REST-based data services, which allow resources, identified using Uniform Resource Locators (URLs) and defined in an Entity Data Model (EDM), to be published and edited by Web clients using simple HTTP messages. This specification defines a set of recommended (but not required) rules for constructing URLs to identify the data and metadata exposed by an OData service as well as a set of reserved URL query string operators.

    Status:

    -

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical.

    -

    TC members should send comments on this specification to the TC’s email list. Others should send comments to the TC’s public comment list, after subscribing to it by following the instructions at the “Send A Comment” button on the TC’s web page at https://www.oasis-open.org/committees/odata/.

    +

    This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the “Latest stage” location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical.

    +

    TC members should send comments on this specification to the TC’s email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like “Comment on OData URL Conventions”.

    This specification is provided under the RF on RAND Terms Mode of the OASIS IPR Policy, the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC’s web page (https://www.oasis-open.org/committees/odata/ipr.php).

    Note that any machine-readable content (Computer Language Definitions) declared Normative for this Work Product is provided in separate plain text files. In the event of a discrepancy between any such plain text file and display content in the Work Product’s prose narrative document(s), the content in the separate plain text file prevails.

    Key words:

    @@ -161,9 +161,9 @@

    Notices

    Distributed under the terms of the OASIS IPR Policy.

    The name “OASIS” is a trademark of OASIS, the owner and developer of this specification, and should be used only to refer to the organization and its official outputs.

    For complete copyright information please see the full Notices section in an Appendix below.

    -
    +

    Table of Contents

    @@ -361,8 +361,8 @@

    Table of Contents

  • D Notices
  • -
    +

    1 Introduction

    @@ -440,10 +440,10 @@

    2 URL Components

    @@ -494,17 +494,17 @@

    2.2 URL Syntax<
    http://host/service/Categories('Smartphone/Tablet')

    The first and second examples are invalid because a single quote in a string literal must be represented as two consecutive single quotes. The third example is invalid because forward slashes are interpreted as path segment separators and Categories('Smartphone is not a valid OData path segment, nor is Tablet').

    -

    +

    3 Service Root URL

    The service root URL identifies the root of an OData service. A GET request to this URL returns the format-specific service document, see OData-JSON.

    The service root URL MUST terminate in a forward slash.

    The service document enables simple hypermedia-driven clients to enumerate and explore the resources published by the OData service.

    -
    +

    4 Resource Path

    @@ -787,7 +787,23 @@

    OData-Protocol. -

    Note: there is no literal representation for Edm.Stream values in URLs, so it is not possible to pass Edm.Stream values to parameters of function imports or to non-binding parameters of bound functions used in the resource path. Function expressions within query options can use path expressions of type Edm.Stream as values of non-binding function parameters.

    +

    Note: there is no literal representation for Edm.Stream values in URLs, so it is not possible to pass Edm.Stream values to parameters of function imports or to non-binding parameters of bound functions used in the resource path. Function expressions within query options can use path expressions of type Edm.Stream as values of non-binding function parameters. The aliases can contain common expressions. In the case of a bound function these MAY contain path expressions, which the service evaluates on the binding parameter value.

    +
    +

    Example 30: An employee’s leave requests for the next two weeks pending their manager’s approval:

    +
    http://host/service/Employees(23)/self.PendingLeaveRequests(StartDate=@start,
    +  EndDate=@end,Approver=@approver)
    +  ?@start=now()
    +  &@end=now() add duration'P14D'
    +  &@approver=Manager
    +

    The expression Manager is evaluated on the binding parameter value Employees(23).

    +

    When invoking an unbound function through a function import, expressions involving paths must start with $root:

    +
    http://host/service/PendingLeaveRequests(Requester=@requester,
    +  StartDate=@start,EndDate=@end,Approver=@approver)
    +  ?@requester=$root/services/Employee(23)
    +  &@start=now()
    +  &@end=now() add duration'P14D'
    +  &@approver=$root/services/Employee(23)/Manager
    +

    @@ -808,23 +824,23 @@

    $top, $skip, $orderby, $expand, and $format. The count MUST NOT be affected by $top, $skip, $orderby, or $expand.

    The count is calculated after applying any /$filter path segments, or $filter or $search system query options to the collection.

    -

    Example 30: the number of related entities

    +

    Example 31: the number of related entities

    http://host/service/Categories(1)/Products/$count
    -

    Example 31: the number of entities in an entity set

    +

    Example 32: the number of entities in an entity set

    http://host/service/Products/$count
    -

    Example 32: entity count in a $filter expression. Note that the spaces around gt are for readability of the example only; in real URLs they must be percent-encoded as %20.

    +

    Example 33: entity count in a $filter expression. Note that the spaces around gt are for readability of the example only; in real URLs they must be percent-encoded as %20.

    http://host/service/Categories?$filter=Products/$count gt 0
    -

    Example 33: count of a filtered collection in a $filter expression; returns all Categories containing more than two products whose price is greater than 5.00.

    +

    Example 34: count of a filtered collection in a $filter expression; returns all Categories containing more than two products whose price is greater than 5.00.

    http://host/service/Categories?$filter=Products/$count($filter=Price gt 5.00) gt 2
    -

    Example 34: entity count in an $orderby expression

    +

    Example 35: entity count in an $orderby expression

    http://host/service/Categories?$orderby=Products/$count

    @@ -842,7 +858,7 @@

    Core.Ordered term (see OData-VocCore). Individual items within an ordered collection of primitive or complex types can be addressed by appending a segment containing the zero-based ordinal to the URL of the collection. A negative ordinal number indexes from the end of the collection, with -1 representing the last item in the collection. Services MUST NOT specify a negative index when returning the address of a member of an ordered collection.

    Entity types are stably addressable using their canonical URL and SHOULD NOT be accessed or accessible using an index.

    -

    Example 35: the first address in a list of addresses for MainSupplier

    +

    Example 36: the first address in a list of addresses for MainSupplier

    http://host/service/MainSupplier/Addresses/0
    @@ -854,24 +870,25 @@

    Core.DefaultNamespace term defined in OData-VocCore. For more information on default namespaces, see Default Namespaces in OData-Protocol.

    Services MAY also support treating an instance as a type outside of the type hierarchy using the same syntax and semantics as when addressing a derived type. In this case, the set and values of properties of the addressed type may be different than the properties of the source type. The set of such possible target types outside of the type hierarchy SHOULD be called out using the Core.MayImplement annotation term, defined in OData-VocCore.

    -

    Example 36: entity set restricted to VipCustomer instances

    +

    Example 37: entity set restricted to VipCustomer instances

    http://host/service/Customers/Model.VipCustomer
    -

    Example 37: entity restricted to a VipCustomer instance, resulting in 404 Not Found if the customer with key 1 is not a VipCustomer

    +

    Example 38: entity restricted to a VipCustomer instance, resulting in 404 Not Found if the customer with key 1 is not a VipCustomer

    http://host/service/Customers/Model.VipCustomer(1)
    http://host/service/Customers(1)/Model.VipCustomer
    -

    Example 38: cast the complex property Address to its derived type DetailedAddress, then get a property of the derived type

    +

    Example 39: cast the complex property Address to its derived type DetailedAddress, then get a property of the derived type

    http://host/service/Customers(1)/Address/Model.DetailedAddress/Location
    -

    Example 39: filter expression with type cast; will evaluate to null for all non-VipCustomer instances and thus return only instances of VipCustomer

    -
    http://host/service/Customers?$filter=Model.VipCustomer/PercentageOfVipPromotionProductsOrdered gt 80
    +

    Example 40: filter expression with type cast; will evaluate to null for all non-VipCustomer instances and thus return only instances of VipCustomer

    +
    http://host/service/Customers
    +  ?$filter=Model.VipCustomer/PercentageOfVipPromotionProductsOrdered gt 80
    -

    Example 40: expand the single related Customer only if it is an instance of Model.VipCustomer. For to-many relationships only Model.VipCustomer instances would be inlined,

    +

    Example 41: expand the single related Customer only if it is an instance of Model.VipCustomer. For to-many relationships only Model.VipCustomer instances would be inlined,

    http://host/service/Orders?$expand=Customer/Model.VipCustomer
    @@ -882,21 +899,21 @@

    $filter system query option.

    -

    Example 41: red products that cost less than 10 — combining path segment and system query option

    +

    Example 42: red products that cost less than 10 — combining path segment and system query option

    GET Products/$filter(@foo)?@foo=Price lt 10&$filter=Color eq 'red'
    -

    Example 42: red products that cost less than 10 — combine two path segments

    +

    Example 43: red products that cost less than 10 — combine two path segments

    GET Products/$filter(@p)/$filter(@c)?@p=Price lt 10&@c=Color eq 'red'
    -

    Example 43: categories with less than ten products older than three

    +

    Example 44: categories with less than ten products older than three

    GET Categories?$filter=Products/$filter(Age gt 3)/$count lt 10

    Note that the /$filter path segment filters the “input” to the operation, and the $filter system query option filters the result of the operation, so the two can be used interchangeably only for GET operations. For a PATCH operation, the /$filter path segment is evaluated on the items before the modification and determines which items are to be modified, whereas the $filter system query option is evaluated after the modification and determines which of the modified items are part of the response.

    The /$filter path segment MAY be followed by a path segment identifying a bound action or bound function applicable to the collection.

    -

    Example 44: invoke the Special.Cluster action on all products older than 3

    +

    Example 45: invoke the Special.Cluster action on all products older than 3

    POST /service/Products/$filter(@foo)/Special.Cluster?@foo=Age gt 3
    @@ -912,7 +929,7 @@

    -

    Example 45: request the media stream for the picture with the key value Sunset4321299432:

    +

    Example 46: request the media stream for the picture with the key value Sunset4321299432:

    http://host/service/Pictures('Sunset4321299432')/$value
    @@ -925,27 +942,27 @@

    $expand query option can be specified using the names of the selected entity sets as navigation property names. If a selected entity set is not expanded, it MUST be represented using the read URL of the related entity as a navigation link in the complex type instance.

    The $count, $skip, and $top query options can also be used with no special semantics.

    -

    Example 46: if Sales had a structural property ProductID instead of a navigation property Product, a “cross join” between Sales and Products could be addressed

    +

    Example 47: if Sales had a structural property ProductID instead of a navigation property Product, a “cross join” between Sales and Products could be addressed

    http://host/service/$crossjoin(Products,Sales)?$filter=Products/ID eq Sales/ProductID

    and would result in

    -
    {
    -  "@context": "http://host/service/$metadata#Collection(Edm.ComplexType)",
    -  "value": [
    -    {
    -      "Products@navigationLink": "Products(0)",
    -      "Sales@navigationLink": "Sales(42)",
    -    },
    -    {
    -      "Products@navigationLink": "Products(0)",
    -      "Sales@navigationLink": "Sales(57)",
    -    },
    -    
    -    {
    -      "Products@navigationLink": "Products(99)",
    -      "Sales@navigationLink": "Sales(21)",
    -    }
    -  ]
    -}
    +
    {
    +  "@context": "http://host/service/$metadata#Collection(Edm.ComplexType)",
    +  "value": [
    +    {
    +      "Products@navigationLink": "Products(0)",
    +      "Sales@navigationLink": "Sales(42)",
    +    },
    +    {
    +      "Products@navigationLink": "Products(0)",
    +      "Sales@navigationLink": "Sales(57)",
    +    },
    +    
    +    {
    +      "Products@navigationLink": "Products(99)",
    +      "Sales@navigationLink": "Sales(21)",
    +    }
    +  ]
    +}
    @@ -955,11 +972,11 @@

    $search system query option plus all other query options applicable to collections of entities.

    The $all resource can be appended with a path segment containing the qualified name of an entity type in order to restrict the collections to entities of that type. Query options such as $select, $filter, $expand, and $orderby can be applied to this restricted set according to the specified type.

    -

    Example 47: all entities in a service that somehow match red

    +

    Example 48: all entities in a service that somehow match red

    http://host/service/$all?$search=red
    -

    Example 48: all Customer entities in a service whose name contains red

    +

    Example 49: all Customer entities in a service whose name contains red

    http://host/service/$all/Model.Customer?$filter=contains(Name,'red')

    @@ -971,15 +988,15 @@

    -

    Example 49: passing a filter condition in the request body

    +

    Example 50: passing a filter condition in the request body

    POST http://host/service/People/$query
     Content-Type: text/plain
     
     $filter=[FirstName,LastName]%20in%20[["John","Doe"],["Jane","Smith"]]
    -
    +

    5 Query Options

    @@ -1103,47 +1120,47 @@

    The following examples illustrate the use and semantics of each of the logical operators.

    -

    Example 50: all products with a Name equal to Milk

    +

    Example 51: all products with a Name equal to Milk

    http://host/service/Products?$filter=Name eq 'Milk'
    -

    Example 51: all products with a Name not equal to Milk

    +

    Example 52: all products with a Name not equal to Milk

    http://host/service/Products?$filter=Name ne 'Milk'
    -

    Example 52: all products with a Name greater than Milk:

    +

    Example 53: all products with a Name greater than Milk:

    http://host/service/Products?$filter=Name gt 'Milk'
    -

    Example 53: all products with a Name greater than or equal to Milk:

    +

    Example 54: all products with a Name greater than or equal to Milk:

    http://host/service/Products?$filter=Name ge 'Milk'
    -

    Example 54: all products with a Name less than Milk:

    +

    Example 55: all products with a Name less than Milk:

    http://host/service/Products?$filter=Name lt 'Milk'
    -

    Example 55: all products with a Name less than or equal to Milk:

    +

    Example 56: all products with a Name less than or equal to Milk:

    http://host/service/Products?$filter=Name le 'Milk'
    -

    Example 56: all products with a Name equal to Milk that also have a Price less than 2.55:

    +

    Example 57: all products with a Name equal to Milk that also have a Price less than 2.55:

    http://host/service/Products?$filter=Name eq 'Milk' and Price lt 2.55
    -

    Example 57: all products that either have a Name equal to Milk or have a Price less than 2.55:

    +

    Example 58: all products that either have a Name equal to Milk or have a Price less than 2.55:

    http://host/service/Products?$filter=Name eq 'Milk' or Price lt 2.55
    -

    Example 58: all products that do not have a Name that ends with ilk:

    +

    Example 59: all products that do not have a Name that ends with ilk:

    http://host/service/Products?$filter=not endswith(Name,'ilk')
    -

    Example 59: all products whose style value includes Yellow:

    +

    Example 60: all products whose style value includes Yellow:

    http://host/service/Products?$filter=style has Sales.Pattern'Yellow'
    -

    Example 60: all products whose Name is Milk or Cheese:

    +

    Example 61: all products whose Name is Milk or Cheese:

    http://host/service/Products?$filter=Name in ('Milk', 'Cheese')
    @@ -1218,31 +1235,31 @@

    The following examples illustrate the use and semantics of each of the Arithmetic operators.

    -

    Example 61: all products with a Price of 2.55:

    +

    Example 62: all products with a Price of 2.55:

    http://host/service/Products?$filter=Price add 2.45 eq 5.00
    -

    Example 62: all products with a Price of 2.55:

    +

    Example 63: all products with a Price of 2.55:

    http://host/service/Products?$filter=Price sub 0.55 eq 2.00
    -

    Example 63: all products with a Price of 2.55:

    +

    Example 64: all products with a Price of 2.55:

    http://host/service/Products?$filter=Price mul 2.0 eq 5.10
    -

    Example 64: all products with a Price of 2.55:

    +

    Example 65: all products with a Price of 2.55:

    http://host/service/Products?$filter=Price div 2.55 eq 1
    -

    Example 65: all products with an integer Rating value of 4 or 5:

    +

    Example 66: all products with an integer Rating value of 4 or 5:

    http://host/service/Products?$filter=Rating div 2 eq 2
    -

    Example 66: all products with an integer Rating value of 5:

    +

    Example 67: all products with an integer Rating value of 5:

    http://host/service/Products?$filter=Rating divby 2 eq 2.5
    -

    Example 67: all products with a Rating exactly divisible by 5:

    +

    Example 68: all products with a Rating exactly divisible by 5:

    http://host/service/Products?$filter=Rating mod 5 eq 0
    @@ -1252,7 +1269,7 @@

    5.1.1.3 Grouping<

    The Grouping operator (open and close parenthesis “( )”) controls the evaluation order of an expression. The Grouping operator returns the expression grouped inside the parenthesis.

    -

    Example 68: all products because 9 mod 3 is 0

    +

    Example 69: all products because 9 mod 3 is 0

    http://host/service/Products?$filter=(4 add 5) mod (4 sub 1) eq 0
    @@ -1278,7 +1295,7 @@

    5.1.1.5.1 concatThe concat function with collection parameter values returns a collection that appends all items of the second collection to the first. If both collections are ordered, the result is also ordered.

    The concatMethodCallExpr syntax rule defines how the concat function is invoked.

    -

    Example 69: all customers from Berlin, Germany

    +

    Example 70: all customers from Berlin, Germany

    http://host/service/Customers?$filter=concat(concat(City,', '),Country) eq 'Berlin, Germany'
    @@ -1292,7 +1309,7 @@
    5.1.1.5.2 cont

    The contains function with ordered collection parameter values returns true if the first collection can be transformed into the second collection by removing zero or more items from the beginning or the end of the first collection.

    The containsMethodCallExpr syntax rule defines how the contains function is invoked.

    -

    Example 70: all customers with a CompanyName that contains Alfreds

    +

    Example 71: all customers with a CompanyName that contains Alfreds

    http://host/service/Customers?$filter=contains(CompanyName,'Alfreds')
    @@ -1306,7 +1323,7 @@
    5.1.1.5.3 ends

    The endswith function with ordered collection parameter values returns true if the first collection can be transformed into the second collection by removing zero or more items from the beginning of the first collection.

    The endsWithMethodCallExpr syntax rule defines how the endswith function is invoked.

    -

    Example 71: all customers with a CompanyName that ends with Futterkiste

    +

    Example 72: all customers with a CompanyName that ends with Futterkiste

    http://host/service/Customers?$filter=endswith(CompanyName,'Futterkiste')
    @@ -1320,7 +1337,7 @@
    5.1.1.5.4 indexof

    The indexof function with ordered collection parameter values returns the zero-based index of the first occurrence of the second collection in the first collection, or -1 if the first collection does not contain the second collection.

    The indexOfMethodCallExpr syntax rule defines how the indexof function is invoked.

    -

    Example 72: all customers with a CompanyName containing lfreds starting at the second character

    +

    Example 73: all customers with a CompanyName containing lfreds starting at the second character

    http://host/service/Customers?$filter=indexof(CompanyName,'lfreds') eq 1
    @@ -1334,7 +1351,7 @@
    5.1.1.5.5 lengthThe length function with a collection parameter value returns the number of itens in the collection.

    The lengthMethodCallExpr syntax rule defines how the length function is invoked.

    -

    Example 73: all customers with a CompanyName that is 19 characters long

    +

    Example 74: all customers with a CompanyName that is 19 characters long

    http://host/service/Customers?$filter=length(CompanyName) eq 19
    @@ -1348,7 +1365,7 @@
    5.1.1.5.6 The startswith function with ordered collection parameter values returns true if the first collection can be transformed into the second collection by removing zero or more items from the end of the first collection.

    The startsWithMethodCallExpr syntax rule defines how the startswith function is invoked.

    -

    Example 74: all customers with a CompanyName that starts with Alfr

    +

    Example 75: all customers with a CompanyName that starts with Alfr

    http://host/service/Customers?$filter=startswith(CompanyName,'Alfr')
    @@ -1369,11 +1386,11 @@
    5.1.1.5.7 s

    A negative start index N, if supported, returns a string/collection starting N characters/items before the end of the string/collection.

    The substringMethodCallExpr syntax rule defines how the substring function is invoked.

    -

    Example 75: all customers with a CompanyName of lfreds Futterkiste once the first character has been removed

    +

    Example 76: all customers with a CompanyName of lfreds Futterkiste once the first character has been removed

    http://host/service/Customers?$filter=substring(CompanyName,1) eq 'lfreds Futterkiste'
    -

    Example 76: all customers with a CompanyName that has lf as the second and third characters, e.g, Alfreds Futterkiste

    +

    Example 77: all customers with a CompanyName that has lf as the second and third characters, e.g, Alfreds Futterkiste

    http://host/service/Customers?$filter=substring(CompanyName,1,2) eq 'lf'
    @@ -1388,7 +1405,7 @@
    5.1.1.6.1 h
    Edm.Boolean hassubset(Collection, Collection)

    The hassubset function returns true if the first collection can be transformed into the second collection by reordering and/or removing zero or more items. The hasSubsetMethodCallExpr syntax rule defines how the hassubset function is invoked.

    -

    Example 78: hassubset expression that returns false: 1 appears only once in the left operand

    +

    Example 79: hassubset expression that returns false: 1 appears only once in the left operand

    hassubset([1,2],[1,1,2])
    @@ -1407,14 +1424,14 @@
    5.
    Edm.Boolean hassubsequence(OrderedCollection,OrderedCollection)

    The hassubsequence function returns true if the first collection can be transformed into the second collection by removing zero or more items. The hasSubsequenceMethodCallExpr syntax rule defines how the hassubsequence function is invoked.

    -

    Example 79: hassubsequence expressions that return true

    +

    Example 80: hassubsequence expressions that return true

    hassubsequence([4,1,3],[4,1,3])
    hassubsequence([4,1,3],[4,1])
    hassubsequence([4,1,3],[4,3])
    hassubsequence([4,1,3,1],[1,1])
    -

    Example 80: hassubsequence expressions that return false

    +

    Example 81: hassubsequence expressions that return false

    hassubsequence([4,1,3],[1,3,4])
    hassubsequence([4,1,3],[3,1])
    hassubsequence([1,2],[1,1,2])
    @@ -1432,11 +1449,11 @@
    5. Edm.Boolean matchespattern(Edm.String,Edm.String,Edm.String)

    The second parameter MUST evaluate to a string containing an ECMAScript (JavaScript) regular expression. The matchespattern function returns true if the first parameter evaluates to a string matching that regular expression, using syntax and semantics of ECMAScript regular expressions, otherwise it returns false. If the optional third parameter is provided, it MUST evaluate to a string consisting of ECMAScript regular expression flags to modify the match.

    -

    Example 81: all customers with a CompanyName that match the (percent-encoded) regular expression ^A.*e$

    +

    Example 82: all customers with a CompanyName that match the (percent-encoded) regular expression ^A.*e$

    http://host/service/Customers?$filter=matchespattern(CompanyName,'%5EA.*e$')
    -

    Example 82: all customers with a FormattedAddress that contains a line ending with berg or ends with berg

    +

    Example 83: all customers with a FormattedAddress that contains a line ending with berg or ends with berg

    http://host/service/Customers?$filter=matchespattern(FormattedAddress,'berg$','m')
    @@ -1447,7 +1464,7 @@
    5.1.1.7.2 tolower
    Edm.String tolower(Edm.String)

    The tolower function returns the input parameter string value with all uppercase characters converted to lowercase according to Unicode rules. The toLowerMethodCallExpr syntax rule defines how the tolower function is invoked.

    -

    Example 83: all customers with a CompanyName that equals alfreds futterkiste once any uppercase characters have been converted to lowercase

    +

    Example 84: all customers with a CompanyName that equals alfreds futterkiste once any uppercase characters have been converted to lowercase

    http://host/service/Customers?$filter=tolower(CompanyName) eq 'alfreds futterkiste'
    @@ -1458,7 +1475,7 @@
    5.1.1.7.3 toupper
    Edm.String toupper(Edm.String)

    The toupper function returns the input parameter string value with all lowercase characters converted to uppercase according to Unicode rules. The toUpperMethodCallExpr syntax rule defines how the toupper function is invoked.

    -

    Example 84: all customers with a CompanyName that equals ALFREDS FUTTERKISTE once any lowercase characters have been converted to uppercase

    +

    Example 85: all customers with a CompanyName that equals ALFREDS FUTTERKISTE once any lowercase characters have been converted to uppercase

    http://host/service/Customers?$filter=toupper(CompanyName) eq 'ALFREDS FUTTERKISTE'
    @@ -1469,7 +1486,7 @@
    5.1.1.7.4 trim<
    Edm.String trim(Edm.String)

    The trim function returns the input parameter string value with all leading and trailing whitespace characters, according to Unicode rules, removed. The trimMethodCallExpr syntax rule defines how the trim function is invoked.

    -

    Example 85: all customers with a CompanyName without leading or trailing whitespace characters

    +

    Example 86: all customers with a CompanyName without leading or trailing whitespace characters

    http://host/service/Customers?$filter=trim(CompanyName) eq CompanyName
    @@ -1493,7 +1510,7 @@
    5.1.1.8.2 day

    The day function returns the day component Date or DateTimeOffset parameter value, evaluated in the time zone of the DateTimeOffset parameter value. The dayMethodCallExpr syntax rule defines how the day function is invoked.

    Services that are unable to preserve the offset of Edm.DateTimeOffset values and instead normalize the values to some common time zone (for example UTC) MUST fail evaluation of the day function for literal Edm.DateTimeOffset values that are not stated in the time zone of the normalized values.

    -

    Example 86: all employees born on the 8th day of a month

    +

    Example 87: all employees born on the 8th day of a month

    http://host/service/Employees?$filter=day(BirthDate) eq 8
    @@ -1505,7 +1522,7 @@
    -

    Example 87: all employees born less than 100 milliseconds after a full second of any minute of any hour on any day

    +

    Example 88: all employees born less than 100 milliseconds after a full second of any minute of any hour on any day

    http://host/service/Employees?$filter=[fractionalseconds(BirthDate) lt 0.1
    @@ -1518,7 +1535,7 @@
    5.1.1.8.4 hour<

    The hour function returns the hour component (0 to 23) of the DateTimeOffset or TimeOfDay parameter value, evaluated in the time zone of the DateTimeOffset parameter value. The hourMethodCallExpr syntax rule defines how the hour function is invoked.

    Services that are unable to preserve the offset of Edm.DateTimeOffset values and instead normalize the values to some common time zone (for example UTC) MUST fail evaluation of the hour function for literal Edm.DateTimeOffset values that are not stated in the time zone of the normalized values.

    -

    Example 88: all employees born in hour 4, between 04:00 (inclusive) and 05:00 (exclusive)

    +

    Example 89: all employees born in hour 4, between 04:00 (inclusive) and 05:00 (exclusive)

    http://host/service/Employees?$filter=hour(BirthDate) eq 4
    @@ -1544,7 +1561,7 @@
    5.1.1.8.7 minute

    The minute function returns the minute component (0 to 59) of the DateTimeOffset or TimeOfDay parameter value, evaluated in the time zone of the DateTimeOffset parameter value. The minuteMethodCallExpr syntax rule defines how the minute function is invoked.

    -

    Example 89: all employees born in minute 40 of any hour on any day

    +

    Example 90: all employees born in minute 40 of any hour on any day

    http://host/service/Employees?$filter=minute(BirthDate) eq 40
    @@ -1557,7 +1574,7 @@
    5.1.1.8.8 month<

    The month function returns the month component of the Date or DateTimeOffset parameter value, evaluated in the time zone of the DateTimeOffset parameter value. The monthMethodCallExpr syntax rule defines how the month function is invoked.

    Services that are unable to preserve the offset of Edm.DateTimeOffset values and instead normalize the values to some common time zone (for example UTC) MUST fail evaluation of the month function for literal Edm.DateTimeOffset values that are not stated in the time zone of the normalized values.

    -

    Example 90: all employees born in May

    +

    Example 91: all employees born in May

    http://host/service/Employees?$filter=month(BirthDate) eq 5
    @@ -1577,7 +1594,7 @@
    5.1.1.8.10 second

    The second function returns the second component (0 to 59 for regular seconds, and 60 for leap seconds, without the fractional part) of the DateTimeOffset or TimeOfDay parameter value. The secondMethodCallExpr syntax rule defines how the second function is invoked.

    -

    Example 91: all employees born in second 40 of any minute of any hour on any day

    +

    Example 92: all employees born in second 40 of any minute of any hour on any day

    http://host/service/Employees?$filter=second(BirthDate) eq 40
    @@ -1612,7 +1629,7 @@
    5.1.1.8.14 yearThe year function returns the year component of the Date or DateTimeOffset parameter value, evaluated in the time zone of the DateTimeOffset parameter value. The yearMethodCallExpr syntax rule defines how the year function is invoked.

    Services that are unable to preserve the offset of Edm.DateTimeOffset values and instead normalize the values to some common time zone (for example UTC) MUST fail evaluation of the year function for literal Edm.DateTimeOffset values that are not stated in the time zone of the normalized values.

    -

    Example 92: all employees born in 1971

    +

    Example 93: all employees born in 1971

    http://host/service/Employees?$filter=year(BirthDate) eq 1971
    @@ -1628,7 +1645,7 @@
    5.1.1.9.1 ceiling Edm.Decimal ceiling(Edm.Decimal)

    The ceiling function rounds the input numeric parameter up to the nearest numeric value with no decimal component. The ceilingMethodCallExpr syntax rule defines how the ceiling function is invoked.

    -

    Example 93: all orders with freight costs that round up to 32

    +

    Example 94: all orders with freight costs that round up to 32

    http://host/service/Orders?$filter=ceiling(Freight) eq 32
    @@ -1640,7 +1657,7 @@
    5.1.1.9.2 floor< Edm.Decimal floor(Edm.Decimal)

    The floor function rounds the input numeric parameter down to the nearest numeric value with no decimal component. The floorMethodCallExpr syntax rule defines how the floor function is invoked.

    -

    Example 94: all orders with freight costs that round down to 32

    +

    Example 95: all orders with freight costs that round down to 32

    http://host/service/Orders?$filter=floor(Freight) eq 32
    @@ -1652,7 +1669,7 @@
    5.1.1.9.3 round< Edm.Decimal round(Edm.Decimal)

    The round function rounds the input numeric parameter to the nearest numeric value with no decimal component. The mid-point between two integers is rounded away from zero, i.e. 0.5 is rounded to 1 and -0.5 is rounded to -1. The roundMethodCallExpr syntax rule defines how the round function is invoked.

    -

    Example 95: all orders with freight costs that round to 32

    +

    Example 96: all orders with freight costs that round to 32

    http://host/service/Orders?$filter=round(Freight) eq 32
    @@ -1694,12 +1711,12 @@
    5.1.1.10.2 isofThe two parameter isof function returns true if the object referred to by the expression is assignable to the type specified, according to the same rules, otherwise it returns false.

    The isofExpr syntax rule defines how the isof function is invoked.

    -

    Example 96: orders that are also BigOrders

    +

    Example 97: orders that are also BigOrders

    http://host/service/Orders?$filter=isof(NorthwindModel.BigOrder)
    http://host/service/Orders?$filter=isof($it,NorthwindModel.BigOrder)
    -

    Example 97: orders of a customer that is a VIPCustomer

    +

    Example 98: orders of a customer that is a VIPCustomer

    http://host/service/Orders?$filter=isof(Customer,NorthwindModel.VIPCustomer)
    @@ -1746,7 +1763,7 @@
    5.1.1.12.1 caseClients SHOULD ensure that the results in all pairs are compatible. If all results are of the same type, the type of the case expression is of that type. If all results are of numeric type, then the type of the case expression is a numeric type capable of representing any of these expressions according to standard type promotion rules.

    Services MAY support case expressions containing parameters of incompatible types, in which case the case expression is treated as Edm.Untyped and its value has the type of the parameter expression selected by the case statement.

    -

    Example 98: compute signum(X)

    +

    Example 99: compute signum(X)

    $compute=case(X gt 0:1,X lt 0:-1,true:0) as SignumX
    @@ -1765,16 +1782,17 @@
    5.1.1.13.1 anyThe any operator applies a Boolean expression to each member of a collection and returns true if and only if the expression is true for any member of the collection, otherwise it returns false. This implies that the any operator always returns false for an empty collection.

    The any operator can be used without an argument expression. This short form returns false if and only if the collection is empty.

    -

    Example 99: all Orders that have any Items with a Quantity greater than 100

    +

    Example 100: all Orders that have any Items with a Quantity greater than 100

    http://host/service/Orders?$filter=Items/any(d:d/Quantity gt 100)
    -

    Example 100: all customers having an order with a deviating shipping address. The Address in the argument expression is evaluated in the scope of the Customers collection.

    +

    Example 101: all customers having an order with a deviating shipping address. The Address in the argument expression is evaluated in the scope of the Customers collection.

    http://host/service/Customers?$filter=Orders/any(o:o/ShippingAddress ne Address)
    -

    Example 101: all categories along with their products used in some order with a deviating unit price. The unprefixed UnitPrice in the argument expression is evaluated in the scope of the expanded Products.

    -
    http://host/service/Categories?$expand=Products($filter=OrderItems/any(oi:oi/UnitPrice ne UnitPrice))
    +

    Example 102: all categories along with their products used in some order with a deviating unit price. The unprefixed UnitPrice in the argument expression is evaluated in the scope of the expanded Products.

    +
    http://host/service/Categories?$expand=Products(
    +  $filter=OrderItems/any(oi:oi/UnitPrice ne UnitPrice))
    @@ -1783,7 +1801,7 @@
    5.1.1.13.2 allThe all operator applies a Boolean expression to each member of a collection and returns true if the expression is true for all members of the collection, otherwise it returns false. This implies that the all operator always returns true for an empty collection.

    The all operator cannot be used without an argument expression.

    -

    Example 102: all Orders that have only Items with a Quantity greater than 100

    +

    Example 103: all Orders that have only Items with a Quantity greater than 100

    http://host/service/Orders?$filter=Items/all(d:d/Quantity gt 100)
    @@ -1796,7 +1814,7 @@
    $filter expressions. They are represented according to the primitiveLiteral rule in OData-ABNF.

    -

    Example 103: expressions using primitive literals

    +

    Example 104: expressions using primitive literals

    NullValue eq null
    TrueValue eq true
    FalseValue eq false
    @@ -1827,11 +1845,11 @@
    MUST be percent-encoded in URLs although some browsers will accept and pass them on unencoded.

    -

    Example 104: collection of string literals

    +

    Example 105: collection of string literals

    http://host/service/ProductsByColors(colors=@c)?@c=["red","green"]
    -

    Example 105: check whether a pair of properties has one of several possible pair values

    +

    Example 106: check whether a pair of properties has one of several possible pair values

    $filter=[FirstName,LastName] in [["John","Doe"],["Jane","Smith"]]
    @@ -1849,15 +1867,15 @@
    5.1.1.14.4 $it

    Note: property names and property paths in $filter expressions nested within $expand are evaluated in the context of the declared type of the expanded navigation property, so property names and property paths for the current instance of the collection identified by the resource path MUST be prefixed with $it/.

    The $it literal can also be used as a path prefix to invoke a bound function overload on the current instance within an expression. Function names without a path prefix refer to an unbound function overload.

    -

    Example 106: email addresses ending with .com assuming EmailAddresses is a collection of strings

    +

    Example 107: email addresses ending with .com assuming EmailAddresses is a collection of strings

    http://host/service/Customers(1)/EmailAddresses?$filter=endswith($it,'.com')
    -

    Example 107: customers along with their orders that shipped to the same city as the customer’s address. The nested filter expression is evaluated in the context of Orders; $it allows referring to values in the outer context of Customers. Note: the nested filter condition could equivalently be expressed as $it/Address/City eq $this/ShipTo/City.

    +

    Example 108: customers along with their orders that shipped to the same city as the customer’s address. The nested filter expression is evaluated in the context of Orders; $it allows referring to values in the outer context of Customers. Note: the nested filter condition could equivalently be expressed as $it/Address/City eq $this/ShipTo/City.

    http://host/service/Customers?$expand=Orders($filter=$it/Address/City eq ShipTo/City)
    -

    Example 108: products with at least 10 positive reviews. Model.PositiveReviews is a function bound to Model.Product returning a collection of reviews.

    +

    Example 109: products with at least 10 positive reviews. Model.PositiveReviews is a function bound to Model.Product returning a collection of reviews.

    http://host/service/Products?$filter=$it/Model.PositiveReviews()/$count ge 10
    @@ -1866,16 +1884,18 @@
    5.1.1.14.5 $root

    The $root literal can be used in expressions to refer to resources of the same service.

    -

    Example 109: all employees with the same last name as employee A1235

    +

    Example 110: all employees with the same last name as employee A1235

    http://host/service/Employees?$filter=LastName eq $root/Employees('A1245')/LastName
    -

    Example 110: products ordered by a set of customers, where the set of customers is passed as a JSON array containing the resource paths from $root to each customer

    -
    http://host/service/ProductsOrderedBy(Customers=@c)?@c=[$root/Customers('ALFKI'),$root/Customers('BLAUS')]
    +

    Example 111: products ordered by a set of customers, where the set of customers is passed as a JSON array containing the resource paths from $root to each customer

    +
    http://host/service/ProductsOrderedBy(Customers=@c)
    +  ?@c=[$root/Customers('ALFKI'),$root/Customers('BLAUS')]
    -

    Example 111: function call returning the average rating of a given employee by their peers (employees in department D1)

    -
    http://host/service/Employees('A1245')/self.AvgRating(RatedBy=@peers)?@peers=$root/Employees/$filter(Department eq 'D1')
    +

    Example 112: function call returning the average rating of a given employee by their peers (employees in department D1)

    +
    http://host/service/Employees('A1245')/self.AvgRating(RatedBy=@peers)
    +  ?@peers=$root/Employees/$filter(Department eq 'D1')
    @@ -1883,7 +1903,7 @@
    5.1.1.14.6 $this

    The $this literal can be used in $filter and $orderby expressions nested within $expand and $select for collection-valued properties and navigation properties. It refers to the current instance of the collection.

    -

    Example 112: select only email addresses ending with .com

    +

    Example 113: select only email addresses ending with .com

    http://host/service/Customers?$select=EmailAddresses($filter=endswith($this,'.com'))
    @@ -1896,7 +1916,7 @@

    -

    Example 113: similar behavior whether HeadquarterAddress is a nullable complex type or a nullable navigation property

    +

    Example 114: similar behavior whether HeadquarterAddress is a nullable complex type or a nullable navigation property

    Companies(1)/HeadquarterAddress/Street

    To access properties of derived types, the property name MUST be prefixed with the qualified name of the derived type on which the property is defined, followed by a forward slash (/), see addressing derived types. If the current instance is not of the specified derived type, the path expression returns null.

    @@ -1910,11 +1930,11 @@

    path expression leading to the annotated resource or property.

    If an annotation is not applied to the resource or property, then its value, and the values of its components, are treated as null.

    -

    Example 114: Return Products that have prices in Euro

    +

    Example 115: Return Products that have prices in Euro

    http://host/service/Products?$filter=Price/@Measures.Currency eq 'EUR'
    -

    Example 115: Return Employees that have any error messages in the Core.Messages annotation

    +

    Example 116: Return Employees that have any error messages in the Core.Messages annotation

    http://host/service/Employees?$filter=@Core.Messages/any(m:m/severity eq 'error')

    Services MAY additionally support the use of the unqualified term name by defining one or more default namespaces through the Core.DefaultNamespace annotation term defined in OData-VocCore. For more information on default namespaces, see Default Namespaces in OData-Protocol. This short notation however uses the same name pattern as parameter aliases. If a query option is specified as a parameter alias, then any occurrence of the parameter alias name in an expression MUST evaluate to the parameter alias value and MUST NOT evaluate to the annotation value of an identical unqualified term name.

    @@ -2113,64 +2133,65 @@

    -

    Example 116: expand a navigation property of an entity type

    +

    Example 117: expand a navigation property of an entity type

    http://host/service/Products?$expand=Category
    -

    Example 117: expand a navigation property of a complex type

    +

    Example 118: expand a navigation property of a complex type

    http://host/service/Customers?$expand=Addresses/Country

    A path MUST NOT appear in more than one expand item.

    Query options can be applied to an expanded navigation property by appending a semicolon-separated list of query options, enclosed in parentheses, to the navigation property name. Allowed system query options are $compute, $select, $expand, and $levels for all navigation properties, plus $filter, $orderby, $skip, $top, $count, and $search for collection-valued navigation properties.

    -

    Example 118: all categories and for each category all related products with a discontinued date equal to null

    +

    Example 119: all categories and for each category all related products with a discontinued date equal to null

    http://host/service/Categories?$expand=Products($filter=DiscontinuedDate eq null)

    The $count segment can be appended to a navigation property name or type-cast segment following a navigation property name to return just the count of the related entities. The $filter and $search system query options can be used to limit the number of related entities included in the count.

    -

    Example 119: all categories and for each category the number of all related products

    +

    Example 120: all categories and for each category the number of all related products

    http://host/service/Categories?$expand=Products/$count
    -

    Example 120: all categories and for each category the number of all related blue products

    +

    Example 121: all categories and for each category the number of all related blue products

    http://host/service/Categories?$expand=Products/$count($search=blue)

    To retrieve entity references instead of the related entities, append /$ref to the navigation property name or type-cast segment following a navigation property name. The system query options $filter, $search, $skip, $top, and $count can be used to limit the number of expanded entity references.

    -

    Example 121: all categories and for each category the references of all related products

    +

    Example 122: all categories and for each category the references of all related products

    http://host/service/Categories?$expand=Products/$ref
    -

    Example 122: all categories and for each category the references of all related products of the derived type Sales.PremierProduct

    +

    Example 123: all categories and for each category the references of all related products of the derived type Sales.PremierProduct

    http://host/service/Categories?$expand=Products/Sales.PremierProduct/$ref
    -

    Example 123: all categories and for each category the references of all related premier products with a current promotion equal to null

    -
    http://host/service/Categories?$expand=Products/Sales.PremierProduct/$ref($filter=CurrentPromotion eq null)
    +

    Example 124: all categories and for each category the references of all related premier products with a current promotion equal to null

    +
    http://host/service/Categories
    +  ?$expand=Products/Sales.PremierProduct/$ref($filter=CurrentPromotion eq null)

    Cyclic navigation properties (whose target type is identical or can be cast to its source type) can be recursively expanded using the special $levels option. The value of the $levels option is either a positive integer to specify the number of levels to expand, or the literal string max to specify the maximum expansion level supported by that service. A $levels option with a value of 1 specifies a single expand with no recursion.

    -

    Example 124: all employees with their manager, manager’s manager, and manager’s manager’s manager

    +

    Example 125: all employees with their manager, manager’s manager, and manager’s manager’s manager

    http://host/service/Employees?$expand=ReportsTo($levels=3)

    It is also possible to expand all declared and dynamic navigation properties using a star (*). To retrieve references to all related entities use */$ref, and to expand all related entities with a certain distance use the star operator with the $levels option. The star operator can be combined with explicitly named navigation properties, which take precedence over the star operator.

    The star operator does not implicitly include stream properties.

    -

    Example 125: expand Supplier and include references for all other related entities

    +

    Example 126: expand Supplier and include references for all other related entities

    http://host/service/Categories?$expand=*/$ref,Supplier
    -

    Example 126: expand all related entities and their related entities

    +

    Example 127: expand all related entities and their related entities

    http://host/service/Categories?$expand=*($levels=2)

    Specifying a stream property includes the media stream inline according to the specified format.

    -

    Example 127: include Employee’s Photo stream property along with other properties of the customer

    +

    Example 128: include Employee’s Photo stream property along with other properties of the customer

    http://host/service/Employees?$expand=Photo

    Specifying $value for a media entity includes the media entity’s stream value inline according to the specified format.

    -

    Example 128: Include the Product’s media stream along with other properties of the product

    +

    Example 129: Include the Product’s media stream along with other properties of the product

    http://host/service/Products?$expand=$value
    @@ -2196,12 +2217,12 @@

    -

    Example 129: rating and release date of all products

    +

    Example 130: rating and release date of all products

    http://host/service/Products?$select=Rating,ReleaseDate

    It is also possible to request all declared and dynamic structural properties using a star (*).

    -

    Example 130: all structural properties of all products

    +

    Example 131: all structural properties of all products

    http://host/service/Products?$select=*

    If the select item is not defined for the type of the resource, and that type supports dynamic properties or instance annotations, then the property is treated as null for all instances on which it is not defined.

    @@ -2209,19 +2230,25 @@

    $expand.

    If the select item is a navigation property, then the corresponding navigation link is represented in the response. If the navigation property also appears in an $expand query option, then it is additionally represented as inline content. This inline content can itself be restricted with a nested $select query option, see section 5.1.2.

    -

    Example 131: name and description of all products, plus name of expanded category

    -
    http://host/service/Products?$select=Name,Description&$expand=Category($select=Name)
    +

    Example 132: name and description of all products, plus name of expanded category

    +
    http://host/service/Products?$select=Name,Description
    +  &$expand=Category($select=Name)

    The select item MUST be prefixed with a qualified structured type name in order to select a property defined on a type derived from the type of the resource segment.

    A select item that is a complex type or collection of complex type can be followed by a forward slash, an optional type-cast segment, and the name of a property of the complex type (and so on for nested complex types).

    -

    Example 132: the AccountRepresentative property of any supplier that is of the derived type Namespace.PreferredSupplier, together with the Street property of the complex property Address, and the Location property of the derived complex type Namespace.AddressWithLocation

    -
    http://host/service/Suppliers?$select=Namespace.PreferredSupplier/AccountRepresentative,Address/Street,Address/Namespace.AddressWithLocation/Location
    +

    Example 133: the AccountRepresentative property of any supplier that is of the derived type Namespace.PreferredSupplier, together with the Street property of the complex property Address, and the Location property of the derived complex type Namespace.AddressWithLocation

    +
    http://host/service/Suppliers
    +  ?$select=Namespace.PreferredSupplier/AccountRepresentative,
    +           Address/Street,Address/Namespace.AddressWithLocation/Location

    Query options can be applied to a select item that is a path to a single complex value or a collection of primitive or complex values by appending a semicolon-separated list of query options, enclosed in parentheses, to the select item. The allowed system query options depend on the type of the resource identified by the select item, see section System Query Options, with the exception of $expand. The same property MUST NOT have select options specified in more than one place in a request and MUST NOT be specified in more than one expand.

    -

    Example 133: select up to five addresses whose City starts with an H, sorted, and with the Country expanded

    -
    http://host/service/Customers?$select=Addresses($filter=startswith(City,'H');$top=5;$orderby=Country/Name,City,Street)&$expand=Addresses/Country
    +

    Example 134: select up to five addresses whose City starts with an H, sorted, and with the Country expanded

    +
    http://host/service/Customers
    +  ?$select=Addresses($filter=startswith(City,'H');$top=5;
    +                     $orderby=Country/Name,City,Street)
    +  &$expand=Addresses/Country

    Any structural property, non-expanded navigation property, or operation not requested as a select item (explicitly or via a star) SHOULD be omitted from the response.

    Annotations requested in $select MUST be included in the response; $select overrules the include-annotations preference (see OData-Protocol) for the explicitly requested annotations. Additional annotations matching the preference can be included even if not requested via $select. The Preference-Applied response header only reflects the set of annotations included due to the include-annotations preference and not those only included due to $select.

    @@ -2229,7 +2256,7 @@

    -

    Example 134: the ID property, the ActionName action defined in Model and all actions and functions defined in the Model2 for each product if those actions and functions can be bound to that product

    +

    Example 135: the ID property, the ActionName action defined in Model and all actions and functions defined in the Model2 for each product if those actions and functions can be bound to that product

    http://host/service/Products?$select=ID,Model.ActionName,Model2.*

    When multiple select item exist in a $select clause, then the total set of properties, open properties, navigation properties, actions and functions to be returned is equal to the union of the set of those identified by each select item.

    @@ -2261,7 +2288,7 @@

    The OData-ABNF compute syntax rule defines the formal grammar of the $compute query option.

    Computed properties SHOULD be included as dynamic properties in the result and MUST be included if $select is specified with the computed property name, or star (*).

    -

    Example 136: compute total price for order items

    +

    Example 137: compute total price for order items

    http://host/service/Orders(10)/Items
       ?$select=Product/Description,Total
       &$filter=Total gt 100
    @@ -2324,7 +2351,7 @@ 

    OData-ABNF.

    Custom query options MUST NOT begin with a $ or @ character.

    -

    Example 137: service-specific custom query option debug-mode

    +

    Example 138: service-specific custom query option debug-mode

    http://host/service/Products?debug-mode=true
    @@ -2335,26 +2362,27 @@

    OData-ABNF.

    The semantics of parameter aliases are covered in OData-Protocol. The OData-ABNF rule aliasAndValue defines the formal grammar for passing parameter alias values as query options.

    -

    Example 138:

    +

    Example 139:

    http://host/service/Movies?$filter=contains(@word,Title)&@word='Black'
    -

    Example 139:

    +

    Example 140:

    http://host/service/Movies?$filter=Title eq @title&@title='Wizard of Oz'
    -

    Example 140: JSON array of strings as parameter alias value — note that [, ], and " need to be percent-encoded in real URLs, the clear-text representation used here is just for readability

    -
    http://host/service/Products/Model.WithIngredients(Ingredients=@i)?@i=["Carrots","Ginger","Oranges"]
    +

    Example 141: JSON array of strings as parameter alias value — note that [, ], and " need to be percent-encoded in real URLs, the clear-text representation used here is just for readability

    +
    http://host/service/Products/Model.WithIngredients(Ingredients=@i)
    +  ?@i=["Carrots","Ginger","Oranges"]
    -
    +

    6 Conformance

    The conformance requirements for OData clients and services are described in OData-Protocol.

    -
    +

    Appendix A. References

    @@ -2409,9 +2437,9 @@
    [Well-Known Text]
    do we have considerations specific to URLs, for example length, encoding, privacy (use $batch if in doubt), ...? --> -
    +

    Appendix B. Acknowledgments

    @@ -2475,9 +2503,9 @@

    B.1 Partici -

    +

    Appendix C. Revision History

    @@ -2499,8 +2527,8 @@

    Appendix D. Notices

    diff --git a/docs/odata-url-conventions/odata-url-conventions.md b/docs/odata-url-conventions/odata-url-conventions.md index 5c635168e..b50d92eef 100644 --- a/docs/odata-url-conventions/odata-url-conventions.md +++ b/docs/odata-url-conventions/odata-url-conventions.md @@ -63,9 +63,9 @@ This specification is related to: The Open Data Protocol (OData) enables the creation of REST-based data services, which allow resources, identified using Uniform Resource Locators (URLs) and defined in an Entity Data Model (EDM), to be published and edited by Web clients using simple HTTP messages. This specification defines a set of recommended (but not required) rules for constructing URLs to identify the data and metadata exposed by an OData service as well as a set of reserved URL query string operators. #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData URL Conventions". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). @@ -1029,7 +1029,34 @@ Note: there is no literal representation for `Edm.Stream` values in URLs, so it is not possible to pass `Edm.Stream` values to parameters of function imports or to non-binding parameters of bound functions used in the resource path. Function expressions within query options can use [path expressions](#PathExpressions) -of type `Edm.Stream` as values of non-binding function parameters. +of type `Edm.Stream` as values of non-binding function parameters. The aliases can contain [common +expressions](#CommonExpressionSyntax). In the case of a bound function +these MAY contain [path expressions](#PathExpressions), which +the service evaluates on the binding parameter value. + +::: example +Example 30: An employee's leave requests for the next two weeks +pending their manager's approval: +``` +http://host/service/Employees(23)/self.PendingLeaveRequests(StartDate=@start, + EndDate=@end,Approver=@approver) + ?@start=now() + &@end=now() add duration'P14D' + &@approver=Manager +``` +The expression `Manager` is evaluated on the binding parameter value `Employees(23)`. + +When invoking an unbound function through a function import, expressions involving +paths must start with `$root`: +``` +http://host/service/PendingLeaveRequests(Requester=@requester, + StartDate=@start,EndDate=@end,Approver=@approver) + ?@requester=$root/services/Employee(23) + &@start=now() + &@end=now() add duration'P14D' + &@approver=$root/services/Employee(23)/Manager +``` +::: ## 4.6 Addressing a Property @@ -1067,21 +1094,21 @@ The count is calculated after applying any [`$search`](#SystemQueryOptionsearch) system query options to the collection. ::: example -Example 30: the number of related entities +Example 31: the number of related entities ``` http://host/service/Categories(1)/Products/$count ``` ::: ::: example -Example 31: the number of entities in an entity set +Example 32: the number of entities in an entity set ``` http://host/service/Products/$count ``` ::: ::: example -Example 32: entity count in a `$filter` +Example 33: entity count in a `$filter` expression. Note that the spaces around `gt` are for readability of the example only; in real URLs they must be percent-encoded as `%20`. ``` @@ -1090,7 +1117,7 @@ http://host/service/Categories?$filter=Products/$count gt 0 ::: ::: example -Example 33: count of a filtered collection in a +Example 34: count of a filtered collection in a `$filter` expression; returns all Categories containing more than two products whose price is greater than 5.00. ``` @@ -1099,7 +1126,7 @@ http://host/service/Categories?$filter=Products/$count($filter=Price gt 5.00) gt ::: ::: example -Example 34: entity count in an `$orderby` expression +Example 35: entity count in an `$orderby` expression ``` http://host/service/Categories?$orderby=Products/$count ``` @@ -1146,7 +1173,7 @@ Entity types are stably addressable using their canonical URL and SHOULD NOT be accessed or accessible using an index. ::: example -Example 35: the first address in a list of addresses for `MainSupplier` +Example 36: the first address in a list of addresses for `MainSupplier` ``` http://host/service/MainSupplier/Addresses/0 ``` @@ -1185,14 +1212,14 @@ SHOULD be called out using the annotation term, defined in [OData-VocCore](#ODataVocCore). ::: example -Example 36: entity set restricted to `VipCustomer` instances +Example 37: entity set restricted to `VipCustomer` instances ``` http://host/service/Customers/Model.VipCustomer ``` ::: ::: example -Example 37: entity restricted to a `VipCustomer` instance, resulting in +Example 38: entity restricted to a `VipCustomer` instance, resulting in `404 Not Found` if the customer with key `1` is not a `VipCustomer` ``` http://host/service/Customers/Model.VipCustomer(1) @@ -1204,7 +1231,7 @@ http://host/service/Customers(1)/Model.VipCustomer ::: ::: example -Example 38: cast the complex property `Address` to its derived type +Example 39: cast the complex property `Address` to its derived type `DetailedAddress`, then get a property of the derived type ``` http://host/service/Customers(1)/Address/Model.DetailedAddress/Location @@ -1212,16 +1239,17 @@ http://host/service/Customers(1)/Address/Model.DetailedAddress/Location ::: ::: example -Example 39: filter expression with type cast; will evaluate to `null` +Example 40: filter expression with type cast; will evaluate to `null` for all non-`VipCustomer` instances and thus return only instances of `VipCustomer` ``` -http://host/service/Customers?$filter=Model.VipCustomer/PercentageOfVipPromotionProductsOrdered gt 80 +http://host/service/Customers + ?$filter=Model.VipCustomer/PercentageOfVipPromotionProductsOrdered gt 80 ``` ::: ::: example -Example 40: expand the single related `Customer` only if it is an +Example 41: expand the single related `Customer` only if it is an instance of `Model.VipCustomer`. For to-many relationships only `Model.VipCustomer` instances would be inlined, ``` @@ -1249,7 +1277,7 @@ combined with the [`$filter`](#SystemQueryOptionfilter) system query option. ::: example -Example 41: red products that cost less than 10 --- combining path +Example 42: red products that cost less than 10 --- combining path segment and system query option ``` GET Products/$filter(@foo)?@foo=Price lt 10&$filter=Color eq 'red' @@ -1257,7 +1285,7 @@ GET Products/$filter(@foo)?@foo=Price lt 10&$filter=Color eq 'red' ::: ::: example -Example 42: red products that cost less than 10 --- combine two path +Example 43: red products that cost less than 10 --- combine two path segments ``` GET Products/$filter(@p)/$filter(@c)?@p=Price lt 10&@c=Color eq 'red' @@ -1265,7 +1293,7 @@ GET Products/$filter(@p)/$filter(@c)?@p=Price lt 10&@c=Color eq 'red' ::: ::: example -Example 43: categories with less than ten products older than three +Example 44: categories with less than ten products older than three ``` GET Categories?$filter=Products/$filter(Age gt 3)/$count lt 10 ``` @@ -1285,7 +1313,7 @@ identifying a [bound action](#AddressingActions) or [bound function](#AddressingFunctions) applicable to the collection. ::: example -Example 44: invoke the `Special.Cluster` action on all products older +Example 45: invoke the `Special.Cluster` action on all products older than 3 ``` POST /service/Products/$filter(@foo)/Special.Cluster?@foo=Age gt 3 @@ -1320,7 +1348,7 @@ may redirect from this canonical URL to the source URL of the media stream. ::: example -Example 45: request the media stream for the picture with the key value +Example 46: request the media stream for the picture with the key value `Sunset4321299432`: ``` http://host/service/Pictures('Sunset4321299432')/$value @@ -1360,7 +1388,7 @@ The [`$count`](#SystemQueryOptioncount), with no special semantics. ::: example -Example 46: if `Sales` had a structural property `ProductID` instead of +Example 47: if `Sales` had a structural property `ProductID` instead of a navigation property `Product`, a "cross join" between `Sales` and `Products` could be addressed ``` @@ -1409,14 +1437,14 @@ entities of that type. Query options such as restricted set according to the specified type. ::: example -Example 47: all entities in a service that somehow match `red` +Example 48: all entities in a service that somehow match `red` ``` http://host/service/$all?$search=red ``` ::: ::: example -Example 48: all `Customer` entities in a service whose name contains +Example 49: all `Customer` entities in a service whose name contains `red` ``` http://host/service/$all/Model.Customer?$filter=contains(Name,'red') @@ -1445,7 +1473,7 @@ URLs (especially: no spaces, tabs, or line breaks allowed) and MUST follow the syntax rules described in chapter Query Options. ::: example -Example 49: passing a filter condition in the request body +Example 50: passing a filter condition in the request body ``` POST http://host/service/People/$query Content-Type: text/plain @@ -1704,49 +1732,49 @@ The following examples illustrate the use and semantics of each of the logical operators. ::: example -Example 50: all products with a `Name` equal to `Milk` +Example 51: all products with a `Name` equal to `Milk` ``` http://host/service/Products?$filter=Name eq 'Milk' ``` ::: ::: example -Example 51: all products with a `Name` not equal to `Milk` +Example 52: all products with a `Name` not equal to `Milk` ``` http://host/service/Products?$filter=Name ne 'Milk' ``` ::: ::: example -Example 52: all products with a `Name` greater than `Milk`: +Example 53: all products with a `Name` greater than `Milk`: ``` http://host/service/Products?$filter=Name gt 'Milk' ``` ::: ::: example -Example 53: all products with a `Name` greater than or equal to `Milk`: +Example 54: all products with a `Name` greater than or equal to `Milk`: ``` http://host/service/Products?$filter=Name ge 'Milk' ``` ::: ::: example -Example 54: all products with a `Name` less than `Milk`: +Example 55: all products with a `Name` less than `Milk`: ``` http://host/service/Products?$filter=Name lt 'Milk' ``` ::: ::: example -Example 55: all products with a `Name` less than or equal to `Milk`: +Example 56: all products with a `Name` less than or equal to `Milk`: ``` http://host/service/Products?$filter=Name le 'Milk' ``` ::: ::: example -Example 56: all products with a `Name` equal to `Milk` that also have a `Price` +Example 57: all products with a `Name` equal to `Milk` that also have a `Price` less than 2.55: ``` http://host/service/Products?$filter=Name eq 'Milk' and Price lt 2.55 @@ -1754,7 +1782,7 @@ http://host/service/Products?$filter=Name eq 'Milk' and Price lt 2.55 ::: ::: example -Example 57: all products that either have a `Name` equal to `Milk` or have a +Example 58: all products that either have a `Name` equal to `Milk` or have a `Price` less than 2.55: ``` http://host/service/Products?$filter=Name eq 'Milk' or Price lt 2.55 @@ -1762,21 +1790,21 @@ http://host/service/Products?$filter=Name eq 'Milk' or Price lt 2.55 ::: ::: example -Example 58: all products that do not have a `Name` that ends with `ilk`: +Example 59: all products that do not have a `Name` that ends with `ilk`: ``` http://host/service/Products?$filter=not endswith(Name,'ilk') ``` ::: ::: example -Example 59: all products whose `style` value includes `Yellow`: +Example 60: all products whose `style` value includes `Yellow`: ``` http://host/service/Products?$filter=style has Sales.Pattern'Yellow' ``` ::: ::: example -Example 60: all products whose `Name` is `Milk` or `Cheese`: +Example 61: all products whose `Name` is `Milk` or `Cheese`: ``` http://host/service/Products?$filter=Name in ('Milk', 'Cheese') ``` @@ -1907,49 +1935,49 @@ The following examples illustrate the use and semantics of each of the Arithmetic operators. ::: example -Example 61: all products with a Price of 2.55: +Example 62: all products with a Price of 2.55: ``` http://host/service/Products?$filter=Price add 2.45 eq 5.00 ``` ::: ::: example -Example 62: all products with a Price of 2.55: +Example 63: all products with a Price of 2.55: ``` http://host/service/Products?$filter=Price sub 0.55 eq 2.00 ``` ::: ::: example -Example 63: all products with a Price of 2.55: +Example 64: all products with a Price of 2.55: ``` http://host/service/Products?$filter=Price mul 2.0 eq 5.10 ``` ::: ::: example -Example 64: all products with a Price of 2.55: +Example 65: all products with a Price of 2.55: ``` http://host/service/Products?$filter=Price div 2.55 eq 1 ``` ::: ::: example -Example 65: all products with an integer Rating value of 4 or 5: +Example 66: all products with an integer Rating value of 4 or 5: ``` http://host/service/Products?$filter=Rating div 2 eq 2 ``` ::: ::: example -Example 66: all products with an integer Rating value of 5: +Example 67: all products with an integer Rating value of 5: ``` http://host/service/Products?$filter=Rating divby 2 eq 2.5 ``` ::: ::: example -Example 67: all products with a Rating exactly divisible by 5: +Example 68: all products with a Rating exactly divisible by 5: ``` http://host/service/Products?$filter=Rating mod 5 eq 0 ``` @@ -1962,7 +1990,7 @@ evaluation order of an expression. The Grouping operator returns the expression grouped inside the parenthesis. ::: example -Example 68: all products because 9 mod 3 is 0 +Example 69: all products because 9 mod 3 is 0 ``` http://host/service/Products?$filter=(4 add 5) mod (4 sub 1) eq 0 ``` @@ -2012,7 +2040,7 @@ The `concatMethodCallExpr` syntax rule defines how the `concat` function is invoked. ::: example -Example 69: all customers from Berlin, Germany +Example 70: all customers from Berlin, Germany ``` http://host/service/Customers?$filter=concat(concat(City,', '),Country) eq 'Berlin, Germany' ``` @@ -2043,7 +2071,7 @@ The `containsMethodCallExpr` syntax rule defines how the `contains` function is invoked. ::: example -Example 70: all customers with a `CompanyName` that contains `Alfreds` +Example 71: all customers with a `CompanyName` that contains `Alfreds` ``` http://host/service/Customers?$filter=contains(CompanyName,'Alfreds') ``` @@ -2074,7 +2102,7 @@ The `endsWithMethodCallExpr` syntax rule defines how the `endswith` function is invoked. ::: example -Example 71: all customers with a `CompanyName` that ends with +Example 72: all customers with a `CompanyName` that ends with `Futterkiste` ``` http://host/service/Customers?$filter=endswith(CompanyName,'Futterkiste') @@ -2106,7 +2134,7 @@ The `indexOfMethodCallExpr` syntax rule defines how the `indexof` function is invoked. ::: example -Example 72: all customers with a `CompanyName` containing `lfreds` +Example 73: all customers with a `CompanyName` containing `lfreds` starting at the second character ``` http://host/service/Customers?$filter=indexof(CompanyName,'lfreds') eq 1 @@ -2132,7 +2160,7 @@ The `lengthMethodCallExpr` syntax rule defines how the `length` function is invoked. ::: example -Example 73: all customers with a `CompanyName` that is 19 characters +Example 74: all customers with a `CompanyName` that is 19 characters long ``` http://host/service/Customers?$filter=length(CompanyName) eq 19 @@ -2164,7 +2192,7 @@ The `startsWithMethodCallExpr` syntax rule defines how the `startswith` function is invoked. ::: example -Example 74: all customers with a `CompanyName` that starts with `Alfr` +Example 75: all customers with a `CompanyName` that starts with `Alfr` ``` http://host/service/Customers?$filter=startswith(CompanyName,'Alfr') ``` @@ -2218,7 +2246,7 @@ The `substringMethodCallExpr` syntax rule defines how the `substring` function is invoked. ::: example -Example 75: all customers with a `CompanyName` of `lfreds Futterkiste` +Example 76: all customers with a `CompanyName` of `lfreds Futterkiste` once the first character has been removed ``` http://host/service/Customers?$filter=substring(CompanyName,1) eq 'lfreds Futterkiste' @@ -2226,7 +2254,7 @@ http://host/service/Customers?$filter=substring(CompanyName,1) eq 'lfreds Futter ::: ::: example -Example 76: all customers with a `CompanyName` that has `lf` as the +Example 77: all customers with a `CompanyName` that has `lf` as the second and third characters, e.g, `Alfreds Futterkiste` ``` http://host/service/Customers?$filter=substring(CompanyName,1,2) eq 'lf' @@ -2249,7 +2277,7 @@ zero or more items. The `hasSubsetMethodCallExpr` syntax rule defines how the `hassubset` function is invoked. ::: example -Example 77: `hassubset` expressions that return true +Example 78: `hassubset` expressions that return true ``` hassubset([4,1,3],[4,1,3]) ``` @@ -2272,7 +2300,7 @@ hassubset([4,1,3,1],[1,1]) ::: ::: example -Example 78: `hassubset` expression that returns false: 1 appears only +Example 79: `hassubset` expression that returns false: 1 appears only once in the left operand ``` hassubset([1,2],[1,1,2]) @@ -2293,7 +2321,7 @@ items. The `hasSubsequenceMethodCallExpr` syntax rule defines how the `hassubsequence` function is invoked. ::: example -Example 79: `hassubsequence` expressions that return true +Example 80: `hassubsequence` expressions that return true ``` hassubsequence([4,1,3],[4,1,3]) ``` @@ -2312,7 +2340,7 @@ hassubsequence([4,1,3,1],[1,1]) ::: ::: example -Example 80: `hassubsequence` expressions that return false +Example 81: `hassubsequence` expressions that return false ``` hassubsequence([4,1,3],[1,3,4]) ``` @@ -2346,7 +2374,7 @@ If the optional third parameter is provided, it MUST evaluate to a string consisting of ECMAScript regular expression flags to modify the match. ::: example -Example 81: all customers with a `CompanyName` that match the +Example 82: all customers with a `CompanyName` that match the (percent-encoded) regular expression `^A.*e$` ``` http://host/service/Customers?$filter=matchespattern(CompanyName,'%5EA.*e$') @@ -2354,7 +2382,7 @@ http://host/service/Customers?$filter=matchespattern(CompanyName,'%5EA.*e$') ::: ::: example -Example 82: all customers with a `FormattedAddress` that contains a line ending with `berg` or ends with `berg` +Example 83: all customers with a `FormattedAddress` that contains a line ending with `berg` or ends with `berg` ``` http://host/service/Customers?$filter=matchespattern(FormattedAddress,'berg$','m') ``` @@ -2374,7 +2402,7 @@ The `toLowerMethodCallExpr` syntax rule defines how the `tolower` function is invoked. ::: example -Example 83: all customers with a `CompanyName` that equals +Example 84: all customers with a `CompanyName` that equals `alfreds futterkiste` once any uppercase characters have been converted to lowercase ``` @@ -2396,7 +2424,7 @@ The `toUpperMethodCallExpr` syntax rule defines how the `toupper` function is invoked. ::: example -Example 84: all customers with a `CompanyName` that equals +Example 85: all customers with a `CompanyName` that equals `ALFREDS FUTTERKISTE` once any lowercase characters have been converted to uppercase ``` @@ -2418,7 +2446,7 @@ removed. The `trimMethodCallExpr` syntax rule defines how the `trim` function is invoked. ::: example -Example 85: all customers with a `CompanyName` without leading or +Example 86: all customers with a `CompanyName` without leading or trailing whitespace characters ``` http://host/service/Customers?$filter=trim(CompanyName) eq CompanyName @@ -2460,7 +2488,7 @@ UTC) MUST fail evaluation of the `day` function for literal normalized values. ::: example -Example 86: all employees born on the 8th day of a month +Example 87: all employees born on the 8th day of a month ``` http://host/service/Employees?$filter=day(BirthDate) eq 8 ``` @@ -2482,7 +2510,7 @@ non-negative decimal value less than 1. The `fractionalseconds` function is invoked. ::: example -Example 87: all employees born less than 100 milliseconds after a full +Example 88: all employees born less than 100 milliseconds after a full second of any minute of any hour on any day ``` http://host/service/Employees?$filter=[fractionalseconds(BirthDate) lt 0.1 @@ -2510,7 +2538,7 @@ UTC) MUST fail evaluation of the `hour` function for literal normalized values. ::: example -Example 88: all employees born in hour 4, between 04:00 (inclusive) and +Example 89: all employees born in hour 4, between 04:00 (inclusive) and 05:00 (exclusive) ``` http://host/service/Employees?$filter=hour(BirthDate) eq 4 @@ -2554,7 +2582,7 @@ zone of the `DateTimeOffset` parameter value. The `minuteMethodCallExpr` syntax rule defines how the `minute` function is invoked. ::: example -Example 89: all employees born in minute 40 of any hour on any day +Example 90: all employees born in minute 40 of any hour on any day ``` http://host/service/Employees?$filter=minute(BirthDate) eq 40 ``` @@ -2581,7 +2609,7 @@ UTC) MUST fail evaluation of the `month` function for literal normalized values. ::: example -Example 90: all employees born in May +Example 91: all employees born in May ``` http://host/service/Employees?$filter=month(BirthDate) eq 5 ``` @@ -2620,7 +2648,7 @@ of the `DateTimeOffset` or `TimeOfDay` parameter value. The invoked. ::: example -Example 91: all employees born in second 40 of any minute of any hour on +Example 92: all employees born in second 40 of any minute of any hour on any day ``` http://host/service/Employees?$filter=second(BirthDate) eq 40 @@ -2689,7 +2717,7 @@ UTC) MUST fail evaluation of the `year` function for literal normalized values. ::: example -Example 92: all employees born in 1971 +Example 93: all employees born in 1971 ``` http://host/service/Employees?$filter=year(BirthDate) eq 1971 ``` @@ -2712,7 +2740,7 @@ nearest numeric value with no decimal component. The is invoked. ::: example -Example 93: all orders with freight costs that round up to 32 +Example 94: all orders with freight costs that round up to 32 ``` http://host/service/Orders?$filter=ceiling(Freight) eq 32 ``` @@ -2733,7 +2761,7 @@ nearest numeric value with no decimal component. The invoked. ::: example -Example 94: all orders with freight costs that round down to 32 +Example 95: all orders with freight costs that round down to 32 ``` http://host/service/Orders?$filter=floor(Freight) eq 32 ``` @@ -2755,7 +2783,7 @@ rounded to -1. The `roundMethodCallExpr` syntax rule defines how the `round` function is invoked. ::: example -Example 95: all orders with freight costs that round to 32 +Example 96: all orders with freight costs that round to 32 ``` http://host/service/Orders?$filter=round(Freight) eq 32 ``` @@ -2824,7 +2852,7 @@ same rules, otherwise it returns false. The `isofExpr` syntax rule defines how the `isof` function is invoked. ::: example -Example 96: orders that are also `BigOrders` +Example 97: orders that are also `BigOrders` ``` http://host/service/Orders?$filter=isof(NorthwindModel.BigOrder) ``` @@ -2835,7 +2863,7 @@ http://host/service/Orders?$filter=isof($it,NorthwindModel.BigOrder) ::: ::: example -Example 97: orders of a customer that is a `VIPCustomer` +Example 98: orders of a customer that is a `VIPCustomer` ``` http://host/service/Orders?$filter=isof(Customer,NorthwindModel.VIPCustomer) ``` @@ -2919,7 +2947,7 @@ incompatible types, in which case the case expression is treated as selected by the case statement. ::: example -Example 98: compute signum(X) +Example 99: compute signum(X) ``` $compute=case(X gt 0:1,X lt 0:-1,true:0) as SignumX ``` @@ -2961,7 +2989,7 @@ The `any` operator can be used without an argument expression. This short form returns false if and only if the collection is empty. ::: example -Example 99: all `Orders` that have any `Items` with a `Quantity` greater +Example 100: all `Orders` that have any `Items` with a `Quantity` greater than `100` ``` http://host/service/Orders?$filter=Items/any(d:d/Quantity gt 100) @@ -2969,7 +2997,7 @@ http://host/service/Orders?$filter=Items/any(d:d/Quantity gt 100) ::: ::: example -Example 100: all customers having an order with a deviating shipping +Example 101: all customers having an order with a deviating shipping address. The `Address` in the argument expression is evaluated in the scope of the `Customers` collection. ``` @@ -2978,11 +3006,12 @@ http://host/service/Customers?$filter=Orders/any(o:o/ShippingAddress ne Address) ::: ::: example -Example 101: all categories along with their products used in some order +Example 102: all categories along with their products used in some order with a deviating unit price. The unprefixed `UnitPrice` in the argument expression is evaluated in the scope of the expanded `Products`. ``` -http://host/service/Categories?$expand=Products($filter=OrderItems/any(oi:oi/UnitPrice ne UnitPrice)) +http://host/service/Categories?$expand=Products( + $filter=OrderItems/any(oi:oi/UnitPrice ne UnitPrice)) ``` ::: @@ -2996,7 +3025,7 @@ operator always returns true for an empty collection. The `all` operator cannot be used without an argument expression. ::: example -Example 102: all `Orders` that have only `Items` with a `Quantity` +Example 103: all `Orders` that have only `Items` with a `Quantity` greater than `100` ``` http://host/service/Orders?$filter=Items/all(d:d/Quantity gt 100) @@ -3013,7 +3042,7 @@ values, and in the query part, for example, as operands in according to the `primitiveLiteral` rule in [OData-ABNF](#ODataABNF). ::: example -Example 103: expressions using primitive literals +Example 104: expressions using primitive literals ``` NullValue eq null ``` @@ -3118,14 +3147,14 @@ percent-encoded in URLs although some browsers will accept and pass them on unencoded. ::: example -Example 104: collection of string literals +Example 105: collection of string literals ``` http://host/service/ProductsByColors(colors=@c)?@c=["red","green"] ``` ::: ::: example -Example 105: check whether a pair of properties has one of several +Example 106: check whether a pair of properties has one of several possible pair values ``` $filter=[FirstName,LastName] in [["John","Doe"],["Jane","Smith"]] @@ -3171,7 +3200,7 @@ function overload on the current instance within an expression. Function names without a path prefix refer to an unbound function overload. ::: example -Example 106: email addresses ending with `.com` assuming +Example 107: email addresses ending with `.com` assuming `EmailAddresses` is a collection of strings ``` http://host/service/Customers(1)/EmailAddresses?$filter=endswith($it,'.com') @@ -3179,7 +3208,7 @@ http://host/service/Customers(1)/EmailAddresses?$filter=endswith($it,'.com') ::: ::: example -Example 107: customers along with their orders that shipped to the same +Example 108: customers along with their orders that shipped to the same city as the customer's address. The nested filter expression is evaluated in the context of Orders; `$it` allows referring to values in the outer context of Customers. @@ -3190,7 +3219,7 @@ http://host/service/Customers?$expand=Orders($filter=$it/Address/City eq ShipTo/ ::: ::: example -Example 108: products with at least 10 positive reviews. +Example 109: products with at least 10 positive reviews. `Model.PositiveReviews` is a function bound to `Model.Product` returning a collection of reviews. ``` @@ -3204,25 +3233,27 @@ The `$root` literal can be used in expressions to refer to resources of the same service. ::: example -Example 109: all employees with the same last name as employee `A1235` +Example 110: all employees with the same last name as employee `A1235` ``` http://host/service/Employees?$filter=LastName eq $root/Employees('A1245')/LastName ``` ::: ::: example -Example 110: products ordered by a set of customers, where the set of +Example 111: products ordered by a set of customers, where the set of customers is passed as a JSON array containing the resource paths from `$root` to each customer ``` -http://host/service/ProductsOrderedBy(Customers=@c)?@c=[$root/Customers('ALFKI'),$root/Customers('BLAUS')] +http://host/service/ProductsOrderedBy(Customers=@c) + ?@c=[$root/Customers('ALFKI'),$root/Customers('BLAUS')] ``` ::: ::: example -Example 111: function call returning the average rating of a given employee by their peers (employees in department D1) +Example 112: function call returning the average rating of a given employee by their peers (employees in department D1) ``` -http://host/service/Employees('A1245')/self.AvgRating(RatedBy=@peers)?@peers=$root/Employees/$filter(Department eq 'D1') +http://host/service/Employees('A1245')/self.AvgRating(RatedBy=@peers) + ?@peers=$root/Employees/$filter(Department eq 'D1') ``` ::: @@ -3236,7 +3267,7 @@ and navigation properties. It refers to the current instance of the collection. ::: example -Example 112: select only email addresses ending with `.com` +Example 113: select only email addresses ending with `.com` ``` http://host/service/Customers?$select=EmailAddresses($filter=endswith($this,'.com')) ``` @@ -3263,7 +3294,7 @@ target cardinality 0..1), its value, and the values of its components, are treated as `null`. ::: example -Example 113: similar behavior whether `HeadquarterAddress` is a nullable +Example 114: similar behavior whether `HeadquarterAddress` is a nullable complex type or a nullable navigation property ``` Companies(1)/HeadquarterAddress/Street @@ -3304,14 +3335,14 @@ If an annotation is not applied to the resource or property, then its value, and the values of its components, are treated as `null`. ::: example -Example 114: Return Products that have prices in Euro +Example 115: Return Products that have prices in Euro ``` http://host/service/Products?$filter=Price/@Measures.Currency eq 'EUR' ``` ::: ::: example -Example 115: Return Employees that have any error messages in the +Example 116: Return Employees that have any error messages in the [`Core.Messages`](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#Messages) annotation ``` @@ -3446,14 +3477,14 @@ segment does not specify a declared property, then the expanded property appears only for those instances on which it has a value. ::: example -Example 116: expand a navigation property of an entity type +Example 117: expand a navigation property of an entity type ``` http://host/service/Products?$expand=Category ``` ::: ::: example -Example 117: expand a navigation property of a complex type +Example 118: expand a navigation property of a complex type ``` http://host/service/Customers?$expand=Addresses/Country ``` @@ -3477,7 +3508,7 @@ Allowed system query options are for collection-valued navigation properties. ::: example -Example 118: all categories and for each category all related products +Example 119: all categories and for each category all related products with a discontinued date equal to `null` ``` http://host/service/Categories?$expand=Products($filter=DiscontinuedDate eq null) @@ -3491,7 +3522,7 @@ property name to return just the count of the related entities. The number of related entities included in the count. ::: example -Example 119: all categories and for each category the number of all +Example 120: all categories and for each category the number of all related products ``` http://host/service/Categories?$expand=Products/$count @@ -3499,7 +3530,7 @@ http://host/service/Categories?$expand=Products/$count ::: ::: example -Example 120: all categories and for each category the number of all +Example 121: all categories and for each category the number of all related blue products ``` http://host/service/Categories?$expand=Products/$count($search=blue) @@ -3516,7 +3547,7 @@ The system query options [`$filter`](#SystemQueryOptionfilter), expanded entity references. ::: example -Example 121: all categories and for each category the references of all +Example 122: all categories and for each category the references of all related products ``` http://host/service/Categories?$expand=Products/$ref @@ -3524,7 +3555,7 @@ http://host/service/Categories?$expand=Products/$ref ::: ::: example -Example 122: all categories and for each category the references of all +Example 123: all categories and for each category the references of all related products of the derived type `Sales.PremierProduct` ``` http://host/service/Categories?$expand=Products/Sales.PremierProduct/$ref @@ -3532,10 +3563,11 @@ http://host/service/Categories?$expand=Products/Sales.PremierProduct/$ref ::: ::: example -Example 123: all categories and for each category the references of all +Example 124: all categories and for each category the references of all related premier products with a current promotion equal to `null` ``` -http://host/service/Categories?$expand=Products/Sales.PremierProduct/$ref($filter=CurrentPromotion eq null) +http://host/service/Categories + ?$expand=Products/Sales.PremierProduct/$ref($filter=CurrentPromotion eq null) ``` ::: @@ -3548,7 +3580,7 @@ A `$levels` option with a value of 1 specifies a single expand with no recursion. ::: example -Example 124: all employees with their manager, manager's manager, and +Example 125: all employees with their manager, manager's manager, and manager's manager's manager ``` http://host/service/Employees?$expand=ReportsTo($levels=3) @@ -3565,7 +3597,7 @@ which take precedence over the star operator. The star operator does not implicitly include stream properties. ::: example -Example 125: expand `Supplier` and include references for all other +Example 126: expand `Supplier` and include references for all other related entities ``` http://host/service/Categories?$expand=*/$ref,Supplier @@ -3573,7 +3605,7 @@ http://host/service/Categories?$expand=*/$ref,Supplier ::: ::: example -Example 126: expand all related entities and their related entities +Example 127: expand all related entities and their related entities ``` http://host/service/Categories?$expand=*($levels=2) ``` @@ -3583,7 +3615,7 @@ Specifying a stream property includes the media stream inline according to the specified format. ::: example -Example 127: include Employee's `Photo` stream property along with other +Example 128: include Employee's `Photo` stream property along with other properties of the customer ``` http://host/service/Employees?$expand=Photo @@ -3594,7 +3626,7 @@ Specifying `$value` for a media entity includes the media entity's stream value inline according to the specified format. ::: example -Example 128: Include the Product's media stream along with other +Example 129: Include the Product's media stream along with other properties of the product ``` http://host/service/Products?$expand=$value @@ -3653,7 +3685,7 @@ The simplest form of a select item explicitly requests a property defined on the type of the resources identified by the resource path section of the URL. ::: example -Example 129: rating and release date of all products +Example 130: rating and release date of all products ``` http://host/service/Products?$select=Rating,ReleaseDate ``` @@ -3663,7 +3695,7 @@ It is also possible to request all declared and dynamic structural properties using a star (`*`). ::: example -Example 130: all structural properties of all products +Example 131: all structural properties of all products ``` http://host/service/Products?$select=* ``` @@ -3691,10 +3723,11 @@ inline content can itself be restricted with a nested `$select` query option, see [section 5.1.2](#SystemQueryOptionfilter). ::: example -Example 131: name and description of all products, plus name of expanded +Example 132: name and description of all products, plus name of expanded category ``` -http://host/service/Products?$select=Name,Description&$expand=Category($select=Name) +http://host/service/Products?$select=Name,Description + &$expand=Category($select=Name) ``` ::: @@ -3707,12 +3740,14 @@ be followed by a forward slash, an optional [type-cast segment](#AddressingDeriv complex type (and so on for nested complex types). ::: example -Example 132: the `AccountRepresentative` property of any supplier that +Example 133: the `AccountRepresentative` property of any supplier that is of the derived type `Namespace.PreferredSupplier`, together with the `Street` property of the complex property `Address`, and the Location property of the derived complex type `Namespace.AddressWithLocation` ``` -http://host/service/Suppliers?$select=Namespace.PreferredSupplier/AccountRepresentative,Address/Street,Address/Namespace.AddressWithLocation/Location +http://host/service/Suppliers + ?$select=Namespace.PreferredSupplier/AccountRepresentative, + Address/Street,Address/Namespace.AddressWithLocation/Location ``` ::: @@ -3727,10 +3762,13 @@ select options specified in more than one place in a request and MUST NOT be specified in more than one expand. ::: example -Example 133: select up to five addresses whose `City` starts with an +Example 134: select up to five addresses whose `City` starts with an `H`, sorted, and with the `Country` expanded ``` -http://host/service/Customers?$select=Addresses($filter=startswith(City,'H');$top=5;$orderby=Country/Name,City,Street)&$expand=Addresses/Country +http://host/service/Customers + ?$select=Addresses($filter=startswith(City,'H');$top=5; + $orderby=Country/Name,City,Street) + &$expand=Addresses/Country ``` ::: @@ -3761,7 +3799,7 @@ qualified name and that operation cannot be bound to the entities requested, the service MUST ignore the select item. ::: example -Example 134: the `ID` property, the `ActionName` action defined in +Example 135: the `ID` property, the `ActionName` action defined in `Model` and all actions and functions defined in the `Model2` for each product if those actions and functions can be bound to that product ``` @@ -3827,7 +3865,7 @@ The [OData-ABNF](#ODataABNF) `search` syntax rule defines the formal grammar of the `$search` query option. ::: example -Example 135: all products that are blue or green. It is up to the +Example 136: all products that are blue or green. It is up to the service to decide what makes a product blue or green. ``` http://host/service/Products?$search=blue OR green @@ -3922,7 +3960,7 @@ result and MUST be included if `$select` is specified with the computed property name, or star (`*`). ::: example -Example 136: compute total price for order items +Example 137: compute total price for order items ``` http://host/service/Orders(10)/Items ?$select=Product/Description,Total @@ -3966,7 +4004,7 @@ custom query option is any query option of the form shown by the rule Custom query options MUST NOT begin with a `$` or `@` character. ::: example -Example 137: service-specific custom query option `debug-mode` +Example 138: service-specific custom query option `debug-mode` ``` http://host/service/Products?debug-mode=true ``` @@ -3988,25 +4026,26 @@ The semantics of parameter aliases are covered in values as query options. ::: example -Example 138: +Example 139: ``` http://host/service/Movies?$filter=contains(@word,Title)&@word='Black' ``` ::: ::: example -Example 139: +Example 140: ``` http://host/service/Movies?$filter=Title eq @title&@title='Wizard of Oz' ``` ::: ::: example -Example 140: JSON array of strings as parameter alias value --- note that +Example 141: JSON array of strings as parameter alias value --- note that `[`, `]`, and `"` need to be percent-encoded in real URLs, the clear-text representation used here is just for readability ``` -http://host/service/Products/Model.WithIngredients(Ingredients=@i)?@i=["Carrots","Ginger","Oranges"] +http://host/service/Products/Model.WithIngredients(Ingredients=@i) + ?@i=["Carrots","Ginger","Oranges"] ``` ::: diff --git a/docs/odata-url-conventions/odata-url-conventions.pdf b/docs/odata-url-conventions/odata-url-conventions.pdf index 93d661144..cd024f6fc 100644 Binary files a/docs/odata-url-conventions/odata-url-conventions.pdf and b/docs/odata-url-conventions/odata-url-conventions.pdf differ diff --git a/docs/odata-vocabularies/odata-vocabularies.html b/docs/odata-vocabularies/odata-vocabularies.html index 94b369c95..62cba5ff8 100644 --- a/docs/odata-vocabularies/odata-vocabularies.html +++ b/docs/odata-vocabularies/odata-vocabularies.html @@ -33,7 +33,7 @@

    OData Vocabularies Version 4.0

    Committee Specification Draft 02

    -

    28 February 2024

    +

    19 June 2024

    \(\hbox{}\)

    This stage:

    @@ -51,12 +51,12 @@

    Latest stage:

    Technical Committee:

    OASIS Open Data Protocol (OData) TC

    Chairs:

    -

    Ralf Handl (ralf.handl@sap.com), SAP SE
    -Michael Pizzo (mikep@microsoft.com), Microsoft

    +

    Ralf Handl (ralf.handl@sap.com), SAP SE
    +Michael Pizzo (mikep@microsoft.com), Microsoft

    Editors:

    -

    Ralf Handl (ralf.handl@sap.com), SAP SE
    -Michael Pizzo (mikep@microsoft.com), Microsoft
    -Heiko Theißen (heiko.theissen@sap.com), SAP SE

    +

    Ralf Handl (ralf.handl@sap.com), SAP SE
    +Michael Pizzo (mikep@microsoft.com), Microsoft
    +Heiko Theißen (heiko.theissen@sap.com), SAP SE

    This specification is related to:

    +

    Table of Contents

    @@ -122,8 +122,8 @@

    Table of Contents

  • D Notices
  • -
    +

    1 Introduction

    @@ -139,8 +139,8 @@

    1 Introducti --> -

    +

    2 Core Vocabulary

    @@ -157,224 +157,224 @@

    Terms

    -ODataVersions +ODataVersions String A space-separated list of supported versions of the OData Protocol. Note that 4.0 is implied by 4.01 and does not need to be separately listed. -SchemaVersion +SchemaVersion String Service-defined value representing the version of the schema. Services MAY use semantic versioning, but clients MUST NOT assume this is the case. -Revisions +Revisions [RevisionType] List of revisions of a model element -Description +Description String? A brief description of a model element -LongDescription +LongDescription String? A long description of a model element -Links +Links [Link] Link to related information -Example +Example ExampleValue -Example for an instance of the annotated model element (Example) +Example for an instance of the annotated model element (Example) -Messages +Messages [MessageType] Instance annotation for warning and info messages -ValueException +ValueException ValueExceptionType The annotated value is problematic -ResourceException +ResourceException ResourceExceptionType The annotated instance within a success payload is problematic -DataModificationException +DataModificationException DataModificationExceptionType A modification operation failed on the annotated instance or collection within a success payload -IsLanguageDependent +IsLanguageDependent Tag Properties and terms annotated with this term are language-dependent -RequiresType +RequiresType String Terms annotated with this term can only be applied to elements that have a type that is identical to or derived from the given type name -AppliesViaContainer +AppliesViaContainer Tag The target path of an annotation with the tagged term MUST start with an entity container or the annotation MUST be embedded within an entity container, entity set or singleton
    Services MAY additionally annotate a container-independent model element (entity type, property, navigation property) if allowed by the AppliesTo property of the term and the annotation applies to all uses of that model element. -ResourcePath +ResourcePath URL Resource path for entity container child, can be relative to xml:base and the request URL -DereferenceableIDs +DereferenceableIDs Tag Entity-ids are URLs that locate the identified entity -ConventionalIDs +ConventionalIDs Tag Entity-ids follow OData URL conventions -Permissions +Permissions Permission Permissions for accessing a resource -ContentID +ContentID String A unique identifier for nested entities within a request. -DefaultNamespace +DefaultNamespace Tag Functions, actions and types in this namespace can be referenced in URLs with or without namespace- or alias- qualification.
    Data Modelers should ensure uniqueness of schema children across all default namespaces, and should avoid naming bound functions, actions, or derived types with the same name as a structural or navigational property of the type. -Immutable +Immutable Tag A value for this non-key property can be provided by the client on insert and remains unchanged on update -Computed +Computed Tag A value for this property is generated on both insert and update -ComputedDefaultValue +ComputedDefaultValue Tag A value for this property can be provided by the client on insert and update. If no value is provided on insert, a non-static default value is generated -IsURL +IsURL Tag Properties and terms annotated with this term MUST contain a valid URL -AcceptableMediaTypes +AcceptableMediaTypes [MediaType] Lists the MIME types acceptable for the annotated entity type marked with HasStream=“true” or the annotated binary, stream, or string property or term
    The annotation of a TypeDefinition propagates to the model elements having this type -MediaType +MediaType MediaType? The media type of the media stream of the annotated entity type marked with HasStream=“true” or the annotated binary, stream, or string property or term
    The annotation of a TypeDefinition propagates to the model elements having this type -IsMediaType +IsMediaType Tag Properties and terms annotated with this term MUST contain a valid MIME type -ContentDisposition +ContentDisposition ContentDispositionType The content disposition of the media stream of the annotated entity type marked with HasStream=“true” or the annotated binary, stream, or string property or term -OptimisticConcurrency +OptimisticConcurrency [PropertyPath] Data modification requires the use of ETags. A non-empty collection contains the set of properties that are used to compute the ETag. An empty collection means that the service won’t tell how it computes the ETag -AdditionalProperties +AdditionalProperties Tag Instances of this type may contain properties in addition to those declared in $metadata
    If specified as false clients can assume that instances will not contain dynamic properties, irrespective of the value of the OpenType attribute. -AutoExpand +AutoExpand Tag The service will automatically expand this stream property, navigation property, or the media stream of this media entity type even if not requested with $expand -AutoExpandReferences +AutoExpandReferences Tag The service will automatically expand this navigation property as entity references even if not requested with \(expand=.../\)ref -MayImplement +MayImplement [QualifiedTypeName] A collection of qualified type names outside of the type hierarchy that instances of this type might be addressable as by using a type-cast segment. -Ordered +Ordered Tag Collection has a stable order. Ordered collections of primitive or complex types can be indexed by ordinal. -PositionalInsert +PositionalInsert Tag Items can be inserted at a given ordinal index. -AlternateKeys +AlternateKeys [AlternateKey] Communicates available alternate keys -OptionalParameter +OptionalParameter OptionalParameterType Supplying a value for the action or function parameter is optional.
    All parameters marked as optional must come after any parameters not marked as optional. The binding parameter must not be marked as optional. -OperationAvailable +OperationAvailable Boolean? Action or function is available
    The annotation value will usually be an expression, e.g. using properties of the binding parameter type for instance-dependent availability, or using properties of a singleton for global availability. The static value null means that availability cannot be determined upfront and is instead expressed as an operation advertisement. -RequiresExplicitBinding +RequiresExplicitBinding Tag? This bound action or function is only available on model elements annotated with the ExplicitOperationBindings term. -ExplicitOperationBindings +ExplicitOperationBindings [QualifiedBoundOperationName] The qualified names of explicitly bound operations that are supported on the target model element. These operations are in addition to any operations not annotated with RequiresExplicitBinding that are bound to the type of the target model element. -SymbolicName +SymbolicName SimpleIdentifier A symbolic name for a model element -GeometryFeature +GeometryFeature GeometryFeatureType? A Feature Object represents a spatially bounded thing -AnyStructure +AnyStructure Tag Instances of a type are annotated with this tag if they have no common structure in a given response payload
    The select-list of a context URL MUST be (@Core.AnyStructure) if it would otherwise be empty, but this instance annotation SHOULD be omitted from the response value.

    -

    RevisionType

    +

    RevisionType

    @@ -385,24 +385,24 @@

    -

    + - + - +
    VersionVersion String? The schema version with which this revision was first published
    KindKind RevisionKind The kind of revision
    DescriptionDescription String Text describing the reason for the revision

    -

    RevisionKind

    +

    RevisionKind

    @@ -413,24 +413,24 @@

    -

    + - + - +
    AddedAdded 0 Model element was added
    ModifiedModified 1 Model element was modified
    DeprecatedDeprecated 2 Model element was deprecated

    - +

    The Link term is inspired by the atom:link element, see RFC4287, and the Link HTTP header, see RFC5988

    @@ -442,19 +442,19 @@ + - +
    relrel String Link relation type, see IANA Link Relations
    hrefhref URL URL of related information

    -

    ExampleValue

    +

    ExampleValue

    Derived Types:

    +

    3 Capabilities Vocabulary

    @@ -1025,209 +1025,209 @@

    Terms

    -ConformanceLevel +ConformanceLevel ConformanceLevelType The conformance level achieved by this service -SupportedFormats +SupportedFormats [MediaType] Media types of supported formats, including format parameters -SupportedMetadataFormats +SupportedMetadataFormats [MediaType] Media types of supported formats for $metadata, including format parameters -AcceptableEncodings +AcceptableEncodings [String] List of acceptable compression methods for ($batch) requests, e.g. gzip -AsynchronousRequestsSupported +AsynchronousRequestsSupported Tag Service supports the asynchronous request preference -BatchContinueOnErrorSupported +BatchContinueOnErrorSupported Tag Service supports the continue on error preference. Supports $batch requests. Services that apply the BatchContinueOnErrorSupported term should also specify the ContinueOnErrorSupported property from the BatchSupport term. -IsolationSupported +IsolationSupported IsolationLevel Supported odata.isolation levels -CrossJoinSupported +CrossJoinSupported Tag Supports cross joins for the entity sets in this container -CallbackSupported +CallbackSupported CallbackType Supports callbacks for the specified protocols -ChangeTracking +ChangeTracking ChangeTrackingType Change tracking capabilities of this service or entity set -CountRestrictions +CountRestrictions CountRestrictionsType Restrictions on /$count path suffix and $count=true system query option -NavigationRestrictions +NavigationRestrictions NavigationRestrictionsType Restrictions on navigating properties according to OData URL conventions
    Restrictions specified on an entity set are valid whether the request is directly to the entity set or through a navigation property bound to that entity set. Services can specify a different set of restrictions specific to a path, in which case the more specific restrictions take precedence. -IndexableByKey +IndexableByKey Tag Supports key values according to OData URL conventions -TopSupported +TopSupported Tag Supports $top -SkipSupported +SkipSupported Tag Supports $skip -ComputeSupported +ComputeSupported Tag Supports $compute -SelectSupport +SelectSupport SelectSupportType Support for $select and nested query options within $select -BatchSupported +BatchSupported Tag Supports $batch requests. Services that apply the BatchSupported term should also apply the more comprehensive BatchSupport term. -BatchSupport +BatchSupport BatchSupportType Batch Support for the service -FilterFunctions +FilterFunctions [String] List of functions and operators supported in filter expressions
    If not specified, null, or empty, all functions and operators may be attempted. -FilterRestrictions +FilterRestrictions FilterRestrictionsType Restrictions on filter expressions -SortRestrictions +SortRestrictions SortRestrictionsType Restrictions on orderby expressions -ExpandRestrictions +ExpandRestrictions ExpandRestrictionsType Restrictions on expand expressions -SearchRestrictions +SearchRestrictions SearchRestrictionsType Restrictions on search expressions -KeyAsSegmentSupported +KeyAsSegmentSupported Tag Supports key-as-segment convention for addressing entities within a collection -QuerySegmentSupported +QuerySegmentSupported Tag Supports passing query options in the request body -InsertRestrictions +InsertRestrictions InsertRestrictionsType Restrictions on insert operations -DeepInsertSupport +DeepInsertSupport DeepInsertSupportType? Deep Insert Support of the annotated resource (the whole service, an entity set, or a collection-valued resource) -UpdateRestrictions +UpdateRestrictions UpdateRestrictionsType Restrictions on update operations -DeepUpdateSupport +DeepUpdateSupport DeepUpdateSupportType Deep Update Support of the annotated resource (the whole service, an entity set, or a collection-valued resource) -DeleteRestrictions +DeleteRestrictions DeleteRestrictionsType Restrictions on delete operations -CollectionPropertyRestrictions +CollectionPropertyRestrictions [CollectionPropertyRestrictionsType] Describes restrictions on operations applied to collection-valued structural properties -OperationRestrictions +OperationRestrictions OperationRestrictionsType Restrictions for function or action operation -AnnotationValuesInQuerySupported +AnnotationValuesInQuerySupported Tag Supports annotation values within system query options -ModificationQueryOptions +ModificationQueryOptions ModificationQueryOptionsType Support for query options with modification requests (insert, update, action invocation) -ReadRestrictions +ReadRestrictions ReadRestrictionsType Restrictions for retrieving a collection of entities, retrieving a singleton instance. -CustomHeaders +CustomHeaders [CustomParameter] -Custom headers that are supported/required for the annotated resource (Example) +Custom headers that are supported/required for the annotated resource (Example) -CustomQueryOptions +CustomQueryOptions [CustomParameter] -Custom query options that are supported/required for the annotated resource (Example)
    If the entity container is annotated, the query option is supported/required by all resources in that container. +Custom query options that are supported/required for the annotated resource (Example)
    If the entity container is annotated, the query option is supported/required by all resources in that container. -MediaLocationUpdateSupported +MediaLocationUpdateSupported Tag Stream property or media stream supports update of its media edit URL and/or media read URL -DefaultCapabilities +DefaultCapabilities DefaultCapabilitiesType Default capability settings for all collection-valued resources in the container

    Annotating a specific capability term, which is included as property in DefaultCapabilitiesType, for a specific collection-valued resource overrides the default capability with the specified properties using PATCH semantics:

    • Primitive or collection-valued properties specified in the specific capability term replace the corresponding properties specified in DefaultCapabilities
    • Complex-valued properties specified in the specific capability term override the corresponding properties specified in DefaultCapabilities using PATCH semantics recursively
    • Properties specified neither in the specific term nor in DefaultCapabilities have their default value

    -

    ConformanceLevelType

    +

    ConformanceLevelType

    @@ -1238,24 +1238,24 @@

    -

    + - + - +
    MinimalMinimal 0 Minimal conformance level
    IntermediateIntermediate 1 Intermediate conformance level
    AdvancedAdvanced 2 Advanced conformance level

    -

    IsolationLevel

    +

    IsolationLevel

    @@ -1266,14 +1266,14 @@

    -

    +
    SnapshotSnapshot 1 All data returned for a request, including multiple requests within a batch or results retrieved across multiple pages, will be consistent as of a single point in time

    -

    CallbackType

    +

    CallbackType

    A non-empty collection lists the full set of supported protocols. A empty collection means ‘only HTTP is supported’

    @@ -1285,14 +1285,14 @@

    -

    +
    CallbackProtocolsCallbackProtocols [CallbackProtocol] List of supported callback protocols, e.g. http or wss

    -

    CallbackProtocol

    +

    CallbackProtocol

    @@ -1303,24 +1303,24 @@

    -

    + - + - +
    IdId String? Protocol Identifier
    UrlTemplateUrlTemplate String? URL Template including parameters. Parameters are enclosed in curly braces {} as defined in RFC6570
    DocumentationUrlDocumentationUrl URL? Human readable description of the meaning of the URL Template parameters

    -

    ChangeTrackingBase

    +

    ChangeTrackingBase

    Derived Types:

    +

    4 Measures Vocabulary

    @@ -3122,34 +3122,34 @@

    Terms

    -ISOCurrency +ISOCurrency String The currency for this monetary amount as an ISO 4217 currency code -Scale +Scale Byte The number of significant decimal places in the scale part (less than or equal to the number declared in the Scale facet) -Unit +Unit String The unit of measure for this measured quantity, e.g. cm for centimeters or % for percentages -UNECEUnit +UNECEUnit String The unit of measure for this measured quantity, according to the UN/CEFACT Recommendation 20 -DurationGranularity +DurationGranularity DurationGranularityType The minimum granularity of duration values.
    Absence of this annotation means a granularity of seconds with sub-seconds according to the Precision facet.

    -

    DurationGranularityType

    +

    DurationGranularityType

    Type: String

    @@ -3160,21 +3160,21 @@

    -

    + - + - +
    daysdays Duration in days, e.g. P1D
    hourshours Duration in days and hours, e.g. P1DT23H
    minutesminutes Duration in days, hours, and minutes, e.g. P1DT23H59M
    -
    +

    5 Validation Vocabulary

    @@ -3191,79 +3191,79 @@

    Terms

    -Pattern +Pattern String The pattern that a string property, parameter, or term must match. This SHOULD be a valid regular expression, according to the ECMA 262 regular expression dialect. -Minimum +Minimum PrimitiveType Minimum value that a property, parameter, or term can have.
    Can be annotated with: -Maximum +Maximum PrimitiveType Maximum value that a property, parameter, or term can have.
    Can be annotated with: -Exclusive +Exclusive Tag Tags a Minimum or Maximum as exclusive, i.e. an open interval boundary. -AllowedValues +AllowedValues [AllowedValue] A collection of valid values for the annotated property, parameter, or type definition -MultipleOf +MultipleOf Decimal The value of the annotated property, parameter, or term must be an integer multiple of this positive value. For temporal types, the value is measured in seconds. -Constraint +Constraint ConstraintType Condition that the annotation target has to fulfill -ItemsOf +ItemsOf [ItemsOfType] A list of constraints describing that entities related via one navigation property MUST also be related via another, collection-valued navigation property. The same path value MUST NOT occur more than once.
    Example: entity type Customer has navigation properties AllOrders, OpenOrders, and ClosedOrders. The term allows to express that items of OpenOrders and ClosedOrders are also items of the AllOrders navigation property, even though they are defined in an Orders entity set. -OpenPropertyTypeConstraint +OpenPropertyTypeConstraint [SingleOrCollectionType] Dynamic properties added to the annotated open structured type are restricted to the listed types. -DerivedTypeConstraint +DerivedTypeConstraint [SingleOrCollectionType] Values are restricted to types that are both identical to or derived from the declared type and a type listed in this collection.
    This allows restricting values to certain sub-trees of an inheritance hierarchy, including hierarchies starting at the Built-In Abstract Types. Types listed in this collection are ignored if they are not derived from the declared type of the annotated model element or would not be allowed as declared type of the annotated model element.
    When applied to a collection-valued element, this annotation specifies the types allowed for members of the collection without mentioning the Collection() wrapper. The SingleOrCollectionType may only include the Collection() wrapper if the annotation is applied to an element with declared type Edm.Untyped. -AllowedTerms +AllowedTerms [QualifiedTermName] Annotate a term of type Edm.AnnotationPath, or a property of type Edm.AnnotationPath that is used within a structured term, to restrict the terms that can be targeted by the path.
    The annotation path expression is intended to end in a path segment with one of the listed terms. For forward compatibility, clients should be prepared for the annotation to reference terms besides those listed. -ApplicableTerms +ApplicableTerms [QualifiedTermName] Names of specific terms that are applicable and may be applied in the current context. This annotation does not restrict the use of other terms. -MaxItems +MaxItems Int64 The annotated collection must have at most the specified number of items. -MinItems +MinItems Int64 The annotated collection must have at least the specified number of items.

    -

    AllowedValue

    +

    AllowedValue

    @@ -3274,7 +3274,7 @@

    -

    + @@ -3285,7 +3285,7 @@

    SymbolicName

    -

    ConstraintType

    +

    ConstraintType

    ValueValue PrimitiveType? An allowed value for the property, parameter, or type definition
    @@ -3296,19 +3296,19 @@

    -

    + - +
    FailureMessageFailureMessage String? Human-readable message that can be shown to end users if the constraint is not fulfilled
    ConditionCondition Boolean Value MUST be a dynamic expression that evaluates to true if and only if the constraint is fulfilled

    -

    ItemsOfType

    +

    ItemsOfType

    Entities related via the single- or collection-valued navigation property identified by path are also related via the collection-valued navigation property identified by target.

    @@ -3320,23 +3320,23 @@

    -

    + - +
    pathpath NavigationPropertyPath A path to a single- or collection-valued navigation property
    targettarget NavigationPropertyPath A path to a collection-valued navigation property

    -

    SingleOrCollectionType

    +

    SingleOrCollectionType

    Type: String

    The qualified name of a type in scope, optionally wrapped in Collection() to denote a collection of instances of the type

    -
    +

    6 Aggregation Vocabulary

    @@ -3354,52 +3354,52 @@

    Terms

    -ApplySupported +ApplySupported ApplySupportedType This entity set or collection supports the $apply system query option -ApplySupportedDefaults +ApplySupportedDefaults ApplySupportedBase Default support of the $apply system query option for all collection-valued resources in the container

    Annotating term ApplySupported for a specific collection-valued resource overrides the default support with the specified properties using PATCH semantics:

    • Primitive or collection-valued properties specified in ApplySupported replace the corresponding properties specified in ApplySupportedDefaults
    • Complex-valued properties specified in ApplySupported override the corresponding properties specified in ApplySupportedDefaults using PATCH semantics recursively
    • Properties specified neither in ApplySupported nor in ApplySupportedDefaults have their default value
    -Groupable (Deprecated) +Groupable (Deprecated) Tag Deprecated in favor of ApplySupported/GroupableProperties -Aggregatable (Deprecated) +Aggregatable (Deprecated) Tag Deprecated in favor of ApplySupported/AggregatableProperties -CustomAggregate +CustomAggregate String Dynamic property that can be used in the aggregate transformation
    This term MUST be applied with a Qualifier, the Qualifier value is the name of the dynamic property. The value of the annotation MUST be the qualified name of a primitive type. The aggregated value will be of that type. -ContextDefiningProperties +ContextDefiningProperties [PropertyPath] The annotated property or custom aggregate is only well-defined in the context of these properties
    The context-defining properties need either be part of the result entities, or be restricted to a single value by a pre-filter operation. Examples are postal codes within a country, or monetary amounts whose context is the unit of currency. -LeveledHierarchy +LeveledHierarchy [PropertyPath] Defines a leveled hierarchy (OData-Data-Agg-v4.0, section 5.5.1) -RecursiveHierarchy +RecursiveHierarchy RecursiveHierarchyType Defines a recursive hierarchy (OData-Data-Agg-v4.0, section 5.5.2) -UpPath +UpPath [String] The string values of the node identifiers in a path from the annotated node to a start node in a traversal of a recursive hierarchy
    This instance annotation occurs in the result set after a traverse transformation (OData-Data-Agg-v4.0, section 6.2.2.2). A use case for this is traversal with multiple parents, when this annotation takes as value one parent node identifier followed by one grandparent node identifier and so on. -AvailableOnAggregates +AvailableOnAggregates AvailableOnAggregatesType This function is available on aggregated entities if the RequiredProperties are still defined @@ -3407,7 +3407,7 @@

    Terms

    Functions

    -

    isnode

    +

    isnode

    Is the entity a node of the hierarchy specified by the parameter pair (HierarchyNodes, HierarchyQualifier)? (See OData-Data-Agg-v4.0, section 5.5.2.1)

    If a node identifier passed to the function is null, the function returns null.

    @@ -3420,29 +3420,29 @@

    -

    + - + - + - +
    HierarchyNodesHierarchyNodes [EntityType] A collection, given through a $root expression
    HierarchyQualifierHierarchyQualifier HierarchyQualifier
    NodeNode PrimitiveType? Node identifier of the putative node
    Boolean?

    -

    isroot

    +

    isroot

    Is the entity a root node of the hierarchy specified by the parameter pair (HierarchyNodes, HierarchyQualifier)?

    If a node identifier passed to the function is null, the function returns null.

    @@ -3455,29 +3455,29 @@

    -

    + - + - + - +
    HierarchyNodesHierarchyNodes [EntityType] A collection, given through a $root expression
    HierarchyQualifierHierarchyQualifier HierarchyQualifier
    NodeNode PrimitiveType? Node identifier of the putative root
    Boolean?

    -

    isdescendant

    +

    isdescendant

    Is the entity a descendant node of the ancestor node in the hierarchy specified by the parameter pair (HierarchyNodes, HierarchyQualifier) with at most the specified distance? (See OData-Data-Agg-v4.0, section 5.5.2.1)

    If a node identifier passed to the function is null, the function returns null.

    @@ -3490,44 +3490,44 @@

    -

    + - + - + - + - + - + - +
    HierarchyNodesHierarchyNodes [EntityType] A collection, given through a $root expression
    HierarchyQualifierHierarchyQualifier HierarchyQualifier
    NodeNode PrimitiveType? Node identifier of the putative descendant
    AncestorAncestor PrimitiveType? Node identifier of the ancestor node
    MaxDistanceMaxDistance Int16 Optional parameter
    IncludeSelfIncludeSelf Boolean Optional parameter: Whether to include the node itself in the result
    Boolean?

    -

    isancestor

    +

    isancestor

    Is the entity an ancestor node of the descendant node in the hierarchy specified by the parameter pair (HierarchyNodes, HierarchyQualifier) with at most the specified distance? (See OData-Data-Agg-v4.0, section 5.5.2.1)

    If a node identifier passed to the function is null, the function returns null.

    @@ -3540,44 +3540,44 @@

    -

    + - + - + - + - + - + - +
    HierarchyNodesHierarchyNodes [EntityType] A collection, given through a $root expression
    HierarchyQualifierHierarchyQualifier HierarchyQualifier
    NodeNode PrimitiveType? Node identifier of the putative ancestor
    DescendantDescendant PrimitiveType? Node identifier of the descendant node
    MaxDistanceMaxDistance Int16 Optional parameter
    IncludeSelfIncludeSelf Boolean Optional parameter: Whether to include the node itself in the result
    Boolean?

    -

    issibling

    +

    issibling

    Is the entity a sibling node of the other node in the hierarchy specified by the parameter pair (HierarchyNodes, HierarchyQualifier)? (See OData-Data-Agg-v4.0, section 5.5.2.1)

    A node is not a sibling of itself. If a node identifier passed to the function is null, the function returns null.

    @@ -3590,34 +3590,34 @@

    -

    + - + - + - + - +
    HierarchyNodesHierarchyNodes [EntityType] A collection, given through a $root expression
    HierarchyQualifierHierarchyQualifier HierarchyQualifier
    NodeNode PrimitiveType? Node identifier of the putative sibling
    OtherOther PrimitiveType? Node identifier of the other node
    Boolean?

    -

    isleaf

    +

    isleaf

    Is the entity a leaf node in the hierarchy specified by the parameter pair (HierarchyNodes, HierarchyQualifier)? (See OData-Data-Agg-v4.0, section 5.5.2.1)

    If a node identifier passed to the function is null, the function returns null.

    @@ -3630,29 +3630,29 @@

    -

    + - + - + - +
    HierarchyNodesHierarchyNodes [EntityType] A collection, given through a $root expression
    HierarchyQualifierHierarchyQualifier HierarchyQualifier
    NodeNode PrimitiveType? Node identifier of the putative leaf
    Boolean?

    -

    rollupnode

    +

    rollupnode

    During rolluprecursive for a hierarchy node, this function returns the node

    This function may only occur in the second parameter of a groupby transformation whose first parameter contains rolluprecursive(...). It is evaluated as part of the transformation R(x) in the “rolluprecursive algorithm” (OData-Data-Agg-v4.0, section 6.3). Its behavior is undefined outside of this algorithm.

    Sales?$apply=groupby((rolluprecursive(...)), filter(SalesOrganization eq Aggregation.rollupnode())/aggregate(...))
    @@ -3667,19 +3667,19 @@

    -Position +Position Int16 Optional parameter: Position N among the rolluprecursive operators in the first argument of groupby
    Every instance in the output set of a groupby transformation with M rolluprecursive operators has M relationships to M nodes in M recursive hierarchies. This function returns the node x with path r to the root in relationship number N. If several such groupby transformations are nested, this function refers to the innermost one. - + EntityType

    -

    ApplySupportedBase

    +

    ApplySupportedBase

    Services that do not fully implement a certain aggregation-related functionality may document this by annotating the ApplySupported or ApplySupportedDefaults annotation with a description.

    Derived Types:

    +

    7 Authorization Vocabulary

    @@ -4037,19 +4037,19 @@

    Terms

    -SecuritySchemes +SecuritySchemes [SecurityScheme] At least one of the specified security schemes are required to make a request against the service -Authorizations +Authorizations [Authorization] Lists the methods supported by the service to authorize access

    -

    SecurityScheme

    +

    SecurityScheme

    @@ -4060,19 +4060,19 @@

    -

    + - +
    AuthorizationAuthorization SchemeName The name of a required authorization scheme
    RequiredScopesRequiredScopes [String] The names of scopes required from this authorization scheme

    -

    Authorization

    +

    Authorization

    Base type for all Authorization types

    Derived Types:

    +

    8 JSON Vocabulary

    @@ -4478,18 +4478,18 @@

    Terms

    -Schema +Schema JSON The JSON Schema for JSON values of the annotated media entity type, property, parameter, return type, term, or type definition
    The schema can be a schema reference, i.e. {"$ref":"url/of/schemafile#/path/to/schema/within/schemafile"}

    -

    JSON

    +

    JSON

    Type: Stream

    Textual data of media type application/json

    -
    +

    9 Repeatability Vocabulary

    @@ -4506,24 +4506,24 @@

    Terms

    -Supported +Supported Tag Repeatable requests are supported for the annotated service, entity set, or action
    Annotations on entity set or action import level override an annotation on entity container level, and an annotation on action level override an annotation on action import level. -DeleteWithClientIDSupported +DeleteWithClientIDSupported Tag Deletion of remembered requests by client ID is supported
    Clients that specify a RepeatabilityClientID header can delete all remembered requests for that client ID by sending a
    DELETE $RepeatableRequestsWithClientID/{Repeatability-Client-ID}
    request to the service root. -DeleteWithRequestIDSupported +DeleteWithRequestIDSupported Tag Deletion of remembered requests by request ID is supported
    Clients can delete a single remembered request by sending a
    DELETE $RepeatableRequestWithRequestID/{Repeatability-Request-ID}
    request to the service root. -
    +

    10 Temporal Vocabulary

    @@ -4540,7 +4540,7 @@

    Terms

    -ApplicationTimeSupport +ApplicationTimeSupport ApplicationTimeSupportType This collection supports temporal requests @@ -4548,7 +4548,7 @@

    Terms

    Actions

    -

    Update

    +

    Update

    Updates existing time slices with values from delta time slices whose object keys match and whose periods overlap

    The update behavior for a given object key is known from the SQL statement UPDATE ... FOR PORTION OF BUSINESS_TIME ... WHERE ....

    deltaTimeslices with non-matching object keys and non-overlapping sub-periods of deltaTimeslices are disregarded.

    @@ -4562,24 +4562,24 @@

    -timeslices +timeslices [EntityType] Binding parameter: Time slices to modify -deltaTimeslices +deltaTimeslices [TimesliceWithPeriod] New time slices whose property values are used to update the timeslices collection
    The delta time slices need not contain all properties, but at least the boundary values of the period to change. An absent object key property matches any key property value. New time slices are processed in the order of the collection, which especially matters if some of the specified change periods overlap. - + [TimesliceWithPeriod] Modified time slices

    -

    Upsert

    +

    Upsert

    Like Update, but additionally inserts those (sub-periods of) deltaTimeslices that Update disregards

    @@ -4591,24 +4591,24 @@

    -

    + - + - +
    timeslicestimeslices [EntityType] Binding parameter: Time slices to modify
    deltaTimeslicesdeltaTimeslices [TimesliceWithPeriod] New time slices to be merged into the timeslices collection
    The delta time slices must contain all properties that are needed for insertion. New time slices are processed in the order of the collection, which especially matters if some of the specified change periods overlap.
    [TimesliceWithPeriod] Modified time slices

    -

    Delete

    +

    Delete

    Deletes (sub-periods of) existing time slices whose object keys match and whose periods overlap deltaTimeslices

    The deletion behavior for a given object key is known from the SQL statement DELETE ... FOR PORTION OF BUSINESS_TIME ... WHERE .... The sub-period of an existing time slice that lies outside a given instance of deltaTimeslices is kept, effectively shortening the time slice.

    @@ -4621,24 +4621,24 @@

    -

    + - + - +
    timeslicestimeslices [EntityType] Binding parameter: Time slices to modify
    deltaTimeslicesdeltaTimeslices [TimesliceWithPeriod] Time slices to be deleted from the timeslices collection
    The delta time slices contain only the boundary values of the period to delete and (parts of) the object key. An absent object key property matches any key property value.
    [TimesliceWithPeriod] Deleted (sub-periods of) time slices

    -

    ApplicationTimeSupportType

    +

    ApplicationTimeSupportType

    @@ -4649,24 +4649,24 @@

    -

    + - + - +
    UnitOfTimeUnitOfTime UnitOfTime Unit of time and other properties of a time period
    TimelineTimeline Timeline Describes how the history and future of the data are represented
    SupportedActionsSupportedActions [QualifiedActionName] List of supported temporal actions

    -

    UnitOfTime

    +

    UnitOfTime

    Unit of time and other properties of a time period

    Derived Types:

    -

    UnitOfTimeDateTimeOffset: UnitOfTime

    +

    UnitOfTimeDateTimeOffset: UnitOfTime

    Period start and end are of type Edm.DateTimeOffset

    @@ -4686,14 +4686,14 @@

    -

    +
    PrecisionPrecision Byte Precision of Edm.DateTimeOffset values for period start and end

    -

    UnitOfTimeDate: UnitOfTime

    +

    UnitOfTimeDate: UnitOfTime

    Period start and end are of type Edm.Date

    The period is a contiguous set of days and does not consider the time of the day.

    @@ -4706,14 +4706,14 @@

    -

    +
    ClosedClosedPeriodsClosedClosedPeriods Boolean If true, the period end is the last day in the period; if false, the period end is the first day after the period

    -

    Timeline

    +

    Timeline

    Describes how the history and future of the data are represented

    Derived Types:

    -

    TimelineSnapshot: Timeline

    +

    TimelineSnapshot: Timeline

    Each OData entity maps each point in application time to an instance of the entity type

    To address an entity in a resource path or path to related resources, a point in application time must be specified as described in [OData-Temporal, section 4.2.1]. The addressed entity is then a snapshot of the data at the given point in time. When an action defined in this vocabulary is applied to a collection of this entity type, the entity key plays the role of object key.

    -

    TimelineVisible: Timeline

    +

    TimelineVisible: Timeline

    Each OData entity represents data during a period of application time

    The temporal collection MUST NOT contain two entities with the same object key as defined by their ObjectKey properties and with overlapping application-time periods as defined by their PeriodStart and PeriodEnd properties. The temporal collection always contains all entities (with consecutive time periods) for a given object key.

    @@ -4738,24 +4738,24 @@

    -

    + - + - +
    PeriodStartPeriodStart PropertyPath Property containing lower boundary of a period
    PeriodEndPeriodEnd PropertyPath Property containing upper boundary of a period
    If an upper boundary property does not specify a default value, a default value of max is assumed.
    ObjectKeyObjectKey [PropertyPath] The set of primitive properties that identify a temporal object
    A temporal object is a set of facts whose changes over application time are tracked by the service. The entities in the annotated collection belong to potentially multiple temporal objects, and each temporal object is uniquely identified by the values of the specified object key properties. Object key properties follow the same rules as entity key properties. If no object key is specified, only a single temporal object belongs to the annotated collection.

    -

    TimesliceWithPeriod

    +

    TimesliceWithPeriod

    Delta time slices with validity period

    The properties PeriodStart and PeriodEnd MUST NOT be present if the entity type of the Timeslice already contains period start and end, that is, if the collection on which the action is invoked has visible timeline. If present, they MUST have the same type, either Edm.Date or Edm.DateTimeOffset, and they are interpreted according to the ApplicationTimeSupport/UnitOfTime of the collection. In particular, ApplicationTimeSupport/UnitOfTime/ClosedClosedPeriods governs whether a PeriodEnd of type Edm.Date is the last day in the period or the first day after the period. If PeriodStart is present and PeriodEnd is absent, a default value of max is assumed for PeriodEnd.

    @@ -4768,24 +4768,24 @@

    -

    + - + - +
    PeriodStartPeriodStart PrimitiveType? Lower boundary of the time slice
    PeriodEndPeriodEnd PrimitiveType? Upper boundary of the time slice
    TimesliceTimeslice EntityType A time slice with the same entity type as the binding parameter of the action
    When it appears in the return type of an action in this vocabulary, the time slice has the same entity set as the binding parameter value.
    -
    +

    Appendix A. References

    @@ -4821,9 +4821,9 @@
    [OData-Vocabs]
    do we have considerations specific to URLs, for example length, encoding, privacy (use $batch if in doubt), ...? --> -
    +

    Appendix B. Acknowledgments

    @@ -4897,9 +4897,9 @@

    B.2 Partici -

    +

    Appendix C. Revision History

    @@ -4919,10 +4919,16 @@

    Michael Pizzo
    Ralf Handl
    Ram Jeyaraman Documentation automatically extracted from XML source files + +Committee Specification Draft 02 +2024-06-19 +Michael Pizzo
    Ralf Handl
    Heiko Theißen +Documentation automatically extracted from XML source files + -

    +

    Appendix D. Notices

    diff --git a/docs/odata-vocabularies/odata-vocabularies.md b/docs/odata-vocabularies/odata-vocabularies.md index 390d412d7..8547708a7 100644 --- a/docs/odata-vocabularies/odata-vocabularies.md +++ b/docs/odata-vocabularies/odata-vocabularies.md @@ -7,7 +7,7 @@ ## Committee Specification Draft 02 -## 28 February 2024 +## 19 June 2024 $\hbox{}$ @@ -45,7 +45,7 @@ This specification is related to: * _OData Version 4.02_. Edited by Michael Pizzo, Ralf Handl, and Heiko Theißen. A multi-part Work Product that includes: * _OData Version 4.02 Part 1: Protocol_. Latest stage. https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html * _OData Version 4.02 Part 2: URL Conventions_. Latest stage. https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html - * _ABNF components: OData ABNF Construction Rules Version 4.02 and OData ABNF Test Cases_. https://docs.oasis-open.org/odata/odata/v4.02/csd02/abnf/ + * _ABNF components: OData ABNF Construction Rules Version 4.02 and OData ABNF Test Cases_. https://docs.oasis-open.org/odata/odata/v4.02/csd01/abnf/ * _OData Common Schema Definition Language (CSDL) JSON Representation Version 4.02_. Edited by Michael Pizzo, Ralf Handl, and Heiko Theißen. Latest stage: https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html * _OData Common Schema Definition Language (CSDL) XML Representation Version 4.02_. Edited by Michael Pizzo, Ralf Handl, and Heiko Theißen. Latest stage: https://docs.oasis-open.org/odata/odata-csdl-xml/v4.02/odata-csdl-xml-v4.02.html * _OData JSON Format Version 4.02_. Edited by Michael Pizzo, Ralf Handl, and Heiko Theißen. Latest stage: https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html @@ -56,9 +56,9 @@ This specification is related to: This prose specification describes a set of OData vocabularies maintained by the OASIS OData Technical Committee. These vocabulary components are continuously evolved. The latest work-in-progress revisions are available at the odata-vocabularies OASIS TC GitHub repository: https://github.com/oasis-tcs/odata-vocabularies. #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData Vocabularies". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). @@ -73,7 +73,7 @@ When referencing this specification the following citation format should be used **[OData-Vocabularies-v4.0]** _OData Vocabularies Version 4.0_. -Edited by Ralf Handl, Michael Pizzo, and Heiko Theißen. 28 February 2024. OASIS Committee Specification Draft 02. +Edited by Ralf Handl, Michael Pizzo, and Heiko Theißen. 19 June 2024. OASIS Committee Specification Draft 02. https://docs.oasis-open.org/odata/odata-vocabularies/v4.0/csd02/odata-vocabularies-v4.0-csd02.html. Latest stage: https://docs.oasis-open.org/odata/odata-vocabularies/v4.0/odata-vocabularies-v4.0.html. @@ -145,81 +145,81 @@ Core terms needed to write vocabularies Term|Type|Description :---|:---|:---------- -[ODataVersions](./Org.OData.Core.V1.xml#L69:~:text=A space-separated list of supported versions of the OData Protocol. Note that 4.0 is implied by 4.01 and does not need to be separately listed. -[SchemaVersion](./Org.OData.Core.V1.xml#L73:~:text=Service-defined value representing the version of the schema. Services MAY use semantic versioning, but clients MUST NOT assume this is the case. -[Revisions](./Org.OData.Core.V1.xml#L77:~:text=List of revisions of a model element -[Description](./Org.OData.Core.V1.xml#L105:~:text=A brief description of a model element -[LongDescription](./Org.OData.Core.V1.xml#L110:~:text=A long description of a model element -[Links](./Org.OData.Core.V1.xml#L115:~:text=Link to related information -[Example](./Org.OData.Core.V1.xml#L129:~:text=Example for an instance of the annotated model element ([Example](./Org.OData.Core.V1.xml#L131)) -[Messages](./Org.OData.Core.V1.xml#L198:~:text=Instance annotation for warning and info messages -[ValueException](./Org.OData.Core.V1.xml#L242:~:text=The annotated value is problematic -[ResourceException](./Org.OData.Core.V1.xml#L256:~:text=The annotated instance within a success payload is problematic -[DataModificationException](./Org.OData.Core.V1.xml#L266:~:text=A modification operation failed on the annotated instance or collection within a success payload -[IsLanguageDependent](./Org.OData.Core.V1.xml#L306:~:text=Properties and terms annotated with this term are language-dependent -[RequiresType](./Org.OData.Core.V1.xml#L317:~:text=Terms annotated with this term can only be applied to elements that have a type that is identical to or derived from the given type name -[AppliesViaContainer](./Org.OData.Core.V1.xml#L321:~:text=The target path of an annotation with the tagged term MUST start with an entity container or the annotation MUST be embedded within an entity container, entity set or singleton
    Services MAY additionally annotate a container-independent model element (entity type, property, navigation property) if allowed by the `AppliesTo` property of the term and the annotation applies to all uses of that model element. -[ResourcePath](./Org.OData.Core.V1.xml#L331:~:text=Resource path for entity container child, can be relative to xml:base and the request URL -[DereferenceableIDs](./Org.OData.Core.V1.xml#L336:~:text=Entity-ids are URLs that locate the identified entity -[ConventionalIDs](./Org.OData.Core.V1.xml#L340:~:text=Entity-ids follow OData URL conventions -[Permissions](./Org.OData.Core.V1.xml#L346:~:text=Permissions for accessing a resource -[ContentID](./Org.OData.Core.V1.xml#L369:~:text=A unique identifier for nested entities within a request. -[DefaultNamespace](./Org.OData.Core.V1.xml#L375:~:text=Functions, actions and types in this namespace can be referenced in URLs with or without namespace- or alias- qualification.
    Data Modelers should ensure uniqueness of schema children across all default namespaces, and should avoid naming bound functions, actions, or derived types with the same name as a structural or navigational property of the type. -[Immutable](./Org.OData.Core.V1.xml#L380:~:text=A value for this non-key property can be provided by the client on insert and remains unchanged on update -[Computed](./Org.OData.Core.V1.xml#L384:~:text=A value for this property is generated on both insert and update -[ComputedDefaultValue](./Org.OData.Core.V1.xml#L388:~:text=A value for this property can be provided by the client on insert and update. If no value is provided on insert, a non-static default value is generated -[IsURL](./Org.OData.Core.V1.xml#L392:~:text=Properties and terms annotated with this term MUST contain a valid URL -[AcceptableMediaTypes](./Org.OData.Core.V1.xml#L397:~:text=Lists the MIME types acceptable for the annotated entity type marked with HasStream="true" or the annotated binary, stream, or string property or term
    The annotation of a TypeDefinition propagates to the model elements having this type -[MediaType](./Org.OData.Core.V1.xml#L403:~:text=The media type of the media stream of the annotated entity type marked with HasStream="true" or the annotated binary, stream, or string property or term
    The annotation of a TypeDefinition propagates to the model elements having this type -[IsMediaType](./Org.OData.Core.V1.xml#L409:~:text=Properties and terms annotated with this term MUST contain a valid MIME type -[ContentDisposition](./Org.OData.Core.V1.xml#L414:~:text=The content disposition of the media stream of the annotated entity type marked with HasStream="true" or the annotated binary, stream, or string property or term -[OptimisticConcurrency](./Org.OData.Core.V1.xml#L427:~:text=Data modification requires the use of ETags. A non-empty collection contains the set of properties that are used to compute the ETag. An empty collection means that the service won't tell how it computes the ETag -[AdditionalProperties](./Org.OData.Core.V1.xml#L431:~:text=Instances of this type may contain properties in addition to those declared in $metadata
    If specified as false clients can assume that instances will not contain dynamic properties, irrespective of the value of the OpenType attribute. -[AutoExpand](./Org.OData.Core.V1.xml#L436:~:text=The service will automatically expand this stream property, navigation property, or the media stream of this media entity type even if not requested with $expand -[AutoExpandReferences](./Org.OData.Core.V1.xml#L440:~:text=The service will automatically expand this navigation property as entity references even if not requested with $expand=.../$ref -[MayImplement](./Org.OData.Core.V1.xml#L444:~:text=A collection of qualified type names outside of the type hierarchy that instances of this type might be addressable as by using a type-cast segment. -[Ordered](./Org.OData.Core.V1.xml#L471:~:text=Collection has a stable order. Ordered collections of primitive or complex types can be indexed by ordinal. -[PositionalInsert](./Org.OData.Core.V1.xml#L475:~:text=Items can be inserted at a given ordinal index. -[AlternateKeys](./Org.OData.Core.V1.xml#L479:~:text=Communicates available alternate keys -[OptionalParameter](./Org.OData.Core.V1.xml#L507:~:text=Supplying a value for the action or function parameter is optional.
    All parameters marked as optional must come after any parameters not marked as optional. The binding parameter must not be marked as optional. -[OperationAvailable](./Org.OData.Core.V1.xml#L518:~:text=Action or function is available
    The annotation value will usually be an expression, e.g. using properties of the binding parameter type for instance-dependent availability, or using properties of a singleton for global availability. The static value `null` means that availability cannot be determined upfront and is instead expressed as an operation advertisement. -[RequiresExplicitBinding](./Org.OData.Core.V1.xml#L523:~:text=This bound action or function is only available on model elements annotated with the ExplicitOperationBindings term. -[ExplicitOperationBindings](./Org.OData.Core.V1.xml#L527:~:text=The qualified names of explicitly bound operations that are supported on the target model element. These operations are in addition to any operations not annotated with RequiresExplicitBinding that are bound to the type of the target model element. -[SymbolicName](./Org.OData.Core.V1.xml#L536:~:text=A symbolic name for a model element -[GeometryFeature](./Org.OData.Core.V1.xml#L545:~:text=A [Feature Object](https://datatracker.ietf.org/doc/html/rfc7946#section-3.2) represents a spatially bounded thing -[AnyStructure](./Org.OData.Core.V1.xml#L561:~:text=Instances of a type are annotated with this tag if they have no common structure in a given response payload
    The select-list of a context URL MUST be `(@Core.AnyStructure)` if it would otherwise be empty, but this instance annotation SHOULD be omitted from the response value. +[ODataVersions](Org.OData.Core.V1.xml#L69)|String|A space-separated list of supported versions of the OData Protocol. Note that 4.0 is implied by 4.01 and does not need to be separately listed. +[SchemaVersion](Org.OData.Core.V1.xml#L73)|String|Service-defined value representing the version of the schema. Services MAY use semantic versioning, but clients MUST NOT assume this is the case. +[Revisions](Org.OData.Core.V1.xml#L77)|\[[RevisionType](#RevisionType)\]|List of revisions of a model element +[Description](Org.OData.Core.V1.xml#L105)|String?|A brief description of a model element +[LongDescription](Org.OData.Core.V1.xml#L110)|String?|A long description of a model element +[Links](Org.OData.Core.V1.xml#L115)|\[[Link](#Link)\]|Link to related information +[Example](Org.OData.Core.V1.xml#L129)|[ExampleValue](#ExampleValue)|Example for an instance of the annotated model element ([Example](Org.OData.Core.V1.xml#L131)) +[Messages](Org.OData.Core.V1.xml#L198)|\[[MessageType](#MessageType)\]|Instance annotation for warning and info messages +[ValueException](Org.OData.Core.V1.xml#L242)|[ValueExceptionType](#ValueExceptionType)|The annotated value is problematic +[ResourceException](Org.OData.Core.V1.xml#L256)|[ResourceExceptionType](#ResourceExceptionType)|The annotated instance within a success payload is problematic +[DataModificationException](Org.OData.Core.V1.xml#L266)|[DataModificationExceptionType](#DataModificationExceptionType)|A modification operation failed on the annotated instance or collection within a success payload +[IsLanguageDependent](Org.OData.Core.V1.xml#L306)|[Tag](#Tag)|Properties and terms annotated with this term are language-dependent +[RequiresType](Org.OData.Core.V1.xml#L317)|String|Terms annotated with this term can only be applied to elements that have a type that is identical to or derived from the given type name +[AppliesViaContainer](Org.OData.Core.V1.xml#L321)|[Tag](#Tag)|The target path of an annotation with the tagged term MUST start with an entity container or the annotation MUST be embedded within an entity container, entity set or singleton
    Services MAY additionally annotate a container-independent model element (entity type, property, navigation property) if allowed by the `AppliesTo` property of the term and the annotation applies to all uses of that model element. +[ResourcePath](Org.OData.Core.V1.xml#L331)|URL|Resource path for entity container child, can be relative to xml:base and the request URL +[DereferenceableIDs](Org.OData.Core.V1.xml#L336)|[Tag](#Tag)|Entity-ids are URLs that locate the identified entity +[ConventionalIDs](Org.OData.Core.V1.xml#L340)|[Tag](#Tag)|Entity-ids follow OData URL conventions +[Permissions](Org.OData.Core.V1.xml#L346)|[Permission](#Permission)|Permissions for accessing a resource +[ContentID](Org.OData.Core.V1.xml#L369)|String|A unique identifier for nested entities within a request. +[DefaultNamespace](Org.OData.Core.V1.xml#L375)|[Tag](#Tag)|Functions, actions and types in this namespace can be referenced in URLs with or without namespace- or alias- qualification.
    Data Modelers should ensure uniqueness of schema children across all default namespaces, and should avoid naming bound functions, actions, or derived types with the same name as a structural or navigational property of the type. +[Immutable](Org.OData.Core.V1.xml#L380)|[Tag](#Tag)|A value for this non-key property can be provided by the client on insert and remains unchanged on update +[Computed](Org.OData.Core.V1.xml#L384)|[Tag](#Tag)|A value for this property is generated on both insert and update +[ComputedDefaultValue](Org.OData.Core.V1.xml#L388)|[Tag](#Tag)|A value for this property can be provided by the client on insert and update. If no value is provided on insert, a non-static default value is generated +[IsURL](Org.OData.Core.V1.xml#L392)|[Tag](#Tag)|Properties and terms annotated with this term MUST contain a valid URL +[AcceptableMediaTypes](Org.OData.Core.V1.xml#L397)|\[MediaType\]|Lists the MIME types acceptable for the annotated entity type marked with HasStream="true" or the annotated binary, stream, or string property or term
    The annotation of a TypeDefinition propagates to the model elements having this type +[MediaType](Org.OData.Core.V1.xml#L403)|MediaType?|The media type of the media stream of the annotated entity type marked with HasStream="true" or the annotated binary, stream, or string property or term
    The annotation of a TypeDefinition propagates to the model elements having this type +[IsMediaType](Org.OData.Core.V1.xml#L409)|[Tag](#Tag)|Properties and terms annotated with this term MUST contain a valid MIME type +[ContentDisposition](Org.OData.Core.V1.xml#L414)|[ContentDispositionType](#ContentDispositionType)|The content disposition of the media stream of the annotated entity type marked with HasStream="true" or the annotated binary, stream, or string property or term +[OptimisticConcurrency](Org.OData.Core.V1.xml#L427)|\[PropertyPath\]|Data modification requires the use of ETags. A non-empty collection contains the set of properties that are used to compute the ETag. An empty collection means that the service won't tell how it computes the ETag +[AdditionalProperties](Org.OData.Core.V1.xml#L431)|[Tag](#Tag)|Instances of this type may contain properties in addition to those declared in $metadata
    If specified as false clients can assume that instances will not contain dynamic properties, irrespective of the value of the OpenType attribute. +[AutoExpand](Org.OData.Core.V1.xml#L436)|[Tag](#Tag)|The service will automatically expand this stream property, navigation property, or the media stream of this media entity type even if not requested with $expand +[AutoExpandReferences](Org.OData.Core.V1.xml#L440)|[Tag](#Tag)|The service will automatically expand this navigation property as entity references even if not requested with $expand=.../$ref +[MayImplement](Org.OData.Core.V1.xml#L444)|\[[QualifiedTypeName](#QualifiedTypeName)\]|A collection of qualified type names outside of the type hierarchy that instances of this type might be addressable as by using a type-cast segment. +[Ordered](Org.OData.Core.V1.xml#L471)|[Tag](#Tag)|Collection has a stable order. Ordered collections of primitive or complex types can be indexed by ordinal. +[PositionalInsert](Org.OData.Core.V1.xml#L475)|[Tag](#Tag)|Items can be inserted at a given ordinal index. +[AlternateKeys](Org.OData.Core.V1.xml#L479)|\[[AlternateKey](#AlternateKey)\]|Communicates available alternate keys +[OptionalParameter](Org.OData.Core.V1.xml#L507)|[OptionalParameterType](#OptionalParameterType)|Supplying a value for the action or function parameter is optional.
    All parameters marked as optional must come after any parameters not marked as optional. The binding parameter must not be marked as optional. +[OperationAvailable](Org.OData.Core.V1.xml#L518)|Boolean?|Action or function is available
    The annotation value will usually be an expression, e.g. using properties of the binding parameter type for instance-dependent availability, or using properties of a singleton for global availability. The static value `null` means that availability cannot be determined upfront and is instead expressed as an operation advertisement. +[RequiresExplicitBinding](Org.OData.Core.V1.xml#L523)|[Tag?](#Tag)|This bound action or function is only available on model elements annotated with the ExplicitOperationBindings term. +[ExplicitOperationBindings](Org.OData.Core.V1.xml#L527)|\[[QualifiedBoundOperationName](#QualifiedBoundOperationName)\]|The qualified names of explicitly bound operations that are supported on the target model element. These operations are in addition to any operations not annotated with RequiresExplicitBinding that are bound to the type of the target model element. +[SymbolicName](Org.OData.Core.V1.xml#L536)|[SimpleIdentifier](#SimpleIdentifier)|A symbolic name for a model element +[GeometryFeature](Org.OData.Core.V1.xml#L545)|[GeometryFeatureType?](#GeometryFeatureType)|A [Feature Object](https://datatracker.ietf.org/doc/html/rfc7946#section-3.2) represents a spatially bounded thing +[AnyStructure](Org.OData.Core.V1.xml#L561)|[Tag](#Tag)|Instances of a type are annotated with this tag if they have no common structure in a given response payload
    The select-list of a context URL MUST be `(@Core.AnyStructure)` if it would otherwise be empty, but this instance annotation SHOULD be omitted from the response value. -## [RevisionType](./Org.OData.Core.V1.xml#L80:~:text= -## [RevisionKind](./Org.OData.Core.V1.xml#L91:~:text= -## [Link](./Org.OData.Core.V1.xml#L118:~:text= -## [ExampleValue](./Org.OData.Core.V1.xml#L169:~:text= -## [PrimitiveExampleValue](./Org.OData.Core.V1.xml#L174:~:text= -## [ComplexExampleValue](./Org.OData.Core.V1.xml#L179:~:text= -## [EntityExampleValue](./Org.OData.Core.V1.xml#L184:~:text= -## [ExternalExampleValue](./Org.OData.Core.V1.xml#L189:~:text= -## [MessageType](./Org.OData.Core.V1.xml#L201:~:text= -## [MessageSeverity](./Org.OData.Core.V1.xml#L219:~:text= -## [*ExceptionType*](./Org.OData.Core.V1.xml#L245:~:text= -## [ValueExceptionType](./Org.OData.Core.V1.xml#L250:~:text= -## [ResourceExceptionType](./Org.OData.Core.V1.xml#L259:~:text= -## [DataModificationExceptionType](./Org.OData.Core.V1.xml#L269:~:text= -## [DataModificationOperationKind](./Org.OData.Core.V1.xml#L279:~:text= -## [Tag](./Org.OData.Core.V1.xml#L311:~:text= -## [Permission](./Org.OData.Core.V1.xml#L349:~:text= -## [ContentDispositionType](./Org.OData.Core.V1.xml#L418:~:text= -## [QualifiedTermName](./Org.OData.Core.V1.xml#L448:~:text= -## [QualifiedTypeName](./Org.OData.Core.V1.xml#L452:~:text= -## [QualifiedActionName](./Org.OData.Core.V1.xml#L456:~:text= -## [QualifiedBoundOperationName](./Org.OData.Core.V1.xml#L460:~:text= -## [AlternateKey](./Org.OData.Core.V1.xml#L482:~:text= -## [PropertyRef](./Org.OData.Core.V1.xml#L487:~:text= -## [Dictionary](./Org.OData.Core.V1.xml#L496:~:text= -## [OptionalParameterType](./Org.OData.Core.V1.xml#L511:~:text=If no explicit DefaultValue is specified, the service is free on how to interpret omitting the parameter from the request. For example, a service might interpret an omitted optional parameter `KeyDate` as having the current date. +[DefaultValue](Org.OData.Core.V1.xml#L512)|String?|Default value for an optional parameter of primitive or enumeration type, using the same rules as the `cast` function in URLs.
    If no explicit DefaultValue is specified, the service is free on how to interpret omitting the parameter from the request. For example, a service might interpret an omitted optional parameter `KeyDate` as having the current date. -## [LocalDateTime](./Org.OData.Core.V1.xml#L531:~:text= -## [SimpleIdentifier](./Org.OData.Core.V1.xml#L540:~:text= -## [GeometryFeatureType](./Org.OData.Core.V1.xml#L548:~:text=The conformance level achieved by this service -[SupportedFormats](./Org.OData.Capabilities.V1.xml#L132:~:text=Media types of supported formats, including format parameters -[SupportedMetadataFormats](./Org.OData.Capabilities.V1.xml#L137:~:text=Media types of supported formats for $metadata, including format parameters -[AcceptableEncodings](./Org.OData.Capabilities.V1.xml#L142:~:text=List of acceptable compression methods for ($batch) requests, e.g. gzip -[AsynchronousRequestsSupported](./Org.OData.Capabilities.V1.xml#L148:~:text=Service supports the asynchronous request preference -[BatchContinueOnErrorSupported](./Org.OData.Capabilities.V1.xml#L152:~:text=Service supports the continue on error preference. Supports $batch requests. Services that apply the BatchContinueOnErrorSupported term should also specify the ContinueOnErrorSupported property from the BatchSupport term. -[IsolationSupported](./Org.OData.Capabilities.V1.xml#L156:~:text=Supported odata.isolation levels -[CrossJoinSupported](./Org.OData.Capabilities.V1.xml#L165:~:text=Supports cross joins for the entity sets in this container -[CallbackSupported](./Org.OData.Capabilities.V1.xml#L169:~:text=Supports callbacks for the specified protocols -[ChangeTracking](./Org.OData.Capabilities.V1.xml#L191:~:text=Change tracking capabilities of this service or entity set -[CountRestrictions](./Org.OData.Capabilities.V1.xml#L212:~:text=Restrictions on /$count path suffix and $count=true system query option -[NavigationRestrictions](./Org.OData.Capabilities.V1.xml#L230:~:text=Restrictions on navigating properties according to OData URL conventions
    Restrictions specified on an entity set are valid whether the request is directly to the entity set or through a navigation property bound to that entity set. Services can specify a different set of restrictions specific to a path, in which case the more specific restrictions take precedence. -[IndexableByKey](./Org.OData.Capabilities.V1.xml#L321:~:text=Supports key values according to OData URL conventions -[TopSupported](./Org.OData.Capabilities.V1.xml#L326:~:text=Supports $top -[SkipSupported](./Org.OData.Capabilities.V1.xml#L331:~:text=Supports $skip -[ComputeSupported](./Org.OData.Capabilities.V1.xml#L336:~:text=Supports $compute -[SelectSupport](./Org.OData.Capabilities.V1.xml#L341:~:text=Support for $select and nested query options within $select -[BatchSupported](./Org.OData.Capabilities.V1.xml#L378:~:text=Supports $batch requests. Services that apply the BatchSupported term should also apply the more comprehensive BatchSupport term. -[BatchSupport](./Org.OData.Capabilities.V1.xml#L382:~:text=Batch Support for the service -[FilterFunctions](./Org.OData.Capabilities.V1.xml#L428:~:text=List of functions and operators supported in filter expressions
    If not specified, null, or empty, all functions and operators may be attempted. -[FilterRestrictions](./Org.OData.Capabilities.V1.xml#L434:~:text=Restrictions on filter expressions -[SortRestrictions](./Org.OData.Capabilities.V1.xml#L506:~:text=Restrictions on orderby expressions -[ExpandRestrictions](./Org.OData.Capabilities.V1.xml#L532:~:text=Restrictions on expand expressions -[SearchRestrictions](./Org.OData.Capabilities.V1.xml#L562:~:text=Restrictions on search expressions -[KeyAsSegmentSupported](./Org.OData.Capabilities.V1.xml#L600:~:text=Supports [key-as-segment convention](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_KeyasSegmentConvention) for addressing entities within a collection -[QuerySegmentSupported](./Org.OData.Capabilities.V1.xml#L604:~:text=Supports [passing query options in the request body](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_PassingQueryOptionsintheRequestBody) -[InsertRestrictions](./Org.OData.Capabilities.V1.xml#L610:~:text=Restrictions on insert operations -[DeepInsertSupport](./Org.OData.Capabilities.V1.xml#L689:~:text=Deep Insert Support of the annotated resource (the whole service, an entity set, or a collection-valued resource) -[UpdateRestrictions](./Org.OData.Capabilities.V1.xml#L702:~:text=Restrictions on update operations -[DeepUpdateSupport](./Org.OData.Capabilities.V1.xml#L788:~:text=Deep Update Support of the annotated resource (the whole service, an entity set, or a collection-valued resource) -[DeleteRestrictions](./Org.OData.Capabilities.V1.xml#L801:~:text=Restrictions on delete operations -[CollectionPropertyRestrictions](./Org.OData.Capabilities.V1.xml#L845:~:text=Describes restrictions on operations applied to collection-valued structural properties -[OperationRestrictions](./Org.OData.Capabilities.V1.xml#L886:~:text=Restrictions for function or action operation -[AnnotationValuesInQuerySupported](./Org.OData.Capabilities.V1.xml#L906:~:text=Supports annotation values within system query options -[ModificationQueryOptions](./Org.OData.Capabilities.V1.xml#L910:~:text=Support for query options with modification requests (insert, update, action invocation) -[ReadRestrictions](./Org.OData.Capabilities.V1.xml#L934:~:text=Restrictions for retrieving a collection of entities, retrieving a singleton instance. -[CustomHeaders](./Org.OData.Capabilities.V1.xml#L976:~:text=Custom headers that are supported/required for the annotated resource ([Example](./Org.OData.Capabilities.V1.xml#L978)) -[CustomQueryOptions](./Org.OData.Capabilities.V1.xml#L1002:~:text=Custom query options that are supported/required for the annotated resource ([Example](./Org.OData.Capabilities.V1.xml#L1005))
    If the entity container is annotated, the query option is supported/required by all resources in that container. -[MediaLocationUpdateSupported](./Org.OData.Capabilities.V1.xml#L1054:~:text=Stream property or media stream supports update of its media edit URL and/or media read URL -[DefaultCapabilities](./Org.OData.Capabilities.V1.xml#L1059:~:text=Default capability settings for all collection-valued resources in the container

    Annotating a specific capability term, which is included as property in DefaultCapabilitiesType, for a specific collection-valued resource overrides the default capability with the specified properties using PATCH semantics:

    • Primitive or collection-valued properties specified in the specific capability term replace the corresponding properties specified in DefaultCapabilities
    • Complex-valued properties specified in the specific capability term override the corresponding properties specified in DefaultCapabilities using PATCH semantics recursively
    • Properties specified neither in the specific term nor in DefaultCapabilities have their default value
    +[ConformanceLevel](Org.OData.Capabilities.V1.xml#L115)|[ConformanceLevelType](#ConformanceLevelType)|The conformance level achieved by this service +[SupportedFormats](Org.OData.Capabilities.V1.xml#L132)|\[MediaType\]|Media types of supported formats, including format parameters +[SupportedMetadataFormats](Org.OData.Capabilities.V1.xml#L137)|\[MediaType\]|Media types of supported formats for $metadata, including format parameters +[AcceptableEncodings](Org.OData.Capabilities.V1.xml#L142)|\[String\]|List of acceptable compression methods for ($batch) requests, e.g. gzip +[AsynchronousRequestsSupported](Org.OData.Capabilities.V1.xml#L148)|[Tag](Org.OData.Core.V1.md#Tag)|Service supports the asynchronous request preference +[BatchContinueOnErrorSupported](Org.OData.Capabilities.V1.xml#L152)|[Tag](Org.OData.Core.V1.md#Tag)|Service supports the continue on error preference. Supports $batch requests. Services that apply the BatchContinueOnErrorSupported term should also specify the ContinueOnErrorSupported property from the BatchSupport term. +[IsolationSupported](Org.OData.Capabilities.V1.xml#L156)|[IsolationLevel](#IsolationLevel)|Supported odata.isolation levels +[CrossJoinSupported](Org.OData.Capabilities.V1.xml#L165)|[Tag](Org.OData.Core.V1.md#Tag)|Supports cross joins for the entity sets in this container +[CallbackSupported](Org.OData.Capabilities.V1.xml#L169)|[CallbackType](#CallbackType)|Supports callbacks for the specified protocols +[ChangeTracking](Org.OData.Capabilities.V1.xml#L191)|[ChangeTrackingType](#ChangeTrackingType)|Change tracking capabilities of this service or entity set +[CountRestrictions](Org.OData.Capabilities.V1.xml#L212)|[CountRestrictionsType](#CountRestrictionsType)|Restrictions on /$count path suffix and $count=true system query option +[NavigationRestrictions](Org.OData.Capabilities.V1.xml#L230)|[NavigationRestrictionsType](#NavigationRestrictionsType)|Restrictions on navigating properties according to OData URL conventions
    Restrictions specified on an entity set are valid whether the request is directly to the entity set or through a navigation property bound to that entity set. Services can specify a different set of restrictions specific to a path, in which case the more specific restrictions take precedence. +[IndexableByKey](Org.OData.Capabilities.V1.xml#L321)|[Tag](Org.OData.Core.V1.md#Tag)|Supports key values according to OData URL conventions +[TopSupported](Org.OData.Capabilities.V1.xml#L326)|[Tag](Org.OData.Core.V1.md#Tag)|Supports $top +[SkipSupported](Org.OData.Capabilities.V1.xml#L331)|[Tag](Org.OData.Core.V1.md#Tag)|Supports $skip +[ComputeSupported](Org.OData.Capabilities.V1.xml#L336)|[Tag](Org.OData.Core.V1.md#Tag)|Supports $compute +[SelectSupport](Org.OData.Capabilities.V1.xml#L341)|[SelectSupportType](#SelectSupportType)|Support for $select and nested query options within $select +[BatchSupported](Org.OData.Capabilities.V1.xml#L378)|[Tag](Org.OData.Core.V1.md#Tag)|Supports $batch requests. Services that apply the BatchSupported term should also apply the more comprehensive BatchSupport term. +[BatchSupport](Org.OData.Capabilities.V1.xml#L382)|[BatchSupportType](#BatchSupportType)|Batch Support for the service +[FilterFunctions](Org.OData.Capabilities.V1.xml#L428)|\[String\]|List of functions and operators supported in filter expressions
    If not specified, null, or empty, all functions and operators may be attempted. +[FilterRestrictions](Org.OData.Capabilities.V1.xml#L434)|[FilterRestrictionsType](#FilterRestrictionsType)|Restrictions on filter expressions +[SortRestrictions](Org.OData.Capabilities.V1.xml#L506)|[SortRestrictionsType](#SortRestrictionsType)|Restrictions on orderby expressions +[ExpandRestrictions](Org.OData.Capabilities.V1.xml#L532)|[ExpandRestrictionsType](#ExpandRestrictionsType)|Restrictions on expand expressions +[SearchRestrictions](Org.OData.Capabilities.V1.xml#L562)|[SearchRestrictionsType](#SearchRestrictionsType)|Restrictions on search expressions +[KeyAsSegmentSupported](Org.OData.Capabilities.V1.xml#L600)|[Tag](Org.OData.Core.V1.md#Tag)|Supports [key-as-segment convention](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_KeyasSegmentConvention) for addressing entities within a collection +[QuerySegmentSupported](Org.OData.Capabilities.V1.xml#L604)|[Tag](Org.OData.Core.V1.md#Tag)|Supports [passing query options in the request body](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_PassingQueryOptionsintheRequestBody) +[InsertRestrictions](Org.OData.Capabilities.V1.xml#L610)|[InsertRestrictionsType](#InsertRestrictionsType)|Restrictions on insert operations +[DeepInsertSupport](Org.OData.Capabilities.V1.xml#L689)|[DeepInsertSupportType?](#DeepInsertSupportType)|Deep Insert Support of the annotated resource (the whole service, an entity set, or a collection-valued resource) +[UpdateRestrictions](Org.OData.Capabilities.V1.xml#L702)|[UpdateRestrictionsType](#UpdateRestrictionsType)|Restrictions on update operations +[DeepUpdateSupport](Org.OData.Capabilities.V1.xml#L788)|[DeepUpdateSupportType](#DeepUpdateSupportType)|Deep Update Support of the annotated resource (the whole service, an entity set, or a collection-valued resource) +[DeleteRestrictions](Org.OData.Capabilities.V1.xml#L801)|[DeleteRestrictionsType](#DeleteRestrictionsType)|Restrictions on delete operations +[CollectionPropertyRestrictions](Org.OData.Capabilities.V1.xml#L845)|\[[CollectionPropertyRestrictionsType](#CollectionPropertyRestrictionsType)\]|Describes restrictions on operations applied to collection-valued structural properties +[OperationRestrictions](Org.OData.Capabilities.V1.xml#L886)|[OperationRestrictionsType](#OperationRestrictionsType)|Restrictions for function or action operation +[AnnotationValuesInQuerySupported](Org.OData.Capabilities.V1.xml#L906)|[Tag](Org.OData.Core.V1.md#Tag)|Supports annotation values within system query options +[ModificationQueryOptions](Org.OData.Capabilities.V1.xml#L910)|[ModificationQueryOptionsType](#ModificationQueryOptionsType)|Support for query options with modification requests (insert, update, action invocation) +[ReadRestrictions](Org.OData.Capabilities.V1.xml#L934)|[ReadRestrictionsType](#ReadRestrictionsType)|Restrictions for retrieving a collection of entities, retrieving a singleton instance. +[CustomHeaders](Org.OData.Capabilities.V1.xml#L976)|\[[CustomParameter](#CustomParameter)\]|Custom headers that are supported/required for the annotated resource ([Example](Org.OData.Capabilities.V1.xml#L978)) +[CustomQueryOptions](Org.OData.Capabilities.V1.xml#L1002)|\[[CustomParameter](#CustomParameter)\]|Custom query options that are supported/required for the annotated resource ([Example](Org.OData.Capabilities.V1.xml#L1005))
    If the entity container is annotated, the query option is supported/required by all resources in that container. +[MediaLocationUpdateSupported](Org.OData.Capabilities.V1.xml#L1054)|[Tag](Org.OData.Core.V1.md#Tag)|Stream property or media stream supports update of its media edit URL and/or media read URL +[DefaultCapabilities](Org.OData.Capabilities.V1.xml#L1059)|[DefaultCapabilitiesType](#DefaultCapabilitiesType)|Default capability settings for all collection-valued resources in the container

    Annotating a specific capability term, which is included as property in DefaultCapabilitiesType, for a specific collection-valued resource overrides the default capability with the specified properties using PATCH semantics:

    • Primitive or collection-valued properties specified in the specific capability term replace the corresponding properties specified in DefaultCapabilities
    • Complex-valued properties specified in the specific capability term override the corresponding properties specified in DefaultCapabilities using PATCH semantics recursively
    • Properties specified neither in the specific term nor in DefaultCapabilities have their default value
    -## [ConformanceLevelType](./Org.OData.Capabilities.V1.xml#L118:~:text= -## [IsolationLevel](./Org.OData.Capabilities.V1.xml#L159:~:text= -## [CallbackType](./Org.OData.Capabilities.V1.xml#L172:~:text= -## [CallbackProtocol](./Org.OData.Capabilities.V1.xml#L178:~:text= -## [ChangeTrackingBase](./Org.OData.Capabilities.V1.xml#L194:~:text= -## [ChangeTrackingType](./Org.OData.Capabilities.V1.xml#L199:~:text=If no properties are specified or FilterableProperties is omitted, clients cannot assume support for filtering on any properties in combination with change tracking. -[ExpandableProperties](./Org.OData.Capabilities.V1.xml#L204:~:text=If no properties are specified or ExpandableProperties is omitted, clients cannot assume support for expanding any properties in combination with change tracking. +[*Supported*](Org.OData.Capabilities.V1.xml#L195)|Boolean|odata.track-changes preference is supported +[FilterableProperties](Org.OData.Capabilities.V1.xml#L200)|\[PropertyPath\]|Change tracking supports filters on these properties
    If no properties are specified or FilterableProperties is omitted, clients cannot assume support for filtering on any properties in combination with change tracking. +[ExpandableProperties](Org.OData.Capabilities.V1.xml#L204)|\[NavigationPropertyPath\]|Change tracking supports these properties expanded
    If no properties are specified or ExpandableProperties is omitted, clients cannot assume support for expanding any properties in combination with change tracking. -## [CountRestrictionsBase](./Org.OData.Capabilities.V1.xml#L216:~:text= -## [CountRestrictionsType](./Org.OData.Capabilities.V1.xml#L221:~:text= -## [NavigationRestrictionsType](./Org.OData.Capabilities.V1.xml#L235:~:text= -## [NavigationPropertyRestriction](./Org.OData.Capabilities.V1.xml#L243:~:text=The target path of a [`NavigationRestrictions`](#NavigationRestrictions) annotation followed by this navigation property path addresses the resource to which the other properties of `NavigationPropertyRestriction` apply. Instance paths that occur in dynamic expressions are evaluated starting at the boundary between both paths, which must therefore be chosen accordingly. -[Navigability](./Org.OData.Capabilities.V1.xml#L259:~:text=If not specified, null, or empty, all functions and operators may be attempted. -[FilterRestrictions](./Org.OData.Capabilities.V1.xml#L266:~:text=The target path of a [`NavigationRestrictions`](#NavigationRestrictions) annotation followed by this navigation property path addresses the resource to which the other properties of `NavigationPropertyRestriction` apply. Instance paths that occur in dynamic expressions are evaluated starting at the boundary between both paths, which must therefore be chosen accordingly. +[Navigability](Org.OData.Capabilities.V1.xml#L259)|[NavigationType?](#NavigationType)|Supported navigability of this navigation property +[FilterFunctions](Org.OData.Capabilities.V1.xml#L262)|\[String\]|List of functions and operators supported in filter expressions
    If not specified, null, or empty, all functions and operators may be attempted. +[FilterRestrictions](Org.OData.Capabilities.V1.xml#L266)|[FilterRestrictionsType?](#FilterRestrictionsType)|Restrictions on filter expressions +[SearchRestrictions](Org.OData.Capabilities.V1.xml#L269)|[SearchRestrictionsType?](#SearchRestrictionsType)|Restrictions on search expressions +[SortRestrictions](Org.OData.Capabilities.V1.xml#L272)|[SortRestrictionsType?](#SortRestrictionsType)|Restrictions on orderby expressions +[TopSupported](Org.OData.Capabilities.V1.xml#L275)|Boolean|Supports $top +[SkipSupported](Org.OData.Capabilities.V1.xml#L278)|Boolean|Supports $skip +[SelectSupport](Org.OData.Capabilities.V1.xml#L281)|[SelectSupportType?](#SelectSupportType)|Support for $select +[IndexableByKey](Org.OData.Capabilities.V1.xml#L284)|Boolean|Supports key values according to OData URL conventions +[InsertRestrictions](Org.OData.Capabilities.V1.xml#L287)|[InsertRestrictionsType?](#InsertRestrictionsType)|Restrictions on insert operations +[DeepInsertSupport](Org.OData.Capabilities.V1.xml#L290)|[DeepInsertSupportType?](#DeepInsertSupportType)|Deep Insert Support of the annotated resource (the whole service, an entity set, or a collection-valued resource) +[UpdateRestrictions](Org.OData.Capabilities.V1.xml#L293)|[UpdateRestrictionsType?](#UpdateRestrictionsType)|Restrictions on update operations +[DeepUpdateSupport](Org.OData.Capabilities.V1.xml#L296)|[DeepUpdateSupportType?](#DeepUpdateSupportType)|Deep Update Support of the annotated resource (the whole service, an entity set, or a collection-valued resource) +[DeleteRestrictions](Org.OData.Capabilities.V1.xml#L299)|[DeleteRestrictionsType?](#DeleteRestrictionsType)|Restrictions on delete operations +[OptimisticConcurrencyControl](Org.OData.Capabilities.V1.xml#L302)|Boolean|Data modification (including insert) along this navigation property requires the use of ETags +[ReadRestrictions](Org.OData.Capabilities.V1.xml#L305)|[ReadRestrictionsType?](#ReadRestrictionsType)|Restrictions for retrieving entities -## [NavigationType](./Org.OData.Capabilities.V1.xml#L309:~:text= -## [SelectSupportType](./Org.OData.Capabilities.V1.xml#L345:~:text= -## [BatchSupportType](./Org.OData.Capabilities.V1.xml#L385:~:text=Allowed values:
    [multipart/mixed](./Org.OData.Capabilities.V1.xml#L415)
    [Multipart Batch Format](http://docs.oasis-open.org/odata/odata/v4.01/cs01/part1-protocol/odata-v4.01-cs01-part1-protocol.html#sec_MultipartBatchFormat)
    [application/json](./Org.OData.Capabilities.V1.xml#L419)
    [JSON Batch Format](http://docs.oasis-open.org/odata/odata-json-format/v4.01/cs01/odata-json-format-v4.01-cs01.html#sec_BatchRequestsandResponses) +[Supported](Org.OData.Capabilities.V1.xml#L392)|Boolean|Service supports requests to $batch +[ContinueOnErrorSupported](Org.OData.Capabilities.V1.xml#L395)|Boolean|Service supports the continue on error preference +[ReferencesInRequestBodiesSupported](Org.OData.Capabilities.V1.xml#L398)|Boolean|Service supports Content-ID referencing in request bodies +[ReferencesAcrossChangeSetsSupported](Org.OData.Capabilities.V1.xml#L401)|Boolean|Service supports Content-ID referencing across change sets +[EtagReferencesSupported](Org.OData.Capabilities.V1.xml#L404)|Boolean|Service supports referencing Etags from previous requests +[RequestDependencyConditionsSupported](Org.OData.Capabilities.V1.xml#L407)|Boolean|Service supports the `if` member in JSON batch requests +[SupportedFormats](Org.OData.Capabilities.V1.xml#L410)|\[MediaType\]|Media types of supported formats for $batch
    Allowed values:
    [multipart/mixed](Org.OData.Capabilities.V1.xml#L415)
    [Multipart Batch Format](http://docs.oasis-open.org/odata/odata/v4.01/cs01/part1-protocol/odata-v4.01-cs01-part1-protocol.html#sec_MultipartBatchFormat)
    [application/json](Org.OData.Capabilities.V1.xml#L419)
    [JSON Batch Format](http://docs.oasis-open.org/odata/odata-json-format/v4.01/cs01/odata-json-format-v4.01-cs01.html#sec_BatchRequestsandResponses)
    **Applicable Annotation Terms:** @@ -718,7 +718,7 @@ Property|Type|Description - [LongDescription](Org.OData.Core.V1.md#LongDescription) -## [FilterRestrictionsBase](./Org.OData.Capabilities.V1.xml#L438:~:text= -## [FilterRestrictionsType](./Org.OData.Capabilities.V1.xml#L454:~:text= -## [FilterExpressionRestrictionType](./Org.OData.Capabilities.V1.xml#L465:~:text= -## [FilterExpressionType](./Org.OData.Capabilities.V1.xml#L473:~:text=The filter expression for this property consists of one or more interval expressions combined by `or`. A single interval expression is either a single comparison of the property and a literal value with `eq`, `le`, `lt`, `ge`, or `gt`, or pair of boundaries combined by `and` and enclosed in parentheses. The lower boundary is either `ge` or `gt`, the upper boundary either `le` or `lt`. -[SearchExpression](./Org.OData.Capabilities.V1.xml#L493:~:text=The filter expression for this property consists of one or more interval expressions or string comparison functions combined by `or`. See MultiRange for a definition of an interval expression. See SearchExpression for the allowed string comparison functions. +[SingleValue](Org.OData.Capabilities.V1.xml#L476)|Property can be used in a single `eq` clause +[MultiValue](Org.OData.Capabilities.V1.xml#L480)|Property can be used in multiple `eq` and `in` clauses, combined by `or` (which is logically equivalent to a single `in` clause) +[SingleRange](Org.OData.Capabilities.V1.xml#L484)|Property can be used in at most one `ge` and/or one `le` clause, separated by `and` +[MultiRange](Org.OData.Capabilities.V1.xml#L488)|Property can be compared to a union of one or more closed, half-open, or open intervals
    The filter expression for this property consists of one or more interval expressions combined by `or`. A single interval expression is either a single comparison of the property and a literal value with `eq`, `le`, `lt`, `ge`, or `gt`, or pair of boundaries combined by `and` and enclosed in parentheses. The lower boundary is either `ge` or `gt`, the upper boundary either `le` or `lt`. +[SearchExpression](Org.OData.Capabilities.V1.xml#L493)|String property can be used as first operand in `startswith`, `endswith`, and `contains` clauses +[MultiRangeOrSearchExpression](Org.OData.Capabilities.V1.xml#L497)|Property can be compared to a union of zero or more closed, half-open, or open intervals plus zero or more simple string patterns
    The filter expression for this property consists of one or more interval expressions or string comparison functions combined by `or`. See MultiRange for a definition of an interval expression. See SearchExpression for the allowed string comparison functions. -## [SortRestrictionsBase](./Org.OData.Capabilities.V1.xml#L510:~:text= -## [SortRestrictionsType](./Org.OData.Capabilities.V1.xml#L520:~:text= -## [ExpandRestrictionsBase](./Org.OData.Capabilities.V1.xml#L536:~:text= -## [ExpandRestrictionsType](./Org.OData.Capabilities.V1.xml#L552:~:text= -## [SearchRestrictionsType](./Org.OData.Capabilities.V1.xml#L566:~:text= -## [SearchExpressions](./Org.OData.Capabilities.V1.xml#L579:~:text= -## [InsertRestrictionsBase](./Org.OData.Capabilities.V1.xml#L614:~:text= -## [InsertRestrictionsType](./Org.OData.Capabilities.V1.xml#L645:~:text= -## [PermissionType](./Org.OData.Capabilities.V1.xml#L660:~:text= -## [ScopeType](./Org.OData.Capabilities.V1.xml#L669:~:text=Possible string value identifiers when specifying properties are `*`, _PropertyName_, `-`_PropertyName_.
    `*` denotes all properties are accessible.
    `-`_PropertyName_ excludes that specific property.
    _PropertyName_ explicitly provides access to the specific property.
    The absence of `RestrictedProperties` denotes all properties are accessible using that scope. +[Scope](Org.OData.Capabilities.V1.xml#L670)|String|Name of the scope. +[RestrictedProperties](Org.OData.Capabilities.V1.xml#L673)|String?|Comma-separated string value of all properties that will be included or excluded when using the scope.
    Possible string value identifiers when specifying properties are `*`, _PropertyName_, `-`_PropertyName_.
    `*` denotes all properties are accessible.
    `-`_PropertyName_ excludes that specific property.
    _PropertyName_ explicitly provides access to the specific property.
    The absence of `RestrictedProperties` denotes all properties are accessible using that scope. -## [DeepInsertSupportType](./Org.OData.Capabilities.V1.xml#L693:~:text= -## [UpdateRestrictionsBase](./Org.OData.Capabilities.V1.xml#L706:~:text= -## [UpdateRestrictionsType](./Org.OData.Capabilities.V1.xml#L752:~:text= -## [HttpMethod](./Org.OData.Capabilities.V1.xml#L764:~:text= -## [DeepUpdateSupportType](./Org.OData.Capabilities.V1.xml#L792:~:text= -## [DeleteRestrictionsBase](./Org.OData.Capabilities.V1.xml#L805:~:text= -## [DeleteRestrictionsType](./Org.OData.Capabilities.V1.xml#L839:~:text= -## [CollectionPropertyRestrictionsType](./Org.OData.Capabilities.V1.xml#L848:~:text=If not specified, null, or empty, all functions and operators may be attempted. -[FilterRestrictions](./Org.OData.Capabilities.V1.xml#L856:~:text=If additionally annotated with [Core.PositionalInsert](Org.OData.Core.V1.md#PositionalInsert), members can be inserted at a specific position -[Updatable](./Org.OData.Capabilities.V1.xml#L878:~:text=If not specified, null, or empty, all functions and operators may be attempted. +[FilterRestrictions](Org.OData.Capabilities.V1.xml#L856)|[FilterRestrictionsType?](#FilterRestrictionsType)|Restrictions on filter expressions +[SearchRestrictions](Org.OData.Capabilities.V1.xml#L859)|[SearchRestrictionsType?](#SearchRestrictionsType)|Restrictions on search expressions +[SortRestrictions](Org.OData.Capabilities.V1.xml#L862)|[SortRestrictionsType?](#SortRestrictionsType)|Restrictions on orderby expressions +[TopSupported](Org.OData.Capabilities.V1.xml#L865)|Boolean|Supports $top +[SkipSupported](Org.OData.Capabilities.V1.xml#L868)|Boolean|Supports $skip +[SelectSupport](Org.OData.Capabilities.V1.xml#L871)|[SelectSupportType?](#SelectSupportType)|Support for $select +[Insertable](Org.OData.Capabilities.V1.xml#L874)|Boolean|Members can be inserted into this collection
    If additionally annotated with [Core.PositionalInsert](Org.OData.Core.V1.md#PositionalInsert), members can be inserted at a specific position +[Updatable](Org.OData.Capabilities.V1.xml#L878)|Boolean|Members of this ordered collection can be updated by ordinal +[Deletable](Org.OData.Capabilities.V1.xml#L881)|Boolean|Members of this ordered collection can be deleted by ordinal -## [OperationRestrictionsType](./Org.OData.Capabilities.V1.xml#L889:~:text= -## [ModificationQueryOptionsType](./Org.OData.Capabilities.V1.xml#L913:~:text= -## [*ReadRestrictionsBase*](./Org.OData.Capabilities.V1.xml#L938:~:text= -## [ReadByKeyRestrictionsType](./Org.OData.Capabilities.V1.xml#L963:~:text= -## [ReadRestrictionsType](./Org.OData.Capabilities.V1.xml#L966:~:text=Only valid when applied to a collection. If a property of `ReadByKeyRestrictions` is not specified, the corresponding property value of `ReadRestrictions` applies. +[*Readable*](Org.OData.Capabilities.V1.xml#L939)|Boolean|Entities can be retrieved +[*Permissions*](Org.OData.Capabilities.V1.xml#L942)|\[[PermissionType?](#PermissionType)\]|Required permissions. One of the specified sets of scopes is required to read. +[*CustomHeaders*](Org.OData.Capabilities.V1.xml#L945)|\[[CustomParameter](#CustomParameter)\]|Supported or required custom headers +[*CustomQueryOptions*](Org.OData.Capabilities.V1.xml#L948)|\[[CustomParameter](#CustomParameter)\]|Supported or required custom query options +[*Description*](Org.OData.Capabilities.V1.xml#L951)|String?|A brief description of the request +[*LongDescription*](Org.OData.Capabilities.V1.xml#L955)|String?|A long description of the request +[*ErrorResponses*](Org.OData.Capabilities.V1.xml#L959)|\[[HttpResponse](#HttpResponse)\]|Possible error responses returned by the request. +[TypecastSegmentSupported](Org.OData.Capabilities.V1.xml#L967)|Boolean|Entities of a specific derived type can be read by specifying a type-cast segment +[ReadByKeyRestrictions](Org.OData.Capabilities.V1.xml#L970)|[ReadByKeyRestrictionsType?](#ReadByKeyRestrictionsType)|Restrictions for retrieving an entity by key
    Only valid when applied to a collection. If a property of `ReadByKeyRestrictions` is not specified, the corresponding property value of `ReadRestrictions` applies. -## [CustomParameter](./Org.OData.Capabilities.V1.xml#L1033:~:text= -## [DefaultCapabilitiesType](./Org.OData.Capabilities.V1.xml#L1068:~:text= -## [HttpResponse](./Org.OData.Capabilities.V1.xml#L1119:~:text=The currency for this monetary amount as an ISO 4217 currency code -[Scale](./Org.OData.Measures.V1.xml#L74:~:text=The number of significant decimal places in the scale part (less than or equal to the number declared in the Scale facet) -[Unit](./Org.OData.Measures.V1.xml#L79:~:text=The unit of measure for this measured quantity, e.g. cm for centimeters or % for percentages -[UNECEUnit](./Org.OData.Measures.V1.xml#L83:~:text=The unit of measure for this measured quantity, according to the [UN/CEFACT Recommendation 20](http://tfig.unece.org/contents/recommendation-20.htm) -[DurationGranularity](./Org.OData.Measures.V1.xml#L87:~:text=The minimum granularity of duration values.
    Absence of this annotation means a granularity of seconds with sub-seconds according to the Precision facet. +[ISOCurrency](Org.OData.Measures.V1.xml#L70)|String|The currency for this monetary amount as an ISO 4217 currency code +[Scale](Org.OData.Measures.V1.xml#L74)|Byte|The number of significant decimal places in the scale part (less than or equal to the number declared in the Scale facet) +[Unit](Org.OData.Measures.V1.xml#L79)|String|The unit of measure for this measured quantity, e.g. cm for centimeters or % for percentages +[UNECEUnit](Org.OData.Measures.V1.xml#L83)|String|The unit of measure for this measured quantity, according to the [UN/CEFACT Recommendation 20](http://tfig.unece.org/contents/recommendation-20.htm) +[DurationGranularity](Org.OData.Measures.V1.xml#L87)|[DurationGranularityType](#DurationGranularityType)|The minimum granularity of duration values.
    Absence of this annotation means a granularity of seconds with sub-seconds according to the Precision facet. -## [DurationGranularityType](./Org.OData.Measures.V1.xml#L92:~:text=The pattern that a string property, parameter, or term must match. This SHOULD be a valid regular expression, according to the ECMA 262 regular expression dialect. -[Minimum](./Org.OData.Validation.V1.xml#L72:~:text=Minimum value that a property, parameter, or term can have.
    Can be annotated with:
    • [Exclusive](#Exclusive)
    -[Maximum](./Org.OData.Validation.V1.xml#L81:~:text=Maximum value that a property, parameter, or term can have.
    Can be annotated with:
    • [Exclusive](#Exclusive)
    -[Exclusive](./Org.OData.Validation.V1.xml#L90:~:text=Tags a Minimum or Maximum as exclusive, i.e. an open interval boundary. -[AllowedValues](./Org.OData.Validation.V1.xml#L94:~:text=A collection of valid values for the annotated property, parameter, or type definition -[MultipleOf](./Org.OData.Validation.V1.xml#L108:~:text=The value of the annotated property, parameter, or term must be an integer multiple of this positive value. For temporal types, the value is measured in seconds. -[Constraint](./Org.OData.Validation.V1.xml#L112:~:text=Condition that the annotation target has to fulfill -[ItemsOf](./Org.OData.Validation.V1.xml#L125:~:text=A list of constraints describing that entities related via one navigation property MUST also be related via another, collection-valued navigation property. The same `path` value MUST NOT occur more than once.
    Example: entity type `Customer` has navigation properties `AllOrders`, `OpenOrders`, and `ClosedOrders`. The term allows to express that items of `OpenOrders` and `ClosedOrders` are also items of the `AllOrders` navigation property, even though they are defined in an `Orders` entity set. -[OpenPropertyTypeConstraint](./Org.OData.Validation.V1.xml#L143:~:text=Dynamic properties added to the annotated open structured type are restricted to the listed types. -[DerivedTypeConstraint](./Org.OData.Validation.V1.xml#L147:~:text=Values are restricted to types that are both identical to or derived from the declared type and a type listed in this collection.
    This allows restricting values to certain sub-trees of an inheritance hierarchy, including hierarchies starting at the [Built-In Abstract Types](https://docs.oasis-open.org/odata/odata-csdl-json/v4.01/odata-csdl-json-v4.01.html#sec_BuiltInAbstractTypes). Types listed in this collection are ignored if they are not derived from the declared type of the annotated model element or would not be allowed as declared type of the annotated model element.
    When applied to a collection-valued element, this annotation specifies the types allowed for members of the collection without mentioning the `Collection()` wrapper. The SingleOrCollectionType may only include the `Collection()` wrapper if the annotation is applied to an element with declared type `Edm.Untyped`. -[AllowedTerms](./Org.OData.Validation.V1.xml#L166:~:text=Annotate a term of type Edm.AnnotationPath, or a property of type Edm.AnnotationPath that is used within a structured term, to restrict the terms that can be targeted by the path.
    The annotation path expression is intended to end in a path segment with one of the listed terms. For forward compatibility, clients should be prepared for the annotation to reference terms besides those listed. -[ApplicableTerms](./Org.OData.Validation.V1.xml#L172:~:text=Names of specific terms that are applicable and may be applied in the current context. This annotation does not restrict the use of other terms. -[MaxItems](./Org.OData.Validation.V1.xml#L176:~:text=The annotated collection must have at most the specified number of items. -[MinItems](./Org.OData.Validation.V1.xml#L180:~:text=The annotated collection must have at least the specified number of items. +[Pattern](Org.OData.Validation.V1.xml#L67)|String|The pattern that a string property, parameter, or term must match. This SHOULD be a valid regular expression, according to the ECMA 262 regular expression dialect. +[Minimum](Org.OData.Validation.V1.xml#L72)|PrimitiveType|Minimum value that a property, parameter, or term can have.
    Can be annotated with:
    • [Exclusive](#Exclusive)
    +[Maximum](Org.OData.Validation.V1.xml#L81)|PrimitiveType|Maximum value that a property, parameter, or term can have.
    Can be annotated with:
    • [Exclusive](#Exclusive)
    +[Exclusive](Org.OData.Validation.V1.xml#L90)|[Tag](Org.OData.Core.V1.md#Tag)|Tags a Minimum or Maximum as exclusive, i.e. an open interval boundary. +[AllowedValues](Org.OData.Validation.V1.xml#L94)|\[[AllowedValue](#AllowedValue)\]|A collection of valid values for the annotated property, parameter, or type definition +[MultipleOf](Org.OData.Validation.V1.xml#L108)|Decimal|The value of the annotated property, parameter, or term must be an integer multiple of this positive value. For temporal types, the value is measured in seconds. +[Constraint](Org.OData.Validation.V1.xml#L112)|[ConstraintType](#ConstraintType)|Condition that the annotation target has to fulfill +[ItemsOf](Org.OData.Validation.V1.xml#L125)|\[[ItemsOfType](#ItemsOfType)\]|A list of constraints describing that entities related via one navigation property MUST also be related via another, collection-valued navigation property. The same `path` value MUST NOT occur more than once.
    Example: entity type `Customer` has navigation properties `AllOrders`, `OpenOrders`, and `ClosedOrders`. The term allows to express that items of `OpenOrders` and `ClosedOrders` are also items of the `AllOrders` navigation property, even though they are defined in an `Orders` entity set. +[OpenPropertyTypeConstraint](Org.OData.Validation.V1.xml#L143)|\[[SingleOrCollectionType](#SingleOrCollectionType)\]|Dynamic properties added to the annotated open structured type are restricted to the listed types. +[DerivedTypeConstraint](Org.OData.Validation.V1.xml#L147)|\[[SingleOrCollectionType](#SingleOrCollectionType)\]|Values are restricted to types that are both identical to or derived from the declared type and a type listed in this collection.
    This allows restricting values to certain sub-trees of an inheritance hierarchy, including hierarchies starting at the [Built-In Abstract Types](https://docs.oasis-open.org/odata/odata-csdl-json/v4.01/odata-csdl-json-v4.01.html#sec_BuiltInAbstractTypes). Types listed in this collection are ignored if they are not derived from the declared type of the annotated model element or would not be allowed as declared type of the annotated model element.
    When applied to a collection-valued element, this annotation specifies the types allowed for members of the collection without mentioning the `Collection()` wrapper. The SingleOrCollectionType may only include the `Collection()` wrapper if the annotation is applied to an element with declared type `Edm.Untyped`. +[AllowedTerms](Org.OData.Validation.V1.xml#L166)|\[[QualifiedTermName](Org.OData.Core.V1.md#QualifiedTermName)\]|Annotate a term of type Edm.AnnotationPath, or a property of type Edm.AnnotationPath that is used within a structured term, to restrict the terms that can be targeted by the path.
    The annotation path expression is intended to end in a path segment with one of the listed terms. For forward compatibility, clients should be prepared for the annotation to reference terms besides those listed. +[ApplicableTerms](Org.OData.Validation.V1.xml#L172)|\[[QualifiedTermName](Org.OData.Core.V1.md#QualifiedTermName)\]|Names of specific terms that are applicable and may be applied in the current context. This annotation does not restrict the use of other terms. +[MaxItems](Org.OData.Validation.V1.xml#L176)|Int64|The annotated collection must have at most the specified number of items. +[MinItems](Org.OData.Validation.V1.xml#L180)|Int64|The annotated collection must have at least the specified number of items. -## [AllowedValue](./Org.OData.Validation.V1.xml#L97:~:text= -## [ConstraintType](./Org.OData.Validation.V1.xml#L115:~:text= -## [ItemsOfType](./Org.OData.Validation.V1.xml#L133:~:text= -## [SingleOrCollectionType](./Org.OData.Validation.V1.xml#L162:~:text=This entity set or collection supports the `$apply` system query option -[ApplySupportedDefaults](./Org.OData.Aggregation.V1.xml#L88:~:text=Default support of the `$apply` system query option for all collection-valued resources in the container

    Annotating term ApplySupported for a specific collection-valued resource overrides the default support with the specified properties using PATCH semantics:

    • Primitive or collection-valued properties specified in ApplySupported replace the corresponding properties specified in ApplySupportedDefaults
    • Complex-valued properties specified in ApplySupported override the corresponding properties specified in ApplySupportedDefaults using PATCH semantics recursively
    • Properties specified neither in ApplySupported nor in ApplySupportedDefaults have their default value
    -[Groupable](./Org.OData.Aggregation.V1.xml#L305:~:text=Deprecated in favor of [`ApplySupported/GroupableProperties`](#ApplySupported) -[Aggregatable](./Org.OData.Aggregation.V1.xml#L317:~:text=Deprecated in favor of [`ApplySupported/AggregatableProperties`](#ApplySupported) -[CustomAggregate](./Org.OData.Aggregation.V1.xml#L329:~:text=Dynamic property that can be used in the `aggregate` transformation
    This term MUST be applied with a Qualifier, the Qualifier value is the name of the dynamic property. The value of the annotation MUST be the qualified name of a primitive type. The aggregated value will be of that type. -[ContextDefiningProperties](./Org.OData.Aggregation.V1.xml#L335:~:text=The annotated property or custom aggregate is only well-defined in the context of these properties
    The context-defining properties need either be part of the result entities, or be restricted to a single value by a pre-filter operation. Examples are postal codes within a country, or monetary amounts whose context is the unit of currency. -[LeveledHierarchy](./Org.OData.Aggregation.V1.xml#L342:~:text=Defines a leveled hierarchy (OData-Data-Agg-v4.0, section 5.5.1) -[RecursiveHierarchy](./Org.OData.Aggregation.V1.xml#L346:~:text=Defines a recursive hierarchy (OData-Data-Agg-v4.0, section 5.5.2) -[UpPath](./Org.OData.Aggregation.V1.xml#L519:~:text=The string values of the node identifiers in a path from the annotated node to a start node in a traversal of a recursive hierarchy
    This instance annotation occurs in the result set after a `traverse` transformation (OData-Data-Agg-v4.0, section 6.2.2.2). A use case for this is traversal with multiple parents, when this annotation takes as value one parent node identifier followed by one grandparent node identifier and so on. -[AvailableOnAggregates](./Org.OData.Aggregation.V1.xml#L528:~:text=This function is available on aggregated entities if the `RequiredProperties` are still defined +[ApplySupported](Org.OData.Aggregation.V1.xml#L82)|[ApplySupportedType](#ApplySupportedType)|This entity set or collection supports the `$apply` system query option +[ApplySupportedDefaults](Org.OData.Aggregation.V1.xml#L88)|[ApplySupportedBase](#ApplySupportedBase)|Default support of the `$apply` system query option for all collection-valued resources in the container

    Annotating term ApplySupported for a specific collection-valued resource overrides the default support with the specified properties using PATCH semantics:

    • Primitive or collection-valued properties specified in ApplySupported replace the corresponding properties specified in ApplySupportedDefaults
    • Complex-valued properties specified in ApplySupported override the corresponding properties specified in ApplySupportedDefaults using PATCH semantics recursively
    • Properties specified neither in ApplySupported nor in ApplySupportedDefaults have their default value
    +[Groupable](Org.OData.Aggregation.V1.xml#L305) *(Deprecated)*|[Tag](Org.OData.Core.V1.md#Tag)|Deprecated in favor of [`ApplySupported/GroupableProperties`](#ApplySupported) +[Aggregatable](Org.OData.Aggregation.V1.xml#L317) *(Deprecated)*|[Tag](Org.OData.Core.V1.md#Tag)|Deprecated in favor of [`ApplySupported/AggregatableProperties`](#ApplySupported) +[CustomAggregate](Org.OData.Aggregation.V1.xml#L329)|String|Dynamic property that can be used in the `aggregate` transformation
    This term MUST be applied with a Qualifier, the Qualifier value is the name of the dynamic property. The value of the annotation MUST be the qualified name of a primitive type. The aggregated value will be of that type. +[ContextDefiningProperties](Org.OData.Aggregation.V1.xml#L335)|\[PropertyPath\]|The annotated property or custom aggregate is only well-defined in the context of these properties
    The context-defining properties need either be part of the result entities, or be restricted to a single value by a pre-filter operation. Examples are postal codes within a country, or monetary amounts whose context is the unit of currency. +[LeveledHierarchy](Org.OData.Aggregation.V1.xml#L342)|\[PropertyPath\]|Defines a leveled hierarchy (OData-Data-Agg-v4.0, section 5.5.1) +[RecursiveHierarchy](Org.OData.Aggregation.V1.xml#L346)|[RecursiveHierarchyType](#RecursiveHierarchyType)|Defines a recursive hierarchy (OData-Data-Agg-v4.0, section 5.5.2) +[UpPath](Org.OData.Aggregation.V1.xml#L519)|\[String\]|The string values of the node identifiers in a path from the annotated node to a start node in a traversal of a recursive hierarchy
    This instance annotation occurs in the result set after a `traverse` transformation (OData-Data-Agg-v4.0, section 6.2.2.2). A use case for this is traversal with multiple parents, when this annotation takes as value one parent node identifier followed by one grandparent node identifier and so on. +[AvailableOnAggregates](Org.OData.Aggregation.V1.xml#L528)|[AvailableOnAggregatesType](#AvailableOnAggregatesType)|This function is available on aggregated entities if the `RequiredProperties` are still defined ## Functions -### [isnode](./Org.OData.Aggregation.V1.xml#L371:~:text= -### [isroot](./Org.OData.Aggregation.V1.xml#L384:~:text= -### [isdescendant](./Org.OData.Aggregation.V1.xml#L397:~:text= -### [isancestor](./Org.OData.Aggregation.V1.xml#L429:~:text= -### [issibling](./Org.OData.Aggregation.V1.xml#L461:~:text= -### [isleaf](./Org.OData.Aggregation.V1.xml#L477:~:text= -### [rollupnode](./Org.OData.Aggregation.V1.xml#L490:~:text=Every instance in the output set of a `groupby` transformation with M `rolluprecursive` operators has M relationships to M nodes in M recursive hierarchies. This function returns the node x with path r to the root in relationship number N. If several such `groupby` transformations are nested, this function refers to the innermost one. -[→](./Org.OData.Aggregation.V1.xml#L516:~:text=Every instance in the output set of a `groupby` transformation with M `rolluprecursive` operators has M relationships to M nodes in M recursive hierarchies. This function returns the node x with path r to the root in relationship number N. If several such `groupby` transformations are nested, this function refers to the innermost one. +[→](Org.OData.Aggregation.V1.xml#L516)|EntityType| -## [ApplySupportedBase](./Org.OData.Aggregation.V1.xml#L99:~:text= -## [ApplySupportedType](./Org.OData.Aggregation.V1.xml#L118:~:text= -## [AggregatablePropertyType](./Org.OData.Aggregation.V1.xml#L137:~:text= -## [Transformation](./Org.OData.Aggregation.V1.xml#L155:~:text= -## [AggregationMethod](./Org.OData.Aggregation.V1.xml#L255:~:text=For navigation properties, it counts the distinct entities in the union of all entities related to entities in the input set. For collection-valued primitive properties, it counts the distinct items in the union of all collection values in the input set. +[sum](Org.OData.Aggregation.V1.xml#L264)|Can be applied to numeric values to return the sum of the non-null values, or null if there are no non-null values or the input set is empty +[min](Org.OData.Aggregation.V1.xml#L268)|Can be applied to values with a totally ordered domain to return the smallest of the non-null values, or null if there are no non-null values or the input set is empty +[max](Org.OData.Aggregation.V1.xml#L272)|Can be applied to values with a totally ordered domain to return the largest of the non-null values, or null if there are no non-null values or the input set is empty +[average](Org.OData.Aggregation.V1.xml#L276)|Can be applied to numeric values to return the sum of the non-null values divided by the count of the non-null values, or null if there are no non-null values or the input set is empty +[countdistinct](Org.OData.Aggregation.V1.xml#L280)|Counts the distinct values, omitting any null values
    For navigation properties, it counts the distinct entities in the union of all entities related to entities in the input set. For collection-valued primitive properties, it counts the distinct items in the union of all collection values in the input set. -## [RollupType](./Org.OData.Aggregation.V1.xml#L292:~:text= -## [RecursiveHierarchyType](./Org.OData.Aggregation.V1.xml#L350:~:text= -## [HierarchyQualifier](./Org.OData.Aggregation.V1.xml#L359:~:text= -## [AvailableOnAggregatesType](./Org.OData.Aggregation.V1.xml#L531:~:text= -## [NavigationPropertyAggregationCapabilities](./Org.OData.Aggregation.V1.xml#L537:~:text= -## [CustomAggregateType](./Org.OData.Aggregation.V1.xml#L555:~:text=At least one of the specified security schemes are required to make a request against the service -[Authorizations](./Org.OData.Authorization.V1.xml#L78:~:text=Lists the methods supported by the service to authorize access +[SecuritySchemes](Org.OData.Authorization.V1.xml#L65)|\[[SecurityScheme](#SecurityScheme)\]|At least one of the specified security schemes are required to make a request against the service +[Authorizations](Org.OData.Authorization.V1.xml#L78)|\[[Authorization](#Authorization)\]|Lists the methods supported by the service to authorize access -## [SecurityScheme](./Org.OData.Authorization.V1.xml#L69:~:text= -## [*Authorization*](./Org.OData.Authorization.V1.xml#L82:~:text= -## [OpenIDConnect](./Org.OData.Authorization.V1.xml#L92:~:text= -## [Http](./Org.OData.Authorization.V1.xml#L99:~:text= -## [*OAuthAuthorization*](./Org.OData.Authorization.V1.xml#L108:~:text= -## [OAuth2ClientCredentials](./Org.OData.Authorization.V1.xml#L118:~:text= -## [OAuth2Implicit](./Org.OData.Authorization.V1.xml#L125:~:text= -## [OAuth2Password](./Org.OData.Authorization.V1.xml#L133:~:text= -## [OAuth2AuthCode](./Org.OData.Authorization.V1.xml#L140:~:text= -## [AuthorizationScope](./Org.OData.Authorization.V1.xml#L151:~:text= -## [ApiKey](./Org.OData.Authorization.V1.xml#L164:~:text= -## [KeyLocation](./Org.OData.Authorization.V1.xml#L173:~:text= -## [SchemeName](./Org.OData.Authorization.V1.xml#L185:~:text=The JSON Schema for JSON values of the annotated media entity type, property, parameter, return type, term, or type definition
    The schema can be a schema reference, i.e. `{"$ref":"url/of/schemafile#/path/to/schema/within/schemafile"}` +[Schema](Org.OData.JSON.V1.xml#L67)|[JSON](#JSON)|The JSON Schema for JSON values of the annotated media entity type, property, parameter, return type, term, or type definition
    The schema can be a schema reference, i.e. `{"$ref":"url/of/schemafile#/path/to/schema/within/schemafile"}` -## [JSON](./Org.OData.JSON.V1.xml#L75:~:text=Repeatable requests are supported for the annotated service, entity set, or action
    Annotations on entity set or action import level override an annotation on entity container level, and an annotation on action level override an annotation on action import level. -[DeleteWithClientIDSupported](./Org.OData.Repeatability.V1.xml#L74:~:text=Deletion of remembered requests by client ID is supported
    Clients that specify a `RepeatabilityClientID` header can delete all remembered requests for that client ID by sending a
    `DELETE $RepeatableRequestsWithClientID/{Repeatability-Client-ID}`
    request to the service root. -[DeleteWithRequestIDSupported](./Org.OData.Repeatability.V1.xml#L85:~:text=Deletion of remembered requests by request ID is supported
    Clients can delete a single remembered request by sending a
    `DELETE $RepeatableRequestWithRequestID/{Repeatability-Request-ID}`
    request to the service root. +[Supported](Org.OData.Repeatability.V1.xml#L69)|[Tag](Org.OData.Core.V1.md#Tag)|Repeatable requests are supported for the annotated service, entity set, or action
    Annotations on entity set or action import level override an annotation on entity container level, and an annotation on action level override an annotation on action import level. +[DeleteWithClientIDSupported](Org.OData.Repeatability.V1.xml#L74)|[Tag](Org.OData.Core.V1.md#Tag)|Deletion of remembered requests by client ID is supported
    Clients that specify a `RepeatabilityClientID` header can delete all remembered requests for that client ID by sending a
    `DELETE $RepeatableRequestsWithClientID/{Repeatability-Client-ID}`
    request to the service root. +[DeleteWithRequestIDSupported](Org.OData.Repeatability.V1.xml#L85)|[Tag](Org.OData.Core.V1.md#Tag)|Deletion of remembered requests by request ID is supported
    Clients can delete a single remembered request by sending a
    `DELETE $RepeatableRequestWithRequestID/{Repeatability-Request-ID}`
    request to the service root. ------- @@ -1773,13 +1773,13 @@ Terms for describing time-dependent data Term|Type|Description :---|:---|:---------- -[ApplicationTimeSupport](./Org.OData.Temporal.V1.xml#L68:~:text=This collection supports temporal requests +[ApplicationTimeSupport](Org.OData.Temporal.V1.xml#L68)|[ApplicationTimeSupportType](#ApplicationTimeSupportType)|This collection supports temporal requests ## Actions -### [Update](./Org.OData.Temporal.V1.xml#L172:~:text=The delta time slices need not contain all properties, but at least the boundary values of the period to change. An absent object key property matches any key property value. New time slices are processed in the order of the collection, which especially matters if some of the specified change periods overlap. -[→](./Org.OData.Temporal.V1.xml#L191:~:text=The delta time slices need not contain all properties, but at least the boundary values of the period to change. An absent object key property matches any key property value. New time slices are processed in the order of the collection, which especially matters if some of the specified change periods overlap. +[→](Org.OData.Temporal.V1.xml#L191)|\[[TimesliceWithPeriod](#TimesliceWithPeriod)\]|Modified time slices -### [Upsert](./Org.OData.Temporal.V1.xml#L196:~:text=The delta time slices must contain all properties that are needed for insertion. New time slices are processed in the order of the collection, which especially matters if some of the specified change periods overlap. -[→](./Org.OData.Temporal.V1.xml#L208:~:text=The delta time slices must contain all properties that are needed for insertion. New time slices are processed in the order of the collection, which especially matters if some of the specified change periods overlap. +[→](Org.OData.Temporal.V1.xml#L208)|\[[TimesliceWithPeriod](#TimesliceWithPeriod)\]|Modified time slices -### [Delete](./Org.OData.Temporal.V1.xml#L213:~:text=The delta time slices contain only the boundary values of the period to delete and (parts of) the object key. An absent object key property matches any key property value. -[→](./Org.OData.Temporal.V1.xml#L231:~:text=The delta time slices contain only the boundary values of the period to delete and (parts of) the object key. An absent object key property matches any key property value. +[→](Org.OData.Temporal.V1.xml#L231)|\[[TimesliceWithPeriod](#TimesliceWithPeriod)\]|Deleted (sub-periods of) time slices -## [ApplicationTimeSupportType](./Org.OData.Temporal.V1.xml#L75:~:text= -## [*UnitOfTime*](./Org.OData.Temporal.V1.xml#L87:~:text= -## [UnitOfTimeDateTimeOffset](./Org.OData.Temporal.V1.xml#L91:~:text= -## [UnitOfTimeDate](./Org.OData.Temporal.V1.xml#L98:~:text= -## [*Timeline*](./Org.OData.Temporal.V1.xml#L107:~:text= -## [TimelineSnapshot](./Org.OData.Temporal.V1.xml#L111:~:text= -## [TimelineVisible](./Org.OData.Temporal.V1.xml#L121:~:text=If an upper boundary property does not specify a default value, a default value of `max` is assumed. -[ObjectKey](./Org.OData.Temporal.V1.xml#L137:~:text=A temporal object is a set of facts whose changes over application time are tracked by the service. The entities in the annotated collection belong to potentially multiple temporal objects, and each temporal object is uniquely identified by the values of the specified object key properties. Object key properties follow the same rules as entity key properties. If no object key is specified, only a single temporal object belongs to the annotated collection. +[PeriodStart](Org.OData.Temporal.V1.xml#L128)|PropertyPath|Property containing lower boundary of a period +[PeriodEnd](Org.OData.Temporal.V1.xml#L131)|PropertyPath|Property containing upper boundary of a period
    If an upper boundary property does not specify a default value, a default value of `max` is assumed. +[ObjectKey](Org.OData.Temporal.V1.xml#L137)|\[PropertyPath\]|The set of primitive properties that identify a temporal object
    A temporal object is a set of facts whose changes over application time are tracked by the service. The entities in the annotated collection belong to potentially multiple temporal objects, and each temporal object is uniquely identified by the values of the specified object key properties. Object key properties follow the same rules as entity key properties. If no object key is specified, only a single temporal object belongs to the annotated collection. -## [TimesliceWithPeriod](./Org.OData.Temporal.V1.xml#L143:~:text=When it appears in the return type of an action in this vocabulary, the time slice has the same entity set as the binding parameter value. +[PeriodStart](Org.OData.Temporal.V1.xml#L155)|PrimitiveType?|Lower boundary of the time slice +[PeriodEnd](Org.OData.Temporal.V1.xml#L158)|PrimitiveType?|Upper boundary of the time slice +[Timeslice](Org.OData.Temporal.V1.xml#L161)|EntityType|A time slice with the same entity type as the binding parameter of the action
    When it appears in the return type of an action in this vocabulary, the time slice has the same entity set as the binding parameter value. ------- @@ -1988,6 +1988,7 @@ The contributions of the OASIS OData Technical Committee members, enumerated in | Revision | Date | Editor | Changes Made | | :--- | :--- | :--- | :--- | |Committee Specification Draft 01|2016-12-08|Michael Pizzo
    Ralf Handl
    Ram Jeyaraman| Documentation automatically extracted from XML source files| +|Committee Specification Draft 02|2024-06-19|Michael Pizzo
    Ralf Handl
    Heiko Theißen| Documentation automatically extracted from XML source files| ------- diff --git a/docs/odata-vocabularies/odata-vocabularies.pdf b/docs/odata-vocabularies/odata-vocabularies.pdf index d195e9012..7fc583c5c 100644 Binary files a/docs/odata-vocabularies/odata-vocabularies.pdf and b/docs/odata-vocabularies/odata-vocabularies.pdf differ diff --git a/docs/odata-vocabularies/styles/odata.css b/docs/odata-vocabularies/styles/odata.css index 43fde0291..279d22740 100644 --- a/docs/odata-vocabularies/styles/odata.css +++ b/docs/odata-vocabularies/styles/odata.css @@ -215,17 +215,17 @@ hr:first-of-type { } @media screen { - details:not([open]) summary { + details:not([open]) > summary { list-style: disclosure-closed; } - details[open] summary { + details[open] > summary { list-style: disclosure-open; } } @media print { - details summary { + details > summary { list-style: none; } } diff --git a/lib/md2html.js b/lib/md2html.js index 2822972b2..37b275fc7 100644 --- a/lib/md2html.js +++ b/lib/md2html.js @@ -4,6 +4,11 @@ const filter = require("pandoc-filter"); var level = 0; +function enddetails(l, content) { + for (var i = l; i <= level; i++) + content.unshift(filter.RawBlock("html", `
    `)); +} + filter.stdio(function ({ t, c }, format, meta) { if ( t === "Header" && @@ -14,9 +19,13 @@ filter.stdio(function ({ t, c }, format, meta) { filter.Header(...c), filter.RawBlock("html", ``), ]; - for (var i = c[0]; i <= level; i++) - content.unshift(filter.RawBlock("html", ``)); + enddetails(c[0], content); level = c[0]; return content; + } else if (t === "HorizontalRule") { + var content = [{ t, c }]; + enddetails(1, content); + level = 0; + return content; } }); diff --git a/lib/vocab2html.js b/lib/vocab2html.js index c284ef5f0..7a3599c61 100644 --- a/lib/vocab2html.js +++ b/lib/vocab2html.js @@ -16,10 +16,14 @@ filter.stdio(function ({ t, c }, format, meta) { else if (t === "RawInline" && (m = c[1].match(/^$/))) { c[1] = ``; return filter.RawInline(...c); - } else if (t === "Link" && !/^https?:\/\//.test(c[2][0])) { + } else if (t === "Link" && !/^(https?:\/\/|mailto:)/.test(c[2][0])) { if (c[2][0].startsWith("#")) c[2][0] = "#" + vocab + c[2][0].substring(1); else if ((m = c[2][0].match(/^Org\.OData\.(.*?)\.V1\.md#/))) c[2][0] = `#${m[1]}-${c[2][0].substring(m[0].length)}`; + else if (/^Org\.OData\..*?\.xml#L/.test(c[2][0])) + c[2][0] = + "https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/" + + c[2][0]; else c[2][0] = "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/" + diff --git a/odata-csdl/0 frontmatter.md b/odata-csdl/0 frontmatter.md index 34882506c..14a77af97 100644 --- a/odata-csdl/0 frontmatter.md +++ b/odata-csdl/0 frontmatter.md @@ -82,9 +82,9 @@ This specification is related to: $$$description$$$ #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData CSDL". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). diff --git a/odata-csdl/14 Vocabulary and Annotation.md b/odata-csdl/14 Vocabulary and Annotation.md index c39072444..0124b372f 100644 --- a/odata-csdl/14 Vocabulary and Annotation.md +++ b/odata-csdl/14 Vocabulary and Annotation.md @@ -1219,7 +1219,7 @@ Values are represented as GeoJSON, see [OData-JSON](#ODataJSON). ::: {.varjson .example} Example ##ex: ```json -"Location": {"type": "Point", "coordinates": [142.1,64.1]} +"Location": { "type": "Point", "coordinates": [142.1,64.1] } ``` ::: @@ -1263,7 +1263,7 @@ and the media type of the stream as its value. ::: {.varjson .example} Example ##ex: ```json -"JsonStream": {"foo":true,"bar":42}, +"JsonStream": { "foo":true,"bar":42 }, "JsonStream@Core.MediaType": "application/json", "TextStream": "Hello World!", diff --git a/odata-data-aggregation-ext/0 frontmatter.md b/odata-data-aggregation-ext/0 frontmatter.md index 82f2c2343..fb867e01c 100644 --- a/odata-data-aggregation-ext/0 frontmatter.md +++ b/odata-data-aggregation-ext/0 frontmatter.md @@ -65,9 +65,9 @@ This specification is related to: $$$description$$$ #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData Data Aggregation". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). diff --git a/odata-json-format/0 frontmatter.md b/odata-json-format/0 frontmatter.md index d33b88f5c..c2d0c201d 100644 --- a/odata-json-format/0 frontmatter.md +++ b/odata-json-format/0 frontmatter.md @@ -58,9 +58,9 @@ This specification is related to: $$$description$$$ #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData JSON Format". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). diff --git a/odata-json-format/7 Structural Property.md b/odata-json-format/7 Structural Property.md index 691e5069c..7860651a0 100644 --- a/odata-json-format/7 Structural Property.md +++ b/odata-json-format/7 Structural Property.md @@ -25,7 +25,9 @@ Values of types `Edm.Byte`, `Edm.SByte`, `Edm.Single`, `Edm.Double`, and `Edm.Decimal` are represented as JSON numbers, except for `-INF`, `INF`, and `NaN` which are -represented as strings. +represented as strings, and except when the [`IEEE754Compatible`](#ControllingtheRepresentationofNumbers) +format parameter demands representation of `Edm.Int64` and `Edm.Decimal` +as strings. Values of type `Edm.String` are represented as JSON strings, using the JSON string escaping rules. @@ -82,7 +84,7 @@ Example ##ex: "GuidValue": "01234567-89ab-cdef-0123-456789abcdef", "Int64Value": 0, "ColorEnumValue": "Yellow", - "GeographyPoint": {"type": "Point", "coordinates": [142.1,64.1]} + "GeographyPoint": { "type": "Point", "coordinates": [142.1,64.1] } } ``` ::: @@ -138,10 +140,6 @@ Example ##ex: partial collection of strings with next link ``` ::: -A collection of primitive values that occurs in a property of type `Edm.Untyped` -is interpreted as a collection of `Edm.Boolean`, `Edm.String`, and `Edm.Decimal` values, -depending on the JavaScript type. - ## ##subsec Collection of Complex Values A collection of complex values is represented as a JSON array; each @@ -183,7 +181,8 @@ collections. The value of a property of type `Collection(Edm.Untyped)`MUST be a collection, and it MAY contain any combination of primitive values, -structural values, and collections. +structural values, and collections. Enumeration values within an untyped +collection SHOULD be represented as a string, using the `enumerationMember`. Untyped values are the only place where a collection can directly contain a collection, or a collection can contain a mix of primitive @@ -195,6 +194,11 @@ they are annotated with the control information, in which case they MUST conform to the type described by the control information. +A primitive value within an untyped collection is interpreted as +an `Edm.Boolean`, `Edm.String`, or `Edm.Decimal` value, +depending on the JavaScript type. + +Collections directly contained within an untyped collection are themselves untyped. ------- # ##sec Navigation Property @@ -369,7 +373,7 @@ PATCH http://host/service/Products(42) HTTP/1.1 Content-Type: application/json { - "Category": {"@id": "Categories(6)"} + "Category": { "@id": "Categories(6)" } } ``` ::: diff --git a/odata-protocol/0 frontmatter.md b/odata-protocol/0 frontmatter.md index c05fcbd6e..111c74673 100644 --- a/odata-protocol/0 frontmatter.md +++ b/odata-protocol/0 frontmatter.md @@ -64,9 +64,9 @@ This specification is related to: $$$description$$$ #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData Protocol". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). diff --git a/odata-protocol/11.4 Data Modification.md b/odata-protocol/11.4 Data Modification.md index 31962a301..a20d59ce0 100644 --- a/odata-protocol/11.4 Data Modification.md +++ b/odata-protocol/11.4 Data Modification.md @@ -250,8 +250,8 @@ within the `Manager` and `DirectReports` navigation properties "LastName": "Griswold", "Manager": { "@id": "Employees(0)" }, "DirectReports": [ - {"@id": "Employees(5)"}, - {"@id": "Employees(6)"} + { "@id": "Employees(5)" }, + { "@id": "Employees(6)" } ] } ``` @@ -620,8 +620,10 @@ annotating the singleton with the term `Capabilities.DeleteRestrictions` (nested property `Deletable` with value `true`) defined in [OData-VocCap](#ODataVocCap). -On successful completion of the delete, the response MUST be -[`204 No Content`](#ResponseCode204NoContent) and contain an empty body. +On successful completion of the delete, the response MUST either be +[`204 No Content`](#ResponseCode204NoContent) and contain an empty body, +or [`200 OK`](#ResponseCode200OK) and contain a representation of a +deleted entity according to the specified format. Services MUST implicitly remove relations to and from an entity when deleting it; clients need not delete the relations explicitly. diff --git a/odata-protocol/11.7 Batch Requests.md b/odata-protocol/11.7 Batch Requests.md index 02d27b193..9675b2f87 100644 --- a/odata-protocol/11.7 Batch Requests.md +++ b/odata-protocol/11.7 Batch Requests.md @@ -225,7 +225,7 @@ PATCH /path/service/People(1) HTTP/1.1 Host: myserver.mydomain.org:1234 Content-Type: application/json -{"Name": "Peter"} +{ "Name": "Peter" } ``` ::: diff --git a/odata-temporal-ext/0 frontmatter.md b/odata-temporal-ext/0 frontmatter.md index e705ac656..23be0931f 100644 --- a/odata-temporal-ext/0 frontmatter.md +++ b/odata-temporal-ext/0 frontmatter.md @@ -67,9 +67,9 @@ This specification is related to: $$$description$$$ #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData Temporal". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). diff --git a/odata-url-conventions/0 frontmatter.md b/odata-url-conventions/0 frontmatter.md index bc7abd3ae..33caf6ad1 100644 --- a/odata-url-conventions/0 frontmatter.md +++ b/odata-url-conventions/0 frontmatter.md @@ -63,9 +63,9 @@ This specification is related to: $$$description$$$ #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData URL Conventions". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). diff --git a/odata-url-conventions/4 Resource Path.md b/odata-url-conventions/4 Resource Path.md index bf60eadd4..361f4e645 100644 --- a/odata-url-conventions/4 Resource Path.md +++ b/odata-url-conventions/4 Resource Path.md @@ -575,7 +575,34 @@ Note: there is no literal representation for `Edm.Stream` values in URLs, so it is not possible to pass `Edm.Stream` values to parameters of function imports or to non-binding parameters of bound functions used in the resource path. Function expressions within query options can use [path expressions](#PathExpressions) -of type `Edm.Stream` as values of non-binding function parameters. +of type `Edm.Stream` as values of non-binding function parameters. The aliases can contain [common +expressions](#CommonExpressionSyntax). In the case of a bound function +these MAY contain [path expressions](#PathExpressions), which +the service evaluates on the binding parameter value. + +::: example +Example ##ex: An employee's leave requests for the next two weeks +pending their manager's approval: +``` +http://host/service/Employees(23)/self.PendingLeaveRequests(StartDate=@start, + EndDate=@end,Approver=@approver) + ?@start=now() + &@end=now() add duration'P14D' + &@approver=Manager +``` +The expression `Manager` is evaluated on the binding parameter value `Employees(23)`. + +When invoking an unbound function through a function import, expressions involving +paths must start with `$root`: +``` +http://host/service/PendingLeaveRequests(Requester=@requester, + StartDate=@start,EndDate=@end,Approver=@approver) + ?@requester=$root/services/Employee(23) + &@start=now() + &@end=now() add duration'P14D' + &@approver=$root/services/Employee(23)/Manager +``` +::: ## ##subsec Addressing a Property @@ -762,7 +789,8 @@ Example ##ex: filter expression with type cast; will evaluate to `null` for all non-`VipCustomer` instances and thus return only instances of `VipCustomer` ``` -http://host/service/Customers?$filter=Model.VipCustomer/PercentageOfVipPromotionProductsOrdered gt 80 +http://host/service/Customers + ?$filter=Model.VipCustomer/PercentageOfVipPromotionProductsOrdered gt 80 ``` ::: diff --git a/odata-url-conventions/5 Query Options.md b/odata-url-conventions/5 Query Options.md index 7b2daf464..fb2df09f6 100644 --- a/odata-url-conventions/5 Query Options.md +++ b/odata-url-conventions/5 Query Options.md @@ -1527,7 +1527,8 @@ Example ##ex: all categories along with their products used in some order with a deviating unit price. The unprefixed `UnitPrice` in the argument expression is evaluated in the scope of the expanded `Products`. ``` -http://host/service/Categories?$expand=Products($filter=OrderItems/any(oi:oi/UnitPrice ne UnitPrice)) +http://host/service/Categories?$expand=Products( + $filter=OrderItems/any(oi:oi/UnitPrice ne UnitPrice)) ``` ::: @@ -1760,14 +1761,16 @@ Example ##ex: products ordered by a set of customers, where the set of customers is passed as a JSON array containing the resource paths from `$root` to each customer ``` -http://host/service/ProductsOrderedBy(Customers=@c)?@c=[$root/Customers('ALFKI'),$root/Customers('BLAUS')] +http://host/service/ProductsOrderedBy(Customers=@c) + ?@c=[$root/Customers('ALFKI'),$root/Customers('BLAUS')] ``` ::: ::: example Example ##ex: function call returning the average rating of a given employee by their peers (employees in department D1) ``` -http://host/service/Employees('A1245')/self.AvgRating(RatedBy=@peers)?@peers=$root/Employees/$filter(Department eq 'D1') +http://host/service/Employees('A1245')/self.AvgRating(RatedBy=@peers) + ?@peers=$root/Employees/$filter(Department eq 'D1') ``` ::: @@ -2080,7 +2083,8 @@ http://host/service/Categories?$expand=Products/Sales.PremierProduct/$ref Example ##ex: all categories and for each category the references of all related premier products with a current promotion equal to `null` ``` -http://host/service/Categories?$expand=Products/Sales.PremierProduct/$ref($filter=CurrentPromotion eq null) +http://host/service/Categories + ?$expand=Products/Sales.PremierProduct/$ref($filter=CurrentPromotion eq null) ``` ::: @@ -2240,7 +2244,8 @@ option, see [section ##SystemQueryOptionfilter]. Example ##ex: name and description of all products, plus name of expanded category ``` -http://host/service/Products?$select=Name,Description&$expand=Category($select=Name) +http://host/service/Products?$select=Name,Description + &$expand=Category($select=Name) ``` ::: @@ -2258,7 +2263,9 @@ is of the derived type `Namespace.PreferredSupplier`, together with the `Street` property of the complex property `Address`, and the Location property of the derived complex type `Namespace.AddressWithLocation` ``` -http://host/service/Suppliers?$select=Namespace.PreferredSupplier/AccountRepresentative,Address/Street,Address/Namespace.AddressWithLocation/Location +http://host/service/Suppliers + ?$select=Namespace.PreferredSupplier/AccountRepresentative, + Address/Street,Address/Namespace.AddressWithLocation/Location ``` ::: @@ -2276,7 +2283,10 @@ NOT be specified in more than one expand. Example ##ex: select up to five addresses whose `City` starts with an `H`, sorted, and with the `Country` expanded ``` -http://host/service/Customers?$select=Addresses($filter=startswith(City,'H');$top=5;$orderby=Country/Name,City,Street)&$expand=Addresses/Country +http://host/service/Customers + ?$select=Addresses($filter=startswith(City,'H');$top=5; + $orderby=Country/Name,City,Street) + &$expand=Addresses/Country ``` ::: @@ -2552,7 +2562,8 @@ Example ##ex: JSON array of strings as parameter alias value --- note that `[`, `]`, and `"` need to be percent-encoded in real URLs, the clear-text representation used here is just for readability ``` -http://host/service/Products/Model.WithIngredients(Ingredients=@i)?@i=["Carrots","Ginger","Oranges"] +http://host/service/Products/Model.WithIngredients(Ingredients=@i) + ?@i=["Carrots","Ginger","Oranges"] ``` ::: diff --git a/odata-vocabularies/0 frontmatter.md b/odata-vocabularies/0 frontmatter.md index 01dcdb5a6..a1d8bd9d9 100644 --- a/odata-vocabularies/0 frontmatter.md +++ b/odata-vocabularies/0 frontmatter.md @@ -45,7 +45,7 @@ This specification is related to: * _OData Version 4.02_. Edited by Michael Pizzo, Ralf Handl, and Heiko Theißen. A multi-part Work Product that includes: * _OData Version 4.02 Part 1: Protocol_. Latest stage. https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html * _OData Version 4.02 Part 2: URL Conventions_. Latest stage. https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html - * _ABNF components: OData ABNF Construction Rules Version 4.02 and OData ABNF Test Cases_. https://docs.oasis-open.org/odata/odata/v4.02/$$$stage$$$/abnf/ + * _ABNF components: OData ABNF Construction Rules Version 4.02 and OData ABNF Test Cases_. https://docs.oasis-open.org/odata/odata/v4.02/csd01/abnf/ * _OData Common Schema Definition Language (CSDL) JSON Representation Version 4.02_. Edited by Michael Pizzo, Ralf Handl, and Heiko Theißen. Latest stage: https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html * _OData Common Schema Definition Language (CSDL) XML Representation Version 4.02_. Edited by Michael Pizzo, Ralf Handl, and Heiko Theißen. Latest stage: https://docs.oasis-open.org/odata/odata-csdl-xml/v4.02/odata-csdl-xml-v4.02.html * _OData JSON Format Version 4.02_. Edited by Michael Pizzo, Ralf Handl, and Heiko Theißen. Latest stage: https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html @@ -56,9 +56,9 @@ This specification is related to: $$$description$$$ #### Status: -This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata#technical. +This document was last revised or approved by the OASIS Open Data Protocol (OData) TC on the above date. The level of approval is also listed above. Check the "Latest stage" location noted above for possible later revisions of this document. Any other numbered Versions and other technical work produced by the Technical Committee (TC) are listed at https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2#technical. -TC members should send comments on this specification to the TC's email list. Others should send comments to the TC's public comment list, after subscribing to it by following the instructions at the "Send A Comment" button on the TC's web page at https://www.oasis-open.org/committees/odata/. +TC members should send comments on this specification to the TC's email list. Any individual may submit comments to the TC by sending email to Technical-Committee-Comments@oasis-open.org. Please use a Subject line like "Comment on OData Vocabularies". This specification is provided under the [RF on RAND Terms Mode](https://www.oasis-open.org/policies-guidelines/ipr/#RF-on-RAND-Mode) of the [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/), the mode chosen when the Technical Committee was established. For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the TC's web page (https://www.oasis-open.org/committees/odata/ipr.php). diff --git a/odata-vocabularies/Appendix.md b/odata-vocabularies/Appendix.md index e90fa3f8f..6732d4802 100644 --- a/odata-vocabularies/Appendix.md +++ b/odata-vocabularies/Appendix.md @@ -77,6 +77,8 @@ The contributions of the OASIS OData Technical Committee members, enumerated in | :--- | :--- | :--- | :--- | |Committee Specification Draft 01|2016-12-08|Michael Pizzo
    Ralf Handl
    Ram Jeyaraman| Documentation automatically extracted from XML source files| +|$$$subtitle$$$|$$$pubdateISO$$$|Michael Pizzo
    Ralf Handl
    Heiko Theißen| +Documentation automatically extracted from XML source files| ------- diff --git a/odata-vocabularies/meta.yaml b/odata-vocabularies/meta.yaml index bf604b38f..a4316e58c 100644 --- a/odata-vocabularies/meta.yaml +++ b/odata-vocabularies/meta.yaml @@ -3,8 +3,8 @@ subtitle: Committee Specification Draft 02 filename: odata-vocabularies-v4.0-csd02 stage: csd02 previousStage: csprd01 -pubdate: 28 February 2024 -pubdateISO: '2024-02-28' +pubdate: 19 June 2024 +pubdateISO: '2024-06-19' copyright: © OASIS Open 2024 description: > This prose specification describes a set of OData vocabularies maintained diff --git a/package-lock.json b/package-lock.json index df14a7a62..0a4a8f103 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2094,9 +2094,9 @@ "dev": true }, "node_modules/livereload/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "engines": { "node": ">=8.3.0" diff --git a/zip/odata-vocabularies-v4.0-csd02.zip b/zip/odata-vocabularies-v4.0-csd02.zip new file mode 100644 index 000000000..c8a2aebe8 Binary files /dev/null and b/zip/odata-vocabularies-v4.0-csd02.zip differ