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 @@
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.
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.
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.
-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.
-$Annotations
<
}
}
-$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
-$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
.
$OnDelete
$OpenType
The value of $OpenType
is one of the Boolean literals true
or false
. Absence of the member means false
.
$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.
-
$Nullabl
}
]
-$Enti
$IncludeInServiceDocument
The value of $IncludeInServiceDocument
is one of the Boolean literals true
or false
. Absence of the member means false
.
-
Example 58:
-"Location": {"type": "Point", "coordinates": [142.1,64.1]}
"Location": { "type": "Point", "coordinates": [142.1,64.1] }
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"
}
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.
-OpenUI5 — OData V4 Metadata JSON Format.
https://openui5.hana.ondemand.com/topic/87aac894a40640f89920d7b2a414499b.
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.
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.
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.
-OData does not impose any ordering constraints on XML attributes within XML elements.
-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.
-GET http://example.org/OData.svc/Categories?$filter=Info/ID le 100
-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.
OpenType
The value of OpenType
is one of the Boolean literals true
or false
. Absence of the attribute means false
.
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.
-IncludeInServiceDocument
The value of IncludeInServiceDocument
is one of the Boolean literals true
or false
. Absence of the attribute means false
.
MySchema.MyEntityContainer/MySingleton/My.EntityType/MyContainmentNavProperty
MySchema.MyEntityContainer/MySingleton/MyComplexProperty/MyContainmentNavProp
-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.
-OpenGIS Implementation Specification for Geographic information – Simple feature access – Part 1: Common architecture, May 2011. Open Geospatial Consortium. https://www.ogc.org/standard/sfa/.
-edm:UrlRef
-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.
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.
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.
-Note that this result contains seven fully qualified aggregate values, followed by fifteen rollup rows with subtotal values.
-$apply
The normative ABNF construction rules for this specification are defined in OData-Agg-ABNF. They incrementally extend the rules defined in OData-ABNF.
-The entity container may be annotated in the same way as entity sets to express which aggregate queries are supported, see section 5.
-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.
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.
-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.
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.
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.
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.
-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.
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.
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.
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.
Note: the context URL is optional in requests.
-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
.
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.
-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.
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.
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.
odata.etag
control information within PUT
, PATCH
or DELETE
payloads, if specifiedapplication/json
payload that would have been returned had the operation completed synchronouslyECMAScript 2023 Language Specification, 14th Edition, June 2023. Standard ECMA-262. https://www.ecma-international.org/publications-and-standards/standards/ecma-262/.
-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.
-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.
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.
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.
-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.
-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.
-An OData service MUST support OData-JSON and MAY support additional formats for both request and response bodies.
-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.
-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.
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).
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 @@400 Bad Request
or 501 Not Implemented
ECMAScript 2023 Language Specification, 14th Edition, June 2023. Standard ECMA-262. https://www.ecma-international.org/publications-and-standards/standards/ecma-262/.
OpenGIS Implementation Specification for Geographic information – Simple feature access – Part 1: Common architecture, May 2011. Open Geospatial Consortium. https://www.ogc.org/standard/sfa/.
-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.
-This specification defines how to represent and interact with time-dependent data using the Open Data Protocol (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://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.
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.
-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.
-ISO/IEC 9075-2:2011 Information technology - Database languages - SQL - Part 2: Foundation (SQL/Foundation).
-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.
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.
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.
-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')
.
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.
-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
+$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
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
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
$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
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)",
+ }
+ ]
+ }
$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')
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"]]
-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')
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
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
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 77: hassubset
expressions that return true
+Example 78: hassubset
expressions that return true
hassubset([4,1,3],[4,1,3])
hassubset([4,1,3],[1,3,4])
hassubset([4,1,3],[3,1])
@@ -1396,7 +1413,7 @@ 5.1.1.6.1 h
hassubset([4,1,3,1],[1,1])
-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
Edm.Int32 second(Edm.TimeOfDay)
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 year
The 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 isof
The 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 case
Clients 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 any
The 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 all
The 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)
-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 @@ $filter
are applied to the same request, the results include only those items that match both criteria.
The OData-ABNF search
syntax rule defines the formal grammar of the $search
query option.
-Example 135: all products that are blue or green. It is up to the service to decide what makes a product blue or green.
+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
Clients should be aware that services MAY implement search based on a different syntax provided they advertise this with the annotation SearchRestrictions/SearchSyntax
defined in OData-VocCap. Services MAY treat keywords defined in the standard OData-ABNF $search
syntax as terms to be matched if they are listed in SearchRestrictions/UnsupportedExpressions
.
@@ -2297,7 +2324,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
Related work:
This specification is related to:
@@ -64,7 +64,7 @@ Related work:
- 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
@@ -75,8 +75,8 @@ Related work:
Abstract:
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.
-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 Vocabularies”.
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:
@@ -84,15 +84,15 @@ Key words:
Citation format:
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. 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.
+OData Vocabularies Version 4.0. 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.
Notices
Copyright © OASIS Open 2024. All Rights Reserved.
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.
-
+
-
+
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 @@
-Version
+Version
String?
The schema version with which this revision was first published
-Kind
+Kind
RevisionKind
The kind of revision
-Description
+Description
String
Text describing the reason for the revision
-RevisionKind
+RevisionKind
@@ -413,24 +413,24 @@
-Added
+Added
0
Model element was added
-Modified
+Modified
1
Model element was modified
-Deprecated
+Deprecated
2
Model element was deprecated
-Link
+Link
The Link term is inspired by the atom:link
element, see RFC4287, and the Link
HTTP header, see RFC5988
@@ -442,19 +442,19 @@
-rel
+rel
String
Link relation type, see IANA Link Relations
-href
+href
URL
URL of related information
-ExampleValue
+ExampleValue
Derived Types:
- PrimitiveExampleValue
@@ -472,14 +472,14 @@
-Description
+Description
String?
Description of the example value
-PrimitiveExampleValue: ExampleValue
+PrimitiveExampleValue: ExampleValue
@@ -490,19 +490,19 @@
-Description
+Description
String?
Description of the example value
-Value
+Value
PrimitiveType
Example value for the custom parameter
-ComplexExampleValue: ExampleValue
+ComplexExampleValue: ExampleValue
@@ -513,19 +513,19 @@
-Description
+Description
String?
Description of the example value
-Value
+Value
ComplexType
Example value for the custom parameter
-EntityExampleValue: ExampleValue
+EntityExampleValue: ExampleValue
@@ -536,19 +536,19 @@
-Description
+Description
String?
Description of the example value
-Value
+Value
EntityType
Example value for the custom parameter
-ExternalExampleValue: ExampleValue
+ExternalExampleValue: ExampleValue
@@ -559,19 +559,19 @@
-Description
+Description
String?
Description of the example value
-ExternalValue
+ExternalValue
URL
Url reference to the value in its literal format
-MessageType
+MessageType
@@ -582,34 +582,34 @@
-code
+code
String
Machine-readable, language-independent message code
-message
+message
String
Human-readable, language-dependent message text
-severity
+severity
MessageSeverity
Severity of the message
-target
+target
String?
A path to the target of the message detail, relative to the annotated instance
-details
+details
[MessageType]
List of detail messages
-MessageSeverity
+MessageSeverity
Type: String
@@ -620,25 +620,25 @@
-success
+success
Positive feedback - no action required
-info
+info
Additional information - no action required
-warning
+warning
Warning - action may be required
-error
+error
Error - action is required
-ExceptionType
+ExceptionType
Derived Types:
- ValueExceptionType
@@ -655,14 +655,14 @@
-info
+info
MessageType?
Information about the exception
-ValueExceptionType: ExceptionType
+ValueExceptionType: ExceptionType
@@ -673,19 +673,19 @@
-info
+info
MessageType?
Information about the exception
-value
+value
String?
String representation of the exact value
-ResourceExceptionType: ExceptionType
+ResourceExceptionType: ExceptionType
@@ -696,19 +696,19 @@
-info
+info
MessageType?
Information about the exception
-retryLink
+retryLink
URL?
A GET request to this URL retries retrieving the problematic instance
-DataModificationExceptionType: ExceptionType
+DataModificationExceptionType: ExceptionType
@@ -719,24 +719,24 @@
-info
+info
MessageType?
Information about the exception
-failedOperation
+failedOperation
DataModificationOperationKind
The kind of modification operation that failed
-responseCode
+responseCode
Int16?
Response code of the failed operation, e.g. 424 for a failed dependency
-DataModificationOperationKind
+DataModificationOperationKind
@@ -747,48 +747,48 @@
-insert
+insert
0
Insert new instance
-update
+update
1
Update existing instance
-upsert
+upsert
2
Insert new instance or update it if it already exists
-delete
+delete
3
Delete existing instance
-invoke
+invoke
4
Invoke action or function
-link
+link
5
Add link between entities
-unlink
+unlink
6
Remove link between entities
-Tag
+Tag
Type: Boolean
This is the type to use for all tagging terms
-Permission
+Permission
@@ -799,34 +799,34 @@
-None
+None
0
No permissions
-Read
+Read
1
Read permission
-Write
+Write
2
Write permission
-ReadWrite
+ReadWrite
3
Read and write permission
-Invoke
+Invoke
4
Permission to invoke actions
-ContentDispositionType
+ContentDispositionType
@@ -837,31 +837,31 @@
-Type
+Type
String
The disposition type of the binary or stream value, see RFC 6266, Disposition Type
-Filename
+Filename
String?
The proposed filename for downloading the binary or stream value, see RFC 6266, Disposition Parameter: ‘Filename’
-QualifiedTermName
+QualifiedTermName
Type: String
The qualified name of a term in scope.
-QualifiedTypeName
+QualifiedTypeName
Type: String
The qualified name of a type in scope.
-QualifiedActionName
+QualifiedActionName
Type: String
The qualified name of an action in scope.
-QualifiedBoundOperationName
+QualifiedBoundOperationName
Type: String
The qualified name of a bound action or function in scope.
Either
@@ -871,7 +871,7 @@
-AlternateKey
+AlternateKey
@@ -882,14 +882,14 @@
-Key
+Key
[PropertyRef]
The set of properties that make up this key
-PropertyRef
+PropertyRef
@@ -900,19 +900,19 @@
-Name
+Name
PropertyPath
A path expression resolving to a primitive property of the entity type itself or to a primitive property of a complex or navigation property (recursively) of the entity type. The names of the properties in the path are joined together by forward slashes.
-Alias
+Alias
String
A SimpleIdentifier that MUST be unique within the set of aliases, structural and navigation properties of the containing entity type that MUST be used in the key predicate of URLs
-Dictionary
+Dictionary
A dictionary of name-value pairs. Names must be valid property names, values may be restricted to a list of types via an annotation with term Validation.OpenPropertyTypeConstraint
.
@@ -929,7 +929,7 @@
-OptionalParameterType
+OptionalParameterType
@@ -940,22 +940,22 @@
-DefaultValue
+DefaultValue
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
+LocalDateTime
Type: String
A string representing a Local Date-Time value with no offset.
-SimpleIdentifier
+SimpleIdentifier
Type: String
-GeometryFeatureType
+GeometryFeatureType
A Feature Object represents a spatially bounded thing
@@ -967,24 +967,24 @@
-geometry
+geometry
Geometry?
Location of the Feature
-properties
+properties
Dictionary?
Properties of the Feature
-id
+id
String?
Commonly used identifer for a Feature
-
+
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 @@
-Minimal
+Minimal
0
Minimal conformance level
-Intermediate
+Intermediate
1
Intermediate conformance level
-Advanced
+Advanced
2
Advanced conformance level
-IsolationLevel
+IsolationLevel
@@ -1266,14 +1266,14 @@
-Snapshot
+Snapshot
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 @@
-CallbackProtocols
+CallbackProtocols
[CallbackProtocol]
List of supported callback protocols, e.g. http
or wss
-CallbackProtocol
+CallbackProtocol
@@ -1303,24 +1303,24 @@
-Id
+Id
String?
Protocol Identifier
-UrlTemplate
+UrlTemplate
String?
URL Template including parameters. Parameters are enclosed in curly braces {} as defined in RFC6570
-DocumentationUrl
+DocumentationUrl
URL?
Human readable description of the meaning of the URL Template parameters
-ChangeTrackingBase
+ChangeTrackingBase
Derived Types:
- ChangeTrackingType
@@ -1335,14 +1335,14 @@
-Supported
+Supported
Boolean
odata.track-changes preference is supported
-ChangeTrackingType: ChangeTrackingBase
+ChangeTrackingType: ChangeTrackingBase
@@ -1353,24 +1353,24 @@
-Supported
+Supported
Boolean
odata.track-changes preference is supported
-FilterableProperties
+FilterableProperties
[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
+ExpandableProperties
[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
+CountRestrictionsBase
Derived Types:
- CountRestrictionsType
@@ -1385,14 +1385,14 @@
-Countable
+Countable
Boolean
Instances can be counted in requests targeting a collection
-CountRestrictionsType: CountRestrictionsBase
+CountRestrictionsType: CountRestrictionsBase
@@ -1403,24 +1403,24 @@
-Countable
+Countable
Boolean
Instances can be counted in requests targeting a collection
-NonCountableProperties
+NonCountableProperties
[PropertyPath]
Members of these collection properties cannot be counted
-NonCountableNavigationProperties
+NonCountableNavigationProperties
[NavigationPropertyPath]
Members of these navigation properties cannot be counted
-NavigationRestrictionsType
+NavigationRestrictionsType
@@ -1431,19 +1431,19 @@
-Navigability
+Navigability
NavigationType?
Default navigability for all navigation properties of the annotation target. Individual navigation properties can override this value via RestrictedProperties/Navigability
.
-RestrictedProperties
+RestrictedProperties
[NavigationPropertyRestriction]
List of navigation properties with restrictions
-NavigationPropertyRestriction
+NavigationPropertyRestriction
Using a property of NavigationPropertyRestriction
in a NavigationRestrictions
annotation is discouraged in favor of using an annotation with the corresponding term from this vocabulary and a target path starting with a container and ending in the NavigationProperty
, unless the favored alternative is impossible because a dynamic expression requires an instance path whose evaluation starts at the target of the NavigationRestrictions
annotation. See this example.
@@ -1455,94 +1455,94 @@
-NavigationProperty
+NavigationProperty
NavigationPropertyPath
Navigation properties can be navigated
The target path of a 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
+Navigability
NavigationType?
Supported navigability of this navigation property
-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
-SearchRestrictions
+SearchRestrictions
SearchRestrictionsType?
Restrictions on search expressions
-SortRestrictions
+SortRestrictions
SortRestrictionsType?
Restrictions on orderby expressions
-TopSupported
+TopSupported
Boolean
Supports $top
-SkipSupported
+SkipSupported
Boolean
Supports $skip
-SelectSupport
+SelectSupport
SelectSupportType?
Support for $select
-IndexableByKey
+IndexableByKey
Boolean
Supports key values according to OData URL conventions
-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
-OptimisticConcurrencyControl
+OptimisticConcurrencyControl
Boolean
Data modification (including insert) along this navigation property requires the use of ETags
-ReadRestrictions
+ReadRestrictions
ReadRestrictionsType?
Restrictions for retrieving entities
-NavigationType
+NavigationType
@@ -1553,24 +1553,24 @@
-Recursive
+Recursive
0
Navigation properties can be recursively navigated
-Single
+Single
1
Navigation properties can be navigated to a single level
-None
+None
2
Navigation properties are not navigable
-SelectSupportType
+SelectSupportType
@@ -1581,59 +1581,59 @@
-Supported
+Supported
Boolean
Supports $select
-InstanceAnnotationsSupported
+InstanceAnnotationsSupported
Boolean
Supports instance annotations in $select list
-Expandable
+Expandable
Boolean
$expand within $select is supported
-Filterable
+Filterable
Boolean
$filter within $select is supported
-Searchable
+Searchable
Boolean
$search within $select is supported
-TopSupported
+TopSupported
Boolean
$top within $select is supported
-SkipSupported
+SkipSupported
Boolean
$skip within $select is supported
-ComputeSupported
+ComputeSupported
Boolean
$compute within $select is supported
-Countable
+Countable
Boolean
$count within $select is supported
-Sortable
+Sortable
Boolean
$orderby within $select is supported
-BatchSupportType
+BatchSupportType
@@ -1644,39 +1644,39 @@
-Supported
+Supported
Boolean
Service supports requests to $batch
-ContinueOnErrorSupported
+ContinueOnErrorSupported
Boolean
Service supports the continue on error preference
-ReferencesInRequestBodiesSupported
+ReferencesInRequestBodiesSupported
Boolean
Service supports Content-ID referencing in request bodies
-ReferencesAcrossChangeSetsSupported
+ReferencesAcrossChangeSetsSupported
Boolean
Service supports Content-ID referencing across change sets
-EtagReferencesSupported
+EtagReferencesSupported
Boolean
Service supports referencing Etags from previous requests
-RequestDependencyConditionsSupported
+RequestDependencyConditionsSupported
Boolean
Service supports the if
member in JSON batch requests
-SupportedFormats
+SupportedFormats
[MediaType]
-Media types of supported formats for $batch
+Media types of supported formats for $batch
@@ -1686,7 +1686,7 @@ LongDescription
-FilterRestrictionsBase
+FilterRestrictionsBase
Derived Types:
- FilterRestrictionsType
@@ -1701,17 +1701,17 @@
-Filterable
+Filterable
Boolean
$filter is supported
-RequiresFilter
+RequiresFilter
Boolean
$filter is required
-MaxLevels
+MaxLevels
Int32
The maximum number of levels (including recursion) that can be traversed in a filter expression. A value of -1 indicates there is no restriction.
@@ -1722,7 +1722,7 @@ Description
-FilterRestrictionsType: FilterRestrictionsBase
+FilterRestrictionsType: FilterRestrictionsBase
@@ -1733,32 +1733,32 @@
-Filterable
+Filterable
Boolean
$filter is supported
-RequiresFilter
+RequiresFilter
Boolean
$filter is required
-MaxLevels
+MaxLevels
Int32
The maximum number of levels (including recursion) that can be traversed in a filter expression. A value of -1 indicates there is no restriction.
-RequiredProperties
+RequiredProperties
[PropertyPath]
These properties must be specified in the $filter clause (properties of derived types are not allowed here)
-NonFilterableProperties
+NonFilterableProperties
[PropertyPath]
These structural properties cannot be used in filter expressions
-FilterExpressionRestrictions
+FilterExpressionRestrictions
[FilterExpressionRestrictionType]
These properties only allow a subset of filter expressions. A valid filter expression for a single property can be enclosed in parentheses and combined by and
with valid expressions for other properties.
@@ -1769,7 +1769,7 @@ Description
-FilterExpressionRestrictionType
+FilterExpressionRestrictionType
@@ -1780,19 +1780,19 @@
-Property
+Property
PropertyPath?
Path to the restricted property
-AllowedExpressions
+AllowedExpressions
FilterExpressionType?
Allowed subset of expressions
-FilterExpressionType
+FilterExpressionType
Type: String
@@ -1803,33 +1803,33 @@
-SingleValue
+SingleValue
Property can be used in a single eq
clause
-MultiValue
+MultiValue
Property can be used in multiple eq
and in
clauses, combined by or
(which is logically equivalent to a single in
clause)
-SingleRange
+SingleRange
Property can be used in at most one ge
and/or one le
clause, separated by and
-MultiRange
+MultiRange
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
+SearchExpression
String property can be used as first operand in startswith
, endswith
, and contains
clauses
-MultiRangeOrSearchExpression
+MultiRangeOrSearchExpression
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
+SortRestrictionsBase
Derived Types:
- SortRestrictionsType
@@ -1844,7 +1844,7 @@
-Sortable
+Sortable
Boolean
$orderby is supported
@@ -1855,7 +1855,7 @@ Description
-SortRestrictionsType: SortRestrictionsBase
+SortRestrictionsType: SortRestrictionsBase
@@ -1866,22 +1866,22 @@
-Sortable
+Sortable
Boolean
$orderby is supported
-AscendingOnlyProperties
+AscendingOnlyProperties
[PropertyPath]
These properties can only be used for sorting in Ascending order
-DescendingOnlyProperties
+DescendingOnlyProperties
[PropertyPath]
These properties can only be used for sorting in Descending order
-NonSortableProperties
+NonSortableProperties
[PropertyPath]
These structural properties cannot be used in orderby expressions
@@ -1892,7 +1892,7 @@ Description
-ExpandRestrictionsBase
+ExpandRestrictionsBase
Derived Types:
- ExpandRestrictionsType
@@ -1907,17 +1907,17 @@
-Expandable
+Expandable
Boolean
$expand is supported
-StreamsExpandable
+StreamsExpandable
Boolean
$expand is supported for stream properties and media streams
-MaxLevels
+MaxLevels
Int32
The maximum number of levels that can be expanded in a expand expression. A value of -1 indicates there is no restriction.
@@ -1928,7 +1928,7 @@ Description
-ExpandRestrictionsType: ExpandRestrictionsBase
+ExpandRestrictionsType: ExpandRestrictionsBase
@@ -1939,27 +1939,27 @@
-Expandable
+Expandable
Boolean
$expand is supported
-StreamsExpandable
+StreamsExpandable
Boolean
$expand is supported for stream properties and media streams
-MaxLevels
+MaxLevels
Int32
The maximum number of levels that can be expanded in a expand expression. A value of -1 indicates there is no restriction.
-NonExpandableProperties
+NonExpandableProperties
[NavigationPropertyPath]
These properties cannot be used in expand expressions
-NonExpandableStreamProperties
+NonExpandableStreamProperties
[PropertyPath]
These stream properties cannot be used in expand expressions
@@ -1970,7 +1970,7 @@ Description
-SearchRestrictionsType
+SearchRestrictionsType
@@ -1981,12 +1981,12 @@
-Searchable
+Searchable
Boolean
$search is supported
-UnsupportedExpressions
+UnsupportedExpressions
SearchExpressions
Expressions not supported in $search
@@ -1997,7 +1997,7 @@ Description
-SearchExpressions
+SearchExpressions
@@ -2008,39 +2008,39 @@
-none
+none
0
Single search term
-AND
+AND
1
Multiple search terms, optionally separated by AND
-OR
+OR
2
Multiple search terms separated by OR
-NOT
+NOT
4
Search terms preceded by NOT
-phrase
+phrase
8
Search phrases enclosed in double quotes
-group
+group
16
Precedence grouping of search expressions with parentheses
-InsertRestrictionsBase
+InsertRestrictionsBase
Derived Types:
- InsertRestrictionsType
@@ -2055,54 +2055,54 @@
-Insertable
+Insertable
Boolean
Entities can be inserted
-MaxLevels
+MaxLevels
Int32
The maximum number of navigation properties that can be traversed when addressing the collection to insert into. A value of -1 indicates there is no restriction.
-TypecastSegmentSupported
+TypecastSegmentSupported
Boolean
Entities of a specific derived type can be created by specifying a type-cast segment
-QueryOptions
+QueryOptions
ModificationQueryOptionsType?
Support for query options with insert requests
-CustomHeaders
+CustomHeaders
[CustomParameter]
Supported or required custom headers
-CustomQueryOptions
+CustomQueryOptions
[CustomParameter]
Supported or required custom query options
-Description
+Description
String?
A brief description of the request
-LongDescription
+LongDescription
String?
A long description of the request
-ErrorResponses
+ErrorResponses
[HttpResponse]
Possible error responses returned by the request.
-InsertRestrictionsType: InsertRestrictionsBase
+InsertRestrictionsType: InsertRestrictionsBase
@@ -2113,74 +2113,74 @@
-Insertable
+Insertable
Boolean
Entities can be inserted
-MaxLevels
+MaxLevels
Int32
The maximum number of navigation properties that can be traversed when addressing the collection to insert into. A value of -1 indicates there is no restriction.
-TypecastSegmentSupported
+TypecastSegmentSupported
Boolean
Entities of a specific derived type can be created by specifying a type-cast segment
-QueryOptions
+QueryOptions
ModificationQueryOptionsType?
Support for query options with insert requests
-CustomHeaders
+CustomHeaders
[CustomParameter]
Supported or required custom headers
-CustomQueryOptions
+CustomQueryOptions
[CustomParameter]
Supported or required custom query options
-Description
+Description
String?
A brief description of the request
-LongDescription
+LongDescription
String?
A long description of the request
-ErrorResponses
+ErrorResponses
[HttpResponse]
Possible error responses returned by the request.
-NonInsertableProperties
+NonInsertableProperties
[PropertyPath]
These structural properties cannot be specified on insert
-NonInsertableNavigationProperties
+NonInsertableNavigationProperties
[NavigationPropertyPath]
These navigation properties do not allow deep inserts
-RequiredProperties
+RequiredProperties
[PropertyPath]
These structural properties must be specified on insert
-Permissions
+Permissions
[PermissionType?]
Required permissions. One of the specified sets of scopes is required to perform the insert.
-PermissionType
+PermissionType
@@ -2191,19 +2191,19 @@
-SchemeName
+SchemeName
SchemeName
Authorization flow scheme name
-Scopes
+Scopes
[ScopeType]
List of scopes that can provide access to the resource
-ScopeType
+ScopeType
@@ -2214,19 +2214,19 @@
-Scope
+Scope
String
Name of the scope.
-RestrictedProperties
+RestrictedProperties
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
+DeepInsertSupportType
@@ -2237,19 +2237,19 @@
-Supported
+Supported
Boolean
Annotation target supports deep inserts
-ContentIDSupported
+ContentIDSupported
Boolean
Annotation target supports accepting and returning nested entities annotated with the Core.ContentID
instance annotation.
-UpdateRestrictionsBase
+UpdateRestrictionsBase
Derived Types:
- UpdateRestrictionsType
@@ -2264,79 +2264,79 @@
-Updatable
+Updatable
Boolean
Entities can be updated
-Upsertable
+Upsertable
Boolean
Entities can be upserted
-DeltaUpdateSupported
+DeltaUpdateSupported
Boolean
Entities can be inserted, updated, and deleted via a PATCH request with a delta payload
-UpdateMethod
+UpdateMethod
HttpMethod?
Supported HTTP Methods (PUT or PATCH) for updating an entity. If null, PATCH SHOULD be supported and PUT MAY be supported.
-FilterSegmentSupported
+FilterSegmentSupported
Boolean
Members of collections can be updated via a PATCH request with a /$filter(...)/$each
segment
-TypecastSegmentSupported
+TypecastSegmentSupported
Boolean
Members of collections can be updated via a PATCH request with a type-cast segment and a /$each
segment
-MaxLevels
+MaxLevels
Int32
The maximum number of navigation properties that can be traversed when addressing the collection or entity to update. A value of -1 indicates there is no restriction.
-Permissions
+Permissions
[PermissionType?]
Required permissions. One of the specified sets of scopes is required to perform the update.
-QueryOptions
+QueryOptions
ModificationQueryOptionsType?
Support for query options with update requests
-CustomHeaders
+CustomHeaders
[CustomParameter]
Supported or required custom headers
-CustomQueryOptions
+CustomQueryOptions
[CustomParameter]
Supported or required custom query options
-Description
+Description
String?
A brief description of the request
-LongDescription
+LongDescription
String?
A long description of the request
-ErrorResponses
+ErrorResponses
[HttpResponse]
Possible error responses returned by the request.
-UpdateRestrictionsType: UpdateRestrictionsBase
+UpdateRestrictionsType: UpdateRestrictionsBase
@@ -2347,94 +2347,94 @@
-Updatable
+Updatable
Boolean
Entities can be updated
-Upsertable
+Upsertable
Boolean
Entities can be upserted
-DeltaUpdateSupported
+DeltaUpdateSupported
Boolean
Entities can be inserted, updated, and deleted via a PATCH request with a delta payload
-UpdateMethod
+UpdateMethod
HttpMethod?
Supported HTTP Methods (PUT or PATCH) for updating an entity. If null, PATCH SHOULD be supported and PUT MAY be supported.
-FilterSegmentSupported
+FilterSegmentSupported
Boolean
Members of collections can be updated via a PATCH request with a /$filter(...)/$each
segment
-TypecastSegmentSupported
+TypecastSegmentSupported
Boolean
Members of collections can be updated via a PATCH request with a type-cast segment and a /$each
segment
-MaxLevels
+MaxLevels
Int32
The maximum number of navigation properties that can be traversed when addressing the collection or entity to update. A value of -1 indicates there is no restriction.
-Permissions
+Permissions
[PermissionType?]
Required permissions. One of the specified sets of scopes is required to perform the update.
-QueryOptions
+QueryOptions
ModificationQueryOptionsType?
Support for query options with update requests
-CustomHeaders
+CustomHeaders
[CustomParameter]
Supported or required custom headers
-CustomQueryOptions
+CustomQueryOptions
[CustomParameter]
Supported or required custom query options
-Description
+Description
String?
A brief description of the request
-LongDescription
+LongDescription
String?
A long description of the request
-ErrorResponses
+ErrorResponses
[HttpResponse]
Possible error responses returned by the request.
-NonUpdatableProperties
+NonUpdatableProperties
[PropertyPath]
These structural properties cannot be specified on update
-NonUpdatableNavigationProperties
+NonUpdatableNavigationProperties
[NavigationPropertyPath]
These navigation properties do not allow rebinding
-RequiredProperties
+RequiredProperties
[PropertyPath]
These structural properties must be specified on update
-HttpMethod
+HttpMethod
@@ -2445,44 +2445,44 @@
-GET
+GET
1
The HTTP GET Method
-PATCH
+PATCH
2
The HTTP PATCH Method
-PUT
+PUT
4
The HTTP PUT Method
-POST
+POST
8
The HTTP POST Method
-DELETE
+DELETE
16
The HTTP DELETE Method
-OPTIONS
+OPTIONS
32
The HTTP OPTIONS Method
-HEAD
+HEAD
64
The HTTP HEAD Method
-DeepUpdateSupportType
+DeepUpdateSupportType
@@ -2493,19 +2493,19 @@
-Supported
+Supported
Boolean
Annotation target supports deep updates
-ContentIDSupported
+ContentIDSupported
Boolean
Annotation target supports accepting and returning nested entities annotated with the Core.ContentID
instance annotation.
-DeleteRestrictionsBase
+DeleteRestrictionsBase
Derived Types:
- DeleteRestrictionsType
@@ -2520,59 +2520,59 @@
-Deletable
+Deletable
Boolean
Entities can be deleted
-MaxLevels
+MaxLevels
Int32
The maximum number of navigation properties that can be traversed when addressing the collection to delete from or the entity to delete. A value of -1 indicates there is no restriction.
-FilterSegmentSupported
+FilterSegmentSupported
Boolean
Members of collections can be deleted via a DELETE request with a /$filter(...)/$each
segment
-TypecastSegmentSupported
+TypecastSegmentSupported
Boolean
Members of collections can be deleted via a DELETE request with a type-cast segment and a /$each
segment
-Permissions
+Permissions
[PermissionType?]
Required permissions. One of the specified sets of scopes is required to perform the delete.
-CustomHeaders
+CustomHeaders
[CustomParameter]
Supported or required custom headers
-CustomQueryOptions
+CustomQueryOptions
[CustomParameter]
Supported or required custom query options
-Description
+Description
String?
A brief description of the request
-LongDescription
+LongDescription
String?
A long description of the request
-ErrorResponses
+ErrorResponses
[HttpResponse]
Possible error responses returned by the request.
-DeleteRestrictionsType: DeleteRestrictionsBase
+DeleteRestrictionsType: DeleteRestrictionsBase
@@ -2583,64 +2583,64 @@
-Deletable
+Deletable
Boolean
Entities can be deleted
-MaxLevels
+MaxLevels
Int32
The maximum number of navigation properties that can be traversed when addressing the collection to delete from or the entity to delete. A value of -1 indicates there is no restriction.
-FilterSegmentSupported
+FilterSegmentSupported
Boolean
Members of collections can be deleted via a DELETE request with a /$filter(...)/$each
segment
-TypecastSegmentSupported
+TypecastSegmentSupported
Boolean
Members of collections can be deleted via a DELETE request with a type-cast segment and a /$each
segment
-Permissions
+Permissions
[PermissionType?]
Required permissions. One of the specified sets of scopes is required to perform the delete.
-CustomHeaders
+CustomHeaders
[CustomParameter]
Supported or required custom headers
-CustomQueryOptions
+CustomQueryOptions
[CustomParameter]
Supported or required custom query options
-Description
+Description
String?
A brief description of the request
-LongDescription
+LongDescription
String?
A long description of the request
-ErrorResponses
+ErrorResponses
[HttpResponse]
Possible error responses returned by the request.
-NonDeletableNavigationProperties
+NonDeletableNavigationProperties
[NavigationPropertyPath]
These navigation properties do not allow DeleteLink requests
-CollectionPropertyRestrictionsType
+CollectionPropertyRestrictionsType
@@ -2651,64 +2651,64 @@
-CollectionProperty
+CollectionProperty
PropertyPath?
Restricted Collection-valued property
-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
-SearchRestrictions
+SearchRestrictions
SearchRestrictionsType?
Restrictions on search expressions
-SortRestrictions
+SortRestrictions
SortRestrictionsType?
Restrictions on orderby expressions
-TopSupported
+TopSupported
Boolean
Supports $top
-SkipSupported
+SkipSupported
Boolean
Supports $skip
-SelectSupport
+SelectSupport
SelectSupportType?
Support for $select
-Insertable
+Insertable
Boolean
Members can be inserted into this collection
If additionally annotated with Core.PositionalInsert, members can be inserted at a specific position
-Updatable
+Updatable
Boolean
Members of this ordered collection can be updated by ordinal
-Deletable
+Deletable
Boolean
Members of this ordered collection can be deleted by ordinal
-OperationRestrictionsType
+OperationRestrictionsType
@@ -2719,34 +2719,34 @@
-FilterSegmentSupported
+FilterSegmentSupported
Boolean
Bound action or function can be invoked on a collection-valued binding parameter path with a /$filter(...)
segment
-Permissions
+Permissions
[PermissionType?]
Required permissions. One of the specified sets of scopes is required to invoke an action or function
-CustomHeaders
+CustomHeaders
[CustomParameter]
Supported or required custom headers
-CustomQueryOptions
+CustomQueryOptions
[CustomParameter]
Supported or required custom query options
-ErrorResponses
+ErrorResponses
[HttpResponse]
Possible error responses returned by the request.
-ModificationQueryOptionsType
+ModificationQueryOptionsType
@@ -2757,39 +2757,39 @@
-ExpandSupported
+ExpandSupported
Boolean
Supports $expand with modification requests
-SelectSupported
+SelectSupported
Boolean
Supports $select with modification requests
-ComputeSupported
+ComputeSupported
Boolean
Supports $compute with modification requests
-FilterSupported
+FilterSupported
Boolean
Supports $filter with modification requests
-SearchSupported
+SearchSupported
Boolean
Supports $search with modification requests
-SortSupported
+SortSupported
Boolean
Supports $orderby with modification requests
-ReadRestrictionsBase
+ReadRestrictionsBase
Derived Types:
- ReadByKeyRestrictionsType
@@ -2805,44 +2805,44 @@
-Readable
+Readable
Boolean
Entities can be retrieved
-Permissions
+Permissions
[PermissionType?]
Required permissions. One of the specified sets of scopes is required to read.
-CustomHeaders
+CustomHeaders
[CustomParameter]
Supported or required custom headers
-CustomQueryOptions
+CustomQueryOptions
[CustomParameter]
Supported or required custom query options
-Description
+Description
String?
A brief description of the request
-LongDescription
+LongDescription
String?
A long description of the request
-ErrorResponses
+ErrorResponses
[HttpResponse]
Possible error responses returned by the request.
-ReadByKeyRestrictionsType: ReadRestrictionsBase
+ReadByKeyRestrictionsType: ReadRestrictionsBase
Restrictions for retrieving an entity by key
@@ -2854,44 +2854,44 @@
-Readable
+Readable
Boolean
Entities can be retrieved
-Permissions
+Permissions
[PermissionType?]
Required permissions. One of the specified sets of scopes is required to read.
-CustomHeaders
+CustomHeaders
[CustomParameter]
Supported or required custom headers
-CustomQueryOptions
+CustomQueryOptions
[CustomParameter]
Supported or required custom query options
-Description
+Description
String?
A brief description of the request
-LongDescription
+LongDescription
String?
A long description of the request
-ErrorResponses
+ErrorResponses
[HttpResponse]
Possible error responses returned by the request.
-ReadRestrictionsType: ReadRestrictionsBase
+ReadRestrictionsType: ReadRestrictionsBase
@@ -2902,54 +2902,54 @@
-Readable
+Readable
Boolean
Entities can be retrieved
-Permissions
+Permissions
[PermissionType?]
Required permissions. One of the specified sets of scopes is required to read.
-CustomHeaders
+CustomHeaders
[CustomParameter]
Supported or required custom headers
-CustomQueryOptions
+CustomQueryOptions
[CustomParameter]
Supported or required custom query options
-Description
+Description
String?
A brief description of the request
-LongDescription
+LongDescription
String?
A long description of the request
-ErrorResponses
+ErrorResponses
[HttpResponse]
Possible error responses returned by the request.
-TypecastSegmentSupported
+TypecastSegmentSupported
Boolean
Entities of a specific derived type can be read by specifying a type-cast segment
-ReadByKeyRestrictions
+ReadByKeyRestrictions
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
+CustomParameter
A custom parameter is either a header or a query option
The type of a custom parameter is always a string. Restrictions on the parameter values can be expressed by annotating the record expression describing the parameter with terms from the Validation vocabulary, e.g. Validation.Pattern or Validation.AllowedValues.
@@ -2962,34 +2962,34 @@
-Name
+Name
String
Name of the custom parameter
-Description
+Description
String?
Description of the custom parameter
-DocumentationURL
+DocumentationURL
URL?
URL of related documentation
-Required
+Required
Boolean
true: parameter is required, false or not specified: parameter is optional
-ExampleValues
+ExampleValues
[PrimitiveExampleValue]
Example values for the custom parameter
-DefaultCapabilitiesType
+DefaultCapabilitiesType
HttpResponse
+HttpResponse
@@ -3093,19 +3093,19 @@
-StatusCode
+StatusCode
String
HTTP response status code, for example 400, 403, 501
-Description
+Description
String
Human-readable description of the response
-
+
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 @@
-days
+days
Duration in days, e.g. P1D
-hours
+hours
Duration in days and hours, e.g. P1DT23H
-minutes
+minutes
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 @@
-Value
+Value
PrimitiveType?
An allowed value for the property, parameter, or type definition
@@ -3285,7 +3285,7 @@ SymbolicName
-ConstraintType
+ConstraintType
@@ -3296,19 +3296,19 @@
-FailureMessage
+FailureMessage
String?
Human-readable message that can be shown to end users if the constraint is not fulfilled
-Condition
+Condition
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 @@
-path
+path
NavigationPropertyPath
A path to a single- or collection-valued navigation property
-target
+target
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 @@
-HierarchyNodes
+HierarchyNodes
[EntityType]
A collection, given through a $root
expression
-HierarchyQualifier
+HierarchyQualifier
HierarchyQualifier
-Node
+Node
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 @@
-HierarchyNodes
+HierarchyNodes
[EntityType]
A collection, given through a $root
expression
-HierarchyQualifier
+HierarchyQualifier
HierarchyQualifier
-Node
+Node
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 @@
-HierarchyNodes
+HierarchyNodes
[EntityType]
A collection, given through a $root
expression
-HierarchyQualifier
+HierarchyQualifier
HierarchyQualifier
-Node
+Node
PrimitiveType?
Node identifier of the putative descendant
-Ancestor
+Ancestor
PrimitiveType?
Node identifier of the ancestor node
-MaxDistance
+MaxDistance
Int16
Optional parameter
-IncludeSelf
+IncludeSelf
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 @@
-HierarchyNodes
+HierarchyNodes
[EntityType]
A collection, given through a $root
expression
-HierarchyQualifier
+HierarchyQualifier
HierarchyQualifier
-Node
+Node
PrimitiveType?
Node identifier of the putative ancestor
-Descendant
+Descendant
PrimitiveType?
Node identifier of the descendant node
-MaxDistance
+MaxDistance
Int16
Optional parameter
-IncludeSelf
+IncludeSelf
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 @@
-HierarchyNodes
+HierarchyNodes
[EntityType]
A collection, given through a $root
expression
-HierarchyQualifier
+HierarchyQualifier
HierarchyQualifier
-Node
+Node
PrimitiveType?
Node identifier of the putative sibling
-Other
+Other
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 @@
-HierarchyNodes
+HierarchyNodes
[EntityType]
A collection, given through a $root
expression
-HierarchyQualifier
+HierarchyQualifier
HierarchyQualifier
-Node
+Node
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:
@@ -3695,29 +3695,29 @@
-Transformations
+Transformations
[Transformation]
Transformations that can be used in $apply
-CustomAggregationMethods
+CustomAggregationMethods
[String]
Qualified names of custom aggregation methods that can be used in aggregate(...with...)
-Rollup
+Rollup
RollupType
The service supports rollup hierarchies in a groupby
transformation
-From
+From
Boolean
The service supports the from
keyword in an aggregate
transformation
-ApplySupportedType: ApplySupportedBase
+ApplySupportedType: ApplySupportedBase
@@ -3728,44 +3728,44 @@
-Transformations
+Transformations
[Transformation]
Transformations that can be used in $apply
-CustomAggregationMethods
+CustomAggregationMethods
[String]
Qualified names of custom aggregation methods that can be used in aggregate(...with...)
-Rollup
+Rollup
RollupType
The service supports rollup hierarchies in a groupby
transformation
-From
+From
Boolean
The service supports the from
keyword in an aggregate
transformation
-PropertyRestrictions (Deprecated)
+PropertyRestrictions (Deprecated)
Boolean
Deprecated since Groupable
and Aggregatable
are deprecated
-GroupableProperties
+GroupableProperties
[AnyPropertyPath]
A non-empty collection indicates that only the listed properties of the annotated target are supported by the groupby
transformation
-AggregatableProperties
+AggregatableProperties
[AggregatablePropertyType]
A non-empty collection indicates that only the listed properties of the annotated target can be used in the aggregate
transformation, optionally restricted to the specified aggregation methods
-AggregatablePropertyType
+AggregatablePropertyType
@@ -3776,24 +3776,24 @@
-Property
+Property
PropertyPath
Aggregatable property
-SupportedAggregationMethods
+SupportedAggregationMethods
[AggregationMethod]
Standard and custom aggregation methods that can be applied to the property. If omitted, all aggregation methods can be applied
-RecommendedAggregationMethod
+RecommendedAggregationMethod
AggregationMethod?
Recommended method for aggregating values of the property
-Transformation
+Transformation
Type: String
A transformation that can be used in $apply
@@ -3805,101 +3805,101 @@
-aggregate
+aggregate
OData-Data-Agg-v4.0, section 3.2.1
-groupby
+groupby
OData-Data-Agg-v4.0, section 3.2.3
-concat
+concat
OData-Data-Agg-v4.0, section 3.2.2
-identity
+identity
OData-Data-Agg-v4.0, section 3.4.1
-filter
+filter
OData-Data-Agg-v4.0, section 3.3.2
-search
+search
OData-Data-Agg-v4.0, section 3.3.4
-nest
+nest
OData-Data-Agg-v4.0, section 3.5.2
-addnested
+addnested
OData-Data-Agg-v4.0, section 3.4.3
-join
+join
OData-Data-Agg-v4.0, section 3.5.1
-outerjoin
+outerjoin
OData-Data-Agg-v4.0, section 3.5.1
-compute
+compute
OData-Data-Agg-v4.0, section 3.4.2
-bottomcount
+bottomcount
OData-Data-Agg-v4.0, section 3.3.1.1
-bottomsum
+bottomsum
OData-Data-Agg-v4.0, section 3.3.1.3
-bottompercent
+bottompercent
OData-Data-Agg-v4.0, section 3.3.1.2
-topcount
+topcount
OData-Data-Agg-v4.0, section 3.3.1.1
-topsum
+topsum
OData-Data-Agg-v4.0, section 3.3.1.3
-toppercent
+toppercent
OData-Data-Agg-v4.0, section 3.3.1.2
-orderby
+orderby
OData-Data-Agg-v4.0, section 3.3.3
-top
+top
OData-Data-Agg-v4.0, section 3.3.6
-skip
+skip
OData-Data-Agg-v4.0, section 3.3.5
-ancestors
+ancestors
OData-Data-Agg-v4.0, section 6.2.1
-descendants
+descendants
OData-Data-Agg-v4.0, section 6.2.1
-traverse
+traverse
OData-Data-Agg-v4.0, section 6.2.2
-AggregationMethod
+AggregationMethod
Type: String
Standard or custom aggregation method
Custom aggregation methods MUST use a namespace-qualified name, that is contain at least one dot.
@@ -3912,29 +3912,29 @@
-sum
+sum
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
+min
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
+max
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
+average
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
+countdistinct
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
+RollupType
The number of rollup
or rolluprecursive
operators allowed in a groupby
transformation
@@ -3946,24 +3946,24 @@
-None
+None
0
No support for rollup
or rolluprecursive
-SingleHierarchy
+SingleHierarchy
1
Only one rollup
or rolluprecursive
operator per groupby
-MultipleHierarchies
+MultipleHierarchies
2
Full support for rollup
and rolluprecursive
-RecursiveHierarchyType
+RecursiveHierarchyType
@@ -3974,19 +3974,19 @@
-NodeProperty
+NodeProperty
PropertyPath
Primitive property holding the node identifier
-ParentNavigationProperty
+ParentNavigationProperty
NavigationPropertyPath
Property for navigating to the parent node(s). Its type MUST be the entity type annotated with this term, and it MUST be collection-valued or nullable single-valued.
-HierarchyQualifier
+HierarchyQualifier
Type: String
Qualifier of a RecursiveHierarchy
annotation
Every recursive hierarchy function defined in this vocabulary has
@@ -3996,7 +3996,7 @@
-AvailableOnAggregatesType
+AvailableOnAggregatesType
@@ -4007,20 +4007,20 @@
-RequiredProperties
+RequiredProperties
[PropertyPath]
Properties required to apply this function
-NavigationPropertyAggregationCapabilities: NavigationPropertyRestriction (Deprecated)
+NavigationPropertyAggregationCapabilities: NavigationPropertyRestriction (Deprecated)
Capabilities.NavigationRestrictions
that make use of the additional properties in this subtype are deprecated in favor of ApplySupported
and CustomAggregate
-CustomAggregateType (Deprecated)
+CustomAggregateType (Deprecated)
Deprecated since NavigationPropertyAggregationCapabilities
is also deprecated
-
+
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 @@
-Authorization
+Authorization
SchemeName
The name of a required authorization scheme
-RequiredScopes
+RequiredScopes
[String]
The names of scopes required from this authorization scheme
-Authorization
+Authorization
Base type for all Authorization types
Derived Types:
@@ -4097,19 +4097,19 @@
-Name
+Name
String
Name that can be used to reference the authorization scheme
-Description
+Description
String?
Description of the authorization scheme
-OpenIDConnect: Authorization
+OpenIDConnect: Authorization
@@ -4120,24 +4120,24 @@
-Name
+Name
String
Name that can be used to reference the authorization scheme
-Description
+Description
String?
Description of the authorization scheme
-IssuerUrl
+IssuerUrl
URL
Issuer location for the OpenID Provider. Configuration information can be obtained by appending /.well-known/openid-configuration
to this Url.
-Http: Authorization
+Http: Authorization
@@ -4148,29 +4148,29 @@
-Name
+Name
String
Name that can be used to reference the authorization scheme
-Description
+Description
String?
Description of the authorization scheme
-Scheme
+Scheme
String
HTTP Authorization scheme to be used in the Authorization header, as per RFC7235
-BearerFormat
+BearerFormat
String?
Format of the bearer token
-OAuthAuthorization: Authorization
+OAuthAuthorization: Authorization
Derived Types:
- OAuth2ClientCredentials
@@ -4188,29 +4188,29 @@
-Name
+Name
String
Name that can be used to reference the authorization scheme
-Description
+Description
String?
Description of the authorization scheme
-Scopes
+Scopes
[AuthorizationScope]
Available scopes
-RefreshUrl
+RefreshUrl
URL?
Refresh Url
-OAuth2ClientCredentials: OAuthAuthorization
+OAuth2ClientCredentials: OAuthAuthorization
@@ -4221,34 +4221,34 @@
-Name
+Name
String
Name that can be used to reference the authorization scheme
-Description
+Description
String?
Description of the authorization scheme
-Scopes
+Scopes
[AuthorizationScope]
Available scopes
-RefreshUrl
+RefreshUrl
URL?
Refresh Url
-TokenUrl
+TokenUrl
URL
Token Url
-OAuth2Implicit: OAuthAuthorization
+OAuth2Implicit: OAuthAuthorization
Security note: OAuth2 implicit grant is considered to be not secure and should not be used by clients, see OAuth 2.0 Security Best Current Practice.
@@ -4260,34 +4260,34 @@
-Name
+Name
String
Name that can be used to reference the authorization scheme
-Description
+Description
String?
Description of the authorization scheme
-Scopes
+Scopes
[AuthorizationScope]
Available scopes
-RefreshUrl
+RefreshUrl
URL?
Refresh Url
-AuthorizationUrl
+AuthorizationUrl
URL
Authorization URL
-OAuth2Password: OAuthAuthorization
+OAuth2Password: OAuthAuthorization
@@ -4298,34 +4298,34 @@
-Name
+Name
String
Name that can be used to reference the authorization scheme
-Description
+Description
String?
Description of the authorization scheme
-Scopes
+Scopes
[AuthorizationScope]
Available scopes
-RefreshUrl
+RefreshUrl
URL?
Refresh Url
-TokenUrl
+TokenUrl
URL
Token Url
-OAuth2AuthCode: OAuthAuthorization
+OAuth2AuthCode: OAuthAuthorization
@@ -4336,39 +4336,39 @@
-Name
+Name
String
Name that can be used to reference the authorization scheme
-Description
+Description
String?
Description of the authorization scheme
-Scopes
+Scopes
[AuthorizationScope]
Available scopes
-RefreshUrl
+RefreshUrl
URL?
Refresh Url
-AuthorizationUrl
+AuthorizationUrl
URL
Authorization URL
-TokenUrl
+TokenUrl
URL
Token Url
-AuthorizationScope
+AuthorizationScope
@@ -4379,24 +4379,24 @@
-Scope
+Scope
String
Scope name
-Grant
+Grant
String?
Identity that has access to the scope or can grant access to the scope.
-Description
+Description
String
Description of the scope
-ApiKey: Authorization
+ApiKey: Authorization
@@ -4407,29 +4407,29 @@
-Name
+Name
String
Name that can be used to reference the authorization scheme
-Description
+Description
String?
Description of the authorization scheme
-KeyName
+KeyName
String
The name of the header or query parameter
-Location
+Location
KeyLocation
Whether the API Key is passed in the header or as a query option
-KeyLocation
+KeyLocation
@@ -4440,28 +4440,28 @@
-Header
+Header
0
API Key is passed in the header
-QueryOption
+QueryOption
1
API Key is passed as a query option
-Cookie
+Cookie
2
API Key is passed as a cookie
-SchemeName
+SchemeName
Type: String
The name of the authorization scheme.
-
+
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 @@
-timeslices
+timeslices
[EntityType]
Binding parameter: Time slices to modify
-deltaTimeslices
+deltaTimeslices
[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 @@
-timeslices
+timeslices
[EntityType]
Binding parameter: Time slices to modify
-deltaTimeslices
+deltaTimeslices
[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 @@
-UnitOfTime
+UnitOfTime
UnitOfTime
Unit of time and other properties of a time period
-Timeline
+Timeline
Timeline
Describes how the history and future of the data are represented
-SupportedActions
+SupportedActions
[QualifiedActionName]
List of supported temporal actions
-UnitOfTime
+UnitOfTime
Unit of time and other properties of a time period
Derived Types:
@@ -4674,7 +4674,7 @@ UnitOfTimeDate
-UnitOfTimeDateTimeOffset: UnitOfTime
+UnitOfTimeDateTimeOffset: UnitOfTime
Period start and end are of type Edm.DateTimeOffset
@@ -4686,14 +4686,14 @@
-Precision
+Precision
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 @@
-ClosedClosedPeriods
+ClosedClosedPeriods
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:
@@ -4721,11 +4721,11 @@ TimelineVisible
-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 @@
-PeriodStart
+PeriodStart
PropertyPath
Property containing lower boundary of a period
-PeriodEnd
+PeriodEnd
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
+ObjectKey
[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 @@
-PeriodStart
+PeriodStart
PrimitiveType?
Lower boundary of the time slice
-PeriodEnd
+PeriodEnd
PrimitiveType?
Upper boundary of the time slice
-Timeslice
+Timeslice
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=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:
DefaultCapabilities
DefaultCapabilities
using PATCH semantics recursivelyDefaultCapabilities
have their default valueAnnotating 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:
DefaultCapabilities
DefaultCapabilities
using PATCH semantics recursivelyDefaultCapabilities
have their default valueAnnotating term ApplySupported
for a specific collection-valued resource overrides the default support with the specified properties using PATCH semantics:
ApplySupported
replace the corresponding properties specified in ApplySupportedDefaults
ApplySupported
override the corresponding properties specified in ApplySupportedDefaults
using PATCH semantics recursivelyApplySupported
nor in ApplySupportedDefaults
have their default valueAnnotating term ApplySupported
for a specific collection-valued resource overrides the default support with the specified properties using PATCH semantics:
ApplySupported
replace the corresponding properties specified in ApplySupportedDefaults
ApplySupported
override the corresponding properties specified in ApplySupportedDefaults
using PATCH semantics recursivelyApplySupported
nor in ApplySupportedDefaults
have their default value