Skip to content

Commit

Permalink
Protocol conformance: links to sections (#77)
Browse files Browse the repository at this point in the history
  • Loading branch information
ralfhandl authored Aug 1, 2023
1 parent da3a927 commit 700e5d8
Show file tree
Hide file tree
Showing 10 changed files with 63 additions and 66 deletions.
Binary file modified docs/odata-csdl-json/odata-csdl-json.pdf
Binary file not shown.
Binary file modified docs/odata-csdl-xml/odata-csdl-xml.pdf
Binary file not shown.
Binary file modified docs/odata-data-aggregation-ext/odata-data-aggregation-ext.pdf
Binary file not shown.
Binary file modified docs/odata-json-format/odata-json-format.pdf
Binary file not shown.
38 changes: 19 additions & 19 deletions docs/odata-protocol/odata-protocol.html
Original file line number Diff line number Diff line change
Expand Up @@ -2575,20 +2575,20 @@ <h3 id="1211-odata-40-minimal-conformance-level"><a name="OData40MinimalConforma
<ol type="1">
<li>MUST publish a <a href="#ServiceDocumentRequest">service document</a> at the service root (<a href="#ServiceDocumentRequest">section 11.1.1</a>)</li>
<li>MUST return data according to the <a href="#ODataJSON">OData-JSON</a> format</li>
<li>MUST use <a href="#ServerDrivenPaging">server-driven paging</a> when returning partial results (section 11.2.6.7) and not use any other mechanism</li>
<li>MUST return the appropriate <a href="#HeaderODataVersion"><code>OData-Version</code></a> header (section 8.1.5)</li>
<li>MUST use <a href="#ServerDrivenPaging">server-driven paging</a> when returning partial results (<a href="#ServerDrivenPaging">section 11.2.6.7</a>) and not use any other mechanism</li>
<li>MUST return the appropriate <a href="#HeaderODataVersion"><code>OData-Version</code></a> header (<a href="#HeaderODataVersion">section 8.1.5</a>)</li>
<li>MUST conform to the semantics the following headers, or fail the request
<ol type="1">
<li><code>Accept</code> (<a href="#HeaderAccept">section 8.2.1</a>)</li>
<li><code>OData-MaxVersion</code> (<a href="#HeaderODataMaxVersion">section 8.2.7</a>)</li>
<li><a href="#HeaderAccept"><code>Accept</code></a> (<a href="#HeaderAccept">section 8.2.1</a>)</li>
<li><a href="#HeaderODataMaxVersion"><code>OData-MaxVersion</code></a> (<a href="#HeaderODataMaxVersion">section 8.2.7</a>)</li>
</ol></li>
<li>MUST follow OData guidelines for extensibility (<a href="#Extensibility">section 6</a> and all subsections)</li>
<li>MUST successfully parse the request according to <a href="#ODataABNF">OData-ABNF</a> for any supported system query options and either follow the specification or return [<code>501 Not Implemented</code>] for any unsupported functionality ([section 1501NotImplemented])</li>
<li>MUST follow OData guidelines for <a href="#Extensibility">extensibility</a> (<a href="#Extensibility">section 6</a> and all subsections)</li>
<li>MUST successfully parse the request according to <a href="#ODataABNF">OData-ABNF</a> for any supported system query options and either follow the specification or return <a href="#ResponseCode501NotImplemented"><code>501 Not Implemented</code></a> for any unsupported functionality (<a href="#ResponseCode501NotImplemented">section 9.3.1</a>)</li>
<li>MUST expose only data types defined in <a href="#ODataCSDL">OData-CSDLXML</a></li>
<li>MUST NOT require clients to understand any metadata or instance annotations (<a href="#VocabularyExtensibility">section 6.4</a>), custom headers (<a href="#HeaderFieldExtensibility">section 6.5</a>), or custom content (<a href="#PayloadExtensibility">section 6.2</a>) in the payload in order to correctly consume the service</li>
<li>MUST NOT violate any OData update semantics (<a href="#DataModification">section 11.4</a>) and all subsections)</li>
<li>MUST NOT violate any OData <a href="#DataModification">update semantics</a> (<a href="#DataModification">section 11.4</a> and all subsections)</li>
<li>MUST NOT violate any other OData-defined semantics</li>
<li>SHOULD support <code>$expand</code> (<a href="#SystemQueryOptionexpand">section 11.2.5.2</a>)</li>
<li>SHOULD support <a href="#SystemQueryOptionexpand"><code>$expand</code></a> (<a href="#SystemQueryOptionexpand">section 11.2.5.2</a>)</li>
<li>SHOULD publish metadata at <code>$metadata</code> according to <a href="#ODataCSDL">OData-CSDLXML</a> and MAY publish metadata according to <a href="#ODataCSDL">OData-CSDLJSON</a> (<a href="#MetadataDocumentRequest">section 11.1.2</a>)</li>
<li>MUST support prefixed variants of supported headers and preference values</li>
<li>MUST support enumeration and duration literals in URLs with the type prefix</li>
Expand Down Expand Up @@ -2621,17 +2621,17 @@ <h3 id="1212-odata-40-intermediate-conformance-level"><a name="OData40Intermedia
<p>In order to conform to the OData Intermediate Conformance Level, a service:</p>
<ol type="1">
<li>MUST conform to the <a href="#OData40MinimalConformanceLevel">OData 4.0 Minimal Conformance Level</a></li>
<li>MUST successfully parse the <a href="#ODataABNF">OData-ABNF</a> and either follow the specification or return <code>501 Not Implemented</code> for any unsupported functionality ([section 2501NotImplemented])</li>
<li>MUST successfully parse the <a href="#ODataABNF">OData-ABNF</a> and either follow the specification or return <code>501 Not Implemented</code> for any unsupported functionality (<a href="#ResponseCode501NotImplemented">section 9.3.1</a>)</li>
<li>MUST support <code>$select</code> (<a href="#SystemQueryOptionselect">section 11.2.5.1</a>)`</li>
<li>MUST support casting to a derived type according to <a href="#ODataURL">OData URL</a> if derived types are present in the model</li>
<li>MUST support <code>$top</code> (<a href="#SystemQueryOptiontop">section 11.2.6.3</a>)</li>
<li>MUST support <code>/$value</code> on media entities (section 4.12 in <a href="#ODataURL">OData URL</a>) and individual properties (<a href="#RequestingaPropertysRawValueusingvalue">section 11.2.4.1</a>)</li>
<li>MUST support <code>/$value</code> on media entities (<a href="#MetadataDocumentRequest">section 11.1.2</a>) and individual properties (<a href="#RequestingaPropertysRawValueusingvalue">section 11.2.4.1</a>)</li>
<li>MUST support <code>$filter</code> (<a href="#SystemQueryOptionfilter">section 11.2.6.1</a>)
<ol type="1">
<li>MUST support <code>eq</code>, <code>ne</code> filter operations on properties of entities in the requested entity set (<a href="#SystemQueryOptionfilter">section 11.2.6.1</a>)</li>
<li>MUST support aliases in <code>$filter</code> expressions (<a href="#ParameterAliases">section 11.2.6.1.2</a>)</li>
<li>SHOULD support additional filter operations (<a href="#BuiltinQueryFunctions">section 11.2.6.1.1</a>) and MUST return <code>501 Not Implemented</code> for any unsupported filter operations ([section 3501NotImplemented])</li>
<li>SHOULD support the canonical functions (<a href="#BuiltinQueryFunctions">section 11.2.6.1.1</a>) and MUST return <code>501 Not Implemented</code> for any unsupported canonical functions ([section 4501NotImplemented])</li>
<li>SHOULD support additional filter operations (<a href="#BuiltinQueryFunctions">section 11.2.6.1.1</a>) and MUST return <code>501 Not Implemented</code> for any unsupported filter operations (<a href="#ResponseCode501NotImplemented">section 9.3.1</a>)</li>
<li>SHOULD support the canonical functions (<a href="#BuiltinQueryFunctions">section 11.2.6.1.1</a>) and MUST return <code>501 Not Implemented</code> for any unsupported canonical functions (<a href="#ResponseCode501NotImplemented">section 9.3.1</a>)</li>
<li>SHOULD support <code>$filter</code> on expanded entities (<a href="#ExpandOptions">section 11.2.5.2.1</a>)</li>
</ol></li>
<li>SHOULD publish metadata at <code>$metadata</code> according to <a href="#ODataCSDL">OData-CSDLXML</a> (<a href="#MetadataDocumentRequest">section 11.1.2</a>)</li>
Expand Down Expand Up @@ -2682,7 +2682,7 @@ <h3 id="1221-odata-401-minimal-conformance-level"><a name="OData401MinimalConfor
<p>In order to conform to the OData 4.01 Minimal Conformance Level, a service:</p>
<ol type="1">
<li>MUST conform to the <a href="#OData40MinimalConformanceLevel">OData 4.0 Minimal Conformance Level</a></li>
<li>MUST be compliant with version 4.01 of the <a href="#ODataJSON">OData-JSON</a> format</li>
<li>MUST be compliant with version 4.01 of the <a href="#ODataJSON">OData-JSON</a> format</li>
<li>MUST return the <a href="#HeaderAsyncResult"><code>AsyncResult</code></a> result header in the final response to an asynchronous request if asynchronous operations are supported.</li>
<li>MUST support both prefixed and non-prefixed variants of supported headers and preference values</li>
<li>MUST reject a request with an incompatible <a href="#SystemQueryOptionschemaversion"><code>$schemaversion</code></a> system query option if a <a href="https://github.com/oasis-tcs/odata-vocabularies/blob/master/vocabularies/Org.OData.Core.V1.md#SchemaVersion"><code>Core.SchemaVersion</code></a> annotation is returned in <code>$metadata</code></li>
Expand All @@ -2709,7 +2709,7 @@ <h3 id="1221-odata-401-minimal-conformance-level"><a name="OData401MinimalConfor
<li>MAY support the count of a filtered collection in a common expression</li>
<li>MAY support equal and non-equal structural comparison</li>
</ol></li>
<li>SHOULD publish metadata at <code>$metadata</code> according to both <a href="#ODataCSDL">OData-CSDLXML</a> and <a href="#ODataCSDL">OData-CSDLJSON</a> (section 11.1.2)</li>
<li>SHOULD publish metadata at <code>$metadata</code> according to both <a href="#ODataCSDL">OData-CSDLXML</a> and <a href="#ODataCSDL">OData-CSDLJSON</a> (<a href="#MetadataDocumentRequest">section 11.1.2</a>)</li>
<li>SHOULD NOT have identifiers within a uniqueness scope (e.g. a schema, a structural type, or an entity container) that differ only by case</li>
<li>SHOULD return the <a href="https://github.com/oasis-tcs/odata-vocabularies/blob/master/vocabularies/Org.OData.Core.V1.md#ODataVersions"><code>Core.ODataVersions</code></a> annotation</li>
<li>SHOULD report capabilities through the Capabilities vocabulary</li>
Expand All @@ -2718,7 +2718,7 @@ <h3 id="1221-odata-401-minimal-conformance-level"><a name="OData401MinimalConfor
<li>MAY support <code>$search</code> for all collections</li>
<li>MAY support 4.01 behavior, including returning 4.01 content and payloads, if the client does not specify the <code>OData-MaxVersion:4.0</code> request header</li>
</ol>
<p> In addition, to be considered an <em>Updatable OData 4.01 Service</em>, the service:</p>
<p>In addition, to be considered an <em>Updatable OData 4.01 Service</em>, the service:</p>
<ol start="18" type="1">
<li>MUST conform to the <a href="#OData40MinimalConformanceLevel">OData 4.0 Minimal Conformance Level</a> for an Updateable service.</li>
<li>MUST support <code>DELETE</code> to the reference of a collection member to be removed, identified by key (<a href="#RemoveaReferencetoanEntity">section 11.4.6.2</a>)</li>
Expand Down Expand Up @@ -2765,16 +2765,16 @@ <h3 id="1223-odata-401-advanced-conformance-level"><a name="OData401AdvancedConf
<li>MUST support batch requests according both to the multipart format (<a href="#BatchRequests">section 11.7</a> and all subsections) and the JSON Batch format defined in <a href="#ODataJSON">OData-JSON</a></li>
<li>SHOULD support filtering a collection using a <code>/$filter</code> path segment</li>
<li>SHOULD support nested parameter alias assignments in <code>$select</code> and <code>$expand</code></li>
<li>MAY support case-insensitive comparison of identifiers in URLs and request payloads if no exact match is found, using the same lookup sequence as for <a href="#DefaultNamespaces">default namespaces</a> with a case-insensitive comparison </li>
<li>MAY support case-insensitive comparison of identifiers in URLs and request payloads if no exact match is found, using the same lookup sequence as for <a href="#DefaultNamespaces">default namespaces</a> with a case-insensitive comparison</li>
</ol>
<h2 id="123-interoperable-odata-clients"><a name="InteroperableODataClients" href="#InteroperableODataClients">12.3 Interoperable OData Clients</a></h2>
<p>Interoperable OData clients can expect to work with OData Services that comply with at least the <a href="#OData40MinimalConformanceLevel">OData 4.0 Minimal Conformance Level</a> and implement the <a href="#ODataJSON">OData-JSON</a> format.</p>
<p>To be generally interoperable, OData clients      </p>
<p>To be generally interoperable, OData clients</p>
<ol type="1">
<li>MUST specify the <code>OData-MaxVersion</code> header in requests (section 8.2.7)</li>
<li>MUST specify the <code>OData-MaxVersion</code> header in requests (<a href="#HeaderODataMaxVersion">section 8.2.7</a>)</li>
<li>MUST specify <code>OData-Version</code> (<a href="#HeaderODataVersion">section 8.1.5</a>) and <code>Content-Type</code> (<a href="#HeaderContentType">section 8.1.1</a>) in any request with a payload</li>
<li>MUST be a conforming consumer of OData as defined in <a href="#ODataJSON">OData-JSON</a></li>
<li>MUST follow redirects ([section 53xxRedirection])</li>
<li>MUST follow redirects (<a href="#ResponseCode3xxRedirection">section 9.1.5</a>)</li>
<li>MUST correctly handle next links (<a href="#ServerDrivenPaging">section 11.2.6.7</a>)</li>
<li>MUST support instances returning properties and navigation properties not specified in metadata (<a href="#RequestingData">section 11.2</a>)</li>
<li>MUST generate <code>PATCH</code> requests for updates, if the client supports updates (<a href="#UpdateanEntity">section 11.4.3</a>)</li>
Expand Down
47 changes: 23 additions & 24 deletions docs/odata-protocol/odata-protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -6248,29 +6248,29 @@ service:
service root ([section 11.1.1](#ServiceDocumentRequest))
2. MUST return data according to the [OData-JSON](#ODataJSON) format
3. MUST use [server-driven paging](#ServerDrivenPaging) when returning
partial results (section 11.2.6.7) and not use any other mechanism
partial results ([section 11.2.6.7](#ServerDrivenPaging)) and not use any other mechanism
4. MUST return the appropriate [`OData-Version`](#HeaderODataVersion)
header (section 8.1.5)
header ([section 8.1.5](#HeaderODataVersion))
5. MUST conform to the semantics the following headers, or fail the
request
1. `Accept` ([section 8.2.1](#HeaderAccept))
2. `OData-MaxVersion` ([section 8.2.7](#HeaderODataMaxVersion))
6. MUST follow OData guidelines for extensibility
1. [`Accept`](#HeaderAccept) ([section 8.2.1](#HeaderAccept))
2. [`OData-MaxVersion`](#HeaderODataMaxVersion) ([section 8.2.7](#HeaderODataMaxVersion))
6. MUST follow OData guidelines for [extensibility](#Extensibility)
([section 6](#Extensibility) and all subsections)
7. MUST successfully parse the request according to
[OData-ABNF](#ODataABNF) for any supported system query options and
either follow the specification or return
[`501 Not Implemented`] for any
unsupported functionality ([section 1501NotImplemented])
[`501 Not Implemented`](#ResponseCode501NotImplemented) for any
unsupported functionality ([section 9.3.1](#ResponseCode501NotImplemented))
8. MUST expose only data types defined in [OData-CSDLXML](#ODataCSDL)
9. MUST NOT require clients to understand any metadata or instance
annotations ([section 6.4](#VocabularyExtensibility)), custom headers ([section 6.5](#HeaderFieldExtensibility)), or custom
content ([section 6.2](#PayloadExtensibility)) in the payload in order to correctly consume the
service
10. MUST NOT violate any OData update semantics
([section 11.4](#DataModification)) and all subsections)
10. MUST NOT violate any OData [update semantics](#DataModification)
([section 11.4](#DataModification) and all subsections)
11. MUST NOT violate any other OData-defined semantics
12. SHOULD support `$expand` ([section 11.2.5.2](#SystemQueryOptionexpand))
12. SHOULD support [`$expand`](#SystemQueryOptionexpand) ([section 11.2.5.2](#SystemQueryOptionexpand))
13. SHOULD publish metadata at `$metadata` according to
[OData-CSDLXML](#ODataCSDL) and MAY publish metadata according to
[OData-CSDLJSON](#ODataCSDL) ([section 11.1.2](#MetadataDocumentRequest))
Expand Down Expand Up @@ -6329,23 +6329,22 @@ service:
Level](#OData40MinimalConformanceLevel)
2. MUST successfully parse the [OData-ABNF](#ODataABNF) and either
follow the specification or return `501 Not Implemented` for any
unsupported functionality ([section 2501NotImplemented])
unsupported functionality ([section 9.3.1](#ResponseCode501NotImplemented))
3. MUST support `$select` ([section 11.2.5.1](#SystemQueryOptionselect))`
4. MUST support casting to a derived type according to
[OData URL](#ODataURL) if derived types are present in the model
5. MUST support `$top` ([section 11.2.6.3](#SystemQueryOptiontop))
6. MUST support `/$value` on media entities (section 4.12 in
[OData URL](#ODataURL)) and individual properties ([section 11.2.4.1](#RequestingaPropertysRawValueusingvalue))
6. MUST support `/$value` on media entities ([section 11.1.2](#MetadataDocumentRequest)) and individual properties ([section 11.2.4.1](#RequestingaPropertysRawValueusingvalue))
7. MUST support `$filter` ([section 11.2.6.1](#SystemQueryOptionfilter))
1. MUST support `eq`, `ne` filter operations on properties of entities
in the requested entity set ([section 11.2.6.1](#SystemQueryOptionfilter))
2. MUST support aliases in `$filter` expressions ([section 11.2.6.1.2](#ParameterAliases))
3. SHOULD support additional filter operations ([section 11.2.6.1.1](#BuiltinQueryFunctions))
and MUST return `501 Not Implemented` for any unsupported filter
operations ([section 3501NotImplemented])
operations ([section 9.3.1](#ResponseCode501NotImplemented))
4. SHOULD support the canonical functions ([section 11.2.6.1.1](#BuiltinQueryFunctions)) and
MUST return `501 Not Implemented` for any unsupported canonical
functions ([section 4501NotImplemented])
functions ([section 9.3.1](#ResponseCode501NotImplemented))
5. SHOULD support `$filter` on expanded entities ([section 11.2.5.2.1](#ExpandOptions))
8. SHOULD publish metadata at `$metadata` according to
[OData-CSDLXML](#ODataCSDL) ([section 11.1.2](#MetadataDocumentRequest))
Expand Down Expand Up @@ -6424,7 +6423,7 @@ service:

1. MUST conform to the [OData 4.0 Minimal Conformance
Level](#OData40MinimalConformanceLevel)
2. MUST be compliant with version 4.01 of the [OData-JSON](#ODataJSON) format
2. MUST be compliant with version 4.01 of the [OData-JSON](#ODataJSON) format
3. MUST return the [`AsyncResult`](#HeaderAsyncResult) result header in
the final response to an asynchronous request if asynchronous operations
are supported.
Expand Down Expand Up @@ -6469,8 +6468,8 @@ with a maximum cardinality of one
expression
14. MAY support equal and non-equal structural comparison
10. SHOULD publish metadata at `$metadata` according to both
[OData-CSDLXML](#ODataCSDL) and [OData-CSDLJSON](#ODataCSDL) (section
11.1.2)
[OData-CSDLXML](#ODataCSDL) and [OData-CSDLJSON](#ODataCSDL) ([section
11.1.2](#MetadataDocumentRequest))
11. SHOULD NOT have identifiers within a uniqueness scope (e.g. a
schema, a structural type, or an entity container) that differ only by
case
Expand All @@ -6485,7 +6484,7 @@ annotation
payloads, if the client does not specify the `OData-MaxVersion:4.0`
request header

 In addition, to be considered an *Updatable OData 4.01 Service*, the
In addition, to be considered an *Updatable OData 4.01 Service*, the
service:

18. MUST conform to the [OData 4.0 Minimal Conformance
Expand Down Expand Up @@ -6560,23 +6559,23 @@ segment
10. MAY support case-insensitive comparison of identifiers in URLs and
request payloads if no exact match is found, using the same lookup
sequence as for [default namespaces](#DefaultNamespaces) with a
case-insensitive comparison 
case-insensitive comparison

## <a name="InteroperableODataClients" href="#InteroperableODataClients">12.3 Interoperable OData Clients</a>

Interoperable OData clients can expect to work with OData Services that
comply with at least the [OData 4.0 Minimal Conformance
Level](#OData40MinimalConformanceLevel) and implement the
[OData-JSON](#ODataJSON) format.

To be generally interoperable, OData clients      
To be generally interoperable, OData clients

1. MUST specify the `OData-MaxVersion` header in requests (section
8.2.7)
1. MUST specify the `OData-MaxVersion` header in requests ([section 8.2.7](#HeaderODataMaxVersion))
2. MUST specify `OData-Version` ([section 8.1.5](#HeaderODataVersion)) and `Content-Type`
([section 8.1.1](#HeaderContentType)) in any request with a payload
3. MUST be a conforming consumer of OData as defined in
[OData-JSON](#ODataJSON)
4. MUST follow redirects ([section 53xxRedirection])
4. MUST follow redirects ([section 9.1.5](#ResponseCode3xxRedirection))
5. MUST correctly handle next links ([section 11.2.6.7](#ServerDrivenPaging))
6. MUST support instances returning properties and navigation
properties not specified in metadata ([section 11.2](#RequestingData))
Expand Down
Binary file modified docs/odata-protocol/odata-protocol.pdf
Binary file not shown.
Binary file modified docs/odata-url-conventions/odata-url-conventions.pdf
Binary file not shown.
Loading

0 comments on commit 700e5d8

Please sign in to comment.