Namespace: Org.OData.Capabilities.V1
Terms describing capabilities of a service
There are some capabilities which are strongly recommended for services to support even
though they are optional. Support for $top and $skip is a good example as
supporting these query options helps with performance of a service and are essential. Such
capabilities are assumed to be default capabilities of an OData service even in
the case that a capabilities annotation doesn’t exist. Capabilities annotations are
mainly expected to be used to explicitly specify that a service doesn’t support such
capabilities. Capabilities annotations can as well be used to declaratively
specify the support of such capabilities.
On the other hand, there are some capabilities that a service may choose to support or
not support and in varying degrees. $filter and $orderby are such good examples.
This vocabulary aims to define terms to specify support or no support for such
capabilities.
A service is assumed to support by default the following capabilities even though an
annotation doesn’t exist:
- Countability ($count)
- Client pageability ($top, $skip)
- Expandability ($expand)
- Indexability by key
- Batch support ($batch)
- Navigability of navigation properties
A service is expected to support the following capabilities. If not supported, the
service is expected to call out the restrictions using annotations:
- Filterability ($filter)
- Sortability ($orderby)
- Queryability of top level entity sets
- Query functions
A client cannot assume that a service supports certain capabilities. A client can try, but
it needs to be prepared to handle an error in case the following capabilities are not
supported:
- Insertability
- Updatability
- Deletability
Term |
Type |
Description |
ConformanceLevel |
ConformanceLevelType |
The conformance level achieved by this service |
SupportedFormats |
[MediaType] |
Media types of supported formats, including format parameters |
SupportedMetadataFormats |
[MediaType] |
Media types of supported formats for $metadata, including format parameters |
AcceptableEncodings |
[String] |
List of acceptable compression methods for ($batch) requests, e.g. gzip |
AsynchronousRequestsSupported |
Tag |
Service supports the asynchronous request preference |
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 |
IsolationLevel |
Supported odata.isolation levels |
CrossJoinSupported |
Tag |
Supports cross joins for the entity sets in this container |
CallbackSupported |
CallbackType |
Supports callbacks for the specified protocols |
ChangeTracking |
ChangeTrackingType |
Change tracking capabilities of this service or entity set |
CountRestrictions |
CountRestrictionsType |
Restrictions on /$count path suffix and $count=true system query option |
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 |
Tag |
Supports key values according to OData URL conventions |
TopSupported |
Tag |
Supports $top |
SkipSupported |
Tag |
Supports $skip |
ComputeSupported |
Tag |
Supports $compute |
SelectSupport |
SelectSupportType |
Support for $select and nested query options within $select |
BatchSupported |
Tag |
Supports $batch requests. Services that apply the BatchSupported term should also apply the more comprehensive BatchSupport term. |
BatchSupport |
BatchSupportType |
Batch Support for the service |
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 |
FilterRestrictionsType |
Restrictions on filter expressions |
SortRestrictions |
SortRestrictionsType |
Restrictions on orderby expressions |
ExpandRestrictions |
ExpandRestrictionsType |
Restrictions on expand expressions |
SearchRestrictions |
SearchRestrictionsType |
Restrictions on search expressions |
KeyAsSegmentSupported |
Tag |
Supports key-as-segment convention for addressing entities within a collection |
QuerySegmentSupported |
Tag |
Supports passing query options in the request body |
InsertRestrictions |
InsertRestrictionsType |
Restrictions on insert operations |
DeepInsertSupport |
DeepInsertSupportType |
Deep Insert Support of the annotated resource (the whole service, an entity set, or a collection-valued resource) |
UpdateRestrictions |
UpdateRestrictionsType |
Restrictions on update operations |
DeepUpdateSupport |
DeepUpdateSupportType |
Deep Update Support of the annotated resource (the whole service, an entity set, or a collection-valued resource) |
DeleteRestrictions |
DeleteRestrictionsType |
Restrictions on delete operations |
CollectionPropertyRestrictions |
[CollectionPropertyRestrictionsType] |
Describes restrictions on operations applied to collection-valued structural properties |
OperationRestrictions |
OperationRestrictionsType |
Restrictions for function or action operation |
AnnotationValuesInQuerySupported |
Tag |
Supports annotation values within system query options |
ModificationQueryOptions |
ModificationQueryOptionsType |
Support for query options with modification requests (insert, update, action invocation) |
ReadRestrictions |
ReadRestrictionsType |
Restrictions for retrieving a collection of entities, retrieving a singleton instance. |
CustomHeaders |
[CustomParameter] |
Custom headers that are supported/required for the annotated resource (Example) |
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. |
MediaLocationUpdateSupported |
Tag |
Stream property supports update of its media edit URL and/or media read URL |
Member |
Value |
Description |
Minimal |
0 |
Minimal conformance level |
Intermediate |
1 |
Intermediate conformance level |
Advanced |
2 |
Advanced conformance level |
Flag Member |
Value |
Description |
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 |
A non-empty collection lists the full set of supported protocols. A empty collection means 'only HTTP is supported'
Property |
Type |
Description |
Id |
String |
Protocol Identifier |
UrlTemplate |
String |
URL Template including parameters. Parameters are enclosed in curly braces {} as defined in RFC6570 |
DocumentationUrl |
URL |
Human readable description of the meaning of the URL Template parameters |
Property |
Type |
Description |
Supported |
Boolean |
This entity set supports the odata.track-changes preference |
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 |
[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. |
Property |
Type |
Description |
Countable |
Boolean |
Entities can be counted (only valid if targeting an entity set) |
NonCountableProperties |
[PropertyPath] |
Members of these collection properties cannot be counted |
NonCountableNavigationProperties |
[NavigationPropertyPath] |
Members of these navigation properties cannot be counted |
Member |
Value |
Description |
Recursive |
0 |
Navigation properties can be recursively navigated |
Single |
1 |
Navigation properties can be navigated to a single level |
None |
2 |
Navigation properties are not navigable |
Property |
Type |
Description |
Filterable |
Boolean |
$filter is supported |
RequiresFilter |
Boolean |
$filter is required |
RequiredProperties |
[PropertyPath] |
These properties must be specified in the $filter clause (properties of derived types are not allowed here) |
NonFilterableProperties |
[PropertyPath] |
These structural properties cannot be used in filter expressions |
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. |
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. |
@Core.Description |
Description |
Annotation |
Type: String
Allowed Value |
Description |
SingleValue |
Property can be used in a single eq clause |
MultiValue |
Property can be used in multiple eq and in clauses, combined by or (which is logically equivalent to a single in clause) |
SingleRange |
Property can be used in at most one ge and/or one le clause, separated by and |
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 |
String property can be used as first operand in startswith , endswith , and contains clauses |
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. |
Property |
Type |
Description |
Expandable |
Boolean |
$expand is supported |
StreamsExpandable |
Boolean |
$expand is supported for stream properties and media resources |
NonExpandableProperties |
[NavigationPropertyPath] |
These properties cannot be used in expand expressions |
NonExpandableStreamProperties |
[PropertyPath] |
These stream properties cannot be used in expand expressions |
MaxLevels |
Int32 |
The maximum number of levels that can be expanded in a expand expression. A value of -1 indicates there is no restriction. |
@Core.Description |
Description |
Annotation |
Flag Member |
Value |
Description |
none |
0 |
Single search term |
AND |
1 |
Multiple search terms separated by AND |
OR |
2 |
Multiple search terms separated by OR |
NOT |
4 |
Search terms preceded by NOT |
phrase |
8 |
Search phrases enclosed in double quotes |
group |
16 |
Precedence grouping of search expressions with parentheses |
Property |
Type |
Description |
Scope |
String |
Name of the scope. |
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. |
Property |
Type |
Description |
Supported |
Boolean |
Annotation target supports deep inserts |
ContentIDSupported |
Boolean |
Annotation target supports accepting and returning nested entities annotated with the Core.ContentID instance annotation. |
Property |
Type |
Description |
Supported |
Boolean |
Annotation target supports deep updates |
ContentIDSupported |
Boolean |
Annotation target supports accepting and returning nested entities annotated with the Core.ContentID instance annotation. |
Derived Types:
Restrictions for retrieving an entity by key
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.