function (vRawValue, oDetails) {
				var aMatches,
					oModel = oDetails.context.getModel(),
					sPath = oDetails.context.getPath();

				function getExpression(sPrefix) {
					if (sPath.slice(-1) === "/") {
						// cut off trailing slash, happens with computed annotations
						sPath = sPath.slice(0, -1);
					}
					return Expression.getExpression({
							asExpression : false,
							complexBinding : true,
							model : oModel,
							path : sPath,
							prefix : sPrefix, // prefix for computing paths
							value : vRawValue,
							// ensure that type information is available in sub paths of the
							// expression even if for that sub path no complex binding is needed,
							// e.g. see sap.ui.model.odata.v4_AnnotationHelperExpression.operator
							$$valueAsPromise : true
						});
				}

				aMatches = rUnsupportedPathSegments.exec(sPath);
				if (aMatches) {
					throw new Error("Unsupported path segment " + aMatches[0] + " in " + sPath);
				}

				// aMatches[0] - sPath, e.g. "/Equipments/@UI.LineItem/4/Value/$Path@Common.Label"
				// aMatches[1] - prefix of sPath including $Path or $AnnotationPath, e.g.
				//             "/Equipments/@UI.LineItem/4/Value/$Path"
				// aMatches[2] - "$AnnotationPath" or "$Path"
				// aMatches[3] - optional "/" after "$AnnotationPath" or "$Path"
				// aMatches[4] - rest of sPath, e.g. "@Common.Label"
				aMatches = rSplitPathSegment.exec(sPath);
				if (aMatches && sPath.length > aMatches[1].length) {
					if (rSplitPathSegment.test(aMatches[4])) {
						throw new Error("Only one $Path or $AnnotationPath segment is supported: "
							+ sPath);
					}

					return oModel.fetchObject(aMatches[1]).then(function (sPathValue) {
						var i,
							bIsAnnotationPath = aMatches[2] === "$AnnotationPath",
							sPrefix = bIsAnnotationPath
								? sPathValue.split("@")[0]
								: sPathValue;

						if (!bIsAnnotationPath && aMatches[3]) {
							sPrefix = sPrefix + "/";
						}
						if (!sPrefix.endsWith("/")) {
							i = sPrefix.lastIndexOf("/");
							sPrefix = i < 0 ? "" : sPrefix.slice(0, i + 1);
						}
						return getExpression(sPrefix);
					});
				}
				return getExpression("");
			}
function (vRawValue, oDetails) {
				var aMatches,
					oModel = oDetails.context.getModel(),
					sPath = oDetails.context.getPath();

				function getExpression(sPrefix) {
					if (sPath.slice(-1) === "/") {
						// cut off trailing slash, happens with computed annotations
						sPath = sPath.slice(0, -1);
					}
					return Expression.getExpression({
							asExpression : false,
							complexBinding : true,
							model : oModel,
							path : sPath,
							prefix : sPrefix, // prefix for computing paths
							value : vRawValue,
							// ensure that type information is available in sub paths of the
							// expression even if for that sub path no complex binding is needed,
							// e.g. see sap.ui.model.odata.v4_AnnotationHelperExpression.operator
							$$valueAsPromise : true
						});
				}

				aMatches = rUnsupportedPathSegments.exec(sPath);
				if (aMatches) {
					throw new Error("Unsupported path segment " + aMatches[0] + " in " + sPath);
				}

				// aMatches[0] - sPath, e.g. "/Equipments/@UI.LineItem/4/Value/$Path@Common.Label"
				// aMatches[1] - prefix of sPath including $Path or $AnnotationPath, e.g.
				//             "/Equipments/@UI.LineItem/4/Value/$Path"
				// aMatches[2] - "$AnnotationPath" or "$Path"
				// aMatches[3] - optional "/" after "$AnnotationPath" or "$Path"
				// aMatches[4] - rest of sPath, e.g. "@Common.Label"
				aMatches = rSplitPathSegment.exec(sPath);
				if (aMatches && sPath.length > aMatches[1].length) {
					if (rSplitPathSegment.test(aMatches[4])) {
						throw new Error("Only one $Path or $AnnotationPath segment is supported: "
							+ sPath);
					}

					return oModel.fetchObject(aMatches[1]).then(function (sPathValue) {
						var i,
							bIsAnnotationPath = aMatches[2] === "$AnnotationPath",
							sPrefix = bIsAnnotationPath
								? sPathValue.split("@")[0]
								: sPathValue;

						if (!bIsAnnotationPath && aMatches[3]) {
							sPrefix = sPrefix + "/";
						}
						if (!sPrefix.endsWith("/")) {
							i = sPrefix.lastIndexOf("/");
							sPrefix = i < 0 ? "" : sPrefix.slice(0, i + 1);
						}
						return getExpression(sPrefix);
					});
				}
				return getExpression("");
			}
