diff --git a/examples/Common.Composition-sample.json b/examples/Common.Composition-sample.json index 4f2e4e24..8ba40991 100644 --- a/examples/Common.Composition-sample.json +++ b/examples/Common.Composition-sample.json @@ -1,72 +1,45 @@ { - "$Version": "4.0", - "$Reference": { - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] + } + }, + "example.Common.Composition": { + "$Alias": "this", + "container": { + "$Kind": "EntityContainer", + "SalesOrder": { + "$Collection": true, + "$Type": "this.SalesOrder_Type", + "$NavigationPropertyBinding": { "_Item": "SalesOrderItem" } + }, + "SalesOrderItem": { "$Collection": true, "$Type": "this.SalesOrderItem_Type" } }, - "example.Common.Composition": { - "$Alias": "this", - "container": { - "$Kind": "EntityContainer", - "SalesOrder": { - "$Collection": true, - "$Type": "this.SalesOrder_Type", - "$NavigationPropertyBinding": { - "_Item": "SalesOrderItem" - } - }, - "SalesOrderItem": { - "$Collection": true, - "$Type": "this.SalesOrderItem_Type" - } - }, - "SalesOrder_Type": { - "$Kind": "EntityType", - "$Key": [ - "SalesOrder" - ], - "SalesOrder": { - "$MaxLength": 10 - }, - "_Item": { - "$Kind": "NavigationProperty", - "$Collection": true, - "$Type": "this.SalesOrderItem_Type", - "$Partner": "_SalesOrder" - } - }, - "SalesOrderItem_Type": { - "$Kind": "EntityType", - "$Key": [ - "SalesOrder", - "SalesOrderItem" - ], - "SalesOrder": { - "$MaxLength": 10 - }, - "SalesOrderItem": { - "$MaxLength": 6 - }, - "_SalesOrder": { - "$Kind": "NavigationProperty", - "$Type": "this.SalesOrder_Type", - "$Partner": "_Item", - "$ReferentialConstraint": { - "SalesOrder": "SalesOrder" - } - } - }, - "$Annotations": { - "this.SalesOrder_Type/_Item": { - "@Common.Composition": true - } - } + "SalesOrder_Type": { + "$Kind": "EntityType", + "$Key": ["SalesOrder"], + "SalesOrder": { "$MaxLength": 10 }, + "_Item": { + "$Kind": "NavigationProperty", + "$Collection": true, + "$Type": "this.SalesOrderItem_Type", + "$Partner": "_SalesOrder" + } }, - "$EntityContainer": "example.Common.Composition.container" -} \ No newline at end of file + "SalesOrderItem_Type": { + "$Kind": "EntityType", + "$Key": ["SalesOrder", "SalesOrderItem"], + "SalesOrder": { "$MaxLength": 10 }, + "SalesOrderItem": { "$MaxLength": 6 }, + "_SalesOrder": { + "$Kind": "NavigationProperty", + "$Type": "this.SalesOrder_Type", + "$Partner": "_Item", + "$ReferentialConstraint": { "SalesOrder": "SalesOrder" } + } + }, + "$Annotations": { "this.SalesOrder_Type/_Item": { "@Common.Composition": true } } + }, + "$EntityContainer": "example.Common.Composition.container" +} diff --git a/examples/Common.SAPObjectNodeType-sample.json b/examples/Common.SAPObjectNodeType-sample.json index ee8b8383..920447ef 100644 --- a/examples/Common.SAPObjectNodeType-sample.json +++ b/examples/Common.SAPObjectNodeType-sample.json @@ -1,86 +1,40 @@ { - "$Version": "4.0", - "$Reference": { - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] + } + }, + "example.Common.SAPObjectNodeType": { + "$Alias": "this", + "A_Country": { + "$Kind": "EntityType", + "$Key": ["Country"], + "Country": { "$Nullable": true }, + "CountryThreeLetterISOCode": { "$Nullable": true, "$MaxLength": 3 } + }, + "$Annotations": { + "this.A_Country": { "@Common.SAPObjectNodeType": { "Name": "Country" } }, + "this.A_Region": { "@Common.SAPObjectNodeType": { "Name": "Region" } }, + "this.A_Region/Country": { "@Common.SAPObjectNodeTypeReference": "Country" }, + "this.A_AnyEntity/Country": { "@Common.SAPObjectNodeTypeReference": "Country" }, + "this.A_AnyEntity/Region": { "@Common.SAPObjectNodeTypeReference": "Region" }, + "this.A_AnyEntity/CountryThreeLetterISOCode": { "@Common.SAPObjectNodeTypeReference": "Country" } + }, + "A_Region": { + "$Kind": "EntityType", + "$Key": ["Country", "Region"], + "Country": { "$Nullable": true }, + "Region": { "$Nullable": true }, + "CountryThreeLetterISOCode": { "$Nullable": true } }, - "example.Common.SAPObjectNodeType": { - "$Alias": "this", - "A_Country": { - "$Kind": "EntityType", - "$Key": [ - "Country" - ], - "Country": { - "$Nullable": true - }, - "CountryThreeLetterISOCode": { - "$Nullable": true, - "$MaxLength": 3 - } - }, - "$Annotations": { - "this.A_Country": { - "@Common.SAPObjectNodeType": { - "Name": "Country" - } - }, - "this.A_Region": { - "@Common.SAPObjectNodeType": { - "Name": "Region" - } - }, - "this.A_Region/Country": { - "@Common.SAPObjectNodeTypeReference": "Country" - }, - "this.A_AnyEntity/Country": { - "@Common.SAPObjectNodeTypeReference": "Country" - }, - "this.A_AnyEntity/Region": { - "@Common.SAPObjectNodeTypeReference": "Region" - }, - "this.A_AnyEntity/CountryThreeLetterISOCode": { - "@Common.SAPObjectNodeTypeReference": "Country" - } - }, - "A_Region": { - "$Kind": "EntityType", - "$Key": [ - "Country", - "Region" - ], - "Country": { - "$Nullable": true - }, - "Region": { - "$Nullable": true - }, - "CountryThreeLetterISOCode": { - "$Nullable": true - } - }, - "A_AnyEntity": { - "$Kind": "EntityType", - "$Key": [ - "AnyEntity" - ], - "AnyEntity": {}, - "Country": { - "$Nullable": true - }, - "Region": { - "$Nullable": true - }, - "CountryThreeLetterISOCode": { - "$Nullable": true, - "$MaxLength": 3 - } - } + "A_AnyEntity": { + "$Kind": "EntityType", + "$Key": ["AnyEntity"], + "AnyEntity": {}, + "Country": { "$Nullable": true }, + "Region": { "$Nullable": true }, + "CountryThreeLetterISOCode": { "$Nullable": true, "$MaxLength": 3 } } -} \ No newline at end of file + } +} diff --git a/examples/Common.Timezone-sample.json b/examples/Common.Timezone-sample.json index 07c61b01..12ff1034 100644 --- a/examples/Common.Timezone-sample.json +++ b/examples/Common.Timezone-sample.json @@ -1,33 +1,18 @@ { - "$Version": "4.0", - "$Reference": { - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] + } + }, + "timezone.sample": { + "WorkerTimeSheet": { + "$Kind": "EntityType", + "ClockInDateTime": { "$Type": "Edm.DateTimeOffset", "$Nullable": true, "$Precision": 0 }, + "ClockInTimezone": { "$Nullable": true } }, - "timezone.sample": { - "WorkerTimeSheet": { - "$Kind": "EntityType", - "ClockInDateTime": { - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$Precision": 0 - }, - "ClockInTimezone": { - "$Nullable": true - } - }, - "$Annotations": { - "timezone.sample.WorkerTimeSheet/ClockInDateTime": { - "@Common.Timezone": { - "$Path": "ClockInTimezone" - } - } - } + "$Annotations": { + "timezone.sample.WorkerTimeSheet/ClockInDateTime": { "@Common.Timezone": { "$Path": "ClockInTimezone" } } } -} \ No newline at end of file + } +} diff --git a/examples/DynamicProperties-sample.json b/examples/DynamicProperties-sample.json index c3606894..74e8f79d 100644 --- a/examples/DynamicProperties-sample.json +++ b/examples/DynamicProperties-sample.json @@ -1,116 +1,73 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Aggregation.V1", - "$Alias": "Aggregation" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/UI.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.UI.v1", - "$Alias": "UI" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Analytics.v1", - "$Alias": "Analytics" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Aggregation.V1", "$Alias": "Aggregation" }] }, - "DynamicProperties.examples": { - "$Alias": "self", - "Sales": { - "$Kind": "EntityType", - "$Key": [ - "Order" - ], - "Order": {}, - "Country": {}, - "Amount": { - "$Type": "Edm.Decimal", - "$Nullable": true, - "$Scale": 0 - } + "https://sap.github.io/odata-vocabularies/vocabularies/UI.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.UI.v1", "$Alias": "UI" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Analytics.v1", "$Alias": "Analytics" }] + } + }, + "DynamicProperties.examples": { + "$Alias": "self", + "Sales": { + "$Kind": "EntityType", + "$Key": ["Order"], + "Order": {}, + "Country": {}, + "Amount": { "$Type": "Edm.Decimal", "$Nullable": true, "$Scale": 0 } + }, + "$Annotations": { + "self.Sales": { + "@Analytics.AggregatedProperty#sumAmount": { + "Name": "Total", + "AggregationMethod": "sum", + "AggregatableProperty": "Amount" }, - "$Annotations": { - "self.Sales": { - "@Analytics.AggregatedProperty#sumAmount": { - "Name": "Total", - "AggregationMethod": "sum", - "AggregatableProperty": "Amount" - }, - "@Analytics.AggregatedProperty#maxAmount": { - "Name": "Maximum", - "AggregationMethod": "max", - "AggregatableProperty": "Amount" - }, - "@UI.Chart": { - "ChartType": "Bubble", - "Dimensions": [ - "Country" - ], - "DynamicMeasures": [ - "@Analytics.AggregatedProperty#sumAmount", - "/self.Container/me/SalesOrders@Aggregation.CustomAggregate#WeightedAverage" - ] - }, - "@UI.SelectionVariant": { - "SelectOptions": [ - { - "DynamicPropertyName": "@Analytics.AggregatedProperty#sumAmount", - "Ranges": [ - { - "Sign": "I", - "Option": "LE", - "Low": 1000 - } - ] - } - ] - }, - "@UI.PresentationVariant": { - "SortOrder": [ - { - "Property": "Country" - }, - { - "DynamicProperty": "@Analytics.AggregatedProperty#sumAmount", - "Descending": true - }, - { - "DynamicProperty": "/self.Container/me/SalesOrders@Aggregation.CustomAggregate#WeightedAverage" - } - ] - } - }, - "self.Container/me/SalesOrders": { - "@Aggregation.CustomAggregate#WeightedAverage": "Edm.Decimal" - } + "@Analytics.AggregatedProperty#maxAmount": { + "Name": "Maximum", + "AggregationMethod": "max", + "AggregatableProperty": "Amount" }, - "meType": { - "$Kind": "EntityType", - "SalesOrders": { - "$Kind": "NavigationProperty", - "$Collection": true, - "$Type": "self.Sales", - "$ContainsTarget": true - } + "@UI.Chart": { + "ChartType": "Bubble", + "Dimensions": ["Country"], + "DynamicMeasures": [ + "@Analytics.AggregatedProperty#sumAmount", + "/self.Container/me/SalesOrders@Aggregation.CustomAggregate#WeightedAverage" + ] }, - "Container": { - "$Kind": "EntityContainer", - "me": { - "$Type": "self.meType" + "@UI.SelectionVariant": { + "SelectOptions": [ + { + "DynamicPropertyName": "@Analytics.AggregatedProperty#sumAmount", + "Ranges": [{ "Sign": "I", "Option": "LE", "Low": 1000 }] } + ] + }, + "@UI.PresentationVariant": { + "SortOrder": [ + { "Property": "Country" }, + { "DynamicProperty": "@Analytics.AggregatedProperty#sumAmount", "Descending": true }, + { "DynamicProperty": "/self.Container/me/SalesOrders@Aggregation.CustomAggregate#WeightedAverage" } + ] } + }, + "self.Container/me/SalesOrders": { "@Aggregation.CustomAggregate#WeightedAverage": "Edm.Decimal" } + }, + "meType": { + "$Kind": "EntityType", + "SalesOrders": { + "$Kind": "NavigationProperty", + "$Collection": true, + "$Type": "self.Sales", + "$ContainsTarget": true + } }, - "$EntityContainer": "DynamicProperties.examples.Container" -} \ No newline at end of file + "Container": { "$Kind": "EntityContainer", "me": { "$Type": "self.meType" } } + }, + "$EntityContainer": "DynamicProperties.examples.Container" +} diff --git a/examples/Offline.ClientOnly-sample.json b/examples/Offline.ClientOnly-sample.json index 5d6bb8d1..800341c6 100644 --- a/examples/Offline.ClientOnly-sample.json +++ b/examples/Offline.ClientOnly-sample.json @@ -1,76 +1,49 @@ { - "$Version": "4.0", - "$Reference": { - "https://sap.github.io/odata-vocabularies/vocabularies/Offline.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Offline.v1", - "$Alias": "Offline" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://sap.github.io/odata-vocabularies/vocabularies/Offline.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Offline.v1", "$Alias": "Offline" }] + } + }, + "clientonly.sample": { + "$Alias": "client", + "SalesOrderType": { + "$Kind": "EntityType", + "$Key": ["SalesOrder"], + "SalesOrder": { "$MaxLength": 32 }, + "_Item": { + "$Kind": "NavigationProperty", + "$Collection": true, + "$Type": "client.SalesOrderItemType", + "$Partner": "_SalesOrder" + } }, - "clientonly.sample": { - "$Alias": "client", - "SalesOrderType": { - "$Kind": "EntityType", - "$Key": [ - "SalesOrder" - ], - "SalesOrder": { - "$MaxLength": 32 - }, - "_Item": { - "$Kind": "NavigationProperty", - "$Collection": true, - "$Type": "client.SalesOrderItemType", - "$Partner": "_SalesOrder" - } - }, - "SalesOrderItemType": { - "$Kind": "EntityType", - "@Offline.ClientOnly": true, - "$Key": [ - "SalesOrder", - "SalesOrderItem" - ], - "SalesOrder": { - "$MaxLength": 32 - }, - "SalesOrderItem": { - "$MaxLength": 6 - }, - "_SalesOrder": { - "$Kind": "NavigationProperty", - "$Type": "client.SalesOrderType", - "$Partner": "_Item", - "$ReferentialConstraint": { - "SalesOrder": "SalesOrder" - } - } - }, - "container": { - "$Kind": "EntityContainer", - "SalesOrder": { - "$Collection": true, - "$Type": "client.SalesOrderType", - "$NavigationPropertyBinding": { - "_Item": "SalesOrderItem" - } - }, - "SalesOrderItem": { - "$Collection": true, - "$Type": "client.SalesOrderItem" - } - }, - "$Annotations": { - "client.SalesOrderType": { - "@Offline.ClientOnly": true - }, - "client.container/SalesOrder": { - "@Offline.ClientOnly": true - } - } + "SalesOrderItemType": { + "$Kind": "EntityType", + "@Offline.ClientOnly": true, + "$Key": ["SalesOrder", "SalesOrderItem"], + "SalesOrder": { "$MaxLength": 32 }, + "SalesOrderItem": { "$MaxLength": 6 }, + "_SalesOrder": { + "$Kind": "NavigationProperty", + "$Type": "client.SalesOrderType", + "$Partner": "_Item", + "$ReferentialConstraint": { "SalesOrder": "SalesOrder" } + } }, - "$EntityContainer": "clientonly.sample.container" -} \ No newline at end of file + "container": { + "$Kind": "EntityContainer", + "SalesOrder": { + "$Collection": true, + "$Type": "client.SalesOrderType", + "$NavigationPropertyBinding": { "_Item": "SalesOrderItem" } + }, + "SalesOrderItem": { "$Collection": true, "$Type": "client.SalesOrderItem" } + }, + "$Annotations": { + "client.SalesOrderType": { "@Offline.ClientOnly": true }, + "client.container/SalesOrder": { "@Offline.ClientOnly": true } + } + }, + "$EntityContainer": "clientonly.sample.container" +} diff --git a/examples/PDF.Features-examples.json b/examples/PDF.Features-examples.json index 8fff9c9d..c03ad874 100644 --- a/examples/PDF.Features-examples.json +++ b/examples/PDF.Features-examples.json @@ -1,46 +1,33 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/PDF.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.PDF.v1", - "$Alias": "PDF" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "PDF.examples": { - "Container": { - "$Kind": "EntityContainer", - "@Core.Description": "Imagine some entity sets here" - }, - "$Annotations": { - "PDF.examples/Container": { - "@PDF.Features": { - "DocumentDescriptionReference": "../../../../default/iwbep/common/0001/$metadata", - "DocumentDescriptionCollection": "MyDocumentDescriptions", - "ArchiveFormat": true, - "Signature": true, - "CoverPage": true, - "FontSize": true, - "FontName": true, - "Margin": true, - "Border": true, - "FitToPage": false, - "ResultSizeDefault": 5000, - "ResultSizeMaximum": 50000 - } - } + "https://sap.github.io/odata-vocabularies/vocabularies/PDF.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.PDF.v1", "$Alias": "PDF" }] + } + }, + "PDF.examples": { + "Container": { "$Kind": "EntityContainer", "@Core.Description": "Imagine some entity sets here" }, + "$Annotations": { + "PDF.examples/Container": { + "@PDF.Features": { + "DocumentDescriptionReference": "../../../../default/iwbep/common/0001/$metadata", + "DocumentDescriptionCollection": "MyDocumentDescriptions", + "ArchiveFormat": true, + "Signature": true, + "CoverPage": true, + "FontSize": true, + "FontName": true, + "Margin": true, + "Border": true, + "FitToPage": false, + "ResultSizeDefault": 5000, + "ResultSizeMaximum": 50000 } - }, - "$EntityContainer": "PDF.examples.Container" -} \ No newline at end of file + } + } + }, + "$EntityContainer": "PDF.examples.Container" +} diff --git a/examples/UI.IsCopyAction-sample.json b/examples/UI.IsCopyAction-sample.json index 0e437ba8..c1c96b19 100644 --- a/examples/UI.IsCopyAction-sample.json +++ b/examples/UI.IsCopyAction-sample.json @@ -1,85 +1,44 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/UI.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.UI.v1", - "$Alias": "UI" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "UI.examples": { - "$Alias": "this", - "container": { - "$Kind": "EntityContainer", - "SalesOrder": { - "$Collection": true, - "$Type": "this.SalesOrder_Type" - } - }, - "SalesOrder_Type": { - "$Kind": "EntityType", - "$Key": [ - "SalesOrder" - ], - "SalesOrder": { - "$MaxLength": 10 - }, - "canBeCopied": { - "$Type": "Edm.Boolean", - "$Nullable": true - }, - "hideCopyButton": { - "$Type": "Edm.Boolean", - "$Nullable": true - } - }, - "Copy": [ - { - "$Kind": "Action", - "$IsBound": true, - "$Parameter": [ - { - "$Name": "it", - "$Type": "this.SalesOrder_Type", - "$Nullable": true - } - ], - "$ReturnType": { - "$Type": "this.SalesOrder_Type", - "$Nullable": true - } - } - ], - "$Annotations": { - "this.Copy": { - "@Core.OperationAvailable": { - "$Path": "it/canBeCopied" - } - }, - "this.SalesOrder_Type": { - "@UI.LineItem": [ - { - "@odata.type": "https://sap.github.io/odata-vocabularies/vocabularies/UI.xml#UI.DataFieldForAction", - "@UI.Hidden": { - "$Path": "hideCopyButton" - }, - "@UI.IsCopyAction": true, - "Action": "this.Copy" - } - ] - } - } + "https://sap.github.io/odata-vocabularies/vocabularies/UI.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.UI.v1", "$Alias": "UI" }] + } + }, + "UI.examples": { + "$Alias": "this", + "container": { "$Kind": "EntityContainer", "SalesOrder": { "$Collection": true, "$Type": "this.SalesOrder_Type" } }, + "SalesOrder_Type": { + "$Kind": "EntityType", + "$Key": ["SalesOrder"], + "SalesOrder": { "$MaxLength": 10 }, + "canBeCopied": { "$Type": "Edm.Boolean", "$Nullable": true }, + "hideCopyButton": { "$Type": "Edm.Boolean", "$Nullable": true } }, - "$EntityContainer": "UI.examples.container" -} \ No newline at end of file + "Copy": [ + { + "$Kind": "Action", + "$IsBound": true, + "$Parameter": [{ "$Name": "it", "$Type": "this.SalesOrder_Type", "$Nullable": true }], + "$ReturnType": { "$Type": "this.SalesOrder_Type", "$Nullable": true } + } + ], + "$Annotations": { + "this.Copy": { "@Core.OperationAvailable": { "$Path": "it/canBeCopied" } }, + "this.SalesOrder_Type": { + "@UI.LineItem": [ + { + "@odata.type": "https://sap.github.io/odata-vocabularies/vocabularies/UI.xml#UI.DataFieldForAction", + "@UI.Hidden": { "$Path": "hideCopyButton" }, + "@UI.IsCopyAction": true, + "Action": "this.Copy" + } + ] + } + } + }, + "$EntityContainer": "UI.examples.container" +} diff --git a/examples/_vocab.Term-examples.json b/examples/_vocab.Term-examples.json index cbfef503..15aefdf8 100644 --- a/examples/_vocab.Term-examples.json +++ b/examples/_vocab.Term-examples.json @@ -1,22 +1,12 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/_vocab.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies._vocab.v1", - "$Alias": "_vocab" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "_vocab.examples": {} -} \ No newline at end of file + "https://sap.github.io/odata-vocabularies/vocabularies/_vocab.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies._vocab.v1", "$Alias": "_vocab" }] + } + }, + "_vocab.examples": {} +} diff --git a/lib/transform.js b/lib/transform.js index c3e51f44..eb2acf04 100644 --- a/lib/transform.js +++ b/lib/transform.js @@ -5,6 +5,9 @@ const csdl = require("odata-csdl"); const lib = require("odata-vocabularies"); const fs = require("fs"); const colors = require("colors/safe"); +const prettier = require("prettier"); + +const PRETTIER_OPTIONS = { parser: "json", printWidth: 120 }; const vocabFolder = "./vocabularies/"; const exampleFolder = "./examples/"; @@ -44,7 +47,7 @@ fs.readdirSync(vocabFolder) } fs.writeFileSync( vocabFolder + vocab + ".json", - JSON.stringify(json, omitLineNumbers, 4) + prettier.format(JSON.stringify(json, omitLineNumbers), PRETTIER_OPTIONS) ); const markdown = lib.csdl2markdown(xmlfile, json); @@ -77,7 +80,7 @@ fs.readdirSync(exampleFolder) fs.writeFileSync( exampleFolder + example + ".json", - JSON.stringify(json, null, 4) + prettier.format(JSON.stringify(json), PRETTIER_OPTIONS) ); }); diff --git a/package-lock.json b/package-lock.json index 74b2930e..abe4e0c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,8 @@ "odata-vocabularies": "github:oasis-tcs/odata-vocabularies" }, "devDependencies": { - "eslint": "^8.23.0" + "eslint": "^8.23.0", + "prettier": "^2.8.1" } }, "node_modules/@eslint/eslintrc": { @@ -1069,6 +1070,21 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -2118,6 +2134,12 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prettier": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", + "dev": true + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", diff --git a/package.json b/package.json index d211ce39..3389cff3 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "odata-vocabularies": "github:oasis-tcs/odata-vocabularies" }, "devDependencies": { - "eslint": "^8.23.0" + "eslint": "^8.23.0", + "prettier": "^2.8.1" }, "scripts": { "build": "node lib/transform.js" diff --git a/vocabularies/Analytics.json b/vocabularies/Analytics.json index acbf444c..350c4876 100644 --- a/vocabularies/Analytics.json +++ b/vocabularies/Analytics.json @@ -1,219 +1,166 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Aggregation.V1", - "$Alias": "Aggregation" - } - ] - }, - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Validation.V1", - "$Alias": "Validation" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] + }, + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Aggregation.V1", "$Alias": "Aggregation" }] + }, + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Validation.V1", "$Alias": "Validation" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] + } + }, + "com.sap.vocabularies.Analytics.v1": { + "$Alias": "Analytics", + "@Core.Description": "Terms for annotating analytical resources", + "@Core.Description#Published": "2017-02-15 © Copyright 2013 SAP AG. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Analytics.md" } + ], + "Dimension": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "$BaseTerm": "Aggregation.Groupable", + "@Core.Revisions": [ + { + "Kind": "Deprecated", + "Description": "Deprecated in favor of [`AnalyticalContext/Dimension`](#AnalyticalContext)" } + ], + "@Core.Description": "A property holding the key of a dimension in an analytical context" }, - "com.sap.vocabularies.Analytics.v1": { - "$Alias": "Analytics", - "@Core.Description": "Terms for annotating analytical resources", - "@Core.Description#Published": "2017-02-15 © Copyright 2013 SAP AG. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Analytics.md" - } - ], - "Dimension": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "$BaseTerm": "Aggregation.Groupable", - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Deprecated in favor of [`AnalyticalContext/Dimension`](#AnalyticalContext)" - } - ], - "@Core.Description": "A property holding the key of a dimension in an analytical context" - }, - "Measure": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "$BaseTerm": "Aggregation.Aggregatable", - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Deprecated in favor of [`AnalyticalContext/Measure`](#AnalyticalContext)" - } - ], - "@Core.Description": "A property holding the numeric value of a measure in an analytical context" - }, - "AccumulativeMeasure": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$BaseTerm": "Analytics.Measure", - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Deprecated in favor of [`AnalyticalContext/AccumulativeMeasure`](#AnalyticalContext)" - } - ], - "@Core.Description": "The measure has non-negative and additive values; it can be used in whole-part charts, e.g. the Donut" - }, - "RolledUpPropertyCount": { - "$Kind": "Term", - "$Type": "Edm.Int16", - "@Common.Experimental": true, - "@Core.Description": "Number of properties in the entity instance that have been aggregated away" - }, - "DrillURL": { - "$Kind": "Term", - "$AppliesTo": [ - "EntityType" - ], - "@Common.Experimental": true, - "@Core.Description": "\n URL to retrieve more detailed data related to a node of a recursive hierarchy.\n Annotations with this term MUST include a qualifier to select the hierarchy for which the drill URL is provided.\n ", - "@Core.IsURL": true - }, - "PlanningAction": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "ActionImport" - ], - "@Common.Experimental": true, - "@Core.Description": " Processes or generates plan data. Its logic may have side-effects on entity sets.\n " - }, - "AggregatedProperties": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Analytics.AggregatedPropertyType", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Deprecated in favor of [`AggregatedProperty`](#AggregatedProperty)" - } - ], - "@Core.Description": "Dynamic properties for aggregate expressions with specified aggregation method defined on the annotated entity type.", - "@Core.LongDescription": "\n Other annotations may refer in property paths to dynamic properties declared in any AgrgegatedProperties annotation of the \n given entity type to leverage the results of the aggregate expression determined in the context of an entity collection of \n the annotated type.\n " - }, - "AggregatedProperty": { - "$Kind": "Term", - "$Type": "Analytics.AggregatedPropertyType", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Dynamic property for aggregate expression with specified aggregation method defined on the annotated entity type." - }, - "AggregatedPropertyType": { - "$Kind": "ComplexType", - "Name": { - "$Type": "Core.SimpleIdentifier", - "@Core.Description": "Name of the dynamic property holding the aggregated value." - }, - "AggregationMethod": { - "$Type": "Aggregation.AggregationMethod", - "@Core.Description": "Name of the standard or custom aggregation method to be applied." - }, - "AggregatableProperty": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Property whose values shall be aggregated." - }, - "@Validation.ApplicableTerms": [ - "Common.Label" - ] - }, - "AnalyticalContext": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Analytics.AnalyticalContextType", - "$AppliesTo": [ - "Collection" - ], - "@Core.AppliesViaContainer": true, - "@Core.Description": "Collection of properties that define an analytical context" - }, - "AnalyticalContextType": { - "$Kind": "ComplexType", - "@Core.Description": "Exactly one of `Property` and `DynamicProperty` must be present", - "Property": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Core.Description": "Property that is part of the analytical context" - }, - "DynamicProperty": { - "$Type": "Edm.AnnotationPath", - "$Nullable": true, - "@Core.Description": "Dynamic property introduced by annotations that is part of the analytical context", - "@Validation.AllowedTerms": [ - "Analytics.AggregatedProperty", - "Aggregation.CustomAggregate" - ] - }, - "Dimension": { - "$Type": "Core.Tag", - "$DefaultValue": true, - "@Core.Description": "The property holds the key of a dimension" - }, - "Measure": { - "$Type": "Core.Tag", - "$DefaultValue": true, - "@Core.Description": "The property holds the numeric value of a measure" - }, - "AccumulativeMeasure": { - "$Type": "Core.Tag", - "$DefaultValue": true, - "@Core.Description": "The measure has non-negative and additive values; it can be used in whole-part charts, e.g. the Donut" - } - }, - "$Annotations": { - "Aggregation.CustomAggregate": { - "@Validation.ApplicableTerms@Core.Description": "Adding a list of other terms that can be annotated to it.", - "@Validation.ApplicableTerms": [ - "Common.Label" - ] - } + "Measure": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "$BaseTerm": "Aggregation.Aggregatable", + "@Core.Revisions": [ + { + "Kind": "Deprecated", + "Description": "Deprecated in favor of [`AnalyticalContext/Measure`](#AnalyticalContext)" } + ], + "@Core.Description": "A property holding the numeric value of a measure in an analytical context" + }, + "AccumulativeMeasure": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$BaseTerm": "Analytics.Measure", + "@Core.Revisions": [ + { + "Kind": "Deprecated", + "Description": "Deprecated in favor of [`AnalyticalContext/AccumulativeMeasure`](#AnalyticalContext)" + } + ], + "@Core.Description": "The measure has non-negative and additive values; it can be used in whole-part charts, e.g. the Donut" + }, + "RolledUpPropertyCount": { + "$Kind": "Term", + "$Type": "Edm.Int16", + "@Common.Experimental": true, + "@Core.Description": "Number of properties in the entity instance that have been aggregated away" + }, + "DrillURL": { + "$Kind": "Term", + "$AppliesTo": ["EntityType"], + "@Common.Experimental": true, + "@Core.Description": "\n URL to retrieve more detailed data related to a node of a recursive hierarchy.\n Annotations with this term MUST include a qualifier to select the hierarchy for which the drill URL is provided.\n ", + "@Core.IsURL": true + }, + "PlanningAction": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["ActionImport"], + "@Common.Experimental": true, + "@Core.Description": " Processes or generates plan data. Its logic may have side-effects on entity sets.\n " + }, + "AggregatedProperties": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Analytics.AggregatedPropertyType", + "$AppliesTo": ["EntityType"], + "@Core.Revisions": [ + { "Kind": "Deprecated", "Description": "Deprecated in favor of [`AggregatedProperty`](#AggregatedProperty)" } + ], + "@Core.Description": "Dynamic properties for aggregate expressions with specified aggregation method defined on the annotated entity type.", + "@Core.LongDescription": "\n Other annotations may refer in property paths to dynamic properties declared in any AgrgegatedProperties annotation of the \n given entity type to leverage the results of the aggregate expression determined in the context of an entity collection of \n the annotated type.\n " + }, + "AggregatedProperty": { + "$Kind": "Term", + "$Type": "Analytics.AggregatedPropertyType", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Dynamic property for aggregate expression with specified aggregation method defined on the annotated entity type." + }, + "AggregatedPropertyType": { + "$Kind": "ComplexType", + "Name": { + "$Type": "Core.SimpleIdentifier", + "@Core.Description": "Name of the dynamic property holding the aggregated value." + }, + "AggregationMethod": { + "$Type": "Aggregation.AggregationMethod", + "@Core.Description": "Name of the standard or custom aggregation method to be applied." + }, + "AggregatableProperty": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Property whose values shall be aggregated." + }, + "@Validation.ApplicableTerms": ["Common.Label"] + }, + "AnalyticalContext": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Analytics.AnalyticalContextType", + "$AppliesTo": ["Collection"], + "@Core.AppliesViaContainer": true, + "@Core.Description": "Collection of properties that define an analytical context" + }, + "AnalyticalContextType": { + "$Kind": "ComplexType", + "@Core.Description": "Exactly one of `Property` and `DynamicProperty` must be present", + "Property": { + "$Type": "Edm.PropertyPath", + "$Nullable": true, + "@Core.Description": "Property that is part of the analytical context" + }, + "DynamicProperty": { + "$Type": "Edm.AnnotationPath", + "$Nullable": true, + "@Core.Description": "Dynamic property introduced by annotations that is part of the analytical context", + "@Validation.AllowedTerms": ["Analytics.AggregatedProperty", "Aggregation.CustomAggregate"] + }, + "Dimension": { + "$Type": "Core.Tag", + "$DefaultValue": true, + "@Core.Description": "The property holds the key of a dimension" + }, + "Measure": { + "$Type": "Core.Tag", + "$DefaultValue": true, + "@Core.Description": "The property holds the numeric value of a measure" + }, + "AccumulativeMeasure": { + "$Type": "Core.Tag", + "$DefaultValue": true, + "@Core.Description": "The measure has non-negative and additive values; it can be used in whole-part charts, e.g. the Donut" + } + }, + "$Annotations": { + "Aggregation.CustomAggregate": { + "@Validation.ApplicableTerms@Core.Description": "Adding a list of other terms that can be annotated to it.", + "@Validation.ApplicableTerms": ["Common.Label"] + } } -} \ No newline at end of file + } +} diff --git a/vocabularies/CodeList.json b/vocabularies/CodeList.json index f7aaa88b..ec1784c6 100644 --- a/vocabularies/CodeList.json +++ b/vocabularies/CodeList.json @@ -1,95 +1,64 @@ { - "$Version": "4.01", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.01", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "com.sap.vocabularies.CodeList.v1": { - "$Alias": "CodeList", - "@Core.Description": "Terms for Code Lists", - "@Core.Description#Published": "2018-12-04 © Copyright 2018 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/CodeList.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/CodeList.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/CodeList.md" - } - ], - "CurrencyCodes": { - "$Kind": "Term", - "$Type": "CodeList.CodeListSource", - "$AppliesTo": [ - "EntityContainer" - ], - "@Core.Description": "An entity set containing the code list for currencies" - }, - "UnitsOfMeasure": { - "$Kind": "Term", - "$Type": "CodeList.CodeListSource", - "$AppliesTo": [ - "EntityContainer" - ], - "@Core.Description": "An entity set containing the code list for units of measure" - }, - "CodeListSource": { - "$Kind": "ComplexType", - "@Core.Description": "An entity set containing the code list for currencies", - "Url": { - "@Core.IsURL": true, - "@Core.Description": "URL of a CSDL document describing an entity set for a code list" - }, - "CollectionPath": { - "@Core.Description": "Name of the entity set for the code list" - } - }, - "StandardCode": { - "$Kind": "Term", - "$Type": "Edm.PropertyPath", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Core.Description": "Property containing standard code values" - }, - "ExternalCode": { - "$Kind": "Term", - "$Type": "Edm.PropertyPath", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Core.Description": "Property containing code values that can be used for visualization", - "@Core.LongDescription": "The annotated property contains values that are not intended for visualization and should thus stay hidden from end-users. Instead the values of the referenced properties are used for visualization." - }, - "IsConfigurationDeprecationCode": { - "$Kind": "Term", - "$Type": "Edm.Boolean", - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property contains a Configuration Deprecation Code", - "@Core.LongDescription": "The Configuration Deprecation Code indicates whether a code list value is valid (deprecation code is empty/space), deprecated (deprecation code `W`), or revoked (deprecation code `E`). " - } + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] } -} \ No newline at end of file + }, + "com.sap.vocabularies.CodeList.v1": { + "$Alias": "CodeList", + "@Core.Description": "Terms for Code Lists", + "@Core.Description#Published": "2018-12-04 © Copyright 2018 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/CodeList.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/CodeList.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/CodeList.md" } + ], + "CurrencyCodes": { + "$Kind": "Term", + "$Type": "CodeList.CodeListSource", + "$AppliesTo": ["EntityContainer"], + "@Core.Description": "An entity set containing the code list for currencies" + }, + "UnitsOfMeasure": { + "$Kind": "Term", + "$Type": "CodeList.CodeListSource", + "$AppliesTo": ["EntityContainer"], + "@Core.Description": "An entity set containing the code list for units of measure" + }, + "CodeListSource": { + "$Kind": "ComplexType", + "@Core.Description": "An entity set containing the code list for currencies", + "Url": { + "@Core.IsURL": true, + "@Core.Description": "URL of a CSDL document describing an entity set for a code list" + }, + "CollectionPath": { "@Core.Description": "Name of the entity set for the code list" } + }, + "StandardCode": { + "$Kind": "Term", + "$Type": "Edm.PropertyPath", + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Core.Description": "Property containing standard code values" + }, + "ExternalCode": { + "$Kind": "Term", + "$Type": "Edm.PropertyPath", + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Core.Description": "Property containing code values that can be used for visualization", + "@Core.LongDescription": "The annotated property contains values that are not intended for visualization and should thus stay hidden from end-users. Instead the values of the referenced properties are used for visualization." + }, + "IsConfigurationDeprecationCode": { + "$Kind": "Term", + "$Type": "Edm.Boolean", + "$AppliesTo": ["Property"], + "@Core.Description": "Property contains a Configuration Deprecation Code", + "@Core.LongDescription": "The Configuration Deprecation Code indicates whether a code list value is valid (deprecation code is empty/space), deprecated (deprecation code `W`), or revoked (deprecation code `E`). " + } + } +} diff --git a/vocabularies/Common.json b/vocabularies/Common.json index 92cdaddf..cbd367c5 100644 --- a/vocabularies/Common.json +++ b/vocabularies/Common.json @@ -1,1629 +1,1279 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Validation.V1", - "$Alias": "Validation" - } - ] - }, - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Aggregation.V1", - "$Alias": "Aggregation" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/UI.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.UI.v1", - "$Alias": "UI" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Analytics.v1", - "$Alias": "Analytics" - } - ] + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] + }, + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Validation.V1", "$Alias": "Validation" }] + }, + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Aggregation.V1", "$Alias": "Aggregation" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/UI.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.UI.v1", "$Alias": "UI" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Analytics.v1", "$Alias": "Analytics" }] + } + }, + "com.sap.vocabularies.Common.v1": { + "$Alias": "Common", + "@Core.Description": "Common terms for all SAP vocabularies", + "@Core.Description#Published": "2017-02-15 © Copyright 2013 SAP SE. All rights reserved.", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Common.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Common.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Common.md" } + ], + "Experimental": { + "$Kind": "Term", + "$Nullable": true, + "@Core.Description": "Terms, types, and properties annotated with this term are experimental and can be changed incompatibly or removed completely any time without prior warning.", + "@Core.LongDescription": "Do not use or rely on experimental terms, types, and properties in production environments." + }, + "ServiceVersion": { + "$Kind": "Term", + "$Type": "Edm.Int32", + "$AppliesTo": ["Schema"], + "@Core.Description": "1 for first version of a service, incremented when schema changes incompatibly and service is published with a different URI" + }, + "ServiceSchemaVersion": { + "$Kind": "Term", + "$Type": "Edm.Int32", + "$AppliesTo": ["Schema"], + "@Core.Description": "0 for first schema version within a service version, incremented when schema changes compatibly" + }, + "Label": { + "$Kind": "Term", + "@Core.Description": "A short, human-readable text suitable for labels and captions in UIs", + "@Core.IsLanguageDependent": true + }, + "Heading": { + "$Kind": "Term", + "@Core.Description": "A short, human-readable text suitable for column headings in UIs", + "@Core.IsLanguageDependent": true + }, + "QuickInfo": { + "$Kind": "Term", + "@Core.Description": "A short, human-readable text suitable for tool tips in UIs", + "@Core.IsLanguageDependent": true + }, + "Text": { + "$Kind": "Term", + "$Nullable": true, + "$AppliesTo": ["Property"], + "@Core.Description": "A descriptive text for values of the annotated property. Value MUST be a dynamic expression when used as metadata annotation.", + "@Core.IsLanguageDependent": true + }, + "TextFor": { + "$Kind": "Term", + "$Type": "Edm.PropertyPath", + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Core.RequiresType": "Edm.String", + "@Core.Description": "The annotated property contains a descriptive text for values of the referenced property." + }, + "ExternalID": { + "$Kind": "Term", + "$Nullable": true, + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Core.Description": "A human readable identifier for values of the annotated property. Value MUST be a dynamic expression when used as metadata annotation.", + "@Core.LongDescription": "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." + }, + "IsLanguageIdentifier": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Core.Description": "An identifier to distinguish multiple texts in different languages for the same entity" + }, + "TextFormat": { + "$Kind": "Term", + "$Type": "Common.TextFormatType", + "$AppliesTo": ["Property", "Parameter", "ReturnType"], + "@Core.Description": "The annotated property, parameter, or return type contains human-readable text that may contain formatting information", + "@Core.RequiresType": "Edm.String" + }, + "TextFormatType": { + "$Kind": "EnumType", + "plain": 0, + "plain@Core.Description": "Plain text, line breaks represented as the character 0x0A", + "html": 1, + "html@Core.Description": "Plain text with markup that can validly appear directly within an HTML DIV element" + }, + "Timezone": { + "$Kind": "Term", + "$Nullable": true, + "$AppliesTo": ["Property", "Parameter"], + "@Common.Experimental": true, + "@Core.Description": "The point in time represented by the annotated property or parameter shall be interpreted in the given time zone", + "@Core.LongDescription": "Time zones shall be specified according to the [IANA](https://www.iana.org/time-zones) standard.\n 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.", + "@Core.RequiresType": "Edm.DateTimeOffset" + }, + "IsDigitSequence": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property", "Parameter"], + "@Core.Description": "Contains only digits", + "@Core.RequiresType": "Edm.String" + }, + "IsUpperCase": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property", "Parameter"], + "@Core.Description": "Contains just uppercase characters", + "@Core.RequiresType": "Edm.String" + }, + "IsCurrency": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property", "Parameter"], + "@Core.Description": "Annotated property or parameter is a currency code" + }, + "IsUnit": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property", "Parameter"], + "@Core.Description": "Annotated property or parameter is a unit of measure" + }, + "UnitSpecificScale": { + "$Kind": "Term", + "$Type": "Edm.PrimitiveType", + "$AppliesTo": ["Property"], + "@Core.Description": "The number of fractional decimal digits of a currency amount or measured quantity", + "@Core.LongDescription": "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." + }, + "UnitSpecificPrecision": { + "$Kind": "Term", + "$Type": "Edm.PrimitiveType", + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Core.Description": "The number of significant decimal digits of a currency amount or measured quantity", + "@Core.LongDescription": "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." + }, + "SecondaryKey": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Edm.PropertyPath", + "$AppliesTo": ["EntityType"], + "@Core.Revisions": [ + { "Kind": "Deprecated", "Description": "Use term `AlternateKeys` from the OASIS Core vocabulary instead" } + ], + "@Core.Description": "The listed properties form a secondary key. Multiple secondary keys are possible using different qualifiers." + }, + "MinOccurs": { + "$Kind": "Term", + "$Type": "Edm.Int64", + "$AppliesTo": ["NavigationProperty", "Property", "EntitySet", "Term", "Parameter"], + "@Core.Description": "The annotated set or collection contains at least this number of items" + }, + "MaxOccurs": { + "$Kind": "Term", + "$Type": "Edm.Int64", + "$AppliesTo": ["NavigationProperty", "Property", "EntitySet", "Term", "Parameter"], + "@Core.Description": "The annotated set or collection contains at most this number of items" + }, + "AssociationEntity": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Edm.NavigationPropertyPath", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Entity representing an n:m association with attributes", + "@Common.MinOccurs": 2 + }, + "DerivedNavigation": { + "$Kind": "Term", + "$Type": "Edm.NavigationPropertyPath", + "$AppliesTo": ["NavigationProperty"], + "@Core.Description": "Shortcut for a multi-segment navigation, contains the long path with all its segments" + }, + "Masked": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Revisions@Common.Experimental": true, + "@Core.Revisions": [{ "Kind": "Deprecated", "Description": "Use terms `MaskedValue` instead" }], + "@Core.Description": "Property contains sensitive data that should by default be masked on a UI and clear-text visible only upon user interaction" + }, + "MaskedValue": { + "$Kind": "Term", + "$Nullable": true, + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Common.IsInstanceAnnotation": true, + "@Core.Description": "Property contains sensitive data that is by default not transferred", + "@Core.LongDescription": "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." + }, + "RevealOnDemand": { + "$Kind": "Term", + "$Type": "Edm.Boolean", + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Common.IsInstanceAnnotation": true, + "@Core.Description": "Unmasked data for this property can be requested with custom query option `masked-values=false`" + }, + "SemanticObject": { + "$Kind": "Term", + "$Nullable": true, + "$AppliesTo": ["EntitySet", "EntityType", "Property", "NavigationProperty"], + "@Core.Description": "Name of the Semantic Object represented as this entity type or identified by this property" + }, + "SemanticObjectMapping": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Common.SemanticObjectMappingType", + "$AppliesTo": ["EntitySet", "EntityType", "Property"], + "$BaseTerm": "Common.SemanticObject", + "@Core.Description": "Maps properties of the annotated entity type or sibling properties of the annotated property to properties of the Semantic Object", + "@Core.LongDescription": "This allows \"renaming\" 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 \"local\" name." + }, + "SemanticObjectMappingType": { + "$Kind": "ComplexType", + "@Core.Description": "Maps a property of the annotated entity type or a sibling property of the annotated property to a property of the Semantic Object", + "LocalProperty": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Path to a local property that provides the value for the Semantic Object property" + }, + "SemanticObjectProperty": { "@Core.Description": "Name of the Semantic Object property" } + }, + "SemanticObjectUnavailableActions": { + "$Kind": "Term", + "$Collection": true, + "$AppliesTo": ["EntitySet", "EntityType", "Property"], + "$BaseTerm": "Common.SemanticObject", + "@Core.Description": "List of actions that are not available in the current state of the instance of the Semantic Object" + }, + "IsInstanceAnnotation": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Term"], + "@Core.Description": "Term can also be used as instance annotation; AppliesTo of this term specifies where it can be applied" + }, + "FilterExpressionRestrictions": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Common.FilterExpressionRestrictionType", + "$AppliesTo": ["EntitySet"], + "@Core.Description": "These properties only allow a subset of expressions", + "@Core.Revisions": [{ "Kind": "Deprecated", "Description": "Use term Capabilities.FilterRestrictions instead" }] + }, + "FilterExpressionRestrictionType": { + "$Kind": "ComplexType", + "@Core.Revisions": [{ "Kind": "Deprecated", "Description": "Use term Capabilities.FilterRestrictions instead" }], + "Property": { "$Type": "Edm.PropertyPath", "$Nullable": true }, + "AllowedExpressions": { "$Type": "Common.FilterExpressionType", "$Nullable": true } + }, + "FilterExpressionType": { + "$Kind": "EnumType", + "@Core.Revisions": [{ "Kind": "Deprecated", "Description": "Use term Capabilities.FilterRestrictions instead" }], + "SingleValue": 0, + "SingleValue@Core.Description": "a single 'eq' clause", + "MultiValue": 1, + "MultiValue@Core.Description": "one or more 'eq' clauses, separated by 'or'", + "SingleInterval": 2, + "SingleInterval@Core.Description": "at most one 'ge' and one 'le' clause, separated by 'and', alternatively a single 'eq' clause" + }, + "FieldControl": { + "$Kind": "Term", + "$Type": "Common.FieldControlType", + "$Nullable": true, + "$DefaultValue": "Optional", + "$AppliesTo": ["Property", "Parameter", "Record", "EntityType"], + "@Core.Description": "Control state of a property, parameter, or the media stream of a media entity", + "@Core.LongDescription": "This term can be used for static field control, providing an enumeration member value in $metadata, as well as dynamically, providing a `Path` expression.\n\nIn 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.", + "@Common.IsInstanceAnnotation": true + }, + "FieldControlType": { + "$Kind": "EnumType", + "$UnderlyingType": "Edm.Byte", + "@Core.Description": "Control state of a property", + "Mandatory": 7, + "Mandatory@Core.Description": "Property is mandatory from a business perspective", + "Mandatory@Core.LongDescription": "This annotation value does not imply any restrictions on the value range of the property. For restricting the value range use e.g. the standard type facet `Nullable` with a value of `false` to exclude the `null` value, or terms from the [Validation vocabulary](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Validation.V1.md).", + "Optional": 3, + "Optional@Core.Description": "Property may have a value", + "Optional@Core.LongDescription": "This value does not make sense as a static annotation value.", + "ReadOnly": 1, + "ReadOnly@Core.Description": "Property value cannot be changed", + "ReadOnly@Core.LongDescription": "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", + "Inapplicable": 0, + "Inapplicable@Core.Description": "Property has no meaning in the current entity state", + "Inapplicable@Core.LongDescription": "This value does not make sense as a static annotation value.\n\nExample 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.", + "Hidden": 0, + "Hidden@Core.Description": "Deprecated synonymn for Inapplicable, do not use", + "Hidden@Core.LongDescription": "To statically hide a property on a UI use [UI.Hidden](UI.md#Hidden) instead" + }, + "ExceptionCategory": { + "$Kind": "Term", + "@Common.Experimental": true, + "@Core.Description": "A machine-readable exception category", + "@Common.IsInstanceAnnotation": true + }, + "Application": { + "$Kind": "Term", + "$Type": "Common.ApplicationType", + "@Common.Experimental": true, + "@Core.Description": "...", + "@Common.IsInstanceAnnotation": true + }, + "ApplicationType": { + "$Kind": "ComplexType", + "@Common.Experimental": true, + "Component": { "$Nullable": true, "@Core.Description": "Software component of service implementation" }, + "ServiceRepository": { "$Nullable": true, "@Core.Description": "..." }, + "ServiceId": { "$Nullable": true, "@Core.Description": "..." }, + "ServiceVersion": { "$Nullable": true, "@Core.Description": "..." } + }, + "Timestamp": { + "$Kind": "Term", + "$Type": "Edm.DateTimeOffset", + "$Precision": 0, + "@Common.Experimental": true, + "@Core.Description": "...", + "@Common.IsInstanceAnnotation": true + }, + "TransactionId": { + "$Kind": "Term", + "@Common.Experimental": true, + "@Core.Description": "...", + "@Common.IsInstanceAnnotation": true + }, + "ErrorResolution": { + "$Kind": "Term", + "$Type": "Common.ErrorResolutionType", + "@Common.Experimental": true, + "@Core.Description": "Hints for resolving this error", + "@Common.IsInstanceAnnotation": true + }, + "ErrorResolutionType": { + "$Kind": "ComplexType", + "@Common.Experimental": true, + "Analysis": { "$Nullable": true, "@Core.Description": "Short hint on how to analyze this error" }, + "Note": { "$Nullable": true, "@Core.Description": "Note for error resolution" }, + "AdditionalNote": { "$Nullable": true, "@Core.Description": "Additional note for error resolution" } + }, + "Messages": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Edm.ComplexType", + "@Core.Description": "Collection of end-user messages", + "@Core.LongDescription": "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.\n\nThe minimum structure is\n\n- `code: Edm.String`\n\n- `message: Edm.String`\n\n- `target: Edm.String nullable`\n\n- `additionalTargets: Collection(Edm.String)`\n\n- `transition: Edm.Boolean`\n\n- `numericSeverity: Edm.Byte`\n\n- `longtextUrl: Edm.String nullable`\n " + }, + "additionalTargets": { + "$Kind": "Term", + "$Collection": true, + "$AppliesTo": ["Record"], + "@Common.Experimental": true, + "@Common.IsInstanceAnnotation": true, + "@Core.Description": "Additional targets for the message", + "@Core.LongDescription": "This instance annotation can be applied to the `error` object and the objects within the `details` array of an OData error response" + }, + "longtextUrl": { + "$Kind": "Term", + "$AppliesTo": ["Record"], + "@Core.IsURL": true, + "@Common.IsInstanceAnnotation": true, + "@Core.Description": "Location of the message long text", + "@Core.LongDescription": "This instance annotation can be applied to the `error` object and the objects within the `details` array of an OData error response" + }, + "numericSeverity": { + "$Kind": "Term", + "$Type": "Common.NumericMessageSeverityType", + "@Common.IsInstanceAnnotation": true, + "@Core.Description": "Classifies an end-user message as info, success, warning, or error", + "@Core.LongDescription": "This instance annotation can be applied to the `error` object and the objects within the `details` array of an OData error response" + }, + "MaximumNumericMessageSeverity": { + "$Kind": "Term", + "$Type": "Common.NumericMessageSeverityType", + "$Nullable": true, + "$AppliesTo": ["EntityType"], + "$BaseTerm": "Common.Messages", + "@Common.Experimental": true, + "@Core.Description": "The maximum severity of all end-user messages attached to an entity, null if no messages are attached", + "@Core.LongDescription": "This metadata annotation can be applied to entity types that are also annotated with term [`Common.Messages`](#Messages)" + }, + "NumericMessageSeverityType": { + "$Kind": "TypeDefinition", + "$UnderlyingType": "Edm.Byte", + "@Core.Description": "Classifies an end-user message as info, success, warning, or error", + "@Validation.AllowedValues": [ + { "Value": 1, "@Core.Description": "Success - no action required" }, + { "Value": 2, "@Core.Description": "Information - no action required" }, + { "Value": 3, "@Core.Description": "Warning - action may be required" }, + { "Value": 4, "@Core.Description": "Error - action is required" } + ] + }, + "IsActionCritical": { + "$Kind": "Term", + "$Type": "Edm.Boolean", + "$DefaultValue": true, + "$AppliesTo": ["Action", "Function", "ActionImport", "FunctionImport"], + "@Core.Description": "Criticality of the function or action to enforce a warning or similar before it's executed" + }, + "Attributes": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Edm.PropertyPath", + "$AppliesTo": ["Property"], + "@Core.Description": "Attributes related to this property, which may occur in denormalized entity types" + }, + "RelatedRecursiveHierarchy": { + "$Kind": "Term", + "$Type": "Edm.AnnotationPath", + "$AppliesTo": ["Property"], + "@Core.Description": "A recursive hierarchy related to this property. The annotation path must end in Aggregation.RecursiveHierarchy." + }, + "Interval": { + "$Kind": "Term", + "$Type": "Common.IntervalType", + "$AppliesTo": ["EntityType", "ComplexType"], + "@Core.Description": "An interval with lower and upper boundaries described by two properties" + }, + "IntervalType": { + "$Kind": "ComplexType", + "LowerBoundary": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Property holding the lower interval boundary" + }, + "LowerBoundaryIncluded": { + "$Type": "Edm.Boolean", + "$DefaultValue": true, + "@Core.Description": "The lower boundary value is included in the interval" + }, + "UpperBoundary": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Property holding the upper interval boundary" + }, + "UpperBoundaryIncluded": { + "$Type": "Edm.Boolean", + "$DefaultValue": true, + "@Core.Description": "The upper boundary value is included in the interval" + } + }, + "ResultContext": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["EntityType"], + "@Core.Description": "The annotated entity type has one or more containment navigation properties.\n An instance of the annotated entity type provides the context required for determining\n the target entity sets reached by these containment navigation properties." + }, + "SAPObjectNodeType": { + "$Kind": "Term", + "$Type": "Common.SAPObjectNodeTypeType", + "$AppliesTo": ["EntityType"], + "@Common.Experimental": true, + "@Core.Description": "The SAP Object Node Type represented by the annotated entity type", + "@Core.LongDescription": "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." + }, + "SAPObjectNodeTypeType": { + "$Kind": "ComplexType", + "@Common.Experimental": true, + "@Core.Description": "Information about an SAP Object Node Type", + "Name": { "@Core.Description": "The name of the SAP Object Node Type" } + }, + "Composition": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["NavigationProperty"], + "@Common.Experimental": true, + "@Core.Description": "The annotated navigation property represents a logical composition, even though it is non-containment", + "@Core.LongDescription": "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." + }, + "SAPObjectNodeTypeReference": { + "$Kind": "Term", + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Core.Description": "The name of the SAP Object Node Type referenced by the annotated property" + }, + "IsNaturalPerson": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["EntityType", "Annotation"], + "@Core.Description": "The annotated entity type (e.g. `Employee`) or annotation (e.g. `IsImageUrl`) represents a natural person" + }, + "ValueList": { + "$Kind": "Term", + "$Type": "Common.ValueListType", + "$AppliesTo": ["Property", "Parameter"], + "@Core.Description": "Specifies how to get a list of acceptable values for a property or parameter", + "@Core.LongDescription": "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." + }, + "ValueListType": { + "$Kind": "ComplexType", + "@Validation.ApplicableTerms": ["Common.QuickInfo"], + "Label": { + "$Nullable": true, + "@Core.IsLanguageDependent": true, + "@Core.Description": "Headline for value list, fallback is the label of the property or parameter" + }, + "CollectionPath": { + "@Core.Description": "Resource path of an OData collection with possible values, relative to CollectionRoot" + }, + "CollectionRoot": { + "$Nullable": true, + "@Core.Description": "Service root of the value list collection; not specified means local to the document containing the annotation" + }, + "DistinctValuesSupported": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "Indicates that the value list supports a 'distinct' aggregation on the value list properties defined via ValueListParameterInOut and ValueListParameterOut" + }, + "SearchSupported": { + "$Type": "Edm.Boolean", + "$DefaultValue": true, + "@Core.Description": "Value list supports the $search query option", + "@Core.LongDescription": "The value of the target property is used as the search expression instead of in $filter" + }, + "FetchValues": { + "$Type": "Common.FetchValuesType", + "$Nullable": true, + "@Core.Description": "Hint on when to fetch values" + }, + "PresentationVariantQualifier": { + "$Type": "Core.SimpleIdentifier", + "$Nullable": true, + "@Core.Description": "Alternative representation of a value help, e.g. as a bar chart", + "@Core.LongDescription": "Qualifier for annotation with term [UI.PresentationVariant](UI.md#PresentationVariant) on the entity set identified via CollectionPath" + }, + "SelectionVariantQualifier": { + "$Type": "Core.SimpleIdentifier", + "$Nullable": true, + "@Core.Description": "Optional combination of parameters and filters to query the value help entity set", + "@Core.LongDescription": "Qualifier for annotation with term [UI.SelectionVariant](UI.md#SelectionVariant) on the entity set identified via CollectionPath" + }, + "Parameters": { + "$Collection": true, + "$Type": "Common.ValueListParameter", + "@Core.Description": "Instructions on how to construct the value list request and consume response properties" + } + }, + "FetchValuesType": { + "$Kind": "TypeDefinition", + "$UnderlyingType": "Edm.Byte", + "@Core.Description": "Hint on when to fetch values", + "@Validation.AllowedValues": [ + { "Value": 1, "@Core.Description": "Fetch values immediately without filter" }, + { "Value": 2, "@Core.Description": "Fetch values with a filter" } + ] + }, + "ValueListRelevantQualifiers": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Core.SimpleIdentifier", + "@Common.Experimental": true, + "@Core.Description": "List of qualifiers of relevant ValueList annotations", + "@Core.LongDescription": "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." + }, + "ValueListWithFixedValues": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property", "Parameter"], + "@Core.Description": "If specified as true, there's only one value list mapping and its value list consists of a small number of fixed values" + }, + "ValueListForValidation": { + "$Kind": "Term", + "$AppliesTo": ["Property", "Parameter"], + "@Common.Experimental": true, + "@Core.Description": "Contains the qualifier of the ValueList or ValueListMapping that should be used for validation" + }, + "ValueListReferences": { + "$Kind": "Term", + "$Collection": true, + "$AppliesTo": ["Property", "Parameter"], + "@Core.IsURL": true, + "@Core.Description": "A list of URLs of CSDL documents containing value list mappings for this parameter or property" + }, + "ValueListMapping": { + "$Kind": "Term", + "$Type": "Common.ValueListMappingType", + "$AppliesTo": ["Property", "Parameter"], + "@Core.Description": "Specifies the mapping between data service properties and value list properties", + "@Core.LongDescription": "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." + }, + "ValueListMappingType": { + "$Kind": "ComplexType", + "@Validation.ApplicableTerms": ["Common.QuickInfo"], + "Label": { + "$Nullable": true, + "@Core.IsLanguageDependent": true, + "@Core.Description": "Headline for value list, fallback is the label of the property or parameter" + }, + "CollectionPath": { + "@Core.Description": "Resource path of an OData collection with possible values, relative to the document containing the value list mapping" + }, + "DistinctValuesSupported": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "Indicates that the value list supports a 'distinct' aggregation on the value list properties defined via ValueListParameterInOut and ValueListParameterOut" + }, + "FetchValues": { + "$Type": "Common.FetchValuesType", + "$Nullable": true, + "@Core.Description": "Hint on when to fetch values" + }, + "PresentationVariantQualifier": { + "$Type": "Core.SimpleIdentifier", + "$Nullable": true, + "@Core.Description": "Alternative representation of a value help, e.g. as a bar chart", + "@Core.LongDescription": "Qualifier for annotation with term [UI.PresentationVariant](UI.md#PresentationVariant) on the value list entity set identified via CollectionPath in the ValueListReference annotation" + }, + "SelectionVariantQualifier": { + "$Type": "Core.SimpleIdentifier", + "$Nullable": true, + "@Core.Description": "Optional combination of parameters and filters to query the value help entity set", + "@Core.LongDescription": "Qualifier for annotation with term [UI.SelectionVariant](UI.md#SelectionVariant) on the entity set identified via CollectionPath" + }, + "Parameters": { + "$Collection": true, + "$Type": "Common.ValueListParameter", + "@Core.Description": "Instructions on how to construct the value list request and consume response properties" + } + }, + "ValueListParameter": { + "$Kind": "ComplexType", + "$Abstract": true, + "ValueListProperty": { + "@Core.Description": "Path to property in the value list . Format is identical to PropertyPath annotations." + } + }, + "ValueListParameterIn": { + "$Kind": "ComplexType", + "$BaseType": "Common.ValueListParameter", + "LocalDataProperty": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Path to property that is used to filter the value list with `eq` comparison" + }, + "InitialValueIsSignificant": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "Initial value, e.g. empty string, is a valid and significant value" + } + }, + "ValueListParameterConstant": { + "$Kind": "ComplexType", + "$BaseType": "Common.ValueListParameter", + "@Common.Experimental": true, + "Constant": { + "$Type": "Edm.PrimitiveType", + "@Core.Description": "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)" + } + }, + "ValueListParameterInOut": { + "$Kind": "ComplexType", + "$BaseType": "Common.ValueListParameter", + "LocalDataProperty": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Path to property that is used to filter the value list with `startswith` comparison and filled from the picked value list item" + }, + "InitialValueIsSignificant": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "Initial value, e.g. empty string, is a valid and significant value" + }, + "@Validation.ApplicableTerms": ["UI.Importance"] + }, + "ValueListParameterOut": { + "$Kind": "ComplexType", + "$BaseType": "Common.ValueListParameter", + "LocalDataProperty": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Path to property that is filled from response" + }, + "@Validation.ApplicableTerms": ["UI.Importance"] + }, + "ValueListParameterDisplayOnly": { + "$Kind": "ComplexType", + "$BaseType": "Common.ValueListParameter", + "@Core.Description": "Value list property that is not used to fill the edited entity", + "@Validation.ApplicableTerms": ["UI.Importance"] + }, + "ValueListParameterFilterOnly": { + "$Kind": "ComplexType", + "$BaseType": "Common.ValueListParameter", + "@Core.Description": "Value list property that is used to filter the value list, not connected to the edited entity", + "@Core.Revisions": [ + { "Kind": "Deprecated", "Description": "All filterable properties of the value list can be used to filter" } + ] + }, + "IsCalendarYear": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a year number as string following the logical pattern (-?)YYYY(Y*) consisting of an optional\n 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})\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsCalendarHalfyear": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a halfyear number as string following the logical pattern H consisting of a single digit.\n The string matches the regex pattern [1-2]\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsCalendarQuarter": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a calendar quarter number as string following the logical pattern Q consisting of a single digit.\n The string matches the regex pattern [1-4]\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsCalendarMonth": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a calendar month number as string following the logical pattern MM consisting of two digits.\n The string matches the regex pattern 0[1-9]|1[0-2]\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsCalendarWeek": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a calendar week number as string following the logical pattern WW consisting of two digits.\n The string matches the regex pattern 0[1-9]|[1-4][0-9]|5[0-3]\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsDayOfCalendarMonth": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Day number relative to a calendar month. Valid values are between 1 and 31.\n ", + "@Core.RequiresType": "Edm.SByte", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsDayOfCalendarYear": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Day number relative to a calendar year. Valid values are between 1 and 366.\n ", + "@Core.RequiresType": "Edm.Int16", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsCalendarYearHalfyear": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a calendar year and halfyear as string following the logical pattern (-?)YYYY(Y*)H consisting\n of an optional minus sign for years B.C. followed by at least five digits, where the last digit represents the halfyear.\n The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})[1-2]\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsCalendarYearQuarter": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a calendar year and quarter as string following the logical pattern (-?)YYYY(Y*)Q consisting\n of an optional minus sign for years B.C. followed by at least five digits, where the last digit represents the quarter.\n The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})[1-4]\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsCalendarYearMonth": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a calendar year and month as string following the logical pattern (-?)YYYY(Y*)MM consisting\n 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\n December.\n The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})(0[1-9]|1[0-2])\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsCalendarYearWeek": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a calendar year and week as string following the logical pattern (-?)YYYY(Y*)WW consisting \n 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.\n 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]) \n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsCalendarDate": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a calendar date: year, month and day as string following the logical pattern (-?)YYYY(Y*)MMDD consisting \n of an optional minus sign for years B.C. followed by at least eight digits, where the last four digits represent \n the months January to December (MM) and the day of the month (DD).\n 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])\n The regex pattern does not reflect the additional constraint for \"Day-of-month Values\":\n 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, \n 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. \n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsFiscalYear": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a fiscal year number as string following the logical pattern YYYY consisting of four digits. \n The string matches the regex pattern [1-9][0-9]{3}\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsFiscalPeriod": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a fiscal period as string following the logical pattern PPP consisting of three digits. \n The string matches the regex pattern [0-9]{3}\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsFiscalYearPeriod": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a fiscal year and period as string following the logical pattern YYYYPPP consisting \n of seven digits, where the last three digits represent the fiscal period in the year.\n The string matches the regex pattern ([1-9][0-9]{3})([0-9]{3})\n ", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsFiscalQuarter": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a fiscal quarter number as string following the logical pattern Q consisting of a single digit. \n The string matches the regex pattern [1-4]", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsFiscalYearQuarter": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a fiscal year and quarter as string following the logical pattern YYYYQ consisting of\n five digits, where the last digit represents the quarter. \n The string matches the regex pattern [1-9][0-9]{3}[1-4]", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsFiscalWeek": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a fiscal week number as string following the logical pattern WW consisting of two digits. \n The string matches the regex pattern 0[1-9]|[1-4][0-9]|5[0-3]", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsFiscalYearWeek": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a fiscal year and week as string following the logical pattern YYYYWW consisting of \n six digits, where the last two digits represent the week number in the year. \n The string matches the regex pattern [1-9][0-9]{3}(0[1-9]|[1-4][0-9]|5[0-3])", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsDayOfFiscalYear": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Day number relative to a fiscal year. Valid values are between 1 and 371.", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "IsFiscalYearVariant": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property encodes a fiscal year variant", + "@Core.RequiresType": "Edm.String", + "@Common.MutuallyExclusiveTerm#DatePart": true + }, + "MutuallyExclusiveTerm": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Term"], + "@Core.Description": "Only one term of the group identified with the Qualifier attribute can be applied" + }, + "DraftRoot": { + "$Kind": "Term", + "$Type": "Common.DraftRootType", + "$AppliesTo": ["EntitySet"], + "@Core.Description": "Root entities of business documents that support the draft pattern" + }, + "DraftRootType": { + "$Kind": "ComplexType", + "$BaseType": "Common.DraftNodeType", + "ActivationAction": { + "$Type": "Common.QualifiedName", + "@Core.Description": "Action that activates a draft document" + }, + "DiscardAction": { + "$Type": "Common.QualifiedName", + "$Nullable": true, + "@Common.Experimental": true, + "@Core.Description": "Action that discards a draft document" + }, + "EditAction": { + "$Type": "Common.QualifiedName", + "$Nullable": true, + "@Core.Description": "Action that creates an edit draft" + }, + "NewAction": { + "$Type": "Common.QualifiedName", + "$Nullable": true, + "@Core.Description": "Action that creates a new draft", + "@Core.LongDescription": "New drafts may also be created by POSTing an empty entity without any properties to the entity set." + }, + "AdditionalNewActions": { + "$Collection": true, + "$Type": "Common.QualifiedName", + "@Common.Experimental": true, + "@Core.Description": "Additional actions that create a new draft", + "@Core.LongDescription": "Additional actions beside the default POST or standard `NewAction` that create a new draft." + }, + "ShareAction": { + "$Type": "Common.QualifiedName", + "$Nullable": true, + "@Core.Description": "Action that shares a draft document with other users", + "@Core.LongDescription": "The action is bound to the draft document root node and has the following signature:\n\n - `Users`: collection of structure with properties\n\n   - `UserID` of type `String` and\n\n   - `UserAccessRole` of type `String` with possible values `O` (owner, can perform all draft actions), and `E` (editor, can change the draft)\n\n It restricts access to the listed users in their specified roles." + } + }, + "DraftNode": { + "$Kind": "Term", + "$Type": "Common.DraftNodeType", + "$AppliesTo": ["EntitySet"], + "@Core.Description": "Entities in this set are parts of business documents that support the draft pattern" + }, + "DraftNodeType": { + "$Kind": "ComplexType", + "PreparationAction": { + "$Type": "Common.QualifiedName", + "$Nullable": true, + "@Core.Description": "Action that prepares a draft document for later activation" + }, + "ValidationFunction": { + "$Type": "Common.QualifiedName", + "$Nullable": true, + "@Core.Revisions": [ + { "Kind": "Deprecated", "Description": "Separate validation without side-effects is not useful" } + ], + "@Core.Description": "Function that validates whether a draft document is ready for activation" + } + }, + "DraftActivationVia": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Core.SimpleIdentifier", + "$AppliesTo": ["EntitySet"], + "@Core.Description": "Draft entities in this set are indirectly activated via draft entities in the referenced entity sets" + }, + "EditableFieldFor": { + "$Kind": "Term", + "$Type": "Edm.PropertyPath", + "$AppliesTo": ["Property"], + "@Core.Description": "The annotated property is an editable field for the referenced key property" + }, + "SimpleIdentifier": { + "$Kind": "TypeDefinition", + "$UnderlyingType": "Edm.String", + "@Core.Description": "The SimpleIdentifier of an OData construct in scope", + "@Core.Revisions": [ + { + "Kind": "Deprecated", + "Description": "Use type [Core.SimpleIdentifier](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#SimpleIdentifier) instead" } + ] + }, + "QualifiedName": { + "$Kind": "TypeDefinition", + "$UnderlyingType": "Edm.String", + "@Core.Description": "The QualifiedName of an OData construct in scope" }, - "com.sap.vocabularies.Common.v1": { - "$Alias": "Common", - "@Core.Description": "Common terms for all SAP vocabularies", - "@Core.Description#Published": "2017-02-15 © Copyright 2013 SAP SE. All rights reserved.", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Common.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Common.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Common.md" - } + "ActionOverload": { + "$Kind": "TypeDefinition", + "$UnderlyingType": "Edm.String", + "@Core.Description": "The qualified name of an action with an optional overload", + "@Core.LongDescription": "The qualified name of an action followed by parentheses \n containing the binding parameter type of a bound action overload to identify that bound overload, \n or by empty parentheses to identify the unbound overload, like in the `Target` attribute of an `Annotation`." + }, + "SemanticKey": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Edm.PropertyPath", + "$AppliesTo": ["EntityType"], + "@Core.Description": "The listed properties form the semantic key, i.e. they are unique modulo IsActiveEntity" + }, + "SideEffects": { + "$Kind": "Term", + "$Type": "Common.SideEffectsType", + "$AppliesTo": ["EntitySet", "EntityType", "ComplexType", "Action"], + "@Core.Description": "Describes side-effects of modification operations" + }, + "SideEffectsType": { + "$Kind": "ComplexType", + "@Core.Description": "Changes to the source properties or source entities may have side-effects on the target properties or entities.", + "@Core.LongDescription": "If neither TargetProperties nor TargetEntities are specified, a change to the source property values may have unforeseeable side-effects.\nAn empty NavigationPropertyPath may be used in TargetEntities to specify that any property of the annotated entity type may be affected.\n\nSide 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`.\n\nSpecial 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, \nonly `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/`.\nThis 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/`.", + "SourceProperties": { + "$Collection": true, + "$Type": "Edm.PropertyPath", + "@Core.Description": "Changes to the values of one or more of these structural properties may affect the targets" + }, + "SourceEntities": { + "$Collection": true, + "$Type": "Edm.NavigationPropertyPath", + "@Core.Description": "Changes to one or more of these entities may affect the targets. An empty path means the annotation target." + }, + "TargetProperties": { + "$Collection": true, + "@Core.Description": "These structural properties may be affected if the value of one of the sources changes", + "@Core.LongDescription": "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" + }, + "TargetEntities": { + "$Collection": true, + "$Type": "Edm.NavigationPropertyPath", + "@Core.Description": "These entities will be affected if the value of one of the sources changes. All affected entities need to be explicitly listed. An empty path means the annotation target." + }, + "EffectTypes": { + "$Type": "Common.EffectType", + "$Nullable": true, + "@Core.Revisions": [ + { + "Kind": "Deprecated", + "Description": "All side effects are essentially value changes, differentiation not needed." + } ], - "Experimental": { - "$Kind": "Term", - "$Nullable": true, - "@Core.Description": "Terms, types, and properties annotated with this term are experimental and can be changed incompatibly or removed completely any time without prior warning.", - "@Core.LongDescription": "Do not use or rely on experimental terms, types, and properties in production environments." - }, - "ServiceVersion": { - "$Kind": "Term", - "$Type": "Edm.Int32", - "$AppliesTo": [ - "Schema" - ], - "@Core.Description": "1 for first version of a service, incremented when schema changes incompatibly and service is published with a different URI" - }, - "ServiceSchemaVersion": { - "$Kind": "Term", - "$Type": "Edm.Int32", - "$AppliesTo": [ - "Schema" - ], - "@Core.Description": "0 for first schema version within a service version, incremented when schema changes compatibly" - }, - "Label": { - "$Kind": "Term", - "@Core.Description": "A short, human-readable text suitable for labels and captions in UIs", - "@Core.IsLanguageDependent": true - }, - "Heading": { - "$Kind": "Term", - "@Core.Description": "A short, human-readable text suitable for column headings in UIs", - "@Core.IsLanguageDependent": true - }, - "QuickInfo": { - "$Kind": "Term", - "@Core.Description": "A short, human-readable text suitable for tool tips in UIs", - "@Core.IsLanguageDependent": true - }, - "Text": { - "$Kind": "Term", - "$Nullable": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "A descriptive text for values of the annotated property. Value MUST be a dynamic expression when used as metadata annotation.", - "@Core.IsLanguageDependent": true - }, - "TextFor": { - "$Kind": "Term", - "$Type": "Edm.PropertyPath", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Core.RequiresType": "Edm.String", - "@Core.Description": "The annotated property contains a descriptive text for values of the referenced property." - }, - "ExternalID": { - "$Kind": "Term", - "$Nullable": true, - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Core.Description": "A human readable identifier for values of the annotated property. Value MUST be a dynamic expression when used as metadata annotation.", - "@Core.LongDescription": "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." - }, - "IsLanguageIdentifier": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Core.Description": "An identifier to distinguish multiple texts in different languages for the same entity" - }, - "TextFormat": { - "$Kind": "Term", - "$Type": "Common.TextFormatType", - "$AppliesTo": [ - "Property", - "Parameter", - "ReturnType" - ], - "@Core.Description": "The annotated property, parameter, or return type contains human-readable text that may contain formatting information", - "@Core.RequiresType": "Edm.String" - }, - "TextFormatType": { - "$Kind": "EnumType", - "plain": 0, - "plain@Core.Description": "Plain text, line breaks represented as the character 0x0A", - "html": 1, - "html@Core.Description": "Plain text with markup that can validly appear directly within an HTML DIV element" - }, - "Timezone": { - "$Kind": "Term", - "$Nullable": true, - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Common.Experimental": true, - "@Core.Description": "The point in time represented by the annotated property or parameter shall be interpreted in the given time zone", - "@Core.LongDescription": "Time zones shall be specified according to the [IANA](https://www.iana.org/time-zones) standard.\n 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.", - "@Core.RequiresType": "Edm.DateTimeOffset" - }, - "IsDigitSequence": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Core.Description": "Contains only digits", - "@Core.RequiresType": "Edm.String" - }, - "IsUpperCase": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Core.Description": "Contains just uppercase characters", - "@Core.RequiresType": "Edm.String" - }, - "IsCurrency": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Core.Description": "Annotated property or parameter is a currency code" - }, - "IsUnit": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Core.Description": "Annotated property or parameter is a unit of measure" - }, - "UnitSpecificScale": { - "$Kind": "Term", - "$Type": "Edm.PrimitiveType", - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "The number of fractional decimal digits of a currency amount or measured quantity", - "@Core.LongDescription": "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." - }, - "UnitSpecificPrecision": { - "$Kind": "Term", - "$Type": "Edm.PrimitiveType", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Core.Description": "The number of significant decimal digits of a currency amount or measured quantity", - "@Core.LongDescription": "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." - }, - "SecondaryKey": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Edm.PropertyPath", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Use term `AlternateKeys` from the OASIS Core vocabulary instead" - } - ], - "@Core.Description": "The listed properties form a secondary key. Multiple secondary keys are possible using different qualifiers." - }, - "MinOccurs": { - "$Kind": "Term", - "$Type": "Edm.Int64", - "$AppliesTo": [ - "NavigationProperty", - "Property", - "EntitySet", - "Term", - "Parameter" - ], - "@Core.Description": "The annotated set or collection contains at least this number of items" - }, - "MaxOccurs": { - "$Kind": "Term", - "$Type": "Edm.Int64", - "$AppliesTo": [ - "NavigationProperty", - "Property", - "EntitySet", - "Term", - "Parameter" - ], - "@Core.Description": "The annotated set or collection contains at most this number of items" - }, - "AssociationEntity": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Edm.NavigationPropertyPath", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Entity representing an n:m association with attributes", - "@Common.MinOccurs": 2 - }, - "DerivedNavigation": { - "$Kind": "Term", - "$Type": "Edm.NavigationPropertyPath", - "$AppliesTo": [ - "NavigationProperty" - ], - "@Core.Description": "Shortcut for a multi-segment navigation, contains the long path with all its segments" - }, - "Masked": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Revisions@Common.Experimental": true, - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Use terms `MaskedValue` instead" - } - ], - "@Core.Description": "Property contains sensitive data that should by default be masked on a UI and clear-text visible only upon user interaction" - }, - "MaskedValue": { - "$Kind": "Term", - "$Nullable": true, - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Common.IsInstanceAnnotation": true, - "@Core.Description": "Property contains sensitive data that is by default not transferred", - "@Core.LongDescription": "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." - }, - "RevealOnDemand": { - "$Kind": "Term", - "$Type": "Edm.Boolean", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Common.IsInstanceAnnotation": true, - "@Core.Description": "Unmasked data for this property can be requested with custom query option `masked-values=false`" - }, - "SemanticObject": { - "$Kind": "Term", - "$Nullable": true, - "$AppliesTo": [ - "EntitySet", - "EntityType", - "Property", - "NavigationProperty" - ], - "@Core.Description": "Name of the Semantic Object represented as this entity type or identified by this property" - }, - "SemanticObjectMapping": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Common.SemanticObjectMappingType", - "$AppliesTo": [ - "EntitySet", - "EntityType", - "Property" - ], - "$BaseTerm": "Common.SemanticObject", - "@Core.Description": "Maps properties of the annotated entity type or sibling properties of the annotated property to properties of the Semantic Object", - "@Core.LongDescription": "This allows \"renaming\" 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 \"local\" name." - }, - "SemanticObjectMappingType": { - "$Kind": "ComplexType", - "@Core.Description": "Maps a property of the annotated entity type or a sibling property of the annotated property to a property of the Semantic Object", - "LocalProperty": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Path to a local property that provides the value for the Semantic Object property" - }, - "SemanticObjectProperty": { - "@Core.Description": "Name of the Semantic Object property" - } - }, - "SemanticObjectUnavailableActions": { - "$Kind": "Term", - "$Collection": true, - "$AppliesTo": [ - "EntitySet", - "EntityType", - "Property" - ], - "$BaseTerm": "Common.SemanticObject", - "@Core.Description": "List of actions that are not available in the current state of the instance of the Semantic Object" - }, - "IsInstanceAnnotation": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Term" - ], - "@Core.Description": "Term can also be used as instance annotation; AppliesTo of this term specifies where it can be applied" - }, - "FilterExpressionRestrictions": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Common.FilterExpressionRestrictionType", - "$AppliesTo": [ - "EntitySet" - ], - "@Core.Description": "These properties only allow a subset of expressions", - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Use term Capabilities.FilterRestrictions instead" - } - ] - }, - "FilterExpressionRestrictionType": { - "$Kind": "ComplexType", - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Use term Capabilities.FilterRestrictions instead" - } - ], - "Property": { - "$Type": "Edm.PropertyPath", - "$Nullable": true - }, - "AllowedExpressions": { - "$Type": "Common.FilterExpressionType", - "$Nullable": true - } - }, - "FilterExpressionType": { - "$Kind": "EnumType", - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Use term Capabilities.FilterRestrictions instead" - } - ], - "SingleValue": 0, - "SingleValue@Core.Description": "a single 'eq' clause", - "MultiValue": 1, - "MultiValue@Core.Description": "one or more 'eq' clauses, separated by 'or'", - "SingleInterval": 2, - "SingleInterval@Core.Description": "at most one 'ge' and one 'le' clause, separated by 'and', alternatively a single 'eq' clause" - }, - "FieldControl": { - "$Kind": "Term", - "$Type": "Common.FieldControlType", - "$Nullable": true, - "$DefaultValue": "Optional", - "$AppliesTo": [ - "Property", - "Parameter", - "Record", - "EntityType" - ], - "@Core.Description": "Control state of a property, parameter, or the media stream of a media entity", - "@Core.LongDescription": "This term can be used for static field control, providing an enumeration member value in $metadata, as well as dynamically, providing a `Path` expression.\n\nIn 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.", - "@Common.IsInstanceAnnotation": true - }, - "FieldControlType": { - "$Kind": "EnumType", - "$UnderlyingType": "Edm.Byte", - "@Core.Description": "Control state of a property", - "Mandatory": 7, - "Mandatory@Core.Description": "Property is mandatory from a business perspective", - "Mandatory@Core.LongDescription": "This annotation value does not imply any restrictions on the value range of the property. For restricting the value range use e.g. the standard type facet `Nullable` with a value of `false` to exclude the `null` value, or terms from the [Validation vocabulary](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Validation.V1.md).", - "Optional": 3, - "Optional@Core.Description": "Property may have a value", - "Optional@Core.LongDescription": "This value does not make sense as a static annotation value.", - "ReadOnly": 1, - "ReadOnly@Core.Description": "Property value cannot be changed", - "ReadOnly@Core.LongDescription": "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", - "Inapplicable": 0, - "Inapplicable@Core.Description": "Property has no meaning in the current entity state", - "Inapplicable@Core.LongDescription": "This value does not make sense as a static annotation value.\n\nExample 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.", - "Hidden": 0, - "Hidden@Core.Description": "Deprecated synonymn for Inapplicable, do not use", - "Hidden@Core.LongDescription": "To statically hide a property on a UI use [UI.Hidden](UI.md#Hidden) instead" - }, - "ExceptionCategory": { - "$Kind": "Term", - "@Common.Experimental": true, - "@Core.Description": "A machine-readable exception category", - "@Common.IsInstanceAnnotation": true - }, - "Application": { - "$Kind": "Term", - "$Type": "Common.ApplicationType", - "@Common.Experimental": true, - "@Core.Description": "...", - "@Common.IsInstanceAnnotation": true - }, - "ApplicationType": { - "$Kind": "ComplexType", - "@Common.Experimental": true, - "Component": { - "$Nullable": true, - "@Core.Description": "Software component of service implementation" - }, - "ServiceRepository": { - "$Nullable": true, - "@Core.Description": "..." - }, - "ServiceId": { - "$Nullable": true, - "@Core.Description": "..." - }, - "ServiceVersion": { - "$Nullable": true, - "@Core.Description": "..." - } - }, - "Timestamp": { - "$Kind": "Term", - "$Type": "Edm.DateTimeOffset", - "$Precision": 0, - "@Common.Experimental": true, - "@Core.Description": "...", - "@Common.IsInstanceAnnotation": true - }, - "TransactionId": { - "$Kind": "Term", - "@Common.Experimental": true, - "@Core.Description": "...", - "@Common.IsInstanceAnnotation": true - }, - "ErrorResolution": { - "$Kind": "Term", - "$Type": "Common.ErrorResolutionType", - "@Common.Experimental": true, - "@Core.Description": "Hints for resolving this error", - "@Common.IsInstanceAnnotation": true - }, - "ErrorResolutionType": { - "$Kind": "ComplexType", - "@Common.Experimental": true, - "Analysis": { - "$Nullable": true, - "@Core.Description": "Short hint on how to analyze this error" - }, - "Note": { - "$Nullable": true, - "@Core.Description": "Note for error resolution" - }, - "AdditionalNote": { - "$Nullable": true, - "@Core.Description": "Additional note for error resolution" - } - }, - "Messages": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Edm.ComplexType", - "@Core.Description": "Collection of end-user messages", - "@Core.LongDescription": "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.\n\nThe minimum structure is\n\n- `code: Edm.String`\n\n- `message: Edm.String`\n\n- `target: Edm.String nullable`\n\n- `additionalTargets: Collection(Edm.String)`\n\n- `transition: Edm.Boolean`\n\n- `numericSeverity: Edm.Byte`\n\n- `longtextUrl: Edm.String nullable`\n " - }, - "additionalTargets": { - "$Kind": "Term", - "$Collection": true, - "$AppliesTo": [ - "Record" - ], - "@Common.Experimental": true, - "@Common.IsInstanceAnnotation": true, - "@Core.Description": "Additional targets for the message", - "@Core.LongDescription": "This instance annotation can be applied to the `error` object and the objects within the `details` array of an OData error response" - }, - "longtextUrl": { - "$Kind": "Term", - "$AppliesTo": [ - "Record" - ], - "@Core.IsURL": true, - "@Common.IsInstanceAnnotation": true, - "@Core.Description": "Location of the message long text", - "@Core.LongDescription": "This instance annotation can be applied to the `error` object and the objects within the `details` array of an OData error response" - }, - "numericSeverity": { - "$Kind": "Term", - "$Type": "Common.NumericMessageSeverityType", - "@Common.IsInstanceAnnotation": true, - "@Core.Description": "Classifies an end-user message as info, success, warning, or error", - "@Core.LongDescription": "This instance annotation can be applied to the `error` object and the objects within the `details` array of an OData error response" - }, - "MaximumNumericMessageSeverity": { - "$Kind": "Term", - "$Type": "Common.NumericMessageSeverityType", - "$Nullable": true, - "$AppliesTo": [ - "EntityType" - ], - "$BaseTerm": "Common.Messages", - "@Common.Experimental": true, - "@Core.Description": "The maximum severity of all end-user messages attached to an entity, null if no messages are attached", - "@Core.LongDescription": "This metadata annotation can be applied to entity types that are also annotated with term [`Common.Messages`](#Messages)" - }, - "NumericMessageSeverityType": { - "$Kind": "TypeDefinition", - "$UnderlyingType": "Edm.Byte", - "@Core.Description": "Classifies an end-user message as info, success, warning, or error", - "@Validation.AllowedValues": [ - { - "Value": 1, - "@Core.Description": "Success - no action required" - }, - { - "Value": 2, - "@Core.Description": "Information - no action required" - }, - { - "Value": 3, - "@Core.Description": "Warning - action may be required" - }, - { - "Value": 4, - "@Core.Description": "Error - action is required" - } - ] - }, - "IsActionCritical": { - "$Kind": "Term", - "$Type": "Edm.Boolean", - "$DefaultValue": true, - "$AppliesTo": [ - "Action", - "Function", - "ActionImport", - "FunctionImport" - ], - "@Core.Description": "Criticality of the function or action to enforce a warning or similar before it's executed" - }, - "Attributes": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Edm.PropertyPath", - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Attributes related to this property, which may occur in denormalized entity types" - }, - "RelatedRecursiveHierarchy": { - "$Kind": "Term", - "$Type": "Edm.AnnotationPath", - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "A recursive hierarchy related to this property. The annotation path must end in Aggregation.RecursiveHierarchy." - }, - "Interval": { - "$Kind": "Term", - "$Type": "Common.IntervalType", - "$AppliesTo": [ - "EntityType", - "ComplexType" - ], - "@Core.Description": "An interval with lower and upper boundaries described by two properties" - }, - "IntervalType": { - "$Kind": "ComplexType", - "LowerBoundary": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Property holding the lower interval boundary" - }, - "LowerBoundaryIncluded": { - "$Type": "Edm.Boolean", - "$DefaultValue": true, - "@Core.Description": "The lower boundary value is included in the interval" - }, - "UpperBoundary": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Property holding the upper interval boundary" - }, - "UpperBoundaryIncluded": { - "$Type": "Edm.Boolean", - "$DefaultValue": true, - "@Core.Description": "The upper boundary value is included in the interval" - } - }, - "ResultContext": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "The annotated entity type has one or more containment navigation properties.\n An instance of the annotated entity type provides the context required for determining\n the target entity sets reached by these containment navigation properties." - }, - "SAPObjectNodeType": { - "$Kind": "Term", - "$Type": "Common.SAPObjectNodeTypeType", - "$AppliesTo": [ - "EntityType" - ], - "@Common.Experimental": true, - "@Core.Description": "The SAP Object Node Type represented by the annotated entity type", - "@Core.LongDescription": "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." - }, - "SAPObjectNodeTypeType": { - "$Kind": "ComplexType", - "@Common.Experimental": true, - "@Core.Description": "Information about an SAP Object Node Type", - "Name": { - "@Core.Description": "The name of the SAP Object Node Type" - } - }, - "Composition": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "NavigationProperty" - ], - "@Common.Experimental": true, - "@Core.Description": "The annotated navigation property represents a logical composition, even though it is non-containment", - "@Core.LongDescription": "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." - }, - "SAPObjectNodeTypeReference": { - "$Kind": "Term", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Core.Description": "The name of the SAP Object Node Type referenced by the annotated property" - }, - "IsNaturalPerson": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "EntityType", - "Annotation" - ], - "@Core.Description": "The annotated entity type (e.g. `Employee`) or annotation (e.g. `IsImageUrl`) represents a natural person" - }, - "ValueList": { - "$Kind": "Term", - "$Type": "Common.ValueListType", - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Core.Description": "Specifies how to get a list of acceptable values for a property or parameter", - "@Core.LongDescription": "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." - }, - "ValueListType": { - "$Kind": "ComplexType", - "@Validation.ApplicableTerms": [ - "Common.QuickInfo" - ], - "Label": { - "$Nullable": true, - "@Core.IsLanguageDependent": true, - "@Core.Description": "Headline for value list, fallback is the label of the property or parameter" - }, - "CollectionPath": { - "@Core.Description": "Resource path of an OData collection with possible values, relative to CollectionRoot" - }, - "CollectionRoot": { - "$Nullable": true, - "@Core.Description": "Service root of the value list collection; not specified means local to the document containing the annotation" - }, - "DistinctValuesSupported": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Indicates that the value list supports a 'distinct' aggregation on the value list properties defined via ValueListParameterInOut and ValueListParameterOut" - }, - "SearchSupported": { - "$Type": "Edm.Boolean", - "$DefaultValue": true, - "@Core.Description": "Value list supports the $search query option", - "@Core.LongDescription": "The value of the target property is used as the search expression instead of in $filter" - }, - "FetchValues": { - "$Type": "Common.FetchValuesType", - "$Nullable": true, - "@Core.Description": "Hint on when to fetch values" - }, - "PresentationVariantQualifier": { - "$Type": "Core.SimpleIdentifier", - "$Nullable": true, - "@Core.Description": "Alternative representation of a value help, e.g. as a bar chart", - "@Core.LongDescription": "Qualifier for annotation with term [UI.PresentationVariant](UI.md#PresentationVariant) on the entity set identified via CollectionPath" - }, - "SelectionVariantQualifier": { - "$Type": "Core.SimpleIdentifier", - "$Nullable": true, - "@Core.Description": "Optional combination of parameters and filters to query the value help entity set", - "@Core.LongDescription": "Qualifier for annotation with term [UI.SelectionVariant](UI.md#SelectionVariant) on the entity set identified via CollectionPath" - }, - "Parameters": { - "$Collection": true, - "$Type": "Common.ValueListParameter", - "@Core.Description": "Instructions on how to construct the value list request and consume response properties" - } - }, - "FetchValuesType": { - "$Kind": "TypeDefinition", - "$UnderlyingType": "Edm.Byte", - "@Core.Description": "Hint on when to fetch values", - "@Validation.AllowedValues": [ - { - "Value": 1, - "@Core.Description": "Fetch values immediately without filter" - }, - { - "Value": 2, - "@Core.Description": "Fetch values with a filter" - } - ] - }, - "ValueListRelevantQualifiers": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Core.SimpleIdentifier", - "@Common.Experimental": true, - "@Core.Description": "List of qualifiers of relevant ValueList annotations", - "@Core.LongDescription": "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." - }, - "ValueListWithFixedValues": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Core.Description": "If specified as true, there's only one value list mapping and its value list consists of a small number of fixed values" - }, - "ValueListForValidation": { - "$Kind": "Term", - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Common.Experimental": true, - "@Core.Description": "Contains the qualifier of the ValueList or ValueListMapping that should be used for validation" - }, - "ValueListReferences": { - "$Kind": "Term", - "$Collection": true, - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Core.IsURL": true, - "@Core.Description": "A list of URLs of CSDL documents containing value list mappings for this parameter or property" - }, - "ValueListMapping": { - "$Kind": "Term", - "$Type": "Common.ValueListMappingType", - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Core.Description": "Specifies the mapping between data service properties and value list properties", - "@Core.LongDescription": "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." - }, - "ValueListMappingType": { - "$Kind": "ComplexType", - "@Validation.ApplicableTerms": [ - "Common.QuickInfo" - ], - "Label": { - "$Nullable": true, - "@Core.IsLanguageDependent": true, - "@Core.Description": "Headline for value list, fallback is the label of the property or parameter" - }, - "CollectionPath": { - "@Core.Description": "Resource path of an OData collection with possible values, relative to the document containing the value list mapping" - }, - "DistinctValuesSupported": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Indicates that the value list supports a 'distinct' aggregation on the value list properties defined via ValueListParameterInOut and ValueListParameterOut" - }, - "FetchValues": { - "$Type": "Common.FetchValuesType", - "$Nullable": true, - "@Core.Description": "Hint on when to fetch values" - }, - "PresentationVariantQualifier": { - "$Type": "Core.SimpleIdentifier", - "$Nullable": true, - "@Core.Description": "Alternative representation of a value help, e.g. as a bar chart", - "@Core.LongDescription": "Qualifier for annotation with term [UI.PresentationVariant](UI.md#PresentationVariant) on the value list entity set identified via CollectionPath in the ValueListReference annotation" - }, - "SelectionVariantQualifier": { - "$Type": "Core.SimpleIdentifier", - "$Nullable": true, - "@Core.Description": "Optional combination of parameters and filters to query the value help entity set", - "@Core.LongDescription": "Qualifier for annotation with term [UI.SelectionVariant](UI.md#SelectionVariant) on the entity set identified via CollectionPath" - }, - "Parameters": { - "$Collection": true, - "$Type": "Common.ValueListParameter", - "@Core.Description": "Instructions on how to construct the value list request and consume response properties" - } - }, - "ValueListParameter": { - "$Kind": "ComplexType", - "$Abstract": true, - "ValueListProperty": { - "@Core.Description": "Path to property in the value list . Format is identical to PropertyPath annotations." - } - }, - "ValueListParameterIn": { - "$Kind": "ComplexType", - "$BaseType": "Common.ValueListParameter", - "LocalDataProperty": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Path to property that is used to filter the value list with `eq` comparison" - }, - "InitialValueIsSignificant": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Initial value, e.g. empty string, is a valid and significant value" - } - }, - "ValueListParameterConstant": { - "$Kind": "ComplexType", - "$BaseType": "Common.ValueListParameter", - "@Common.Experimental": true, - "Constant": { - "$Type": "Edm.PrimitiveType", - "@Core.Description": "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)" - } - }, - "ValueListParameterInOut": { - "$Kind": "ComplexType", - "$BaseType": "Common.ValueListParameter", - "LocalDataProperty": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Path to property that is used to filter the value list with `startswith` comparison and filled from the picked value list item" - }, - "InitialValueIsSignificant": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Initial value, e.g. empty string, is a valid and significant value" - }, - "@Validation.ApplicableTerms": [ - "UI.Importance" - ] - }, - "ValueListParameterOut": { - "$Kind": "ComplexType", - "$BaseType": "Common.ValueListParameter", - "LocalDataProperty": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Path to property that is filled from response" - }, - "@Validation.ApplicableTerms": [ - "UI.Importance" - ] - }, - "ValueListParameterDisplayOnly": { - "$Kind": "ComplexType", - "$BaseType": "Common.ValueListParameter", - "@Core.Description": "Value list property that is not used to fill the edited entity", - "@Validation.ApplicableTerms": [ - "UI.Importance" - ] - }, - "ValueListParameterFilterOnly": { - "$Kind": "ComplexType", - "$BaseType": "Common.ValueListParameter", - "@Core.Description": "Value list property that is used to filter the value list, not connected to the edited entity", - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "All filterable properties of the value list can be used to filter" - } - ] - }, - "IsCalendarYear": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a year number as string following the logical pattern (-?)YYYY(Y*) consisting of an optional\n 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})\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsCalendarHalfyear": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a halfyear number as string following the logical pattern H consisting of a single digit.\n The string matches the regex pattern [1-2]\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsCalendarQuarter": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a calendar quarter number as string following the logical pattern Q consisting of a single digit.\n The string matches the regex pattern [1-4]\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsCalendarMonth": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a calendar month number as string following the logical pattern MM consisting of two digits.\n The string matches the regex pattern 0[1-9]|1[0-2]\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsCalendarWeek": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a calendar week number as string following the logical pattern WW consisting of two digits.\n The string matches the regex pattern 0[1-9]|[1-4][0-9]|5[0-3]\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsDayOfCalendarMonth": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Day number relative to a calendar month. Valid values are between 1 and 31.\n ", - "@Core.RequiresType": "Edm.SByte", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsDayOfCalendarYear": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Day number relative to a calendar year. Valid values are between 1 and 366.\n ", - "@Core.RequiresType": "Edm.Int16", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsCalendarYearHalfyear": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a calendar year and halfyear as string following the logical pattern (-?)YYYY(Y*)H consisting\n of an optional minus sign for years B.C. followed by at least five digits, where the last digit represents the halfyear.\n The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})[1-2]\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsCalendarYearQuarter": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a calendar year and quarter as string following the logical pattern (-?)YYYY(Y*)Q consisting\n of an optional minus sign for years B.C. followed by at least five digits, where the last digit represents the quarter.\n The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})[1-4]\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsCalendarYearMonth": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a calendar year and month as string following the logical pattern (-?)YYYY(Y*)MM consisting\n 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\n December.\n The string matches the regex pattern -?([1-9][0-9]{3,}|0[0-9]{3})(0[1-9]|1[0-2])\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsCalendarYearWeek": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a calendar year and week as string following the logical pattern (-?)YYYY(Y*)WW consisting \n 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.\n 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]) \n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsCalendarDate": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a calendar date: year, month and day as string following the logical pattern (-?)YYYY(Y*)MMDD consisting \n of an optional minus sign for years B.C. followed by at least eight digits, where the last four digits represent \n the months January to December (MM) and the day of the month (DD).\n 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])\n The regex pattern does not reflect the additional constraint for \"Day-of-month Values\":\n 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, \n 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. \n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsFiscalYear": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a fiscal year number as string following the logical pattern YYYY consisting of four digits. \n The string matches the regex pattern [1-9][0-9]{3}\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsFiscalPeriod": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a fiscal period as string following the logical pattern PPP consisting of three digits. \n The string matches the regex pattern [0-9]{3}\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsFiscalYearPeriod": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a fiscal year and period as string following the logical pattern YYYYPPP consisting \n of seven digits, where the last three digits represent the fiscal period in the year.\n The string matches the regex pattern ([1-9][0-9]{3})([0-9]{3})\n ", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsFiscalQuarter": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a fiscal quarter number as string following the logical pattern Q consisting of a single digit. \n The string matches the regex pattern [1-4]", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsFiscalYearQuarter": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a fiscal year and quarter as string following the logical pattern YYYYQ consisting of\n five digits, where the last digit represents the quarter. \n The string matches the regex pattern [1-9][0-9]{3}[1-4]", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsFiscalWeek": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a fiscal week number as string following the logical pattern WW consisting of two digits. \n The string matches the regex pattern 0[1-9]|[1-4][0-9]|5[0-3]", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsFiscalYearWeek": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a fiscal year and week as string following the logical pattern YYYYWW consisting of \n six digits, where the last two digits represent the week number in the year. \n The string matches the regex pattern [1-9][0-9]{3}(0[1-9]|[1-4][0-9]|5[0-3])", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsDayOfFiscalYear": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Day number relative to a fiscal year. Valid values are between 1 and 371.", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "IsFiscalYearVariant": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property encodes a fiscal year variant", - "@Core.RequiresType": "Edm.String", - "@Common.MutuallyExclusiveTerm#DatePart": true - }, - "MutuallyExclusiveTerm": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Term" - ], - "@Core.Description": "Only one term of the group identified with the Qualifier attribute can be applied" - }, - "DraftRoot": { - "$Kind": "Term", - "$Type": "Common.DraftRootType", - "$AppliesTo": [ - "EntitySet" - ], - "@Core.Description": "Root entities of business documents that support the draft pattern" - }, - "DraftRootType": { - "$Kind": "ComplexType", - "$BaseType": "Common.DraftNodeType", - "ActivationAction": { - "$Type": "Common.QualifiedName", - "@Core.Description": "Action that activates a draft document" - }, - "DiscardAction": { - "$Type": "Common.QualifiedName", - "$Nullable": true, - "@Common.Experimental": true, - "@Core.Description": "Action that discards a draft document" - }, - "EditAction": { - "$Type": "Common.QualifiedName", - "$Nullable": true, - "@Core.Description": "Action that creates an edit draft" - }, - "NewAction": { - "$Type": "Common.QualifiedName", - "$Nullable": true, - "@Core.Description": "Action that creates a new draft", - "@Core.LongDescription": "New drafts may also be created by POSTing an empty entity without any properties to the entity set." - }, - "AdditionalNewActions": { - "$Collection": true, - "$Type": "Common.QualifiedName", - "@Common.Experimental": true, - "@Core.Description": "Additional actions that create a new draft", - "@Core.LongDescription": "Additional actions beside the default POST or standard `NewAction` that create a new draft." - }, - "ShareAction": { - "$Type": "Common.QualifiedName", - "$Nullable": true, - "@Core.Description": "Action that shares a draft document with other users", - "@Core.LongDescription": "The action is bound to the draft document root node and has the following signature:\n\n - `Users`: collection of structure with properties\n\n   - `UserID` of type `String` and\n\n   - `UserAccessRole` of type `String` with possible values `O` (owner, can perform all draft actions), and `E` (editor, can change the draft)\n\n It restricts access to the listed users in their specified roles." - } - }, - "DraftNode": { - "$Kind": "Term", - "$Type": "Common.DraftNodeType", - "$AppliesTo": [ - "EntitySet" - ], - "@Core.Description": "Entities in this set are parts of business documents that support the draft pattern" - }, - "DraftNodeType": { - "$Kind": "ComplexType", - "PreparationAction": { - "$Type": "Common.QualifiedName", - "$Nullable": true, - "@Core.Description": "Action that prepares a draft document for later activation" - }, - "ValidationFunction": { - "$Type": "Common.QualifiedName", - "$Nullable": true, - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Separate validation without side-effects is not useful" - } - ], - "@Core.Description": "Function that validates whether a draft document is ready for activation" - } - }, - "DraftActivationVia": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Core.SimpleIdentifier", - "$AppliesTo": [ - "EntitySet" - ], - "@Core.Description": "Draft entities in this set are indirectly activated via draft entities in the referenced entity sets" - }, - "EditableFieldFor": { - "$Kind": "Term", - "$Type": "Edm.PropertyPath", - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "The annotated property is an editable field for the referenced key property" - }, - "SimpleIdentifier": { - "$Kind": "TypeDefinition", - "$UnderlyingType": "Edm.String", - "@Core.Description": "The SimpleIdentifier of an OData construct in scope", - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "Use type [Core.SimpleIdentifier](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#SimpleIdentifier) instead" - } - ] - }, - "QualifiedName": { - "$Kind": "TypeDefinition", - "$UnderlyingType": "Edm.String", - "@Core.Description": "The QualifiedName of an OData construct in scope" - }, - "ActionOverload": { - "$Kind": "TypeDefinition", - "$UnderlyingType": "Edm.String", - "@Core.Description": "The qualified name of an action with an optional overload", - "@Core.LongDescription": "The qualified name of an action followed by parentheses \n containing the binding parameter type of a bound action overload to identify that bound overload, \n or by empty parentheses to identify the unbound overload, like in the `Target` attribute of an `Annotation`." - }, - "SemanticKey": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Edm.PropertyPath", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "The listed properties form the semantic key, i.e. they are unique modulo IsActiveEntity" - }, - "SideEffects": { - "$Kind": "Term", - "$Type": "Common.SideEffectsType", - "$AppliesTo": [ - "EntitySet", - "EntityType", - "ComplexType", - "Action" - ], - "@Core.Description": "Describes side-effects of modification operations" - }, - "SideEffectsType": { - "$Kind": "ComplexType", - "@Core.Description": "Changes to the source properties or source entities may have side-effects on the target properties or entities.", - "@Core.LongDescription": "If neither TargetProperties nor TargetEntities are specified, a change to the source property values may have unforeseeable side-effects.\nAn empty NavigationPropertyPath may be used in TargetEntities to specify that any property of the annotated entity type may be affected.\n\nSide 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`.\n\nSpecial 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, \nonly `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/`.\nThis 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/`.", - "SourceProperties": { - "$Collection": true, - "$Type": "Edm.PropertyPath", - "@Core.Description": "Changes to the values of one or more of these structural properties may affect the targets" - }, - "SourceEntities": { - "$Collection": true, - "$Type": "Edm.NavigationPropertyPath", - "@Core.Description": "Changes to one or more of these entities may affect the targets. An empty path means the annotation target." - }, - "TargetProperties": { - "$Collection": true, - "@Core.Description": "These structural properties may be affected if the value of one of the sources changes", - "@Core.LongDescription": "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" - }, - "TargetEntities": { - "$Collection": true, - "$Type": "Edm.NavigationPropertyPath", - "@Core.Description": "These entities will be affected if the value of one of the sources changes. All affected entities need to be explicitly listed. An empty path means the annotation target." - }, - "EffectTypes": { - "$Type": "Common.EffectType", - "$Nullable": true, - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "All side effects are essentially value changes, differentiation not needed." - } - ], - "@Core.Description": "One or more of the targets may show these effects. If not specified, any effect is possible." - }, - "TriggerAction": { - "$Type": "Common.QualifiedName", - "$Nullable": true, - "@Core.Description": "Bound action to trigger side-effects after modifying an entity", - "@Core.LongDescription": "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`." - }, - "TriggeredIndicator": { - "$Type": "Edm.Boolean", - "$Nullable": true, - "@Common.Experimental": true, - "@Core.Description": "Indicates whether the side-effect has already happened", - "@Core.LongDescription": "The value of this property typically is a Path expression pointing to a boolean property. It can be used by clients to defer expensive refresh calls until they are actually needed and instead just request the referenced indicator property. Servers can choose to return indicator properties even if not explicitly requested." - }, - "Discretionary": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Common.Experimental": true, - "@Core.Description": "Indicates whether the client can decide if a side-effect should be triggered or not", - "@Core.LongDescription": "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." - } - }, - "EffectType": { - "$Kind": "EnumType", - "$IsFlags": true, - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "All side effects are essentially value changes, differentiation not needed." - } - ], - "ValidationMessage": 1, - "ValidationMessage@Core.Description": "Validation messages are assigned to a target", - "ValidationMessage@Core.LongDescription": "This side effect type indicates that validation messages may result from changes of source properties or entities. \nThus, a validation request can be sent either in conjunction with or separately after a modifying request. \nValidation messages shall be persisted with the draft and immediately available in a subsequent request without repeating the validation logic.", - "ValueChange": 2, - "ValueChange@Core.Description": "The value of a target changes", - "ValueChange@Core.LongDescription": "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. \nUpon modification preparation logic is performed that determines additional values to be stored in the draft document.", - "FieldControlChange": 4, - "FieldControlChange@Core.Description": "The value of the Common.FieldControl annotation of a target changes", - "FieldControlChange@Core.LongDescription": "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. \nUpon modification field control logic is invoked so that meta-information like hidden or read-only is determined." - }, - "DefaultValuesFunction": { - "$Kind": "Term", - "$Type": "Common.QualifiedName", - "$AppliesTo": [ - "EntitySet", - "NavigationProperty", - "Action", - "Function" - ], - "@Core.Description": "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", - "@Core.LongDescription": "\n The default values function must have a bound overload whose binding parameter type matches the annotation target\n\n - for an entity set: collection of entity type of entity set\n\n - for a navigation property: identical to the type of the navigation property (single- or collection-valued)\n\n - for a bound action/function: identical to the binding parameter type of the annotated action/function\n\n In addition the overload can have non-binding parameters for values that the user has already entered:\n\n - 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\n\n - 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\n\n The result type of the default values function is a complex type whose properties correspond in name and type to a subset of\n\n - the properties of the entity to create, or\n\n - the parameters of the action or function to call\n " - }, - "DerivedDefaultValue": { - "$Kind": "Term", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": "This has been experimental for three years, consider to delete it", - "@Core.Description": "Function import to derive a default value for the property from a given context.", - "@Core.LongDescription": "\n Function import has two parameters of complex types:\n\n - `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property\n\n - `properties`, a structure resembling the type of the entity set of the annotated property\n\n The return type must be of the same type as the annotated property.\n\n Arguments passed to the function import are used as context for deriving the default value. \n The function import returns this default value, or null in case such a value could not be determined.\n " - }, - "FilterDefaultValue": { - "$Kind": "Term", - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "A default value for the property to be used in filter expressions." - }, - "FilterDefaultValueHigh": { - "$Kind": "Term", - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": "Requested by Roland Trapp as a counterpart to CDS annotation @Consumption.filter.defaultValueHigh", - "@Core.Description": "A default upper limit for the property to be used in 'less than or equal' filter expressions." - }, - "DerivedFilterDefaultValue": { - "$Kind": "Term", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": "This has been experimental for three years, consider to delete it", - "@Core.Description": "Function import to derive a default value for the property from a given context in order to use it in filter expressions.", - "@Core.LongDescription": "\n Function import has two parameters of complex types:\n\n - `parameters`, a structure resembling the entity type the parameter\n entity set related to the entity set of the annotated property\n\n - `properties`, a structure resembling the\n type of the entity set of the annotated property\n\n The return type must be of the same type as the annotated\n property.\n\n Arguments passed to the function import are used as context for deriving the default value.\n The function import returns this default value, or null in case such a value could not be determined.\n " - }, - "SortOrder": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Common.SortOrderType", - "$AppliesTo": [ - "EntitySet", - "EntityType" - ], - "@Core.Description": "List of sort criteria", - "@Core.LongDescription": "The items of the annotated entity set or the items of the \n collection of the annotated entity type are sorted by the first entry of the SortOrder collection. \n Items with same value for this first sort criteria are sorted by the second entry of the SortOrder collection, and so on. " - }, - "SortOrderType": { - "$Kind": "ComplexType", - "@Core.Description": "Exactly one of `Property` and `DynamicProperty` must be present", - "Property": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Common.PrimitivePropertyPath": true, - "@Core.Description": "Sort property", - "@Core.Revisions": [ - { - "Kind": "Modified", - "Description": "Now nullable if `DynamicProperty` is present" - } - ] - }, - "DynamicProperty": { - "$Type": "Edm.AnnotationPath", - "$Nullable": true, - "@Core.Description": "Dynamic property introduced by an annotation and used as sort property", - "@Core.LongDescription": "If the annotation referenced by the annotation path does not apply to the same collection of entities\n as the one being sorted according to the [`UI.PresentationVariant`](UI.md#PresentationVariant) or `Common.SortOrder` annotation,\n this instance of `UI.PresentationVariant/SortOrder` or `Common.SortOrder` MUST be silently ignored.", - "@Validation.AllowedTerms": [ - "Analytics.AggregatedProperty", - "Aggregation.CustomAggregate" - ] - }, - "Descending": { - "$Type": "Edm.Boolean", - "$Nullable": true, - "@Core.Description": "Sort direction, ascending if not specified otherwise" - } - }, - "RecursiveHierarchy": { - "$Kind": "Term", - "$Type": "Common.RecursiveHierarchyType", - "$BaseTerm": "Aggregation.RecursiveHierarchy", - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "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" - } - ], - "@Core.Description": "Defines a recursive hierarchy." - }, - "RecursiveHierarchyType": { - "$Kind": "ComplexType", - "@Core.Revisions": [ - { - "Kind": "Deprecated", - "Description": "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" - } - ], - "ExternalNodeKeyProperty": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Core.Description": "Property holding the external human-readable key identifying the node" - }, - "NodeDescendantCountProperty": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Core.Description": "Property holding the descendant count for a hierarchy node. \n The descendant count of a node is the number of its descendants in the hierarchy structure of the result considering \n only those nodes matching any specified $filter and $search. A property holding descendant counts has an integer \n data type." - }, - "NodeDrillStateProperty": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Core.Description": "Property holding the drill state of a hierarchy node. The drill state is indicated \n by one of the following string values: collapsed, expanded, or leaf. For an expanded node, its \n children are included in the result collection. For a collapsed node, the children are included in the entity set, but \n they are not part of the result collection. Retrieving them requires a relaxed filter expression or a separate request \n filtering on the parent node ID with the ID of the collapsed node. A leaf does not have any child in the entity set.\n " - } - }, - "CreatedAt": { - "$Kind": "Term", - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$AppliesTo": [ - "EntityType" - ], - "$Precision": 0, - "@Core.Description": "Creation timestamp", - "@Common.IsInstanceAnnotation": true - }, - "CreatedBy": { - "$Kind": "Term", - "$Type": "Common.UserID", - "$Nullable": true, - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "First editor", - "@Common.IsInstanceAnnotation": true - }, - "ChangedAt": { - "$Kind": "Term", - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$AppliesTo": [ - "EntityType" - ], - "$Precision": 0, - "@Core.Description": "Last modification timestamp", - "@Common.IsInstanceAnnotation": true - }, - "ChangedBy": { - "$Kind": "Term", - "$Type": "Common.UserID", - "$Nullable": true, - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Last editor", - "@Common.IsInstanceAnnotation": true - }, - "UserID": { - "$Kind": "TypeDefinition", - "$UnderlyingType": "Edm.String", - "@Core.Description": "User ID", - "@Common.IsInstanceAnnotation": true - }, - "OriginalProtocolVersion": { - "$Kind": "Term", - "$AppliesTo": [ - "Schema" - ], - "@Core.Description": "Original protocol version of a converted (V4) CSDL document, allowed values `2.0` and `3.0`" - }, - "ApplyMultiUnitBehaviorForSortingAndFiltering": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "EntityContainer" - ], - "@Common.Experimental": true, - "@Core.Description": "Sorting and filtering of amounts in multiple currencies needs special consideration", - "@Core.LongDescription": "TODO: add link to UX documentation on https://experience.sap.com/fiori-design/" - }, - "mediaUploadLink": { - "$Kind": "Term", - "$AppliesTo": [ - "Property", - "EntityType" - ], - "@Common.Experimental": true, - "@Common.IsInstanceAnnotation": true, - "@Core.RequiresType": "Edm.Stream", - "@Core.IsURL": true, - "@Core.Description": "URL for uploading new media content to a Document Management Service", - "@Core.LongDescription": "In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property or media resource.\nThe upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578.\nThe 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.\nIf 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." - }, - "PrimitivePropertyPath": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Term", - "Property" - ], - "@Common.Experimental": true, - "@Core.Description": "A term or term property with this tag whose type is (a collection of) `Edm.PropertyPath` MUST resolve to a primitive structural property" - }, - "WebSocketBaseURL": { - "$Kind": "Term", - "$AppliesTo": [ - "EntityContainer" - ], - "@Common.Experimental": true, - "@Core.IsURL": true, - "@Core.Description": "Base URL for WebSocket connections" + "@Core.Description": "One or more of the targets may show these effects. If not specified, any effect is possible." + }, + "TriggerAction": { + "$Type": "Common.QualifiedName", + "$Nullable": true, + "@Core.Description": "Bound action to trigger side-effects after modifying an entity", + "@Core.LongDescription": "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`." + }, + "TriggeredIndicator": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "@Common.Experimental": true, + "@Core.Description": "Indicates whether the side-effect has already happened", + "@Core.LongDescription": "The value of this property typically is a Path expression pointing to a boolean property. It can be used by clients to defer expensive refresh calls until they are actually needed and instead just request the referenced indicator property. Servers can choose to return indicator properties even if not explicitly requested." + }, + "Discretionary": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Common.Experimental": true, + "@Core.Description": "Indicates whether the client can decide if a side-effect should be triggered or not", + "@Core.LongDescription": "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." + } + }, + "EffectType": { + "$Kind": "EnumType", + "$IsFlags": true, + "@Core.Revisions": [ + { + "Kind": "Deprecated", + "Description": "All side effects are essentially value changes, differentiation not needed." + } + ], + "ValidationMessage": 1, + "ValidationMessage@Core.Description": "Validation messages are assigned to a target", + "ValidationMessage@Core.LongDescription": "This side effect type indicates that validation messages may result from changes of source properties or entities. \nThus, a validation request can be sent either in conjunction with or separately after a modifying request. \nValidation messages shall be persisted with the draft and immediately available in a subsequent request without repeating the validation logic.", + "ValueChange": 2, + "ValueChange@Core.Description": "The value of a target changes", + "ValueChange@Core.LongDescription": "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. \nUpon modification preparation logic is performed that determines additional values to be stored in the draft document.", + "FieldControlChange": 4, + "FieldControlChange@Core.Description": "The value of the Common.FieldControl annotation of a target changes", + "FieldControlChange@Core.LongDescription": "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. \nUpon modification field control logic is invoked so that meta-information like hidden or read-only is determined." + }, + "DefaultValuesFunction": { + "$Kind": "Term", + "$Type": "Common.QualifiedName", + "$AppliesTo": ["EntitySet", "NavigationProperty", "Action", "Function"], + "@Core.Description": "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", + "@Core.LongDescription": "\n The default values function must have a bound overload whose binding parameter type matches the annotation target\n\n - for an entity set: collection of entity type of entity set\n\n - for a navigation property: identical to the type of the navigation property (single- or collection-valued)\n\n - for a bound action/function: identical to the binding parameter type of the annotated action/function\n\n In addition the overload can have non-binding parameters for values that the user has already entered:\n\n - 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\n\n - 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\n\n The result type of the default values function is a complex type whose properties correspond in name and type to a subset of\n\n - the properties of the entity to create, or\n\n - the parameters of the action or function to call\n " + }, + "DerivedDefaultValue": { + "$Kind": "Term", + "$AppliesTo": ["Property"], + "@Common.Experimental": "This has been experimental for three years, consider to delete it", + "@Core.Description": "Function import to derive a default value for the property from a given context.", + "@Core.LongDescription": "\n Function import has two parameters of complex types:\n\n - `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property\n\n - `properties`, a structure resembling the type of the entity set of the annotated property\n\n The return type must be of the same type as the annotated property.\n\n Arguments passed to the function import are used as context for deriving the default value. \n The function import returns this default value, or null in case such a value could not be determined.\n " + }, + "FilterDefaultValue": { + "$Kind": "Term", + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "$AppliesTo": ["Property"], + "@Core.Description": "A default value for the property to be used in filter expressions." + }, + "FilterDefaultValueHigh": { + "$Kind": "Term", + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "$AppliesTo": ["Property"], + "@Common.Experimental": "Requested by Roland Trapp as a counterpart to CDS annotation @Consumption.filter.defaultValueHigh", + "@Core.Description": "A default upper limit for the property to be used in 'less than or equal' filter expressions." + }, + "DerivedFilterDefaultValue": { + "$Kind": "Term", + "$AppliesTo": ["Property"], + "@Common.Experimental": "This has been experimental for three years, consider to delete it", + "@Core.Description": "Function import to derive a default value for the property from a given context in order to use it in filter expressions.", + "@Core.LongDescription": "\n Function import has two parameters of complex types:\n\n - `parameters`, a structure resembling the entity type the parameter\n entity set related to the entity set of the annotated property\n\n - `properties`, a structure resembling the\n type of the entity set of the annotated property\n\n The return type must be of the same type as the annotated\n property.\n\n Arguments passed to the function import are used as context for deriving the default value.\n The function import returns this default value, or null in case such a value could not be determined.\n " + }, + "SortOrder": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Common.SortOrderType", + "$AppliesTo": ["EntitySet", "EntityType"], + "@Core.Description": "List of sort criteria", + "@Core.LongDescription": "The items of the annotated entity set or the items of the \n collection of the annotated entity type are sorted by the first entry of the SortOrder collection. \n Items with same value for this first sort criteria are sorted by the second entry of the SortOrder collection, and so on. " + }, + "SortOrderType": { + "$Kind": "ComplexType", + "@Core.Description": "Exactly one of `Property` and `DynamicProperty` must be present", + "Property": { + "$Type": "Edm.PropertyPath", + "$Nullable": true, + "@Common.PrimitivePropertyPath": true, + "@Core.Description": "Sort property", + "@Core.Revisions": [{ "Kind": "Modified", "Description": "Now nullable if `DynamicProperty` is present" }] + }, + "DynamicProperty": { + "$Type": "Edm.AnnotationPath", + "$Nullable": true, + "@Core.Description": "Dynamic property introduced by an annotation and used as sort property", + "@Core.LongDescription": "If the annotation referenced by the annotation path does not apply to the same collection of entities\n as the one being sorted according to the [`UI.PresentationVariant`](UI.md#PresentationVariant) or `Common.SortOrder` annotation,\n this instance of `UI.PresentationVariant/SortOrder` or `Common.SortOrder` MUST be silently ignored.", + "@Validation.AllowedTerms": ["Analytics.AggregatedProperty", "Aggregation.CustomAggregate"] + }, + "Descending": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "@Core.Description": "Sort direction, ascending if not specified otherwise" + } + }, + "RecursiveHierarchy": { + "$Kind": "Term", + "$Type": "Common.RecursiveHierarchyType", + "$BaseTerm": "Aggregation.RecursiveHierarchy", + "@Core.Revisions": [ + { + "Kind": "Deprecated", + "Description": "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" } + ], + "@Core.Description": "Defines a recursive hierarchy." + }, + "RecursiveHierarchyType": { + "$Kind": "ComplexType", + "@Core.Revisions": [ + { + "Kind": "Deprecated", + "Description": "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" + } + ], + "ExternalNodeKeyProperty": { + "$Type": "Edm.PropertyPath", + "$Nullable": true, + "@Core.Description": "Property holding the external human-readable key identifying the node" + }, + "NodeDescendantCountProperty": { + "$Type": "Edm.PropertyPath", + "$Nullable": true, + "@Core.Description": "Property holding the descendant count for a hierarchy node. \n The descendant count of a node is the number of its descendants in the hierarchy structure of the result considering \n only those nodes matching any specified $filter and $search. A property holding descendant counts has an integer \n data type." + }, + "NodeDrillStateProperty": { + "$Type": "Edm.PropertyPath", + "$Nullable": true, + "@Core.Description": "Property holding the drill state of a hierarchy node. The drill state is indicated \n by one of the following string values: collapsed, expanded, or leaf. For an expanded node, its \n children are included in the result collection. For a collapsed node, the children are included in the entity set, but \n they are not part of the result collection. Retrieving them requires a relaxed filter expression or a separate request \n filtering on the parent node ID with the ID of the collapsed node. A leaf does not have any child in the entity set.\n " + } + }, + "CreatedAt": { + "$Kind": "Term", + "$Type": "Edm.DateTimeOffset", + "$Nullable": true, + "$AppliesTo": ["EntityType"], + "$Precision": 0, + "@Core.Description": "Creation timestamp", + "@Common.IsInstanceAnnotation": true + }, + "CreatedBy": { + "$Kind": "Term", + "$Type": "Common.UserID", + "$Nullable": true, + "$AppliesTo": ["EntityType"], + "@Core.Description": "First editor", + "@Common.IsInstanceAnnotation": true + }, + "ChangedAt": { + "$Kind": "Term", + "$Type": "Edm.DateTimeOffset", + "$Nullable": true, + "$AppliesTo": ["EntityType"], + "$Precision": 0, + "@Core.Description": "Last modification timestamp", + "@Common.IsInstanceAnnotation": true + }, + "ChangedBy": { + "$Kind": "Term", + "$Type": "Common.UserID", + "$Nullable": true, + "$AppliesTo": ["EntityType"], + "@Core.Description": "Last editor", + "@Common.IsInstanceAnnotation": true + }, + "UserID": { + "$Kind": "TypeDefinition", + "$UnderlyingType": "Edm.String", + "@Core.Description": "User ID", + "@Common.IsInstanceAnnotation": true + }, + "OriginalProtocolVersion": { + "$Kind": "Term", + "$AppliesTo": ["Schema"], + "@Core.Description": "Original protocol version of a converted (V4) CSDL document, allowed values `2.0` and `3.0`" + }, + "ApplyMultiUnitBehaviorForSortingAndFiltering": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["EntityContainer"], + "@Common.Experimental": true, + "@Core.Description": "Sorting and filtering of amounts in multiple currencies needs special consideration", + "@Core.LongDescription": "TODO: add link to UX documentation on https://experience.sap.com/fiori-design/" + }, + "mediaUploadLink": { + "$Kind": "Term", + "$AppliesTo": ["Property", "EntityType"], + "@Common.Experimental": true, + "@Common.IsInstanceAnnotation": true, + "@Core.RequiresType": "Edm.Stream", + "@Core.IsURL": true, + "@Core.Description": "URL for uploading new media content to a Document Management Service", + "@Core.LongDescription": "In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property or media resource.\nThe upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578.\nThe 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.\nIf 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." + }, + "PrimitivePropertyPath": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Term", "Property"], + "@Common.Experimental": true, + "@Core.Description": "A term or term property with this tag whose type is (a collection of) `Edm.PropertyPath` MUST resolve to a primitive structural property" + }, + "WebSocketBaseURL": { + "$Kind": "Term", + "$AppliesTo": ["EntityContainer"], + "@Common.Experimental": true, + "@Core.IsURL": true, + "@Core.Description": "Base URL for WebSocket connections" } -} \ No newline at end of file + } +} diff --git a/vocabularies/Communication.json b/vocabularies/Communication.json index ae9588b0..750c9bd8 100644 --- a/vocabularies/Communication.json +++ b/vocabularies/Communication.json @@ -1,493 +1,314 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] + } + }, + "com.sap.vocabularies.Communication.v1": { + "$Alias": "Communication", + "@Core.Description": "Terms for annotating communication-relevant information", + "@Core.LongDescription": "\nThese terms are inspired by\n- RFC6350 vCard (http://tools.ietf.org/html/rfc6350)\n- RFC5545 iCalendar (http://tools.ietf.org/html/rfc5545)\n- RFC5322 Internet Message Format (http://tools.ietf.org/html/rfc5322)\n- RFC6351 xCard: vCard XML Representation (https://tools.ietf.org/html/rfc6351)\n ", + "@Core.Description#Published": "2017-02-15 © Copyright 2013 SAP AG. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Communication.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Communication.json" }, + { + "rel": "describedby", + "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Communication.md" + } + ], + "Contact": { + "$Kind": "Term", + "$Type": "Communication.ContactType", + "$Nullable": true, + "$AppliesTo": ["EntityType"], + "@Core.Description": "Address book entry" + }, + "ContactType": { + "$Kind": "ComplexType", + "fn": { "$Nullable": true, "@Core.Description": "Full name" }, + "n": { "$Type": "Communication.NameType", "$Nullable": true, "@Core.Description": "Name" }, + "nickname": { "$Nullable": true, "@Core.Description": "Nickname" }, + "photo": { "$Nullable": true, "@Core.Description": "Image or photograph", "@Core.IsURL": true }, + "bday": { "$Type": "Edm.Date", "$Nullable": true, "@Core.Description": "Birthday" }, + "anniversary": { "$Type": "Edm.Date", "$Nullable": true, "@Core.Description": "Date of marriage, or equivalent" }, + "gender": { + "$Type": "Communication.GenderType", + "$Nullable": true, + "@Core.Description": "Sex and gender identity" + }, + "title": { "$Nullable": true, "@Core.Description": "Position or job title" }, + "role": { "$Nullable": true, "@Core.Description": "Function or part played in a particular situation" }, + "org": { "$Nullable": true, "@Core.Description": "Organization Name defined by X.520" }, + "orgunit": { "$Nullable": true, "@Core.Description": "Organization Unit defined by X.520" }, + "kind": { "$Type": "Communication.KindType", "$Nullable": true, "@Core.Description": "Kind of contact" }, + "note": { + "$Nullable": true, + "@Core.Description": "Supplemental information or a comment associated with the contact" + }, + "adr": { "$Collection": true, "$Type": "Communication.AddressType", "@Core.Description": "Addresses" }, + "tel": { "$Collection": true, "$Type": "Communication.PhoneNumberType", "@Core.Description": "Phone numbers" }, + "email": { + "$Collection": true, + "$Type": "Communication.EmailAddressType", + "@Core.Description": "Email addresses" + }, + "geo": { "$Collection": true, "$Type": "Communication.GeoDataType", "@Core.Description": "Geographic locations" }, + "url": { "$Collection": true, "$Type": "Communication.UrlType", "@Core.Description": "URLs" } + }, + "NameType": { + "$Kind": "ComplexType", + "surname": { "$Nullable": true, "@Core.Description": "Surname or family name" }, + "given": { "$Nullable": true, "@Core.Description": "Given name" }, + "additional": { "$Nullable": true, "@Core.Description": "Additional names" }, + "prefix": { "$Nullable": true, "@Core.Description": "Honorific prefix(es)" }, + "suffix": { "$Nullable": true, "@Core.Description": "Honorific suffix(es)" } + }, + "Address": { + "$Kind": "Term", + "$Type": "Communication.AddressType", + "$Nullable": true, + "$AppliesTo": ["EntityType"], + "@Core.Description": "Address" + }, + "AddressType": { + "$Kind": "ComplexType", + "building": { "$Nullable": true, "@Core.Description": "Building identifier" }, + "street": { "$Nullable": true, "@Core.Description": "Street address" }, + "district": { "$Nullable": true, "@Core.Description": "Territorial administrative organization in a large city" }, + "locality": { "$Nullable": true, "@Core.Description": "City or similar" }, + "region": { "$Nullable": true, "@Core.Description": "State, province, or similar" }, + "code": { "$Nullable": true, "@Core.Description": "Postal code" }, + "country": { "$Nullable": true, "@Core.Description": "Country name", "@Core.IsLanguageDependent": true }, + "pobox": { "$Nullable": true, "@Core.Description": "Post office box" }, + "ext": { "$Nullable": true, "@Core.Description": "Extended address (e.g., apartment or suite number)" }, + "careof": { + "$Nullable": true, + "@Core.Description": "An intermediary who is responsible for transferring a piece of mail between the postal system and the final addressee" + }, + "label": { + "$Nullable": true, + "@Core.Description": "Delivery address label; plain-text string representing the formatted address, may contain line breaks" + }, + "type": { + "$Type": "Communication.ContactInformationType", + "$Nullable": true, + "@Core.Description": "Address type" + } + }, + "PhoneNumberType": { + "$Kind": "ComplexType", + "uri": { + "$Nullable": true, + "@Core.Description": "This SHOULD use the tel: URL schema defined in RFC3966", + "@Core.IsURL": true + }, + "type": { "$Type": "Communication.PhoneType", "$Nullable": true, "@Core.Description": "Telephone type" } + }, + "EmailAddressType": { + "$Kind": "ComplexType", + "address": { "$Nullable": true, "@Core.Description": "Email address" }, + "type": { + "$Type": "Communication.ContactInformationType", + "$Nullable": true, + "@Core.Description": "Address type" + } + }, + "GeoDataType": { + "$Kind": "ComplexType", + "uri": { + "$Nullable": true, + "@Core.Description": "This SHOULD use the geo: URL schema defined in RFC5870 which encodes the same information as an Edm.GeographyPoint", + "@Core.IsURL": true + }, + "type": { + "$Type": "Communication.ContactInformationType", + "$Nullable": true, + "@Core.Description": "Address type" + } + }, + "UrlType": { + "$Kind": "ComplexType", + "uri": { + "$Nullable": true, + "@Core.Description": "This MUST use the URL schema defined in RFC3986", + "@Core.IsURL": true + }, + "type": { "$Type": "Communication.ContactInformationType", "$Nullable": true, "@Core.Description": "URL type" } + }, + "KindType": { + "$Kind": "EnumType", + "individual": 0, + "individual@Core.Description": "A single person or entity", + "group": 1, + "group@Core.Description": "A group of persons or entities", + "org": 2, + "org@Core.Description": "An organization", + "location": 3, + "location@Core.Description": "A named geographical place" + }, + "ContactInformationType": { + "$Kind": "EnumType", + "$IsFlags": true, + "work": 1, + "work@Core.Description": "Related to an individual's work place", + "home": 2, + "home@Core.Description": "Related to an indivdual's personal life", + "preferred": 4, + "preferred@Core.Description": "Preferred-use contact information" + }, + "PhoneType": { + "$Kind": "EnumType", + "$IsFlags": true, + "work": 1, + "work@Core.Description": "Work telephone number", + "home": 2, + "home@Core.Description": "Private telephone number", + "preferred": 4, + "preferred@Core.Description": "Preferred-use telephone number", + "voice": 8, + "voice@Core.Description": "Voice telephone number", + "cell": 16, + "cell@Core.Description": "Cellular or mobile telephone number", + "fax": 32, + "fax@Core.Description": "Facsimile telephone number", + "video": 64, + "video@Core.Description": "Video conferencing telephone number" + }, + "GenderType": { + "$Kind": "EnumType", + "M": 0, + "M@Core.Description": "male", + "F": 1, + "F@Core.Description": "female", + "O": 2, + "O@Core.Description": "other", + "N": 3, + "N@Core.Description": "not applicable", + "U": 4, + "U@Core.Description": "unknown" + }, + "IsEmailAddress": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property contains an email address" + }, + "IsPhoneNumber": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property contains a phone number" + }, + "Event": { + "$Kind": "Term", + "$Type": "Communication.EventData", + "$Nullable": true, + "$AppliesTo": ["EntityType"], + "@Core.Description": "Calendar entry" + }, + "EventData": { + "$Kind": "ComplexType", + "summary": { "$Nullable": true, "@Core.Description": "Short description of the event" }, + "description": { "$Nullable": true, "@Core.Description": "More complete description" }, + "categories": { "$Collection": true, "@Core.Description": "Categories or subtypes of the event" }, + "dtstart": { + "$Type": "Edm.DateTimeOffset", + "$Nullable": true, + "$Precision": 0, + "@Core.Description": "Start date and time of the event" + }, + "dtend": { + "$Type": "Edm.DateTimeOffset", + "$Nullable": true, + "$Precision": 0, + "@Core.Description": "Date and time by which the event ends, alternative to duration" + }, + "duration": { + "$Type": "Edm.Duration", + "$Nullable": true, + "@Core.Description": "Duration of the event, alternative to dtend" + }, + "class": { "$Nullable": true, "@Core.Description": "Access classification, e.g. PUBLIC, PRIVATE, CONFIDENTIAL" }, + "status": { "$Nullable": true, "@Core.Description": "Confirmation status, e.g. CONFIRMED, TENTATIVE, CANCELLED" }, + "location": { "$Nullable": true, "@Core.Description": "Intended venue of the event" }, + "transp": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "@Core.Description": "Time transparency for busy time searches, true = free, false = blocked" + }, + "wholeday": { "$Type": "Edm.Boolean", "$Nullable": true, "@Core.Description": "Wholeday event" }, + "fbtype": { "$Nullable": true, "@Core.Description": "Free or busy time type, e.g. FREE, BUSY, BUSY-TENTATIVE" } + }, + "Task": { + "$Kind": "Term", + "$Type": "Communication.TaskData", + "$Nullable": true, + "$AppliesTo": ["EntityType"], + "@Core.Description": "Task list entry" + }, + "TaskData": { + "$Kind": "ComplexType", + "summary": { "$Nullable": true, "@Core.Description": "Short description of the task" }, + "description": { "$Nullable": true, "@Core.Description": "More complete description of the task" }, + "due": { + "$Type": "Edm.DateTimeOffset", + "$Nullable": true, + "$Precision": 0, + "@Core.Description": "Date and time that a to-do is expected to be completed" + }, + "completed": { + "$Type": "Edm.DateTimeOffset", + "$Nullable": true, + "$Precision": 0, + "@Core.Description": "Date and time that a to-do was actually completed" + }, + "percentcomplete": { + "$Type": "Edm.Byte", + "$Nullable": true, + "@Core.Description": "Percent completion of a to-do, e.g. 50 for half done" + }, + "priority": { + "$Type": "Edm.Byte", + "$Nullable": true, + "@Core.Description": "Relative priority, 0 = undefined, 1 = highest, 9 = lowest" + } + }, + "Message": { + "$Kind": "Term", + "$Type": "Communication.MessageData", + "$Nullable": true, + "$AppliesTo": ["EntityType"], + "@Core.Description": "Email message" }, - "com.sap.vocabularies.Communication.v1": { - "$Alias": "Communication", - "@Core.Description": "Terms for annotating communication-relevant information", - "@Core.LongDescription": "\nThese terms are inspired by\n- RFC6350 vCard (http://tools.ietf.org/html/rfc6350)\n- RFC5545 iCalendar (http://tools.ietf.org/html/rfc5545)\n- RFC5322 Internet Message Format (http://tools.ietf.org/html/rfc5322)\n- RFC6351 xCard: vCard XML Representation (https://tools.ietf.org/html/rfc6351)\n ", - "@Core.Description#Published": "2017-02-15 © Copyright 2013 SAP AG. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Communication.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Communication.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Communication.md" - } - ], - "Contact": { - "$Kind": "Term", - "$Type": "Communication.ContactType", - "$Nullable": true, - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Address book entry" - }, - "ContactType": { - "$Kind": "ComplexType", - "fn": { - "$Nullable": true, - "@Core.Description": "Full name" - }, - "n": { - "$Type": "Communication.NameType", - "$Nullable": true, - "@Core.Description": "Name" - }, - "nickname": { - "$Nullable": true, - "@Core.Description": "Nickname" - }, - "photo": { - "$Nullable": true, - "@Core.Description": "Image or photograph", - "@Core.IsURL": true - }, - "bday": { - "$Type": "Edm.Date", - "$Nullable": true, - "@Core.Description": "Birthday" - }, - "anniversary": { - "$Type": "Edm.Date", - "$Nullable": true, - "@Core.Description": "Date of marriage, or equivalent" - }, - "gender": { - "$Type": "Communication.GenderType", - "$Nullable": true, - "@Core.Description": "Sex and gender identity" - }, - "title": { - "$Nullable": true, - "@Core.Description": "Position or job title" - }, - "role": { - "$Nullable": true, - "@Core.Description": "Function or part played in a particular situation" - }, - "org": { - "$Nullable": true, - "@Core.Description": "Organization Name defined by X.520" - }, - "orgunit": { - "$Nullable": true, - "@Core.Description": "Organization Unit defined by X.520" - }, - "kind": { - "$Type": "Communication.KindType", - "$Nullable": true, - "@Core.Description": "Kind of contact" - }, - "note": { - "$Nullable": true, - "@Core.Description": "Supplemental information or a comment associated with the contact" - }, - "adr": { - "$Collection": true, - "$Type": "Communication.AddressType", - "@Core.Description": "Addresses" - }, - "tel": { - "$Collection": true, - "$Type": "Communication.PhoneNumberType", - "@Core.Description": "Phone numbers" - }, - "email": { - "$Collection": true, - "$Type": "Communication.EmailAddressType", - "@Core.Description": "Email addresses" - }, - "geo": { - "$Collection": true, - "$Type": "Communication.GeoDataType", - "@Core.Description": "Geographic locations" - }, - "url": { - "$Collection": true, - "$Type": "Communication.UrlType", - "@Core.Description": "URLs" - } - }, - "NameType": { - "$Kind": "ComplexType", - "surname": { - "$Nullable": true, - "@Core.Description": "Surname or family name" - }, - "given": { - "$Nullable": true, - "@Core.Description": "Given name" - }, - "additional": { - "$Nullable": true, - "@Core.Description": "Additional names" - }, - "prefix": { - "$Nullable": true, - "@Core.Description": "Honorific prefix(es)" - }, - "suffix": { - "$Nullable": true, - "@Core.Description": "Honorific suffix(es)" - } - }, - "Address": { - "$Kind": "Term", - "$Type": "Communication.AddressType", - "$Nullable": true, - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Address" - }, - "AddressType": { - "$Kind": "ComplexType", - "building": { - "$Nullable": true, - "@Core.Description": "Building identifier" - }, - "street": { - "$Nullable": true, - "@Core.Description": "Street address" - }, - "district": { - "$Nullable": true, - "@Core.Description": "Territorial administrative organization in a large city" - }, - "locality": { - "$Nullable": true, - "@Core.Description": "City or similar" - }, - "region": { - "$Nullable": true, - "@Core.Description": "State, province, or similar" - }, - "code": { - "$Nullable": true, - "@Core.Description": "Postal code" - }, - "country": { - "$Nullable": true, - "@Core.Description": "Country name", - "@Core.IsLanguageDependent": true - }, - "pobox": { - "$Nullable": true, - "@Core.Description": "Post office box" - }, - "ext": { - "$Nullable": true, - "@Core.Description": "Extended address (e.g., apartment or suite number)" - }, - "careof": { - "$Nullable": true, - "@Core.Description": "An intermediary who is responsible for transferring a piece of mail between the postal system and the final addressee" - }, - "label": { - "$Nullable": true, - "@Core.Description": "Delivery address label; plain-text string representing the formatted address, may contain line breaks" - }, - "type": { - "$Type": "Communication.ContactInformationType", - "$Nullable": true, - "@Core.Description": "Address type" - } - }, - "PhoneNumberType": { - "$Kind": "ComplexType", - "uri": { - "$Nullable": true, - "@Core.Description": "This SHOULD use the tel: URL schema defined in RFC3966", - "@Core.IsURL": true - }, - "type": { - "$Type": "Communication.PhoneType", - "$Nullable": true, - "@Core.Description": "Telephone type" - } - }, - "EmailAddressType": { - "$Kind": "ComplexType", - "address": { - "$Nullable": true, - "@Core.Description": "Email address" - }, - "type": { - "$Type": "Communication.ContactInformationType", - "$Nullable": true, - "@Core.Description": "Address type" - } - }, - "GeoDataType": { - "$Kind": "ComplexType", - "uri": { - "$Nullable": true, - "@Core.Description": "This SHOULD use the geo: URL schema defined in RFC5870 which encodes the same information as an Edm.GeographyPoint", - "@Core.IsURL": true - }, - "type": { - "$Type": "Communication.ContactInformationType", - "$Nullable": true, - "@Core.Description": "Address type" - } - }, - "UrlType": { - "$Kind": "ComplexType", - "uri": { - "$Nullable": true, - "@Core.Description": "This MUST use the URL schema defined in RFC3986", - "@Core.IsURL": true - }, - "type": { - "$Type": "Communication.ContactInformationType", - "$Nullable": true, - "@Core.Description": "URL type" - } - }, - "KindType": { - "$Kind": "EnumType", - "individual": 0, - "individual@Core.Description": "A single person or entity", - "group": 1, - "group@Core.Description": "A group of persons or entities", - "org": 2, - "org@Core.Description": "An organization", - "location": 3, - "location@Core.Description": "A named geographical place" - }, - "ContactInformationType": { - "$Kind": "EnumType", - "$IsFlags": true, - "work": 1, - "work@Core.Description": "Related to an individual's work place", - "home": 2, - "home@Core.Description": "Related to an indivdual's personal life", - "preferred": 4, - "preferred@Core.Description": "Preferred-use contact information" - }, - "PhoneType": { - "$Kind": "EnumType", - "$IsFlags": true, - "work": 1, - "work@Core.Description": "Work telephone number", - "home": 2, - "home@Core.Description": "Private telephone number", - "preferred": 4, - "preferred@Core.Description": "Preferred-use telephone number", - "voice": 8, - "voice@Core.Description": "Voice telephone number", - "cell": 16, - "cell@Core.Description": "Cellular or mobile telephone number", - "fax": 32, - "fax@Core.Description": "Facsimile telephone number", - "video": 64, - "video@Core.Description": "Video conferencing telephone number" - }, - "GenderType": { - "$Kind": "EnumType", - "M": 0, - "M@Core.Description": "male", - "F": 1, - "F@Core.Description": "female", - "O": 2, - "O@Core.Description": "other", - "N": 3, - "N@Core.Description": "not applicable", - "U": 4, - "U@Core.Description": "unknown" - }, - "IsEmailAddress": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property contains an email address" - }, - "IsPhoneNumber": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property contains a phone number" - }, - "Event": { - "$Kind": "Term", - "$Type": "Communication.EventData", - "$Nullable": true, - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Calendar entry" - }, - "EventData": { - "$Kind": "ComplexType", - "summary": { - "$Nullable": true, - "@Core.Description": "Short description of the event" - }, - "description": { - "$Nullable": true, - "@Core.Description": "More complete description" - }, - "categories": { - "$Collection": true, - "@Core.Description": "Categories or subtypes of the event" - }, - "dtstart": { - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$Precision": 0, - "@Core.Description": "Start date and time of the event" - }, - "dtend": { - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$Precision": 0, - "@Core.Description": "Date and time by which the event ends, alternative to duration" - }, - "duration": { - "$Type": "Edm.Duration", - "$Nullable": true, - "@Core.Description": "Duration of the event, alternative to dtend" - }, - "class": { - "$Nullable": true, - "@Core.Description": "Access classification, e.g. PUBLIC, PRIVATE, CONFIDENTIAL" - }, - "status": { - "$Nullable": true, - "@Core.Description": "Confirmation status, e.g. CONFIRMED, TENTATIVE, CANCELLED" - }, - "location": { - "$Nullable": true, - "@Core.Description": "Intended venue of the event" - }, - "transp": { - "$Type": "Edm.Boolean", - "$Nullable": true, - "@Core.Description": "Time transparency for busy time searches, true = free, false = blocked" - }, - "wholeday": { - "$Type": "Edm.Boolean", - "$Nullable": true, - "@Core.Description": "Wholeday event" - }, - "fbtype": { - "$Nullable": true, - "@Core.Description": "Free or busy time type, e.g. FREE, BUSY, BUSY-TENTATIVE" - } - }, - "Task": { - "$Kind": "Term", - "$Type": "Communication.TaskData", - "$Nullable": true, - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Task list entry" - }, - "TaskData": { - "$Kind": "ComplexType", - "summary": { - "$Nullable": true, - "@Core.Description": "Short description of the task" - }, - "description": { - "$Nullable": true, - "@Core.Description": "More complete description of the task" - }, - "due": { - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$Precision": 0, - "@Core.Description": "Date and time that a to-do is expected to be completed" - }, - "completed": { - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$Precision": 0, - "@Core.Description": "Date and time that a to-do was actually completed" - }, - "percentcomplete": { - "$Type": "Edm.Byte", - "$Nullable": true, - "@Core.Description": "Percent completion of a to-do, e.g. 50 for half done" - }, - "priority": { - "$Type": "Edm.Byte", - "$Nullable": true, - "@Core.Description": "Relative priority, 0 = undefined, 1 = highest, 9 = lowest" - } - }, - "Message": { - "$Kind": "Term", - "$Type": "Communication.MessageData", - "$Nullable": true, - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Email message" - }, - "MessageData": { - "$Kind": "ComplexType", - "from": { - "$Nullable": true, - "@Core.Description": "Author(s) of the message" - }, - "sender": { - "$Nullable": true, - "@Core.Description": "Agent responsible for the actual transmission of the message, e.g. a secretary" - }, - "to": { - "$Collection": true, - "@Core.Description": "List of primary recipients" - }, - "cc": { - "$Collection": true, - "@Core.Description": "List of other recipients (carbon copy)" - }, - "bcc": { - "$Collection": true, - "@Core.Description": "List of recipients whose addresses are not to be revealed (blind carbon copy)" - }, - "subject": { - "$Nullable": true, - "@Core.Description": "Topic of the message" - }, - "body": { - "$Nullable": true, - "@Core.Description": "Main part of the message" - }, - "keywords": { - "$Collection": true, - "@Core.Description": "List of important words and phrases that might be useful for the recipient" - }, - "received": { - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$Precision": 0, - "@Core.Description": "Date and time the message was received" - } - } + "MessageData": { + "$Kind": "ComplexType", + "from": { "$Nullable": true, "@Core.Description": "Author(s) of the message" }, + "sender": { + "$Nullable": true, + "@Core.Description": "Agent responsible for the actual transmission of the message, e.g. a secretary" + }, + "to": { "$Collection": true, "@Core.Description": "List of primary recipients" }, + "cc": { "$Collection": true, "@Core.Description": "List of other recipients (carbon copy)" }, + "bcc": { + "$Collection": true, + "@Core.Description": "List of recipients whose addresses are not to be revealed (blind carbon copy)" + }, + "subject": { "$Nullable": true, "@Core.Description": "Topic of the message" }, + "body": { "$Nullable": true, "@Core.Description": "Main part of the message" }, + "keywords": { + "$Collection": true, + "@Core.Description": "List of important words and phrases that might be useful for the recipient" + }, + "received": { + "$Type": "Edm.DateTimeOffset", + "$Nullable": true, + "$Precision": 0, + "@Core.Description": "Date and time the message was received" + } } -} \ No newline at end of file + } +} diff --git a/vocabularies/DataIntegration.json b/vocabularies/DataIntegration.json index 3277de61..eebd0a4c 100644 --- a/vocabularies/DataIntegration.json +++ b/vocabularies/DataIntegration.json @@ -1,97 +1,70 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] + } + }, + "com.sap.vocabularies.DataIntegration.v1": { + "$Alias": "DataIntegration", + "@Core.Description": "Terms for Data Integration", + "@Core.Description#Published": "2021-02-11 © Copyright 2021 SAP AG. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/DataIntegration.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/DataIntegration.json" }, + { + "rel": "describedby", + "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/DataIntegration.md" + } + ], + "Extractable": { + "$Kind": "Term", + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "$AppliesTo": ["EntitySet"], + "@Core.Description": "Defines if entity set is extractable" + }, + "OriginalDataType": { + "$Kind": "Term", + "$AppliesTo": ["Property"], + "@Core.Description": "Original data type of the annotated property in its source system", + "@Core.LongDescription": "The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition.", + "@Core.Example": { "@DataIntegration.OriginalDataType": "CHAR(000010)" } + }, + "OriginalName": { + "$Kind": "Term", + "@Core.Description": "Original name of the annotated model element in its source model", + "@Core.LongDescription": "The provider of an OData service maps its local names to Edm identifiers, which may require removing or replacing characters that are not allowed.", + "@Core.Example": { "@DataIntegration.OriginalName": "what::is-in.a/name?" } + }, + "ConversionExit": { + "$Kind": "Term", + "$AppliesTo": ["Property"], + "@Core.Description": "Identifier that describes the special output conversion of the annotated property in the source system", + "@Core.LongDescription": "The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition.", + "@Core.Example": { "@DataIntegration.ConversionExit": "ALPHA" } + }, + "SourceSystem": { + "$Kind": "Term", + "$AppliesTo": ["Container"], + "@Core.Description": "Identifier that classifies the type of the source system", + "@Core.LongDescription": "The original type name used in annotation OriginalDataType depend are specific to different source system. Sourc system type ABAP uses other type names as source system type HANA." + }, + "DeltaMethodType": { + "$Kind": "EnumType", + "$IsFlags": true, + "INSERT": 1, + "INSERT@Core.Description": "Delta is supported for inserts", + "UPDATE": 2, + "UPDATE@Core.Description": "Delta is supported for updates", + "DELETE": 4, + "DELETE@Core.Description": "Delta is supported for deletes" }, - "com.sap.vocabularies.DataIntegration.v1": { - "$Alias": "DataIntegration", - "@Core.Description": "Terms for Data Integration", - "@Core.Description#Published": "2021-02-11 © Copyright 2021 SAP AG. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/DataIntegration.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/DataIntegration.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/DataIntegration.md" - } - ], - "Extractable": { - "$Kind": "Term", - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "$AppliesTo": [ - "EntitySet" - ], - "@Core.Description": "Defines if entity set is extractable" - }, - "OriginalDataType": { - "$Kind": "Term", - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Original data type of the annotated property in its source system", - "@Core.LongDescription": "The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition.", - "@Core.Example": { - "@DataIntegration.OriginalDataType": "CHAR(000010)" - } - }, - "OriginalName": { - "$Kind": "Term", - "@Core.Description": "Original name of the annotated model element in its source model", - "@Core.LongDescription": "The provider of an OData service maps its local names to Edm identifiers, which may require removing or replacing characters that are not allowed.", - "@Core.Example": { - "@DataIntegration.OriginalName": "what::is-in.a/name?" - } - }, - "ConversionExit": { - "$Kind": "Term", - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Identifier that describes the special output conversion of the annotated property in the source system", - "@Core.LongDescription": "The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition.", - "@Core.Example": { - "@DataIntegration.ConversionExit": "ALPHA" - } - }, - "SourceSystem": { - "$Kind": "Term", - "$AppliesTo": [ - "Container" - ], - "@Core.Description": "Identifier that classifies the type of the source system", - "@Core.LongDescription": "The original type name used in annotation OriginalDataType depend are specific to different source system. Sourc system type ABAP uses other type names as source system type HANA." - }, - "DeltaMethodType": { - "$Kind": "EnumType", - "$IsFlags": true, - "INSERT": 1, - "INSERT@Core.Description": "Delta is supported for inserts", - "UPDATE": 2, - "UPDATE@Core.Description": "Delta is supported for updates", - "DELETE": 4, - "DELETE@Core.Description": "Delta is supported for deletes" - }, - "DeltaMethod": { - "$Kind": "Term", - "$Type": "DataIntegration.DeltaMethodType", - "$AppliesTo": [ - "EntitySet" - ], - "@Core.Description": "Defines which delta method the entity set supports. Only evaluated if Capabilities.ChangeTracking/Supported is true" - } + "DeltaMethod": { + "$Kind": "Term", + "$Type": "DataIntegration.DeltaMethodType", + "$AppliesTo": ["EntitySet"], + "@Core.Description": "Defines which delta method the entity set supports. Only evaluated if Capabilities.ChangeTracking/Supported is true" } -} \ No newline at end of file + } +} diff --git a/vocabularies/DirectEdit.json b/vocabularies/DirectEdit.json index 62beeb20..b7792c35 100644 --- a/vocabularies/DirectEdit.json +++ b/vocabularies/DirectEdit.json @@ -1,71 +1,45 @@ { - "$Version": "4.01", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Validation.V1", - "$Alias": "Validation" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.01", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "com.sap.vocabularies.DirectEdit.v1": { - "$Alias": "DirectEdit", - "@Core.Description": "Terms for Direct-Edit User Interfaces", - "@Core.Description#Published": "2020-07-10 © Copyright 2020 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/DirectEdit.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/DirectEdit.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/DirectEdit.md" - } - ], - "SideEffects": { - "$Kind": "Term", - "$Type": "DirectEdit.SideEffectsType", - "$AppliesTo": [ - "EntitySet" - ], - "@Common.Experimental": true, - "@Core.Description": "Determine side effects of client-side data modification" - }, - "SideEffectsType": { - "$Kind": "ComplexType", - "@Common.Experimental": true, - "@Core.LongDescription": "After a change to a property whose path is contained in `Triggers`, the client should pass the entity with the changed property to the `CalculationFunction` and receive the entity with all changes that happen as side effects of the given change.", - "Triggers": { - "$Collection": true, - "@Core.Description": "List of paths to the properties whose changes should trigger the side effects calculation.", - "@Validation.MinItems": 1 - }, - "CalculationFunction": { - "$Type": "Common.QualifiedName", - "@Core.Description": "The operation calculating the side effects. While non-changing for the service, this technically is an action bound to the entity set so that the parameters can be sent in the POST request body. The action has the following non-binding parameters:\n\n- `Qualifier` of type [`Core.SimpleIdentifier`](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#SimpleIdentifier)\n or cast-compatible: the qualifier of the `SideEffects` annotation\n\n- `Trigger` of type `Edm.String`: the trigger of the side-effects determination, see `Triggers` property\n\n- `Data` of either the entity type of the annotated entity set or a complex type that is structure-compatible with it\n\nThe **return type** of the action also needs to be either the entity type of the annotated entity set or structure-compatible with it,\nit can be the same type as for `Data`.\n\nStructure-compatible means:\n\n- each primitive property that has the same name as a corresponding primitive property of the entity type of the annotated entity set is cast-compatible with the corresponding property and is nullable, \n\n- each complex property that has the same name as a corresponding complex or navigation property of the entity type of the annotated entity set is structure-compatible with the corresponding property\n \n- it may contain properties without a corresponding property in the entity type\n\n- it may omit properties of the entity type" - } - } + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Validation.V1", "$Alias": "Validation" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] + } + }, + "com.sap.vocabularies.DirectEdit.v1": { + "$Alias": "DirectEdit", + "@Core.Description": "Terms for Direct-Edit User Interfaces", + "@Core.Description#Published": "2020-07-10 © Copyright 2020 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/DirectEdit.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/DirectEdit.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/DirectEdit.md" } + ], + "SideEffects": { + "$Kind": "Term", + "$Type": "DirectEdit.SideEffectsType", + "$AppliesTo": ["EntitySet"], + "@Common.Experimental": true, + "@Core.Description": "Determine side effects of client-side data modification" + }, + "SideEffectsType": { + "$Kind": "ComplexType", + "@Common.Experimental": true, + "@Core.LongDescription": "After a change to a property whose path is contained in `Triggers`, the client should pass the entity with the changed property to the `CalculationFunction` and receive the entity with all changes that happen as side effects of the given change.", + "Triggers": { + "$Collection": true, + "@Core.Description": "List of paths to the properties whose changes should trigger the side effects calculation.", + "@Validation.MinItems": 1 + }, + "CalculationFunction": { + "$Type": "Common.QualifiedName", + "@Core.Description": "The operation calculating the side effects. While non-changing for the service, this technically is an action bound to the entity set so that the parameters can be sent in the POST request body. The action has the following non-binding parameters:\n\n- `Qualifier` of type [`Core.SimpleIdentifier`](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md#SimpleIdentifier)\n or cast-compatible: the qualifier of the `SideEffects` annotation\n\n- `Trigger` of type `Edm.String`: the trigger of the side-effects determination, see `Triggers` property\n\n- `Data` of either the entity type of the annotated entity set or a complex type that is structure-compatible with it\n\nThe **return type** of the action also needs to be either the entity type of the annotated entity set or structure-compatible with it,\nit can be the same type as for `Data`.\n\nStructure-compatible means:\n\n- each primitive property that has the same name as a corresponding primitive property of the entity type of the annotated entity set is cast-compatible with the corresponding property and is nullable, \n\n- each complex property that has the same name as a corresponding complex or navigation property of the entity type of the annotated entity set is structure-compatible with the corresponding property\n \n- it may contain properties without a corresponding property in the entity type\n\n- it may omit properties of the entity type" + } } -} \ No newline at end of file + } +} diff --git a/vocabularies/Graph.json b/vocabularies/Graph.json index 3d800a29..74527794 100644 --- a/vocabularies/Graph.json +++ b/vocabularies/Graph.json @@ -1,89 +1,63 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.JSON.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.JSON.V1", - "$Alias": "JSON" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "com.sap.vocabularies.Graph.v1": { - "$Alias": "Graph", + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.JSON.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.JSON.V1", "$Alias": "JSON" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] + } + }, + "com.sap.vocabularies.Graph.v1": { + "$Alias": "Graph", + "@Common.Experimental": true, + "@Core.Description": "Terms for SAP Graph", + "@Core.Description#Published": "2020-03-11 © Copyright 2020 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Graph.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Graph.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Graph.md" } + ], + "traceId": { + "$Kind": "Term", + "@Common.Experimental": true, + "@Common.IsInstanceAnnotation": true, + "@Core.Description": "The traceId contains a unique string that is preserved across multiple requests and log files. It is used in error responses to help diagnose problems by correlating log entries." + }, + "Details": { + "$Kind": "Term", + "$Type": "Graph.DetailsType", + "@Common.Experimental": true, + "@Common.IsInstanceAnnotation": true, + "@Core.Description": "Graph-specific details for error responses" + }, + "DetailsType": { + "$Kind": "ComplexType", + "@Common.Experimental": true, + "@Core.Description": "Graph-specific details for error responses", + "url": { + "$Nullable": true, + "@Common.Experimental": true, + "@Core.IsURL": true, + "@Core.Description": "URL sent to the business system tenant" + }, + "body": { + "$Type": "JSON.JSON", + "$Nullable": true, "@Common.Experimental": true, - "@Core.Description": "Terms for SAP Graph", - "@Core.Description#Published": "2020-03-11 © Copyright 2020 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Graph.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Graph.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Graph.md" - } - ], - "traceId": { - "$Kind": "Term", - "@Common.Experimental": true, - "@Common.IsInstanceAnnotation": true, - "@Core.Description": "The traceId contains a unique string that is preserved across multiple requests and log files. It is used in error responses to help diagnose problems by correlating log entries." - }, - "Details": { - "$Kind": "Term", - "$Type": "Graph.DetailsType", - "@Common.Experimental": true, - "@Common.IsInstanceAnnotation": true, - "@Core.Description": "Graph-specific details for error responses" - }, - "DetailsType": { - "$Kind": "ComplexType", - "@Common.Experimental": true, - "@Core.Description": "Graph-specific details for error responses", - "url": { - "$Nullable": true, - "@Common.Experimental": true, - "@Core.IsURL": true, - "@Core.Description": "URL sent to the business system tenant" - }, - "body": { - "$Type": "JSON.JSON", - "$Nullable": true, - "@Common.Experimental": true, - "@Core.Description": "Request body sent to the business system tenant" - } - }, - "CompositionRoot": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "EntityType" - ], - "@Common.Experimental": true, - "@Core.Description": "The annotated entity type is the root type of a composition tree." - } + "@Core.Description": "Request body sent to the business system tenant" + } + }, + "CompositionRoot": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["EntityType"], + "@Common.Experimental": true, + "@Core.Description": "The annotated entity type is the root type of a composition tree." } -} \ No newline at end of file + } +} diff --git a/vocabularies/HTML5.json b/vocabularies/HTML5.json index 67a762bf..14ed1751 100644 --- a/vocabularies/HTML5.json +++ b/vocabularies/HTML5.json @@ -1,50 +1,34 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] + } + }, + "com.sap.vocabularies.HTML5.v1": { + "$Alias": "HTML5", + "@Core.Description": "Terms for HTML5", + "@Core.LongDescription": "The HTML5 vocabulary provides rendering hints for HTML5 clients", + "@Core.Description#Published": "2020-04-21 © Copyright 2020 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/HTML5.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/HTML5.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/HTML5.md" } + ], + "CssDefaults": { + "$Kind": "Term", + "$Type": "HTML5.CssDefaultsType", + "$AppliesTo": ["Record"], + "@Core.Description": "CSS definitions that may be used as defaults", + "@Core.LongDescription": "This term can applied to e.g. UI.DataFieldAbstract records" }, - "com.sap.vocabularies.HTML5.v1": { - "$Alias": "HTML5", - "@Core.Description": "Terms for HTML5", - "@Core.LongDescription": "The HTML5 vocabulary provides rendering hints for HTML5 clients", - "@Core.Description#Published": "2020-04-21 © Copyright 2020 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/HTML5.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/HTML5.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/HTML5.md" - } - ], - "CssDefaults": { - "$Kind": "Term", - "$Type": "HTML5.CssDefaultsType", - "$AppliesTo": [ - "Record" - ], - "@Core.Description": "CSS definitions that may be used as defaults", - "@Core.LongDescription": "This term can applied to e.g. UI.DataFieldAbstract records" - }, - "CssDefaultsType": { - "$Kind": "ComplexType", - "width": { - "$Nullable": true, - "@Core.Description": "css: width, see https://www.w3.org/TR/CSS21/visudet.html#propdef-width", - "@Core.LongDescription": "\n The property allows all values specified for the original css width property.\n Note that clients consuming this annotation may only support selected length units.\n " - } - } + "CssDefaultsType": { + "$Kind": "ComplexType", + "width": { + "$Nullable": true, + "@Core.Description": "css: width, see https://www.w3.org/TR/CSS21/visudet.html#propdef-width", + "@Core.LongDescription": "\n The property allows all values specified for the original css width property.\n Note that clients consuming this annotation may only support selected length units.\n " + } } -} \ No newline at end of file + } +} diff --git a/vocabularies/Hierarchy.json b/vocabularies/Hierarchy.json index 68d91ea9..3ecc4e54 100644 --- a/vocabularies/Hierarchy.json +++ b/vocabularies/Hierarchy.json @@ -1,91 +1,65 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Aggregation.V1", - "$Alias": "Aggregation" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "com.sap.vocabularies.Hierarchy.v1": { - "$Alias": "Hierarchy", - "@Core.Description": "Terms for Hierarchies", - "@Core.Description#Published": "2018-01-31 © Copyright 2018 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Hierarchy.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Hierarchy.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Hierarchy.md" - } - ], - "RecursiveHierarchy": { - "$Kind": "Term", - "$Type": "Hierarchy.RecursiveHierarchyType", - "$AppliesTo": [ - "EntityType" - ], - "$BaseTerm": "Aggregation.RecursiveHierarchy", - "@Common.Experimental": true, - "@Core.Description": "Defines a recursive hierarchy", - "@Core.LongDescription": "The [base term](https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.html#RecursiveHierarchy)\n governs what are the nodes and parents in the hierarchy, whereas this annotation designates properties that contain derived information." - }, - "RecursiveHierarchyType": { - "$Kind": "ComplexType", - "@Common.Experimental": true, - "ExternalKeyProperty": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Property holding the external key value for a node" - }, - "DescendantCountProperty": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Core.Description": "Property holding the number of descendants of a node", - "@Core.LongDescription": "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." - }, - "DrillStateProperty": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Core.Description": "Property holding the drill state of a node", - "@Core.LongDescription": "The drill state is indicated by one of the following string values: `collapsed`, `expanded`, `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." - }, - "SiblingRankProperty": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Core.Description": "Property holding the sibling rank of a node", - "@Core.LongDescription": "The sibling rank of a node is the index of the node in the sequence of all nodes with the same parent created by preorder traversal of the hierarchy structure after evaluating the $filter expression in the request excluding any conditions on key properties. The first sibling is at position 0." - }, - "PreorderRankProperty": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Core.Description": "Property holding the preorder rank of a node", - "@Core.LongDescription": "The preorder rank of a node expresses its position in the sequence of nodes created from preorder traversal of the hierarchy structure after evaluating the $filter expression in the request excluding any conditions on key properties. The first node in preorder traversal has rank 0." - } - } + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Aggregation.V1", "$Alias": "Aggregation" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] + } + }, + "com.sap.vocabularies.Hierarchy.v1": { + "$Alias": "Hierarchy", + "@Core.Description": "Terms for Hierarchies", + "@Core.Description#Published": "2018-01-31 © Copyright 2018 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Hierarchy.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Hierarchy.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Hierarchy.md" } + ], + "RecursiveHierarchy": { + "$Kind": "Term", + "$Type": "Hierarchy.RecursiveHierarchyType", + "$AppliesTo": ["EntityType"], + "$BaseTerm": "Aggregation.RecursiveHierarchy", + "@Common.Experimental": true, + "@Core.Description": "Defines a recursive hierarchy", + "@Core.LongDescription": "The [base term](https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.html#RecursiveHierarchy)\n governs what are the nodes and parents in the hierarchy, whereas this annotation designates properties that contain derived information." + }, + "RecursiveHierarchyType": { + "$Kind": "ComplexType", + "@Common.Experimental": true, + "ExternalKeyProperty": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Property holding the external key value for a node" + }, + "DescendantCountProperty": { + "$Type": "Edm.PropertyPath", + "$Nullable": true, + "@Core.Description": "Property holding the number of descendants of a node", + "@Core.LongDescription": "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." + }, + "DrillStateProperty": { + "$Type": "Edm.PropertyPath", + "$Nullable": true, + "@Core.Description": "Property holding the drill state of a node", + "@Core.LongDescription": "The drill state is indicated by one of the following string values: `collapsed`, `expanded`, `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." + }, + "SiblingRankProperty": { + "$Type": "Edm.PropertyPath", + "$Nullable": true, + "@Core.Description": "Property holding the sibling rank of a node", + "@Core.LongDescription": "The sibling rank of a node is the index of the node in the sequence of all nodes with the same parent created by preorder traversal of the hierarchy structure after evaluating the $filter expression in the request excluding any conditions on key properties. The first sibling is at position 0." + }, + "PreorderRankProperty": { + "$Type": "Edm.PropertyPath", + "$Nullable": true, + "@Core.Description": "Property holding the preorder rank of a node", + "@Core.LongDescription": "The preorder rank of a node expresses its position in the sequence of nodes created from preorder traversal of the hierarchy structure after evaluating the $filter expression in the request excluding any conditions on key properties. The first node in preorder traversal has rank 0." + } } -} \ No newline at end of file + } +} diff --git a/vocabularies/ODM.json b/vocabularies/ODM.json index 1b6bb17d..15e21ece 100644 --- a/vocabularies/ODM.json +++ b/vocabularies/ODM.json @@ -1,82 +1,54 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "com.sap.vocabularies.ODM.v1": { - "$Alias": "ODM", - "@Common.Experimental": true, - "@Core.Description": "Terms for One Domain Model", - "@Core.Description#Published": "2020-03-03 © Copyright 2020 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/ODM.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/ODM.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/ODM.md" - } - ], - "codeList": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "EntityType", - "EntitySet" - ], - "@Common.Experimental": true, - "@Core.Description": "The annotated entity set represents a list of code values, the annotated entity type represents an entry in a code list" - }, - "root": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "EntitySet" - ], - "@Common.Experimental": true, - "@Core.Description": "The annotated entity set contains root entities", - "@Core.LongDescription": "Root Entities have an independent lifetime and are reachable as top level resources in APIs. These are usually the key entities of a domain, sometimes also called 'business objects'. They are called aggregate roots in DDD terminology." - }, - "oid": { - "$Kind": "Term", - "$Type": "Edm.PropertyPath", - "$AppliesTo": [ - "EntityType" - ], - "@Common.Experimental": true, - "@Core.Description": "The named field is an OID (ODM identifier), and it uniquely identifies an ODM root entity in a customer landscape.", - "@Core.LongDescription": "The technical type can be UUID or String (typical length 128), and the value must be stable and unique at least within type and landscape (better globally). \nAn entity may have other IDs, i.e. a local ID and other alternative IDs. " - }, - "entityName": { - "$Kind": "Term", - "$AppliesTo": [ - "EntityType" - ], - "@Common.Experimental": true, - "@Core.Description": "Name of an ODM entity as a general concept, not a concrete version thereof", - "@Core.LongDescription": "The annotated OData entity is one of many representations of the ODM entity. Annotating the OData entity with this term helps consumers find APIs that process or expose the same entity." - } + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] } -} \ No newline at end of file + }, + "com.sap.vocabularies.ODM.v1": { + "$Alias": "ODM", + "@Common.Experimental": true, + "@Core.Description": "Terms for One Domain Model", + "@Core.Description#Published": "2020-03-03 © Copyright 2020 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/ODM.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/ODM.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/ODM.md" } + ], + "codeList": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["EntityType", "EntitySet"], + "@Common.Experimental": true, + "@Core.Description": "The annotated entity set represents a list of code values, the annotated entity type represents an entry in a code list" + }, + "root": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["EntitySet"], + "@Common.Experimental": true, + "@Core.Description": "The annotated entity set contains root entities", + "@Core.LongDescription": "Root Entities have an independent lifetime and are reachable as top level resources in APIs. These are usually the key entities of a domain, sometimes also called 'business objects'. They are called aggregate roots in DDD terminology." + }, + "oid": { + "$Kind": "Term", + "$Type": "Edm.PropertyPath", + "$AppliesTo": ["EntityType"], + "@Common.Experimental": true, + "@Core.Description": "The named field is an OID (ODM identifier), and it uniquely identifies an ODM root entity in a customer landscape.", + "@Core.LongDescription": "The technical type can be UUID or String (typical length 128), and the value must be stable and unique at least within type and landscape (better globally). \nAn entity may have other IDs, i.e. a local ID and other alternative IDs. " + }, + "entityName": { + "$Kind": "Term", + "$AppliesTo": ["EntityType"], + "@Common.Experimental": true, + "@Core.Description": "Name of an ODM entity as a general concept, not a concrete version thereof", + "@Core.LongDescription": "The annotated OData entity is one of many representations of the ODM entity. Annotating the OData entity with this term helps consumers find APIs that process or expose the same entity." + } + } +} diff --git a/vocabularies/Offline.json b/vocabularies/Offline.json index 6aa7d4b1..1aa59df0 100644 --- a/vocabularies/Offline.json +++ b/vocabularies/Offline.json @@ -1,56 +1,31 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "com.sap.vocabularies.Offline.v1": { - "$Alias": "Offline", - "@Core.Description": "Terms for annotating Offline OData", - "@Core.LongDescription": "\nOffline OData is a solution for data synchronization between back-ends and mobile devices.\nIt is built on top of in-house technology which has been designed and used in database synchronization for over 20 years.\nPlease refer to the [Offline OData product home](https://help.sap.com/doc/f53c64b93e5140918d676b927a3cd65b/Cloud/en-US/docs-en/guides/features/offline/overview.html) for details.\n ", - "@Core.Description#Published": "2022-10-27 © Copyright 2022 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Offline.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Offline.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Offline.md" - } - ], - "ClientOnly": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "EntityType", - "EntitySet", - "EnumType", - "ComplexType", - "TypeDefinition" - ], - "@Common.Experimental": true, - "@Core.Description": "The annotated model element exists only on client devices", - "@Core.LongDescription": "Occasionally a customer will want to store additional “client-only”\n entities in the same DB. The easiest way to accommodate this is for the client \n to extend the backend-returned $metadata (upon which the local persistence is \n based) and just to mark some entities as client-only so that the client won’t\n attempt to upload any changes that are made to them locally.\n The service as implemented on the server is described by the CSDL document if\n all elements tagged as `Offline.ClientOnly` are removed together with all subsequently dangling references." - } + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] } -} \ No newline at end of file + }, + "com.sap.vocabularies.Offline.v1": { + "$Alias": "Offline", + "@Core.Description": "Terms for annotating Offline OData", + "@Core.LongDescription": "\nOffline OData is a solution for data synchronization between back-ends and mobile devices.\nIt is built on top of in-house technology which has been designed and used in database synchronization for over 20 years.\nPlease refer to the [Offline OData product home](https://help.sap.com/doc/f53c64b93e5140918d676b927a3cd65b/Cloud/en-US/docs-en/guides/features/offline/overview.html) for details.\n ", + "@Core.Description#Published": "2022-10-27 © Copyright 2022 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Offline.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Offline.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Offline.md" } + ], + "ClientOnly": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["EntityType", "EntitySet", "EnumType", "ComplexType", "TypeDefinition"], + "@Common.Experimental": true, + "@Core.Description": "The annotated model element exists only on client devices", + "@Core.LongDescription": "Occasionally a customer will want to store additional “client-only”\n entities in the same DB. The easiest way to accommodate this is for the client \n to extend the backend-returned $metadata (upon which the local persistence is \n based) and just to mark some entities as client-only so that the client won’t\n attempt to upload any changes that are made to them locally.\n The service as implemented on the server is described by the CSDL document if\n all elements tagged as `Offline.ClientOnly` are removed together with all subsequently dangling references." + } + } +} diff --git a/vocabularies/PDF.json b/vocabularies/PDF.json index 2683b07a..330df290 100644 --- a/vocabularies/PDF.json +++ b/vocabularies/PDF.json @@ -1,112 +1,65 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "com.sap.vocabularies.PDF.v1": { - "$Alias": "PDF", - "@Core.Description": "Terms for PDF response format", - "@Core.LongDescription": "The PDF vocabulary provides information about the PDF format of a response", - "@Core.Description#Published": "2021-10-27 © Copyright 2021 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/PDF.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/PDF.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/PDF.md" - } - ], - "Features": { - "$Kind": "Term", - "$Type": "PDF.FeaturesType", - "$AppliesTo": [ - "EntityContainer" - ], - "@Core.Description": "Features for the PDF" - }, - "FeaturesType": { - "$Kind": "ComplexType", - "DocumentDescriptionReference": { - "@Core.IsURL": true, - "@Core.Description": "Reference of the Service for the DocumentDescription" - }, - "DocumentDescriptionCollection": { - "@Core.Description": "Name of entity set containing the DocumentDescription" - }, - "ArchiveFormat": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "PDFA conformant format" - }, - "Signature": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Signing the document" - }, - "CoverPage": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Cover Page" - }, - "FontName": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Font name" - }, - "FontSize": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Font size" - }, - "Margin": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Margin size" - }, - "Border": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Border size of the table" - }, - "FitToPage": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Fit to page", - "@Core.LongDescription": "If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor." - }, - "ResultSizeDefault": { - "$Type": "Edm.Int32", - "$Nullable": true, - "@Core.Description": "Default result size", - "@Core.LongDescription": " Default result size for PDF documents. Used if $top has not been provided." - }, - "ResultSizeMaximum": { - "$Type": "Edm.Int32", - "$Nullable": true, - "@Core.Description": "Maximum result size", - "@Core.LongDescription": "Max result size for PDF documents. Used if $top has been provided and $top > ResultSizeMaximum" - } - } + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] } -} \ No newline at end of file + }, + "com.sap.vocabularies.PDF.v1": { + "$Alias": "PDF", + "@Core.Description": "Terms for PDF response format", + "@Core.LongDescription": "The PDF vocabulary provides information about the PDF format of a response", + "@Core.Description#Published": "2021-10-27 © Copyright 2021 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/PDF.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/PDF.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/PDF.md" } + ], + "Features": { + "$Kind": "Term", + "$Type": "PDF.FeaturesType", + "$AppliesTo": ["EntityContainer"], + "@Core.Description": "Features for the PDF" + }, + "FeaturesType": { + "$Kind": "ComplexType", + "DocumentDescriptionReference": { + "@Core.IsURL": true, + "@Core.Description": "Reference of the Service for the DocumentDescription" + }, + "DocumentDescriptionCollection": { "@Core.Description": "Name of entity set containing the DocumentDescription" }, + "ArchiveFormat": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "PDFA conformant format" + }, + "Signature": { "$Type": "Edm.Boolean", "$DefaultValue": false, "@Core.Description": "Signing the document" }, + "CoverPage": { "$Type": "Edm.Boolean", "$DefaultValue": false, "@Core.Description": "Cover Page" }, + "FontName": { "$Type": "Edm.Boolean", "$DefaultValue": false, "@Core.Description": "Font name" }, + "FontSize": { "$Type": "Edm.Boolean", "$DefaultValue": false, "@Core.Description": "Font size" }, + "Margin": { "$Type": "Edm.Boolean", "$DefaultValue": false, "@Core.Description": "Margin size" }, + "Border": { "$Type": "Edm.Boolean", "$DefaultValue": false, "@Core.Description": "Border size of the table" }, + "FitToPage": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "Fit to page", + "@Core.LongDescription": "If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor." + }, + "ResultSizeDefault": { + "$Type": "Edm.Int32", + "$Nullable": true, + "@Core.Description": "Default result size", + "@Core.LongDescription": " Default result size for PDF documents. Used if $top has not been provided." + }, + "ResultSizeMaximum": { + "$Type": "Edm.Int32", + "$Nullable": true, + "@Core.Description": "Maximum result size", + "@Core.LongDescription": "Max result size for PDF documents. Used if $top has been provided and $top > ResultSizeMaximum" + } + } + } +} diff --git a/vocabularies/PersonalData.json b/vocabularies/PersonalData.json index dd695ba0..aa44eae5 100644 --- a/vocabularies/PersonalData.json +++ b/vocabularies/PersonalData.json @@ -1,174 +1,138 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] + }, + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Validation.V1", "$Alias": "Validation" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] + } + }, + "com.sap.vocabularies.PersonalData.v1": { + "$Alias": "PersonalData", + "@Core.Description": "Terms for annotating Personal Data", + "@Core.Description#Published": "2018-01-24 © Copyright 2018 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/PersonalData.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/PersonalData.json" }, + { + "rel": "describedby", + "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/PersonalData.md" + } + ], + "@Core.LongDescription": "\n## Definition\n\nPersonal Data is any information relating to an identified or identifiable natural person (\"data subject\"). \n\nAn identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier, or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural, or social identity of that natural person.\n\nPersonal data can only be processed under certain legal grounds, e.g. explicit consent of the data subject or a contractual obligation.\n\nThis vocabulary defines terms specific to the European [General Data Protection Regulation (GDPR)](https://ec.europa.eu/info/law/law-topic/data-protection_en).\n\nTerms for contact and address information are defined in the [Communication vocabulary](Communication.md#).\n\n### References\n- [European Commission: Reform of EU data protection rules](https://ec.europa.eu/info/law/law-topic/data-protection/reform_en)\n- [European Commission: Rules for business and organisations](https://ec.europa.eu/info/law/law-topic/data-protection/reform/rules-business-and-organisations_en)\n- [European Commission: Legal grounds for processing data](https://ec.europa.eu/info/law/law-topic/data-protection/reform/rules-business-and-organisations/legal-grounds-processing-data_en).\n ", + "EntitySemantics": { + "$Kind": "Term", + "$Type": "PersonalData.EntitySemanticsType", + "$AppliesTo": ["EntitySet"], + "@Core.Description": "Primary meaning of the entities in the annotated entity set" + }, + "DataSubjectRole": { + "$Kind": "Term", + "$Nullable": true, + "$AppliesTo": ["EntitySet"], + "@Common.Experimental": true, + "@Core.Description": "Role of the data subjects in this set (e.g. employee, customer)", + "@Core.LongDescription": "Values are application-specific. \n Can be a static value or a `Path` expression If the role varies per entity" + }, + "DataSubjectRoleDescription": { + "$Kind": "Term", + "$Nullable": true, + "$AppliesTo": ["EntitySet"], + "@Common.Experimental": true, + "@Core.IsLanguageDependent": true, + "@Core.Description": "Language-dependent description of the role of the data subjects in this set (e.g. employee, customer)", + "@Core.LongDescription": "Values are application-specific. \n Can be a static value or a `Path` expression If the role varies per entity" + }, + "EntitySemanticsType": { + "$Kind": "TypeDefinition", + "$UnderlyingType": "Edm.String", + "@Core.Description": "Primary meaning of the data contained in the annotated entity set", + "@Validation.AllowedValues": [ + { + "Value": "DataSubject", + "@Core.Description": "Entities describing a data subject (an identified or identifiable natural person), e.g. customer, vendor, employee", + "@Core.LongDescription": "These entities are relevant for audit logging. There are no restrictions on their structure. The properties should be annotated suitably with [FieldSemantics](#FieldSemantics)." }, - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Validation.V1", - "$Alias": "Validation" - } - ] + { + "Value": "DataSubjectDetails", + "@Core.Description": "Entities containing details to a data subject (an identified or identifiable natural person) but not representing data subjects by themselves, e.g. street addresses, email addresses, phone numbers", + "@Core.LongDescription": "These entities are relevant for audit logging. There are no restrictions on their structure. The properties should be annotated suitably with [FieldSemantics](#FieldSemantics)." }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] + { + "Value": "Other", + "@Core.Description": "Entities containing personal data or references to data subjects but not representing data subjects or data subject details by themselves, e.g. customer quote, customer order, purchase order with involved business partners", + "@Core.LongDescription": "These entities are relevant for audit logging. There are no restrictions on their structure. The properties should be annotated suitably with [FieldSemantics](#FieldSemantics)." } + ] }, - "com.sap.vocabularies.PersonalData.v1": { - "$Alias": "PersonalData", - "@Core.Description": "Terms for annotating Personal Data", - "@Core.Description#Published": "2018-01-24 © Copyright 2018 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/PersonalData.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/PersonalData.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/PersonalData.md" - } - ], - "@Core.LongDescription": "\n## Definition\n\nPersonal Data is any information relating to an identified or identifiable natural person (\"data subject\"). \n\nAn identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier, or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural, or social identity of that natural person.\n\nPersonal data can only be processed under certain legal grounds, e.g. explicit consent of the data subject or a contractual obligation.\n\nThis vocabulary defines terms specific to the European [General Data Protection Regulation (GDPR)](https://ec.europa.eu/info/law/law-topic/data-protection_en).\n\nTerms for contact and address information are defined in the [Communication vocabulary](Communication.md#).\n\n### References\n- [European Commission: Reform of EU data protection rules](https://ec.europa.eu/info/law/law-topic/data-protection/reform_en)\n- [European Commission: Rules for business and organisations](https://ec.europa.eu/info/law/law-topic/data-protection/reform/rules-business-and-organisations_en)\n- [European Commission: Legal grounds for processing data](https://ec.europa.eu/info/law/law-topic/data-protection/reform/rules-business-and-organisations/legal-grounds-processing-data_en).\n ", - "EntitySemantics": { - "$Kind": "Term", - "$Type": "PersonalData.EntitySemanticsType", - "$AppliesTo": [ - "EntitySet" - ], - "@Core.Description": "Primary meaning of the entities in the annotated entity set" - }, - "DataSubjectRole": { - "$Kind": "Term", - "$Nullable": true, - "$AppliesTo": [ - "EntitySet" - ], - "@Common.Experimental": true, - "@Core.Description": "Role of the data subjects in this set (e.g. employee, customer)", - "@Core.LongDescription": "Values are application-specific. \n Can be a static value or a `Path` expression If the role varies per entity" - }, - "DataSubjectRoleDescription": { - "$Kind": "Term", - "$Nullable": true, - "$AppliesTo": [ - "EntitySet" - ], - "@Common.Experimental": true, - "@Core.IsLanguageDependent": true, - "@Core.Description": "Language-dependent description of the role of the data subjects in this set (e.g. employee, customer)", - "@Core.LongDescription": "Values are application-specific. \n Can be a static value or a `Path` expression If the role varies per entity" + "FieldSemantics": { + "$Kind": "Term", + "$Type": "PersonalData.FieldSemanticsType", + "$AppliesTo": ["Property"], + "@Core.Description": "Primary meaning of the personal data contained in the annotated property", + "@Core.LongDescription": "Changes to values of annotated properties are tracked in the audit log.\n\n*TODO: cross-check with Wolfgang Koch: this annotation SHOULD NOT be necessary on fields that are already marked as being contact data (name, phone number, email address, birthday, ...) or address data (street, city, ...)*" + }, + "FieldSemanticsType": { + "$Kind": "TypeDefinition", + "$UnderlyingType": "Edm.String", + "@Core.Description": "Primary meaning of a data field", + "@Validation.AllowedValues": [ + { "Value": "DataSubjectID", "@Core.Description": "The unique identifier for a data subject" }, + { + "@Common.Experimental": true, + "Value": "DataSubjectIDType", + "@Core.Description": "The type of ID identifying the data subject and which is allocated when creating a consent record, e.g. an e-mail address or a phone number." }, - "EntitySemanticsType": { - "$Kind": "TypeDefinition", - "$UnderlyingType": "Edm.String", - "@Core.Description": "Primary meaning of the data contained in the annotated entity set", - "@Validation.AllowedValues": [ - { - "Value": "DataSubject", - "@Core.Description": "Entities describing a data subject (an identified or identifiable natural person), e.g. customer, vendor, employee", - "@Core.LongDescription": "These entities are relevant for audit logging. There are no restrictions on their structure. The properties should be annotated suitably with [FieldSemantics](#FieldSemantics)." - }, - { - "Value": "DataSubjectDetails", - "@Core.Description": "Entities containing details to a data subject (an identified or identifiable natural person) but not representing data subjects by themselves, e.g. street addresses, email addresses, phone numbers", - "@Core.LongDescription": "These entities are relevant for audit logging. There are no restrictions on their structure. The properties should be annotated suitably with [FieldSemantics](#FieldSemantics)." - }, - { - "Value": "Other", - "@Core.Description": "Entities containing personal data or references to data subjects but not representing data subjects or data subject details by themselves, e.g. customer quote, customer order, purchase order with involved business partners", - "@Core.LongDescription": "These entities are relevant for audit logging. There are no restrictions on their structure. The properties should be annotated suitably with [FieldSemantics](#FieldSemantics)." - } - ] + { + "@Common.Experimental": true, + "Value": "ConsentID", + "@Core.Description": "The unique identifier for a consent", + "@Core.LongDescription": "A consent is the action of the data subject confirming that \n the usage of his or her personal data shall be allowed for a given purpose. \n A consent functionality allows the storage of a consent record in relation \n to a specific purpose and shows if a data subject has granted, withdrawn, \n or denied consent." }, - "FieldSemantics": { - "$Kind": "Term", - "$Type": "PersonalData.FieldSemanticsType", - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Primary meaning of the personal data contained in the annotated property", - "@Core.LongDescription": "Changes to values of annotated properties are tracked in the audit log.\n\n*TODO: cross-check with Wolfgang Koch: this annotation SHOULD NOT be necessary on fields that are already marked as being contact data (name, phone number, email address, birthday, ...) or address data (street, city, ...)*" + { + "@Common.Experimental": true, + "Value": "PurposeID", + "@Core.Description": "The unique identifier for the purpose of a consent", + "@Core.LongDescription": "The purpose of a consent is the information that specifies the reason and the goal for\n the processing of a specific set of personal data. As a rule, the purpose\n references the relevant legal basis for the processing of personal data." }, - "FieldSemanticsType": { - "$Kind": "TypeDefinition", - "$UnderlyingType": "Edm.String", - "@Core.Description": "Primary meaning of a data field", - "@Validation.AllowedValues": [ - { - "Value": "DataSubjectID", - "@Core.Description": "The unique identifier for a data subject" - }, - { - "@Common.Experimental": true, - "Value": "DataSubjectIDType", - "@Core.Description": "The type of ID identifying the data subject and which is allocated when creating a consent record, e.g. an e-mail address or a phone number." - }, - { - "@Common.Experimental": true, - "Value": "ConsentID", - "@Core.Description": "The unique identifier for a consent", - "@Core.LongDescription": "A consent is the action of the data subject confirming that \n the usage of his or her personal data shall be allowed for a given purpose. \n A consent functionality allows the storage of a consent record in relation \n to a specific purpose and shows if a data subject has granted, withdrawn, \n or denied consent." - }, - { - "@Common.Experimental": true, - "Value": "PurposeID", - "@Core.Description": "The unique identifier for the purpose of a consent", - "@Core.LongDescription": "The purpose of a consent is the information that specifies the reason and the goal for\n the processing of a specific set of personal data. As a rule, the purpose\n references the relevant legal basis for the processing of personal data." - }, - { - "Value": "ContractRelatedID", - "@Core.Description": "The unique identifier for transactional data that is related to a contract that requires processing of personal data", - "@Core.LongDescription": "Examples:\n\n - Sales Contract ID\n\n - Purchase Contract ID\n\n - Service Contract ID\n " - }, - { - "@Common.Experimental": true, - "Value": "LegalEntityID", - "@Core.Description": "The unique identifier of a legal entity", - "@Core.LongDescription": "A legal entity is a corporation, an association, or any other organization of legal capacity, which has statutory rights and responsibilities." - }, - { - "@Common.Experimental": true, - "Value": "UserID", - "@Core.Description": "The unique identifier of a user", - "@Core.LongDescription": "A user is an individual who interacts with the services supplied by a system." - } - ] + { + "Value": "ContractRelatedID", + "@Core.Description": "The unique identifier for transactional data that is related to a contract that requires processing of personal data", + "@Core.LongDescription": "Examples:\n\n - Sales Contract ID\n\n - Purchase Contract ID\n\n - Service Contract ID\n " }, - "IsPotentiallyPersonal": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property contains potentially personal data", - "@Core.LongDescription": "Personal data is information relating to an identified or identifiable natural person (data subject).\n\nNote: properties annotated with [`FieldSemantics`](#FieldSemantics) need not be additionally annotated with this term.\n\nSee also: [What is personal data?](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en)" + { + "@Common.Experimental": true, + "Value": "LegalEntityID", + "@Core.Description": "The unique identifier of a legal entity", + "@Core.LongDescription": "A legal entity is a corporation, an association, or any other organization of legal capacity, which has statutory rights and responsibilities." }, - "IsPotentiallySensitive": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Property contains potentially sensitive personal data", - "@Core.LongDescription": "Sensitive data is a colloquial term usually including the following data:\n\n- Special categories of personal data such as data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, or trade union membership, and the processing of genetic data, biometric data, data concerning health or sex life or sexual orientation\n\n- Personal data subject to professional secrecy\n\n- Personal data relating to criminal or administrative offences\n\n- Personal data concerning bank or credit card accounts\n\nSee also: [What personal data is considered sensitive?](https://ec.europa.eu/info/law/law-topic/data-protection/reform/rules-business-and-organisations/legal-grounds-processing-data/sensitive-data/what-personal-data-considered-sensitive_en)" + { + "@Common.Experimental": true, + "Value": "UserID", + "@Core.Description": "The unique identifier of a user", + "@Core.LongDescription": "A user is an individual who interacts with the services supplied by a system." } + ] + }, + "IsPotentiallyPersonal": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property contains potentially personal data", + "@Core.LongDescription": "Personal data is information relating to an identified or identifiable natural person (data subject).\n\nNote: properties annotated with [`FieldSemantics`](#FieldSemantics) need not be additionally annotated with this term.\n\nSee also: [What is personal data?](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en)" + }, + "IsPotentiallySensitive": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "Property contains potentially sensitive personal data", + "@Core.LongDescription": "Sensitive data is a colloquial term usually including the following data:\n\n- Special categories of personal data such as data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, or trade union membership, and the processing of genetic data, biometric data, data concerning health or sex life or sexual orientation\n\n- Personal data subject to professional secrecy\n\n- Personal data relating to criminal or administrative offences\n\n- Personal data concerning bank or credit card accounts\n\nSee also: [What personal data is considered sensitive?](https://ec.europa.eu/info/law/law-topic/data-protection/reform/rules-business-and-organisations/legal-grounds-processing-data/sensitive-data/what-personal-data-considered-sensitive_en)" } -} \ No newline at end of file + } +} diff --git a/vocabularies/Session.json b/vocabularies/Session.json index bad7e261..61d5f12c 100644 --- a/vocabularies/Session.json +++ b/vocabularies/Session.json @@ -1,88 +1,67 @@ { - "$Version": "4.0", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - } + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] }, - "com.sap.vocabularies.Session.v1": { - "$Alias": "Session", - "@Core.Description": "Terms for services supporting sticky sessions for data modification", - "@Core.Description#Published": "2018-07-26 © Copyright 2018 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Session.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/Session.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Session.md" - } - ], - "@Core.LongDescription": "\nBuilding REST APIs on top of ABAP code that has been written for classic session-based communication is hard and sometimes not economically feasible.\n\nHTTP is not connection-based, meaning that each request may be sent over a different TCP connection. \nAdding scalable servers and load balancers into the mix, each individual HTTP request is typically answered by a different application server instance.\n\nSticky sessions to the rescue: session stickiness or session affinity is a mechanism to route (HTTP) calls from the same client instance to the same \"session\", \n\"work process\", or \"application instance\". This is a performance improvement measure because it allows the server to keep server state in process-specific memory.\nThis process-specific memory is lost if the server process instance crashes, in which case the client is redirected to another process instance.\nIn modern, scalable server environments sticky sessions are usually combined with a persistency service to allow recovering session state after \na process instance crash, so from the client's perspective the server state is kept. In the case of ABAP servers the session state is simply lost.\n\nSession stickiness is usually achieved via a cookie containing the session id. This has the benefit that browser-based applications don't need to be aware \nof the session stickiness because browsers automatically send cookies on subsequent requests. \nHowever, cookies are shared across browser tabs and windows, and requests from different tabs or windows would be dispatched to the same server session.\nAgain this poses a problem for classic ABAP code which was built under the assumption that each server session is tied to at most one client instance.\n\nThis means that the client application has to be aware of the service's limitations and cooperate to route calls from each client application instance (browser tab or window) \nto a different server session. The ABAP server allows this by sending the session id in the response header `sap-contextid`, \nwhich client application instances will need to echo as a request header in subsequent requests.\n\nAlso the client needs to adhere to a strict choreography of \n- initiate session\n- send data modification and read requests\n- end session by either\n - confirm data modification or\n - discard changes\n\nThis choreography is (intentionally) similar to the choreography for [Draft Handling](https://experience.sap.com/fiori-design-web/draft-handling/).\n\nData modification requests outside of a session are allowed and have their usual OData semantics.\nThis allows e.g. using the same service for a list report with actions and for an editable object page, \ncombined as one UI app.\n ", - "StickySessionSupported": { - "$Kind": "Term", - "$Type": "Session.StickySessionSupportedType", - "$AppliesTo": [ - "EntitySet" - ], - "@Core.Description": "The annotated entity set allows data modification only within a sticky session", - "@Core.Example": { - "@Session.SessionOnlyStateSupported": { - "NewAction": "...", - "EditAction": "...", - "SaveAction": "...", - "DiscardAction": "..." - } - } - }, - "StickySessionSupportedType": { - "$Kind": "ComplexType", - "@Core.Description": "Actions for managing data modification within a sticky session", - "NewAction": { - "$Type": "Common.QualifiedName", - "@Core.Description": "Bound action that initiates a sticky session for creating new entities in the targeted entity set or collection", - "@Core.LongDescription": "Signature:\n\n- Binding parameter is collection of type of annotated entity set\n\n- No non-binding parameters\n\n- No return type \n\nIf called within a sticky session the sticky session continues. \n\nOtherwise:\n\n- On success this action initiates a sticky session.\n\n- On failure no sticky session is initiated." - }, - "AdditionalNewActions": { - "$Collection": true, - "$Type": "Common.QualifiedName", - "@Common.Experimental": true, - "@Core.Description": "Additional bound actions that initiate a sticky session", - "@Core.LongDescription": "Actions have the same binding parameter as the `NewAction` and may have non-binding paramters" - }, - "EditAction": { - "$Type": "Common.QualifiedName", - "@Core.Description": "Bound action that initiates a sticky session for editing the targeted entity", - "@Core.LongDescription": "Signature:\n\n- Binding parameter is type of annotated entity set\n\n- No non-binding parameters\n\n- Return type is same as binding parameter type \n\nIf called within a sticky session the sticky session continues. \n\nOtherwise:\n\n- On success this action returns the targeted entity and initiates a sticky session.\n\n- On failure no sticky session is initiated." - }, - "SaveAction": { - "$Type": "Common.QualifiedName", - "@Core.Description": "Bound action that saves a new or edited entity", - "@Core.LongDescription": "Signature:\n\n- Binding parameter is type of annotated entity set\n\n- No non-binding parameters\n\n- Return type is same as binding parameter type \n\nOn success this action returns the newly created or edited entity. The sticky session is terminated after all entities that were newly created or edited in it have been saved. \n\nOn failure the sticky session is kept alive." - }, - "DiscardAction": { - "$Type": "Core.SimpleIdentifier", - "@Core.Description": "Action import for an unbound action that discards all changes and terminates the sticky session", - "@Core.LongDescription": "Signature:\n\n- No parameters\n\n- No return type \n\nIf called within a sticky session the sticky session is terminated, irrespective of whether the action succeeds or fails. \n\nIf called outside of a sticky session the action fails and does not initiate a session." - } + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] + } + }, + "com.sap.vocabularies.Session.v1": { + "$Alias": "Session", + "@Core.Description": "Terms for services supporting sticky sessions for data modification", + "@Core.Description#Published": "2018-07-26 © Copyright 2018 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Session.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/Session.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Session.md" } + ], + "@Core.LongDescription": "\nBuilding REST APIs on top of ABAP code that has been written for classic session-based communication is hard and sometimes not economically feasible.\n\nHTTP is not connection-based, meaning that each request may be sent over a different TCP connection. \nAdding scalable servers and load balancers into the mix, each individual HTTP request is typically answered by a different application server instance.\n\nSticky sessions to the rescue: session stickiness or session affinity is a mechanism to route (HTTP) calls from the same client instance to the same \"session\", \n\"work process\", or \"application instance\". This is a performance improvement measure because it allows the server to keep server state in process-specific memory.\nThis process-specific memory is lost if the server process instance crashes, in which case the client is redirected to another process instance.\nIn modern, scalable server environments sticky sessions are usually combined with a persistency service to allow recovering session state after \na process instance crash, so from the client's perspective the server state is kept. In the case of ABAP servers the session state is simply lost.\n\nSession stickiness is usually achieved via a cookie containing the session id. This has the benefit that browser-based applications don't need to be aware \nof the session stickiness because browsers automatically send cookies on subsequent requests. \nHowever, cookies are shared across browser tabs and windows, and requests from different tabs or windows would be dispatched to the same server session.\nAgain this poses a problem for classic ABAP code which was built under the assumption that each server session is tied to at most one client instance.\n\nThis means that the client application has to be aware of the service's limitations and cooperate to route calls from each client application instance (browser tab or window) \nto a different server session. The ABAP server allows this by sending the session id in the response header `sap-contextid`, \nwhich client application instances will need to echo as a request header in subsequent requests.\n\nAlso the client needs to adhere to a strict choreography of \n- initiate session\n- send data modification and read requests\n- end session by either\n - confirm data modification or\n - discard changes\n\nThis choreography is (intentionally) similar to the choreography for [Draft Handling](https://experience.sap.com/fiori-design-web/draft-handling/).\n\nData modification requests outside of a session are allowed and have their usual OData semantics.\nThis allows e.g. using the same service for a list report with actions and for an editable object page, \ncombined as one UI app.\n ", + "StickySessionSupported": { + "$Kind": "Term", + "$Type": "Session.StickySessionSupportedType", + "$AppliesTo": ["EntitySet"], + "@Core.Description": "The annotated entity set allows data modification only within a sticky session", + "@Core.Example": { + "@Session.SessionOnlyStateSupported": { + "NewAction": "...", + "EditAction": "...", + "SaveAction": "...", + "DiscardAction": "..." } + } + }, + "StickySessionSupportedType": { + "$Kind": "ComplexType", + "@Core.Description": "Actions for managing data modification within a sticky session", + "NewAction": { + "$Type": "Common.QualifiedName", + "@Core.Description": "Bound action that initiates a sticky session for creating new entities in the targeted entity set or collection", + "@Core.LongDescription": "Signature:\n\n- Binding parameter is collection of type of annotated entity set\n\n- No non-binding parameters\n\n- No return type \n\nIf called within a sticky session the sticky session continues. \n\nOtherwise:\n\n- On success this action initiates a sticky session.\n\n- On failure no sticky session is initiated." + }, + "AdditionalNewActions": { + "$Collection": true, + "$Type": "Common.QualifiedName", + "@Common.Experimental": true, + "@Core.Description": "Additional bound actions that initiate a sticky session", + "@Core.LongDescription": "Actions have the same binding parameter as the `NewAction` and may have non-binding paramters" + }, + "EditAction": { + "$Type": "Common.QualifiedName", + "@Core.Description": "Bound action that initiates a sticky session for editing the targeted entity", + "@Core.LongDescription": "Signature:\n\n- Binding parameter is type of annotated entity set\n\n- No non-binding parameters\n\n- Return type is same as binding parameter type \n\nIf called within a sticky session the sticky session continues. \n\nOtherwise:\n\n- On success this action returns the targeted entity and initiates a sticky session.\n\n- On failure no sticky session is initiated." + }, + "SaveAction": { + "$Type": "Common.QualifiedName", + "@Core.Description": "Bound action that saves a new or edited entity", + "@Core.LongDescription": "Signature:\n\n- Binding parameter is type of annotated entity set\n\n- No non-binding parameters\n\n- Return type is same as binding parameter type \n\nOn success this action returns the newly created or edited entity. The sticky session is terminated after all entities that were newly created or edited in it have been saved. \n\nOn failure the sticky session is kept alive." + }, + "DiscardAction": { + "$Type": "Core.SimpleIdentifier", + "@Core.Description": "Action import for an unbound action that discards all changes and terminates the sticky session", + "@Core.LongDescription": "Signature:\n\n- No parameters\n\n- No return type \n\nIf called within a sticky session the sticky session is terminated, irrespective of whether the action succeeds or fails. \n\nIf called outside of a sticky session the action fails and does not initiate a session." + } } -} \ No newline at end of file + } +} diff --git a/vocabularies/UI.json b/vocabularies/UI.json index 79a1d30c..47331578 100644 --- a/vocabularies/UI.json +++ b/vocabularies/UI.json @@ -1,2081 +1,1638 @@ { - "$Version": "4.01", - "$Reference": { - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Core.V1", - "$Alias": "Core" - } - ] - }, - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Validation.V1", - "$Alias": "Validation" - } - ] - }, - "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.json": { - "$Include": [ - { - "$Namespace": "Org.OData.Aggregation.V1", - "$Alias": "Aggregation" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Communication.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Communication.v1", - "$Alias": "Communication" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Common.v1", - "$Alias": "Common" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/HTML5.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.HTML5.v1", - "$Alias": "HTML5" - } - ] - }, - "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.json": { - "$Include": [ - { - "$Namespace": "com.sap.vocabularies.Analytics.v1", - "$Alias": "Analytics" - } - ] + "$Version": "4.01", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }] + }, + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Validation.V1", "$Alias": "Validation" }] + }, + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.json": { + "$Include": [{ "$Namespace": "Org.OData.Aggregation.V1", "$Alias": "Aggregation" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Communication.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Communication.v1", "$Alias": "Communication" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Common.v1", "$Alias": "Common" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/HTML5.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.HTML5.v1", "$Alias": "HTML5" }] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.json": { + "$Include": [{ "$Namespace": "com.sap.vocabularies.Analytics.v1", "$Alias": "Analytics" }] + } + }, + "com.sap.vocabularies.UI.v1": { + "$Alias": "UI", + "@Core.Description": "Terms for presenting data in user interfaces", + "@Core.LongDescription": "The SAP UI Vocabulary aims to optimize usage of data in UI channels.\nIt focuses on usage patterns of data in UIs, not on UI patterns, and it is completely independent of the\nUI technologies or devices used to visualize the data.\n\nThese usage patterns represent certain semantic views on business data, some of them very general,\nothers centering around the concept of a Thing, i.e. something tangible to end users.\nExamples for Things are semantic object instances or business object instances.\nOne example for a usage pattern is the collection of properties which helps the user to identify a Thing,\nthe [UI.Identification](#Identification) term.\nAnother example is the [UI.LineItem](#LineItem) term, which is a set of properties suitable for visualizing\na collection of business object instances, e.g. as a list or table.", + "@Core.Description#Published": "2019-02-14 © Copyright 2013 SAP SE. All rights reserved", + "@Core.Links": [ + { "rel": "alternate", "href": "https://sap.github.io/odata-vocabularies/vocabularies/UI.xml" }, + { "rel": "latest-version", "href": "https://sap.github.io/odata-vocabularies/vocabularies/UI.json" }, + { "rel": "describedby", "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/UI.md" } + ], + "HeaderInfo": { + "$Kind": "Term", + "$Type": "UI.HeaderInfoType", + "$AppliesTo": ["EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "Information for the header area of an entity representation. HeaderInfo is mandatory for main entity types of the model" + }, + "HeaderInfoType": { + "$Kind": "ComplexType", + "TypeName": { "@Core.IsLanguageDependent": true, "@Core.Description": "Name of the main entity type" }, + "TypeNamePlural": { + "@Core.IsLanguageDependent": true, + "@Core.Description": "Plural form of the name of the main entity type" + }, + "Title": { + "$Type": "UI.DataFieldAbstract", + "$Nullable": true, + "@Core.Description": "Title, e.g. for overview pages", + "@Core.LongDescription": "This can be a [DataField](#DataField) and any of its children, or a [DataFieldForAnnotation](#DataFieldForAnnotation) targeting [ConnectedFields](#ConnectedFields).", + "@Validation.DerivedTypeConstraint": ["UI.DataField", "UI.DataFieldForAnnotation"] + }, + "Description": { + "$Type": "UI.DataFieldAbstract", + "$Nullable": true, + "@Core.Description": "Description, e.g. for overview pages", + "@Core.LongDescription": "This can be a [DataField](#DataField) and any of its children, or a [DataFieldForAnnotation](#DataFieldForAnnotation) targeting [ConnectedFields](#ConnectedFields).", + "@Validation.DerivedTypeConstraint": ["UI.DataField", "UI.DataFieldForAnnotation"] + }, + "Image": { + "$Type": "Edm.Stream", + "$Nullable": true, + "@Common.Experimental": true, + "@Core.Description": "Image for an instance of the entity type. If the property has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the value of the property `ImageUrl` can be used instead." + }, + "ImageUrl": { + "$Nullable": true, + "@Core.IsURL": true, + "@Core.Description": "Image URL for an instance of the entity type. If the property has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the value of the property `TypeImageUrl` can be used instead." + }, + "TypeImageUrl": { "$Nullable": true, "@Core.IsURL": true, "@Core.Description": "Image URL for the entity type" }, + "Initials": { + "$Nullable": true, + "@Common.Experimental": true, + "@Core.Description": "Latin letters to be used in case no `Image`, `ImageUrl`, or `TypeImageUrl` is present" + } + }, + "Identification": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.DataFieldAbstract", + "$AppliesTo": ["EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "Collection of fields identifying the object" + }, + "Badge": { + "$Kind": "Term", + "$Type": "UI.BadgeType", + "$AppliesTo": ["EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "Information usually displayed in the form of a business card" + }, + "BadgeType": { + "$Kind": "ComplexType", + "HeadLine": { "$Type": "UI.DataField", "@Core.Description": "Headline" }, + "Title": { "$Type": "UI.DataField", "@Core.Description": "Title" }, + "ImageUrl": { + "$Nullable": true, + "@Core.IsURL": true, + "@Core.Description": "Image URL for an instance of the entity type. If the property has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the value of the property `TypeImageUrl` can be used instead." + }, + "TypeImageUrl": { "$Nullable": true, "@Core.IsURL": true, "@Core.Description": "Image URL for the entity type" }, + "MainInfo": { + "$Type": "UI.DataField", + "$Nullable": true, + "@Core.Description": "Main information on the business card" + }, + "SecondaryInfo": { + "$Type": "UI.DataField", + "$Nullable": true, + "@Core.Description": "Additional information on the business card" + } + }, + "LineItem": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.DataFieldAbstract", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Collection of data fields for representation in a table or list", + "@UI.ThingPerspective": true + }, + "StatusInfo": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.DataFieldAbstract", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Collection of data fields describing the status of an entity", + "@UI.ThingPerspective": true + }, + "FieldGroup": { + "$Kind": "Term", + "$Type": "UI.FieldGroupType", + "$AppliesTo": ["EntityType", "Action", "Function", "FunctionImport"], + "@Core.Description": "Group of fields with an optional label", + "@UI.ThingPerspective": true + }, + "FieldGroupType": { + "$Kind": "ComplexType", + "Label": { + "$Nullable": true, + "@Core.IsLanguageDependent": true, + "@Core.Description": "Label for the field group" + }, + "Data": { "$Collection": true, "$Type": "UI.DataFieldAbstract", "@Core.Description": "Collection of data fields" } + }, + "ConnectedFields": { + "$Kind": "Term", + "$Type": "UI.ConnectedFieldsType", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Group of semantically connected fields with a representation template and an optional label", + "@Core.Example": { + "@UI.ConnectedFields#Material": { + "Label": "Material", + "Template": "{MaterialName} - {MaterialClassName}", + "Data": { + "MaterialName": { "@type": "#UI.DataField", "Value": { "$Path": "Material" } }, + "MaterialClassName": { "@type": "#UI.DataField", "Value": { "$Path": "MaterialClass" } } + } } + } + }, + "ConnectedFieldsType": { + "$Kind": "ComplexType", + "@Core.Description": "Group of semantically connected fields with a representation template and an optional label", + "Label": { + "$Nullable": true, + "@Core.IsLanguageDependent": true, + "@Core.Description": "Label for the connected fields" + }, + "Template": { + "@Core.IsLanguageDependent": true, + "@Core.Description": "Template for representing the connected fields", + "@Core.LongDescription": "Template variables are identifiers enclosed in curly braces, e.g. `{MaterialName} - {MaterialClassName}`. The `Data` collection assigns values to the template variables." + }, + "Data": { + "$Type": "Core.Dictionary", + "@Validation.OpenPropertyTypeConstraint": ["UI.DataFieldAbstract"], + "@Core.Description": "Dictionary of template variables", + "@Core.LongDescription": "Each template variable used in `Template` must be assigned a value here. The value must be of type [DataFieldAbstract](#DataFieldAbstract)" + } + }, + "GeoLocations": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.GeoLocationType", + "$AppliesTo": ["EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "Collection of geographic locations" + }, + "GeoLocation": { + "$Kind": "Term", + "$Type": "UI.GeoLocationType", + "$AppliesTo": ["EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "Geographic location" + }, + "GeoLocationType": { + "$Kind": "ComplexType", + "@Core.Description": "Properties that define a geographic location", + "Latitude": { "$Type": "Edm.Double", "$Nullable": true, "@Core.Description": "Geographic latitude" }, + "Longitude": { "$Type": "Edm.Double", "$Nullable": true, "@Core.Description": "Geographic longitude" }, + "Location": { + "$Type": "Edm.GeographyPoint", + "$Nullable": true, + "$SRID": "variable", + "@Core.Description": "A point in a round-earth coordinate system" + }, + "Address": { "$Type": "Communication.AddressType", "$Nullable": true, "@Core.Description": "vCard-style address" } + }, + "Contacts": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Edm.AnnotationPath", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Collection of contacts", + "@Core.LongDescription": "Each collection item MUST reference an annotation of a Communication.Contact", + "@UI.ThingPerspective": true, + "@Validation.AllowedTerms": ["Communication.Contact"] + }, + "MediaResource": { + "$Kind": "Term", + "$Type": "UI.MediaResourceType", + "$AppliesTo": ["EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "Properties that describe a media resource" + }, + "MediaResourceType": { + "$Kind": "ComplexType", + "Url": { "@Core.Description": "URL of media resource", "@Core.IsURL": true }, + "ContentType": { + "$Nullable": true, + "@Core.Description": "Content type, such as application/pdf, video/x-flv, image/jpeg", + "@Core.IsMediaType": true + }, + "ByteSize": { "$Type": "Edm.Int64", "$Nullable": true, "@Core.Description": "Resource size in bytes" }, + "ChangedAt": { + "$Type": "Edm.DateTimeOffset", + "$Nullable": true, + "$Precision": 0, + "@Core.Description": "Date of last change" + }, + "Thumbnail": { "$Type": "UI.ImageType", "$Nullable": true, "@Core.Description": "Thumbnail image" }, + "Title": { "$Type": "UI.DataField", "@Core.Description": "Resource title" }, + "Description": { "$Type": "UI.DataField", "$Nullable": true, "@Core.Description": "Resource description" } + }, + "ImageType": { + "$Kind": "ComplexType", + "Url": { "@Core.Description": "URL of image", "@Core.IsURL": true }, + "Width": { "$Nullable": true, "@Core.Description": "Width of image" }, + "Height": { "$Nullable": true, "@Core.Description": "Height of image" } + }, + "DataPoint": { + "$Kind": "Term", + "$Type": "UI.DataPointType", + "$AppliesTo": ["EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "Visualization of a single point of data, typically a number; may also be textual, e.g. a status value" + }, + "DataPointType": { + "$Kind": "ComplexType", + "Title": { "$Nullable": true, "@Core.Description": "Title of the data point", "@Core.IsLanguageDependent": true }, + "Description": { "$Nullable": true, "@Core.Description": "Short description", "@Core.IsLanguageDependent": true }, + "LongDescription": { + "$Nullable": true, + "@Core.Description": "Full description", + "@Core.IsLanguageDependent": true + }, + "Value": { + "$Type": "Edm.PrimitiveType", + "@Core.Description": "Numeric value", + "@Core.LongDescription": "\nThe value is typically provided via a `Path` construct. The path MUST lead to a direct property of the same entity type or a property of a complex property (recursively) of that entity type, navigation segments are not allowed.\n\nIt could be annotated with either `UoM.ISOCurrency` or `UoM.Unit`.\nPercentage values are annotated with `UoM.Unit = '%'`.\nA renderer should take an optional `Common.Text` annotation into consideration.\n " + }, + "TargetValue": { "$Type": "Edm.PrimitiveType", "$Nullable": true, "@Core.Description": "Target value" }, + "ForecastValue": { "$Type": "Edm.PrimitiveType", "$Nullable": true, "@Core.Description": "Forecast value" }, + "MinimumValue": { + "$Type": "Edm.Decimal", + "$Nullable": true, + "@Core.Description": "Minimum value (for output rendering)" + }, + "MaximumValue": { + "$Type": "Edm.Decimal", + "$Nullable": true, + "@Core.Description": "Maximum value (for output rendering)" + }, + "ValueFormat": { "$Type": "UI.NumberFormat", "$Nullable": true, "@Core.Description": "Number format" }, + "Visualization": { + "$Type": "UI.VisualizationType", + "$Nullable": true, + "@Core.Description": "Preferred visualization" + }, + "SampleSize": { + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "@Core.Description": "\n Sample size used for the determination of the data point; should contain just integer value as Edm.Byte, Edm.SByte, Edm.Intxx, and Edm.Decimal with scale 0.\n " + }, + "ReferencePeriod": { "$Type": "UI.ReferencePeriod", "$Nullable": true, "@Core.Description": "Reference period" }, + "Criticality": { + "$Type": "UI.CriticalityType", + "$Nullable": true, + "@Core.Description": "Service-calculated criticality, alternative to CriticalityCalculation" + }, + "CriticalityLabels": { + "$Type": "Edm.AnnotationPath", + "$Nullable": true, + "@Core.Description": "Custom labels for the criticality legend. Annotation path MUST end in UI.CriticalityLabels", + "@Validation.AllowedTerms": ["UI.CriticalityLabels"] + }, + "CriticalityRepresentation": { + "$Type": "UI.CriticalityRepresentationType", + "$Nullable": true, + "@Common.Experimental": true, + "@Core.Description": "Decides if criticality is visualized in addition by means of an icon" + }, + "CriticalityCalculation": { + "$Type": "UI.CriticalityCalculationType", + "$Nullable": true, + "@Core.Description": "Parameters for client-calculated criticality, alternative to Criticality" + }, + "Trend": { + "$Type": "UI.TrendType", + "$Nullable": true, + "@Core.Description": "Service-calculated trend, alternative to TrendCalculation" + }, + "TrendCalculation": { + "$Type": "UI.TrendCalculationType", + "$Nullable": true, + "@Core.Description": "Parameters for client-calculated trend, alternative to Trend" + }, + "Responsible": { "$Type": "Communication.ContactType", "$Nullable": true, "@Core.Description": "Contact person" } + }, + "NumberFormat": { + "$Kind": "ComplexType", + "@Core.Description": "Describes how to visualise a number", + "ScaleFactor": { + "$Type": "Edm.Decimal", + "$Nullable": true, + "@Core.Description": "Display value in *ScaleFactor* units, e.g. 1000 for k (kilo), 1e6 for M (Mega)" + }, + "NumberOfFractionalDigits": { + "$Type": "Edm.Byte", + "$Nullable": true, + "@Core.Description": "Number of fractional digits of the scaled value to be visualized" + } + }, + "VisualizationType": { + "$Kind": "EnumType", + "Number": 0, + "Number@Core.Description": "Visualize as a number", + "BulletChart": 1, + "BulletChart@Core.Description": "Visualize as bullet chart - requires TargetValue", + "Progress": 2, + "Progress@Core.Description": "Visualize as progress indicator - requires TargetValue", + "Rating": 3, + "Rating@Core.Description": "Visualize as partially or completely filled stars/hearts/... - requires TargetValue", + "Donut": 4, + "Donut@Core.Description": "Visualize as donut, optionally with missing segment - requires TargetValue", + "DeltaBulletChart": 5, + "DeltaBulletChart@Core.Description": "Visualize as delta bullet chart - requires TargetValue" + }, + "ReferencePeriod": { + "$Kind": "ComplexType", + "@Core.Description": "Reference period", + "Description": { + "$Nullable": true, + "@Core.Description": "Short description of the reference period", + "@Core.IsLanguageDependent": true + }, + "Start": { + "$Type": "Edm.DateTimeOffset", + "$Nullable": true, + "$Precision": 0, + "@Core.Description": "Start of the reference period" + }, + "End": { + "$Type": "Edm.DateTimeOffset", + "$Nullable": true, + "$Precision": 0, + "@Core.Description": "End of the reference period" + } + }, + "CriticalityType": { + "$Kind": "EnumType", + "@Core.Description": "Criticality of a value or status, represented e.g. via semantic colors (https://experience.sap.com/fiori-design-web/foundation/colors/#semantic-colors)", + "VeryNegative": -1, + "VeryNegative@Common.Experimental": true, + "VeryNegative@Core.Description": "Very negative / dark-red status - risk - out of stock - late", + "Neutral": 0, + "Neutral@Core.Description": "Neutral / grey status - inactive - open - in progress", + "Negative": 1, + "Negative@Core.Description": "Negative / red status - attention - overload - alert", + "Critical": 2, + "Critical@Core.Description": "Critical / orange status - warning", + "Positive": 3, + "Positive@Core.Description": "Positive / green status - completed - available - on track - acceptable", + "VeryPositive": 4, + "VeryPositive@Common.Experimental": true, + "VeryPositive@Core.Description": "Very positive - above max stock - excess", + "Information": 5, + "Information@Common.Experimental": true, + "Information@Core.Description": "Information - noticable - informative" + }, + "CriticalityCalculationType": { + "$Kind": "ComplexType", + "$BaseType": "UI.CriticalityThresholdsType", + "@Core.Description": "Describes how to calculate the criticality of a value depending on the improvement direction", + "@Core.LongDescription": "\nThe calculation is done by comparing a value to the threshold values relevant for the specified improvement direction.\n\nThe value to be compared is\n - Value - if ReferenceValue is not specified\n - Value sub ReferenceValue – if ReferenceValue is specified and IsRelativeDifference is not specified or specified as false\n - (Value sub ReferenceValue) divBy ReferenceValue – if ReferenceValue is specified and IsRelativeDifference is specified as true\n\nFor improvement direction `Target`, the criticality is calculated using both low and high threshold values. It will be\n - Positive if the value is greater than or equal to AcceptanceRangeLowValue and lower than or equal to AcceptanceRangeHighValue\n - Neutral if the value is greater than or equal to ToleranceRangeLowValue and lower than AcceptanceRangeLowValue OR greater than AcceptanceRangeHighValue and lower than or equal to ToleranceRangeHighValue\n - Critical if the value is greater than or equal to DeviationRangeLowValue and lower than ToleranceRangeLowValue OR greater than ToleranceRangeHighValue and lower than or equal to DeviationRangeHighValue\n - Negative if the value is lower than DeviationRangeLowValue or greater than DeviationRangeHighValue\n\nFor improvement direction `Minimize`, the criticality is calculated using the high threshold values. It is\n - Positive if the value is lower than or equal to AcceptanceRangeHighValue\n - Neutral if the value is greater than AcceptanceRangeHighValue and lower than or equal to ToleranceRangeHighValue\n - Critical if the value is greater than ToleranceRangeHighValue and lower than or equal to DeviationRangeHighValue\n - Negative if the value is greater than DeviationRangeHighValue\n\nFor improvement direction `Maximize`, the criticality is calculated using the low threshold values. It is\n - Positive if the value is greater than or equal to AcceptanceRangeLowValue\n - Neutral if the value is less than AcceptanceRangeLowValue and greater than or equal to ToleranceRangeLowValue\n - Critical if the value is lower than ToleranceRangeLowValue and greater than or equal to DeviationRangeLowValue\n - Negative if the value is lower than DeviationRangeLowValue\n\nThresholds are optional. For unassigned values, defaults are determined in this order:\n - For DeviationRange, an omitted LowValue translates into the smallest possible number (-INF), an omitted HighValue translates into the largest possible number (+INF)\n - For ToleranceRange, an omitted LowValue will be initialized with DeviationRangeLowValue, an omitted HighValue will be initialized with DeviationRangeHighValue\n - For AcceptanceRange, an omitted LowValue will be initialized with ToleranceRangeLowValue, an omitted HighValue will be initialized with ToleranceRangeHighValue\n ", + "ReferenceValue": { + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "@Common.Experimental": true, + "@Core.Description": "Reference value for the calculation, e.g. number of sales for the last year" + }, + "IsRelativeDifference": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Common.Experimental": true, + "@Core.Description": "Calculate with a relative difference" + }, + "ImprovementDirection": { + "$Type": "UI.ImprovementDirectionType", + "@Core.Description": "Describes in which direction the value improves" + }, + "ConstantThresholds": { + "$Collection": true, + "$Type": "UI.LevelThresholdsType", + "@Common.Experimental": true, + "@Core.Description": "List of thresholds depending on the aggregation level as a set of constant values", + "@Core.LongDescription": "Constant thresholds shall only be used in order to refine constant values given for the data point overall (aggregation level with empty collection of property paths), but not if the thresholds are based on other measure elements." + } + }, + "CriticalityThresholdsType": { + "$Kind": "ComplexType", + "@Core.Description": "Thresholds for calculating the criticality of a value", + "AcceptanceRangeLowValue": { + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "@Core.Description": "Lowest value that is considered positive" + }, + "AcceptanceRangeHighValue": { + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "@Core.Description": "Highest value that is considered positive" + }, + "ToleranceRangeLowValue": { + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "@Core.Description": "Lowest value that is considered neutral" + }, + "ToleranceRangeHighValue": { + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "@Core.Description": "Highest value that is considered neutral" + }, + "DeviationRangeLowValue": { + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "@Core.Description": "Lowest value that is considered critical" + }, + "DeviationRangeHighValue": { + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "@Core.Description": "Highest value that is considered critical" + } + }, + "ImprovementDirectionType": { + "$Kind": "EnumType", + "@Core.Description": "Describes which direction of a value change is seen as an improvement", + "Minimize": 1, + "Minimize@Core.Description": "Lower is better", + "Target": 2, + "Target@Core.Description": "Closer to the target is better", + "Maximize": 3, + "Maximize@Core.Description": "Higher is better" + }, + "LevelThresholdsType": { + "$Kind": "ComplexType", + "$BaseType": "UI.CriticalityThresholdsType", + "@Common.Experimental": true, + "@Core.Description": "Thresholds for an aggregation level", + "AggregationLevel": { + "$Collection": true, + "$Type": "Edm.PropertyPath", + "@Core.Description": "An unordered tuple of dimensions, i.e. properties which are intended to be used for grouping in aggregating requests. In analytical UIs, e.g. an analytical chart, the aggregation level typically corresponds to the visible dimensions." + } + }, + "TrendType": { + "$Kind": "EnumType", + "@Core.Description": "The trend of a value", + "StrongUp": 1, + "StrongUp@Core.Description": "Value grows strongly", + "Up": 2, + "Up@Core.Description": "Value grows", + "Sideways": 3, + "Sideways@Core.Description": "Value does not significantly grow or shrink", + "Down": 4, + "Down@Core.Description": "Value shrinks", + "StrongDown": 5, + "StrongDown@Core.Description": "Value shrinks strongly" + }, + "TrendCalculationType": { + "$Kind": "ComplexType", + "@Core.Description": "Describes how to calculate the trend of a value", + "@Core.LongDescription": "\nBy default, the calculation is done by comparing the difference between Value and ReferenceValue to the threshold values.\nIf IsRelativeDifference is set, the difference of Value and ReferenceValue is divided by ReferenceValue and the relative difference is compared.\n\nThe trend is\n - StrongUp if the difference is greater than or equal to StrongUpDifference\n - Up if the difference is less than StrongUpDifference and greater than or equal to UpDifference\n - Sideways if the difference is less than UpDifference and greater than DownDifference\n - Down if the difference is greater than StrongDownDifference and lower than or equal to DownDifference\n - StrongDown if the difference is lower than or equal to StrongDownDifference", + "ReferenceValue": { + "$Type": "Edm.PrimitiveType", + "@Core.Description": "Reference value for the calculation, e.g. number of sales for the last year" + }, + "IsRelativeDifference": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "Calculate with a relative difference" + }, + "UpDifference": { "$Type": "Edm.Decimal", "@Core.Description": "Threshold for Up" }, + "StrongUpDifference": { "$Type": "Edm.Decimal", "@Core.Description": "Threshold for StrongUp" }, + "DownDifference": { "$Type": "Edm.Decimal", "@Core.Description": "Threshold for Down" }, + "StrongDownDifference": { "$Type": "Edm.Decimal", "@Core.Description": "Threshold for StrongDown" } + }, + "KPI": { + "$Kind": "Term", + "$Type": "UI.KPIType", + "$AppliesTo": ["EntitySet", "EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "A Key Performance Indicator (KPI) bundles a SelectionVariant and a DataPoint, and provides details for progressive disclosure" + }, + "KPIType": { + "$Kind": "ComplexType", + "ID": { + "$Nullable": true, + "@Core.Description": "Optional identifier to reference this instance from an external context" + }, + "ShortDescription": { + "$Nullable": true, + "@Common.Experimental": true, + "@Core.Description": "Very short description", + "@Core.IsLanguageDependent": true + }, + "SelectionVariant": { + "$Type": "UI.SelectionVariantType", + "@Core.Description": "Selection variant, either specified inline or referencing another annotation via Path" + }, + "DataPoint": { + "$Type": "UI.DataPointType", + "@Core.Description": "Data point, either specified inline or referencing another annotation via Path" + }, + "AdditionalDataPoints": { + "$Collection": true, + "$Type": "UI.DataPointType", + "@Core.Description": "Additional data points, either specified inline or referencing another annotation via Path", + "@Core.LongDescription": "Additional data points are typically related to the main data point and provide complementing information or could be used for comparisons" + }, + "Detail": { + "$Type": "UI.KPIDetailType", + "$Nullable": true, + "@Core.Description": "Contains information about KPI details, especially drill-down presentations" + } + }, + "KPIDetailType": { + "$Kind": "ComplexType", + "DefaultPresentationVariant": { + "$Type": "UI.PresentationVariantType", + "$Nullable": true, + "@Core.Description": "Presentation variant, either specified inline or referencing another annotation via Path" + }, + "AlternativePresentationVariants": { + "$Collection": true, + "$Type": "UI.PresentationVariantType", + "@Core.Description": "A list of alternative presentation variants, either specified inline or referencing another annotation via Path" + }, + "SemanticObject": { + "$Nullable": true, + "@Core.Description": "Name of the Semantic Object. If not specified, use Semantic Object annotated at the property referenced in KPI/DataPoint/Value" + }, + "Action": { + "$Nullable": true, + "@Core.Description": "Name of the Action on the Semantic Object. If not specified, let user choose which of the available actions to trigger." + } + }, + "Chart": { + "$Kind": "Term", + "$Type": "UI.ChartDefinitionType", + "$AppliesTo": ["EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "Visualization of multiple data points" + }, + "ChartDefinitionType": { + "$Kind": "ComplexType", + "Title": { "$Nullable": true, "@Core.Description": "Title of the chart", "@Core.IsLanguageDependent": true }, + "Description": { "$Nullable": true, "@Core.Description": "Short description", "@Core.IsLanguageDependent": true }, + "ChartType": { "$Type": "UI.ChartType", "@Core.Description": "Chart type" }, + "AxisScaling": { + "$Type": "UI.ChartAxisScalingType", + "$Nullable": true, + "@Core.Description": "Describes the scale of the chart value axes" + }, + "Measures": { + "$Collection": true, + "$Type": "Edm.PropertyPath", + "@Common.PrimitivePropertyPath": true, + "@Core.Description": "Measures of the chart, e.g. size and color in a bubble chart" + }, + "DynamicMeasures": { + "$Collection": true, + "$Type": "Edm.AnnotationPath", + "@Core.Description": "Dynamic properties introduced by annotations and used as measures of the chart", + "@Core.LongDescription": "If the annotation referenced by an annotation path does not apply to the same collection of entities\n as the one being visualized according to the `UI.Chart` annotation, the annotation path MUST be silently ignored.", + "@Validation.AllowedTerms": ["Analytics.AggregatedProperty", "Aggregation.CustomAggregate"] + }, + "MeasureAttributes": { + "$Collection": true, + "$Type": "UI.ChartMeasureAttributeType", + "@Core.Description": "Describes Attributes for Measures. All Measures used in this collection must also be part of the Measures Property." + }, + "Dimensions": { + "$Collection": true, + "$Type": "Edm.PropertyPath", + "@Core.Description": "Dimensions of the chart, e.g. x- and y-axis of a bubble chart" + }, + "DimensionAttributes": { + "$Collection": true, + "$Type": "UI.ChartDimensionAttributeType", + "@Core.Description": "Describes Attributes for Dimensions. All Dimensions used in this collection must also be part of the Dimensions Property." + }, + "Actions": { + "$Collection": true, + "$Type": "UI.DataFieldForActionAbstract", + "@Core.Description": "Available actions" + } + }, + "ChartType": { + "$Kind": "EnumType", + "Column": 0, + "ColumnStacked": 1, + "ColumnDual": 2, + "ColumnStackedDual": 3, + "ColumnStacked100": 4, + "ColumnStackedDual100": 5, + "Bar": 6, + "BarStacked": 7, + "BarDual": 8, + "BarStackedDual": 9, + "BarStacked100": 10, + "BarStackedDual100": 11, + "Area": 12, + "AreaStacked": 13, + "AreaStacked100": 14, + "HorizontalArea": 15, + "HorizontalAreaStacked": 16, + "HorizontalAreaStacked100": 17, + "Line": 18, + "LineDual": 19, + "Combination": 20, + "CombinationStacked": 21, + "CombinationDual": 22, + "CombinationStackedDual": 23, + "HorizontalCombinationStacked": 24, + "Pie": 25, + "Donut": 26, + "Scatter": 27, + "Bubble": 28, + "Radar": 29, + "HeatMap": 30, + "TreeMap": 31, + "Waterfall": 32, + "Bullet": 33, + "VerticalBullet": 34, + "HorizontalWaterfall": 35, + "HorizontalCombinationDual": 36, + "HorizontalCombinationStackedDual": 37, + "Donut100": 38, + "Donut100@Common.Experimental": true + }, + "ChartAxisScalingType": { + "$Kind": "ComplexType", + "ScaleBehavior": { + "$Type": "UI.ChartAxisScaleBehaviorType", + "$DefaultValue": "AutoScale", + "@Core.Description": "Scale is fixed or adapts automatically to rendered values" + }, + "AutoScaleBehavior": { + "$Type": "UI.ChartAxisAutoScaleBehaviorType", + "$Nullable": true, + "@Core.Description": "Settings for automatic scaling" + }, + "FixedScaleMultipleStackedMeasuresBoundaryValues": { + "$Type": "UI.FixedScaleMultipleStackedMeasuresBoundaryValuesType", + "$Nullable": true, + "@Core.Description": "Boundary values for fixed scaling of a stacking chart type with multiple measures" + } + }, + "ChartAxisScaleBehaviorType": { + "$Kind": "EnumType", + "AutoScale": 0, + "AutoScale@Core.Description": "Value axes scale automatically", + "FixedScale": 1, + "FixedScale@Core.Description": "Fixed minimum and maximum values are applied, which are derived from the @UI.MeasureAttributes.DataPoint/MinimumValue and .../MaximumValue annotation by default.\n For stacking chart types with multiple measures, they are taken from ChartAxisScalingType/FixedScaleMultipleStackedMeasuresBoundaryValues.\n " + }, + "ChartAxisAutoScaleBehaviorType": { + "$Kind": "ComplexType", + "ZeroAlwaysVisible": { + "$Type": "Edm.Boolean", + "$DefaultValue": true, + "@Core.Description": "Forces the value axis to always display the zero value" + }, + "DataScope": { + "$Type": "UI.ChartAxisAutoScaleDataScopeType", + "$DefaultValue": "DataSet", + "@Core.Description": "Determines the automatic scaling" + } + }, + "ChartAxisAutoScaleDataScopeType": { + "$Kind": "EnumType", + "DataSet": 0, + "DataSet@Core.Description": "Minimum and maximum axes values are determined from the entire data set", + "VisibleData": 1, + "VisibleData@Core.Description": "Minimum and maximum axes values are determined from the currently visible data. Scrolling will change the scale." + }, + "FixedScaleMultipleStackedMeasuresBoundaryValuesType": { + "$Kind": "ComplexType", + "MinimumValue": { "$Type": "Edm.Decimal", "@Core.Description": "Minimum value on value axes" }, + "MaximumValue": { "$Type": "Edm.Decimal", "@Core.Description": "Maximum value on value axes" } + }, + "ChartDimensionAttributeType": { + "$Kind": "ComplexType", + "Dimension": { "$Type": "Edm.PropertyPath", "$Nullable": true }, + "Role": { "$Type": "UI.ChartDimensionRoleType", "$Nullable": true }, + "HierarchyLevel": { + "$Type": "Edm.Int32", + "$Nullable": true, + "@Common.Experimental": true, + "@Core.Description": "For a dimension with a hierarchy, members are selected from this level. The root node of the hierarchy is at level 0." + }, + "ValuesForSequentialColorLevels": { + "$Collection": true, + "@Common.Experimental": true, + "@Core.Description": "All values in this collection should be assigned to levels of the same color." + }, + "EmphasizedValues": { + "$Collection": true, + "@Common.Experimental": true, + "@Core.Description": "All values in this collection should be emphasized." + }, + "EmphasisLabels": { + "$Type": "UI.EmphasisLabelType", + "$Nullable": true, + "@Common.Experimental": true, + "@Core.Description": "Assign a label to values with an emphasized representation. This is required, if more than one emphasized value has been specified." + } + }, + "ChartMeasureAttributeType": { + "$Kind": "ComplexType", + "@Core.Description": "Exactly one of `Measure` and `DynamicMeasure` must be present", + "Measure": { "$Type": "Edm.PropertyPath", "$Nullable": true, "@Common.PrimitivePropertyPath": true }, + "DynamicMeasure": { + "$Type": "Edm.AnnotationPath", + "$Nullable": true, + "@Core.Description": "Dynamic property introduced by an annotation and used as a measure in a chart", + "@Core.LongDescription": "If the annotation referenced by an annotation path does not apply to the same collection of entities\n as the one being visualized according to the `UI.Chart` annotation, the annotation path MUST be silently ignored.", + "@Validation.AllowedTerms": ["Analytics.AggregatedProperty", "Aggregation.CustomAggregate"] + }, + "Role": { "$Type": "UI.ChartMeasureRoleType", "$Nullable": true }, + "DataPoint": { + "$Type": "Edm.AnnotationPath", + "$Nullable": true, + "@Core.Description": "Annotation path MUST end in @UI.DataPoint and the data point's Value MUST be the same property as in Measure", + "@Validation.AllowedTerms": ["UI.DataPoint"] + }, + "UseSequentialColorLevels": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Common.Experimental": true, + "@Core.Description": "All measures for which this setting is true should be assigned to levels of the same color." + } + }, + "ChartDimensionRoleType": { "$Kind": "EnumType", "Category": 0, "Series": 1, "Category2": 2 }, + "ChartMeasureRoleType": { "$Kind": "EnumType", "Axis1": 0, "Axis2": 1, "Axis3": 2 }, + "EmphasisLabelType": { + "$Kind": "ComplexType", + "@Common.Experimental": true, + "@Core.Description": "Assigns a label to the set of emphasized values and optionally also for non-emphasized values. This information can be used for semantic coloring.", + "EmphasizedValuesLabel": {}, + "NonEmphasizedValuesLabel": { "$Nullable": true } + }, + "ValueCriticality": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.ValueCriticalityType", + "$AppliesTo": ["Property", "TypeDefinition"], + "@Common.Experimental": true, + "@Core.Description": "Assign criticalities to primitive values. This information can be used for semantic coloring." + }, + "ValueCriticalityType": { + "$Kind": "ComplexType", + "@Common.Experimental": true, + "@Core.Description": "Assigns a fixed criticality to a primitive value. This information can be used for semantic coloring.", + "Value": { + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "@Core.Description": "MUST be a fixed value of primitive type" + }, + "Criticality": { "$Type": "UI.CriticalityType", "$Nullable": true } + }, + "CriticalityLabels": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.CriticalityLabelType", + "$AppliesTo": ["Property", "EntityType"], + "@Common.Experimental": true, + "@Core.Description": "\n Assign labels to criticalities. This information can be used for semantic coloring.\n When applied to a property, a label for a criticality must be provided, if more than one value of the annotated property has been assigned to the same criticality.\n There must be no more than one label per criticality.\n " + }, + "CriticalityLabelType": { + "$Kind": "ComplexType", + "@Common.Experimental": true, + "@Core.Description": "Assigns a label to a criticality. This information can be used for semantic coloring.", + "Criticality": { "$Type": "UI.CriticalityType" }, + "Label": { "@Core.IsLanguageDependent": true, "@Core.Description": "Criticality label" } + }, + "SelectionFields": { + "$Kind": "Term", + "$Collection": true, + "$Type": "Edm.PropertyPath", + "$AppliesTo": ["EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "Properties that might be relevant for filtering a collection of entities of this type" + }, + "Facets": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.Facet", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Collection of facets" + }, + "HeaderFacets": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.Facet", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Facets for additional object header information" + }, + "QuickViewFacets": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.Facet", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Facets that may be used for a quick overview of the object" + }, + "QuickCreateFacets": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.Facet", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Facets that may be used for a (quick) create of the object" + }, + "FilterFacets": { + "$Kind": "Term", + "$Collection": true, + "$Type": "UI.ReferenceFacet", + "$AppliesTo": ["EntityType"], + "@Core.Description": "Facets that reference UI.FieldGroup annotations to group filterable fields" + }, + "Facet": { + "$Kind": "ComplexType", + "$Abstract": true, + "@Core.Description": "Abstract base type for facets", + "@Validation.ApplicableTerms": ["UI.Hidden", "UI.PartOfPreview"], + "Label": { "$Nullable": true, "@Core.IsLanguageDependent": true, "@Core.Description": "Facet label" }, + "ID": { + "$Nullable": true, + "@Core.Description": "Unique identifier of a facet. ID should be stable, as long as the perceived semantics of the facet is unchanged." + } + }, + "CollectionFacet": { + "$Kind": "ComplexType", + "$BaseType": "UI.Facet", + "@Core.Description": "Collection of facets", + "Facets": { + "$Collection": true, + "$Type": "UI.Facet", + "@Core.Description": "Nested facets. An empty collection may be used as a placeholder for content added via extension points." + } }, - "com.sap.vocabularies.UI.v1": { - "$Alias": "UI", - "@Core.Description": "Terms for presenting data in user interfaces", - "@Core.LongDescription": "The SAP UI Vocabulary aims to optimize usage of data in UI channels.\nIt focuses on usage patterns of data in UIs, not on UI patterns, and it is completely independent of the\nUI technologies or devices used to visualize the data.\n\nThese usage patterns represent certain semantic views on business data, some of them very general,\nothers centering around the concept of a Thing, i.e. something tangible to end users.\nExamples for Things are semantic object instances or business object instances.\nOne example for a usage pattern is the collection of properties which helps the user to identify a Thing,\nthe [UI.Identification](#Identification) term.\nAnother example is the [UI.LineItem](#LineItem) term, which is a set of properties suitable for visualizing\na collection of business object instances, e.g. as a list or table.", - "@Core.Description#Published": "2019-02-14 © Copyright 2013 SAP SE. All rights reserved", - "@Core.Links": [ - { - "rel": "alternate", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/UI.xml" - }, - { - "rel": "latest-version", - "href": "https://sap.github.io/odata-vocabularies/vocabularies/UI.json" - }, - { - "rel": "describedby", - "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/UI.md" - } + "ReferenceFacet": { + "$Kind": "ComplexType", + "$BaseType": "UI.Facet", + "@Core.Description": "Facet that refers to a thing perspective, e.g. LineItem", + "Target": { + "$Type": "Edm.AnnotationPath", + "@Core.Description": "Referenced information: Communication.Contact, Communication.Address, or a term that is tagged with UI.ThingPerspective, e.g. UI.StatusInfo, UI.LineItem, UI.Identification, UI.FieldGroup, UI.Badge", + "@Validation.AllowedTerms": [ + "Communication.Address", + "Communication.Contact", + "UI.Badge", + "UI.Chart", + "UI.Contacts", + "UI.DataPoint", + "UI.FieldGroup", + "UI.GeoLocation", + "UI.GeoLocations", + "UI.HeaderInfo", + "UI.Identification", + "UI.KPI", + "UI.LineItem", + "UI.MediaResource", + "UI.PresentationVariant", + "UI.SelectionFields", + "UI.SelectionPresentationVariant", + "UI.StatusInfo" + ] + } + }, + "ReferenceURLFacet": { + "$Kind": "ComplexType", + "$BaseType": "UI.Facet", + "@Core.Description": "Facet that refers to a URL", + "Url": { "@Core.IsURL": true, "@Core.Description": "URL of referenced information" }, + "UrlContentType": { + "$Nullable": true, + "@Core.IsMediaType": true, + "@Core.Description": "Media type of referenced information" + } + }, + "SelectionPresentationVariant": { + "$Kind": "Term", + "$Type": "UI.SelectionPresentationVariantType", + "$AppliesTo": ["EntitySet", "EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "A SelectionPresentationVariant bundles a Selection Variant and a Presentation Variant" + }, + "SelectionPresentationVariantType": { + "$Kind": "ComplexType", + "ID": { + "$Nullable": true, + "@Core.Description": "Optional identifier to reference this variant from an external context" + }, + "Text": { + "$Nullable": true, + "@Core.IsLanguageDependent": true, + "@Core.Description": "Name of the bundling variant" + }, + "SelectionVariant": { + "$Type": "UI.SelectionVariantType", + "@Core.Description": "Selection variant, either specified inline or referencing another annotation via Path" + }, + "PresentationVariant": { + "$Type": "UI.PresentationVariantType", + "@Core.Description": "Presentation variant, either specified inline or referencing another annotation via Path" + } + }, + "PresentationVariant": { + "$Kind": "Term", + "$Type": "UI.PresentationVariantType", + "$AppliesTo": ["EntitySet", "EntityType"], + "@UI.ThingPerspective": true, + "@Core.Description": "Defines how the result of a queried collection of entities is shaped and how this result is displayed" + }, + "PresentationVariantType": { + "$Kind": "ComplexType", + "ID": { + "$Nullable": true, + "@Core.Description": "Optional identifier to reference this variant from an external context" + }, + "Text": { + "$Nullable": true, + "@Core.IsLanguageDependent": true, + "@Core.Description": "Name of the presentation variant" + }, + "MaxItems": { + "$Type": "Edm.Int32", + "$Nullable": true, + "@Core.Description": "Maximum number of items that should be included in the result" + }, + "SortOrder": { + "$Collection": true, + "$Type": "Common.SortOrderType", + "@Core.Description": "Collection can be provided inline or as a reference to a Common.SortOrder annotation via Path" + }, + "GroupBy": { + "$Collection": true, + "$Type": "Edm.PropertyPath", + "@Core.Description": "Sequence of groupable properties p1, p2, ... defining how the result is composed of instances representing groups,\n one for each combination of value properties in the queried collection. The sequence specifies a certain level\n of aggregation for the queried collection, and every group instance will provide aggregated values for\n properties that are aggregatable. Moreover, the series of sub-sequences (p1), (p1, p2), ... forms a leveled hierarchy,\n which may become relevant in combination with `InitialExpansionLevel`." + }, + "TotalBy": { + "$Collection": true, + "$Type": "Edm.PropertyPath", + "@Core.Description": "Sub-sequence q1, q2, ... of properties p1, p2, ... specified in GroupBy. With this, additional levels of aggregation\n are requested in addition to the most granular level defined by GroupBy: Every element in the series of sub-sequences\n (q1), (q1, q2), ... introduces an additional aggregation level included in the result." + }, + "Total": { + "$Collection": true, + "$Type": "Edm.PropertyPath", + "@Common.PrimitivePropertyPath": true, + "@Core.Description": "Aggregatable properties for which aggregated values should be provided for the additional aggregation levels specified in TotalBy." + }, + "DynamicTotal": { + "$Collection": true, + "$Type": "Edm.AnnotationPath", + "@Core.Description": "Dynamic properties introduced by annotations for which aggregated values should be provided for the additional aggregation levels specified in TotalBy", + "@Core.LongDescription": "If the annotation referenced by an annotation path does not apply to the same collection of entities\n as the one being presented according to the `UI.PresentationVariant` annotation, the annotation path MUST be silently ignored.", + "@Validation.AllowedTerms": ["Analytics.AggregatedProperty", "Aggregation.CustomAggregate"] + }, + "IncludeGrandTotal": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "Result should include a grand total for the properties specified in Total" + }, + "InitialExpansionLevel": { + "$Type": "Edm.Int32", + "$DefaultValue": 1, + "@Core.Description": "Level up to which the hierarchy defined for the queried collection should be expanded initially.\n The hierarchy may be implicitly imposed by the sequence of the GroupBy, or by an explicit hierarchy annotation." + }, + "Visualizations": { + "$Collection": true, + "$Type": "Edm.AnnotationPath", + "@Core.Description": "Lists available visualization types. Currently supported types are `UI.LineItem`, `UI.Chart`, and `UI.DataPoint`.\n For each type, no more than a single annotation is meaningful. Multiple instances of the same visualization type\n shall be modeled with different presentation variants.\n A reference to `UI.Lineitem` should always be part of the collection (least common denominator for renderers).\n The first entry of the collection is the default visualization.\n ", + "@Validation.AllowedTerms": ["UI.Chart", "UI.DataPoint", "UI.LineItem"] + }, + "RequestAtLeast": { + "$Collection": true, + "$Type": "Edm.PropertyPath", + "@Core.Description": "Properties that should always be included in the result of the queried collection", + "@Core.LongDescription": "Properties in `RequestAtLeast` must occur either in the `$select` clause of an OData request\n or among the grouping properties in an `$apply=groupby((grouping properties),...)` clause of an\n aggregating OData request." + }, + "SelectionFields": { + "$Collection": true, + "$Type": "Edm.PropertyPath", + "@Common.Experimental": true, + "@Core.Description": "Properties that should be presented for filtering a collection of entities.\n Can be provided inline or as a reference to a `UI.SelectionFields` annotation via Path." + } + }, + "SelectionVariant": { + "$Kind": "Term", + "$Type": "UI.SelectionVariantType", + "$AppliesTo": ["EntitySet", "EntityType"], + "@Core.Description": "A SelectionVariant denotes a combination of parameters and filters to query the annotated entity set" + }, + "SelectionVariantType": { + "$Kind": "ComplexType", + "ID": { + "$Nullable": true, + "@Core.Description": " May contain identifier to reference this instance from an external context" + }, + "Text": { + "$Nullable": true, + "@Core.IsLanguageDependent": true, + "@Core.Description": "Name of the selection variant" + }, + "Parameters": { + "$Collection": true, + "$Type": "UI.ParameterAbstract", + "@Core.Description": "Parameters of the selection variant" + }, + "FilterExpression": { + "$Nullable": true, + "@Core.Description": "Filter string for query part of URL, without `$filter=`" + }, + "SelectOptions": { + "$Collection": true, + "$Type": "UI.SelectOptionType", + "@Core.Description": "ABAP Select Options Pattern" + } + }, + "ParameterAbstract": { + "$Kind": "ComplexType", + "$Abstract": true, + "@Core.Description": "Key property of a parameter entity type" + }, + "Parameter": { + "$Kind": "ComplexType", + "$BaseType": "UI.ParameterAbstract", + "@Core.Description": "Single-valued parameter", + "PropertyName": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Path to a key property of a parameter entity type" + }, + "PropertyValue": { "$Type": "Edm.PrimitiveType", "@Core.Description": "Value for the key property" } + }, + "IntervalParameter": { + "$Kind": "ComplexType", + "$BaseType": "UI.ParameterAbstract", + "@Core.Description": "Interval parameter formed with a 'from' and a 'to' property", + "PropertyNameFrom": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Path to the 'from' property of a parameter entity type" + }, + "PropertyValueFrom": { "$Type": "Edm.PrimitiveType", "@Core.Description": "Value for the 'from' property" }, + "PropertyNameTo": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Path to the 'to' property of a parameter entity type" + }, + "PropertyValueTo": { "$Type": "Edm.PrimitiveType", "@Core.Description": "Value for the 'to' property" } + }, + "SelectOptionType": { + "$Kind": "ComplexType", + "@Core.Description": "List of value ranges for a single property", + "@Core.LongDescription": "Exactly one of `PropertyName` and `DynamicPropertyName` must be present", + "PropertyName": { + "$Type": "Edm.PropertyPath", + "$Nullable": true, + "@Common.PrimitivePropertyPath": true, + "@Core.Description": "Path to the property", + "@Core.Revisions": [{ "Kind": "Modified", "Description": "Now nullable if `DynamicPropertyName` is present" }] + }, + "DynamicPropertyName": { + "$Type": "Edm.AnnotationPath", + "$Nullable": true, + "@Core.Description": "Dynamic property introduced by annotations for which value ranges are specified", + "@Core.LongDescription": "If the annotation referenced by the annotation path does not apply to the same collection of entities\n as the one being filtered according to the `UI.SelectionVariant` annotation, this instance of `UI.SelectionVariant/SelectOptions` MUST be silently ignored.\n For an example, see the `UI.SelectionVariant` annotation in the [example](../examples/DynamicProperties-sample.xml).", + "@Validation.AllowedTerms": ["Analytics.AggregatedProperty", "Aggregation.CustomAggregate"] + }, + "Ranges": { "$Collection": true, "$Type": "UI.SelectionRangeType", "@Core.Description": "List of value ranges" } + }, + "SelectionRangeType": { + "$Kind": "ComplexType", + "@Core.Description": "Value range. If the range option only requires a single value, the value must be in the property Low", + "Sign": { "$Type": "UI.SelectionRangeSignType", "@Core.Description": "Include or exclude values" }, + "Option": { "$Type": "UI.SelectionRangeOptionType", "@Core.Description": "Comparison operator" }, + "Low": { "$Type": "Edm.PrimitiveType", "@Core.Description": "Single value or lower interval boundary" }, + "High": { "$Type": "Edm.PrimitiveType", "$Nullable": true, "@Core.Description": "Upper interval boundary" } + }, + "SelectionRangeSignType": { + "$Kind": "EnumType", + "I": 0, + "I@Core.Description": "Inclusive", + "E": 1, + "E@Core.Description": "Exclusive" + }, + "SelectionRangeOptionType": { + "$Kind": "EnumType", + "@Core.Description": "Comparison operator", + "EQ": 0, + "EQ@Core.Description": "Equal to", + "BT": 1, + "BT@Core.Description": "Between", + "CP": 2, + "CP@Core.Description": "Contains pattern", + "LE": 3, + "LE@Core.Description": "Less than or equal to", + "GE": 4, + "GE@Core.Description": "Greater than or equal to", + "NE": 5, + "NE@Core.Description": "Not equal to", + "NB": 6, + "NB@Core.Description": "Not between", + "NP": 7, + "NP@Core.Description": "Does not contain pattern", + "GT": 8, + "GT@Core.Description": "Greater than", + "LT": 9, + "LT@Core.Description": "Less than" + }, + "ThingPerspective": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Term"], + "@Core.Description": "The annotated term is a Thing Perspective" + }, + "IsSummary": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Record"], + "@Core.Description": "This Facet and all included Facets are the summary of the thing. At most one Facet of a thing can be tagged with this term", + "@Core.RequiresType": "UI.Facet" + }, + "PartOfPreview": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Record"], + "@Core.Description": "This record and all included structural elements are part of the Thing preview", + "@Core.LongDescription": "This term can be applied e.g. to UI.Facet and UI.DataField" + }, + "Map": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Record"], + "@Core.Description": "Target MUST reference a UI.GeoLocation, Communication.Address or a collection of these", + "@Core.RequiresType": "UI.ReferenceFacet" + }, + "Gallery": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Record"], + "@Core.Description": "Target MUST reference a UI.MediaResource", + "@Core.RequiresType": "UI.ReferenceFacet" + }, + "IsImageURL": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property", "Term"], + "@Core.Description": "Properties and terms annotated with this term MUST contain a valid URL referencing an resource with a MIME type image", + "@Core.RequiresType": "Edm.String", + "@Validation.ApplicableTerms": ["Common.IsNaturalPerson"] + }, + "IsImage": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property", "EntityType"], + "@Common.Experimental": true, + "@Core.Description": "Properties annotated with this term MUST be a stream property annotated with a MIME type image. Entity types annotated with this term MUST be a media entity type annotated with a MIME type image.", + "@Core.RequiresType": "Edm.Stream", + "@Validation.ApplicableTerms": ["Common.IsNaturalPerson"] + }, + "MultiLineText": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property", "PropertyValue", "Parameter"], + "@Core.Description": "Properties and parameters annotated with this annotation should be rendered as multi-line text (e.g. text area)", + "@Core.RequiresType": "Edm.String" + }, + "Placeholder": { + "$Kind": "Term", + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Core.Description": "A short, human-readable text that gives a hint or an example to help the user with data entry", + "@Core.IsLanguageDependent": true + }, + "TextArrangement": { + "$Kind": "Term", + "$Type": "UI.TextArrangementType", + "$AppliesTo": ["Annotation", "EntityType"], + "@Core.Description": "Describes the arrangement of a code or ID value and its text", + "@Core.LongDescription": "If used for a single property the Common.Text annotation is annotated" + }, + "TextArrangementType": { + "$Kind": "EnumType", + "TextFirst": 0, + "TextFirst@Core.Description": "Text is first, followed by the code/ID (e.g. in parentheses)", + "TextLast": 1, + "TextLast@Core.Description": "Code/ID is first, followed by the text (e.g. separated by a dash)", + "TextSeparate": 2, + "TextSeparate@Core.Description": "Code/ID and text are represented separately (code/ID will be shown and text can be visualized in a separate place)", + "TextOnly": 3, + "TextOnly@Core.Description": "Only text is represented, code/ID is hidden (e.g. for UUIDs)" + }, + "Importance": { + "$Kind": "Term", + "$Type": "UI.ImportanceType", + "$AppliesTo": ["Annotation", "Record"], + "@Core.Description": "Expresses the importance of e.g. a DataField or an annotation" + }, + "ImportanceType": { + "$Kind": "EnumType", + "High": 0, + "High@Core.Description": "High importance", + "Medium": 1, + "Medium@Core.Description": "Medium importance", + "Low": 2, + "Low@Core.Description": "Low importance" + }, + "Hidden": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property", "NavigationProperty", "Record", "Parameter"], + "@Core.Description": "Properties or facets (see UI.Facet) annotated with this term will not be rendered if the annotation evaluates to true.", + "@Core.LongDescription": "Hidden properties usually carry technical information that is used for application control and is of no direct interest to end users.\n The annotation value may be an expression to dynamically hide or render the annotated feature. If a navigation property is annotated with `Hidden` true, all subsequent parts are hidden - independent of their own potential `Hidden` annotations." + }, + "IsCopyAction": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Record"], + "@Common.Experimental": true, + "@Core.RequiresType": "UI.DataFieldForAction", + "@Core.Description": "The annotated [`DataFieldForAction`](#DataFieldForAction) record references an action that deep-copies an instance of the annotated entity type", + "@Core.LongDescription": "The referenced action MUST be bound to the annotated entity type and MUST create a new instance of the same entity type as a deep copy of the bound instance.\nUpon successful completion, the response MUST contain a `Location` header that contains the edit URL or read URL of the created entity,\nand the response MUST be either `201 Created` and a representation of the created entity,\nor `204 No Content` if the request included a `Prefer` header with a value of `return=minimal` and did not include the system query options `$select` and `$expand`." + }, + "CreateHidden": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$AppliesTo": ["EntitySet", "EntityType"], + "@Core.Description": "EntitySets annotated with this term can control the visibility of the Create operation dynamically", + "@Core.LongDescription": "The annotation value should be a path to another property from a related entity." + }, + "UpdateHidden": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$AppliesTo": ["EntitySet", "EntityType"], + "@Core.Description": "EntitySets annotated with this term can control the visibility of the Edit/Save operation dynamically", + "@Core.LongDescription": "The annotation value should be a path to another property from the same or a related entity." + }, + "DeleteHidden": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$AppliesTo": ["EntitySet", "EntityType"], + "@Core.Description": "EntitySets annotated with this term can control the visibility of the Delete operation dynamically", + "@Core.LongDescription": "The annotation value should be a path to another property from the same or a related entity." + }, + "HiddenFilter": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property", "NavigationProperty"], + "@Core.Description": "Properties annotated with this term will not be rendered as filter criteria if the annotation evaluates to true.", + "@Core.LongDescription": "Properties annotated with `HiddenFilter` are intended as parts of a `$filter` expression that cannot be directly influenced by end users.\n The properties will be rendered in all other places, e.g. table columns or form fields. This is in contrast to properties annotated with [Hidden](#Hidden) that are not rendered at all.\n If a navigation property is annotated with `HiddenFilter` true, all subsequent parts are hidden in filter - independent of their own potential `HiddenFilter` annotations." + }, + "DataFieldDefault": { + "$Kind": "Term", + "$Type": "UI.DataFieldAbstract", + "$AppliesTo": ["Property"], + "@Core.Description": "Default representation of a property as a datafield, e.g. when the property is added as a table column or form field via personalization", + "@Core.LongDescription": "Only concrete subtypes of [DataFieldAbstract](#DataFieldAbstract) can be used for a DataFieldDefault. For type [DataField](#DataField) and its subtypes the annotation target SHOULD be the same property that is referenced via a path expression in the `Value` of the datafield." + }, + "DataFieldAbstract": { + "$Kind": "ComplexType", + "$Abstract": true, + "@Core.Description": "Elementary building block that represents a piece of data and/or allows triggering an action", + "@Core.LongDescription": "By using the applicable terms UI.Hidden, UI.Importance or HTML5.CssDefaults, the visibility, the importance and\n and the default css settings (as the width) of the data field can be influenced. ", + "@Validation.ApplicableTerms": ["UI.Hidden", "UI.Importance", "UI.PartOfPreview", "HTML5.CssDefaults"], + "Label": { + "$Nullable": true, + "@Core.Description": "A short, human-readable text suitable for labels and captions in UIs", + "@Core.IsLanguageDependent": true + }, + "Criticality": { + "$Type": "UI.CriticalityType", + "$Nullable": true, + "@Core.Description": "Criticality of the data field value" + }, + "CriticalityRepresentation": { + "$Type": "UI.CriticalityRepresentationType", + "$Nullable": true, + "@Core.Description": "Decides if criticality is visualized in addition by means of an icon" + }, + "IconUrl": { "$Nullable": true, "@Core.Description": "Optional icon", "@Core.IsURL": true } + }, + "CriticalityRepresentationType": { + "$Kind": "EnumType", + "WithIcon": 0, + "WithIcon@Core.Description": "Criticality is represented with an icon", + "WithoutIcon": 1, + "WithoutIcon@Core.Description": "Criticality is represented without icon, e.g. only via text color", + "OnlyIcon": 2, + "OnlyIcon@Common.Experimental": true, + "OnlyIcon@Core.Description": "Criticality is represented only by using an icon" + }, + "DataFieldForAnnotation": { + "$Kind": "ComplexType", + "$BaseType": "UI.DataFieldAbstract", + "@Core.Description": "A structured piece of data described by an annotation", + "Target": { + "$Type": "Edm.AnnotationPath", + "@Core.Description": "Target MUST reference an annotation of terms Communication.Contact, Communication.Address, UI.DataPoint, UI.Chart, UI.FieldGroup, or UI.ConnectedFields", + "@Validation.AllowedTerms": [ + "Communication.Address", + "Communication.Contact", + "UI.Chart", + "UI.ConnectedFields", + "UI.DataPoint", + "UI.FieldGroup" + ] + } + }, + "DataFieldForActionAbstract": { + "$Kind": "ComplexType", + "$Abstract": true, + "$BaseType": "UI.DataFieldAbstract", + "@Core.Description": "Triggers an action", + "Inline": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "Action should be placed close to (or even inside) the visualized term" + }, + "Determining": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "Determines whether the action completes a process step (e.g. approve, reject)." + } + }, + "DataFieldForAction": { + "$Kind": "ComplexType", + "$BaseType": "UI.DataFieldForActionAbstract", + "@Core.Description": "Triggers an OData action", + "@Core.LongDescription": "The action is NOT tied to a data value (in contrast to [DataFieldWithAction](#DataFieldWithAction)).", + "Action": { + "$Type": "Common.ActionOverload", + "@Core.Description": "Qualified name of an Action, Function, ActionImport or FunctionImport in scope" + }, + "InvocationGrouping": { + "$Type": "UI.OperationGroupingType", + "$Nullable": true, + "@Core.Description": "Expresses how invocations of this action on multiple instances should be grouped" + } + }, + "OperationGroupingType": { + "$Kind": "EnumType", + "Isolated": 0, + "Isolated@Core.Description": "Invoke each action in isolation from other actions", + "ChangeSet": 1, + "ChangeSet@Core.Description": "Group all actions into a single change set" + }, + "DataFieldForIntentBasedNavigation": { + "$Kind": "ComplexType", + "$BaseType": "UI.DataFieldForActionAbstract", + "@Core.Description": "Triggers intent-based UI navigation", + "@Core.LongDescription": "The navigation intent is is expressed as a Semantic Object and optionally an Action on that object.\n\nIt is NOT tied to a data value (in contrast to [DataFieldWithIntentBasedNavigation](#DataFieldWithIntentBasedNavigation)).\"", + "SemanticObject": { "@Core.Description": "Name of the Semantic Object" }, + "Action": { + "$Nullable": true, + "@Core.Description": "Name of the Action on the Semantic Object. If not specified, let user choose which of the available actions to trigger." + }, + "NavigationAvailable": { + "$Type": "Edm.Boolean", + "$DefaultValue": true, + "@Core.Description": "The navigation intent is for that user with the selected context and parameters available" + }, + "RequiresContext": { + "$Type": "Edm.Boolean", + "$DefaultValue": false, + "@Core.Description": "Determines whether a context needs to be passed to the target of this navigation." + }, + "Mapping": { + "$Collection": true, + "$Type": "Common.SemanticObjectMappingType", + "@Core.Description": "Maps properties of the annotated entity type to properties of the Semantic Object" + } + }, + "DataFieldForActionGroup": { + "$Kind": "ComplexType", + "$BaseType": "UI.DataFieldAbstract", + "@Common.Experimental": true, + "@Core.Description": "Collection of OData actions and intent based navigations", + "Actions": { + "$Collection": true, + "$Type": "UI.DataFieldForActionAbstract", + "@Core.Description": "Collection of data fields that refer to actions or intent based navigations" + } + }, + "DataField": { + "$Kind": "ComplexType", + "$BaseType": "UI.DataFieldAbstract", + "@Core.Description": "A piece of data", + "Value": { + "$Type": "Edm.Untyped", + "@Core.Description": "The data field's value", + "@Validation.DerivedTypeConstraint": [ + "Edm.PrimitiveType", + "Collection(Edm.Binary)", + "Collection(Edm.Boolean)", + "Collection(Edm.Byte)", + "Collection(Edm.Date)", + "Collection(Edm.DateTimeOffset)", + "Collection(Edm.Decimal)", + "Collection(Edm.Double)", + "Collection(Edm.Duration)", + "Collection(Edm.Guid)", + "Collection(Edm.Int16)", + "Collection(Edm.Int32)", + "Collection(Edm.Int64)", + "Collection(Edm.SByte)", + "Collection(Edm.Single)", + "Collection(Edm.String)", + "Collection(Edm.TimeOfDay)" ], - "HeaderInfo": { - "$Kind": "Term", - "$Type": "UI.HeaderInfoType", - "$AppliesTo": [ - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "Information for the header area of an entity representation. HeaderInfo is mandatory for main entity types of the model" - }, - "HeaderInfoType": { - "$Kind": "ComplexType", - "TypeName": { - "@Core.IsLanguageDependent": true, - "@Core.Description": "Name of the main entity type" - }, - "TypeNamePlural": { - "@Core.IsLanguageDependent": true, - "@Core.Description": "Plural form of the name of the main entity type" - }, - "Title": { - "$Type": "UI.DataFieldAbstract", - "$Nullable": true, - "@Core.Description": "Title, e.g. for overview pages", - "@Core.LongDescription": "This can be a [DataField](#DataField) and any of its children, or a [DataFieldForAnnotation](#DataFieldForAnnotation) targeting [ConnectedFields](#ConnectedFields).", - "@Validation.DerivedTypeConstraint": [ - "UI.DataField", - "UI.DataFieldForAnnotation" - ] - }, - "Description": { - "$Type": "UI.DataFieldAbstract", - "$Nullable": true, - "@Core.Description": "Description, e.g. for overview pages", - "@Core.LongDescription": "This can be a [DataField](#DataField) and any of its children, or a [DataFieldForAnnotation](#DataFieldForAnnotation) targeting [ConnectedFields](#ConnectedFields).", - "@Validation.DerivedTypeConstraint": [ - "UI.DataField", - "UI.DataFieldForAnnotation" - ] - }, - "Image": { - "$Type": "Edm.Stream", - "$Nullable": true, - "@Common.Experimental": true, - "@Core.Description": "Image for an instance of the entity type. If the property has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the value of the property `ImageUrl` can be used instead." - }, - "ImageUrl": { - "$Nullable": true, - "@Core.IsURL": true, - "@Core.Description": "Image URL for an instance of the entity type. If the property has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the value of the property `TypeImageUrl` can be used instead." - }, - "TypeImageUrl": { - "$Nullable": true, - "@Core.IsURL": true, - "@Core.Description": "Image URL for the entity type" - }, - "Initials": { - "$Nullable": true, - "@Common.Experimental": true, - "@Core.Description": "Latin letters to be used in case no `Image`, `ImageUrl`, or `TypeImageUrl` is present" - } - }, - "Identification": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.DataFieldAbstract", - "$AppliesTo": [ - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "Collection of fields identifying the object" - }, - "Badge": { - "$Kind": "Term", - "$Type": "UI.BadgeType", - "$AppliesTo": [ - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "Information usually displayed in the form of a business card" - }, - "BadgeType": { - "$Kind": "ComplexType", - "HeadLine": { - "$Type": "UI.DataField", - "@Core.Description": "Headline" - }, - "Title": { - "$Type": "UI.DataField", - "@Core.Description": "Title" - }, - "ImageUrl": { - "$Nullable": true, - "@Core.IsURL": true, - "@Core.Description": "Image URL for an instance of the entity type. If the property has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the value of the property `TypeImageUrl` can be used instead." - }, - "TypeImageUrl": { - "$Nullable": true, - "@Core.IsURL": true, - "@Core.Description": "Image URL for the entity type" - }, - "MainInfo": { - "$Type": "UI.DataField", - "$Nullable": true, - "@Core.Description": "Main information on the business card" - }, - "SecondaryInfo": { - "$Type": "UI.DataField", - "$Nullable": true, - "@Core.Description": "Additional information on the business card" - } - }, - "LineItem": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.DataFieldAbstract", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Collection of data fields for representation in a table or list", - "@UI.ThingPerspective": true - }, - "StatusInfo": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.DataFieldAbstract", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Collection of data fields describing the status of an entity", - "@UI.ThingPerspective": true - }, - "FieldGroup": { - "$Kind": "Term", - "$Type": "UI.FieldGroupType", - "$AppliesTo": [ - "EntityType", - "Action", - "Function", - "FunctionImport" - ], - "@Core.Description": "Group of fields with an optional label", - "@UI.ThingPerspective": true - }, - "FieldGroupType": { - "$Kind": "ComplexType", - "Label": { - "$Nullable": true, - "@Core.IsLanguageDependent": true, - "@Core.Description": "Label for the field group" - }, - "Data": { - "$Collection": true, - "$Type": "UI.DataFieldAbstract", - "@Core.Description": "Collection of data fields" - } - }, - "ConnectedFields": { - "$Kind": "Term", - "$Type": "UI.ConnectedFieldsType", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Group of semantically connected fields with a representation template and an optional label", - "@Core.Example": { - "@UI.ConnectedFields#Material": { - "Label": "Material", - "Template": "{MaterialName} - {MaterialClassName}", - "Data": { - "MaterialName": { - "@type": "#UI.DataField", - "Value": { - "$Path": "Material" - } - }, - "MaterialClassName": { - "@type": "#UI.DataField", - "Value": { - "$Path": "MaterialClass" - } - } - } - } - } - }, - "ConnectedFieldsType": { - "$Kind": "ComplexType", - "@Core.Description": "Group of semantically connected fields with a representation template and an optional label", - "Label": { - "$Nullable": true, - "@Core.IsLanguageDependent": true, - "@Core.Description": "Label for the connected fields" - }, - "Template": { - "@Core.IsLanguageDependent": true, - "@Core.Description": "Template for representing the connected fields", - "@Core.LongDescription": "Template variables are identifiers enclosed in curly braces, e.g. `{MaterialName} - {MaterialClassName}`. The `Data` collection assigns values to the template variables." - }, - "Data": { - "$Type": "Core.Dictionary", - "@Validation.OpenPropertyTypeConstraint": [ - "UI.DataFieldAbstract" - ], - "@Core.Description": "Dictionary of template variables", - "@Core.LongDescription": "Each template variable used in `Template` must be assigned a value here. The value must be of type [DataFieldAbstract](#DataFieldAbstract)" - } - }, - "GeoLocations": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.GeoLocationType", - "$AppliesTo": [ - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "Collection of geographic locations" - }, - "GeoLocation": { - "$Kind": "Term", - "$Type": "UI.GeoLocationType", - "$AppliesTo": [ - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "Geographic location" - }, - "GeoLocationType": { - "$Kind": "ComplexType", - "@Core.Description": "Properties that define a geographic location", - "Latitude": { - "$Type": "Edm.Double", - "$Nullable": true, - "@Core.Description": "Geographic latitude" - }, - "Longitude": { - "$Type": "Edm.Double", - "$Nullable": true, - "@Core.Description": "Geographic longitude" - }, - "Location": { - "$Type": "Edm.GeographyPoint", - "$Nullable": true, - "$SRID": "variable", - "@Core.Description": "A point in a round-earth coordinate system" - }, - "Address": { - "$Type": "Communication.AddressType", - "$Nullable": true, - "@Core.Description": "vCard-style address" - } - }, - "Contacts": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Edm.AnnotationPath", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Collection of contacts", - "@Core.LongDescription": "Each collection item MUST reference an annotation of a Communication.Contact", - "@UI.ThingPerspective": true, - "@Validation.AllowedTerms": [ - "Communication.Contact" - ] - }, - "MediaResource": { - "$Kind": "Term", - "$Type": "UI.MediaResourceType", - "$AppliesTo": [ - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "Properties that describe a media resource" - }, - "MediaResourceType": { - "$Kind": "ComplexType", - "Url": { - "@Core.Description": "URL of media resource", - "@Core.IsURL": true - }, - "ContentType": { - "$Nullable": true, - "@Core.Description": "Content type, such as application/pdf, video/x-flv, image/jpeg", - "@Core.IsMediaType": true - }, - "ByteSize": { - "$Type": "Edm.Int64", - "$Nullable": true, - "@Core.Description": "Resource size in bytes" - }, - "ChangedAt": { - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$Precision": 0, - "@Core.Description": "Date of last change" - }, - "Thumbnail": { - "$Type": "UI.ImageType", - "$Nullable": true, - "@Core.Description": "Thumbnail image" - }, - "Title": { - "$Type": "UI.DataField", - "@Core.Description": "Resource title" - }, - "Description": { - "$Type": "UI.DataField", - "$Nullable": true, - "@Core.Description": "Resource description" - } - }, - "ImageType": { - "$Kind": "ComplexType", - "Url": { - "@Core.Description": "URL of image", - "@Core.IsURL": true - }, - "Width": { - "$Nullable": true, - "@Core.Description": "Width of image" - }, - "Height": { - "$Nullable": true, - "@Core.Description": "Height of image" - } - }, - "DataPoint": { - "$Kind": "Term", - "$Type": "UI.DataPointType", - "$AppliesTo": [ - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "Visualization of a single point of data, typically a number; may also be textual, e.g. a status value" - }, - "DataPointType": { - "$Kind": "ComplexType", - "Title": { - "$Nullable": true, - "@Core.Description": "Title of the data point", - "@Core.IsLanguageDependent": true - }, - "Description": { - "$Nullable": true, - "@Core.Description": "Short description", - "@Core.IsLanguageDependent": true - }, - "LongDescription": { - "$Nullable": true, - "@Core.Description": "Full description", - "@Core.IsLanguageDependent": true - }, - "Value": { - "$Type": "Edm.PrimitiveType", - "@Core.Description": "Numeric value", - "@Core.LongDescription": "\nThe value is typically provided via a `Path` construct. The path MUST lead to a direct property of the same entity type or a property of a complex property (recursively) of that entity type, navigation segments are not allowed.\n\nIt could be annotated with either `UoM.ISOCurrency` or `UoM.Unit`.\nPercentage values are annotated with `UoM.Unit = '%'`.\nA renderer should take an optional `Common.Text` annotation into consideration.\n " - }, - "TargetValue": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "Target value" - }, - "ForecastValue": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "Forecast value" - }, - "MinimumValue": { - "$Type": "Edm.Decimal", - "$Nullable": true, - "@Core.Description": "Minimum value (for output rendering)" - }, - "MaximumValue": { - "$Type": "Edm.Decimal", - "$Nullable": true, - "@Core.Description": "Maximum value (for output rendering)" - }, - "ValueFormat": { - "$Type": "UI.NumberFormat", - "$Nullable": true, - "@Core.Description": "Number format" - }, - "Visualization": { - "$Type": "UI.VisualizationType", - "$Nullable": true, - "@Core.Description": "Preferred visualization" - }, - "SampleSize": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "\n Sample size used for the determination of the data point; should contain just integer value as Edm.Byte, Edm.SByte, Edm.Intxx, and Edm.Decimal with scale 0.\n " - }, - "ReferencePeriod": { - "$Type": "UI.ReferencePeriod", - "$Nullable": true, - "@Core.Description": "Reference period" - }, - "Criticality": { - "$Type": "UI.CriticalityType", - "$Nullable": true, - "@Core.Description": "Service-calculated criticality, alternative to CriticalityCalculation" - }, - "CriticalityLabels": { - "$Type": "Edm.AnnotationPath", - "$Nullable": true, - "@Core.Description": "Custom labels for the criticality legend. Annotation path MUST end in UI.CriticalityLabels", - "@Validation.AllowedTerms": [ - "UI.CriticalityLabels" - ] - }, - "CriticalityRepresentation": { - "$Type": "UI.CriticalityRepresentationType", - "$Nullable": true, - "@Common.Experimental": true, - "@Core.Description": "Decides if criticality is visualized in addition by means of an icon" - }, - "CriticalityCalculation": { - "$Type": "UI.CriticalityCalculationType", - "$Nullable": true, - "@Core.Description": "Parameters for client-calculated criticality, alternative to Criticality" - }, - "Trend": { - "$Type": "UI.TrendType", - "$Nullable": true, - "@Core.Description": "Service-calculated trend, alternative to TrendCalculation" - }, - "TrendCalculation": { - "$Type": "UI.TrendCalculationType", - "$Nullable": true, - "@Core.Description": "Parameters for client-calculated trend, alternative to Trend" - }, - "Responsible": { - "$Type": "Communication.ContactType", - "$Nullable": true, - "@Core.Description": "Contact person" - } - }, - "NumberFormat": { - "$Kind": "ComplexType", - "@Core.Description": "Describes how to visualise a number", - "ScaleFactor": { - "$Type": "Edm.Decimal", - "$Nullable": true, - "@Core.Description": "Display value in *ScaleFactor* units, e.g. 1000 for k (kilo), 1e6 for M (Mega)" - }, - "NumberOfFractionalDigits": { - "$Type": "Edm.Byte", - "$Nullable": true, - "@Core.Description": "Number of fractional digits of the scaled value to be visualized" - } - }, - "VisualizationType": { - "$Kind": "EnumType", - "Number": 0, - "Number@Core.Description": "Visualize as a number", - "BulletChart": 1, - "BulletChart@Core.Description": "Visualize as bullet chart - requires TargetValue", - "Progress": 2, - "Progress@Core.Description": "Visualize as progress indicator - requires TargetValue", - "Rating": 3, - "Rating@Core.Description": "Visualize as partially or completely filled stars/hearts/... - requires TargetValue", - "Donut": 4, - "Donut@Core.Description": "Visualize as donut, optionally with missing segment - requires TargetValue", - "DeltaBulletChart": 5, - "DeltaBulletChart@Core.Description": "Visualize as delta bullet chart - requires TargetValue" - }, - "ReferencePeriod": { - "$Kind": "ComplexType", - "@Core.Description": "Reference period", - "Description": { - "$Nullable": true, - "@Core.Description": "Short description of the reference period", - "@Core.IsLanguageDependent": true - }, - "Start": { - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$Precision": 0, - "@Core.Description": "Start of the reference period" - }, - "End": { - "$Type": "Edm.DateTimeOffset", - "$Nullable": true, - "$Precision": 0, - "@Core.Description": "End of the reference period" - } - }, - "CriticalityType": { - "$Kind": "EnumType", - "@Core.Description": "Criticality of a value or status, represented e.g. via semantic colors (https://experience.sap.com/fiori-design-web/foundation/colors/#semantic-colors)", - "VeryNegative": -1, - "VeryNegative@Common.Experimental": true, - "VeryNegative@Core.Description": "Very negative / dark-red status - risk - out of stock - late", - "Neutral": 0, - "Neutral@Core.Description": "Neutral / grey status - inactive - open - in progress", - "Negative": 1, - "Negative@Core.Description": "Negative / red status - attention - overload - alert", - "Critical": 2, - "Critical@Core.Description": "Critical / orange status - warning", - "Positive": 3, - "Positive@Core.Description": "Positive / green status - completed - available - on track - acceptable", - "VeryPositive": 4, - "VeryPositive@Common.Experimental": true, - "VeryPositive@Core.Description": "Very positive - above max stock - excess", - "Information": 5, - "Information@Common.Experimental": true, - "Information@Core.Description": "Information - noticable - informative" - }, - "CriticalityCalculationType": { - "$Kind": "ComplexType", - "$BaseType": "UI.CriticalityThresholdsType", - "@Core.Description": "Describes how to calculate the criticality of a value depending on the improvement direction", - "@Core.LongDescription": "\nThe calculation is done by comparing a value to the threshold values relevant for the specified improvement direction.\n\nThe value to be compared is\n - Value - if ReferenceValue is not specified\n - Value sub ReferenceValue – if ReferenceValue is specified and IsRelativeDifference is not specified or specified as false\n - (Value sub ReferenceValue) divBy ReferenceValue – if ReferenceValue is specified and IsRelativeDifference is specified as true\n\nFor improvement direction `Target`, the criticality is calculated using both low and high threshold values. It will be\n - Positive if the value is greater than or equal to AcceptanceRangeLowValue and lower than or equal to AcceptanceRangeHighValue\n - Neutral if the value is greater than or equal to ToleranceRangeLowValue and lower than AcceptanceRangeLowValue OR greater than AcceptanceRangeHighValue and lower than or equal to ToleranceRangeHighValue\n - Critical if the value is greater than or equal to DeviationRangeLowValue and lower than ToleranceRangeLowValue OR greater than ToleranceRangeHighValue and lower than or equal to DeviationRangeHighValue\n - Negative if the value is lower than DeviationRangeLowValue or greater than DeviationRangeHighValue\n\nFor improvement direction `Minimize`, the criticality is calculated using the high threshold values. It is\n - Positive if the value is lower than or equal to AcceptanceRangeHighValue\n - Neutral if the value is greater than AcceptanceRangeHighValue and lower than or equal to ToleranceRangeHighValue\n - Critical if the value is greater than ToleranceRangeHighValue and lower than or equal to DeviationRangeHighValue\n - Negative if the value is greater than DeviationRangeHighValue\n\nFor improvement direction `Maximize`, the criticality is calculated using the low threshold values. It is\n - Positive if the value is greater than or equal to AcceptanceRangeLowValue\n - Neutral if the value is less than AcceptanceRangeLowValue and greater than or equal to ToleranceRangeLowValue\n - Critical if the value is lower than ToleranceRangeLowValue and greater than or equal to DeviationRangeLowValue\n - Negative if the value is lower than DeviationRangeLowValue\n\nThresholds are optional. For unassigned values, defaults are determined in this order:\n - For DeviationRange, an omitted LowValue translates into the smallest possible number (-INF), an omitted HighValue translates into the largest possible number (+INF)\n - For ToleranceRange, an omitted LowValue will be initialized with DeviationRangeLowValue, an omitted HighValue will be initialized with DeviationRangeHighValue\n - For AcceptanceRange, an omitted LowValue will be initialized with ToleranceRangeLowValue, an omitted HighValue will be initialized with ToleranceRangeHighValue\n ", - "ReferenceValue": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Common.Experimental": true, - "@Core.Description": "Reference value for the calculation, e.g. number of sales for the last year" - }, - "IsRelativeDifference": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Common.Experimental": true, - "@Core.Description": "Calculate with a relative difference" - }, - "ImprovementDirection": { - "$Type": "UI.ImprovementDirectionType", - "@Core.Description": "Describes in which direction the value improves" - }, - "ConstantThresholds": { - "$Collection": true, - "$Type": "UI.LevelThresholdsType", - "@Common.Experimental": true, - "@Core.Description": "List of thresholds depending on the aggregation level as a set of constant values", - "@Core.LongDescription": "Constant thresholds shall only be used in order to refine constant values given for the data point overall (aggregation level with empty collection of property paths), but not if the thresholds are based on other measure elements." - } - }, - "CriticalityThresholdsType": { - "$Kind": "ComplexType", - "@Core.Description": "Thresholds for calculating the criticality of a value", - "AcceptanceRangeLowValue": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "Lowest value that is considered positive" - }, - "AcceptanceRangeHighValue": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "Highest value that is considered positive" - }, - "ToleranceRangeLowValue": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "Lowest value that is considered neutral" - }, - "ToleranceRangeHighValue": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "Highest value that is considered neutral" - }, - "DeviationRangeLowValue": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "Lowest value that is considered critical" - }, - "DeviationRangeHighValue": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "Highest value that is considered critical" - } - }, - "ImprovementDirectionType": { - "$Kind": "EnumType", - "@Core.Description": "Describes which direction of a value change is seen as an improvement", - "Minimize": 1, - "Minimize@Core.Description": "Lower is better", - "Target": 2, - "Target@Core.Description": "Closer to the target is better", - "Maximize": 3, - "Maximize@Core.Description": "Higher is better" - }, - "LevelThresholdsType": { - "$Kind": "ComplexType", - "$BaseType": "UI.CriticalityThresholdsType", - "@Common.Experimental": true, - "@Core.Description": "Thresholds for an aggregation level", - "AggregationLevel": { - "$Collection": true, - "$Type": "Edm.PropertyPath", - "@Core.Description": "An unordered tuple of dimensions, i.e. properties which are intended to be used for grouping in aggregating requests. In analytical UIs, e.g. an analytical chart, the aggregation level typically corresponds to the visible dimensions." - } - }, - "TrendType": { - "$Kind": "EnumType", - "@Core.Description": "The trend of a value", - "StrongUp": 1, - "StrongUp@Core.Description": "Value grows strongly", - "Up": 2, - "Up@Core.Description": "Value grows", - "Sideways": 3, - "Sideways@Core.Description": "Value does not significantly grow or shrink", - "Down": 4, - "Down@Core.Description": "Value shrinks", - "StrongDown": 5, - "StrongDown@Core.Description": "Value shrinks strongly" - }, - "TrendCalculationType": { - "$Kind": "ComplexType", - "@Core.Description": "Describes how to calculate the trend of a value", - "@Core.LongDescription": "\nBy default, the calculation is done by comparing the difference between Value and ReferenceValue to the threshold values.\nIf IsRelativeDifference is set, the difference of Value and ReferenceValue is divided by ReferenceValue and the relative difference is compared.\n\nThe trend is\n - StrongUp if the difference is greater than or equal to StrongUpDifference\n - Up if the difference is less than StrongUpDifference and greater than or equal to UpDifference\n - Sideways if the difference is less than UpDifference and greater than DownDifference\n - Down if the difference is greater than StrongDownDifference and lower than or equal to DownDifference\n - StrongDown if the difference is lower than or equal to StrongDownDifference", - "ReferenceValue": { - "$Type": "Edm.PrimitiveType", - "@Core.Description": "Reference value for the calculation, e.g. number of sales for the last year" - }, - "IsRelativeDifference": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Calculate with a relative difference" - }, - "UpDifference": { - "$Type": "Edm.Decimal", - "@Core.Description": "Threshold for Up" - }, - "StrongUpDifference": { - "$Type": "Edm.Decimal", - "@Core.Description": "Threshold for StrongUp" - }, - "DownDifference": { - "$Type": "Edm.Decimal", - "@Core.Description": "Threshold for Down" - }, - "StrongDownDifference": { - "$Type": "Edm.Decimal", - "@Core.Description": "Threshold for StrongDown" - } - }, - "KPI": { - "$Kind": "Term", - "$Type": "UI.KPIType", - "$AppliesTo": [ - "EntitySet", - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "A Key Performance Indicator (KPI) bundles a SelectionVariant and a DataPoint, and provides details for progressive disclosure" - }, - "KPIType": { - "$Kind": "ComplexType", - "ID": { - "$Nullable": true, - "@Core.Description": "Optional identifier to reference this instance from an external context" - }, - "ShortDescription": { - "$Nullable": true, - "@Common.Experimental": true, - "@Core.Description": "Very short description", - "@Core.IsLanguageDependent": true - }, - "SelectionVariant": { - "$Type": "UI.SelectionVariantType", - "@Core.Description": "Selection variant, either specified inline or referencing another annotation via Path" - }, - "DataPoint": { - "$Type": "UI.DataPointType", - "@Core.Description": "Data point, either specified inline or referencing another annotation via Path" - }, - "AdditionalDataPoints": { - "$Collection": true, - "$Type": "UI.DataPointType", - "@Core.Description": "Additional data points, either specified inline or referencing another annotation via Path", - "@Core.LongDescription": "Additional data points are typically related to the main data point and provide complementing information or could be used for comparisons" - }, - "Detail": { - "$Type": "UI.KPIDetailType", - "$Nullable": true, - "@Core.Description": "Contains information about KPI details, especially drill-down presentations" - } - }, - "KPIDetailType": { - "$Kind": "ComplexType", - "DefaultPresentationVariant": { - "$Type": "UI.PresentationVariantType", - "$Nullable": true, - "@Core.Description": "Presentation variant, either specified inline or referencing another annotation via Path" - }, - "AlternativePresentationVariants": { - "$Collection": true, - "$Type": "UI.PresentationVariantType", - "@Core.Description": "A list of alternative presentation variants, either specified inline or referencing another annotation via Path" - }, - "SemanticObject": { - "$Nullable": true, - "@Core.Description": "Name of the Semantic Object. If not specified, use Semantic Object annotated at the property referenced in KPI/DataPoint/Value" - }, - "Action": { - "$Nullable": true, - "@Core.Description": "Name of the Action on the Semantic Object. If not specified, let user choose which of the available actions to trigger." - } - }, - "Chart": { - "$Kind": "Term", - "$Type": "UI.ChartDefinitionType", - "$AppliesTo": [ - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "Visualization of multiple data points" - }, - "ChartDefinitionType": { - "$Kind": "ComplexType", - "Title": { - "$Nullable": true, - "@Core.Description": "Title of the chart", - "@Core.IsLanguageDependent": true - }, - "Description": { - "$Nullable": true, - "@Core.Description": "Short description", - "@Core.IsLanguageDependent": true - }, - "ChartType": { - "$Type": "UI.ChartType", - "@Core.Description": "Chart type" - }, - "AxisScaling": { - "$Type": "UI.ChartAxisScalingType", - "$Nullable": true, - "@Core.Description": "Describes the scale of the chart value axes" - }, - "Measures": { - "$Collection": true, - "$Type": "Edm.PropertyPath", - "@Common.PrimitivePropertyPath": true, - "@Core.Description": "Measures of the chart, e.g. size and color in a bubble chart" - }, - "DynamicMeasures": { - "$Collection": true, - "$Type": "Edm.AnnotationPath", - "@Core.Description": "Dynamic properties introduced by annotations and used as measures of the chart", - "@Core.LongDescription": "If the annotation referenced by an annotation path does not apply to the same collection of entities\n as the one being visualized according to the `UI.Chart` annotation, the annotation path MUST be silently ignored.", - "@Validation.AllowedTerms": [ - "Analytics.AggregatedProperty", - "Aggregation.CustomAggregate" - ] - }, - "MeasureAttributes": { - "$Collection": true, - "$Type": "UI.ChartMeasureAttributeType", - "@Core.Description": "Describes Attributes for Measures. All Measures used in this collection must also be part of the Measures Property." - }, - "Dimensions": { - "$Collection": true, - "$Type": "Edm.PropertyPath", - "@Core.Description": "Dimensions of the chart, e.g. x- and y-axis of a bubble chart" - }, - "DimensionAttributes": { - "$Collection": true, - "$Type": "UI.ChartDimensionAttributeType", - "@Core.Description": "Describes Attributes for Dimensions. All Dimensions used in this collection must also be part of the Dimensions Property." - }, - "Actions": { - "$Collection": true, - "$Type": "UI.DataFieldForActionAbstract", - "@Core.Description": "Available actions" - } - }, - "ChartType": { - "$Kind": "EnumType", - "Column": 0, - "ColumnStacked": 1, - "ColumnDual": 2, - "ColumnStackedDual": 3, - "ColumnStacked100": 4, - "ColumnStackedDual100": 5, - "Bar": 6, - "BarStacked": 7, - "BarDual": 8, - "BarStackedDual": 9, - "BarStacked100": 10, - "BarStackedDual100": 11, - "Area": 12, - "AreaStacked": 13, - "AreaStacked100": 14, - "HorizontalArea": 15, - "HorizontalAreaStacked": 16, - "HorizontalAreaStacked100": 17, - "Line": 18, - "LineDual": 19, - "Combination": 20, - "CombinationStacked": 21, - "CombinationDual": 22, - "CombinationStackedDual": 23, - "HorizontalCombinationStacked": 24, - "Pie": 25, - "Donut": 26, - "Scatter": 27, - "Bubble": 28, - "Radar": 29, - "HeatMap": 30, - "TreeMap": 31, - "Waterfall": 32, - "Bullet": 33, - "VerticalBullet": 34, - "HorizontalWaterfall": 35, - "HorizontalCombinationDual": 36, - "HorizontalCombinationStackedDual": 37, - "Donut100": 38, - "Donut100@Common.Experimental": true - }, - "ChartAxisScalingType": { - "$Kind": "ComplexType", - "ScaleBehavior": { - "$Type": "UI.ChartAxisScaleBehaviorType", - "$DefaultValue": "AutoScale", - "@Core.Description": "Scale is fixed or adapts automatically to rendered values" - }, - "AutoScaleBehavior": { - "$Type": "UI.ChartAxisAutoScaleBehaviorType", - "$Nullable": true, - "@Core.Description": "Settings for automatic scaling" - }, - "FixedScaleMultipleStackedMeasuresBoundaryValues": { - "$Type": "UI.FixedScaleMultipleStackedMeasuresBoundaryValuesType", - "$Nullable": true, - "@Core.Description": "Boundary values for fixed scaling of a stacking chart type with multiple measures" - } - }, - "ChartAxisScaleBehaviorType": { - "$Kind": "EnumType", - "AutoScale": 0, - "AutoScale@Core.Description": "Value axes scale automatically", - "FixedScale": 1, - "FixedScale@Core.Description": "Fixed minimum and maximum values are applied, which are derived from the @UI.MeasureAttributes.DataPoint/MinimumValue and .../MaximumValue annotation by default.\n For stacking chart types with multiple measures, they are taken from ChartAxisScalingType/FixedScaleMultipleStackedMeasuresBoundaryValues.\n " - }, - "ChartAxisAutoScaleBehaviorType": { - "$Kind": "ComplexType", - "ZeroAlwaysVisible": { - "$Type": "Edm.Boolean", - "$DefaultValue": true, - "@Core.Description": "Forces the value axis to always display the zero value" - }, - "DataScope": { - "$Type": "UI.ChartAxisAutoScaleDataScopeType", - "$DefaultValue": "DataSet", - "@Core.Description": "Determines the automatic scaling" - } - }, - "ChartAxisAutoScaleDataScopeType": { - "$Kind": "EnumType", - "DataSet": 0, - "DataSet@Core.Description": "Minimum and maximum axes values are determined from the entire data set", - "VisibleData": 1, - "VisibleData@Core.Description": "Minimum and maximum axes values are determined from the currently visible data. Scrolling will change the scale." - }, - "FixedScaleMultipleStackedMeasuresBoundaryValuesType": { - "$Kind": "ComplexType", - "MinimumValue": { - "$Type": "Edm.Decimal", - "@Core.Description": "Minimum value on value axes" - }, - "MaximumValue": { - "$Type": "Edm.Decimal", - "@Core.Description": "Maximum value on value axes" - } - }, - "ChartDimensionAttributeType": { - "$Kind": "ComplexType", - "Dimension": { - "$Type": "Edm.PropertyPath", - "$Nullable": true - }, - "Role": { - "$Type": "UI.ChartDimensionRoleType", - "$Nullable": true - }, - "HierarchyLevel": { - "$Type": "Edm.Int32", - "$Nullable": true, - "@Common.Experimental": true, - "@Core.Description": "For a dimension with a hierarchy, members are selected from this level. The root node of the hierarchy is at level 0." - }, - "ValuesForSequentialColorLevels": { - "$Collection": true, - "@Common.Experimental": true, - "@Core.Description": "All values in this collection should be assigned to levels of the same color." - }, - "EmphasizedValues": { - "$Collection": true, - "@Common.Experimental": true, - "@Core.Description": "All values in this collection should be emphasized." - }, - "EmphasisLabels": { - "$Type": "UI.EmphasisLabelType", - "$Nullable": true, - "@Common.Experimental": true, - "@Core.Description": "Assign a label to values with an emphasized representation. This is required, if more than one emphasized value has been specified." - } - }, - "ChartMeasureAttributeType": { - "$Kind": "ComplexType", - "@Core.Description": "Exactly one of `Measure` and `DynamicMeasure` must be present", - "Measure": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Common.PrimitivePropertyPath": true - }, - "DynamicMeasure": { - "$Type": "Edm.AnnotationPath", - "$Nullable": true, - "@Core.Description": "Dynamic property introduced by an annotation and used as a measure in a chart", - "@Core.LongDescription": "If the annotation referenced by an annotation path does not apply to the same collection of entities\n as the one being visualized according to the `UI.Chart` annotation, the annotation path MUST be silently ignored.", - "@Validation.AllowedTerms": [ - "Analytics.AggregatedProperty", - "Aggregation.CustomAggregate" - ] - }, - "Role": { - "$Type": "UI.ChartMeasureRoleType", - "$Nullable": true - }, - "DataPoint": { - "$Type": "Edm.AnnotationPath", - "$Nullable": true, - "@Core.Description": "Annotation path MUST end in @UI.DataPoint and the data point's Value MUST be the same property as in Measure", - "@Validation.AllowedTerms": [ - "UI.DataPoint" - ] - }, - "UseSequentialColorLevels": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Common.Experimental": true, - "@Core.Description": "All measures for which this setting is true should be assigned to levels of the same color." - } - }, - "ChartDimensionRoleType": { - "$Kind": "EnumType", - "Category": 0, - "Series": 1, - "Category2": 2 - }, - "ChartMeasureRoleType": { - "$Kind": "EnumType", - "Axis1": 0, - "Axis2": 1, - "Axis3": 2 - }, - "EmphasisLabelType": { - "$Kind": "ComplexType", - "@Common.Experimental": true, - "@Core.Description": "Assigns a label to the set of emphasized values and optionally also for non-emphasized values. This information can be used for semantic coloring.", - "EmphasizedValuesLabel": {}, - "NonEmphasizedValuesLabel": { - "$Nullable": true - } - }, - "ValueCriticality": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.ValueCriticalityType", - "$AppliesTo": [ - "Property", - "TypeDefinition" - ], - "@Common.Experimental": true, - "@Core.Description": "Assign criticalities to primitive values. This information can be used for semantic coloring." - }, - "ValueCriticalityType": { - "$Kind": "ComplexType", - "@Common.Experimental": true, - "@Core.Description": "Assigns a fixed criticality to a primitive value. This information can be used for semantic coloring.", - "Value": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "MUST be a fixed value of primitive type" - }, - "Criticality": { - "$Type": "UI.CriticalityType", - "$Nullable": true - } - }, - "CriticalityLabels": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.CriticalityLabelType", - "$AppliesTo": [ - "Property", - "EntityType" - ], - "@Common.Experimental": true, - "@Core.Description": "\n Assign labels to criticalities. This information can be used for semantic coloring.\n When applied to a property, a label for a criticality must be provided, if more than one value of the annotated property has been assigned to the same criticality.\n There must be no more than one label per criticality.\n " - }, - "CriticalityLabelType": { - "$Kind": "ComplexType", - "@Common.Experimental": true, - "@Core.Description": "Assigns a label to a criticality. This information can be used for semantic coloring.", - "Criticality": { - "$Type": "UI.CriticalityType" - }, - "Label": { - "@Core.IsLanguageDependent": true, - "@Core.Description": "Criticality label" - } - }, - "SelectionFields": { - "$Kind": "Term", - "$Collection": true, - "$Type": "Edm.PropertyPath", - "$AppliesTo": [ - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "Properties that might be relevant for filtering a collection of entities of this type" - }, - "Facets": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.Facet", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Collection of facets" - }, - "HeaderFacets": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.Facet", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Facets for additional object header information" - }, - "QuickViewFacets": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.Facet", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Facets that may be used for a quick overview of the object" - }, - "QuickCreateFacets": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.Facet", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Facets that may be used for a (quick) create of the object" - }, - "FilterFacets": { - "$Kind": "Term", - "$Collection": true, - "$Type": "UI.ReferenceFacet", - "$AppliesTo": [ - "EntityType" - ], - "@Core.Description": "Facets that reference UI.FieldGroup annotations to group filterable fields" - }, - "Facet": { - "$Kind": "ComplexType", - "$Abstract": true, - "@Core.Description": "Abstract base type for facets", - "@Validation.ApplicableTerms": [ - "UI.Hidden", - "UI.PartOfPreview" - ], - "Label": { - "$Nullable": true, - "@Core.IsLanguageDependent": true, - "@Core.Description": "Facet label" - }, - "ID": { - "$Nullable": true, - "@Core.Description": "Unique identifier of a facet. ID should be stable, as long as the perceived semantics of the facet is unchanged." - } - }, - "CollectionFacet": { - "$Kind": "ComplexType", - "$BaseType": "UI.Facet", - "@Core.Description": "Collection of facets", - "Facets": { - "$Collection": true, - "$Type": "UI.Facet", - "@Core.Description": "Nested facets. An empty collection may be used as a placeholder for content added via extension points." - } - }, - "ReferenceFacet": { - "$Kind": "ComplexType", - "$BaseType": "UI.Facet", - "@Core.Description": "Facet that refers to a thing perspective, e.g. LineItem", - "Target": { - "$Type": "Edm.AnnotationPath", - "@Core.Description": "Referenced information: Communication.Contact, Communication.Address, or a term that is tagged with UI.ThingPerspective, e.g. UI.StatusInfo, UI.LineItem, UI.Identification, UI.FieldGroup, UI.Badge", - "@Validation.AllowedTerms": [ - "Communication.Address", - "Communication.Contact", - "UI.Badge", - "UI.Chart", - "UI.Contacts", - "UI.DataPoint", - "UI.FieldGroup", - "UI.GeoLocation", - "UI.GeoLocations", - "UI.HeaderInfo", - "UI.Identification", - "UI.KPI", - "UI.LineItem", - "UI.MediaResource", - "UI.PresentationVariant", - "UI.SelectionFields", - "UI.SelectionPresentationVariant", - "UI.StatusInfo" - ] - } - }, - "ReferenceURLFacet": { - "$Kind": "ComplexType", - "$BaseType": "UI.Facet", - "@Core.Description": "Facet that refers to a URL", - "Url": { - "@Core.IsURL": true, - "@Core.Description": "URL of referenced information" - }, - "UrlContentType": { - "$Nullable": true, - "@Core.IsMediaType": true, - "@Core.Description": "Media type of referenced information" - } - }, - "SelectionPresentationVariant": { - "$Kind": "Term", - "$Type": "UI.SelectionPresentationVariantType", - "$AppliesTo": [ - "EntitySet", - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "A SelectionPresentationVariant bundles a Selection Variant and a Presentation Variant" - }, - "SelectionPresentationVariantType": { - "$Kind": "ComplexType", - "ID": { - "$Nullable": true, - "@Core.Description": "Optional identifier to reference this variant from an external context" - }, - "Text": { - "$Nullable": true, - "@Core.IsLanguageDependent": true, - "@Core.Description": "Name of the bundling variant" - }, - "SelectionVariant": { - "$Type": "UI.SelectionVariantType", - "@Core.Description": "Selection variant, either specified inline or referencing another annotation via Path" - }, - "PresentationVariant": { - "$Type": "UI.PresentationVariantType", - "@Core.Description": "Presentation variant, either specified inline or referencing another annotation via Path" - } - }, - "PresentationVariant": { - "$Kind": "Term", - "$Type": "UI.PresentationVariantType", - "$AppliesTo": [ - "EntitySet", - "EntityType" - ], - "@UI.ThingPerspective": true, - "@Core.Description": "Defines how the result of a queried collection of entities is shaped and how this result is displayed" - }, - "PresentationVariantType": { - "$Kind": "ComplexType", - "ID": { - "$Nullable": true, - "@Core.Description": "Optional identifier to reference this variant from an external context" - }, - "Text": { - "$Nullable": true, - "@Core.IsLanguageDependent": true, - "@Core.Description": "Name of the presentation variant" - }, - "MaxItems": { - "$Type": "Edm.Int32", - "$Nullable": true, - "@Core.Description": "Maximum number of items that should be included in the result" - }, - "SortOrder": { - "$Collection": true, - "$Type": "Common.SortOrderType", - "@Core.Description": "Collection can be provided inline or as a reference to a Common.SortOrder annotation via Path" - }, - "GroupBy": { - "$Collection": true, - "$Type": "Edm.PropertyPath", - "@Core.Description": "Sequence of groupable properties p1, p2, ... defining how the result is composed of instances representing groups,\n one for each combination of value properties in the queried collection. The sequence specifies a certain level\n of aggregation for the queried collection, and every group instance will provide aggregated values for\n properties that are aggregatable. Moreover, the series of sub-sequences (p1), (p1, p2), ... forms a leveled hierarchy,\n which may become relevant in combination with `InitialExpansionLevel`." - }, - "TotalBy": { - "$Collection": true, - "$Type": "Edm.PropertyPath", - "@Core.Description": "Sub-sequence q1, q2, ... of properties p1, p2, ... specified in GroupBy. With this, additional levels of aggregation\n are requested in addition to the most granular level defined by GroupBy: Every element in the series of sub-sequences\n (q1), (q1, q2), ... introduces an additional aggregation level included in the result." - }, - "Total": { - "$Collection": true, - "$Type": "Edm.PropertyPath", - "@Common.PrimitivePropertyPath": true, - "@Core.Description": "Aggregatable properties for which aggregated values should be provided for the additional aggregation levels specified in TotalBy." - }, - "DynamicTotal": { - "$Collection": true, - "$Type": "Edm.AnnotationPath", - "@Core.Description": "Dynamic properties introduced by annotations for which aggregated values should be provided for the additional aggregation levels specified in TotalBy", - "@Core.LongDescription": "If the annotation referenced by an annotation path does not apply to the same collection of entities\n as the one being presented according to the `UI.PresentationVariant` annotation, the annotation path MUST be silently ignored.", - "@Validation.AllowedTerms": [ - "Analytics.AggregatedProperty", - "Aggregation.CustomAggregate" - ] - }, - "IncludeGrandTotal": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Result should include a grand total for the properties specified in Total" - }, - "InitialExpansionLevel": { - "$Type": "Edm.Int32", - "$DefaultValue": 1, - "@Core.Description": "Level up to which the hierarchy defined for the queried collection should be expanded initially.\n The hierarchy may be implicitly imposed by the sequence of the GroupBy, or by an explicit hierarchy annotation." - }, - "Visualizations": { - "$Collection": true, - "$Type": "Edm.AnnotationPath", - "@Core.Description": "Lists available visualization types. Currently supported types are `UI.LineItem`, `UI.Chart`, and `UI.DataPoint`.\n For each type, no more than a single annotation is meaningful. Multiple instances of the same visualization type\n shall be modeled with different presentation variants.\n A reference to `UI.Lineitem` should always be part of the collection (least common denominator for renderers).\n The first entry of the collection is the default visualization.\n ", - "@Validation.AllowedTerms": [ - "UI.Chart", - "UI.DataPoint", - "UI.LineItem" - ] - }, - "RequestAtLeast": { - "$Collection": true, - "$Type": "Edm.PropertyPath", - "@Core.Description": "Properties that should always be included in the result of the queried collection", - "@Core.LongDescription": "Properties in `RequestAtLeast` must occur either in the `$select` clause of an OData request\n or among the grouping properties in an `$apply=groupby((grouping properties),...)` clause of an\n aggregating OData request." - }, - "SelectionFields": { - "$Collection": true, - "$Type": "Edm.PropertyPath", - "@Common.Experimental": true, - "@Core.Description": "Properties that should be presented for filtering a collection of entities.\n Can be provided inline or as a reference to a `UI.SelectionFields` annotation via Path." - } - }, - "SelectionVariant": { - "$Kind": "Term", - "$Type": "UI.SelectionVariantType", - "$AppliesTo": [ - "EntitySet", - "EntityType" - ], - "@Core.Description": "A SelectionVariant denotes a combination of parameters and filters to query the annotated entity set" - }, - "SelectionVariantType": { - "$Kind": "ComplexType", - "ID": { - "$Nullable": true, - "@Core.Description": " May contain identifier to reference this instance from an external context" - }, - "Text": { - "$Nullable": true, - "@Core.IsLanguageDependent": true, - "@Core.Description": "Name of the selection variant" - }, - "Parameters": { - "$Collection": true, - "$Type": "UI.ParameterAbstract", - "@Core.Description": "Parameters of the selection variant" - }, - "FilterExpression": { - "$Nullable": true, - "@Core.Description": "Filter string for query part of URL, without `$filter=`" - }, - "SelectOptions": { - "$Collection": true, - "$Type": "UI.SelectOptionType", - "@Core.Description": "ABAP Select Options Pattern" - } - }, - "ParameterAbstract": { - "$Kind": "ComplexType", - "$Abstract": true, - "@Core.Description": "Key property of a parameter entity type" - }, - "Parameter": { - "$Kind": "ComplexType", - "$BaseType": "UI.ParameterAbstract", - "@Core.Description": "Single-valued parameter", - "PropertyName": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Path to a key property of a parameter entity type" - }, - "PropertyValue": { - "$Type": "Edm.PrimitiveType", - "@Core.Description": "Value for the key property" - } - }, - "IntervalParameter": { - "$Kind": "ComplexType", - "$BaseType": "UI.ParameterAbstract", - "@Core.Description": "Interval parameter formed with a 'from' and a 'to' property", - "PropertyNameFrom": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Path to the 'from' property of a parameter entity type" - }, - "PropertyValueFrom": { - "$Type": "Edm.PrimitiveType", - "@Core.Description": "Value for the 'from' property" - }, - "PropertyNameTo": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Path to the 'to' property of a parameter entity type" - }, - "PropertyValueTo": { - "$Type": "Edm.PrimitiveType", - "@Core.Description": "Value for the 'to' property" - } - }, - "SelectOptionType": { - "$Kind": "ComplexType", - "@Core.Description": "List of value ranges for a single property", - "@Core.LongDescription": "Exactly one of `PropertyName` and `DynamicPropertyName` must be present", - "PropertyName": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Common.PrimitivePropertyPath": true, - "@Core.Description": "Path to the property", - "@Core.Revisions": [ - { - "Kind": "Modified", - "Description": "Now nullable if `DynamicPropertyName` is present" - } - ] - }, - "DynamicPropertyName": { - "$Type": "Edm.AnnotationPath", - "$Nullable": true, - "@Core.Description": "Dynamic property introduced by annotations for which value ranges are specified", - "@Core.LongDescription": "If the annotation referenced by the annotation path does not apply to the same collection of entities\n as the one being filtered according to the `UI.SelectionVariant` annotation, this instance of `UI.SelectionVariant/SelectOptions` MUST be silently ignored.\n For an example, see the `UI.SelectionVariant` annotation in the [example](../examples/DynamicProperties-sample.xml).", - "@Validation.AllowedTerms": [ - "Analytics.AggregatedProperty", - "Aggregation.CustomAggregate" - ] - }, - "Ranges": { - "$Collection": true, - "$Type": "UI.SelectionRangeType", - "@Core.Description": "List of value ranges" - } - }, - "SelectionRangeType": { - "$Kind": "ComplexType", - "@Core.Description": "Value range. If the range option only requires a single value, the value must be in the property Low", - "Sign": { - "$Type": "UI.SelectionRangeSignType", - "@Core.Description": "Include or exclude values" - }, - "Option": { - "$Type": "UI.SelectionRangeOptionType", - "@Core.Description": "Comparison operator" - }, - "Low": { - "$Type": "Edm.PrimitiveType", - "@Core.Description": "Single value or lower interval boundary" - }, - "High": { - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "@Core.Description": "Upper interval boundary" - } - }, - "SelectionRangeSignType": { - "$Kind": "EnumType", - "I": 0, - "I@Core.Description": "Inclusive", - "E": 1, - "E@Core.Description": "Exclusive" - }, - "SelectionRangeOptionType": { - "$Kind": "EnumType", - "@Core.Description": "Comparison operator", - "EQ": 0, - "EQ@Core.Description": "Equal to", - "BT": 1, - "BT@Core.Description": "Between", - "CP": 2, - "CP@Core.Description": "Contains pattern", - "LE": 3, - "LE@Core.Description": "Less than or equal to", - "GE": 4, - "GE@Core.Description": "Greater than or equal to", - "NE": 5, - "NE@Core.Description": "Not equal to", - "NB": 6, - "NB@Core.Description": "Not between", - "NP": 7, - "NP@Core.Description": "Does not contain pattern", - "GT": 8, - "GT@Core.Description": "Greater than", - "LT": 9, - "LT@Core.Description": "Less than" - }, - "ThingPerspective": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Term" - ], - "@Core.Description": "The annotated term is a Thing Perspective" - }, - "IsSummary": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Record" - ], - "@Core.Description": "This Facet and all included Facets are the summary of the thing. At most one Facet of a thing can be tagged with this term", - "@Core.RequiresType": "UI.Facet" - }, - "PartOfPreview": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Record" - ], - "@Core.Description": "This record and all included structural elements are part of the Thing preview", - "@Core.LongDescription": "This term can be applied e.g. to UI.Facet and UI.DataField" - }, - "Map": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Record" - ], - "@Core.Description": "Target MUST reference a UI.GeoLocation, Communication.Address or a collection of these", - "@Core.RequiresType": "UI.ReferenceFacet" - }, - "Gallery": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Record" - ], - "@Core.Description": "Target MUST reference a UI.MediaResource", - "@Core.RequiresType": "UI.ReferenceFacet" - }, - "IsImageURL": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property", - "Term" - ], - "@Core.Description": "Properties and terms annotated with this term MUST contain a valid URL referencing an resource with a MIME type image", - "@Core.RequiresType": "Edm.String", - "@Validation.ApplicableTerms": [ - "Common.IsNaturalPerson" - ] - }, - "IsImage": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property", - "EntityType" - ], - "@Common.Experimental": true, - "@Core.Description": "Properties annotated with this term MUST be a stream property annotated with a MIME type image. Entity types annotated with this term MUST be a media entity type annotated with a MIME type image.", - "@Core.RequiresType": "Edm.Stream", - "@Validation.ApplicableTerms": [ - "Common.IsNaturalPerson" - ] - }, - "MultiLineText": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property", - "PropertyValue", - "Parameter" - ], - "@Core.Description": "Properties and parameters annotated with this annotation should be rendered as multi-line text (e.g. text area)", - "@Core.RequiresType": "Edm.String" - }, - "Placeholder": { - "$Kind": "Term", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Core.Description": "A short, human-readable text that gives a hint or an example to help the user with data entry", - "@Core.IsLanguageDependent": true - }, - "TextArrangement": { - "$Kind": "Term", - "$Type": "UI.TextArrangementType", - "$AppliesTo": [ - "Annotation", - "EntityType" - ], - "@Core.Description": "Describes the arrangement of a code or ID value and its text", - "@Core.LongDescription": "If used for a single property the Common.Text annotation is annotated" - }, - "TextArrangementType": { - "$Kind": "EnumType", - "TextFirst": 0, - "TextFirst@Core.Description": "Text is first, followed by the code/ID (e.g. in parentheses)", - "TextLast": 1, - "TextLast@Core.Description": "Code/ID is first, followed by the text (e.g. separated by a dash)", - "TextSeparate": 2, - "TextSeparate@Core.Description": "Code/ID and text are represented separately (code/ID will be shown and text can be visualized in a separate place)", - "TextOnly": 3, - "TextOnly@Core.Description": "Only text is represented, code/ID is hidden (e.g. for UUIDs)" - }, - "Importance": { - "$Kind": "Term", - "$Type": "UI.ImportanceType", - "$AppliesTo": [ - "Annotation", - "Record" - ], - "@Core.Description": "Expresses the importance of e.g. a DataField or an annotation" - }, - "ImportanceType": { - "$Kind": "EnumType", - "High": 0, - "High@Core.Description": "High importance", - "Medium": 1, - "Medium@Core.Description": "Medium importance", - "Low": 2, - "Low@Core.Description": "Low importance" - }, - "Hidden": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property", - "NavigationProperty", - "Record", - "Parameter" - ], - "@Core.Description": "Properties or facets (see UI.Facet) annotated with this term will not be rendered if the annotation evaluates to true.", - "@Core.LongDescription": "Hidden properties usually carry technical information that is used for application control and is of no direct interest to end users.\n The annotation value may be an expression to dynamically hide or render the annotated feature. If a navigation property is annotated with `Hidden` true, all subsequent parts are hidden - independent of their own potential `Hidden` annotations." - }, - "IsCopyAction": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Record" - ], - "@Common.Experimental": true, - "@Core.RequiresType": "UI.DataFieldForAction", - "@Core.Description": "The annotated [`DataFieldForAction`](#DataFieldForAction) record references an action that deep-copies an instance of the annotated entity type", - "@Core.LongDescription": "The referenced action MUST be bound to the annotated entity type and MUST create a new instance of the same entity type as a deep copy of the bound instance.\nUpon successful completion, the response MUST contain a `Location` header that contains the edit URL or read URL of the created entity,\nand the response MUST be either `201 Created` and a representation of the created entity,\nor `204 No Content` if the request included a `Prefer` header with a value of `return=minimal` and did not include the system query options `$select` and `$expand`." - }, - "CreateHidden": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$AppliesTo": [ - "EntitySet", - "EntityType" - ], - "@Core.Description": "EntitySets annotated with this term can control the visibility of the Create operation dynamically", - "@Core.LongDescription": "The annotation value should be a path to another property from a related entity." - }, - "UpdateHidden": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$AppliesTo": [ - "EntitySet", - "EntityType" - ], - "@Core.Description": "EntitySets annotated with this term can control the visibility of the Edit/Save operation dynamically", - "@Core.LongDescription": "The annotation value should be a path to another property from the same or a related entity." - }, - "DeleteHidden": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$AppliesTo": [ - "EntitySet", - "EntityType" - ], - "@Core.Description": "EntitySets annotated with this term can control the visibility of the Delete operation dynamically", - "@Core.LongDescription": "The annotation value should be a path to another property from the same or a related entity." - }, - "HiddenFilter": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property", - "NavigationProperty" - ], - "@Core.Description": "Properties annotated with this term will not be rendered as filter criteria if the annotation evaluates to true.", - "@Core.LongDescription": "Properties annotated with `HiddenFilter` are intended as parts of a `$filter` expression that cannot be directly influenced by end users.\n The properties will be rendered in all other places, e.g. table columns or form fields. This is in contrast to properties annotated with [Hidden](#Hidden) that are not rendered at all.\n If a navigation property is annotated with `HiddenFilter` true, all subsequent parts are hidden in filter - independent of their own potential `HiddenFilter` annotations." - }, - "DataFieldDefault": { - "$Kind": "Term", - "$Type": "UI.DataFieldAbstract", - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "Default representation of a property as a datafield, e.g. when the property is added as a table column or form field via personalization", - "@Core.LongDescription": "Only concrete subtypes of [DataFieldAbstract](#DataFieldAbstract) can be used for a DataFieldDefault. For type [DataField](#DataField) and its subtypes the annotation target SHOULD be the same property that is referenced via a path expression in the `Value` of the datafield." - }, - "DataFieldAbstract": { - "$Kind": "ComplexType", - "$Abstract": true, - "@Core.Description": "Elementary building block that represents a piece of data and/or allows triggering an action", - "@Core.LongDescription": "By using the applicable terms UI.Hidden, UI.Importance or HTML5.CssDefaults, the visibility, the importance and\n and the default css settings (as the width) of the data field can be influenced. ", - "@Validation.ApplicableTerms": [ - "UI.Hidden", - "UI.Importance", - "UI.PartOfPreview", - "HTML5.CssDefaults" - ], - "Label": { - "$Nullable": true, - "@Core.Description": "A short, human-readable text suitable for labels and captions in UIs", - "@Core.IsLanguageDependent": true - }, - "Criticality": { - "$Type": "UI.CriticalityType", - "$Nullable": true, - "@Core.Description": "Criticality of the data field value" - }, - "CriticalityRepresentation": { - "$Type": "UI.CriticalityRepresentationType", - "$Nullable": true, - "@Core.Description": "Decides if criticality is visualized in addition by means of an icon" - }, - "IconUrl": { - "$Nullable": true, - "@Core.Description": "Optional icon", - "@Core.IsURL": true - } - }, - "CriticalityRepresentationType": { - "$Kind": "EnumType", - "WithIcon": 0, - "WithIcon@Core.Description": "Criticality is represented with an icon", - "WithoutIcon": 1, - "WithoutIcon@Core.Description": "Criticality is represented without icon, e.g. only via text color", - "OnlyIcon": 2, - "OnlyIcon@Common.Experimental": true, - "OnlyIcon@Core.Description": "Criticality is represented only by using an icon" - }, - "DataFieldForAnnotation": { - "$Kind": "ComplexType", - "$BaseType": "UI.DataFieldAbstract", - "@Core.Description": "A structured piece of data described by an annotation", - "Target": { - "$Type": "Edm.AnnotationPath", - "@Core.Description": "Target MUST reference an annotation of terms Communication.Contact, Communication.Address, UI.DataPoint, UI.Chart, UI.FieldGroup, or UI.ConnectedFields", - "@Validation.AllowedTerms": [ - "Communication.Address", - "Communication.Contact", - "UI.Chart", - "UI.ConnectedFields", - "UI.DataPoint", - "UI.FieldGroup" - ] - } - }, - "DataFieldForActionAbstract": { - "$Kind": "ComplexType", - "$Abstract": true, - "$BaseType": "UI.DataFieldAbstract", - "@Core.Description": "Triggers an action", - "Inline": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Action should be placed close to (or even inside) the visualized term" - }, - "Determining": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Determines whether the action completes a process step (e.g. approve, reject)." - } - }, - "DataFieldForAction": { - "$Kind": "ComplexType", - "$BaseType": "UI.DataFieldForActionAbstract", - "@Core.Description": "Triggers an OData action", - "@Core.LongDescription": "The action is NOT tied to a data value (in contrast to [DataFieldWithAction](#DataFieldWithAction)).", - "Action": { - "$Type": "Common.ActionOverload", - "@Core.Description": "Qualified name of an Action, Function, ActionImport or FunctionImport in scope" - }, - "InvocationGrouping": { - "$Type": "UI.OperationGroupingType", - "$Nullable": true, - "@Core.Description": "Expresses how invocations of this action on multiple instances should be grouped" - } - }, - "OperationGroupingType": { - "$Kind": "EnumType", - "Isolated": 0, - "Isolated@Core.Description": "Invoke each action in isolation from other actions", - "ChangeSet": 1, - "ChangeSet@Core.Description": "Group all actions into a single change set" - }, - "DataFieldForIntentBasedNavigation": { - "$Kind": "ComplexType", - "$BaseType": "UI.DataFieldForActionAbstract", - "@Core.Description": "Triggers intent-based UI navigation", - "@Core.LongDescription": "The navigation intent is is expressed as a Semantic Object and optionally an Action on that object.\n\nIt is NOT tied to a data value (in contrast to [DataFieldWithIntentBasedNavigation](#DataFieldWithIntentBasedNavigation)).\"", - "SemanticObject": { - "@Core.Description": "Name of the Semantic Object" - }, - "Action": { - "$Nullable": true, - "@Core.Description": "Name of the Action on the Semantic Object. If not specified, let user choose which of the available actions to trigger." - }, - "NavigationAvailable": { - "$Type": "Edm.Boolean", - "$DefaultValue": true, - "@Core.Description": "The navigation intent is for that user with the selected context and parameters available" - }, - "RequiresContext": { - "$Type": "Edm.Boolean", - "$DefaultValue": false, - "@Core.Description": "Determines whether a context needs to be passed to the target of this navigation." - }, - "Mapping": { - "$Collection": true, - "$Type": "Common.SemanticObjectMappingType", - "@Core.Description": "Maps properties of the annotated entity type to properties of the Semantic Object" - } - }, - "DataFieldForActionGroup": { - "$Kind": "ComplexType", - "$BaseType": "UI.DataFieldAbstract", - "@Common.Experimental": true, - "@Core.Description": "Collection of OData actions and intent based navigations", - "Actions": { - "$Collection": true, - "$Type": "UI.DataFieldForActionAbstract", - "@Core.Description": "Collection of data fields that refer to actions or intent based navigations" - } - }, - "DataField": { - "$Kind": "ComplexType", - "$BaseType": "UI.DataFieldAbstract", - "@Core.Description": "A piece of data", - "Value": { - "$Type": "Edm.Untyped", - "@Core.Description": "The data field's value", - "@Validation.DerivedTypeConstraint": [ - "Edm.PrimitiveType", - "Collection(Edm.Binary)", - "Collection(Edm.Boolean)", - "Collection(Edm.Byte)", - "Collection(Edm.Date)", - "Collection(Edm.DateTimeOffset)", - "Collection(Edm.Decimal)", - "Collection(Edm.Double)", - "Collection(Edm.Duration)", - "Collection(Edm.Guid)", - "Collection(Edm.Int16)", - "Collection(Edm.Int32)", - "Collection(Edm.Int64)", - "Collection(Edm.SByte)", - "Collection(Edm.Single)", - "Collection(Edm.String)", - "Collection(Edm.TimeOfDay)" - ], - "@Core.IsLanguageDependent": true - } - }, - "DataFieldWithAction": { - "$Kind": "ComplexType", - "$BaseType": "UI.DataField", - "@Core.Description": "A piece of data that allows triggering an OData action", - "@Core.LongDescription": "The action is tied to a data value which should be rendered as a hyperlink. This is in contrast to [DataFieldForAction](#DataFieldForAction)) which is not tied to a specific data value.", - "Value": { - "$Type": "Edm.PrimitiveType" - }, - "Action": { - "$Type": "Common.QualifiedName", - "@Core.Description": "Qualified name of an Action, Function, ActionImport or FunctionImport in scope" - } - }, - "DataFieldWithIntentBasedNavigation": { - "$Kind": "ComplexType", - "$BaseType": "UI.DataField", - "@Core.Description": "A piece of data that allows triggering intent-based UI navigation", - "@Core.LongDescription": "The navigation intent is is expressed as a Semantic Object and optionally an Action on that object.\n\nIt is tied to a data value which should be rendered as a hyperlink.\nThis is in contrast to [DataFieldForIntentBasedNavigation](#DataFieldForIntentBasedNavigation) which is not tied to a specific data value.", - "Value": { - "$Type": "Edm.PrimitiveType" - }, - "SemanticObject": { - "@Core.Description": "Name of the Semantic Object" - }, - "Action": { - "$Nullable": true, - "@Core.Description": "Name of the Action on the Semantic Object. If not specified, let user choose which of the available actions to trigger." - }, - "Mapping": { - "$Collection": true, - "$Type": "Common.SemanticObjectMappingType", - "@Core.Description": "Maps properties of the annotated entity type to properties of the Semantic Object" - } - }, - "DataFieldWithNavigationPath": { - "$Kind": "ComplexType", - "$BaseType": "UI.DataField", - "@Core.Description": "A piece of data that allows navigating to related data", - "@Core.LongDescription": "It should be rendered as a hyperlink", - "Value": { - "$Type": "Edm.PrimitiveType" - }, - "Target": { - "$Type": "Edm.NavigationPropertyPath", - "@Core.Description": "Contains either a navigation property or a term cast, where term is of type Edm.EntityType or a concrete entity type or a collection of these types" - } - }, - "DataFieldWithUrl": { - "$Kind": "ComplexType", - "$BaseType": "UI.DataField", - "@Core.Description": "A piece of data that allows navigating to other information on the Web", - "@Core.LongDescription": "It should be rendered as a hyperlink", - "Value": { - "$Type": "Edm.PrimitiveType" - }, - "Url": { - "@Core.Description": "Target of the hyperlink", - "@Core.IsURL": true - }, - "UrlContentType": { - "$Nullable": true, - "@Core.Description": "Media type of the hyperlink target, e.g. `video/mp4`", - "@Core.IsMediaType": true - } - }, - "DataFieldWithActionGroup": { - "$Kind": "ComplexType", - "$BaseType": "UI.DataField", - "@Common.Experimental": true, - "@Core.Description": "Collection of OData actions and intent based navigations", - "Value": { - "$Type": "Edm.PrimitiveType" - }, - "Actions": { - "$Collection": true, - "$Type": "UI.DataField", - "@Core.Description": "Collection of data fields that are either [DataFieldWithAction](#DataFieldWithAction), [DataFieldWithIntentBasedNavigation](#DataFieldWithIntentBasedNavigation), [DataFieldWithNavigationPath](#DataFieldWithNavigationPath), or [DataFieldWithUrl](#DataFieldWithUrl)" - } - }, - "Criticality": { - "$Kind": "Term", - "$Type": "UI.CriticalityType", - "$AppliesTo": [ - "Annotation" - ], - "@Core.Description": "Service-calculated criticality, alternative to UI.CriticalityCalculation" - }, - "CriticalityCalculation": { - "$Kind": "Term", - "$Type": "UI.CriticalityCalculationType", - "$AppliesTo": [ - "Annotation" - ], - "@Core.Description": "Parameters for client-calculated criticality, alternative to UI.Criticality" - }, - "Emphasized": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Record" - ], - "@Common.Experimental": true, - "@Core.Description": "Highlight something that is of special interest", - "@Core.LongDescription": "The usage of a property or operation should be highlighted as it's of special interest for the end user" - }, - "OrderBy": { - "$Kind": "Term", - "$Type": "Edm.PropertyPath", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Core.Description": "Sort by the referenced property instead of by the annotated property", - "@Core.LongDescription": "Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode." - }, - "ParameterDefaultValue": { - "$Kind": "Term", - "$Type": "Edm.PrimitiveType", - "$Nullable": true, - "$AppliesTo": [ - "Parameter" - ], - "@Core.Description": "Define default values for action parameters", - "@Core.LongDescription": "For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results.\n Whereas for bound actions the bound entity and its properties and associated properties can be used as default values" - }, - "RecommendationState": { - "$Kind": "Term", - "$Type": "UI.RecommendationStateType", - "@Core.Description": "Indicates whether a field contains or has a recommended value", - "@Core.LongDescription": "Intelligent systems can help users by recommending input the user may \"prefer\"." - }, - "RecommendationStateType": { - "$Kind": "TypeDefinition", - "$UnderlyingType": "Edm.Byte", - "@Core.Description": "Indicates whether a field contains or has a recommended value", - "@Core.LongDescription": "Editable fields for which a recommendation has been pre-filled or that have recommendations that differ from existing human input need to be highlighted.", - "@Validation.AllowedValues": [ - { - "Value": 0, - "@Core.Description": "regular - with human or default input, no recommendation" - }, - { - "Value": 1, - "@Core.Description": "highlighted - without human input and with recommendation" - }, - { - "Value": 2, - "@Core.Description": "warning - with human or default input and with recommendation" - } - ] - }, - "RecommendationList": { - "$Kind": "Term", - "$Type": "UI.RecommendationListType", - "$AppliesTo": [ - "Property", - "Parameter" - ], - "@Core.Description": "Specifies how to get a list of recommended values for a property or parameter", - "@Core.LongDescription": "Intelligent systems can help users by recommending input the user may \"prefer\"." - }, - "RecommendationListType": { - "$Kind": "ComplexType", - "@Core.Description": "Reference to a recommendation list", - "@Core.LongDescription": "A recommendation consists of one or more values for editable fields plus a rank between 0.0 and 9.9, with 9.9 being the best recommendation.", - "CollectionPath": { - "@Core.Description": "Resource path of a collection of recommended values" - }, - "RankProperty": { - "@Core.Description": "Name of the property within the collection of recommended values that describes the rank of the recommendation" - }, - "Binding": { - "$Collection": true, - "$Type": "UI.RecommendationBinding", - "@Core.Description": "List of pairs of a local property and recommended value property" - } - }, - "RecommendationBinding": { - "$Kind": "ComplexType", - "LocalDataProperty": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Path to editable property for which recommended values exist" - }, - "ValueListProperty": { - "@Core.Description": "Path to property in the collection of recommended values. Format is identical to PropertyPath annotations." - } - }, - "ExcludeFromNavigationContext": { - "$Kind": "Term", - "$Type": "Core.Tag", - "$DefaultValue": true, - "$AppliesTo": [ - "Property" - ], - "@Core.Description": "The contents of this property must not be propagated to the app-to-app navigation context" - }, - "DoNotCheckScaleOfMeasuredQuantity": { - "$Kind": "Term", - "$Type": "Edm.Boolean", - "$AppliesTo": [ - "Property" - ], - "@Common.Experimental": true, - "@Core.Description": "Do not check the number of fractional digits of the annotated measured quantity", - "@Core.LongDescription": "The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.\n\nThis switches off the validation of user input with respect to decimals." - }, - "LeadingEntitySet": { - "$Kind": "Term", - "$AppliesTo": [ - "EntityContainer" - ], - "@Common.Experimental": true, - "@Core.Description": "The referenced entity set is the preferred starting point for UIs using this service" - } + "@Core.IsLanguageDependent": true + } + }, + "DataFieldWithAction": { + "$Kind": "ComplexType", + "$BaseType": "UI.DataField", + "@Core.Description": "A piece of data that allows triggering an OData action", + "@Core.LongDescription": "The action is tied to a data value which should be rendered as a hyperlink. This is in contrast to [DataFieldForAction](#DataFieldForAction)) which is not tied to a specific data value.", + "Value": { "$Type": "Edm.PrimitiveType" }, + "Action": { + "$Type": "Common.QualifiedName", + "@Core.Description": "Qualified name of an Action, Function, ActionImport or FunctionImport in scope" + } + }, + "DataFieldWithIntentBasedNavigation": { + "$Kind": "ComplexType", + "$BaseType": "UI.DataField", + "@Core.Description": "A piece of data that allows triggering intent-based UI navigation", + "@Core.LongDescription": "The navigation intent is is expressed as a Semantic Object and optionally an Action on that object.\n\nIt is tied to a data value which should be rendered as a hyperlink.\nThis is in contrast to [DataFieldForIntentBasedNavigation](#DataFieldForIntentBasedNavigation) which is not tied to a specific data value.", + "Value": { "$Type": "Edm.PrimitiveType" }, + "SemanticObject": { "@Core.Description": "Name of the Semantic Object" }, + "Action": { + "$Nullable": true, + "@Core.Description": "Name of the Action on the Semantic Object. If not specified, let user choose which of the available actions to trigger." + }, + "Mapping": { + "$Collection": true, + "$Type": "Common.SemanticObjectMappingType", + "@Core.Description": "Maps properties of the annotated entity type to properties of the Semantic Object" + } + }, + "DataFieldWithNavigationPath": { + "$Kind": "ComplexType", + "$BaseType": "UI.DataField", + "@Core.Description": "A piece of data that allows navigating to related data", + "@Core.LongDescription": "It should be rendered as a hyperlink", + "Value": { "$Type": "Edm.PrimitiveType" }, + "Target": { + "$Type": "Edm.NavigationPropertyPath", + "@Core.Description": "Contains either a navigation property or a term cast, where term is of type Edm.EntityType or a concrete entity type or a collection of these types" + } + }, + "DataFieldWithUrl": { + "$Kind": "ComplexType", + "$BaseType": "UI.DataField", + "@Core.Description": "A piece of data that allows navigating to other information on the Web", + "@Core.LongDescription": "It should be rendered as a hyperlink", + "Value": { "$Type": "Edm.PrimitiveType" }, + "Url": { "@Core.Description": "Target of the hyperlink", "@Core.IsURL": true }, + "UrlContentType": { + "$Nullable": true, + "@Core.Description": "Media type of the hyperlink target, e.g. `video/mp4`", + "@Core.IsMediaType": true + } + }, + "DataFieldWithActionGroup": { + "$Kind": "ComplexType", + "$BaseType": "UI.DataField", + "@Common.Experimental": true, + "@Core.Description": "Collection of OData actions and intent based navigations", + "Value": { "$Type": "Edm.PrimitiveType" }, + "Actions": { + "$Collection": true, + "$Type": "UI.DataField", + "@Core.Description": "Collection of data fields that are either [DataFieldWithAction](#DataFieldWithAction), [DataFieldWithIntentBasedNavigation](#DataFieldWithIntentBasedNavigation), [DataFieldWithNavigationPath](#DataFieldWithNavigationPath), or [DataFieldWithUrl](#DataFieldWithUrl)" + } + }, + "Criticality": { + "$Kind": "Term", + "$Type": "UI.CriticalityType", + "$AppliesTo": ["Annotation"], + "@Core.Description": "Service-calculated criticality, alternative to UI.CriticalityCalculation" + }, + "CriticalityCalculation": { + "$Kind": "Term", + "$Type": "UI.CriticalityCalculationType", + "$AppliesTo": ["Annotation"], + "@Core.Description": "Parameters for client-calculated criticality, alternative to UI.Criticality" + }, + "Emphasized": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Record"], + "@Common.Experimental": true, + "@Core.Description": "Highlight something that is of special interest", + "@Core.LongDescription": "The usage of a property or operation should be highlighted as it's of special interest for the end user" + }, + "OrderBy": { + "$Kind": "Term", + "$Type": "Edm.PropertyPath", + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Core.Description": "Sort by the referenced property instead of by the annotated property", + "@Core.LongDescription": "Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode." + }, + "ParameterDefaultValue": { + "$Kind": "Term", + "$Type": "Edm.PrimitiveType", + "$Nullable": true, + "$AppliesTo": ["Parameter"], + "@Core.Description": "Define default values for action parameters", + "@Core.LongDescription": "For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results.\n Whereas for bound actions the bound entity and its properties and associated properties can be used as default values" + }, + "RecommendationState": { + "$Kind": "Term", + "$Type": "UI.RecommendationStateType", + "@Core.Description": "Indicates whether a field contains or has a recommended value", + "@Core.LongDescription": "Intelligent systems can help users by recommending input the user may \"prefer\"." + }, + "RecommendationStateType": { + "$Kind": "TypeDefinition", + "$UnderlyingType": "Edm.Byte", + "@Core.Description": "Indicates whether a field contains or has a recommended value", + "@Core.LongDescription": "Editable fields for which a recommendation has been pre-filled or that have recommendations that differ from existing human input need to be highlighted.", + "@Validation.AllowedValues": [ + { "Value": 0, "@Core.Description": "regular - with human or default input, no recommendation" }, + { "Value": 1, "@Core.Description": "highlighted - without human input and with recommendation" }, + { "Value": 2, "@Core.Description": "warning - with human or default input and with recommendation" } + ] + }, + "RecommendationList": { + "$Kind": "Term", + "$Type": "UI.RecommendationListType", + "$AppliesTo": ["Property", "Parameter"], + "@Core.Description": "Specifies how to get a list of recommended values for a property or parameter", + "@Core.LongDescription": "Intelligent systems can help users by recommending input the user may \"prefer\"." + }, + "RecommendationListType": { + "$Kind": "ComplexType", + "@Core.Description": "Reference to a recommendation list", + "@Core.LongDescription": "A recommendation consists of one or more values for editable fields plus a rank between 0.0 and 9.9, with 9.9 being the best recommendation.", + "CollectionPath": { "@Core.Description": "Resource path of a collection of recommended values" }, + "RankProperty": { + "@Core.Description": "Name of the property within the collection of recommended values that describes the rank of the recommendation" + }, + "Binding": { + "$Collection": true, + "$Type": "UI.RecommendationBinding", + "@Core.Description": "List of pairs of a local property and recommended value property" + } + }, + "RecommendationBinding": { + "$Kind": "ComplexType", + "LocalDataProperty": { + "$Type": "Edm.PropertyPath", + "@Core.Description": "Path to editable property for which recommended values exist" + }, + "ValueListProperty": { + "@Core.Description": "Path to property in the collection of recommended values. Format is identical to PropertyPath annotations." + } + }, + "ExcludeFromNavigationContext": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": ["Property"], + "@Core.Description": "The contents of this property must not be propagated to the app-to-app navigation context" + }, + "DoNotCheckScaleOfMeasuredQuantity": { + "$Kind": "Term", + "$Type": "Edm.Boolean", + "$AppliesTo": ["Property"], + "@Common.Experimental": true, + "@Core.Description": "Do not check the number of fractional digits of the annotated measured quantity", + "@Core.LongDescription": "The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.\n\nThis switches off the validation of user input with respect to decimals." + }, + "LeadingEntitySet": { + "$Kind": "Term", + "$AppliesTo": ["EntityContainer"], + "@Common.Experimental": true, + "@Core.Description": "The referenced entity set is the preferred starting point for UIs using this service" } -} \ No newline at end of file + } +}