diff --git a/docs/odata-csdl-json/odata-csdl-json.html b/docs/odata-csdl-json/odata-csdl-json.html index 20005b9f..f5ea66c0 100644 --- a/docs/odata-csdl-json/odata-csdl-json.html +++ b/docs/odata-csdl-json/odata-csdl-json.html @@ -1962,7 +1962,7 @@
Unbound functions are invoked as static functions within a common expression (see OData-URL, section “Common Expression Syntax”), or from the entity container through a function import.
+Unbound functions are invoked as static functions within a common expression (see OData-URL, section 5.1.1), or from the entity container through a function import.
$IsBound
The value of $IsBound
is one of the Boolean literals true
or false
. Absence of the member means false
.
odata.matchesPattern
The odata.matchesPattern
client-side function takes two string expressions as arguments and returns a Boolean value. It is the counterpart of the identically named URL function OData-URL, section “matchespattern
”.
The odata.matchesPattern
client-side function takes two string expressions as arguments and returns a Boolean value. It is the counterpart of the identically named URL function OData-URL, section 5.1.1.7.1.
The function returns true if the second expression evaluates to an ECMAScript (JavaScript) regular expression and the result of the first argument expression matches that regular expression, using syntax and semantics of ECMAScript regular expressions.
Example 79: all non-empty FirstName
values not containing the letters b
, c
, or d
evaluate to true
Unbound functions are invoked as static functions within a common expression (see OData-URL, section “Common Expression Syntax”), or from the entity container through a function import.
+Unbound functions are invoked as static functions within a common expression (see OData-URL, section 5.1.1), or from the entity container through a function import.
IsBound
The value of IsBound
is one of the Boolean literals true
or false
. Absence of the attribute means false
.
odata.matchesPattern
The odata.matchesPattern
client-side function takes two string expressions as arguments and returns a Boolean value. It is the counterpart of the identically named URL function OData-URL, section “matchespattern
”.
The odata.matchesPattern
client-side function takes two string expressions as arguments and returns a Boolean value. It is the counterpart of the identically named URL function OData-URL, section 5.1.1.7.1.
The function returns true if the second expression evaluates to an ECMAScript (JavaScript) regular expression and the result of the first argument expression matches that regular expression, using syntax and semantics of ECMAScript regular expressions.
Example 79: all non-empty FirstName
values not containing the letters b
, c
, or d
evaluate to true
$top
and $skip
OData-Protocol, sections “System Query Option $top
” and “System Query Option $skip
” is defined in section 3.3.7.
+The system query option $apply
is evaluated first, then the other system query options are evaluated, if applicable, on the result of $apply
, see OData-Protocol, section 11.2.1. Stability across requests for system query options $top
and $skip
OData-Protocol, section 11.2.6.3 is defined in section 3.3.7.
Each set transformation:
All input sets and output sets in one transformation sequence are collections of the input type, that is the entity type or complex type of the first input set, or in other words, of the resource to which the transformation sequence is applied. The input type is determined by the entity model element identified within the metadata document by the context URL of that resource OData-Protocol, section “Context URL”. Individual instances in an input or output set can have a subtype of the input type. (See example 74.) The transformation sequence given as the $apply
system query option is applied to the resource addressed by the resource path. The transformations defined below can have nested transformation sequences as parameters, these are then applied to resources that can differ from the current input set.
All input sets and output sets in one transformation sequence are collections of the input type, that is the entity type or complex type of the first input set, or in other words, of the resource to which the transformation sequence is applied. The input type is determined by the entity model element identified within the metadata document by the context URL of that resource OData-Protocol, section 10. Individual instances in an input or output set can have a subtype of the input type. (See example 74.) The transformation sequence given as the $apply
system query option is applied to the resource addressed by the resource path. The transformations defined below can have nested transformation sequences as parameters, these are then applied to resources that can differ from the current input set.
The structure of an instance that occurs in an input or output set is defined by the names of the structural and navigation properties that the instance contains. Instances of an input type can have different structures, subject to the following rules:
Here is an overview of the structural changes made by different transformations:
An output set thus consists of instances with different structures. This is the same situation as with a collection of an open type (OData-CSDL, section “Open Entity Type” and OData-CSDL, section “Open Complex Type”) and it is handled in the same way.
-If the first input set is a collection of entities from a given entity set, then so are all input sets and output sets in the transformation sequence. The {select-list}
in the context URL OData-Protocol, section “Context URL” MUST describe only properties that are present or annotated as absent (for example, if Core.Permissions
is None
OData-Protocol, section “Requesting Individual Entities”) in all instances of the collection, after applying any $select
and $expand
system query options. The {select-list}
SHOULD describe as many such properties as possible, even if the request involves a concatenation that leads to a non-homogeneous structure. If the server cannot determine any such properties, the {select-list}
MUST consist of just the instance annotation AnyStructure
defined in the Core
vocabulary. (See example 75.)
An output set thus consists of instances with different structures. This is the same situation as with a collection of an open type (OData-CSDL, section 6.3 and OData-CSDL, section 9.3) and it is handled in the same way.
+If the first input set is a collection of entities from a given entity set, then so are all input sets and output sets in the transformation sequence. The {select-list}
in the context URL OData-Protocol, section 10 MUST describe only properties that are present or annotated as absent (for example, if Core.Permissions
is None
OData-Protocol, section 11.2.2) in all instances of the collection, after applying any $select
and $expand
system query options. The {select-list}
SHOULD describe as many such properties as possible, even if the request involves a concatenation that leads to a non-homogeneous structure. If the server cannot determine any such properties, the {select-list}
MUST consist of just the instance annotation AnyStructure
defined in the Core
vocabulary. (See example 75.)
Input sets and output sets are not sets of instances in the mathematical sense but collections, because the same instance can occur multiple times in them. In other words: A collection contains values (which can be instances of structured types or primitive values), possibly with repetitions. The occurrences of the values in the collection form a set in the mathematical sense. The cardinality of a collection is the total number of occurrences in it. When this text describes a transformation algorithmically and stipulates that certain steps are carried out for each occurrence in a collection, this means that the steps are carried out multiple times for the same value if it occurs multiple times in the collection.
-A collection addressed by the resource path is returned by the service either as an ordered collection OData-Protocol, section “Managing Members of an Ordered Collection” or as an unordered collection. The same applies to collections that are nested in or related to the addressed resource as well as to collections that are the result of evaluating an expression starting with $root
, which occur, for example, as the first parameter of a hierarchical transformation.
A collection addressed by the resource path is returned by the service either as an ordered collection OData-Protocol, section 11.4.10 or as an unordered collection. The same applies to collections that are nested in or related to the addressed resource as well as to collections that are the result of evaluating an expression starting with $root
, which occur, for example, as the first parameter of a hierarchical transformation.
But when such a collection is transformed by the $apply
system query option, additional cases can arise that are neither ordered nor totally unordered. For example, the groupby
transformation retains any order within a group but not between groups.
⚠ Example 6: Request the top 10 sales per customer. The processing of the request can be parallelized per customer and the responses per customer can be interleaved in the overall response. This means that for any given customer, their top 10 sales appear in the desired order, though not consecutively.
@@ -1656,15 +1656,15 @@A collection can be stable-sorted by a list of expressions. In the stable-sorted collection an occurrence \(u_1\) precedes \(u_2\) if and only if either
$orderby
orStable-sorting of an ordered collection produces another ordered collection. A stable-sort does not necessarily produce a total order, the sorted collection may still contain two occurrences whose relative order does not matter. The transformation orderby
performs a stable-sort.
The output set of a basic aggregation transformation can contain instances of an entity type without entity-id. After a concat
transformation, different occurrences of the same entity can differ in individual non-declared properties. To account for such cases, the definition of sameness given in OData-URL, section “Equals” is refined here. Instances of structured types are the same if
The output set of a basic aggregation transformation can contain instances of an entity type without entity-id. After a concat
transformation, different occurrences of the same entity can differ in individual non-declared properties. To account for such cases, the definition of sameness given in OData-URL, section 5.1.1.1.1 is refined here. Instances of structured types are the same if
This document specifies how a data aggregation path that occurs in a request is evaluated by the service. If such an evaluation fails, the service MUST reject the request.
-For a data aggregation path to be a common expression according to OData-URL, section “Common Expression Syntax”, its segments must be single-valued with the possible exception of the last segment, and it can then be evaluated relative to an instance of a structured type. For the transformations defined in this document, a data aggregation path can also be evaluated relative to a collection \(A\), even if it has arbitrary collection-valued segments itself.
+For a data aggregation path to be a common expression according to OData-URL, section 5.1.1, its segments must be single-valued with the possible exception of the last segment, and it can then be evaluated relative to an instance of a structured type. For the transformations defined in this document, a data aggregation path can also be evaluated relative to a collection \(A\), even if it has arbitrary collection-valued segments itself.
To this end, the following notation is used in the subsequent sections: If \(A\) is a collection and \(p\) a data aggregation path, optionally followed by a type-cast segment, the result of such a path evaluation is denoted by \(\Gamma(A,p)\) and defined as the unordered concatenation, possibly containing repetitions, of the collections \(γ(u,p)\) for each \(u\) in \(A\) that is not null. The function \(γ(u,p)\) takes a non-null value and a path as arguments and returns a collection of instances of structured types or primitive values, depending on the type of the final segment of \(p\). It is recursively defined as follows:
countdistinct
The aggregation method countdistinct
can be applied to arbitrary collections to count the distinct values. Instance comparison uses the definition of equality in OData-URL, section “Equals”.
The aggregation method countdistinct
can be applied to arbitrary collections to count the distinct values. Instance comparison uses the definition of equality in OData-URL, section 5.1.1.1.1.
The result property MUST have type Edm.Decimal
with Scale
0 and sufficient Precision
.
Example 13:
@@ -2342,7 +2342,7 @@$skip
and $top
When the system query options $top
and $skip
OData-Protocol, sections “System Query Option $top
” and “System Query Option $skip
” are executed after the system query option $apply
and after $filter
and $orderby
, if applicable, they operate on a collection with a total order that extends any existing order but is otherwise chosen by the service. The total order MUST be stable across requests.
When the system query options $top
and $skip
OData-Protocol, section 11.2.6.3 are executed after the system query option $apply
and after $filter
and $orderby
, if applicable, they operate on a collection with a total order that extends any existing order but is otherwise chosen by the service. The total order MUST be stable across requests.
The output set is constructed by copying the instances of the input set and adding one dynamic property per compute expression to each occurrence in the output set. The name of each added dynamic property is the alias of the corresponding compute expression. The value of each added dynamic property is computed relative to the corresponding instance. Services MAY support expressions that address dynamic properties added by other expressions within the same compute
transformation, provided that the service can determine an evaluation sequence. The type of the property is determined by the rules for evaluating common expressions and numeric promotion defined in OData-URL, section “Common Expression Syntax”.
The output set is constructed by copying the instances of the input set and adding one dynamic property per compute expression to each occurrence in the output set. The name of each added dynamic property is the alias of the corresponding compute expression. The value of each added dynamic property is computed relative to the corresponding instance. Services MAY support expressions that address dynamic properties added by other expressions within the same compute
transformation, provided that the service can determine an evaluation sequence. The type of the property is determined by the rules for evaluating common expressions and numeric promotion defined in OData-URL, section 5.1.1.
Example 37:
GET /service/Sales?$apply=compute(Amount mul Product/TaxRate as Tax)
@@ -2387,7 +2387,7 @@ addnested
The addnested
transformation expands a path relative to the input set, applies one or more transformation sequences to the addressed resources, and adds the transformed resources as dynamic (navigation) properties to the output set. The output set \(A\) is initially a clone of the input set.
The first parameter of the addnested
transformation is a path \(p\) or a concatenated path \(p/q\). Here, \(p=p_1/…/p_k\) with \(k≥1\) is a data aggregation path with single- or collection-valued segments. The path \(p\) MUST NOT contain any navigation properties prior to the last segment \(p_k\), which MUST either be a navigation or a complex structural property. If the optional \(q\) is present, it MUST be a type-cast segment. This is an extension of the definition in OData-URL, section “System Query Option $expand
” in that the first parameter need not contain a navigation property.
The first parameter of the addnested
transformation is a path \(p\) or a concatenated path \(p/q\). Here, \(p=p_1/…/p_k\) with \(k≥1\) is a data aggregation path with single- or collection-valued segments. The path \(p\) MUST NOT contain any navigation properties prior to the last segment \(p_k\), which MUST either be a navigation or a complex structural property. If the optional \(q\) is present, it MUST be a type-cast segment. This is an extension of the definition in OData-URL, section 5.1.3 in that the first parameter need not contain a navigation property.
Further parameters are one or more transformation sequences followed by the as
keyword followed by an alias whose name need not differ from names in the input set but MUST differ from names already in \(\Gamma(A,p_1/…/p_{k-1})\) (using the \(\Gamma\) notation) as well as from aliases for other transformation sequences.
If \(p_k\) is single-valued, the transformation sequences MUST consist of only identity
or compute
or addnested
transformations, because these transform one-element collections into one-element collections. This makes it meaningful to speak (in this section only) of a transformation sequence applied to a single instance; this means applying it to a collection containing the single instance and taking as result the single instance from the output set.
For each occurrence \(u\) in \(\Gamma(A,p_1/…/p_{k-1})\), let \(B=γ(u,p_k/q)\) and let the resource \(v\) be
@@ -2516,11 +2516,11 @@These expressions are
$these
followed by a forward slash, the input collection is then the current collection defined as follows:
$apply
, possibly nested within $expand
or $select
, the current collection is the collection that is the subject of the system query option.$apply
transformation, the current collection is the input set of the transformation.A definition that is equivalent to a $count
expression after a collection-valued path was made in OData-URL, section “Addressing the Count of a Collection”.
A definition that is equivalent to a $count
expression after a collection-valued path was made in OData-URL, section 4.8.
isdefined
Properties that are not explicitly mentioned in aggregate
or groupby
are considered to have been aggregated away. Since they are treated as having the null value in $filter
expressions OData-URL, section “Path Expressions”, the $filter
expression Product eq null
cannot distinguish between an instance containing the value for the null product and the instance containing the aggregated value across all products (where the Product
has been aggregated away).
Properties that are not explicitly mentioned in aggregate
or groupby
are considered to have been aggregated away. Since they are treated as having the null value in $filter
expressions OData-URL, section 5.1.1.15, the $filter
expression Product eq null
cannot distinguish between an instance containing the value for the null product and the instance containing the aggregated value across all products (where the Product
has been aggregated away).
The function isdefined
can be used to determine whether a property is present or absent in an instance. It takes a single-valued property path as its only parameter and returns true if the property is present in the instance for which the expression containing the isdefined
function call is evaluated. A present property can still have the null value; it can represent a grouping of null values, or an aggregation that results in a null value.
Example 45: Product
has been aggregated away, causing an empty result
Example 115: Move a sales organization Switzerland under the parent EMEA Central by binding the parent navigation property to EMEA Central OData-JSON, section “Bind Operation”:
+Example 115: Move a sales organization Switzerland under the parent EMEA Central by binding the parent navigation property to EMEA Central OData-JSON, section 8.5:
PATCH /service/SalesOrganizations('Switzerland')
Content-Type: application/json
@@ -4573,7 +4573,7 @@
-Example 116: If the parent navigation property contained a referential constraint for the key of the target OData-CSDL, section “Referential Constraint”,
+Example 116: If the parent navigation property contained a referential constraint for the key of the target OData-CSDL, section 8.5,
EntityType Name="SalesOrganization">
<Key>
<PropertyRef Name="ID" />
@@ -4587,7 +4587,7 @@ < ReferencedProperty="ID" />
NavigationProperty>
</EntityType> </
-then alternatively the property taking part in the referential constraint OData-Protocol, section “Update a Primitive Property” could be changed to EMEA Central:
+then alternatively the property taking part in the referential constraint OData-Protocol, section 11.4.9.1 could be changed to EMEA Central:
PATCH /service/SalesOrganizations('Switzerland')
Content-Type: application/json
diff --git a/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.md b/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.md
index b0dbdf54..773993b5 100644
--- a/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.md
+++ b/docs/odata-data-aggregation-ext/odata-data-aggregation-ext.md
@@ -1007,7 +1007,7 @@ A _set transformation_ (_transformation_ for short) is an operation on an input
The system query option `$apply` MUST NOT be used if the resource path addresses a single instance.
-The system query option `$apply` is evaluated first, then the other system query options are evaluated, if applicable, on the result of `$apply`, see [OData-Protocol, section "System Query Options"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#SystemQueryOptions). Stability across requests for system query options `$top` and `$skip` [OData-Protocol, sections "System Query Option `$top`" and "System Query Option `$skip`"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#SystemQueryOptiontop) is defined in [section 3.3.7](#StableTotalOrderBeforeskipandtop).
+The system query option `$apply` is evaluated first, then the other system query options are evaluated, if applicable, on the result of `$apply`, see [OData-Protocol, section 11.2.1](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#SystemQueryOptions). Stability across requests for system query options `$top` and `$skip` [OData-Protocol, section 11.2.6.3](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#SystemQueryOptiontop) is defined in [section 3.3.7](#StableTotalOrderBeforeskipandtop).
Each set transformation:
- carries over the input type to the output set such that it fits into the data model of the service.
@@ -1033,13 +1033,13 @@ The definitions of italicized terms made in this section are used throughout thi
### 3.1.1 Type, Structure and Context URL
-All input sets and output sets in one transformation sequence are collections of the _input type_, that is the entity type or complex type of the first input set, or in other words, of the resource to which the transformation sequence is applied. The input type is determined by the entity model element identified within the metadata document by the context URL of that resource [OData-Protocol, section "Context URL"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#ContextURL). Individual instances in an input or output set can have a subtype of the input type. (See [example 74](#subinputtype).) The transformation sequence given as the `$apply` system query option is applied to the resource addressed by the resource path. The transformations defined below can have nested transformation sequences as parameters, these are then applied to resources that can differ from the current input set.
+All input sets and output sets in one transformation sequence are collections of the _input type_, that is the entity type or complex type of the first input set, or in other words, of the resource to which the transformation sequence is applied. The input type is determined by the entity model element identified within the metadata document by the context URL of that resource [OData-Protocol, section 10](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#ContextURL). Individual instances in an input or output set can have a subtype of the input type. (See [example 74](#subinputtype).) The transformation sequence given as the `$apply` system query option is applied to the resource addressed by the resource path. The transformations defined below can have nested transformation sequences as parameters, these are then applied to resources that can differ from the current input set.
The _structure_ of an instance that occurs in an input or output set is defined by the names of the structural and navigation properties that the instance contains. Instances of an input type can have different structures, subject to the following rules:
- Declared properties of the input type or a nested or related type thereof or of a subtype of one of these MUST have their declared type and meaning when they occur in an input or output set.
- Single- or collection-valued primitive properties addressed by a property path starting at a non-transient entity MUST keep their values from the addressed resource path collection throughout the transformation sequence. Likewise, single- or collection-valued navigation property paths starting at a non-transient entity MUST keep addressing the same non-transient entities as in the addressed resource path collection.
- Instances in an output set need not have all declared or dynamic properties that occurred in the input set.
-- Instances in an output set can have dynamic properties that did not occur in the input set. The name for such a dynamic property is called an _alias_, it is a simple identifier (see [OData-CSDL, section "Simple Identifier"](https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html#SimpleIdentifier)). Aliases MUST differ from names of declared properties in the input type, from names of properties in the first input set, and from names of properties in the current input set. Aliases in one collection MUST also differ from each other.
+- Instances in an output set can have dynamic properties that did not occur in the input set. The name for such a dynamic property is called an _alias_, it is a simple identifier (see [OData-CSDL, section 15.2](https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html#SimpleIdentifier)). Aliases MUST differ from names of declared properties in the input type, from names of properties in the first input set, and from names of properties in the current input set. Aliases in one collection MUST also differ from each other.
Here is an overview of the structural changes made by different transformations:
- During [aggregation](#BasicAggregation) or [nest](#Transformationnest), many instances are replaced by one instance, properties that represent the aggregation level are retained, and others are replaced by dynamic properties holding the aggregate value of the many instances or a transformed copy of them.
@@ -1048,15 +1048,15 @@ Here is an overview of the structural changes made by different transformations:
- During [join](#Transformationsjoinandouterjoin), one instance with a collection of related instances is replaced by many copies, each of which is related via a dynamic property to one of the related instances.
- During [concatenation](#Transformationconcat), the same instances are transformed multiple times and the output sets with their potentially different structures are concatenated.
-An output set thus consists of instances with different structures. This is the same situation as with a collection of an open type ([OData-CSDL, section "Open Entity Type"](https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html#OpenEntityType) and [OData-CSDL, section "Open Complex Type"](https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html#OpenComplexType)) and it is handled in the same way.
+An output set thus consists of instances with different structures. This is the same situation as with a collection of an open type ([OData-CSDL, section 6.3](https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html#OpenEntityType) and [OData-CSDL, section 9.3](https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html#OpenComplexType)) and it is handled in the same way.
-If the first input set is a collection of entities from a given entity set, then so are all input sets and output sets in the transformation sequence. The `{select-list}` in the context URL [OData-Protocol, section "Context URL"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#ContextURL) MUST describe only properties that are present or annotated as absent (for example, if `Core.Permissions` is `None` [OData-Protocol, section "Requesting Individual Entities"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#RequestingIndividualEntities)) in all instances of the collection, after applying any `$select` and `$expand` system query options. The `{select-list}` SHOULD describe as many such properties as possible, even if the request involves a concatenation that leads to a non-homogeneous structure. If the server cannot determine any such properties, the `{select-list}` MUST consist of just the instance annotation `AnyStructure` defined in the [`Core` vocabulary](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#AnyStructure). (See [example 75](#anystructure).)
+If the first input set is a collection of entities from a given entity set, then so are all input sets and output sets in the transformation sequence. The `{select-list}` in the context URL [OData-Protocol, section 10](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#ContextURL) MUST describe only properties that are present or annotated as absent (for example, if `Core.Permissions` is `None` [OData-Protocol, section 11.2.2](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#RequestingIndividualEntities)) in all instances of the collection, after applying any `$select` and `$expand` system query options. The `{select-list}` SHOULD describe as many such properties as possible, even if the request involves a concatenation that leads to a non-homogeneous structure. If the server cannot determine any such properties, the `{select-list}` MUST consist of just the instance annotation `AnyStructure` defined in the [`Core` vocabulary](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#AnyStructure). (See [example 75](#anystructure).)
### 3.1.2 Sameness and Order
Input sets and output sets are not sets of instances in the mathematical sense but collections, because the same instance can occur multiple times in them. In other words: A collection contains values (which can be instances of structured types or primitive values), possibly with repetitions. The occurrences of the values in the collection form a set in the mathematical sense. The _cardinality_ of a collection is the total number of occurrences in it. When this text describes a transformation algorithmically and stipulates that certain steps are carried out _for each occurrence_ in a collection, this means that the steps are carried out multiple times for the same value if it occurs multiple times in the collection.
-A collection addressed by the resource path is returned by the service either as an ordered collection [OData-Protocol, section "Managing Members of an Ordered Collection"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#ManagingMembersofanOrderedCollection) or as an unordered collection. The same applies to collections that are nested in or related to the addressed resource as well as to collections that are the result of evaluating an expression starting with `$root`, which occur, for example, as the first parameter of a [hierarchical transformation](#HierarchicalTransformations).
+A collection addressed by the resource path is returned by the service either as an ordered collection [OData-Protocol, section 11.4.10](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#ManagingMembersofanOrderedCollection) or as an unordered collection. The same applies to collections that are nested in or related to the addressed resource as well as to collections that are the result of evaluating an expression starting with `$root`, which occur, for example, as the first parameter of a [hierarchical transformation](#HierarchicalTransformations).
But when such a collection is transformed by the `$apply` system query option, additional cases can arise that are neither ordered nor totally unordered. For example, the [`groupby`](#Transformationgroupby) transformation retains any order within a group but not between groups.
@@ -1074,15 +1074,15 @@ An order of a collection is more precisely defined as follows: Given two differe
When transformations are defined in the following sections, the algorithmic description sometimes contains an _order-preserving loop_ over a collection. Such a loop processes the occurrences in an order chosen by the service in such a way that $u_1$ is processed before $u_2$ whenever $u_1$ precedes $u_2$. Likewise, in an _order-preserving sequence_ $u_1,…,u_n$ we have $i3.2.1.3.5 Standard Aggregation Method `countdistinct`
-The aggregation method `countdistinct` can be applied to arbitrary collections to count the distinct values. Instance comparison uses the definition of equality in [OData-URL, section "Equals"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#Equals).
+The aggregation method `countdistinct` can be applied to arbitrary collections to count the distinct values. Instance comparison uses the definition of equality in [OData-URL, section 5.1.1.1.1](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#Equals).
The result property MUST have type `Edm.Decimal` with `Scale` 0 and sufficient `Precision`.
@@ -1904,7 +1904,7 @@ results in
### 3.3.7 Stable Total Order Before `$skip` and `$top`
-When the system query options `$top` and `$skip` [OData-Protocol, sections "System Query Option `$top`" and "System Query Option `$skip`"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#SystemQueryOptiontop) are executed after the system query option `$apply` and after `$filter` and `$orderby`, if applicable, they operate on a collection with a total order that extends any existing order but is otherwise chosen by the service. The total order MUST be stable across requests.
+When the system query options `$top` and `$skip` [OData-Protocol, section 11.2.6.3](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#SystemQueryOptiontop) are executed after the system query option `$apply` and after `$filter` and `$orderby`, if applicable, they operate on a collection with a total order that extends any existing order but is otherwise chosen by the service. The total order MUST be stable across requests.
## 3.4 One-to-One Transformations
@@ -1927,7 +1927,7 @@ The `compute` transformation takes a comma-separated list of one or more _comput
A compute expression is a common expression followed by the `as` keyword, followed by an [alias](#TypeStructureandContextURL).
-The output set is constructed by copying the instances of the input set and adding one dynamic property per compute expression to [each occurrence](#SamenessandOrder) in the output set. The name of each added dynamic property is the alias of the corresponding compute expression. The value of each added dynamic property is computed relative to the corresponding instance. Services MAY support expressions that address dynamic properties added by other expressions within the same `compute` transformation, provided that the service can determine an evaluation sequence. The type of the property is determined by the rules for evaluating common expressions and numeric promotion defined in [OData-URL, section "Common Expression Syntax"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#CommonExpressionSyntax).
+The output set is constructed by copying the instances of the input set and adding one dynamic property per compute expression to [each occurrence](#SamenessandOrder) in the output set. The name of each added dynamic property is the alias of the corresponding compute expression. The value of each added dynamic property is computed relative to the corresponding instance. Services MAY support expressions that address dynamic properties added by other expressions within the same `compute` transformation, provided that the service can determine an evaluation sequence. The type of the property is determined by the rules for evaluating common expressions and numeric promotion defined in [OData-URL, section 5.1.1](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#CommonExpressionSyntax).
::: example
Example 37:
@@ -1956,7 +1956,7 @@ results in
The `addnested` transformation expands a path relative to the input set, applies one or more transformation sequences to the addressed resources, and adds the transformed resources as dynamic (navigation) properties to the output set. The output set $A$ is initially a clone of the input set.
-The first parameter of the `addnested` transformation is a path $p$ or a concatenated path $p/q$. Here, $p=p_1/…/p_k$ with $k≥1$ is a [data aggregation path](#DataAggregationPath) with single- or collection-valued segments. The path $p$ MUST NOT contain any navigation properties prior to the last segment $p_k$, which MUST either be a navigation or a complex structural property. If the optional $q$ is present, it MUST be a type-cast segment. This is an extension of the definition in [OData-URL, section "System Query Option `$expand`"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#SystemQueryOptionexpand) in that the first parameter need not contain a navigation property.
+The first parameter of the `addnested` transformation is a path $p$ or a concatenated path $p/q$. Here, $p=p_1/…/p_k$ with $k≥1$ is a [data aggregation path](#DataAggregationPath) with single- or collection-valued segments. The path $p$ MUST NOT contain any navigation properties prior to the last segment $p_k$, which MUST either be a navigation or a complex structural property. If the optional $q$ is present, it MUST be a type-cast segment. This is an extension of the definition in [OData-URL, section 5.1.3](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#SystemQueryOptionexpand) in that the first parameter need not contain a navigation property.
Further parameters are one or more transformation sequences followed by the `as` keyword followed by an [alias](#TypeStructureandContextURL) whose name need not differ from names in the input set but MUST differ from names already in $\Gamma(A,p_1/…/p_{k-1})$ (using the [$\Gamma$ notation](#EvaluationofDataAggregationPaths)) as well as from aliases for other transformation sequences.
@@ -2098,10 +2098,10 @@ results in
The following two subsections introduce two new types of [expression](#Expression) that are evaluated relative to a collection, called the input collection.
These expressions are
-- either prepended with a collection-valued path $p$ followed by a forward slash, like a lambda operator [OData-URL, section "Lambda Operators"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#LambdaOperators). The collection identified by that path is then the input collection for the expression.
+- either prepended with a collection-valued path $p$ followed by a forward slash, like a lambda operator [OData-URL, section 5.1.1.13](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#LambdaOperators). The collection identified by that path is then the input collection for the expression.
- or prepended with the keyword `$these` followed by a forward slash, the input collection is then the _current collection_ defined as follows:
- In a system query option other than `$apply`, possibly nested within `$expand` or `$select`, the current collection is the collection that is the subject of the system query option.
- - In a path segment that addresses a subset of a collection [OData-URL, section "Addressing a Subset of a Collection"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#AddressingaSubsetofaCollection), the current collection is the collection that is the subject of the path segment.
+ - In a path segment that addresses a subset of a collection [OData-URL, section 4.12](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#AddressingaSubsetofaCollection), the current collection is the collection that is the subject of the path segment.
- In an `$apply` transformation, the current collection is the input set of the transformation.
### 3.6.1 Function `aggregate`
@@ -2172,11 +2172,11 @@ results in 2 (a third of 8, rounded down) entities. (This differs from `topperce
```
:::
-A definition that is equivalent to a `$count` expression after a collection-valued path was made in [OData-URL, section "Addressing the Count of a Collection"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#AddressingtheCountofaCollection).
+A definition that is equivalent to a `$count` expression after a collection-valued path was made in [OData-URL, section 4.8](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#AddressingtheCountofaCollection).
## 3.7 Function `isdefined`
-Properties that are not explicitly mentioned in [`aggregate`](#Transformationaggregate) or [`groupby`](#Transformationgroupby) are considered to have been _aggregated away_. Since they are treated as having the null value in `$filter` expressions [OData-URL, section "Path Expressions"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#PathExpressions), the `$filter` expression `Product eq null` cannot distinguish between an instance containing the value for the null product and the instance containing the aggregated value across all products (where the `Product` has been aggregated away).
+Properties that are not explicitly mentioned in [`aggregate`](#Transformationaggregate) or [`groupby`](#Transformationgroupby) are considered to have been _aggregated away_. Since they are treated as having the null value in `$filter` expressions [OData-URL, section 5.1.1.15](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html#PathExpressions), the `$filter` expression `Product eq null` cannot distinguish between an instance containing the value for the null product and the instance containing the aggregated value across all products (where the `Product` has been aggregated away).
The function `isdefined` can be used to determine whether a property is present or absent in an instance. It takes a [single-valued property path](#SingleValuedPropertyPath) as its only parameter and returns true if the property is present in the instance for which the expression containing the `isdefined` function call is evaluated. A present property can still have the null value; it can represent a grouping of null values, or an aggregation that results in a null value.
@@ -4585,7 +4585,7 @@ works differently: `descendants` is the parameter $T$ of `ancestors` and operate
Besides changes to the structural properties of the entities in a hierarchical collection, hierarchy maintenance involves changes to the parent-child relationships.
::: example
-Example 115: Move a sales organization Switzerland under the parent EMEA Central by binding the parent navigation property to EMEA Central [OData-JSON, section "Bind Operation"](https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html#BindOperation):
+Example 115: Move a sales organization Switzerland under the parent EMEA Central by binding the parent navigation property to EMEA Central [OData-JSON, section 8.5](https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html#BindOperation):
```json
PATCH /service/SalesOrganizations('Switzerland')
Content-Type: application/json
@@ -4608,7 +4608,7 @@ DELETE /service/SalesOrganizations('Switzerland')/Superordinate/$ref
:::
::: example
-Example 116: If the parent navigation property contained a referential constraint for the key of the target [OData-CSDL, section "Referential Constraint"](https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html#ReferentialConstraint),
+Example 116: If the parent navigation property contained a referential constraint for the key of the target [OData-CSDL, section 8.5](https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html#ReferentialConstraint),
```xml
@@ -4624,7 +4624,7 @@ Example 116: If the parent navigation pr
```
-then alternatively the property taking part in the referential constraint [OData-Protocol, section "Update a Primitive Property"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#UpdateaPrimitiveProperty) could be changed to EMEA Central:
+then alternatively the property taking part in the referential constraint [OData-Protocol, section 11.4.9.1](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#UpdateaPrimitiveProperty) could be changed to EMEA Central:
```json
PATCH /service/SalesOrganizations('Switzerland')
Content-Type: application/json
diff --git a/docs/odata-json-format/odata-json-format.html b/docs/odata-json-format/odata-json-format.html
index a23264ec..2b89ccdb 100644
--- a/docs/odata-json-format/odata-json-format.html
+++ b/docs/odata-json-format/odata-json-format.html
@@ -717,7 +717,7 @@ 4.6.4 Control Information: count
(odata.count
)
-The count
control information occurs only in responses and can annotate any collection, see OData-Protocol, section “System Query Option $count
”. Its value is an Edm.Int64
value corresponding to the total count of members in the collection represented by the request.
+The count
control information occurs only in responses and can annotate any collection, see OData-Protocol, section 11.2.6.5. Its value is an Edm.Int64
value corresponding to the total count of members in the collection represented by the request.
4.6.5 Control Information: nextLink
(odata.nextLink
)
@@ -791,7 +791,7 @@ 4.6.12 Control Information: media*
(odata.media*
)
-For media entities and stream properties at least one of the control information mediaEditLink
and mediaReadLink
MUST be included in responses if they don’t follow standard URL conventions as defined in OData-URL, section “Addressing a Property” and OData-URL, section “Addressing the Media Stream of a Media Entity”, or if metadata=full
is requested.
+For media entities and stream properties at least one of the control information mediaEditLink
and mediaReadLink
MUST be included in responses if they don’t follow standard URL conventions as defined in OData-URL, section 4.6 and OData-URL, section 4.14, or if metadata=full
is requested.
The mediaEditLink
control information contains a URL that can be used to update the binary stream associated with the media entity or stream property. It MUST be included for updatable streams if it differs from standard URL conventions relative to the edit link of the entity.
The mediaReadLink
control information contains a URL that can be used to read the binary stream associated with the media entity or stream property. It MUST be included if its value differs from the value of the associated mediaEditLink
, if present, or if it doesn’t follow standard URL conventions relative to the read link of the entity and the associated mediaEditLink
is not present.
The mediaContentType
control information MAY be included; its value SHOULD match the media type of the binary stream represented by the mediaReadLink
URL. This is only a hint; the actual media type will be included in the Content-Type
header when the resource is requested. The presence of mediaContentType
with value null
MAY be used to indicate the absence of a binary stream.
@@ -1374,7 +1374,7 @@ 14
15 Delta Payload
-The non-format specific aspects of the delta handling are described in OData-Protocol, section “Requesting Changes”.
+The non-format specific aspects of the delta handling are described in OData-Protocol, section 11.3.
15.1 Delta Responses
@@ -2060,7 +2060,7 @@
"CustomerID": "ALFKI"
}
Alternatively, values of non-binding parameters MAY be specified as common expressions OData-URL, section “Common Expression Syntax”. In the case of a bound action these MAY contain path expressions OData-URL, section “Path Expressions”, which the service evaluates on the binding parameter value. Such parameters are encoded as name/value pairs where the name is the name of the parameter followed by @expression
and the value is the common expression. As the following example demonstrates, non-transient entities can be passed as non-binding action parameters through a resource path in this way.
Alternatively, values of non-binding parameters MAY be specified as common expressions OData-URL, section 5.1.1. In the case of a bound action these MAY contain path expressions OData-URL, section 5.1.1.15, which the service evaluates on the binding parameter value. Such parameters are encoded as name/value pairs where the name is the name of the parameter followed by @expression
and the value is the common expression. As the following example demonstrates, non-transient entities can be passed as non-binding action parameters through a resource path in this way.
Example 53: An employee requests leave from their manager for the next two weeks:
POST /service/Employees(23)/self.RequestLeave
@@ -2085,7 +2085,7 @@
"Approver@expression": "$root/services/Employee(23)/Manager"
}
Inside a batch request the common expressions can also be value references starting with $
, as introduced in OData-Protocol, section “Referencing Values from Response Bodies”.
Inside a batch request the common expressions can also be value references starting with $
, as introduced in OData-Protocol, section 11.7.6.
Non-binding parameters that are nullable or annotated with the term Core.OptionalParameter
defined in OData-VocCore MAY be omitted from the request body. If an omitted parameter is not annotated (and thus nullable), it MUST be interpreted as having the null
value. If it is annotated and the annotation specifies a DefaultValue
, the omitted parameter is interpreted as having that default value. If omitted and the annotation does not specify a default value, the service is free on how to interpret the omitted parameter. Note: a nullable non-binding parameter is equivalent to being annotated as optional with a default value of null
.
Example 54:
@@ -2360,7 +2360,7 @@A batch request that specifies the respond-async
preference MAY be executed asynchronously. This means that the “outer” batch request is executed asynchronously; this preference does not automatically cascade down to the individual requests within the batch. After successful execution of the batch request the response to the batch request is returned in the body of a response to an interrogation request against the status monitor resource URL, see OData-Protocol, section “Asynchronous Requests”.
A batch request that specifies the respond-async
preference MAY be executed asynchronously. This means that the “outer” batch request is executed asynchronously; this preference does not automatically cascade down to the individual requests within the batch. After successful execution of the batch request the response to the batch request is returned in the body of a response to an interrogation request against the status monitor resource URL, see OData-Protocol, section 11.6.
A service MAY return interim results to an asynchronously executing batch. It does this by responding with 200 OK
to a GET
request to the monitor resource and including a nextLink
control information in the JSON batch response, thus signaling that the response is only a partial result. A subsequent GET
request to the next link MAY result in a 202 Accepted
response with a location
header pointing to a new status monitor resource.
Example 60: referencing the example 55 above again, assume that the request is sent with the respond-async
preference. This results in a 202
response pointing to a status monitor resource:
If the property being requested has type Edm.Stream
(see OData-URL, section “Addressing a Property”), the media type of the response is the media type of the stream, subject to content type negotiation based on the Accept
header of the request. The response body is the octet-stream that represents the raw value of the stream property with that media type.
If the property being requested has type Edm.Stream
(see OData-URL, section 4.6), the media type of the response is the media type of the stream, subject to content type negotiation based on the Accept
header of the request. The response body is the octet-stream that represents the raw value of the stream property with that media type.
Note this response format disregards any $format
system query option.
$expand
”.
+For a full description of the syntax used when building requests, see OData-URL, section 5.1.3.
Example 38: for each customer entity within the Customers entity set the value of all related Orders will be represented inline
GET http://host/service.svc/Customers?$expand=Orders
@@ -2276,7 +2276,7 @@ Core.OptimisticConcurrency
in OData-VocCore and Capabilities.NavigationRestrictions
(nested property OptimisticConcurrencyControl
) in OData-VocCap.
-If optimistic concurrency control is required for a resource, the service MUST include an ETag
header in a response to a GET
request to the resource, and MAY include the ETag in a format-specific manner in responses containing that resource, see for example OData-JSON, section “Control Information: etag
(odata.etag
)”.
If optimistic concurrency control is required for a resource, the service MUST include an ETag
header in a response to a GET
request to the resource, and MAY include the ETag in a format-specific manner in responses containing that resource, see for example OData-JSON, section 4.6.10.
The presence of an ETag
header in a response does not imply in itself that the resource requires optimistic concurrency control; the ETag may just be used for caching and/or conditional GET
requests.
If an ETag value is specified in an If-Match
or If-None-Match
header of a Data Modification Request or Action Request, the operation MUST only be invoked if the If-Match
or If-None-Match
condition is satisfied.
If the client does not specify an If-Match
request header in a Data Modification Request or Action Request on a resource that requires optimistic concurrency control, the service responds with a 428 Precondition Required
and MUST ensure that no observable change occurs as a result of the request. Clients can attempt to disable optimistic concurrency control by specifying If-Match
with a value of *
. Services MAY reject such requests.
Non-insertable properties SHOULD be omitted from the request body. If they are provided, services MUST either ignore the values in the request body or fail the request if the provided values do not match the service-determined values.
Non-insertable properties include (and are not limited to)
Core.Computed
, see OData-VocCore,NonInsertableProperties
of term Capabilities.InsertRestrictions
, see OData-VocCap,Core.Permissions
, see OData-VocCore, where the annotation value does not have the Write
flag.Non-updatable properties include (and are not limited to)
Core.Computed
or Core.Immutable
, see OData-VocCore,NonUpdatableProperties
of term Capabilities.UpdateRestrictions
, see OData-VocCap,Core.Permissions
, see OData-VocCore, where the annotation value does not have the Write
flag.$count
system query option (section 11.2.6.5)$expand
(section 11.2.5.2)any
and all
on navigation- and collection-valued properties (OData-URL, section “Lambda Operators”)any
and all
on navigation- and collection-valued properties (OData-URL, section 5.1.1.13)/$count
segment on navigation and collection properties (section 11.2.10)$orderby asc
and desc
on individual properties (section 11.2.6.2)/$count
segment on navigation and collection properties (section 11.2.10)any
and all
on navigation- and and collection-valued properties (OData-URL, section “Lambda Operators”)any
and all
on navigation- and and collection-valued properties (OData-URL, section 5.1.1.13)$skip
system query option (section 11.2.6.4)$count
system query option (section 11.2.6.5)$orderby
with asc
and desc
on individual properties (section 11.2.6.2)For snapshot entity sets the point in time for representing data is determined following the rules in section 4.2.1 and evaluated first, then all other system query options are evaluated on the data valid at that point in time, including the query option $apply
defined in OData-Aggregation.
For timeline entity sets the interval for filtering data is determined following the rules in section 4.2.1 and evaluated as an additional criterion for $filter
in the evaluation sequence defined in OData-Protocol, section “System Query Options”, which is evaluated after the query option $apply
.
For timeline entity sets the interval for filtering data is determined following the rules in section 4.2.1 and evaluated as an additional criterion for $filter
in the evaluation sequence defined in OData-Protocol, section 11.2.1, which is evaluated after the query option $apply
.
Example 16: retrieve employee history over a period of application time and filter on job title
GET /api-2/Employees?$expand=history(
diff --git a/docs/odata-temporal-ext/odata-temporal-ext.md b/docs/odata-temporal-ext/odata-temporal-ext.md
index 363558a5..680d0dfe 100644
--- a/docs/odata-temporal-ext/odata-temporal-ext.md
+++ b/docs/odata-temporal-ext/odata-temporal-ext.md
@@ -1846,7 +1846,7 @@ on the data valid at that point in time, including the query option
For timeline entity sets the interval for filtering data is determined
following the rules in [section 4.2.1](#PropagationofTemporalQueryOptions)
and evaluated as an additional criterion for `$filter` in the evaluation
-sequence defined in [OData-Protocol, section "System Query Options"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#SystemQueryOptions),
+sequence defined in [OData-Protocol, section 11.2.1](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#SystemQueryOptions),
which is evaluated _after_ the query option `$apply`.
::: example
diff --git a/docs/odata-url-conventions/odata-url-conventions.html b/docs/odata-url-conventions/odata-url-conventions.html
index 2312a06a..bbd44a56 100644
--- a/docs/odata-url-conventions/odata-url-conventions.html
+++ b/docs/odata-url-conventions/odata-url-conventions.html
@@ -1081,7 +1081,7 @@ "$select": "FirstName,LastName"
}
Members of the JSON object also include parameters if the resource path is a function invocation or function import. In this case parameters MUST be represented like parameters in an action invocation OData-JSON, section “Action Invocation”, and in the resource path parentheses after the function name MUST be omitted.
+Members of the JSON object also include parameters if the resource path is a function invocation or function import. In this case parameters MUST be represented like parameters in an action invocation OData-JSON, section 18, and in the resource path parentheses after the function name MUST be omitted.
Example 53: An employee’s top ten leave requests from now to the end of the year pending their manager’s approval.
POST http://host/service/Employees(23)/self.PendingLeaveRequests/$query
@@ -1093,7 +1093,7 @@ "Approver@expression": "Manager",
"$top": 10
}
The previous request looks analogous to a bound function invocation with expressions (like in example 30) if it is written using implicit parameter aliases (see OData-Protocol, section “Inline Parameter Syntax”).
+The previous request looks analogous to a bound function invocation with expressions (like in example 30) if it is written using implicit parameter aliases (see OData-Protocol, section 11.5.4.1.1).
GET http://host/service/Employees(23)/self.PendingLeaveRequests
?StartDate=now()
&EndDate=2024-12-31
@@ -1965,7 +1965,7 @@ OData-JSON, section “Entity”. Non-transient entities can alternatively be represented through their resource path.
+
Entities are represented as structured literals as described in OData-JSON, section 6. Non-transient entities can alternatively be represented through their resource path.
Example 111: determine the price of an adhoc-defined product
http://host/service/Price(Product=@p)?@p={"Color":"red"}
diff --git a/docs/odata-url-conventions/odata-url-conventions.md b/docs/odata-url-conventions/odata-url-conventions.md
index ddaeb187..4bcabcfd 100644
--- a/docs/odata-url-conventions/odata-url-conventions.md
+++ b/docs/odata-url-conventions/odata-url-conventions.md
@@ -1542,7 +1542,7 @@ Content-Type: application/json
Members of the JSON object also include parameters
if the resource path is a function invocation or function import. In this case
-parameters MUST be represented like parameters in an action invocation [OData-JSON, section "Action Invocation"](https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html#ActionInvocation),
+parameters MUST be represented like parameters in an action invocation [OData-JSON, section 18](https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html#ActionInvocation),
and in the resource path parentheses after the function name MUST be omitted.
::: example
@@ -1561,7 +1561,7 @@ Content-Type: application/json
```
The previous request looks analogous to a bound function invocation with expressions (like in [example 30](#funcexpr))
-if it is written using implicit parameter aliases (see [OData-Protocol, section "Inline Parameter Syntax"](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#InlineParameterSyntax)).
+if it is written using implicit parameter aliases (see [OData-Protocol, section 11.5.4.1.1](https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html#InlineParameterSyntax)).
```
GET http://host/service/Employees(23)/self.PendingLeaveRequests
?StartDate=now()
@@ -3279,7 +3279,7 @@ $filter=[FirstName,LastName] in [["John","Doe"],["Jane","Smith"]]
```
:::
-Entities are represented as structured literals as described in [OData-JSON, section "Entity"](https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html#Entity).
+Entities are represented as structured literals as described in [OData-JSON, section 6](https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html#Entity).
Non-transient entities can alternatively be represented through their [resource path](#ResourcePath).
::: example
diff --git a/lib/README.md b/lib/README.md
index bbb408f6..098790e3 100644
--- a/lib/README.md
+++ b/lib/README.md
@@ -13,6 +13,8 @@ This folder contains several Node.js modules that generate OASIS specification d
See [subsection ##SubsectionHeading]. Reference to a subsection showing its number.
See [this example](#aggregation). Reference to an example.
See [example ##aggregation]. Reference to an example showing its number.
+ See [#OData-Protocol#SectionHeading]. Cross-document section reference.
+ See [OData-Protocol, example #OData-Protocol#aggregation]. Other cross-document reference.
[This important sentence]{id=important} is referenced [elsewhere](#important).
```
- Lines ending with single space are joined with the next line.
diff --git a/lib/build.js b/lib/build.js
index 28504b68..cddab9cd 100644
--- a/lib/build.js
+++ b/lib/build.js
@@ -5,6 +5,7 @@ const pandoc = require("./pandoc");
const { PassThrough } = require("stream");
var docs = [];
+var builders = [];
iterator(function (srcname, name, variant, meta) {
docs.push(`* [${meta.pagetitle} - ${meta.subtitle}](${name}/${name}.html)`);
if (meta.repo && !process.argv.includes("repo:" + meta.repo)) return;
@@ -26,28 +27,35 @@ iterator(function (srcname, name, variant, meta) {
html.stdout.pipe(
fs.createWriteStream(`${__dirname}/../docs/${name}/${name}.html`),
);
- new Number(`${__dirname}/../${srcname}`, variant, meta)
- .build(
- new PassThrough()
- .on("data", function (chunk) {
- md.write(chunk);
- html.stdin.write(chunk);
- })
- .on("end", function () {
- md.end();
- html.stdin.end();
- }),
- )
- .then(() => {
+ builders.push({
+ number: new Number(`${__dirname}/../${srcname}`, variant, meta),
+ out: new PassThrough()
+ .on("data", function (chunk) {
+ md.write(chunk);
+ html.stdin.write(chunk);
+ })
+ .on("end", function () {
+ md.end();
+ html.stdin.end();
+ }),
+ then() {
console.log("✓", srcname, variant === "meta" ? "" : variant);
- })
- .catch((err) => {
+ },
+ catch(err) {
console.log("❌", srcname, variant === "meta" ? "" : variant);
console.error(err.join("\n"));
console.error();
process.exitCode = 1;
- });
+ },
+ });
});
+
+Promise.all(builders.map((build) => build.number.read())).then(function () {
+ builders.forEach(function (build) {
+ build.number.write(build.out).then(build.then, build.catch);
+ });
+});
+
fs.writeFileSync(
`${__dirname}/../docs/index.md`,
`# OData Specification Drafts
diff --git a/lib/iterator.js b/lib/iterator.js
index f2e8cc8b..b39a2947 100644
--- a/lib/iterator.js
+++ b/lib/iterator.js
@@ -13,12 +13,15 @@ module.exports = function (callback) {
const meta = yaml.load(
fs.readFileSync(`${__dirname}/../${doc.name}/${metaname}`),
);
- const name =
- metaname === "meta.yaml" || !meta.dirname ? doc.name : meta.dirname;
- callback(doc.name, name, metaname.substring(0, metaname.length - 5), {
- ...metameta,
- ...meta,
- });
+ callback(
+ doc.name,
+ metaname === "meta.yaml" || !meta.dirname ? doc.name : meta.dirname,
+ metaname.substring(0, metaname.length - 5),
+ {
+ ...metameta,
+ ...meta,
+ },
+ );
});
}
});
diff --git a/lib/number.js b/lib/number.js
index df682e99..32c90b0f 100644
--- a/lib/number.js
+++ b/lib/number.js
@@ -18,6 +18,8 @@ if (
process.exit(1);
}
+var builders = {};
+
class Number {
constructor(dir, variant, meta) {
this.dir = dir;
@@ -28,6 +30,7 @@ class Number {
.sort(compareSectionNumbers);
this.meta = meta;
this.meta["pandoc-version"] = pandoc;
+ if (meta.name) builders[meta.name] = this;
}
secno(type) {
@@ -208,15 +211,22 @@ class Number {
}
out.write(
outline.replace(
- /##([A-Za-z0-9.]+)\]/g,
- function (m, p) {
- var r = this.refs[p];
- if (r) return `${r}](#${p})`;
+ /(\[?)#([-A-Za-z0-9]*)#([A-Za-z0-9.]+)\]/g,
+ function (m, o, d, p) {
+ var f, r;
+ if (d && (r = builders[d]?.refs[p])) {
+ if (o) r = `${d}, section ${r}`;
+ f = builders[d].meta.url;
+ } else if (!d) {
+ r = this.refs[p];
+ f = "";
+ }
+ if (r) return `${o}${r}](${f}#${p})`;
else {
this.errors.push(
- `${this.dir}/${file}(${lineno}): Undefined link ##${p}`,
+ `${this.dir}/${file}(${lineno}): Undefined link #${d}#${p}`,
);
- return `~~${p}~~]`;
+ return `${o}~~${d}#${p}~~]`;
}
}.bind(this),
),
@@ -244,7 +254,7 @@ class Number {
}
}
- async build(out) {
+ async read() {
this.errors = [];
this.counter = {};
this.refs = {};
@@ -252,8 +262,11 @@ class Number {
this.toc = { "": { sub: [] } };
this.match = 0;
for (var c of this.chapters) await this.phase1(c);
+ }
+
+ async write(out) {
this.match = 0;
- for (c of this.chapters) {
+ for (var c of this.chapters) {
await this.phase2(c, out);
out.write("\n");
if (c[0] === "0") {
@@ -265,6 +278,11 @@ class Number {
out.end();
if (this.errors.length > 0) throw this.errors;
}
+
+ async build(out) {
+ await this.read();
+ await this.write(out);
+ }
}
module.exports = Number;
diff --git a/meta.yaml b/meta.yaml
index da429043..b6dc4acc 100644
--- a/meta.yaml
+++ b/meta.yaml
@@ -1,10 +1,3 @@
-OData-CSDLJSON: https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html
-OData-CSDLXML: https://docs.oasis-open.org/odata/odata-csdl-xml/v4.02/odata-csdl-xml-v4.02.html
-OData-JSON: https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html
-OData-Data-Agg: https://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/odata-data-aggregation-ext-v4.0.html
-OData-Temporal: https://docs.oasis-open.org/odata/odata-temporal-ext/v4.0/odata-temporal-ext-v4.0.html
-OData-Protocol: https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html
-OData-URL: https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html
OData-VocCore: https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md
OData-VocCap: https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Capabilities.V1.md
OData-VocAggr: https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md
\ No newline at end of file
diff --git a/odata-csdl/12 Action and Function.md b/odata-csdl/12 Action and Function.md
index 477c30ee..99c0b3ac 100644
--- a/odata-csdl/12 Action and Function.md
+++ b/odata-csdl/12 Action and Function.md
@@ -162,7 +162,7 @@ Unbound actions are invoked from the entity container through an [action
import](#ActionImport).
Unbound functions are invoked as static functions within a common expression
-(see [OData-URL, section "Common Expression Syntax"]($$$OData-URL$$$#CommonExpressionSyntax)),
+(see [#OData-URL#CommonExpressionSyntax]),
or from the entity container through a [function import](#FunctionImport).
::: {.varjson .rep}
diff --git a/odata-csdl/14 Vocabulary and Annotation.md b/odata-csdl/14 Vocabulary and Annotation.md
index 0e7f4167..c55ed3bc 100644
--- a/odata-csdl/14 Vocabulary and Annotation.md
+++ b/odata-csdl/14 Vocabulary and Annotation.md
@@ -2570,7 +2570,7 @@ Name property of the Actor entity
The `odata.matchesPattern` client-side function takes two string
expressions as arguments and returns a Boolean value.
-It is the counterpart of the identically named URL function [OData-URL, section "`matchespattern`"]($$$OData-URL$$$#matchespattern).
+It is the counterpart of the identically named URL function [#OData-URL#matchespattern].
The function returns true if the second expression evaluates to an
[ECMAScript](#_ECMAScript) (JavaScript) regular expression and
diff --git a/odata-csdl/json.yaml b/odata-csdl/json.yaml
index 0bcc584b..fd3b8f6b 100644
--- a/odata-csdl/json.yaml
+++ b/odata-csdl/json.yaml
@@ -1,3 +1,5 @@
+name: OData-CSDL
+url: https://docs.oasis-open.org/odata/odata-csdl-json/v4.02/odata-csdl-json-v4.02.html
pagetitle: OData Common Schema Definition Language (CSDL) JSON Representation Version 4.02
subtitle: Committee Specification Draft 02
dirname: odata-csdl-json
diff --git a/odata-csdl/xml.yaml b/odata-csdl/xml.yaml
index 5bff1a54..7a3f06b0 100644
--- a/odata-csdl/xml.yaml
+++ b/odata-csdl/xml.yaml
@@ -1,3 +1,5 @@
+name: OData-CSDLXML
+url: https://docs.oasis-open.org/odata/odata-csdl-xml/v4.02/odata-csdl-xml-v4.02.html
pagetitle: OData Common Schema Definition Language (CSDL) XML Representation Version 4.02
subtitle: Committee Specification Draft 02
dirname: odata-csdl-xml
diff --git a/odata-data-aggregation-ext/3.1 Fundamentals of Input and Output Sets.md b/odata-data-aggregation-ext/3.1 Fundamentals of Input and Output Sets.md
index 66619aa4..ab9da56e 100644
--- a/odata-data-aggregation-ext/3.1 Fundamentals of Input and Output Sets.md
+++ b/odata-data-aggregation-ext/3.1 Fundamentals of Input and Output Sets.md
@@ -7,7 +7,7 @@ A _set transformation_ (_transformation_ for short) is an operation on an input
The system query option `$apply` MUST NOT be used if the resource path addresses a single instance.
-The system query option `$apply` is evaluated first, then the other system query options are evaluated, if applicable, on the result of `$apply`, see [OData-Protocol, section "System Query Options"]($$$OData-Protocol$$$#SystemQueryOptions). Stability across requests for system query options `$top` and `$skip` [OData-Protocol, sections "System Query Option `$top`" and "System Query Option `$skip`"]($$$OData-Protocol$$$#SystemQueryOptiontop) is defined in [section ##StableTotalOrderBeforeskipandtop].
+The system query option `$apply` is evaluated first, then the other system query options are evaluated, if applicable, on the result of `$apply`, see [#OData-Protocol#SystemQueryOptions]. Stability across requests for system query options `$top` and `$skip` [#OData-Protocol#SystemQueryOptiontop] is defined in [section ##StableTotalOrderBeforeskipandtop].
Each set transformation:
- carries over the input type to the output set such that it fits into the data model of the service.
@@ -33,13 +33,13 @@ The definitions of italicized terms made in this section are used throughout thi
### ##subsubsec Type, Structure and Context URL
-All input sets and output sets in one transformation sequence are collections of the _input type_, that is the entity type or complex type of the first input set, or in other words, of the resource to which the transformation sequence is applied. The input type is determined by the entity model element identified within the metadata document by the context URL of that resource [OData-Protocol, section "Context URL"]($$$OData-Protocol$$$#ContextURL). Individual instances in an input or output set can have a subtype of the input type. (See [example ##subinputtype].) The transformation sequence given as the `$apply` system query option is applied to the resource addressed by the resource path. The transformations defined below can have nested transformation sequences as parameters, these are then applied to resources that can differ from the current input set.
+All input sets and output sets in one transformation sequence are collections of the _input type_, that is the entity type or complex type of the first input set, or in other words, of the resource to which the transformation sequence is applied. The input type is determined by the entity model element identified within the metadata document by the context URL of that resource [#OData-Protocol#ContextURL]. Individual instances in an input or output set can have a subtype of the input type. (See [example ##subinputtype].) The transformation sequence given as the `$apply` system query option is applied to the resource addressed by the resource path. The transformations defined below can have nested transformation sequences as parameters, these are then applied to resources that can differ from the current input set.
The _structure_ of an instance that occurs in an input or output set is defined by the names of the structural and navigation properties that the instance contains. Instances of an input type can have different structures, subject to the following rules:
- Declared properties of the input type or a nested or related type thereof or of a subtype of one of these MUST have their declared type and meaning when they occur in an input or output set.
- Single- or collection-valued primitive properties addressed by a property path starting at a non-transient entity MUST keep their values from the addressed resource path collection throughout the transformation sequence. Likewise, single- or collection-valued navigation property paths starting at a non-transient entity MUST keep addressing the same non-transient entities as in the addressed resource path collection.
- Instances in an output set need not have all declared or dynamic properties that occurred in the input set.
-- Instances in an output set can have dynamic properties that did not occur in the input set. The name for such a dynamic property is called an _alias_, it is a simple identifier (see [OData-CSDL, section "Simple Identifier"]($$$OData-CSDLJSON$$$#SimpleIdentifier)). Aliases MUST differ from names of declared properties in the input type, from names of properties in the first input set, and from names of properties in the current input set. Aliases in one collection MUST also differ from each other.
+- Instances in an output set can have dynamic properties that did not occur in the input set. The name for such a dynamic property is called an _alias_, it is a simple identifier (see [#OData-CSDL#SimpleIdentifier]). Aliases MUST differ from names of declared properties in the input type, from names of properties in the first input set, and from names of properties in the current input set. Aliases in one collection MUST also differ from each other.
Here is an overview of the structural changes made by different transformations:
- During [aggregation](#BasicAggregation) or [nest](#Transformationnest), many instances are replaced by one instance, properties that represent the aggregation level are retained, and others are replaced by dynamic properties holding the aggregate value of the many instances or a transformed copy of them.
@@ -48,15 +48,15 @@ Here is an overview of the structural changes made by different transformations:
- During [join](#Transformationsjoinandouterjoin), one instance with a collection of related instances is replaced by many copies, each of which is related via a dynamic property to one of the related instances.
- During [concatenation](#Transformationconcat), the same instances are transformed multiple times and the output sets with their potentially different structures are concatenated.
-An output set thus consists of instances with different structures. This is the same situation as with a collection of an open type ([OData-CSDL, section "Open Entity Type"]($$$OData-CSDLJSON$$$#OpenEntityType) and [OData-CSDL, section "Open Complex Type"]($$$OData-CSDLJSON$$$#OpenComplexType)) and it is handled in the same way.
+An output set thus consists of instances with different structures. This is the same situation as with a collection of an open type ([#OData-CSDL#OpenEntityType] and [#OData-CSDL#OpenComplexType]) and it is handled in the same way.
-If the first input set is a collection of entities from a given entity set, then so are all input sets and output sets in the transformation sequence. The `{select-list}` in the context URL [OData-Protocol, section "Context URL"]($$$OData-Protocol$$$#ContextURL) MUST describe only properties that are present or annotated as absent (for example, if `Core.Permissions` is `None` [OData-Protocol, section "Requesting Individual Entities"]($$$OData-Protocol$$$#RequestingIndividualEntities)) in all instances of the collection, after applying any `$select` and `$expand` system query options. The `{select-list}` SHOULD describe as many such properties as possible, even if the request involves a concatenation that leads to a non-homogeneous structure. If the server cannot determine any such properties, the `{select-list}` MUST consist of just the instance annotation `AnyStructure` defined in the [`Core` vocabulary]($$$OData-VocCore$$$#AnyStructure). (See [example ##anystructure].)
+If the first input set is a collection of entities from a given entity set, then so are all input sets and output sets in the transformation sequence. The `{select-list}` in the context URL [#OData-Protocol#ContextURL] MUST describe only properties that are present or annotated as absent (for example, if `Core.Permissions` is `None` [#OData-Protocol#RequestingIndividualEntities]) in all instances of the collection, after applying any `$select` and `$expand` system query options. The `{select-list}` SHOULD describe as many such properties as possible, even if the request involves a concatenation that leads to a non-homogeneous structure. If the server cannot determine any such properties, the `{select-list}` MUST consist of just the instance annotation `AnyStructure` defined in the [`Core` vocabulary]($$$OData-VocCore$$$#AnyStructure). (See [example ##anystructure].)
### ##subsubsec Sameness and Order
Input sets and output sets are not sets of instances in the mathematical sense but collections, because the same instance can occur multiple times in them. In other words: A collection contains values (which can be instances of structured types or primitive values), possibly with repetitions. The occurrences of the values in the collection form a set in the mathematical sense. The _cardinality_ of a collection is the total number of occurrences in it. When this text describes a transformation algorithmically and stipulates that certain steps are carried out _for each occurrence_ in a collection, this means that the steps are carried out multiple times for the same value if it occurs multiple times in the collection.
-A collection addressed by the resource path is returned by the service either as an ordered collection [OData-Protocol, section "Managing Members of an Ordered Collection"]($$$OData-Protocol$$$#ManagingMembersofanOrderedCollection) or as an unordered collection. The same applies to collections that are nested in or related to the addressed resource as well as to collections that are the result of evaluating an expression starting with `$root`, which occur, for example, as the first parameter of a [hierarchical transformation](#HierarchicalTransformations).
+A collection addressed by the resource path is returned by the service either as an ordered collection [#OData-Protocol#ManagingMembersofanOrderedCollection] or as an unordered collection. The same applies to collections that are nested in or related to the addressed resource as well as to collections that are the result of evaluating an expression starting with `$root`, which occur, for example, as the first parameter of a [hierarchical transformation](#HierarchicalTransformations).
But when such a collection is transformed by the `$apply` system query option, additional cases can arise that are neither ordered nor totally unordered. For example, the [`groupby`](#Transformationgroupby) transformation retains any order within a group but not between groups.
@@ -74,15 +74,15 @@ An order of a collection is more precisely defined as follows: Given two differe
When transformations are defined in the following sections, the algorithmic description sometimes contains an _order-preserving loop_ over a collection. Such a loop processes the occurrences in an order chosen by the service in such a way that $u_1$ is processed before $u_2$ whenever $u_1$ precedes $u_2$. Likewise, in an _order-preserving sequence_ $u_1,…,u_n$ we have $i
@@ -1386,7 +1386,7 @@ Example ##ex_refconstr: If the parent navigation property contained a referentia
```
-then alternatively the property taking part in the referential constraint [OData-Protocol, section "Update a Primitive Property"]($$$OData-Protocol$$$#UpdateaPrimitiveProperty) could be changed to EMEA Central:
+then alternatively the property taking part in the referential constraint [#OData-Protocol#UpdateaPrimitiveProperty] could be changed to EMEA Central:
```json
PATCH /service/SalesOrganizations('Switzerland')
Content-Type: application/json
diff --git a/odata-data-aggregation-ext/meta.yaml b/odata-data-aggregation-ext/meta.yaml
index 41e3fc88..db75f9c4 100644
--- a/odata-data-aggregation-ext/meta.yaml
+++ b/odata-data-aggregation-ext/meta.yaml
@@ -1,3 +1,5 @@
+name: OData-Data-Agg
+url: https://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/odata-data-aggregation-ext-v4.0.html
pagetitle: OData Extension for Data Aggregation Version 4.0
subtitle: Committee Specification 03
filename: odata-data-aggregation-ext-v4.0-cs03
diff --git a/odata-json-format/15 Delta Payload.md b/odata-json-format/15 Delta Payload.md
index 3b24945b..95b2bff0 100644
--- a/odata-json-format/15 Delta Payload.md
+++ b/odata-json-format/15 Delta Payload.md
@@ -4,7 +4,7 @@
# ##sec Delta Payload
The non-format specific aspects of the delta handling are described in
-[OData-Protocol, section "Requesting Changes"]($$$OData-Protocol$$$#RequestingChanges).
+[#OData-Protocol#RequestingChanges].
## ##subsec Delta Responses
diff --git a/odata-json-format/16 Bound Function.md b/odata-json-format/16 Bound Function.md
index 3f7d3de6..27e447c5 100644
--- a/odata-json-format/16 Bound Function.md
+++ b/odata-json-format/16 Bound Function.md
@@ -285,8 +285,8 @@ Content-Type: application/json
:::
Alternatively, values of non-binding parameters MAY be specified as common expressions
-[OData-URL, section "Common Expression Syntax"]($$$OData-URL$$$#CommonExpressionSyntax). In the case of a bound action
-these MAY contain path expressions [OData-URL, section "Path Expressions"]($$$OData-URL$$$#PathExpressions), which
+[#OData-URL#CommonExpressionSyntax]. In the case of a bound action
+these MAY contain path expressions [#OData-URL#PathExpressions], which
the service evaluates on the binding parameter value. Such parameters are encoded as name/value
pairs where the name is the name of the parameter followed by `@expression` and
the value is the common expression. As the following example demonstrates,
@@ -325,7 +325,7 @@ Content-Type: application/json
:::
Inside a batch request the common expressions can also be value references
-starting with `$`, as introduced in [OData-Protocol, section "Referencing Values from Response Bodies"]($$$OData-Protocol$$$#ReferencingValuesfromResponseBodies).
+starting with `$`, as introduced in [#OData-Protocol#ReferencingValuesfromResponseBodies].
Non-binding parameters that are nullable or annotated with the term
[`Core.OptionalParameter`]($$$OData-VocCore$$$#OptionalParameter) defined in
diff --git a/odata-json-format/19 Batch Requests and Responses.md b/odata-json-format/19 Batch Requests and Responses.md
index da57a286..b70c3add 100644
--- a/odata-json-format/19 Batch Requests and Responses.md
+++ b/odata-json-format/19 Batch Requests and Responses.md
@@ -442,7 +442,7 @@ preference does not automatically cascade down to the individual
requests within the batch. After successful execution of the batch
request the response to the batch request is returned in the body of a
response to an interrogation request against the status monitor resource
-URL, see [OData-Protocol, section "Asynchronous Requests"]($$$OData-Protocol$$$#AsynchronousRequests).
+URL, see [#OData-Protocol#AsynchronousRequests].
A service MAY return interim results to an asynchronously executing
batch. It does this by responding with `200 OK` to a
diff --git a/odata-json-format/4 Common Characteristics.md b/odata-json-format/4 Common Characteristics.md
index 0ebbeb3b..98448833 100644
--- a/odata-json-format/4 Common Characteristics.md
+++ b/odata-json-format/4 Common Characteristics.md
@@ -364,7 +364,7 @@ metadata document of a different service
### ##subsubsec Control Information: `count` (`odata.count`)
The `count` control information occurs only in responses and
-can annotate any collection, see [OData-Protocol, section "System Query Option `$count`"]($$$OData-Protocol$$$#SystemQueryOptioncount).
+can annotate any collection, see [#OData-Protocol#SystemQueryOptioncount].
Its value is an
`Edm.Int64` value corresponding to
the total count of members in the collection represented by the request.
@@ -537,8 +537,8 @@ For [media entities](#MediaEntity) and [stream
properties](#StreamProperty) at least one of the control information
`mediaEditLink` and `mediaReadLink` MUST be included
in responses if they don't follow standard URL conventions as defined
-in [OData-URL, section "Addressing a Property"]($$$OData-URL$$$#AddressingaProperty)
-and [OData-URL, section "Addressing the Media Stream of a Media Entity"]($$$OData-URL$$$#AddressingtheMediaStreamofaMediaEntity), or if
+in [#OData-URL#AddressingaProperty]
+and [#OData-URL#AddressingtheMediaStreamofaMediaEntity], or if
[`metadata=full`](#metadatafullodatametadatafull)
is requested.
diff --git a/odata-json-format/meta.yaml b/odata-json-format/meta.yaml
index a17de4fe..b6d120e7 100644
--- a/odata-json-format/meta.yaml
+++ b/odata-json-format/meta.yaml
@@ -1,3 +1,5 @@
+name: OData-JSON
+url: https://docs.oasis-open.org/odata/odata-json-format/v4.02/odata-json-format-v4.02.html
pagetitle: OData JSON Format Version 4.02
subtitle: Committee Specification Draft 02
filename: odata-json-format-v4.02-csd02
diff --git a/odata-protocol/11 Data Service Requests.md b/odata-protocol/11 Data Service Requests.md
index 7fc550d3..e122e92a 100644
--- a/odata-protocol/11 Data Service Requests.md
+++ b/odata-protocol/11 Data Service Requests.md
@@ -231,7 +231,7 @@ GET http://host/service/Products(1)/Name
#### ##subsubsubsec Requesting Stream Properties
If the property being requested has type `Edm.Stream` (see
-[OData-URL, section "Addressing a Property"]($$$OData-URL$$$#AddressingaProperty)), the media type of the response is the
+[#OData-URL#AddressingaProperty]), the media type of the response is the
media type of the stream, subject to content type negotiation based on the
[`Accept`](#HeaderAccept) header of the request.
The response body is the octet-stream that represents the raw
@@ -411,7 +411,7 @@ expand item is evaluated relative to the retrieved resource being
expanded.
For a full description of the syntax used when building requests, see
-[OData-URL, section "System Query Option `$expand`"]($$$OData-URL$$$#SystemQueryOptionexpand).
+[#OData-URL#SystemQueryOptionexpand].
::: example
Example ##ex: for each customer entity within the Customers entity set the
diff --git a/odata-protocol/11.4 Data Modification.md b/odata-protocol/11.4 Data Modification.md
index b63b1a9b..addff612 100644
--- a/odata-protocol/11.4 Data Modification.md
+++ b/odata-protocol/11.4 Data Modification.md
@@ -46,7 +46,7 @@ If optimistic concurrency control is required for a resource, the
service MUST include an [`ETag`](#HeaderETag) header in a response to a
`GET` request to the resource, and MAY include the ETag in a
format-specific manner in responses containing that resource,
-see for example [OData-JSON, section "Control Information: `etag` (`odata.etag`)"]($$$OData-JSON$$$#ControlInformationetagodataetag).
+see for example [#OData-JSON#ControlInformationetagodataetag].
The presence of an [`ETag`](#HeaderETag) header in a response does not
imply in itself that the resource requires optimistic concurrency
@@ -185,7 +185,7 @@ if the provided values do not match the service-determined values.
Non-insertable properties include (and are not limited to)
-- dependent properties that are tied to non-key properties of the principal entity through a referential constraint [OData-CSDL, section "Referential Constraint"]($$$OData-CSDLJSON$$$#ReferentialConstraint) (informally: "denormalized" properties),
+- dependent properties that are tied to non-key properties of the principal entity through a referential constraint [#OData-CSDL#ReferentialConstraint] (informally: "denormalized" properties),
- properties annotated with the term
[`Core.Computed`]($$$OData-VocCore$$$#Computed), see [OData-VocCore](#ODataVocCore),
- properties listed as `NonInsertableProperties` of term [`Capabilities.InsertRestrictions`]($$$OData-VocCap$$$#InsertRestrictions), see [OData-VocCap](#ODataVocCap),
@@ -376,7 +376,7 @@ If they are provided, services MUST either ignore the values in the request body
Non-updatable properties include (and are not limited to)
- key properties,
-- dependent properties that are tied to non-key properties of the principal entity through a referential constraint [OData-CSDL, section "Referential Constraint"]($$$OData-CSDLJSON$$$#ReferentialConstraint) (informally: "denormalized" properties),
+- dependent properties that are tied to non-key properties of the principal entity through a referential constraint [#OData-CSDL#ReferentialConstraint] (informally: "denormalized" properties),
- properties annotated with the terms
[`Core.Computed`]($$$OData-VocCore$$$#Computed) or [`Core.Immutable`]($$$OData-VocCore$$$#Immutable), see [OData-VocCore](#ODataVocCore),
- properties listed as `NonUpdatableProperties` of term [`Capabilities.UpdateRestrictions`]($$$OData-VocCap$$$#UpdateRestrictions), see [OData-VocCap](#ODataVocCap),
diff --git a/odata-protocol/12 Conformance.md b/odata-protocol/12 Conformance.md
index b9fbed04..13adc84b 100644
--- a/odata-protocol/12 Conformance.md
+++ b/odata-protocol/12 Conformance.md
@@ -153,7 +153,7 @@ with generic clients
13. SHOULD support the `$count` system query option ([section ##SystemQueryOptioncount])
14. SHOULD support `$expand` ([section ##SystemQueryOptionexpand])
15. SHOULD support the lambda operators `any` and `all` on navigation-
-and collection-valued properties ([OData-URL, section "Lambda Operators"]($$$OData-URL$$$#LambdaOperators))
+and collection-valued properties ([#OData-URL#LambdaOperators])
16. SHOULD support the `/$count` segment on navigation and collection
properties ([section ##RequestingtheNumberofItemsinaCollection])
17. SHOULD support `$orderby asc` and `desc` on individual properties
@@ -171,7 +171,7 @@ Level](#OData40IntermediateConformanceLevel)
4. MUST support the `/$count` segment on navigation and collection
properties ([section ##RequestingtheNumberofItemsinaCollection])
5. MUST support the lambda operators `any` and `all` on navigation- and
-and collection-valued properties ([OData-URL, section "Lambda Operators"]($$$OData-URL$$$#LambdaOperators))
+and collection-valued properties ([#OData-URL#LambdaOperators])
6. MUST support the `$skip` system query option ([section ##SystemQueryOptionskip])
7. MUST support the `$count` system query option ([section ##SystemQueryOptioncount])
8. MUST support `$orderby` with `asc` and `desc` on individual properties
diff --git a/odata-protocol/meta.yaml b/odata-protocol/meta.yaml
index fc2265cc..3133d04e 100644
--- a/odata-protocol/meta.yaml
+++ b/odata-protocol/meta.yaml
@@ -1,3 +1,5 @@
+name: OData-Protocol
+url: https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part1-protocol.html
pagetitle: 'OData Version 4.02. Part 1: Protocol'
subtitle: Committee Specification Draft 02
filename: odata-v4.02-csd02-part1-protocol
diff --git a/odata-temporal-ext/4 Temporal Requests.md b/odata-temporal-ext/4 Temporal Requests.md
index fd8c7dc1..3d785603 100644
--- a/odata-temporal-ext/4 Temporal Requests.md
+++ b/odata-temporal-ext/4 Temporal Requests.md
@@ -441,7 +441,7 @@ on the data valid at that point in time, including the query option
For timeline entity sets the interval for filtering data is determined
following the rules in [section ##PropagationofTemporalQueryOptions]
and evaluated as an additional criterion for `$filter` in the evaluation
-sequence defined in [OData-Protocol, section "System Query Options"]($$$OData-Protocol$$$#SystemQueryOptions),
+sequence defined in [#OData-Protocol#SystemQueryOptions],
which is evaluated _after_ the query option `$apply`.
::: example
diff --git a/odata-temporal-ext/meta.yaml b/odata-temporal-ext/meta.yaml
index bab27ff9..c6dc6a35 100644
--- a/odata-temporal-ext/meta.yaml
+++ b/odata-temporal-ext/meta.yaml
@@ -1,3 +1,5 @@
+name: OData-Temporal
+url: https://docs.oasis-open.org/odata/odata-temporal-ext/v4.0/odata-temporal-ext-v4.0.html
pagetitle: OData Extension for Temporal Data Version 4.0
subtitle: Committee Specification Draft 04
filename: odata-temporal-ext-v4.0-csd04
diff --git a/odata-url-conventions/4 Resource Path.md b/odata-url-conventions/4 Resource Path.md
index 4a63bbcc..bc00cc85 100644
--- a/odata-url-conventions/4 Resource Path.md
+++ b/odata-url-conventions/4 Resource Path.md
@@ -1086,7 +1086,7 @@ Content-Type: application/json
Members of the JSON object also include parameters
if the resource path is a function invocation or function import. In this case
-parameters MUST be represented like parameters in an action invocation [OData-JSON, section "Action Invocation"]($$$OData-JSON$$$#ActionInvocation),
+parameters MUST be represented like parameters in an action invocation [#OData-JSON#ActionInvocation],
and in the resource path parentheses after the function name MUST be omitted.
::: example
@@ -1105,7 +1105,7 @@ Content-Type: application/json
```
The previous request looks analogous to a bound function invocation with expressions (like in [example ##funcexpr])
-if it is written using implicit parameter aliases (see [OData-Protocol, section "Inline Parameter Syntax"]($$$OData-Protocol$$$#InlineParameterSyntax)).
+if it is written using implicit parameter aliases (see [#OData-Protocol#InlineParameterSyntax]).
```
GET http://host/service/Employees(23)/self.PendingLeaveRequests
?StartDate=now()
diff --git a/odata-url-conventions/5 Query Options.md b/odata-url-conventions/5 Query Options.md
index 22058ed7..34bd79ca 100644
--- a/odata-url-conventions/5 Query Options.md
+++ b/odata-url-conventions/5 Query Options.md
@@ -1706,7 +1706,7 @@ $filter=[FirstName,LastName] in [["John","Doe"],["Jane","Smith"]]
```
:::
-Entities are represented as structured literals as described in [OData-JSON, section "Entity"]($$$OData-JSON$$$#Entity).
+Entities are represented as structured literals as described in [#OData-JSON#Entity].
Non-transient entities can alternatively be represented through their [resource path](#ResourcePath).
::: example
diff --git a/odata-url-conventions/meta.yaml b/odata-url-conventions/meta.yaml
index 9a879d98..b5a53d9c 100644
--- a/odata-url-conventions/meta.yaml
+++ b/odata-url-conventions/meta.yaml
@@ -1,3 +1,5 @@
+name: OData-URL
+url: https://docs.oasis-open.org/odata/odata/v4.02/odata-v4.02-part2-url-conventions.html
pagetitle: 'OData Version 4.02. Part 2: URL Conventions'
subtitle: Committee Specification Draft 02
filename: odata-v4.02-csd02-part2-url-conventions
diff --git a/package-lock.json b/package-lock.json
index 6f2019c2..e8591d31 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -708,6 +708,7 @@
"version": "1.20.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
@@ -789,6 +790,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -822,6 +824,7 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
@@ -979,6 +982,7 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -1093,6 +1097,7 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
@@ -1112,6 +1117,7 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
@@ -1142,6 +1148,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -1150,6 +1157,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
@@ -1177,7 +1185,8 @@
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "license": "MIT"
},
"node_modules/emoji-regex": {
"version": "8.0.0",
@@ -1188,6 +1197,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -1221,6 +1231,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "license": "MIT",
"dependencies": {
"get-intrinsic": "^1.2.4"
},
@@ -1232,6 +1243,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
}
@@ -1247,7 +1259,8 @@
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "license": "MIT"
},
"node_modules/escape-string-regexp": {
"version": "4.0.0",
@@ -1316,6 +1329,7 @@
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -1340,6 +1354,7 @@
"version": "4.21.0",
"resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
"integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+ "license": "MIT",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
@@ -1451,6 +1466,7 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
"integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
+ "license": "MIT",
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~2.0.0",
@@ -1511,6 +1527,7 @@
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -1551,6 +1568,7 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -1567,6 +1585,7 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
@@ -1696,6 +1715,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.3"
},
@@ -1720,6 +1740,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0"
},
@@ -1731,6 +1752,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -1742,6 +1764,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -1753,6 +1776,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -1777,6 +1801,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "license": "MIT",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
@@ -1864,6 +1889,7 @@
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
@@ -2259,6 +2285,7 @@
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -2267,6 +2294,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
"integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
@@ -2283,6 +2311,7 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "license": "MIT",
"bin": {
"mime": "cli.js"
},
@@ -2424,7 +2453,8 @@
"node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.3",
@@ -2466,6 +2496,7 @@
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
"integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -2477,6 +2508,7 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
"dependencies": {
"ee-first": "1.1.1"
},
@@ -2624,6 +2656,7 @@
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -2678,7 +2711,8 @@
"node_modules/path-to-regexp": {
"version": "0.1.10",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
- "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
+ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
+ "license": "MIT"
},
"node_modules/pend": {
"version": "1.2.0",
@@ -2856,6 +2890,7 @@
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.0.6"
},
@@ -2883,6 +2918,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -2891,6 +2927,7 @@
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
@@ -3021,7 +3058,8 @@
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
},
"node_modules/semver": {
"version": "7.6.3",
@@ -3039,6 +3077,7 @@
"version": "0.19.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
"integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+ "license": "MIT",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
@@ -3062,6 +3101,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -3069,7 +3109,8 @@
"node_modules/send/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
},
"node_modules/serialize-javascript": {
"version": "6.0.0",
@@ -3083,6 +3124,7 @@
"version": "1.16.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
"integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
+ "license": "MIT",
"dependencies": {
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
@@ -3097,6 +3139,7 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "license": "MIT",
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
@@ -3112,7 +3155,8 @@
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "license": "ISC"
},
"node_modules/shebang-command": {
"version": "2.0.0",
@@ -3137,6 +3181,7 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
@@ -3236,6 +3281,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -3422,6 +3468,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
"engines": {
"node": ">=0.6"
}
@@ -3436,6 +3483,7 @@
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "license": "MIT",
"dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
@@ -3474,6 +3522,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}