function ( vRawValue , oDetails ) { var aMatches , oModel = oDetails . context . getModel ( ) , sPath = oDetails . context . getPath ( ) ; function getExpression ( sPrefix ) { if ( sPath . slice ( - 1 ) === "/" ) { // cut off trailing slash, happens with computed annotations sPath = sPath . slice ( 0 , - 1 ) ; } return Expression . getExpression ( { asExpression : false , complexBinding : true , model : oModel , path : sPath , prefix : sPrefix , // prefix for computing paths value : vRawValue , // ensure that type information is available in sub paths of the // expression even if for that sub path no complex binding is needed, // e.g. see sap.ui.model.odata.v4_AnnotationHelperExpression.operator $$valueAsPromise : true } ) ; } aMatches = rUnsupportedPathSegments . exec ( sPath ) ; if ( aMatches ) { throw new Error ( "Unsupported path segment " + aMatches [ 0 ] + " in " + sPath ) ; } // aMatches[0] - sPath, e.g. "/Equipments/@UI.LineItem/4/Value/$Path@Common.Label" // aMatches[1] - prefix of sPath including $Path or $AnnotationPath, e.g. //             "/Equipments/@UI.LineItem/4/Value/$Path" // aMatches[2] - "$AnnotationPath" or "$Path" // aMatches[3] - optional "/" after "$AnnotationPath" or "$Path" // aMatches[4] - rest of sPath, e.g. "@Common.Label" aMatches = rSplitPathSegment . exec ( sPath ) ; if ( aMatches && sPath . length > aMatches [ 1 ] . length ) { if ( rSplitPathSegment . test ( aMatches [ 4 ] ) ) { throw new Error ( "Only one $Path or $AnnotationPath segment is supported: " + sPath ) ; } return oModel . fetchObject ( aMatches [ 1 ] ) . then ( function ( sPathValue ) { var i , bIsAnnotationPath = aMatches [ 2 ] === "$AnnotationPath" , sPrefix = bIsAnnotationPath ? sPathValue . split ( "@" ) [ 0 ] : sPathValue ; if ( ! bIsAnnotationPath && aMatches [ 3 ] ) { sPrefix = sPrefix + "/" ; } if ( ! sPrefix . endsWith ( "/" ) ) { i = sPrefix . lastIndexOf ( "/" ) ; sPrefix = i < 0 ? "" : sPrefix . slice ( 0 , i + 1 ) ; } return getExpression ( sPrefix ) ; } ) ; } return getExpression ( "" ) ; }
A function that helps to interpret OData V4 annotations. It knows about the following
expressions:
<ul>
<li>"14.4 Constant Expressions" for "edm:Bool", "edm:Date",
"edm:DateTimeOffset", "edm:Decimal", "edm:Float", "edm:Guid", "edm:Int",
"edm:TimeOfDay".
<li>constant "14.4.11 Expression edm:String": This is turned into a fixed
text (e.g. <code>"Width"</code>). String constants that contain a simple binding
<code>"{@i18n>...}"</code> to the hard-coded model name "@i18n" with arbitrary path
are not turned into a fixed text, but kept as a data binding expression; this
allows local annotation files to refer to a resource bundle for
internationalization.
<li>dynamic "14.5.1 Comparison and Logical Operators": These are turned into
expression bindings to perform the operations at runtime.
<li>dynamic "14.5.3 Expression edm:Apply":
<ul>
<li>"14.5.3.1.1 Function odata.concat": This is turned into a data binding
expression relative to an entity.
<li>"14.5.3.1.2 Function odata.fillUriTemplate": This is turned into an
expression binding to fill the template at runtime.
<li>"14.5.3.1.3 Function odata.uriEncode": This is turned into an expression
binding to encode the parameter at runtime.
<li>Apply functions may be nested arbitrarily.
</ul>
<li>dynamic "14.5.6 Expression edm:If": This is turned into an expression
binding to be evaluated at runtime. The expression is a conditional expression
like <code>"{=condition ? expression1 : expression2}"</code>.
<li>dynamic "14.5.10 Expression edm:Null": This is turned into a
<code>null</code> value. It is ignored in <code>odata.concat</code>.
<li>dynamic "14.5.12 Expression edm:Path" and "14.5.13 Expression
edm:PropertyPath": This is turned into a data binding relative to an entity,
including type information and constraints as available from metadata,
e.g. <code>"{path : 'Name', type : 'sap.ui.model.odata.type.String',
constraints : {'maxLength':'255'}}"</code>.
Depending on the used type, some additional constraints of this type are set:
<ul>
<li>Edm.DateTime: The "displayFormat" constraint is set to the value of the
"sap:display-format" annotation of the referenced property.
<li>Edm.Decimal: The "precision" and "scale" constraints are set to the values
of the corresponding attributes of the referenced property. The "minimum",
"maximum", "minimumExclusive" and "maximumExlusive" constraints are set to the
values of the corresponding "Org.OData.Validation.V1" annotation of the
referenced property; note that in this case only constant expressions are
supported to determine the annotation value.
<li>Edm.String: The "maxLength" constraint is set to the value of the
corresponding attribute of the referenced property, and the "isDigitSequence"
constraint is set to the value of the
"com.sap.vocabularies.Common.v1.IsDigitSequence" annotation of the referenced
property; note that in this case only constant expressions are supported to
determine the annotation value.
</ul>
</ul>

If <code>oDetails.context.getPath()</code> contains a single "$AnnotationPath" or
"$Path" segment, the value corresponding to that segment is considered as a data
binding path prefix whenever a dynamic "14.5.12 Expression edm:Path" or
"14.5.13 Expression edm:PropertyPath" is turned into a data binding. Use
{@link sap.ui.model.odata.v4.AnnotationHelper.resolve$Path} to avoid these prefixes
in cases where they are not applicable.

Unsupported or incorrect values are turned into a string nevertheless, but indicated
as such. Proper escaping is used to make sure that data binding syntax is not
corrupted. In such a case, an error describing the problem is logged to the console.

Example:
<pre>
&lt;Text text="{meta>Value/@@sap.ui.model.odata.v4.AnnotationHelper.format}" />
</pre>

Example for "$Path" in the context's path:
<pre>
&lt;Annotations Target="com.sap.gateway.default.iwbep.tea_busi.v0001.EQUIPMENT">
&lt;Annotation Term="com.sap.vocabularies.UI.v1.LineItem">
&lt;Collection>
&lt;Record Type="com.sap.vocabularies.UI.v1.DataField">
&lt;PropertyValue Property="Value" Path="EQUIPMENT_2_PRODUCT/Name" />
&lt;/Record>
&lt;/Collection>
&lt;/Annotation>
&lt;/Annotations>
&lt;Annotations Target="com.sap.gateway.default.iwbep.tea_busi_product.v0001.Product/Name">
&lt;Annotation Term="com.sap.vocabularies.Common.v1.QuickInfo" Path="PRODUCT_2_SUPPLIER/Supplier_Name" />
&lt;/Annotations>
</pre>
<pre>
&lt;Text text="{meta>/Equipments/@com.sap.vocabularies.UI.v1.LineItem/0/Value/$Path@com.sap.vocabularies.Common.v1.QuickInfo@@sap.ui.model.odata.v4.AnnotationHelper.format}" />
</pre>
<code>format</code> returns a binding with path
"EQUIPMENT_2_PRODUCT/PRODUCT_2_SUPPLIER/Supplier_Name".

Example for "$AnnotationPath" in the context's path:
<pre>
&lt;Annotations Target="com.sap.gateway.default.iwbep.tea_busi.v0001.EQUIPMENT">
&lt;Annotation Term="com.sap.vocabularies.UI.v1.Facets">
&lt;Collection>
&lt;Record Type="com.sap.vocabularies.UI.v1.ReferenceFacet">
&lt;PropertyValue Property="Target" AnnotationPath="EQUIPMENT_2_PRODUCT/@com.sap.vocabularies.Common.v1.QuickInfo" />
&lt;/Record>
&lt;/Collection>
&lt;/Annotation>
&lt;/Annotations>
&lt;Annotations Target="com.sap.gateway.default.iwbep.tea_busi_product.v0001.Product">
&lt;Annotation Term="com.sap.vocabularies.Common.v1.QuickInfo" Path="Name" />
&lt;/Annotations>
</pre>
<pre>
&lt;Text text="{meta>/Equipments/@com.sap.vocabularies.UI.v1.Facets/0/Target/$AnnotationPath/@@sap.ui.model.odata.v4.AnnotationHelper.format}" />
</pre>
<code>format</code> returns a binding with path "EQUIPMENT_2_PRODUCT/Name".

@param {any} vRawValue
The raw value from the meta model
@param {object} oDetails
The details object
@param {sap.ui.model.Context} oDetails.context
Points to the given raw value, that is
<code>oDetails.context.getProperty("") === vRawValue</code>
@returns {string|Promise}
A data binding, or a fixed text, or a sequence thereof, or a <code>Promise</code>
resolving with that string, for example if not all type information is already
available
@throws {Error}
If <code>oDetails.context.getPath()</code> contains a "$PropertyPath" or a
"$NavigationPropertyPath" segment, or if it contains more than one
"$AnnotationPath" or "$Path" segment

@public
@see sap.ui.model.odata.v4.AnnotationHelper.resolve$Path
@since 1.63.0
A function that helps to interpret OData V4 annotations . It knows about the following expressions : <ul > <li > 14 . 4 Constant Expressions for edm : Bool edm : Date edm : DateTimeOffset edm : Decimal edm : Float edm : Guid edm : Int edm : TimeOfDay . <li > constant 14 . 4 . 11 Expression edm : String : This is turned into a fixed text ( e . g . <code > Width < / code > ) . String constants that contain a simple binding <code > { @i18n > ... } < / code > to the hard - coded model name @i18n with arbitrary path are not turned into a fixed text but kept as a data binding expression ; this allows local annotation files to refer to a resource bundle for internationalization . <li > dynamic 14 . 5 . 1 Comparison and Logical Operators : These are turned into expression bindings to perform the operations at runtime . <li > dynamic 14 . 5 . 3 Expression edm : Apply : <ul > <li > 14 . 5 . 3 . 1 . 1 Function odata . concat : This is turned into a data binding expression relative to an entity . <li > 14 . 5 . 3 . 1 . 2 Function odata . fillUriTemplate : This is turned into an expression binding to fill the template at runtime . <li > 14 . 5 . 3 . 1 . 3 Function odata . uriEncode : This is turned into an expression binding to encode the parameter at runtime . <li > Apply functions may be nested arbitrarily . < / ul > <li > dynamic 14 . 5 . 6 Expression edm : If : This is turned into an expression binding to be evaluated at runtime . The expression is a conditional expression like <code > { = condition ? expression1 : expression2 } < / code > . <li > dynamic 14 . 5 . 10 Expression edm : Null : This is turned into a <code > null< / code > value . It is ignored in <code > odata . concat< / code > . <li > dynamic 14 . 5 . 12 Expression edm : Path and 14 . 5 . 13 Expression edm : PropertyPath : This is turned into a data binding relative to an entity including type information and constraints as available from metadata e . g . <code > { path : Name type : sap . ui . model . odata . type . String constraints : { maxLength : 255 }} < / code > . Depending on the used type some additional constraints of this type are set : <ul > <li > Edm . DateTime : The displayFormat constraint is set to the value of the sap : display - format annotation of the referenced property . <li > Edm . Decimal : The precision and scale constraints are set to the values of the corresponding attributes of the referenced property . The minimum maximum minimumExclusive and maximumExlusive constraints are set to the values of the corresponding Org . OData . Validation . V1 annotation of the referenced property ; note that in this case only constant expressions are supported to determine the annotation value . <li > Edm . String : The maxLength constraint is set to the value of the corresponding attribute of the referenced property and the isDigitSequence constraint is set to the value of the com . sap . vocabularies . Common . v1 . IsDigitSequence annotation of the referenced property ; note that in this case only constant expressions are supported to determine the annotation value . < / ul > < / ul >
Returns the expression for the given value.