<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
  <edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.xml">
    <edmx:Include Alias="Core" Namespace="Org.OData.Core.V1" />
  </edmx:Reference>
  <edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.xml">
    <edmx:Include Alias="Validation" Namespace="Org.OData.Validation.V1" />
  </edmx:Reference>
  <edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.xml">
    <edmx:Include Alias="Aggregation" Namespace="Org.OData.Aggregation.V1" />
  </edmx:Reference>
  <edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/UI.xml">
    <edmx:Include Namespace="com.sap.vocabularies.UI.v1" Alias="UI" />
  </edmx:Reference>
  <edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/Analytics.xml">
    <edmx:Include Namespace="com.sap.vocabularies.Analytics.v1" Alias="Analytics" />
  </edmx:Reference>
  <edmx:DataServices>
    <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="com.sap.vocabularies.Common.v1" Alias="Common">
      <Annotation Term="Core.Description">
        <String>Common terms for all SAP vocabularies</String>
      </Annotation>
      <Annotation Term="Core.Description" Qualifier="Published">
        <String>2017-02-15 © Copyright 2013 SAP SE. All rights reserved.</String>
      </Annotation>
      <Annotation Term="Core.Links">
        <Collection>
          <Record>
            <PropertyValue Property="rel" String="latest-version" />
            <PropertyValue Property="href" String="https://sap.github.io/odata-vocabularies/vocabularies/Common.xml" />
          </Record>
          <Record>
            <PropertyValue Property="rel" String="alternate" />
            <PropertyValue Property="href" String="https://sap.github.io/odata-vocabularies/vocabularies/Common.json" />
          </Record>
          <Record>
            <PropertyValue Property="rel" String="describedby" />
            <PropertyValue Property="href" String="https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Common.md" />
          </Record>
        </Collection>
      </Annotation>

      <Term Name="Experimental" Type="Edm.String" Nullable="true">
        <!-- can be used without value -->
        <Annotation Term="Core.Description">
          <String>Terms, types, and properties annotated with this term are experimental and can be changed incompatibly or removed completely any time without prior warning.</String>
        </Annotation>
        <Annotation Term="Core.LongDescription">
          <String>Do not use or rely on experimental terms, types, and properties in production environments.</String>
        </Annotation>
      </Term>

      <!-- Section: Versioning -->
      <Term Name="ServiceVersion" Type="Edm.Int32" Nullable="false" AppliesTo="Schema">
        <Annotation Term="Core.Description" String="1 for first version of a service, incremented when schema changes incompatibly and service is published with a different URI" />
      </Term>
      <Term Name="ServiceSchemaVersion" Type="Edm.Int32" Nullable="false" AppliesTo="Schema">
        <Annotation Term="Core.Description" String="0 for first schema version within a service version, incremented when schema changes compatibly" />
      </Term>

      <!-- Section: General Semantics -->
      <Term Name="Label" Type="Edm.String" Nullable="false">
        <Annotation Term="Core.Description" String="A short, human-readable text suitable for labels and captions in UIs" />
        <Annotation Term="Core.IsLanguageDependent" />
      </Term>

      <Term Name="Heading" Type="Edm.String" Nullable="false">
        <Annotation Term="Core.Description" String="A short, human-readable text suitable for column headings in UIs" />
        <Annotation Term="Core.IsLanguageDependent" />
      </Term>

      <Term Name="QuickInfo" Type="Edm.String" Nullable="false">
        <Annotation Term="Core.Description" String="A short, human-readable text suitable for tool tips in UIs" />
        <Annotation Term="Core.IsLanguageDependent" />
      </Term>

      <Term Name="DocumentationRef" Type="Edm.String" Nullable="false">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="A URI referencing language-dependent documentation for the annotated model element" />
        <Annotation Term="Core.Example">
          <Record Type="Core.PrimitiveExampleValue">
            <PropertyValue Property="Description">
              <String>URN scheme to look up the documentation for an object with given type and id in a given system.
              This example looks up the documentation for data element /iwbep/account in system G1Y_000.</String>
            </PropertyValue>
            <PropertyValue Property="Value" String="urn:sap-com:documentation:key?=type=DTEL&amp;id=%2fiwbep%2faccount&amp;origin=G1Y_000" />
          </Record>
        </Annotation>
      </Term>

      <Term Name="Text" Type="Edm.String" Nullable="true" AppliesTo="Property">
        <Annotation Term="Core.Description" String="A descriptive text for values of the annotated property. Value MUST be a dynamic expression when used as metadata annotation." />
        <Annotation Term="Core.IsLanguageDependent" />
        <Annotation Term="Validation.ApplicableTerms">
          <Collection>
            <String>UI.TextArrangement</String>
          </Collection>
        </Annotation>
      </Term>

      <Term Name="TextFor" Type="Edm.PropertyPath" Nullable="false" AppliesTo="Property">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Core.Description" String="The annotated property contains a descriptive text for values of the referenced property." />
      </Term>

      <Term Name="ExternalID" Type="Edm.PrimitiveType" Nullable="true" AppliesTo="Property Parameter">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="A human readable identifier for values of the annotated property or parameter. Value MUST be a dynamic expression when used as metadata annotation." />
        <Annotation Term="Core.LongDescription">
          <String>If the annotated property is (part of) a foreign key of a resource, the external id is a human readable (part of an) identifier of this resource.
            There is a one-to-one relationship between each possible value of the annotated property and the corresponding external id.
            The annotation of a parameter refers to a property of the operation binding parameter.</String>
        </Annotation>
      </Term>

      <!--
      <Term Name="ExternalIDs" Type="Collection(Edm.String)" Nullable="true" AppliesTo="Property">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="A list of parts of a human readable identifier for values of the annotated property. Value MUST be a dynamic expression when used as metadata annotation." />
        <Annotation Term="Core.LongDescription" String="If the annotated property is (part of) a foreign key of a resource, the collection of external ids constitutes a human readable (part of an) identifier of this resource. There is a one-to-one relationship between each possible value of the annotated property and the corresponding collection of external ids." />
      </Term>
      -->

      <Term Name="IsLanguageIdentifier" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="An identifier to distinguish multiple texts in different languages for the same entity" />
      </Term>

      <Term Name="TextFormat" Type="Common.TextFormatType" Nullable="false" AppliesTo="Property Parameter ReturnType">
        <Annotation Term="Core.Description" String="The annotated property, parameter, or return type contains human-readable text that may contain formatting information" />
        <Annotation Term="Core.RequiresType" String="Edm.String" />
      </Term>
      <EnumType Name="TextFormatType">
        <Member Name="plain">
          <Annotation Term="Core.Description" String="Plain text, line breaks represented as the character 0x0A" />
        </Member>
        <Member Name="html">
          <Annotation Term="Core.Description" String="Plain text with markup that can validly appear directly within an HTML DIV element" />
        </Member>
      </EnumType>

      <Term Name="Timezone" Type="Edm.String" Nullable="true" AppliesTo="Property Parameter">
        <Annotation Term="Core.Description" String="The point in time represented by the annotated property or parameter shall be interpreted in the given time zone" />
        <Annotation Term="Core.LongDescription">
          <String>Time zones shall be specified according to the [IANA](https://www.iana.org/time-zones) standard.
            If this annotation is absent or null or an empty string, points in time are typically interpreted in the current user's or default time zone.
            The annotation value can be a path expression resolving to a property that may be tagged with [`IsTimezone`](#IsTimezone).</String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.DateTimeOffset" />
      </Term>
      <Term Name="IsTimezone" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property Parameter">
        <Annotation Term="Core.Description" String="Annotated property or parameter is a time zone" />
      </Term>

      <!-- under discussion
        <Term Name="ValidationConstraint" Type="Common.ValidationConstraintType" Nullable="false" AppliesTo="Property EntityType ComplexType">
        <Annotation Term="Core.Description" String="Condition that the annotation target has to fulfill" />
        </Term>
        <ComplexType Name="ValidationConstraintType">
        <Property Name="FailureMessage" Type="Edm.String" Nullable="true">
        <Annotation Term="Core.IsLanguageDependent" />
        </Property>
        <Property Name="Condition" Type="Edm.Boolean" Nullable="false">
        <Annotation Term="Core.Description"
        String="Value MUST be a dynamic expression that evaluates to true if and only if the constraint is fulfilled" />
        </Property>
        </ComplexType>
      -->
      <!-- Examples:
        <Annotation Term="Common.ValidationConstraint" Qualifier="Comparison">
        <Record>
        <PropertyValue Property="FailureMessage" String="Start date cannot be after end date" />
        <PropertyValue Property="Condition">
        <Le>
        <Path>StartDate</Path>
        <Path>EndDate</Path>
        </Le>
        </PropertyValue>
        </Record>
        </Annotation>

        <Annotation Term="Common.ValidationConstraint" Qualifier="Minimum">
        <Record>
        <PropertyValue Property="FailureMessage" String="Value cannot be negative" />
        <PropertyValue Property="Condition">
        <Ge>
        <Path>Amount</Path>
        <Decimal>0</Decimal>
        </Ge>
        </PropertyValue>
        </Record>
        </Annotation>
      -->
      <!--
        could later be combined with a client-side function sap.matchRegularExpression
        Two arguments of type string, second argument MUST evaluate to a JavaScript regular expression, see e.g.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
        Function returns true if and only if the whole first argument matches the regular expression in the second argumentReturns
      -->

      <Term Name="IsDigitSequence" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property Parameter">
        <Annotation Term="Core.Description" String="Contains only digits" />
        <Annotation Term="Core.RequiresType" String="Edm.String" />
      </Term>

      <Term Name="IsUpperCase" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property Parameter">
        <Annotation Term="Core.Description" String="Contains just uppercase characters" />
        <Annotation Term="Core.RequiresType" String="Edm.String" />
      </Term>

      <Term Name="IsCurrency" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property Parameter">
        <Annotation Term="Core.Description" String="Annotated property or parameter is a currency code" />

      </Term>

      <Term Name="IsUnit" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property Parameter">
        <Annotation Term="Core.Description" String="Annotated property or parameter is a unit of measure" />
      </Term>

      <Term Name="UnitSpecificScale" Type="Edm.PrimitiveType" Nullable="false" AppliesTo="Property">
        <Annotation Term="Core.Description" String="The number of fractional decimal digits of a currency amount or measured quantity" />
        <Annotation Term="Core.LongDescription" String="The annotated property contains a currency code or unit of measure, and the annotation value specifies the default scale of numeric values with that currency code or unit of measure. Can be used in e.g. a list of available currency codes or units of measure, or a list of measuring devices to specify the number of fractional digits captured by that device." />
      </Term>

      <Term Name="UnitSpecificPrecision" Type="Edm.PrimitiveType" Nullable="false" AppliesTo="Property">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="The number of significant decimal digits of a currency amount or measured quantity" />
        <Annotation Term="Core.LongDescription" String="The annotated property contains a currency code or unit of measure, and the annotation value specifies the default precision of numeric values with that currency code or unit of measure. Can be used in e.g. a list of available currency codes or units of measure, or a list of measuring devices to specify the number of significant digits captured by that device." />
      </Term>

      <Term Name="SecondaryKey" AppliesTo="EntityType" Type="Collection(Edm.PropertyPath)" Nullable="false">
        <Annotation Term="Core.Description" String="The listed properties form a secondary key" />
        <Annotation Term="Core.LongDescription">
          <String>Multiple secondary keys are possible using different qualifiers.
          Unlike [`Core.AlternateKeys`](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#AlternateKeys),
          secondary keys need not support addressing an entity in a resource path.</String>
        </Annotation>
      </Term>

      <Term Name="MinOccurs" AppliesTo="NavigationProperty Property EntitySet Term Parameter" Type="Edm.Int64" Nullable="false">
        <Annotation Term="Core.Description" String="The annotated set or collection contains at least this number of items" />
      </Term>

      <Term Name="MaxOccurs" AppliesTo="NavigationProperty Property EntitySet Term Parameter" Type="Edm.Int64" Nullable="false">
        <Annotation Term="Core.Description" String="The annotated set or collection contains at most this number of items" />
      </Term>

      <Term Name="AssociationEntity" Type="Collection(Edm.NavigationPropertyPath)" Nullable="false" AppliesTo="EntityType">
        <Annotation Term="Core.Description">
          <String>Entity representing an n:m association with attributes</String>
        </Annotation>
        <Annotation Term="Common.MinOccurs" Int="2" />
      </Term>

      <Term Name="DerivedNavigation" Type="Edm.NavigationPropertyPath" Nullable="false" AppliesTo="NavigationProperty">
        <Annotation Term="Core.Description">
          <String>Shortcut for a multi-segment navigation, contains the long path with all its segments</String>
        </Annotation>
      </Term>

      <Term Name="Masked" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <!-- Annotation Term="Core.Revisions">
          <Annotation Term="Common.Experimental" />
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="Use terms `MaskedValue` instead" />
            </Record>
          </Collection>
        </Annotation -->
        <Annotation Term="Core.Description">
          <String>Property contains sensitive data that should by default be masked on a UI and clear-text visible only upon user interaction</String>
        </Annotation>
        <Annotation Term="Core.LongDescription">
          <String>This tag affects only the presentation to the user.
          The data are still transmitted in the response and can hence be observed using browser tools.</String>
        </Annotation>
      </Term>

      <Term Name="MaskedValue" Type="Edm.String" Nullable="true" AppliesTo="Property">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Common.IsInstanceAnnotation" />
        <Annotation Term="Core.Description" String="Property contains sensitive data that is by default not transferred" />
        <Annotation Term="Core.LongDescription">
          <String>By default a masked property is excluded from responses and instead an instance annotation with this term is sent, containing a masked value that can be rendered by user interfaces.</String>
        </Annotation>
      </Term>

      <Term Name="RevealOnDemand" Type="Edm.Boolean" Nullable="false" AppliesTo="Property">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Common.IsInstanceAnnotation" />
        <Annotation Term="Core.Description" String="Unmasked data for this property can be requested with custom query option `masked-values=false`" />
      </Term>

      <Term Name="SemanticObject" Type="Edm.String" Nullable="true" AppliesTo="EntitySet EntityType Property NavigationProperty">
        <Annotation Term="Core.Description" String="Name of the Semantic Object represented as this entity type or identified by this property" />
      </Term>
      <Term Name="SemanticObjectMapping" BaseTerm="Common.SemanticObject" Type="Collection(Common.SemanticObjectMappingAbstract)" Nullable="false" AppliesTo="EntitySet EntityType Property">
        <Annotation Term="Core.Description" String="Maps properties of the annotated entity type or sibling properties of the annotated property to properties of the Semantic Object" />
        <Annotation Term="Core.LongDescription" String="This allows &quot;renaming&quot; of properties in the current context to match property names of the Semantic Object, e.g. `SenderPartyID` to `PartyID`. Only properties explicitly listed in the mapping are renamed, all other properties are available for intent-based navigation with their &quot;local&quot; name." />
      </Term>
      <ComplexType Name="SemanticObjectMappingAbstract" Abstract="true">
        <Annotation Term="Core.Description" String="Maps a property of the Semantic Object to a property of the annotated entity type or a sibling property of the annotated property or a constant value" />
        <Property Name="SemanticObjectProperty" Type="Edm.String" Nullable="false">
          <Annotation Term="Core.Description" String="Name of the Semantic Object property" />
        </Property>
      </ComplexType>
      <ComplexType Name="SemanticObjectMappingType" BaseType="Common.SemanticObjectMappingAbstract">
        <Property Name="LocalProperty" Type="Edm.PropertyPath" Nullable="false">
          <Annotation Term="Core.Description" String="Path to a local property that provides the value for the Semantic Object property" />
        </Property>
      </ComplexType>
      <ComplexType Name="SemanticObjectMappingConstant" BaseType="Common.SemanticObjectMappingAbstract">
        <Annotation Term="Common.Experimental" />
        <Property Name="Constant" Type="Edm.PrimitiveType" Nullable="false">
          <Annotation Term="Core.Description" String="Constant value for the Semantic Object property" />
        </Property>
      </ComplexType>
      <Term Name="SemanticObjectUnavailableActions" BaseTerm="Common.SemanticObject" Type="Collection(Edm.String)" Nullable="false" AppliesTo="EntitySet EntityType Property">
        <Annotation Term="Core.Description" String="List of actions that are not available in the current state of the instance of the Semantic Object" />
      </Term>

      <Term Name="IsInstanceAnnotation" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Term">
        <Annotation Term="Core.Description" String="Term can also be used as instance annotation; AppliesTo of this term specifies where it can be applied" />
      </Term>

      <!-- use Capabilities instead
      <Term Name="Insertable" Type="Edm.Boolean" Nullable="false" DefaultValue="true" AppliesTo="NavigationProperty">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Common.IsInstanceAnnotation" />
        <Annotation Term="Core.Description">
          <String>Specifies whether the service allows to create an entity by sending a POST request to the navigation link URL (in this case the created entity is automatically linked to the entity containing the navigation link)</String>
        </Annotation>
      </Term>

      <Term Name="Updatable" Type="Edm.Boolean" Nullable="false" DefaultValue="true" AppliesTo="EntityType">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Common.IsInstanceAnnotation" />
        <Annotation Term="Core.Description">
          <String>Specifies whether the annotated entity can be updated</String>
        </Annotation>
      </Term>

      <Term Name="Deletable" Type="Edm.Boolean" Nullable="false" DefaultValue="true" AppliesTo="EntityType">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Common.IsInstanceAnnotation" />
        <Annotation Term="Core.Description">
          <String>Specifies whether the annotated entity can be deleted</String>
        </Annotation>
      </Term>
      -->

      <Term Name="FilterExpressionRestrictions" Type="Collection(Common.FilterExpressionRestrictionType)" Nullable="false" AppliesTo="EntitySet">
        <Annotation Term="Core.Description" String="These properties only allow a subset of expressions" />
        <Annotation Term="Core.Revisions">
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="Use term Capabilities.FilterRestrictions instead" />
            </Record>
          </Collection>
        </Annotation>
      </Term>
      <ComplexType Name="FilterExpressionRestrictionType">
        <Annotation Term="Core.Revisions">
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="Use term Capabilities.FilterRestrictions instead" />
            </Record>
          </Collection>
        </Annotation>
        <Property Name="Property" Type="Edm.PropertyPath" />
        <Property Name="AllowedExpressions" Type="Common.FilterExpressionType" />
      </ComplexType>
      <EnumType Name="FilterExpressionType">
        <Annotation Term="Core.Revisions">
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="Use term Capabilities.FilterRestrictions instead" />
            </Record>
          </Collection>
        </Annotation>
        <Member Name="SingleValue">
          <Annotation Term="Core.Description" String="a single 'eq' clause" />
        </Member>
        <Member Name="MultiValue">
          <Annotation Term="Core.Description" String="one or more 'eq' clauses, separated by 'or'" />
        </Member>
        <Member Name="SingleInterval">
          <Annotation Term="Core.Description" String="at most one 'ge' and one 'le' clause, separated by 'and', alternatively a single 'eq' clause" />
        </Member>
      </EnumType>

      <Term Name="FieldControl" Type="Common.FieldControlType" DefaultValue="Optional" AppliesTo="Property Parameter Record EntityType">
        <Annotation Term="Core.Description" String="Control state of a property, parameter, or the media stream of a media entity" />
        <Annotation Term="Core.LongDescription" String="This term can be used for static field control, providing an enumeration member value in $metadata, as well as dynamically, providing a `Path` expression.&#x0A;&#x0A;In the dynamic case the property referenced by the `Path` expression MUST be of type `Edm.Byte` to accommodate OData V2 services as well as V4 infrastructures that don't support enumeration types." />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </Term>
      <EnumType Name="FieldControlType" UnderlyingType="Edm.Byte">
        <Annotation Term="Core.Description" String="Control state of a property" />
        <Annotation Term="Core.LongDescription">
          <String>When changes are requested, the value of this annotation in the before-image or after-image
          of the request plays a role. These may differ if the value is given dynamically in the metadata.</String>
        </Annotation>
        <Member Name="Mandatory" Value="7">
          <Annotation Term="Core.Description" String="Property is mandatory from a business perspective" />
          <Annotation Term="Core.LongDescription">
            <String>A request that
- sets the property to null or an empty value or
- creates a non-[draft](#DraftRoot) entity and omits the property or
- activates a draft entity while the property is null or empty

fails entirely if this annotation is `Mandatory` in the after-image of the request.
The empty string is an empty value. Service-specific rules may consider other values, also
of non-string type, empty.
Values in draft entities are never considered empty.
Mandatory properties SHOULD be decorated in the UI with an asterisk.
Null or empty values can also be disallowed by restricting the property value range with the standard type facet `Nullable` or terms from the [Validation vocabulary](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Validation.V1.md).</String>
          </Annotation>
        </Member>
        <Member Name="Optional" Value="3">
          <Annotation Term="Core.Description" String="Property may have a value" />
          <Annotation Term="Core.LongDescription" String="This value does not make sense as a static annotation value." />
        </Member>
        <Member Name="ReadOnly" Value="1">
          <Annotation Term="Core.Description" String="Property value cannot be changed" />
          <Annotation Term="Core.LongDescription">
            <String>A request to change the property to a value that differs from the before-image fails entirely
            according to [OData-Protocol, section 11.4.3](https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_UpdateanEntity)
            if this annotation is given dynamically as `ReadOnly` in the before-image of the request.

            To statically mark a property as read-only use term [Core.Computed](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#Computed) instead.</String>
          </Annotation>
        </Member>
        <Member Name="Inapplicable" Value="0">
          <Annotation Term="Core.Description" String="Property has no meaning in the current entity state" />
          <Annotation Term="Core.LongDescription">
            <String>A request that sets the property to a non-initial non-null value fails entirely if this annotation is `Inapplicable` in the after-image of the request.

            This value does not make sense as a static annotation value.

Example for dynamic use: in a travel expense report the property `DestinationCountry` is inapplicable if trip type is domestic, and mandatory if trip type is international.</String>
          </Annotation>
        </Member>
        <Member Name="Hidden" Value="0">
          <Annotation Term="Core.Description" String="Deprecated synonym for Inapplicable, do not use" />
          <Annotation Term="Core.LongDescription" String="To statically hide a property on a UI use [UI.Hidden](UI.md#Hidden) instead" />
        </Member>
      </EnumType>

      <Term Name="ExceptionCategory" Type="Edm.String" Nullable="false">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="A machine-readable exception category" />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </Term>
      <Term Name="Application" Type="Common.ApplicationType" Nullable="false">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="..." />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </Term>
      <ComplexType Name="ApplicationType">
        <Annotation Term="Common.Experimental" />
        <Property Name="Component" Type="Edm.String">
          <Annotation Term="Core.Description" String="Software component of service implementation" />
        </Property>
        <Property Name="ServiceRepository" Type="Edm.String">
          <Annotation Term="Core.Description" String="..." />
        </Property>
        <Property Name="ServiceId" Type="Edm.String">
          <Annotation Term="Core.Description" String="..." />
        </Property>
        <Property Name="ServiceVersion" Type="Edm.String">
          <Annotation Term="Core.Description" String="..." />
        </Property>
      </ComplexType>
      <Term Name="Timestamp" Type="Edm.DateTimeOffset" Nullable="false">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="..." />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </Term>
      <Term Name="TransactionId" Type="Edm.String" Nullable="false">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="..." />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </Term>
      <Term Name="ErrorResolution" Type="Common.ErrorResolutionType" Nullable="false">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="Hints for resolving this error" />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </Term>
      <ComplexType Name="ErrorResolutionType">
        <Annotation Term="Common.Experimental" />
        <Property Name="Analysis" Type="Edm.String">
          <Annotation Term="Core.Description" String="Short hint on how to analyze this error" />
        </Property>
        <Property Name="Note" Type="Edm.String">
          <Annotation Term="Core.Description" String="Note for error resolution" />
        </Property>
        <Property Name="AdditionalNote" Type="Edm.String">
          <Annotation Term="Core.Description" String="Additional note for error resolution" />
        </Property>
      </ComplexType>

      <Term Name="Messages" Type="Collection(Edm.ComplexType)" Nullable="false">
        <Annotation Term="Core.Description" String="Collection of end-user messages" />
        <Annotation Term="Core.LongDescription">
          <String>The name of the message type is service-specific, its structure components are identified by naming convention, following the names of the OData error response structure.

The minimum structure is
- `code: Edm.String`
- `message: Edm.String`
- `target: Edm.String nullable`
- `additionalTargets: Collection(Edm.String)`
- `transition: Edm.Boolean`
- `numericSeverity: Edm.Byte`
- `longtextUrl: Edm.String nullable`

When the value of this annotation dynamically references a property, the service MAY omit that property
from the default set of properties and clients SHOULD include it in `$select` when needed.
          </String>
        </Annotation>
      </Term>
      <Term Name="additionalTargets" Type="Collection(Edm.String)" Nullable="false" AppliesTo="Record">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Common.IsInstanceAnnotation" />
        <Annotation Term="Core.Description" String="Additional targets for the message" />
        <Annotation Term="Core.LongDescription" String="This instance annotation can be applied to the `error` object and the objects within the `details` array of an OData error response" />
      </Term>
      <Term Name="longtextUrl" Type="Edm.String" Nullable="false" AppliesTo="Record">
        <Annotation Term="Core.IsURL" />
        <Annotation Term="Common.IsInstanceAnnotation" />
        <Annotation Term="Core.Description" String="Location of the message long text" />
        <Annotation Term="Core.LongDescription" String="This instance annotation can be applied to the `error` object and the objects within the `details` array of an OData error response" />
      </Term>
      <Term Name="numericSeverity" Type="Common.NumericMessageSeverityType" Nullable="false">
        <Annotation Term="Common.IsInstanceAnnotation" />
        <Annotation Term="Core.Description" String="Classifies an end-user message as info, success, warning, or error" />
        <Annotation Term="Core.LongDescription" String="This instance annotation can be applied to the `error` object and the objects within the `details` array of an OData error response" />
      </Term>
      <Term Name="MaximumNumericMessageSeverity" Type="Common.NumericMessageSeverityType" BaseTerm="Common.Messages" Nullable="true" AppliesTo="EntityType">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="The maximum severity of all end-user messages attached to an entity, null if no messages are attached" />
        <Annotation Term="Core.LongDescription" String="This metadata annotation can be applied to entity types that are also annotated with term [`Common.Messages`](#Messages)" />
      </Term>
      <TypeDefinition Name="NumericMessageSeverityType" UnderlyingType="Edm.Byte">
        <Annotation Term="Core.Description" String="Classifies an end-user message as info, success, warning, or error" />
        <Annotation Term="Validation.AllowedValues">
          <Collection>
            <Record>
              <PropertyValue Property="Value" Int="1" />
              <Annotation Term="Core.Description" String="Success - no action required" />
            </Record>
            <Record>
              <PropertyValue Property="Value" Int="2" />
              <Annotation Term="Core.Description" String="Information - no action required" />
            </Record>
            <Record>
              <PropertyValue Property="Value" Int="3" />
              <Annotation Term="Core.Description" String="Warning - action may be required" />
            </Record>
            <Record>
              <PropertyValue Property="Value" Int="4" />
              <Annotation Term="Core.Description" String="Error - action is required" />
            </Record>
          </Collection>
        </Annotation>
      </TypeDefinition>

      <Term Name="IsActionCritical" Type="Edm.Boolean" Nullable="false" DefaultValue="true" AppliesTo="Action Function ActionImport FunctionImport">
        <Annotation Term="Core.Description" String="Criticality of the function or action to enforce a warning or similar before it's executed" />
      </Term>

      <Term Name="Attributes" Type="Collection(Edm.PropertyPath)" Nullable="false" AppliesTo="Property">
        <Annotation Term="Core.Description" String="Attributes related to this property, which may occur in denormalized entity types" />
      </Term>

      <Term Name="RelatedRecursiveHierarchy" Type="Edm.AnnotationPath" Nullable="false" AppliesTo="Property">
        <Annotation Term="Core.Description" String="A recursive hierarchy related to this property. The annotation path must end in Aggregation.RecursiveHierarchy." />
      </Term>

      <Term Name="Interval" Type="Common.IntervalType" Nullable="false" AppliesTo="EntityType ComplexType">
        <Annotation Term="Core.Description" String="An interval with lower and upper boundaries described by two properties" />
      </Term>
      <ComplexType Name="IntervalType">
        <Property Name="Label" Type="Edm.String" Nullable="true">
          <Annotation Term="Core.Description" String="A short, human-readable text suitable for labels and captions in UIs" />
          <Annotation Term="Core.IsLanguageDependent" />
        </Property>
        <Property Name="LowerBoundary" Type="Edm.PropertyPath" Nullable="false">
          <Annotation Term="Core.Description" String="Property holding the lower interval boundary" />
        </Property>
        <Property Name="LowerBoundaryIncluded" Type="Edm.Boolean" Nullable="false" DefaultValue="true">
          <Annotation Term="Core.Description" String="The lower boundary value is included in the interval" />
        </Property>
        <Property Name="UpperBoundary" Type="Edm.PropertyPath" Nullable="false">
          <Annotation Term="Core.Description" String="Property holding the upper interval boundary" />
        </Property>
        <Property Name="UpperBoundaryIncluded" Type="Edm.Boolean" Nullable="false" DefaultValue="true">
          <Annotation Term="Core.Description" String="The upper boundary value is included in the interval" />
        </Property>
      </ComplexType>

      <Term Name="ResultContext" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="EntityType">
        <Annotation Term="Core.Description">
          <String>The annotated entity type has one or more containment navigation properties.
            An instance of the annotated entity type provides the context required for determining
            the target entity sets reached by these containment navigation properties.</String>
        </Annotation>
      </Term>

      <Term Name="SAPObjectNodeType" Type="Common.SAPObjectNodeTypeType" Nullable="false" AppliesTo="EntityType">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="The SAP Object Node Type represented by the annotated entity type" />
        <Annotation Term="Core.LongDescription">
          <String>SAP Object Node Types define the structure of SAP Object Types, which are a generalization of Business Object, Technical Object, Configuration Object, and Analytical Object.</String>
        </Annotation>
      </Term>

      <ComplexType Name="SAPObjectNodeTypeType">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="Information about an SAP Object Node Type" />
        <Property Name="Name" Type="Edm.String" Nullable="false">
          <Annotation Term="Core.Description" String="The name of the SAP Object Node Type" />
        </Property>
      </ComplexType>

      <Term Name="Composition" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="NavigationProperty">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="The annotated navigation property represents a logical composition, even though it is non-containment" />
        <Annotation Term="Core.LongDescription">
          <String>The entities related via this navigation property have an existential dependency on their composition parent. The entity set of the composition parent MUST contain a NavigationPropertyBinding for this navigation property.</String>
        </Annotation>
      </Term>


      <Term Name="SAPObjectNodeTypeReference" Type="Edm.String" Nullable="false" AppliesTo="Property">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="The entity referenced by the annotated property has the [`SAPObjectNodeType`](#SAPObjectNodeType) with this name" />
        <Annotation Term="Core.LongDescription">
          <String>The entity containing the property and the entity referenced by it will in general have different SAP Object Node Types.</String>
        </Annotation>
      </Term>

      <Term Name="IsNaturalPerson" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="EntityType Annotation">
        <Annotation Term="Core.Description" String="The annotated entity type (e.g. `Employee`) or annotation (e.g. `IsImageUrl`) represents a natural person" />
      </Term>


      <!-- Section: Value Help -->
      <Term Name="ValueList" Type="Common.ValueListType" Nullable="false" AppliesTo="Property Parameter">
        <Annotation Term="Core.Description" String="Specifies how to get a list of acceptable values for a property or parameter" />
        <Annotation Term="Core.LongDescription" String="The value list can be based on user input that is passed in the value list request. The value list can be used for type-ahead and classical pick lists." />
      </Term>
      <ComplexType Name="ValueListType">
        <!--
          Example: Value list for currency code using entity set Currencies with properties Code, Text, Symbol and more
          that are not needed in the value list
          - CollectionPath: Currencies
          - SearchSupported: true
          - Parameters:
          - - InOut: LocalDataProperty = CurrencyCode, ValueListPropert = Code

          Example: Region within Country using entity set Regions with properties Code, Name, CountryCode
          - CollectionPath: Regions
          - SearchSupported: false
          - Parameters:
          - - InOut: LocalDataProperty = CountryCode, ValueListProperty = CountryCode
          - - InOut: LocalDataProperty = RegionCode, ValueListProperty = Code
        -->
        <Annotation Term="Validation.ApplicableTerms">
          <Collection>
            <String>Common.QuickInfo</String>
          </Collection>
        </Annotation>
        <Property Name="Label" Type="Edm.String" Nullable="true">
          <Annotation Term="Core.IsLanguageDependent" />
          <Annotation Term="Core.Description" String="Headline for value list, fallback is the label of the property or parameter" />
        </Property>
        <Property Name="CollectionPath" Type="Edm.String" Nullable="true">
          <Annotation Term="Core.Description" String="Resource path of an OData collection with possible values, relative to CollectionRoot" />
        </Property>
        <Property Name="RelativeCollectionPath" Type="Edm.NavigationPropertyPath" Nullable="true">
          <Annotation Term="Core.Description" String="Navigation property path of an OData collection with possible values, relative to the annotation target" />
        </Property>
        <Property Name="CollectionRoot" Type="Edm.String" Nullable="true">
          <Annotation Term="Core.Description" String="Service root of the value list collection; not specified means local to the document containing the annotation" />
          <Annotation Term="Core.LongDescription">
            <String>`CollectionRoot` must not be specified unless `CollectionPath` is provided.</String>
          </Annotation>
        </Property>
        <Property Name="DistinctValuesSupported" Type="Edm.Boolean" Nullable="false" DefaultValue="false">
          <Annotation Term="Core.Description" String="Indicates that the value list supports a 'distinct' aggregation on the value list properties defined via ValueListParameterInOut and ValueListParameterOut" />
        </Property>
        <Property Name="SearchSupported" Type="Edm.Boolean" Nullable="false" DefaultValue="true">
          <Annotation Term="Core.Description" String="Value list supports the $search query option" />
          <Annotation Term="Core.LongDescription" String="The value of the target property is used as the search expression instead of in $filter" />
        </Property>
        <Property Name="FetchValues" Type="Common.FetchValuesType" Nullable="true">
          <Annotation Term="Core.Description" String="Hint on when to fetch values" />
        </Property>
        <Property Name="PresentationVariantQualifier" Type="Core.SimpleIdentifier">
          <Annotation Term="Core.Description" String="Alternative representation of a value help, e.g. as a bar chart" />
          <Annotation Term="Core.LongDescription" String="Qualifier for annotation with term [UI.PresentationVariant](UI.md#PresentationVariant) on the entity set identified via CollectionPath" />
        </Property>
        <Property Name="SelectionVariantQualifier" Type="Core.SimpleIdentifier">
          <Annotation Term="Core.Description" String="Optional combination of parameters and filters to query the value help entity set" />
          <Annotation Term="Core.LongDescription" String="Qualifier for annotation with term [UI.SelectionVariant](UI.md#SelectionVariant) on the entity set identified via CollectionPath" />
        </Property>
        <Property Name="Parameters" Type="Collection(Common.ValueListParameter)" Nullable="false">
          <Annotation Term="Core.Description" String="Instructions on how to construct the value list request and consume response properties" />
        </Property>
        <Annotation Term="Core.Description" String="Exactly one of `CollectionPath` and `RelativeCollectionPath` must be provided." />
      </ComplexType>

      <TypeDefinition Name="FetchValuesType" UnderlyingType="Edm.Byte">
        <Annotation Term="Core.Description" String="Hint on when to fetch values" />
        <Annotation Term="Validation.AllowedValues">
          <Collection>
            <Record>
              <PropertyValue Property="Value" Int="1" />
              <Annotation Term="Core.Description" String="Fetch values immediately without filter" />
            </Record>
            <Record>
              <PropertyValue Property="Value" Int="2" />
              <Annotation Term="Core.Description" String="Fetch values with a filter" />
            </Record>
          </Collection>
        </Annotation>
      </TypeDefinition>

      <Term Name="ValueListRelevantQualifiers" Type="Collection(Core.SimpleIdentifier)" Nullable="false">
        <Annotation Term="Core.Description" String="List of qualifiers of relevant ValueList annotations" />
        <Annotation Term="Core.LongDescription" String="The value of this annotation is a dynamic expression for calculating the qualifiers of relevant value lists depending on the values of one or more other properties." />
      </Term>

      <Term Name="ValueListWithFixedValues" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property Parameter">
        <Annotation Term="Core.Description" String="If specified as true, there is only one value list mapping after evaluating [`ValueListRelevantQualifiers`](#ValueListRelevantQualifiers) and its value list consists of a small number of fixed values" />
        <Annotation Term="Validation.ApplicableTerms">
          <Collection>
            <String>Common.ValueListShowValuesImmediately</String>
          </Collection>
        </Annotation>
      </Term>

      <Term Name="ValueListShowValuesImmediately" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Annotation">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="A value list with a very small number of fixed values, can decide to show all values immediately" />
      </Term>

      <Term Name="ValueListForValidation" Type="Edm.String" Nullable="false" AppliesTo="Property Parameter">
        <Annotation Term="Core.Description" String="Contains the qualifier of the ValueList or ValueListMapping that should be used for validation" />
        <Annotation Term="Core.LongDescription" String="An empty string identifies the ValueList or ValueListMapping without a qualifier." />
      </Term>

      <Term Name="ValueListReferences" Type="Collection(Edm.String)" Nullable="false" AppliesTo="Property Parameter">
        <Annotation Term="Core.IsURL" />
        <Annotation Term="Core.Description" String="A list of URLs of CSDL documents containing value list mappings for this parameter or property" />
      </Term>

      <Term Name="ValueListMapping" Type="Common.ValueListMappingType" Nullable="false" AppliesTo="Property Parameter">
        <Annotation Term="Core.Description" String="Specifies the mapping between data service properties and value list properties" />
        <Annotation Term="Core.LongDescription" String="The value list can be filtered based on user input. It can be used for type-ahead and classical pick lists. There may be many alternative mappings with different qualifiers." />
      </Term>
      <ComplexType Name="ValueListMappingType">
        <Annotation Term="Validation.ApplicableTerms">
          <Collection>
            <String>Common.QuickInfo</String>
          </Collection>
        </Annotation>
        <Property Name="Label" Type="Edm.String" Nullable="true">
          <Annotation Term="Core.IsLanguageDependent" />
          <Annotation Term="Core.Description" String="Headline for value list, fallback is the label of the property or parameter" />
        </Property>
        <Property Name="CollectionPath" Type="Edm.String" Nullable="false">
          <Annotation Term="Core.Description" String="Resource path of an OData collection with possible values, relative to the document containing the value list mapping" />
        </Property>
        <Property Name="DistinctValuesSupported" Type="Edm.Boolean" Nullable="false" DefaultValue="false">
          <Annotation Term="Core.Description" String="Indicates that the value list supports a 'distinct' aggregation on the value list properties defined via ValueListParameterInOut and ValueListParameterOut" />
        </Property>
        <Property Name="FetchValues" Type="Common.FetchValuesType" Nullable="true">
          <Annotation Term="Core.Description" String="Hint on when to fetch values" />
        </Property>
        <Property Name="PresentationVariantQualifier" Type="Core.SimpleIdentifier">
          <Annotation Term="Core.Description" String="Alternative representation of a value help, e.g. as a bar chart" />
          <Annotation Term="Core.LongDescription" String="Qualifier for annotation with term [UI.PresentationVariant](UI.md#PresentationVariant) on the value list entity set identified via CollectionPath in the ValueListReference annotation" />
        </Property>
        <Property Name="SelectionVariantQualifier" Type="Core.SimpleIdentifier">
          <Annotation Term="Core.Description" String="Optional combination of parameters and filters to query the value help entity set" />
          <Annotation Term="Core.LongDescription" String="Qualifier for annotation with term [UI.SelectionVariant](UI.md#SelectionVariant) on the entity set identified via CollectionPath" />
        </Property>
        <Property Name="Parameters" Type="Collection(Common.ValueListParameter)" Nullable="false">
          <Annotation Term="Core.Description" String="Instructions on how to construct the value list request and consume response properties" />
        </Property>
      </ComplexType>

      <ComplexType Name="ValueListParameter" Abstract="true">
        <Property Name="ValueListProperty" Type="Edm.String" Nullable="false">
          <Annotation Term="Core.Description" String="Path to property in the value list . Format is identical to PropertyPath annotations." />
        </Property>
      </ComplexType>
      <ComplexType Name="ValueListParameterIn" BaseType="Common.ValueListParameter">
        <Property Name="LocalDataProperty" Type="Edm.PropertyPath" Nullable="false">
          <Annotation Term="Core.Description" String="Path to property that is used to filter the value list with `eq` comparison" />
          <Annotation Term="Core.LongDescription" String="In case the property path contains a collection-based navigation or structural property, the filter is a set of `eq` comparisons connected by `or` operators" />
        </Property>
        <Property Name="InitialValueIsSignificant" Type="Edm.Boolean" DefaultValue="false" Nullable="false">
          <Annotation Term="Core.Description" String="Initial value, e.g. empty string, is a valid and significant value" />
        </Property>
      </ComplexType>
      <ComplexType Name="ValueListParameterConstant" BaseType="Common.ValueListParameter">
        <Property Name="Constant" Type="Edm.PrimitiveType" Nullable="false">
          <Annotation Term="Core.Description" String="Constant value that is used to filter the value list with `eq` comparison, using the same representation as property default values, see [CSDL XML, 7.2.7 Default Value](https://docs.oasis-open.org/odata/odata-csdl-xml/v4.01/odata-csdl-xml-v4.01.html#sec_DefaultValue)" />
        </Property>
        <Property Name="InitialValueIsSignificant" Type="Edm.Boolean" DefaultValue="false" Nullable="false">
          <Annotation Term="Common.Experimental" />
          <Annotation Term="Core.Description" String="Initial value, e.g. empty string, is a valid and significant value" />
        </Property>
      </ComplexType>
      <ComplexType Name="ValueListParameterConstants" BaseType="Common.ValueListParameter">
        <Annotation Term="Common.Experimental" />
        <Property Name="Constants" Type="Collection(Edm.PrimitiveType)">
          <Annotation Term="Core.Description" String="List of constant values that are used to filter the value list with `eq` comparisons connected by `or` operators, using the same representation as property default values, see [CSDL XML, 7.2.7 Default Value](https://docs.oasis-open.org/odata/odata-csdl-xml/v4.01/odata-csdl-xml-v4.01.html#sec_DefaultValue). Initial values are significant." />
          <Annotation Term="Core.LongDescription">
            <String>An empty list means a vacuous filter condition</String>
          </Annotation>
        </Property>
      </ComplexType>
      <ComplexType Name="ValueListParameterInOut" BaseType="Common.ValueListParameter">
        <Property Name="LocalDataProperty" Type="Edm.PropertyPath" Nullable="false">
          <Annotation Term="Core.Description" String="Path to property that is used to filter the value list with `startswith` comparison and filled from the picked value list item" />
        </Property>
        <Property Name="InitialValueIsSignificant" Type="Edm.Boolean" DefaultValue="false" Nullable="false">
          <Annotation Term="Core.Description" String="Initial value, e.g. empty string, is a valid and significant value" />
        </Property>
        <Annotation Term="Validation.ApplicableTerms">
          <Collection>
            <String>UI.Importance</String>
          </Collection>
        </Annotation>
      </ComplexType>
      <ComplexType Name="ValueListParameterOut" BaseType="Common.ValueListParameter">
        <Property Name="LocalDataProperty" Type="Edm.PropertyPath" Nullable="false">
          <Annotation Term="Core.Description" String="Path to property that is filled from response" />
        </Property>
        <Annotation Term="Validation.ApplicableTerms">
          <Collection>
            <String>UI.Importance</String>
          </Collection>
        </Annotation>
      </ComplexType>
      <ComplexType Name="ValueListParameterDisplayOnly" BaseType="Common.ValueListParameter">
        <Annotation Term="Core.Description" String="Value list property that is not used to fill the edited entity" />
        <Annotation Term="Validation.ApplicableTerms">
          <Collection>
            <String>UI.Importance</String>
          </Collection>
        </Annotation>
      </ComplexType>
      <ComplexType Name="ValueListParameterFilterOnly" BaseType="Common.ValueListParameter">
        <Annotation Term="Core.Description" String="Value list property that is used to filter the value list, not connected to the edited entity" />
        <Annotation Term="Core.Revisions">
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="All filterable properties of the value list can be used to filter" />
            </Record>
          </Collection>
        </Annotation>
      </ComplexType>

      <!-- Section: Calendar Points in Time -->
      <Term Name="IsCalendarYear" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a year number as string following the logical pattern (-?)YYYY(Y*) consisting of an optional
            minus sign for years B.C. followed by at least four digits. The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsCalendarHalfyear" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a halfyear number as string following the logical pattern H consisting of a single digit.
            The string matches the regex pattern [1-2]
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsCalendarQuarter" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a calendar quarter number as string following the logical pattern Q consisting of a single digit.
            The string matches the regex pattern [1-4]
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsCalendarMonth" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a calendar month number as string following the logical pattern MM consisting of two digits.
            The string matches the regex pattern 0[1-9]|1[0-2]
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsCalendarWeek" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a calendar week number as string following the logical pattern WW consisting of two digits.
            The string matches the regex pattern 0[1-9]|[1-4][0-9]|5[0-3]
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsDayOfCalendarMonth" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Day number relative to a calendar month. Valid values are between 1 and 31.
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.SByte" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsDayOfCalendarYear" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Day number relative to a calendar year. Valid values are between 1 and 366.
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.Int16" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsCalendarYearHalfyear" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a calendar year and halfyear as string following the logical pattern (-?)YYYY(Y*)H consisting
            of an optional minus sign for years B.C. followed by at least five digits, where the last digit represents the halfyear.
            The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})[1-2]
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsCalendarYearQuarter" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a calendar year and quarter as string following the logical pattern (-?)YYYY(Y*)Q consisting
            of an optional minus sign for years B.C. followed by at least five digits, where the last digit represents the quarter.
            The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})[1-4]
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsCalendarYearMonth" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a calendar year and month as string following the logical pattern (-?)YYYY(Y*)MM consisting
            of an optional minus sign for years B.C. followed by at least six digits, where the last two digits represent the months January to
            December.
            The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})(0[1-9]|1[0-2])
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsCalendarYearWeek" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a calendar year and week as string following the logical pattern (-?)YYYY(Y*)WW consisting
          of an optional minus sign for years B.C. followed by at least six digits, where the last two digits represent week number in the year.
          The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})(0[1-9]|[1-4][0-9]|5[0-3])
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsCalendarDate" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a calendar date: year, month and day as string following the logical pattern (-?)YYYY(Y*)MMDD consisting
          of an optional minus sign for years B.C. followed by at least eight digits, where the last four digits represent
          the months January to December (MM) and the day of the month (DD).
          The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])
          The regex pattern does not reflect the additional constraint for "Day-of-month Values":
          The day value must be no more than 30 if month is one of 04, 06, 09, or 11, no more than 28 if month is 02 and year is not divisible by 4,
          or is divisible by 100 but not by 400, and no more than 29 if month is 02 and year is divisible by 400, or by 4 but not by 100.
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>


      <!-- Section: Fiscal Points in Time -->
      <Term Name="IsFiscalYear" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a fiscal year number as string following the logical pattern YYYY consisting of four digits.
          The string matches the regex pattern [1-9][0-9]{3}
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsFiscalPeriod" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a fiscal period as string following the logical pattern PPP consisting of three digits.
          The string matches the regex pattern [0-9]{3}
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsFiscalYearPeriod" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a fiscal year and period as string following the logical pattern YYYYPPP consisting
          of seven digits, where the last three digits represent the fiscal period in the year.
          The string matches the regex pattern ([1-9][0-9]{3})([0-9]{3})
          </String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsFiscalQuarter" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a fiscal quarter number as string following the logical pattern Q consisting of a single digit.
          The string matches the regex pattern [1-4]</String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsFiscalYearQuarter" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a fiscal year and quarter as string following the logical pattern YYYYQ consisting of
          five digits, where the last digit represents the quarter.
          The string matches the regex pattern [1-9][0-9]{3}[1-4]</String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsFiscalWeek" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a fiscal week number as string following the logical pattern WW consisting of two digits.
          The string matches the regex pattern 0[1-9]|[1-4][0-9]|5[0-3]</String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsFiscalYearWeek" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Property encodes a fiscal year and week as string following the logical pattern YYYYWW consisting of
          six digits, where the last two digits represent the week number in the year.
          The string matches the regex pattern [1-9][0-9]{3}(0[1-9]|[1-4][0-9]|5[0-3])</String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsDayOfFiscalYear" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description">
          <String>Day number relative to a fiscal year. Valid values are between 1 and 371.</String>
        </Annotation>
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>
      <Term Name="IsFiscalYearVariant" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Property">
        <Annotation Term="Core.Description" String="Property encodes a fiscal year variant" />
        <Annotation Term="Core.RequiresType" String="Edm.String" />
        <Annotation Term="Common.MutuallyExclusiveTerm" Qualifier="DatePart" />
      </Term>


      <!-- Section: Term Constraints -->
      <Term Name="MutuallyExclusiveTerm" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Term">
        <Annotation Term="Core.Description" String="Only one term of the group identified with the Qualifier attribute can be applied" />
      </Term>

      <Term Name="OperationTemplate" Type="Common.QualifiedName" Nullable="false" AppliesTo="Term Property">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="Qualified name of an operation that serves as template for the operation described by the annotated term or term property" />
        <Annotation Term="Core.LongDescription">
          <String>Operations named in this annotation cannot themselves be invoked.</String>
        </Annotation>
      </Term>

      <!-- Section: Draft Handling -->
      <Term Name="DraftRoot" Type="Common.DraftRootType" Nullable="false" AppliesTo="EntitySet">
        <Annotation Term="Core.Description">
          <String>Root entities of business documents that support the draft pattern</String>
        </Annotation>
      </Term>
      <ComplexType Name="DraftRootType" BaseType="Common.DraftNodeType">
        <Property Name="PreparationAction" Type="Common.QualifiedName">
          <Annotation Term="Core.Description" String="Action that prepares a draft document for later activation" />
          <Annotation Term="Core.LongDescription">
            <String>The action is bound to the draft document root and has no parameters.</String>
          </Annotation>
        </Property>
        <Property Name="ActivationAction" Type="Common.QualifiedName" Nullable="false">
          <Annotation Term="Core.Description" String="Action that activates a draft document" />
          <Annotation Term="Core.LongDescription">
            <String>The action is bound to the draft document root and has no parameters.</String>
          </Annotation>
        </Property>
        <Property Name="DiscardAction" Type="Common.QualifiedName" Nullable="true">
          <Annotation Term="Core.Description" String="Action that discards a draft document" />
          <Annotation Term="Core.LongDescription">
            <String>The action is bound to the draft document root and has no parameters.</String>
          </Annotation>
        </Property>
        <Property Name="EditAction" Type="Common.QualifiedName" Nullable="true">
          <Annotation Term="Common.OperationTemplate" String="Common.Template_EditAction" />
          <Annotation Term="Core.Description" String="Action that creates an edit draft" />
          <Annotation Term="Core.LongDescription">
            <String>The action is bound to the active document root node and has the signature of [`Template_EditAction`](#Template_EditAction).</String>
          </Annotation>
        </Property>
        <Property Name="ResumeAction" Type="Common.QualifiedName" Nullable="true">
          <Annotation Term="Common.Experimental" />
          <Annotation Term="Core.Description" String="Action that resumes a draft document. The action re-acquires the exclusive lock if needed and checks if the related active document was not changed concurrently" />
          <Annotation Term="Core.LongDescription">
            <String>The action is bound to the draft document root and has no parameters.</String>
          </Annotation>
        </Property>
        <Property Name="NewAction" Type="Common.QualifiedName" Nullable="true">
          <Annotation Term="Common.OperationTemplate" String="Common.Template_NewAction" />
          <Annotation Term="Core.Description" String="Action that creates a new draft" />
          <Annotation Term="Core.LongDescription">
            <String>The action is bound to the draft document root entity set and has the signature of [`Template_NewAction`](#Template_NewAction).
In a [recursive hierarchy](Hierarchy.md#RecursiveHierarchy), the payload may contain a
`«Superordinate»@odata.bind` element to specify the parent of the new entity.
(The UI5 OData model supplies such an element when its action invocation method receives a
`@$ui5.node.parent` parameter.)

New drafts may also be created by POSTing an entity with property `IsActiveEntity` = `false` (default) to the entity set.</String>
          </Annotation>
        </Property>
        <Property Name="AdditionalNewActions" Type="Collection(Common.QualifiedName)" Nullable="false">
          <Annotation Term="Common.OperationTemplate" String="Common.Template_NewAction" />
          <Annotation Term="Core.Description" String="Additional actions beside the default POST or standard `NewAction`that create a new draft" />
          <Annotation Term="Core.LongDescription">
            <String>The actions are bound to the draft document root entity set and have the signature of [`Template_NewAction`](#Template_NewAction).</String>
          </Annotation>
        </Property>
        <Property Name="ShareAction" Type="Common.QualifiedName" Nullable="true">
          <Annotation Term="Common.OperationTemplate" String="Common.Template_ShareAction" />
          <Annotation Term="Core.Description" String="Action that shares a draft document with other users and restricts access to the listed users in their specified roles" />
          <Annotation Term="Core.LongDescription">
            <String>The action is bound to the draft document root node and has the signature of [`Template_ShareAction`](#Template_ShareAction).
It restricts access to the listed users in their specified roles.

If this action is present, the client can receive notifications about changes to the
collaborative draft by opening a web socket connection at the [`WebSocketBaseURL`](#WebSocketBaseURL)
followed by URL parameters
- `relatedService` = base URL (relative to server root) of the OData service of the app
- `draft` = draft UUID.</String>
          </Annotation>
        </Property>
      </ComplexType>
      <!--
      <Action Name="Template_NewAction" IsBound="true" EntitySetPath="DraftDocumentRootEntitySet">
        <Annotation Term="Core.Constructor" />
        <Parameter Name="DraftDocumentRootEntitySet" Type="Collection(Edm.EntityType)" Nullable="false" />
        <Parameter Name="ResultIsActiveEntity" Type="Edm.Boolean" Nullable="false">
          <Annotation Term="Core.Description" String="`true` means that an active entity is created" />
          <Annotation Term="Core.OptionalParameter">
            <Record>
              <PropertyValue Property="DefaultValue" String="false" />
            </Record>
          </Annotation>
        </Parameter>
        <ReturnType Type="Edm.EntityType" Nullable="false" />
      </Action>
      <Action Name="Template_EditAction" IsBound="true">
        <Parameter Name="ActiveDocumentRootNode" Type="Edm.EntityType" Nullable="false" />
        <Parameter Name="PreserveChanges" Type="Edm.Boolean" Nullable="false">
          <Annotation Term="Core.Description" String="`true` means that an outdated draft of another user is not overwritten" />
          <Annotation Term="Core.OptionalParameter">
            <Record>
              <PropertyValue Property="DefaultValue" String="false" />
            </Record>
          </Annotation>
        </Parameter>
      </Action>
      <Action Name="Template_ShareAction" IsBound="true">
        <Annotation Term="Core.Description" String="For details, see [this document](../docs/share-action.md)" />
        <Parameter Name="DraftDocumentRootNode" Type="Edm.EntityType" Nullable="false" />
        <Parameter Name="ShareAll" Type="Edm.Boolean" Nullable="false">
          <Annotation Term="Core.Description" String="`true` means sharing with all users that are authorized for the bound draft instance" />
          <Annotation Term="Core.LongDescription">
            <String>The `Users` parameter can be specified in this case to actively notify the listed users.</String>
          </Annotation>
          <Annotation Term="Core.OptionalParameter">
            <Record/>
          </Annotation>
        </Parameter>
        <Parameter Name="IsDeltaUpdate" Type="Edm.Boolean" Nullable="false">
          <Annotation Term="Core.Description" String="`true` means sharing _additionally_ with the `Users`" />
          <Annotation Term="Core.OptionalParameter">
            <Record>
              <PropertyValue Property="DefaultValue" String="false" />
            </Record>
          </Annotation>
        </Parameter>
        <Parameter Name="Users" Type="Collection(Common.DraftUserAccessType)" Nullable="false">
          <Annotation Term="Core.Description" String="Collection of users" />
          <Annotation Term="Core.OptionalParameter">
            <Record/>
          </Annotation>
        </Parameter>
      </Action>
      <ComplexType Name="DraftUserAccessType">
        <Property Name="UserID" Type="Edm.String" Nullable="false" MaxLength="12" />
        <Property Name="UserAccessRole" Type="Edm.String" Nullable="false" MaxLength="1">
          <Annotation Term="Core.Description" String="Role of the user" />
          <Annotation Term="Validation.AllowedValues">
            <Collection>
              <Record>
                <PropertyValue Property="Value" String="O" />
                <Annotation Term="Core.Description" String="Owner, can perform all draft actions" />
              </Record>
              <Record>
                <PropertyValue Property="Value" String="E" />
                <Annotation Term="Core.Description" String="Editor, can change the draft" />
              </Record>
            </Collection>
          </Annotation>
        </Property>
      </ComplexType>
      -->

      <Term Name="DraftNode" Type="Common.DraftNodeType" Nullable="false" AppliesTo="EntitySet">
        <Annotation Term="Core.Revisions">
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="Draft nodes are marked with [`DraftActivationVia`](#DraftActivationVia)" />
            </Record>
          </Collection>
        </Annotation>
        <Annotation Term="Core.Description">
          <String>Entities in this set are parts of business documents that support the draft pattern</String>
        </Annotation>
      </Term>

      <ComplexType Name="DraftNodeType">
        <Annotation Term="Core.Revisions">
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="The deprecated term [`DraftNode`](#DraftNode) effectively only tags the entity set, its value is an empty record" />
            </Record>
          </Collection>
        </Annotation>
        <Property Name="PreparationAction" Type="Common.QualifiedName">
          <Annotation Term="Core.Revisions">
            <Collection>
              <Record>
                <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
                <PropertyValue Property="Description" String="Preparation is always called on the draft root node" />
              </Record>
            </Collection>
          </Annotation>
          <Annotation Term="Core.Description" String="Action that prepares a draft document for later activation" />
        </Property>
        <Property Name="ValidationFunction" Type="Common.QualifiedName">
          <Annotation Term="Core.Revisions">
            <Collection>
              <Record>
                <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
                <PropertyValue Property="Description" String="Separate validation without side-effects is not useful" />
              </Record>
            </Collection>
          </Annotation>
          <Annotation Term="Core.Description" String="Function that validates whether a draft document is ready for activation" />
        </Property>
      </ComplexType>

      <Term Name="DraftActivationVia" Type="Core.SimpleIdentifier" Nullable="false" AppliesTo="EntitySet">
        <Annotation Term="Core.Description" String="Draft entities in this set are indirectly activated via draft entities in the referenced entity set" />
      </Term>

      <Term Name="EditableFieldFor" Type="Edm.PropertyPath" Nullable="false" AppliesTo="Property">
        <Annotation Term="Core.Description" String="The annotated property is an editable field for the referenced key property" />
      </Term>

      <TypeDefinition Name="SimpleIdentifier" UnderlyingType="Edm.String">
        <Annotation Term="Core.Description" String="The SimpleIdentifier of an OData construct in scope" />
        <Annotation Term="Core.Revisions">
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="Use type [Core.SimpleIdentifier](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#SimpleIdentifier) instead" />
            </Record>
          </Collection>
        </Annotation>
      </TypeDefinition>

      <TypeDefinition Name="QualifiedName" UnderlyingType="Edm.String">
        <Annotation Term="Core.Description" String="The namespace-qualified name of an OData construct in scope" />
        <Annotation Term="Core.LongDescription" String="Alias-qualified names are not fully supported, and the use of namespace-qualified names is strongly recommended." />
      </TypeDefinition>

      <TypeDefinition Name="ActionOverload" UnderlyingType="Edm.String">
        <Annotation Term="Core.Description" String="The namespace-qualified name of an action with an optional overload" />
        <Annotation Term="Core.LongDescription">
          <String>The namespace-qualified name of an action, optionally followed by parentheses
            containing the binding parameter type of a bound action overload to identify that bound overload,
            or by empty parentheses to identify the unbound overload, like in the `Target` attribute of an `Annotation`.</String>
        </Annotation>
      </TypeDefinition>

      <Term Name="SemanticKey" AppliesTo="EntityType" Type="Collection(Edm.PropertyPath)" Nullable="false">
        <Annotation Term="Core.Description" String="The listed properties form the semantic key, i.e. they are unique modulo IsActiveEntity" />
      </Term>

      <Term Name="SideEffects" Type="Common.SideEffectsType" Nullable="false" AppliesTo="EntitySet EntityType ComplexType Action">
        <Annotation Term="Core.Description" String="Describes side-effects of modification operations" />
      </Term>
      <ComplexType Name="SideEffectsType">
        <Annotation Term="Core.Description" String="Changes to the source properties or source entities may have side-effects on the target properties or entities." />
        <Annotation Term="Core.LongDescription">
          <String>If neither TargetProperties nor TargetEntities are specified, a change to the source property values may have unforeseeable side-effects.
An empty NavigationPropertyPath may be used in TargetEntities to specify that any property of the annotated entity type may be affected.

Side effects without a `TriggerAction` happen immediately when modifying one of the source properties or source entities. Side effects with a `TriggerAction` are deferred until explicitly triggered via the `TriggerAction`.

Special case where the side effect is annotated on an action: here the change trigger is the action invocation, so `SourceProperties` and `SourceEntities` have no meaning,
only `TargetProperties` and `TargetEntities` are relevant. They are addressed via the binding parameter of the action, e.g. if the binding parameter is named `_it`, all paths have to start with `_it/`.
This can also be used with OData V2 services: the annotation target is a function import that is marked with [`sap:action-for`](https://wiki.scn.sap.com/wiki/display/EmTech/SAP+Annotations+for+OData+Version+2.0#SAPAnnotationsforODataVersion2.0-Elementedm:FunctionImport), and all paths have to start with `_it/`.</String>
        </Annotation>
        <Property Name="SourceProperties" Type="Collection(Edm.PropertyPath)" Nullable="false">
          <Annotation Term="Core.Description" String="Changes to the values of one or more of these structural properties may affect the targets" />
        </Property>
        <Property Name="SourceEntities" Type="Collection(Edm.NavigationPropertyPath)" Nullable="true">
          <Annotation Term="Core.Description" String="Changes to one or more of these entities may affect the targets. An null value means the annotation target." />
        </Property>
        <Property Name="SourceEntitiesInserted" Type="Collection(Edm.NavigationPropertyPath)" Nullable="false">
          <Annotation Term="Core.Description" String="Creating one or more of these entities may affect the targets." />
        </Property>
        <Property Name="SourceEntitiesUpdated" Type="Collection(Edm.NavigationPropertyPath)" Nullable="false">
          <Annotation Term="Core.Description" String="Updating one or more of these entities may affect the targets." />
        </Property>
        <Property Name="SourceEntitiesDeleted" Type="Collection(Edm.NavigationPropertyPath)" Nullable="false">
          <Annotation Term="Core.Description" String="Deleting one or more of these entities may affect the targets." />
        </Property>    
        <Property Name="SourceEvents" Type="Collection(Edm.String)" Nullable="false">
          <Annotation Term="Core.Description" String="When the service raises one or more of these &quot;events for side effects&quot;, the targets may be affected" />
        </Property>
        <Property Name="TargetProperties" Type="Collection(Edm.String)" Nullable="false">
          <Annotation Term="Core.Description" String="These structural properties may be affected if the value of one of the sources changes" />
          <Annotation Term="Core.LongDescription" String="The syntax follows closely the syntax rules for `Edm.PropertyPath`, with the addition of `*` as the last path segment meaning all structural properties directly reached via the preceding path" />
        </Property>
        <Property Name="TargetEntities" Type="Collection(Edm.NavigationPropertyPath)" Nullable="true">
          <Annotation Term="Core.Description" String="These entities will be affected if the value of one of the sources changes. All affected entities need to be explicitly listed. A null value means the annotation target." />
        </Property>
        <Property Name="TriggerAction" Type="Common.QualifiedName" Nullable="true">
          <Annotation Term="Core.Description" String="Bound action to trigger side-effects after modifying an entity" />
          <Annotation Term="Core.LongDescription" String="Binding parameter type of the trigger action is the entity type annotated with `SideEffects`. The action does not have any additional parameters and does not return anything. It either succeeds with `204 No Content` or it fails with `4xx` or `5xx`." />
        </Property>
        <Property Name="Discretionary" Type="Edm.Boolean" Nullable="false" DefaultValue="false">
          <Annotation Term="Common.Experimental" />
          <Annotation Term="Core.Description" String="Indicates whether the client can decide if a side-effect should be triggered or not" />
          <Annotation Term="Core.LongDescription" String="The value of this property typically a static boolean value. It can be used by clients (e.g. by asking the end user) to decide if the side effect should be triggered or not. This indicator is only allowed in case a trigger action is given as only then the execution control of the side effect is provided to the client." />
        </Property>
      </ComplexType>
      <EnumType Name="EffectType" IsFlags="true">
        <Annotation Term="Core.Revisions">
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="All side effects are essentially value changes, differentiation not needed." />
            </Record>
          </Collection>
        </Annotation>
        <Member Name="ValidationMessage" Value="1">
          <Annotation Term="Core.Description" String="Validation messages are assigned to a target" />
          <Annotation Term="Core.LongDescription">
            <String>This side effect type indicates that validation messages may result from changes of source properties or entities.
Thus, a validation request can be sent either in conjunction with or separately after a modifying request.
Validation messages shall be persisted with the draft and immediately available in a subsequent request without repeating the validation logic.</String>
          </Annotation>
        </Member>
        <Member Name="ValueChange" Value="2">
          <Annotation Term="Core.Description" String="The value of a target changes" />
          <Annotation Term="Core.LongDescription">
            <String>This side effect type declares that changes to source properties or entities may impact the values of any, one or multiple target properties or entities.
Upon modification preparation logic is performed that determines additional values to be stored in the draft document.</String>
          </Annotation>
        </Member>
        <Member Name="FieldControlChange" Value="4">
          <Annotation Term="Core.Description" String="The value of the Common.FieldControl annotation of a target changes" />
          <Annotation Term="Core.LongDescription">
            <String>This side effect type specifies that source properties or entities may impact the dynamic field control state of any, one or multiple target properties or entities.
Upon modification field control logic is invoked so that meta-information like hidden or read-only is determined.</String>
          </Annotation>
        </Member>
      </EnumType>

      <!-- Section: Default Values -->
      <Term Name="DefaultValuesFunction" Type="Common.QualifiedName" Nullable="false" AppliesTo="EntitySet NavigationProperty Action Function">
        <Annotation Term="Core.Description">
          <String>Function to calculate default values based on user input that is only known to the client and "context information" that is already available to the service</String>
        </Annotation>
        <Annotation Term="Core.LongDescription">
          <String>The default values function must have a bound overload whose binding parameter type matches the annotation target
- for an entity set: collection of entity type of entity set
- for a navigation property: identical to the type of the navigation property (single- or collection-valued)
- for a bound action/function: identical to the binding parameter type of the annotated action/function

In addition the overload can have non-binding parameters for values that the user has already entered:
- for an entity set or navigation property: each non-binding parameter name and type must match the name and type of a property of the entity to be created
- for an action or function: each non-binding parameter name and type must match the name and type of a non-binding parameter of the action or function to be called

The result type of the default values function is a complex type whose properties correspond in name and type to a subset of
- the properties of the entity to create, or
- the parameters of the action or function to call</String>
        </Annotation>
      </Term>

      <Term Name="DerivedDefaultValue" Type="Edm.String" Nullable="false" AppliesTo="Property">
        <Annotation Term="Common.Experimental" String="This has been experimental for three years, consider to delete it" />
        <Annotation Term="Core.Description">
          <String>Function import to derive a default value for the property from a given context.</String>
        </Annotation>
        <Annotation Term="Core.LongDescription">
          <String>Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property
- `properties`, a structure resembling the type of the entity set of the annotated property

The return type must be of the same type as the annotated property.

Arguments passed to the function import are used as context for deriving the default value.
The function import returns this default value, or null in case such a value could not be determined.</String>
        </Annotation>
      </Term>

      <Term Name="FilterDefaultValue" Type="Edm.PrimitiveType" Nullable="true" AppliesTo="Property">
        <Annotation Term="Core.Description" String="A default value for the property to be used in filter expressions." />
      </Term>

      <Term Name="FilterDefaultValueHigh" Type="Edm.PrimitiveType" Nullable="true" AppliesTo="Property">
        <Annotation Term="Common.Experimental" String="Requested by Roland Trapp as a counterpart to CDS annotation @Consumption.filter.defaultValueHigh" />
        <Annotation Term="Core.Description" String="A default upper limit for the property to be used in 'less than or equal' filter expressions." />
      </Term>

      <Term Name="DerivedFilterDefaultValue" Type="Edm.String" Nullable="false" AppliesTo="Property">
        <Annotation Term="Common.Experimental" String="This has been experimental for three years, consider to delete it" />
        <Annotation Term="Core.Description">
          <String>Function import to derive a default value for the property from a given context in order to use it in filter expressions.</String>
        </Annotation>
        <Annotation Term="Core.LongDescription">
          <String>Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter
  entity set related to the entity set of the annotated property
- `properties`, a structure resembling the
  type of the entity set of the annotated property

The return type must be of the same type as the annotated
property.

Arguments passed to the function import are used as context for deriving the default value.
The function import returns this default value, or null in case such a value could not be determined.</String>
        </Annotation>
      </Term>

      <Term Name="SortOrder" Type="Collection(Common.SortOrderType)" Nullable="false" AppliesTo="EntitySet EntityType">
        <Annotation Term="Core.Description" String="List of sort criteria" />
        <Annotation Term="Core.LongDescription">
          <String>The items of the annotated entity set or the items of the
          collection of the annotated entity type are sorted by the first entry of the SortOrder collection.
          Items with same value for this first sort criteria are sorted by the second entry of the SortOrder collection, and so on. </String>
        </Annotation>
      </Term>
      <ComplexType Name="SortOrderType">
        <Annotation Term="Core.Description" String="Exactly one of `Property`, `DynamicProperty` and `Expression` must be present" />
        <Property Name="Property" Type="Edm.PropertyPath">
          <Annotation Term="Common.PrimitivePropertyPath" />
          <Annotation Term="Core.Description" String="Sort property" />
          <Annotation Term="Core.Revisions">
            <Collection>
              <Record>
                <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Modified" />
                <PropertyValue Property="Description" String="Now nullable if `DynamicProperty` is present" />
              </Record>
            </Collection>
          </Annotation>
        </Property>
        <Property Name="DynamicProperty" Type="Edm.AnnotationPath">
          <Annotation Term="Core.Description" String="Dynamic property introduced by an annotation and used as sort property" />
          <Annotation Term="Core.LongDescription">
            <String>If the annotation referenced by the annotation path does not apply to the same collection of entities
            as the one being sorted according to the [`UI.PresentationVariant`](UI.md#PresentationVariant) or `Common.SortOrder` annotation,
            this instance of `UI.PresentationVariant/SortOrder` or `Common.SortOrder` MUST be silently ignored.</String>
          </Annotation>
          <Annotation Term="Validation.AllowedTerms">
            <Collection>
              <String>Analytics.AggregatedProperty</String>
              <String>Aggregation.CustomAggregate</String>
            </Collection>
          </Annotation>
        </Property>
        <Property Name="Expression" Type="Edm.PrimitiveType">
          <Annotation Term="Common.Experimental" />
          <Annotation Term="Core.Description" String="Dynamic expression whose primitive result value is used to sort the instances" />
        </Property>
        <Property Name="Descending" Type="Edm.Boolean" Nullable="true">
          <Annotation Term="Core.Description" String="Sort direction, ascending if not specified otherwise" />
        </Property>
      </ComplexType>

      <!-- under discussion with Heiko Theissen, Heiko Gerwens, Christoph Glania, and Ralf Dentzer
        <Term Name="CacheControlProposal" Type="Common.CacheControlProposalType" Nullable="false" AppliesTo="EntitySet">
        <Annotation Term="Core.Description">
        <String>Proposed values for the Cache-Control request header when accessing this entity set, see https://tools.ietf.org/html/rfc7234#section-5.2.1</String>
        </Annotation>
        </Term>
        <ComplexType Name="CacheControlProposalType">
        <Property Name="MaxAge" Type="Edm.Int32">
        <Annotation Term="Core.Description"
        String="Maximum acceptable age of the response in seconds, see https://tools.ietf.org/html/rfc7234#section-5.2.1.1"
        />
        </Property>
        </ComplexType>
      -->

      <Term Name="RecursiveHierarchy" BaseTerm="Aggregation.RecursiveHierarchy" Type="Common.RecursiveHierarchyType" Nullable="false">
        <Annotation Term="Core.Revisions">
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="Use terms [Aggregation.RecursiveHierarchy](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#RecursiveHierarchy) and [Hierarchy.RecursiveHierarchy](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#RecursiveHierarchy) instead" />
            </Record>
          </Collection>
        </Annotation>
        <Annotation Term="Core.Description">
          <String>Defines a recursive hierarchy.</String>
        </Annotation>
      </Term>
      <ComplexType Name="RecursiveHierarchyType">
        <Annotation Term="Core.Revisions">
          <Collection>
            <Record>
              <PropertyValue Property="Kind" EnumMember="Core.RevisionKind/Deprecated" />
              <PropertyValue Property="Description" String="Use terms [Aggregation.RecursiveHierarchy](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#RecursiveHierarchy) and [Hierarchy.RecursiveHierarchy](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#RecursiveHierarchy) instead" />
            </Record>
          </Collection>
        </Annotation>
        <Property Name="ExternalNodeKeyProperty" Type="Edm.PropertyPath">
          <Annotation Term="Core.Description" String="Property holding the external human-readable key identifying the node" />
        </Property>
        <Property Name="NodeDescendantCountProperty" Type="Edm.PropertyPath">
          <Annotation Term="Core.Description">
            <String>Property holding the descendant count for a hierarchy node.
            The descendant count of a node is the number of its descendants in the hierarchy structure of the result considering
            only those nodes matching any specified $filter and $search. A property holding descendant counts has an integer
            data type.</String>
          </Annotation>
        </Property>
        <Property Name="NodeDrillStateProperty" Type="Edm.PropertyPath">
          <Annotation Term="Core.Description">
            <String>Property holding the drill state of a hierarchy node. The drill state is indicated
            by one of the following string values: collapsed, expanded, or leaf. For an expanded node, its
            children are included in the result collection. For a collapsed node, the children are included in the entity set, but
            they are not part of the result collection. Retrieving them requires a relaxed filter expression or a separate request
            filtering on the parent node ID with the ID of the collapsed node. A leaf does not have any child in the entity set.
            </String>
          </Annotation>
        </Property>
      </ComplexType>


      <!-- Metadata annotations that can also appear as instance annotations -->

      <Term Name="CreatedAt" Type="Edm.DateTimeOffset" Nullable="true" AppliesTo="EntityType">
        <Annotation Term="Core.Description" String="Creation timestamp" />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </Term>
      <Term Name="CreatedBy" Type="Common.UserID" Nullable="true" AppliesTo="EntityType">
        <Annotation Term="Core.Description" String="First editor" />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </Term>
      <Term Name="ChangedAt" Type="Edm.DateTimeOffset" Nullable="true" AppliesTo="EntityType">
        <Annotation Term="Core.Description" String="Last modification timestamp" />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </Term>
      <Term Name="ChangedBy" Type="Common.UserID" Nullable="true" AppliesTo="EntityType">
        <Annotation Term="Core.Description" String="Last editor" />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </Term>
      <TypeDefinition Name="UserID" UnderlyingType="Edm.String">
        <Annotation Term="Core.Description" String="User ID" />
        <Annotation Term="Common.IsInstanceAnnotation" />
      </TypeDefinition>


      <!-- Metadata annotations for converters -->

      <Term Name="OriginalProtocolVersion" Type="Edm.String" Nullable="false" AppliesTo="Schema">
        <Annotation Term="Core.Description" String="Original protocol version of a converted (V4) CSDL document, allowed values `2.0` and `3.0`" />
      </Term>

      <!-- Odds and ends -->
      <Term Name="ApplyMultiUnitBehaviorForSortingAndFiltering" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="EntityContainer">
        <Annotation Term="Core.Description" String="Sorting and filtering of amounts in multiple currencies needs special consideration" />
        <Annotation Term="Core.LongDescription" String="TODO: add link to UX documentation on https://experience.sap.com/fiori-design/" />
      </Term>

      <Term Name="mediaUploadLink" Type="Edm.String" Nullable="false" AppliesTo="Property EntityType">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Common.IsInstanceAnnotation" />
        <Annotation Term="Core.RequiresType" String="Edm.Stream" />
        <Annotation Term="Core.IsURL" />
        <Annotation Term="Core.Description" String="URL for uploading new media content to a Document Management Service" />
        <Annotation Term="Core.LongDescription">
          <String>In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property or media resource.
The upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578.
The upload request must contain one multipart representing the content of the file. The `name` parameter in the `Content-Disposition` header (as described in RFC 7578) is irrelevant, but the `filename` parameter is expected.
If the request succeeds the response will contain a JSON body of `Content-Type: application/json` with a JSON property `readLink`. The newly uploaded media resource can be linked to the stream property by changing the `@odata.mediaReadLink` to the value of this `readLink` in a subsequent PATCH request to the OData entity.</String>

        </Annotation>
      </Term>

      <Term Name="PrimitivePropertyPath" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="Term Property">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="A term or term property with this tag whose type is (a collection of) `Edm.PropertyPath` MUST resolve to a primitive structural property" />
      </Term>

      <Term Name="WebSocketBaseURL" Type="Edm.String" Nullable="false" AppliesTo="EntityContainer">
        <Annotation Term="Core.IsURL" />
        <Annotation Term="Core.Description" String="Base URL for WebSocket connections" />
        <Annotation Term="Core.LongDescription">
          <String>This annotation MUST be unqualified.</String>
        </Annotation>
      </Term>
      <Term Name="WebSocketChannel" Type="Edm.String" Nullable="true" AppliesTo="EntityContainer">
        <Annotation Term="Core.Description" String="Channel for WebSocket connections" />
        <Annotation Term="Core.LongDescription">
          <String>Messages sent over the channel follow the [ABAP Push Channel Protocol](https://community.sap.com/t5/application-development-blog-posts/specification-of-the-push-channel-protocol-pcp/ba-p/13137541).
To consume a channel, the client opens a web socket connection at the [`WebSocketBaseURL`](#WebSocketBaseURL)
followed by URL parameters
- parameter name = annotation qualifier, parameter value = channel ID (see below)
- parameter name = `relatedService`, parameter value = base URL (relative to server root) of the OData service of the app

Supported qualifiers and channel IDs:
&lt;dl&gt;
&lt;dt&gt;`sideEffects` &lt;dd&gt;Notifications about side effects to be triggered by the client (channel ID = non-null annotation value)
&lt;/dl&gt;</String>
        </Annotation>
      </Term>

      <Term Name="AddressViaNavigationPath" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="EntityContainer">
        <Annotation Term="Core.Description" String="Service prefers requests to use a resource path with navigation properties" />
        <Annotation Term="Core.LongDescription">
          <String>Use this tag on services that do not restrict requests to certain resource paths
via [`Capabilities`](https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Capabilities.V1.html)
or [`Core.RequiresExplicitBinding`](https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.html#RequiresExplicitBinding)
annotations, but that prefer requests with a resource path that
contains the navigation properties reflecting the UI structure.

For example, entering a cancellation fee into an order item field bound to `CancellationItem/Fee`
leads to a
`PATCH Orders(23)/Items(5)/CancellationItem` request with `{"Fee": ...}` payload.</String>
        </Annotation>
      </Term>

      <Term Name="ExpandAfterConcatSupported" Type="Core.Tag" Nullable="false" DefaultValue="true" AppliesTo="EntityContainer">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="Service supports `$expand` and `$select` in combination with `$apply=concat(…)`" />
      </Term>

      <Term Name="ReferentialConstraint" Type="Collection(Common.ReferentialConstraintType)" Nullable="false" AppliesTo="NavigationProperty">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description" String="[Referential constraints](https://oasis-tcs.github.io/odata-specs/odata-csdl-xml/odata-csdl-xml.html#ReferentialConstraint) without nullability requirement" />
      </Term>
      <ComplexType Name="ReferentialConstraintType">
        <Annotation Term="Common.Experimental" />
        <Annotation Term="Core.Description">
          <String>A record that behaves like the standard referential constraint on the navigation property targeted by a [`ReferentialConstraint`](#ReferentialConstraint) annotation,
          but the nullability requirement for the dependent property is lifted.
          It asserts that the principal property _of an existing related entity_
          must have the same value as the dependent property.</String>
        </Annotation>
        <Property Name="Property" Type="Edm.PropertyPath" Nullable="false">
          <Annotation Term="Core.Description" String="The path to the property is evaluated relative to the type containing the navigation property" />
        </Property>
        <Property Name="ReferencedProperty" Type="Edm.PropertyPath" Nullable="false">
          <Annotation Term="Core.Description" String="The path to the referenced property MUST start with a segment containing the navigation property" />
        </Property>
      </ComplexType>
      
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>
