diff --git a/docs/odata-csdl-json/odata-csdl-json.pdf b/docs/odata-csdl-json/odata-csdl-json.pdf index 54f12d8e0..ee63d652f 100644 Binary files a/docs/odata-csdl-json/odata-csdl-json.pdf and b/docs/odata-csdl-json/odata-csdl-json.pdf differ diff --git a/docs/odata-csdl-xml/odata-csdl-xml.pdf b/docs/odata-csdl-xml/odata-csdl-xml.pdf index 96b848808..703f5f9db 100644 Binary files a/docs/odata-csdl-xml/odata-csdl-xml.pdf and b/docs/odata-csdl-xml/odata-csdl-xml.pdf differ diff --git a/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.pdf b/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.pdf index 8ce686269..3a5878c65 100644 Binary files a/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.pdf and b/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.pdf differ diff --git a/docs/odata-json-format/odata-json-format.pdf b/docs/odata-json-format/odata-json-format.pdf index e942e85e2..bf9f4f589 100644 Binary files a/docs/odata-json-format/odata-json-format.pdf and b/docs/odata-json-format/odata-json-format.pdf differ diff --git a/docs/odata-protocol/odata-protocol.html b/docs/odata-protocol/odata-protocol.html index 85da24971..26c253250 100644 --- a/docs/odata-protocol/odata-protocol.html +++ b/docs/odata-protocol/odata-protocol.html @@ -2575,20 +2575,20 @@

  • MUST publish a service document at the service root (section 11.1.1)
  • MUST return data according to the OData-JSON format
  • -
  • MUST use server-driven paging when returning partial results (section 11.2.6.7) and not use any other mechanism
  • -
  • MUST return the appropriate OData-Version header (section 8.1.5)
  • +
  • MUST use server-driven paging when returning partial results (section 11.2.6.7) and not use any other mechanism
  • +
  • MUST return the appropriate OData-Version header (section 8.1.5)
  • MUST conform to the semantics the following headers, or fail the request
      -
    1. Accept (section 8.2.1)
    2. -
    3. OData-MaxVersion (section 8.2.7)
    4. +
    5. Accept (section 8.2.1)
    6. +
    7. OData-MaxVersion (section 8.2.7)
  • -
  • MUST follow OData guidelines for extensibility (section 6 and all subsections)
  • -
  • MUST successfully parse the request according to OData-ABNF for any supported system query options and either follow the specification or return [501 Not Implemented] for any unsupported functionality ([section 1501NotImplemented])
  • +
  • MUST follow OData guidelines for extensibility (section 6 and all subsections)
  • +
  • MUST successfully parse the request according to OData-ABNF for any supported system query options and either follow the specification or return 501 Not Implemented for any unsupported functionality (section 9.3.1)
  • MUST expose only data types defined in OData-CSDLXML
  • MUST NOT require clients to understand any metadata or instance annotations (section 6.4), custom headers (section 6.5), or custom content (section 6.2) in the payload in order to correctly consume the service
  • -
  • MUST NOT violate any OData update semantics (section 11.4) and all subsections)
  • +
  • MUST NOT violate any OData update semantics (section 11.4 and all subsections)
  • MUST NOT violate any other OData-defined semantics
  • -
  • SHOULD support $expand (section 11.2.5.2)
  • +
  • SHOULD support $expand (section 11.2.5.2)
  • SHOULD publish metadata at $metadata according to OData-CSDLXML and MAY publish metadata according to OData-CSDLJSON (section 11.1.2)
  • MUST support prefixed variants of supported headers and preference values
  • MUST support enumeration and duration literals in URLs with the type prefix
  • @@ -2621,17 +2621,17 @@

  • MUST conform to the OData 4.0 Minimal Conformance Level
  • -
  • MUST successfully parse the OData-ABNF and either follow the specification or return 501 Not Implemented for any unsupported functionality ([section 2501NotImplemented])
  • +
  • MUST successfully parse the OData-ABNF and either follow the specification or return 501 Not Implemented for any unsupported functionality (section 9.3.1)
  • MUST support $select (section 11.2.5.1)`
  • MUST support casting to a derived type according to OData URL if derived types are present in the model
  • MUST support $top (section 11.2.6.3)
  • -
  • MUST support /$value on media entities (section 4.12 in OData URL) and individual properties (section 11.2.4.1)
  • +
  • MUST support /$value on media entities (section 11.1.2) and individual properties (section 11.2.4.1)
  • MUST support $filter (section 11.2.6.1)
    1. MUST support eq, ne filter operations on properties of entities in the requested entity set (section 11.2.6.1)
    2. MUST support aliases in $filter expressions (section 11.2.6.1.2)
    3. -
    4. SHOULD support additional filter operations (section 11.2.6.1.1) and MUST return 501 Not Implemented for any unsupported filter operations ([section 3501NotImplemented])
    5. -
    6. SHOULD support the canonical functions (section 11.2.6.1.1) and MUST return 501 Not Implemented for any unsupported canonical functions ([section 4501NotImplemented])
    7. +
    8. SHOULD support additional filter operations (section 11.2.6.1.1) and MUST return 501 Not Implemented for any unsupported filter operations (section 9.3.1)
    9. +
    10. SHOULD support the canonical functions (section 11.2.6.1.1) and MUST return 501 Not Implemented for any unsupported canonical functions (section 9.3.1)
    11. SHOULD support $filter on expanded entities (section 11.2.5.2.1)
  • SHOULD publish metadata at $metadata according to OData-CSDLXML (section 11.1.2)
  • @@ -2682,7 +2682,7 @@

  • MUST conform to the OData 4.0 Minimal Conformance Level
  • -
  • MUST be compliant with version 4.01 of the OData-JSON format
  • +
  • MUST be compliant with version 4.01 of the OData-JSON format
  • MUST return the AsyncResult result header in the final response to an asynchronous request if asynchronous operations are supported.
  • MUST support both prefixed and non-prefixed variants of supported headers and preference values
  • MUST reject a request with an incompatible $schemaversion system query option if a Core.SchemaVersion annotation is returned in $metadata
  • @@ -2709,7 +2709,7 @@

    OData-CSDLXML and OData-CSDLJSON (section 11.1.2) +
  • SHOULD publish metadata at $metadata according to both OData-CSDLXML and OData-CSDLJSON (section 11.1.2)
  • SHOULD NOT have identifiers within a uniqueness scope (e.g. a schema, a structural type, or an entity container) that differ only by case
  • SHOULD return the Core.ODataVersions annotation
  • SHOULD report capabilities through the Capabilities vocabulary
  • @@ -2718,7 +2718,7 @@

  • MUST conform to the OData 4.0 Minimal Conformance Level for an Updateable service.
  • MUST support DELETE to the reference of a collection member to be removed, identified by key (section 11.4.6.2)
  • @@ -2765,16 +2765,16 @@

    section 11.7 and all subsections) and the JSON Batch format defined in OData-JSON
  • SHOULD support filtering a collection using a /$filter path segment
  • SHOULD support nested parameter alias assignments in $select and $expand
  • -
  • 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 with a case-insensitive comparison 
  • +
  • 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 with a case-insensitive comparison
  • 12.3 Interoperable OData Clients

    Interoperable OData clients can expect to work with OData Services that comply with at least the OData 4.0 Minimal Conformance Level and implement the OData-JSON 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)
    2. +
    3. MUST specify the OData-MaxVersion header in requests (section 8.2.7)
    4. MUST specify OData-Version (section 8.1.5) and Content-Type (section 8.1.1) in any request with a payload
    5. MUST be a conforming consumer of OData as defined in OData-JSON
    6. -
    7. MUST follow redirects ([section 53xxRedirection])
    8. +
    9. MUST follow redirects (section 9.1.5)
    10. MUST correctly handle next links (section 11.2.6.7)
    11. MUST support instances returning properties and navigation properties not specified in metadata (section 11.2)
    12. MUST generate PATCH requests for updates, if the client supports updates (section 11.4.3)
    13. diff --git a/docs/odata-protocol/odata-protocol.md b/docs/odata-protocol/odata-protocol.md index 9d1cb5fa4..572f87580 100644 --- a/docs/odata-protocol/odata-protocol.md +++ b/docs/odata-protocol/odata-protocol.md @@ -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)) @@ -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)) @@ -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. @@ -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 @@ -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 @@ -6560,7 +6559,8 @@ 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 + ## 12.3 Interoperable OData Clients Interoperable OData clients can expect to work with OData Services that @@ -6568,15 +6568,14 @@ 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)) diff --git a/docs/odata-protocol/odata-protocol.pdf b/docs/odata-protocol/odata-protocol.pdf index 2ae8987ae..ae6222ff6 100644 Binary files a/docs/odata-protocol/odata-protocol.pdf and b/docs/odata-protocol/odata-protocol.pdf differ diff --git a/docs/odata-url-conventions/odata-url-conventions.pdf b/docs/odata-url-conventions/odata-url-conventions.pdf index 366a77c4a..e667fc895 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/lib/number.js b/lib/number.js index 2788f65cd..ed42d9de6 100644 --- a/lib/number.js +++ b/lib/number.js @@ -61,7 +61,7 @@ class Number { if (this.skip(line)) return; for (var m, regex = //g; (m = regex.exec(line)); ) this.refs[m[1]] = true; - m = line.match(/ ##([A-Za-z]+)(_([A-Za-z]+))?/); + m = line.match(/ ##([A-Za-z0-9]+)(_([A-Za-z0-9]+))?/); if (m && line[m.index + m[0].length] !== "]") { if ( !m[1].startsWith("sub") && @@ -70,7 +70,7 @@ class Number { ) this.toc[m[1]] = { sub: [] }; if (m[1].endsWith("sec")) { - m = line.match(/ ##([A-Za-z]+)(?:_[A-Za-z]+)?\s+(.+)$/); + m = line.match(/ ##([A-Za-z0-9]+)(?:_[A-Za-z0-9]+)?\s+(.+)$/); m[3] = m[2].replace(/[^A-Za-z0-9]/g, ""); } this.counter[m[1]] = (this.counter[m[1]] || 0) + 1; @@ -146,7 +146,7 @@ class Number { this.errors.push( `${this.dir}/${file}(${lineno}): Undefined link #${m[1]}` ); - m = line.match(/ ##([A-Za-z]+)(_([A-Za-z]+))?/); + m = line.match(/ ##([A-Za-z0-9]+)(_([A-Za-z0-9]+))?/); var outline = line; if (m && line[m.index + m[0].length] !== "]") { var prefix = line.substring(0, m.index) + " "; @@ -163,7 +163,7 @@ class Number { } out.write( outline.replace( - /##([A-Za-z]+)\]/g, + /##([A-Za-z0-9]+)\]/g, function (m, p) { var r = this.refs[p]; if (r) return `${r}](#${p})`; diff --git a/odata-protocol/12 Conformance.md b/odata-protocol/12 Conformance.md index 9107fef92..7c2e53746 100644 --- a/odata-protocol/12 Conformance.md +++ b/odata-protocol/12 Conformance.md @@ -47,29 +47,29 @@ service: service root ([section ##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 ##ServerDrivenPaging]) and not use any other mechanism 4. MUST return the appropriate [`OData-Version`](#HeaderODataVersion) -header (section 8.1.5) +header ([section ##HeaderODataVersion]) 5. MUST conform to the semantics the following headers, or fail the request - 1. `Accept` ([section ##HeaderAccept]) - 2. `OData-MaxVersion` ([section ##HeaderODataMaxVersion]) -6. MUST follow OData guidelines for extensibility + 1. [`Accept`](#HeaderAccept) ([section ##HeaderAccept]) + 2. [`OData-MaxVersion`](#HeaderODataMaxVersion) ([section ##HeaderODataMaxVersion]) +6. MUST follow OData guidelines for [extensibility](#Extensibility) ([section ##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 +[`501 Not Implemented`](#ResponseCode501NotImplemented) for any unsupported functionality ([section ##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 ##VocabularyExtensibility]), custom headers ([section ##HeaderFieldExtensibility]), or custom content ([section ##PayloadExtensibility]) in the payload in order to correctly consume the service -10. MUST NOT violate any OData update semantics -([section ##DataModification]) and all subsections) +10. MUST NOT violate any OData [update semantics](#DataModification) +([section ##DataModification] and all subsections) 11. MUST NOT violate any other OData-defined semantics -12. SHOULD support `$expand` ([section ##SystemQueryOptionexpand]) +12. SHOULD support [`$expand`](#SystemQueryOptionexpand) ([section ##SystemQueryOptionexpand]) 13. SHOULD publish metadata at `$metadata` according to [OData-CSDLXML](#ODataCSDL) and MAY publish metadata according to [OData-CSDLJSON](#ODataCSDL) ([section ##MetadataDocumentRequest]) @@ -133,8 +133,7 @@ unsupported functionality ([section ##ResponseCode501NotImplemented]) 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 ##SystemQueryOptiontop]) -6. MUST support `/$value` on media entities (section 4.12 in -[OData URL](#ODataURL)) and individual properties ([section ##RequestingaPropertysRawValueusingvalue]) +6. MUST support `/$value` on media entities ([section ##MetadataDocumentRequest]) and individual properties ([section ##RequestingaPropertysRawValueusingvalue]) 7. MUST support `$filter` ([section ##SystemQueryOptionfilter]) 1. MUST support `eq`, `ne` filter operations on properties of entities in the requested entity set ([section ##SystemQueryOptionfilter]) @@ -223,7 +222,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)  +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 @@ -269,8 +268,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 +##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 @@ -285,7 +284,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 @@ -360,7 +359,7 @@ 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 ## ##subsec Interoperable OData Clients @@ -369,10 +368,9 @@ 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 ##HeaderODataMaxVersion]) 2. MUST specify `OData-Version` ([section ##HeaderODataVersion]) and `Content-Type` ([section ##HeaderContentType]) in any request with a payload 3. MUST be a conforming consumer of OData as defined in