From f35e620b1b7d2bc02bba11d57c8cf850ee2217fa Mon Sep 17 00:00:00 2001 From: Simon Heimler Date: Wed, 2 Apr 2025 09:44:38 +0200 Subject: [PATCH 1/3] Separate the deploy github action Signed-off-by: Simon Heimler --- .github/workflows/deploy.yml | 33 + .github/workflows/main.yml | 8 +- docs/annotations/aggregation.md | 56 ++ docs/annotations/analytics-details.md | 53 ++ docs/annotations/consumption.md | 131 ++++ docs/annotations/enduser-text.md | 118 ++++ docs/annotations/entity-relationship.md | 805 ++++++++++++++++++++++++ docs/annotations/object-model.md | 172 +++++ docs/annotations/objectmodel.md | 158 +++++ docs/annotations/odm.md | 50 ++ docs/annotations/personal-data.md | 95 +++ docs/annotations/semantics.md | 340 ++++++++++ 12 files changed, 2015 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 docs/annotations/aggregation.md create mode 100644 docs/annotations/analytics-details.md create mode 100644 docs/annotations/consumption.md create mode 100644 docs/annotations/enduser-text.md create mode 100644 docs/annotations/entity-relationship.md create mode 100644 docs/annotations/object-model.md create mode 100644 docs/annotations/objectmodel.md create mode 100644 docs/annotations/odm.md create mode 100644 docs/annotations/personal-data.md create mode 100644 docs/annotations/semantics.md diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..a1c63b56 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,33 @@ +name: Main + +on: + push: + branches: [main] + +jobs: + build: + name: Build + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - uses: actions/checkout@v4 + + - name: Installing Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: "npm" + + - name: install dependencies + run: npm ci + + - name: run build + run: npm build + + - name: deploy + if: github.ref_name == 'main' + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: build diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f990c3ab..f96c0d1d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,14 +1,14 @@ name: Main on: - push: - branches: [main] pull_request: branches: [main] + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: jobs: build: - name: Build + name: Test runs-on: ubuntu-latest permissions: contents: write @@ -19,7 +19,7 @@ jobs: - name: Installing Node.js uses: actions/setup-node@v4 with: - node-version: "20" + node-version: 22 cache: "npm" - name: install dependencies diff --git a/docs/annotations/aggregation.md b/docs/annotations/aggregation.md new file mode 100644 index 00000000..1d181d09 --- /dev/null +++ b/docs/annotations/aggregation.md @@ -0,0 +1,56 @@ +--- +title: "@Aggregation" +sidebar_position: "2" +description: "@Aggregation annotations." +--- + +> BETA This annotation is beta and should be reviewed for completion and correctness. + +## Introduction + +When purely relying on standard SQL, the developer/provider of a view needs to decide explicitly within the view definition, if the view should deliver aggregated results or single records. This definition cannot be overwritten by the consumer of the view. + +In some scenarios a more flexible behavior is desired, in a sense that the view definition doesn’t restrict its invocation either to delivering single records or aggregated results. This decision should be left to the consumer of the view who has explicit means in the CDS Query Language to express which behavior should be applied. This approach also allows avoiding the usage of the implicit aggregation behavior of the Calc Engine. + +To support those kinds of scenarios, the view developer + +- defines the “core” view definition (= the parts being described via a QL-Query) in a way that it returns single records (when the view is consumed via “aggregation-free” QL-statements) and +- adds dedicated annotations to the elements in the projection list that define which aggregation behavior should be applied when the consumer wants to get aggregated results from the view. + +## Schema Definitions + +* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). +* The interface is available as JSON Schema: [aggregation.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/aggregation.schema.json#). + +### Annotations Overview + +| Annotation | Scope | Description | +| -------- | ---- | ----------- | +| [@Aggregation.default](#aggregationdefault) | Type | The element shall per default be aggregated using the annotated SQL aggregate function.

The chosen value defines which aggregation semantics should be applied.
The aggregation types SUM, MAX, MIN, NOP are only allowed for elements with numeric type

> ℹ️ Note: There is an semantically equivalent annotation `@DefaultAggregation`, which is now obsolete.
> As consumers are not expected to interpret `@DefaultAggregation`, providers shall consistently adopt `@Aggregation.default` for interoperability. | + +### @Aggregation.default + +The element shall per default be aggregated using the annotated SQL aggregate function. + +The chosen value defines which aggregation semantics should be applied. +The aggregation types SUM, MAX, MIN, NOP are only allowed for elements with numeric type + +> ℹ️ Note: There is an semantically equivalent annotation `@DefaultAggregation`, which is now obsolete. +> As consumers are not expected to interpret `@DefaultAggregation`, providers shall consistently adopt `@Aggregation.default` for interoperability. + +**Type**: Object(#) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"NONE"`: Indicates that the element is not a measure.
    Usually these elements are used in filters and GROUP BY-statements. Should not be used explicit.
    It is the default for all elements which can be mapped to a dimension.

  • `"SUM"`: Correspond to the standard SQL aggregation type.

  • `"MIN"`: Correspond to the standard SQL aggregation type.

  • `"MAX"`: Correspond to the standard SQL aggregation type.

  • `"AVG"`: Correspond to the standard SQL aggregation type.

  • `"COUNT_DISTINCT"`: Counts the number of distinct values of the element specified with `@Aggregation.referenceElement`.

    > TODO: `@Aggregation.referenceElement` is not yet documented here.

  • `"NOP"`: Returns a value, if it is unique; otherwise it returns a special error value. It is the default in views with Analytics.dataCategory CUBE, FACT, and DIMENSION, if the data type of the element is numeric.

  • `"FORMULA"`: The element is a formula which has to be calculated after the operands have been determined by aggregation or calculation. It should never be aggregated. If the element is not a formula, then this value must not be used. It is only supported in analytical queries. Example: Margin : = Revenue / Cost. If in a report Margin should be shown per OrgUnit, then first the aggregates of Revenue and Cost have to be de-termined per OrgUnit and then the Margin has to be calculated per OrgUn-it. The Margin for the company is not the aggregate of the Margin per Or-gUnit but has to be calculated separately by Revenue for all OrgUnits divided by the Costs for all OrgUnits.

| + + +###### Example Values: + + +```js +{ + "#": "SUM" +} +``` + diff --git a/docs/annotations/analytics-details.md b/docs/annotations/analytics-details.md new file mode 100644 index 00000000..29617d30 --- /dev/null +++ b/docs/annotations/analytics-details.md @@ -0,0 +1,53 @@ +--- +title: "@AnalyticsDetails" +sidebar_position: "3" +description: "@AnalyticsDetails for data analytics use cases." +--- + +> BETA This annotation is beta and should be reviewed for completion and correctness. + +## Introduction + +Analytical consumption requires additional, specific semantics, which indicate how to map a relational model to the Analytical meta model, using terms like "Facts", "Dimensions", "Measures", "Cubes", "Queries" and "KPIs". + +On entity level these fundamental semantics are mainly captured via the annotations `@ObjectModel.modelingPattern` (design time hints; esp. #ANALYTICAL_FACT, #ANALYTICAL_DIMENSION, #ANALYTICAL_CUBE, #ANALYTICAL_QUERY), and `@ObjectModel.supportedCapabilities` (deployment/runtime hints; esp. #ANALYTICAL_DIMENSION, #ANALYTICAL_PROVIDER, #ANALYTICAL_QUERY). + +The annotation `@AnalyticsDetails` captures specific analytical semantics on element level. +We recommend to consistently use the annotations in combination with the above-mentioned analytical modeling patterns and supported capabilities on entity level. + +The most fundamental analytical specialization is to declare which elements represent a measure. +Because measures shall be aggregated in Analytical processing, all elements with a default aggregation annotation are candidates to be used as measures in Analytics. +Measures are further categorized into base, restricted and calculated measures. +Restricted and calculated measures shall be specifically treated by an Analytic Engine (esp. by MDS in HANA Cloud), whereas base measures have standard SQL semantics. + +## Schema Definitions + +* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). +* The interface is available as JSON Schema: [analytics-details.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/analytics-details.schema.json#). + +### Annotations Overview + +| Annotation | Scope | Description | +| -------- | ---- | ----------- | +| [@AnalyticsDetails.measureType](#analyticsdetailsmeasuretype) | Type | Specifies in which way a measure should treated. | + +### @AnalyticsDetails.measureType + +Specifies in which way a measure should treated. + +**Type**: Object(#) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"BASE"`: Measure from the provider.

  • `"RESTRICTION"`: Restricted measure.

  • `"CALCULATION"`: Calculated measure (formula).

| + + +###### Example Values: + + +```js +{ + "#": "BASE" +} +``` + diff --git a/docs/annotations/consumption.md b/docs/annotations/consumption.md new file mode 100644 index 00000000..4a74e592 --- /dev/null +++ b/docs/annotations/consumption.md @@ -0,0 +1,131 @@ +--- +title: "@Consumption" +sidebar_position: "4" +description: "@Consumption annotations." +--- + +> BETA This annotation is beta and should be reviewed for completion and correctness. + +## Introduction + +Via those Annotations the specific behavior is defined which is related to the consumption of CDS content via domain-specific frameworks. This metadata makes no assumptions on the concrete consumption technology/infrastructure but is applicable across multiple consumption technologies (Analytics, OData, …). + +## Schema Definitions + +* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). +* The interface is available as JSON Schema: [consumption.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/consumption.schema.json#). + +### Annotations Overview + +| Annotation | Scope | Description | +| -------- | ---- | ----------- | +| [@Consumption.valueHelpDefinition](#consumptionvaluehelpdefinition) | Entity, Type | The property defines how value helps for this element shall be constructed.

It allows to associate a (set of) View/Entity that provides the "Value Help" for the annotated field or parameter.
This is achieved by either referencing the target view/entity of a modelled association or by directly establishing a relationship to view/entity that shall act as a value help provider. | + +### @Consumption.valueHelpDefinition + +The property defines how value helps for this element shall be constructed. + +It allows to associate a (set of) View/Entity that provides the "Value Help" for the annotated field or parameter. +This is achieved by either referencing the target view/entity of a modelled association or by directly establishing a relationship to view/entity that shall act as a value help provider. + +**Type:** Array<[Consumption Value Help Definition](#consumption-value-help-definition)>
+**Scope:** Entity, Type
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### Consumption Value Help Definition + +**Type**: Object(entity, additionalBinding, association, distinctValues) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
entity
OPTIONAL
|
[Consumption Value Help Definition](#consumption-value-help-definition)
|
Value help defining view or entity.
| +|
additionalBinding
OPTIONAL
|
Array<[Additional Binding](#additional-binding)>
|
Additional bindings for filtering the value help result list.
| +|
association
OPTIONAL
|
[Element Reference](../spec-v1/csn-interop-effective#element-reference)
|
Reference to the modelled association (in local entity) for which the target view represents the value help providing view or entity for the annotated local field. The on-condition of the association may only contain bindings of the source and target fields that use an equal operator. All these bindings are automatically considered by the value help for both filter and result mappings.
Mutually exclusive to the usage of `valueHelpDefinition.entity`.
| +|
distinctValues
OPTIONAL
|
boolean
|
Specifies whether the value help result list shall only contain distinct values for the annotated field or parameter.
If set to true all mappings will be used for filtering, but only the value for the field/parameter which the value help was requested for will be returned by the value help.
**Default Value**: `true`
| + + +###### Example Values: + + +```js +{ + "entity": { + "name": "I_ControllingAreaStdVH", + "element": "ControllingArea" + } +} +``` + + +```js +{ + "entity": { + "name": "I_CostCenterStdVH", + "element": "CostCenter" + }, + "additionalBinding": [ + { + "localElement": "ControllingArea", + "element": "ControllingArea" + } + ] +} +``` + + +```js +{ + "association": { + "=": "to_Airline" + } +} +``` + + +### Consumption Value Help Definition + +Value help defining view or entity. + +**Type**: Object(name, element) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
name
OPTIONAL
|
string
|
Name of the value help providing view or entity
| +|
element
OPTIONAL
|
string
|
Name of the field of the value help view or entity, which the annotated local field or parameter is bound to.

Mutually exclusive to the usage of `valueHelpDefinition.association`.
| + + +### Additional Binding + +Allows to define additional bindings (besides the ones defined by `valueHelpDefinition.association` or `valueHelpDefinition.entity`) for filtering the value help result list and/or returning values from the selected value help record. + +**Type**: Object(localElement, element, usage) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
localElement
OPTIONAL
|
string
|
Field of the current view/entity; mutually exclusive to the usage of `localParameter`.
| +|
element
OPTIONAL
|
string
|
Name of the field of the value help view or entity, which the annotated local field or parameter is bound to.
| +|
usage
OPTIONAL
|
[@Consumption.ConsumptionValueHelpDefinition.AdditionalBinding.Usage](#consumptionconsumptionvaluehelpdefinitionadditionalbindingusage)
|
The binding may either specify an additional filter-criterion on the value help list (`#FILTER`), or an additional result mapping for the selected value help record (`#RESULT`) or a combination thereof (`#FILTER_AND_RESULT`).
If not specified explicitly the usage is `#FILTER_AND_RESULT`.
If distinctValues is set to true, additional bindings must specify the usage as `#FILTER`.
| + + +### @Consumption.ConsumptionValueHelpDefinition.AdditionalBinding.Usage + +The binding may either specify an additional filter-criterion on the value help list (`#FILTER`), or an additional result mapping for the selected value help record (`#RESULT`) or a combination thereof (`#FILTER_AND_RESULT`). +If not specified explicitly the usage is `#FILTER_AND_RESULT`. +If distinctValues is set to true, additional bindings must specify the usage as `#FILTER`. + +**Type**: Object(#) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Default Value**: `FILTER_AND_RESULT`
**Allowed Values**:
  • `"FILTER"`
  • `"RESULT"`
  • `"FILTER_AND_RESULT"`
| + + +###### Example Values: + + +```js +{ + "#": "FILTER_AND_RESULT" +} +``` + diff --git a/docs/annotations/enduser-text.md b/docs/annotations/enduser-text.md new file mode 100644 index 00000000..0887eb11 --- /dev/null +++ b/docs/annotations/enduser-text.md @@ -0,0 +1,118 @@ +--- +title: "@EndUserText" +sidebar_position: "5" +description: "@EndUserText annotations for end user UIs." +--- + +> BETA This annotation is beta and should be reviewed for completion and correctness. + +## Introduction + +To allow an intuitive consumption of the data model in (End User) UIs, further metadata needs to be defined which helps the end user to understand the semantics of the underlying data model artifacts. Depending on the concrete context different types of UI texts are required. The UI text is displayed on the screen in the logon language of the user (if the text was translated into this language). + +### Reference i18n keys + +In the `@EndUserText` annotations it is also possible to reference [i18n](../spec-v1/csn-interop-effective#i18n) entries that are embedded into the CSN document. +In this case, the string has to include `{i18n>` as a prefix, then the key and end with `}` + +Example: `{i18n>AD01PROFNR@ENDUSERTEXT.HEADING}` + +## Schema Definitions + +* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). +* The interface is available as JSON Schema: [enduser-text.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/enduser-text.schema.json#). + +### Annotations Overview + +| Annotation | Scope | Description | +| -------- | ---- | ----------- | +| [@EndUserText.label](#endusertextlabel) | Entity, Type, Service, Context, EnumDictionaryEntry | The property contains a human-readable text to be displayed on UIs (besides or instead of the technical name).

Corresponds to CAP CDS `@title` annotation. | +| [@EndUserText.heading](#endusertextheading) | Type | Defines a human-readable text that is displayed as column headers. | +| [@EndUserText.quickInfo](#endusertextquickinfo) | Entity, Type, Service, Context, EnumDictionaryEntry | Defines a human-readable text that provides additional information compared to the label text.
The quickInfo is used for accessibility hints or the "Mouse over" function.

Corresponds to CAP CDS `@description` annotation. | + +### @EndUserText.label + +The property contains a human-readable text to be displayed on UIs (besides or instead of the technical name). + +Corresponds to CAP CDS `@title` annotation. + +**Type:** string
+**Scope:** Entity, Type, Service, Context, EnumDictionaryEntry
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition), [ContextDefinition](../spec-v1/csn-interop-effective#context-definition), [EnumDictionaryEntry](../spec-v1/csn-interop-effective#enum-dictionary-entry) +###### Example Values: + + +```js +"Sales Order Header" +``` + + +```js +"{i18n>AD01PROFNR@ENDUSERTEXT.LABEL}" +``` + + + +### @EndUserText.heading + +Defines a human-readable text that is displayed as column headers. + +**Type:** string
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @EndUserText.quickInfo + +Defines a human-readable text that provides additional information compared to the label text. +The quickInfo is used for accessibility hints or the "Mouse over" function. + +Corresponds to CAP CDS `@description` annotation. + +**Type:** string
+**Scope:** Entity, Type, Service, Context, EnumDictionaryEntry
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition), [ContextDefinition](../spec-v1/csn-interop-effective#context-definition), [EnumDictionaryEntry](../spec-v1/csn-interop-effective#enum-dictionary-entry) +###### Example Values: + + +```js +"Sales Order Header that contains data relevant for all items" +``` + + + +## Complete Examples + + +```js +{ + "csnInteropEffective": "1.0", + "$version": "2.0", + "definitions": { + "SalesOrderHeader": { + "kind": "type", + "type": "cds.String", + "@EndUserText.label": "Sales Order Header", + "@EndUserText.quickInfo": "Sales Order Header that contains data relevant for all items" + } + } +} +``` + + +```js +{ + "csnInteropEffective": "1.0", + "$version": "2.0", + "definitions": { + "AD01PROFNR": { + "kind": "type", + "type": "cds.String", + "length": 8, + "@EndUserText.heading": "{i18n>AD01PROFNR@ENDUSERTEXT.HEADING}", + "@EndUserText.label": "{i18n>AD01PROFNR@ENDUSERTEXT.LABEL}", + "@EndUserText.quickInfo": "{i18n>AD01PROFNR@ENDUSERTEXT.QUICKINFO}" + } + } +} +``` + diff --git a/docs/annotations/entity-relationship.md b/docs/annotations/entity-relationship.md new file mode 100644 index 00000000..e632ee03 --- /dev/null +++ b/docs/annotations/entity-relationship.md @@ -0,0 +1,805 @@ +--- +title: "@EntityRelationship" +sidebar_position: "6" +description: "@EntityRelationship annotations for cross boundary Entity-Relationship IDs and associations." +--- + +> BETA This annotation is in **beta state**. Please give feedback if the annotations are correct and sufficient. + +## Introduction + +Modern business application suites handle thousands of different types of business data and consist of many applications or services. +Business data is heavily interconnected and dynamically evolves over time. + +It is not possible to put all data together into a single API covering all relations between data. On the contrary, many smaller APIs are easier to develop and maintain. +As a consequence, many relations between different types of data go across different APIs. +Additionally, the same type of data can be offered by different APIs, either in different API versions, technologies, or even hosted by different technical systems and providers. + +Therefore, independent concepts for types of data (so called [entity types](#entity-type)) and for their identifiers (via so called [property types](#property-type)) are needed, which can be used for the flexible definition of references and relations across the local boundary. + +Jump to [Concept Explanation](#concept-explanation) for more explanations. + +## Schema Definitions + +* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). +* The interface is available as JSON Schema: [entity-relationship.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/entity-relationship.schema.json#). + +### Annotations Overview + +| Annotation | Scope | Description | +| -------- | ---- | ----------- | +| [@EntityRelationship.entityType](#entityrelationshipentitytype) | Entity | Defines which [Entity Type](#entity-type) the current data object represents.

There could be several data objects that are assigned to the same Entity Type.
One data object can only have one Entity Type assigned, which corresponds to the applications own Entity Type definition. | +| [@EntityRelationship.propertyType](#entityrelationshippropertytype) | Type | Defines the logical [Property Type](#property-type) of a property.
The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID. | +| [@EntityRelationship.entityIds](#entityrelationshipentityids) | Entity | Defines a list of IDs, which are available to look up the Entity Type or create a reference to it.
An Entity Type can have multiple IDs:
* There can be **alternative IDs** that can also be used to create a reference to the Entity Type
* Some ID properties form a **composite ID** together and need to be combined to function as a unique ID for references
* This is indicated by a [`propertyTypes`](#property-type) array with more than one Property Type ID entry. | +| [@EntityRelationship.reference](#entityrelationshipreference) | Type | Defines references to other Entity Types based on a single ID. | +| [@EntityRelationship.compositeReferences](#entityrelationshipcompositereferences) | Entity | Defines one or many references to other Entity Types based on a composite IDs. | +| [@EntityRelationship.temporalIds](#entityrelationshiptemporalids) | Entity | Defines a list of temporal IDs | +| [@EntityRelationship.temporalReferences](#entityrelationshiptemporalreferences) | Entity | Defines a list of temporal references | +| [@EntityRelationship.referencesWithConstantIds](#entityrelationshipreferenceswithconstantids) | Entity | Defines one or many references to other Entity Types based on a composite IDs where some properties of the references are constant values. | + +### @EntityRelationship.entityType + +Defines which [Entity Type](#entity-type) the current data object represents. + +There could be several data objects that are assigned to the same Entity Type. +One data object can only have one Entity Type assigned, which corresponds to the applications own Entity Type definition. + +**Type:** string
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) +###### Example Values: + + +```js +"sap.vdm.sont:BillOfMaterial" +``` + + + +### @EntityRelationship.propertyType + +Defines the logical [Property Type](#property-type) of a property. +The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID. + +**Type:** string
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) +###### Example Values: + + +```js +"sap.vdm.gfn:BillOfMaterialUUID" +``` + + + +### @EntityRelationship.entityIds + +Defines a list of IDs, which are available to look up the Entity Type or create a reference to it. +An Entity Type can have multiple IDs: +* There can be **alternative IDs** that can also be used to create a reference to the Entity Type +* Some ID properties form a **composite ID** together and need to be combined to function as a unique ID for references +* This is indicated by a [`propertyTypes`](#property-type) array with more than one Property Type ID entry. + +**Type:** Array<[Entity ID](#entity-id)>
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @EntityRelationship.reference + +Defines references to other Entity Types based on a single ID. + +**Type:** Array<[Reference Target](#reference-target)>
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @EntityRelationship.compositeReferences + +Defines one or many references to other Entity Types based on a composite IDs. + +**Type:** Array<[Composite Reference](#composite-reference)>
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @EntityRelationship.temporalIds + +Defines a list of temporal IDs + +**Type:** Array<[Temporal ID](#temporal-id)>
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @EntityRelationship.temporalReferences + +Defines a list of temporal references + +**Type:** Array<[Temporal Reference](#temporal-reference)>
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @EntityRelationship.referencesWithConstantIds + +Defines one or many references to other Entity Types based on a composite IDs where some properties of the references are constant values. + +**Type:** Array<[Reference with Constant ID](#reference-with-constant-id)>
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### Reference Target + +Defines a reference to another Entity Type based on a single ID. + +**Type**: Object(name, referencedEntityType, referencedPropertyType) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the reference.
| +|
referencedEntityType
MANDATORY
|
[Entity Type ID](#entity-type-id)
|
ID of the [Entity Type](#entity-type).
| +|
referencedPropertyType
MANDATORY
|
[Property Type ID](#property-type-id)
|
ID of the [Property Type](#property-type). The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID.
| + + +### Entity ID + +Defines an ID that can be used to look up the Entity Type or create a reference to it. + +**Type**: Object(name, description, propertyTypes) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the ID.
| +|
description
OPTIONAL
|
string
|
Optional description to describe the semantics of the ID.
| +|
propertyTypes
MANDATORY
|
Array<[Property Type ID](#property-type-id)>
|
List of [Property Type](#property-type) IDs.
| + + +### Composite Reference + +Defines single a reference to another Entity Type based on a composite ID. + +**Type**: Object(name, referencedEntityType, referencedPropertyTypes) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the reference.
| +|
referencedEntityType
MANDATORY
|
[Entity Type ID](#entity-type-id)
|
ID of the [Entity Type](#entity-type).
| +|
referencedPropertyTypes
MANDATORY
|
Array<[Referenced Property Type](#referenced-property-type)>
|
List of properties, the composite ID consists of.
| + + +### Referenced Property Type + +Grouping of the ID in the referenced entity, by its property type ID and the local name in this entity. + +**Type**: Object(referencedPropertyType, localPropertyName) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
referencedPropertyType
MANDATORY
|
[Property Type ID](#property-type-id)
|
ID of the [Property Type](#property-type). The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID.
| +|
localPropertyName
MANDATORY
|
[Local Property Name](#local-property-name)
|
Name of the property in the local Entity Type
| + + +### Temporal ID + +Defines an ID that includes a temporal interval. + +**Type**: Object(name, description, propertyTypes, temporalIntervalType, temporalType, temporalIntervalStartProperty, temporalIntervalEndProperty) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the ID.
| +|
description
OPTIONAL
|
string
|
Optional description to describe the semantics of the ID.
| +|
propertyTypes
MANDATORY
|
Array<[Property Type ID](#property-type-id)>
|
List of [Property Type](#property-type) IDs that are non-temporal.
| +|
temporalIntervalType
MANDATORY
|
string
|
Interval which includes the boundaries.
**Allowed Values**:
  • `"CLOSED_CLOSED"`

  • `"OPEN_OPEN"`

  • `"OPEN_CLOSED"`

  • `"CLOSED_OPEN"`


**Example Values**:
  • `"CLOSED_CLOSED"`
| +|
temporalType
MANDATORY
|
string
|
Temporal type.
**Allowed Values**:
  • `"DATE"`

  • `"DATETIME"`


**Example Values**:
  • `"DATE"`
| +|
temporalIntervalStartProperty
MANDATORY
|
[Local Property Name](#local-property-name)
|
Property in the local entity that is used to define the start of the interval.
| +|
temporalIntervalEndProperty
MANDATORY
|
[Local Property Name](#local-property-name)
|
Property in the local entity that is used to define the end of the interval.
| + + +### Temporal Reference + +Defines single temporal reference to another Entity Type. + +**Type**: Object(name, referencedEntityType, referencedPropertyTypes, category, selectionDateProperty) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the reference.
| +|
referencedEntityType
MANDATORY
|
[Entity Type ID](#entity-type-id)
|
ID of the [Entity Type](#entity-type).
| +|
referencedPropertyTypes
MANDATORY
|
Array<[Referenced Property Type](#referenced-property-type)>
|
List of non-temporal properties the composite temporal ID consists of.
| +|
category
MANDATORY
|
string
|
Category of the temporal reference.
**Allowed Values**:
  • `"TEMPORAL_DATE"`


**Example Values**:
  • `"TEMPORAL_DATE"`
| +|
selectionDateProperty
MANDATORY
|
[Local Property Name](#local-property-name)
|
Property in the local entity that is used to select the right date interval.
| + + +### Reference with Constant ID + +Defines single a reference to another Entity Type based on a composite ID. + +**Type**: Object(name, description, referencedEntityType, referencedPropertyTypes) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the reference.
| +|
description
OPTIONAL
|
string
|
Optional description to describe the semantics of the reference.
| +|
referencedEntityType
MANDATORY
|
[Entity Type ID](#entity-type-id)
|
ID of the [Entity Type](#entity-type).
| +|
referencedPropertyTypes
MANDATORY
|
Array<[Referenced Property Type with Constant ID](#referenced-property-type-with-constant-id)>
|
List of properties, the composite ID consists of.
| + + +### Referenced Property Type with Constant ID + +Grouping of the ID in the referenced entity, by its property type ID and either the local name in this entity or a constant value. + +**Type**: Object(referencedPropertyType, localPropertyName, constantValue) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
referencedPropertyType
MANDATORY
|
[Property Type ID](#property-type-id)
|
ID of the [Property Type](#property-type). The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID.
| +|
localPropertyName
OPTIONAL
|
[Local Property Name](#local-property-name)
|
Name of the property in the local Entity Type
| +|
constantValue
OPTIONAL
|
string
|
String serialization of the constant value of the property in the referenced entity.
| + + +### Property Type ID + +ID of the [Property Type](#property-type). The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID. + +**Type:** string + +###### Example Values: + + +```js +"sap.vdm.gfn:BillOfMaterialUUID" +``` + + + +### Entity Type ID + +ID of the [Entity Type](#entity-type). + +**Type:** string + +###### Example Values: + + +```js +"sap.vdm.sont:BillOfMaterial" +``` + + + +### Local Property Name + +Name of the property in the local Entity Type + +**Type:** string + + +## Complete Examples + + +```js +{ + "csnInteropEffective": "1.0", + "$version": "2.0", + "definitions": { + "BusinessPartner": { + "kind": "entity", + "@EntityRelationship.entityType": "sap.vdm.sont:BusinessPartner", + "@EntityRelationship.entityIds": [ + { + "name": "Semantic ID (composite ID)", + "propertyTypes": [ + "sap.vdm.gfn:BusinessPartnerNumber", + "sap.vdm.gfn:BusinessPartnerType" + ] + }, + { + "name": "UUID (single property ID)", + "propertyTypes": [ + "sap.vdm.gfn:BusinessPartnerUUID" + ] + } + ], + "elements": { + "number": { + "@EntityRelationship.propertyType": "sap.vdm.gfn:BusinessPartnerNumber", + "key": true, + "type": "cds.Integer" + }, + "type": { + "@EntityRelationship.propertyType": "sap.vdm.gfn:BusinessPartnerType", + "key": true, + "type": "cds.String" + }, + "uuid": { + "@EntityRelationship.propertyType": "sap.vdm.gfn:BusinessPartnerUUID", + "type": "cds.UUID" + } + } + } + } +} +``` + + +```js +{ + "csnInteropEffective": "1.0", + "$version": "2.0", + "definitions": { + "PurchaseOrder": { + "kind": "entity", + "@EntityRelationship.compositeReferences": [ + { + "name": "Main Supplier", + "referencedPropertyTypes": [ + { + "referencedPropertyType": "sap.vdm.gfn:BusinessPartnerNumber", + "localPropertyName": "mainSupplierNumber" + }, + { + "referencedPropertyType": "sap.vdm.gfn:BusinessPartnerType", + "localPropertyName": "mainSupplierType" + } + ] + } + ], + "elements": { + "mainSupplierNumber": { + "type": "cds.Integer" + }, + "mainSupplierType": { + "@EntityRelationship.propertyType": "sap.vdm.gfn:BusinessPartnerType", + "type": "cds.String" + }, + "alternativeSupplierUUID": { + "@EntityRelationship.reference": [ + { + "referencedEntityType": "sap.vdm.sont:BusinessPartner", + "referencedPropertyType": "sap.vdm.gfn:BusinessPartnerUUID" + } + ], + "type": "cds.UUID" + } + } + } + } +} +``` + +## Concept Explanation + +The purpose of `@EntityRelationship` annotations is to document the Entity Relationship model that goes beyond CSN native associations. +With the annotations its possible to describe "dangling references" and associations to entities outside of the current API / data model context including those provided by different products and technology stacks. + +### Problem Statement + +While CSN can express associations and references with the same CSN document, we also need to describe: + +- References across documents / APIs +- References across different API versions and Protocols +- References across different tenants +- References across different types of applications / services +- "Weak" References, where the target may or may not yet be available for joining data + +As a consequence, the Entity Relationship annotation concept is built on the following design decisions: + +- Reference pointers must not rely on physical API model structure, e.g. property names or document structure. +- Instead we introduce the more abstract and decoupled [Entity Types](#entity-type) and [Property Types](#property-type). +- IDs for Entity Types and Property Types are namespaced, so they are globally unique and conflict free for references across boundaries + +### Out of Scope + +- The annotations only express references that target unique IDs. + - This concept is not meant to replace a more complex query model how data can be joined together in various (often more complex) conditions. E.g., some properties can act as a selector for filter conditions / query conditions that return multiple values. + They could be seen as a special case of association and are always "to many" associations. We don't cover them in this concept here, because they don't contain actual unique IDs to instance data. Instead they describe filter values that may even require more complex query conditions in advanced use cases. This also includes `SELECT *` cases, where the reference value is actually a wildcard / select all. Such references without uniques are not in scope of this concept. +- The annotations just express the local/application specific ER model. + - They are no substitute for globally aligned annotations like ODM or semantic vocabularies, which can be added as complementary on top. + +### Glossary + +- **Entity Type**: An entity type represents a conceptual entity on type-level / class-level. It's conceptual, because the same entity type can have multiple different physical models / representations. +- **Property Type**: A Property Type is a logical ID for a property, so we can reference it without relying on property names or structure of the API data model. Property Types may be used as unique IDs in itself or be part of a composite ID, which can be used to identify instance data of an entity type. +- **Composite ID**: An ID consisting of several properties that only together form a unique ID. Aka Compound ID. +- **Reference**: A reference is an association from one entity type to another. A reference consists of one or multiple properties that follow the Property Types of the target entity type. + +### ID Concepts + +#### Entity Type + +Entity Types represent "conceptual models" that underlie the often very denormalized, concrete API Models. +For a full description, see [ORD Entity Type](https://sap.github.io/open-resource-discovery/details/articles/grouping-and-bundling#entity-type). + +The ID scheme for an Entity Type ID is as following: + +```xml + := :[:v] +``` + +For the mandatory namespaces we use the [Namespace Concept](https://sap.github.io/open-resource-discovery/spec-v1/#namespaces) of ORD. +In many cases Entity Types are not versioned. To ease handling and avoiding ambiguity, we forbid adding `v1` and therefore made `v1` the default. +If for the case of having a `v2` or higher of an Entity Type, the version must be added. + +Ideally the application specific Entity Types are described as ORD Entity Types, so we have at least a globally unique ORD ID and the title for it available. +Then it’s clear what Entity Type ID others should use for cross application references. +With the outlined pattern, we can convert an Entity Type ID to a globally unique [ORD ID](https://sap.github.io/open-resource-discovery/spec-v1/#ord-id) and vice versa: + +```xml + := :entityType::v +``` + +#### Property Type + +An Entity Type and its API models may have multiple IDs that can be used to create references to it. +Usually there is a primary ID (which may be also the primary key in the database) and optionally multiple alternative IDs / keys. +Primary or alternative IDs may be a composite ID and consist of multiple property values that only together form a unique ID. + +To point out, which properties are used to hold an ID, we introduce Property Types. +A Property Type is independent from the actual API / data structure, e.g. the property names. +The same property type can therefore be reused in multiple entity types in different APIs, even with different property names and structural differences. + +A [Property Type ID](#property-type-id) follows the same format and considerations as the Entity Type ID explained above: + +```xml + := :[:v] +``` + +The same Property Type MUST NOT be defined more than once in the same Entity Type. +However, the same Property Type MAY be part of multiple references within the same Entity Type. + +For describing references, it is sufficient to only annotate `@EntityRelationship.propertyType` on properties that are used as IDs (by itself, or by being part of a composite ID). + +> 🙋 Why do we not just use the property name where we'll find the ID? +> The reason is that ID properties can get renamed, ID schemes get changed or the structure of an API changes. +> All of that are incompatible API changes, but the goal of this reference concept is to work agnostic of API versions and even different API protocols. +> With the Property Type concept, we define the references purely on a conceptual level and are not coupled to the actual API / JSON structure and stable property names. + +> 🔭 We _may_ consider describing the IDs of Entity Types (and their property-types) on ORD level as well, attached to an ORD Entity Type. +> This would be optional and for the ID / Reference concept to work it is only important that the Entity Type and Property Type IDs are used consistently and conflict-free within their namespace. + +### Standard Use Cases + +#### Declaring Single Property IDs + +The following example shows a single ID in '@EntityRelationship.entityIds' that can be used to identify the Entity Type. It consists of a single property (`ObjectID`), identified through its [Property Type ID](#property-type) `sap.vdm.gfn:BillOfMaterialObjectID`. + +```javascript +@EntityRelationship.entityType : 'sap.vdm.sont:BillOfMaterial' +@EntityRelationship.entityIds : [{ + name: 'optional name for ID' + propertyTypes: ['sap.vdm.gfn:BillOfMaterialObjectID'] +}] +entity BillOfMaterial { + @EntityRelationship.propertyType : 'sap.vdm.gfn:BillOfMaterialObjectID' + key ObjectID : String; +} +``` + +#### Declaring Composite IDs + +In case of composite IDs, the same concept is used, with the difference that `propertyTypes` has more than one value. + +In the following example, the annotation is used to indicate which Property Types (`sap.vdm.gfn:BusinessPartnerNumber` and `sap.vdm.gfn:BusinessPartnerType`) of the Entity Type (`sap.vdm.sont:BusinessPartner`) form a composite ID together: + +```javascript +@EntityRelationship.entityType : 'sap.vdm.sont:BusinessPartner' +@EntityRelationship.entityIds : [{ + name: 'Semantic ID' + propertyTypes: ['sap.vdm.gfn:BusinessPartnerNumber', 'sap.vdm.gfn:BusinessPartnerType'] +},{ + name: 'UUID' + propertyTypes: ['sap.vdm.gfn:BusinessPartnerUUID'] +}] +entity BusinessPartner { + @EntityRelationship.propertyType : 'sap.vdm.gfn:BusinessPartnerNumber' + key number : Integer; + @EntityRelationship.propertyType : 'sap.vdm.gfn:BusinessPartnerType' + key type : String; + @EntityRelationship.propertyType : 'sap.vdm.gfn:BusinessPartnerUUID' + uuid : UUID; +} +``` + +It is also possible that the same Property Type is part of multiple (composite) IDs. +For example, a person can be identified by either `country` and `driversLicenseNumber` or `country` and `socialSecurityNumber`. +There is no guarantee that drivers license numbers or social security numbers are unique across countries. + +#### Referencing single IDs + +For **simple references to single property IDs** we need to state the target Entity Type and the Property Type of the target property that is used as the unique ID. + +The `referencedEntityType` and `referencedPropertyType` together ensure that the reference: + +- States what Entity Type is the target of the reference / association. +- Which Property Type of the target Entity Type is used as an ID value in the reference. + +```javascript +@EntityRelationship.entityType : 'sap.vdm.sont:BillOfMaterial' +@EntityRelationship.entityIds : [{ + //... +}] +entity BillOfMaterial { + //... + @EntityRelationship.reference[{ + referencedEntityType: 'sap.vdm.sont:Plant', + referencedPropertyType: 'sap.vdm.gfn:PlantObjectID' + }] + Plant : String +} +``` + +With the given information, we can look for a `sap.vdm.sont:Plant` Entity Type (e.g. in different APIs) and see if it has the Property Type `sap.vdm.gfn:PlantObjectID` in its list of IDs (`@EntityRelationship.entityIds`). +If this is given, we can merge / join / lookup the information with the reference value (ID) given in the property. + +The annotation is an array because there could be multiple Entity Types that are valid targets for the reference. +If an array is given, all of the reference targets MUST be valid places where the ID can be resolved, at least in a certain implementation or version of the target entity. +This also allows for references to polymorphic targets that share the same Property Type as an ID (e.g. a reference to either Cat or Dog, sharing the same Pet ID). + +> 🚧 Consideration: Provide optional attribute to state that a reference has a "composition" quality, in case that the API Model itself doesn't imply that already. +> This would help to know which entity type instances should be deleted if their parent is deleted and is usually also an indicator for transactional integrity. + +#### Referencing Composite IDs + +When we have references that use a composite ID that consists of several Property Types, we also need to indicate their grouping. +We do this by introducing a new annotation `@EntityRelationship.compositeReferences`. +Each entry indicates that there is a reference to another entity, using a composite ID. + +The grouping into a composite reference is based on the semantics of the referring model, as there can be multiple references to the same composite ID. + +When pointing to the Property Types of the target Entity Type (`referencedPropertyType`), we need to define how it maps to the local properties (`localPropertyName`). + +The following example shows how the Entity Type `PurchaseOrder` has a composite ID reference (consisting of `mainSupplierNumber` and `mainSupplierType`) to a `BusinessPartner` Entity Type. + +The composite ID indicates the semantics / grouping of the reference from the _referrals_ perspective, not the reference targets perspective (!). +There can be multiple references that use the same Composite ID but with different semantics. +The [`compositeReferences`](#composite-reference) in the example states that the first two composite ID references point to the `mainSupplier`. +The next composite ID reference points to the same Entity Type and Property Type, but is part of a different composite reference, "Alternative Supplier". + +A property can be potentially part of several composite references. + +```javascript +@EntityRelationship.entityType : 'sap.vdm.sont:PurchaseOrder' +@EntityRelationship.compositeReferences : [{ + //one composite reference + name: 'Main Supplier', + referencedEntityType: 'sap.vdm.sont:BusinessPartner' + referencedPropertyTypes: [{ + referencedPropertyType: 'sap.vdm.gfn:BusinessPartnerNumber', + localPropertyName: 'mainSupplierNumber' + },{ + referencedPropertyType: 'sap.vdm.gfn:BusinessPartnerType', + localPropertyName: 'mainSupplierType' + }] +},{ + // This demonstrates why the composite reference is necessary + // and is defined with the semantics from the referencing side. + name: 'Alternative Supplier', + referencedEntityType: 'sap.vdm.sont:BusinessPartner' + referencedPropertyTypes: [{ + referencedPropertyType: 'sap.vdm.gfn:BusinessPartnerNumber', + localPropertyName: 'alternativeSupplierNumber' + },{ + referencedPropertyType: 'sap.vdm.gfn:BusinessPartnerType', + localPropertyName: 'alternativeSupplierType' + }] +}] +entity PurchaseOrder { + //... + Plant : String; + mainSupplierNumber : Integer; + mainSupplierType : String; + alternativeSupplierNumber : Integer; + alternativeSupplierType : String; +} +``` + +### Advanced Cases + +All the annotations in this section are **optional** for providers and consumers to implement or understand. + +As a consequence: + +- All advanced functionality MUST be purely "opt-in" and must not break consumers that do not support it +- If references or IDs need special understanding, we cannot use the standard annotations but need to move to specialized annotations. +- If a consumer does not understand special-case IDs or References, they may therefore treat them as arbitrary properties. +- We may also propose alternative approaches, so special handling attributes can be avoided. + +> ⚠ In general, we recommend to not rely on advanced features if avoidable. If possible, we give guidance how to avoid special handling. + +#### Time Dependent References + +There can be references which include a time / date component, where the targeted entity type may return different values / state, depending on time. +As a consequence it's important for references to indicate which state in time they refer to. + +This situation can be handled with the existing concepts as composite IDs. + +In the example below, we have a Cost Center, where its instance data defines a validity range for the values through `ValidityStartDate` and `ValidityEndDate`. +For the Composite ID, we however need the `sap.vdm.gfn:ControllingArea` and `sap.vdm.gfn:CostCenter` Property Types plus a "virtual" property `KeyDate` that only exists on the API Model. +Those three together can be used to create a unique reference that also states the point in time. + +> 🔗 There is also an [OData Extension for Temporal Data](https://docs.oasis-open.org/odata/odata-temporal-ext/v4.0/cs01/odata-temporal-ext-v4.0-cs01.html). + +```javascript +@EntityRelationship.entityType : 'sap.vdm.sont:CostCenter' +@EntityRelationship.entityIds : [{ + name: 'ID for Point in Time' + propertyTypes: ["sap.vdm.gfn:ControllingArea", "sap.vdm.gfn:CostCenter", "sap.vdm.gfn:KeyDate"] +},{ + name: 'Time-independent ID (not unique)' + propertyTypes: ["sap.vdm.gfn:ControllingArea", "sap.vdm.gfn:CostCenter"] +}] +entity CostCenter { + @EntityRelationship.propertyType : 'sap.vdm.gfn:ControllingArea' + ControllingArea: String; // ControllingArea is also a reference to entity ControllingArea, but this is not shown here + @EntityRelationship.propertyType : 'sap.vdm.gfn:CostCenter' + CostCenter : String; + @EntityRelationship.propertyType : 'sap.vdm.gfn:KeyDate' + KeyDate : Date; // This is a virtual property, only there in an API model to indicate the point in time for the reference. + + ValidityStartDate: Date; // Not an ID, but can be set with create / update + ValidityEndDate: Date; + //... +} +``` + +Example how this is used in a time dependent reference from `SalesOrder`: + +```javascript +@EntityRelationship.entityType : 'sap.vdm.sont:SalesOrder' +@EntityRelationship.compositeReferences : [{ + name: 'Time Dependent Reference to CostCenter', + referencedEntityType: 'sap.vdm.sont:CostCenter' + referencedPropertyTypes: [{ + referencedPropertyType: 'sap.vdm.gfn:ControllingArea', + localPropertyName: 'ControllingArea' + },{ + referencedPropertyType: 'sap.vdm.gfn:CostCenter', + localPropertyName: 'CostCenter' + },{ + referencedPropertyType: 'sap.vdm.gfn:KeyDate', + localPropertyName: 'SalesOrderDate' + }] +}] +entity SalesOrder { + //... + ControllingArea : String; + CostCenter : String; + SalesOrderDate : Date; +} +``` + +#### Special Support for more involved Temporal References + +For more complex scenarios, we need to understand the nature of temporal data along with the references. +In the example below, the `ValidityStartDate` and `ValidityEndDate` need to be understood, as the client has to do a more complex query with filter conditions to get the data at a specific time. +That's because there is no convenience "key date" or "$at" property in the data / API model that can be used for a more simple composite ID reference lookup. + +Temporal IDs can be explicitly described via `@EntityRelationship.temporalIds`: + +```javascript +@EntityRelationship.entityType : 'sap.vdm.sont:CostCenter' +@EntityRelationship.temporalIds : [{ // all temporal IDs at a central place + name: 'temporalId' // optional + propertyTypes: ["sap.vdm.gfn:ControllingArea", "sap.vdm.gfn:CostCenter"] // non-temporal + temporalIntervalType: "CLOSED_CLOSED", // interval which includes the boundaries + temporalType: "DATE", // date or date-time interval + temporalIntervalStartProperty: "ValidityStartDate", // not needed by reference, therefore no property-type necessary + temporalIntervalEndProperty: "ValidityEndDate" +}] +entity CostCenter { + @EntityRelationship.propertyType : 'sap.vdm.gfn:ControllingArea' + ControllingArea: String; // ControllingArea is also a reference to entity ControllingArea, but this is not shown here + @EntityRelationship.propertyType : 'sap.vdm.gfn:CostCenter' + CostCenter : String; + + ValidityStartDate: Date; + ValidityEndDate: Date; // ValidityEndDate is not suited for references from foreign entities, do not expose the internal primary key + + //... +} +``` + +A temporal ID can be referenced via `@EntityRelationship.temporalReferences`: + +```javascript +@EntityRelationship.entityType : 'sap.vdm.sont:SalesOrder' +@EntityRelationship.temporalReferences : [{ + name: 'Temporal Reference to CostCenter', + referencedEntityType: 'sap.vdm.sont:CostCenter' + referencedPropertyTypes: [{ // reference-specific assignment to property-types, could include constants + referencedPropertyType: 'sap.vdm.gfn:ControllingArea', + localPropertyName: 'ControllingArea' + },{ + referencedPropertyType: 'sap.vdm.gfn:CostCenter', + localPropertyName: 'CostCenter' + }], + category: "temporal-date", // reference is to a temporal ID of category date + selectionDateProperty: "SalesOrderDate" // property used to select the right date interval +}] +entity SalesOrder { + //... + ControllingArea : String; + CostCenter : String; + SalesOrderDate : Date; +} +// a join or select condition derived from the temporal reference would use an additional condition: +// AND CostCenter.ValidityStartDate <= SalesOrder.SalesOrderDate +// AND CostCenter.ValidityEndDate >= SalesOrder.SalesOrderDate +``` + +#### References with Constant ID Values + +In this special case we have references where some additional IDs need to be set to a constant value to get to a unique ID reference. +It could also be understood as a composite ID where some of the required IDs (that may act as filters) are not available as reference properties, but we know from the metadata that we need to set them to a static value at the target Entity Type. + +##### Solution A: Add constant ID values as explicit properties + +One approach to address this situation is to just introduce the missing constant ID values as new properties in the entity type that holds the reference. +We can define such a value in CSN as [value](https://cap.cloud.sap/docs/cds/csn#properties-1) +The advantage is that we have then a regular composite ID reference, which we can handle without creating a new edge-case that needs special support. +The disadvantage is that we have to add new properties and instance data to our APIs. + +```javascript +@EntityRelationship.entityType : 'sap.vdm.sont:CostingSheet ' +@EntityRelationship.compositeReferences : [{ + referencedEntityType: 'sap.vdm.sont:CostingSheetProcedure' + referencedPropertyTypes: [{ + referencedPropertyType: 'sap.vdm.gfn:CostingSheetProcedure', + localPropertyName: 'costingSheetProcedure' + },{ + referencedPropertyType: 'sap.vdm.gfn:ConditionUsage', + localPropertyName: 'costingSheetProcedureConditionUsage' + },{ + referencedPropertyType: 'sap.vdm.gfn:ConditionApplication', + localPropertyName: 'costingSheetProcedureConditionApplication' + }] +}] +entity CostingSheet { + //... + costingSheetProcedure : String; + costingSheetProcedureConditionUsage : String = 'K'; + costingSheetProcedureConditionApplication : String = 'KS'; +} +``` + +##### Solution B: State constant ID composite keys explicitly + +Since this is a very special edge-case we did not want to introduce additional complexity to our regular cases. +We also don't want consumers who don't understand and support constant ID values to accidentally interpret incomplete composite ID references. + +As a consequence, we'll not use the `@EntityRelationship.references` annotation, but introduce a dedicated `@EntityRelationship.referencesWithConstantIds`. +It can describe a reference that includes constant ID values and also may consist of a composite ID of more than one property. + +```javascript +@EntityRelationship.entityType : 'sap.vdm.sont:CostingSheet ' +@EntityRelationship.referencesWithConstantIds : [{ + description: 'optional description' + referencedEntityType: 'sap.vdm.sont:CostingSheetProcedure' + referencedPropertyTypes: [{ + referencedPropertyType: 'sap.vdm.gfn:CostingSheetProcedureId', + localPropertyName: 'costingSheetProcedure' + },{ + referencedPropertyType: 'sap.vdm.gfn:ConditionUsage', + constantValue: 'K' + },{ + referencedPropertyType: 'sap.vdm.gfn:ConditionApplication', + constantValue: 'KS' + }] +}] +entity CostingSheet { + //... + costingSheetProcedure : String; +} +``` + +In this example the `costingSheetProcedure` property links to a `sap.vdm.gfn:CostingSheetProcedureId` Property Type, but by that alone the ID reference is not complete. +In the target, there are three Property Types that form a unique composite ID together. +The Property Types `sap.vdm.gfn:ConditionUsage` and `sap.vdm.gfn:ConditionApplication` are missing. +Since they always need to be set to a specific static value, we can indicate this on metadata level with `constantValue`. + +#### Concatenated IDs or References + +Some composite IDs or references are not available as separate properties, but concatenated together into a single string. + +We recommend two approaches: + +- Treat it as a dedicated (opaque) ID with its own Property Type, which may be used as any other ID without understanding (and parsing) its inner structure. +- Alternatively, split a concatenated ID / Reference into separate properties with their own Property Type. This can then be handled as regular composite IDs and references. \ No newline at end of file diff --git a/docs/annotations/object-model.md b/docs/annotations/object-model.md new file mode 100644 index 00000000..1c742ad7 --- /dev/null +++ b/docs/annotations/object-model.md @@ -0,0 +1,172 @@ +--- +title: "@ObjectModel" +sidebar_position: "7" +description: "@ObjectModel annotations." +--- + +> BETA This annotation is beta and should be reviewed for completion and correctness. + +## Introduction + +The object model captures definitions of structural as well as transactional related aspects of the business data model. + +## Schema Definitions + +* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). +* The interface is available as JSON Schema: [object-model.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/object-model.schema.json#). + +### Annotations Overview + +| Annotation | Scope | Description | +| -------- | ---- | ----------- | +| [@ObjectModel.compositionRoot](#objectmodelcompositionroot) | Entity | Entity is the root of a compositional hierarchy. | +| [@ObjectModel.representativeKey](#objectmodelrepresentativekey) | Entity, Service | In case of multiple key elements: key element which represents the entity (in the sense that the entity itself is the list of values for this key element) | +| [@ObjectModel.semanticKey](#objectmodelsemantickey) | Type | The property contains element(s) which shall be used to display the key in UIs (instead of the technical key). | +| [@ObjectModel.modelingPattern](#objectmodelmodelingpattern) | Entity, Service | The property declares the modeling pattern applied in this entity definition. | +| [@ObjectModel.supportedCapabilities](#objectmodelsupportedcapabilities) | Entity, Service | The property declares the supported usage type for this entity in the context of consuming data models. | +| [@ObjectModel.foreignKey.association](#objectmodelforeignkeyassociation) | Type | The element is of type `cds.Association` which points to the list of values.

Use only for service internal associations. For cross service associations, use the [@EntityRelationship Vocabulary](./entity-relationship) instead. | +| [@ObjectModel.text.element](#objectmodeltextelement) | Type | The property contains element(s) containing a text for the annotated (id)element | +| [@ObjectModel.text.association](#objectmodeltextassociation) | Type | The element is of type cds.association, which points to an entity containing (language-dependent) texts for the annotated (id) element | +| [@ObjectModel.tenantWideUniqueName](#objectmodeltenantwideuniquename) | Entity | Unique technical name of the entity within the tenant / isolation context it is deployed to.
This may be used as a hint for database table names and help to keep them short enough.

Once chosen the technical name ID MUST be kept stable (immutable). | +| [@ObjectModel.usageType.sizeCategory](#objectmodelusagetypesizecategory) | Entity | The size category enables the consumer to judge the possible result data set size.
It is a pure estimation at design time while modeling the entity what the data set size would be at runtime.
It reflects the set of data which has to be searched through to compute for example a count(*) of the data.

The labels correspond to the following size categories (expected number of rows at production customers):
- S: less than 1000
- M: less than 100.000
- L: less than 10.000.000
- XL: less than 100.000.000
- XXL: more than 100.000.000 | + +### @ObjectModel.compositionRoot + +Entity is the root of a compositional hierarchy. + +**Type:** boolean
+**Default Value**: `true`
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @ObjectModel.representativeKey + +In case of multiple key elements: key element which represents the entity (in the sense that the entity itself is the list of values for this key element) + +**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
+**Scope:** Entity, Service
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition) + +### @ObjectModel.semanticKey + +The property contains element(s) which shall be used to display the key in UIs (instead of the technical key). + +**Type:** Array<[Element Reference](../spec-v1/csn-interop-effective#element-reference)>
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @ObjectModel.modelingPattern + +The property declares the modeling pattern applied in this entity definition. + +**Type**: Object(#) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"DATA_STRUCTURE"`
  • `"LANGUAGE_DEPENDENT_TEXT"`
  • `"UNIT_CONVERSION_RATE"`
  • `"VALUE_HELP_PROVIDER"`
  • `"COLLECTIVE_VALUE_HELP"`
  • `"DERIVATION_FUNCTION"`
  • `"PARENT_CHILD_HIERARCHY_NODE_PROVIDER"`
  • `"ENTERPRISE_SEARCH_PROVIDER"`
  • `"TRANSACTIONAL_INTERFACE"`
  • `"TRANSACTIONAL_QUERY"`
  • `"ANALYTICAL_QUERY"`
  • `"ANALYTICAL_DOCUMENT_STORE"`
  • `"ANALYTICAL_CUBE"`
  • `"ANALYTICAL_DIMENSION"`
  • `"ANALYTICAL_FACT"`
  • `"ANALYTICAL_PARENT_CHILD_HIERARCHY_NODE"`
  • `"ANALYTICAL_KPI"`
  • `"OUTPUT_FORM_DATA_PROVIDER"`
  • `"OUTPUT_EMAIL_DATA_PROVIDER"`
  • `"OUTPUT_PARAMETER_DETERMINATION_DATA_SOURCE"`
  • `"SITUATION_ANCHOR"`
  • `"SITUATION_TRIGGER"`
  • `"SITUATION_DATACONTEXT"`
  • `"EXTERNAL_DATA_PROVIDER"`
  • `"NONE"`
| + + +###### Example Values: + + +```js +{ + "#": "DATA_STRUCTURE" +} +``` + + +### @ObjectModel.supportedCapabilities + +The property declares the supported usage type for this entity in the context of consuming data models. + +**Type:** Array<[Supported Capabilities Enum Value](#supported-capabilities-enum-value)>
+**Scope:** Entity, Service
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition) + +### @ObjectModel.foreignKey.association + +The element is of type `cds.Association` which points to the list of values. + +Use only for service internal associations. For cross service associations, use the [@EntityRelationship Vocabulary](./entity-relationship) instead. + +**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @ObjectModel.text.element + +The property contains element(s) containing a text for the annotated (id)element + +**Type:** Array<[Element Reference](../spec-v1/csn-interop-effective#element-reference)>
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) +###### Example Values: + + +```js +[ + "BillingDocumentTypeName" +] +``` + + + +### @ObjectModel.text.association + +The element is of type cds.association, which points to an entity containing (language-dependent) texts for the annotated (id) element + +**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @ObjectModel.tenantWideUniqueName + +Unique technical name of the entity within the tenant / isolation context it is deployed to. +This may be used as a hint for database table names and help to keep them short enough. + +Once chosen the technical name ID MUST be kept stable (immutable). + +**Type:** string
+**Maximum Length**: `120`
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @ObjectModel.usageType.sizeCategory + +The size category enables the consumer to judge the possible result data set size. +It is a pure estimation at design time while modeling the entity what the data set size would be at runtime. +It reflects the set of data which has to be searched through to compute for example a count(*) of the data. + +The labels correspond to the following size categories (expected number of rows at production customers): +- S: less than 1000 +- M: less than 100.000 +- L: less than 10.000.000 +- XL: less than 100.000.000 +- XXL: more than 100.000.000 + +**Type**: Object(#) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"S"`
  • `"M"`
  • `"L"`
  • `"XL"`
  • `"XXL"`
| + + +###### Example Values: + + +```js +{ + "#": "XL" +} +``` + + +### Supported Capabilities Enum Value + +**Type**: Object(#) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
#
MANDATORY
|
string
|
The entry declares one supported usage type.
**Allowed Values**:
  • `"SQL_DATA_SOURCE"`
  • `"CDS_MODELING_DATA_SOURCE"`
  • `"CDS_MODELING_ASSOCIATION_TARGET"`
  • `"DATA_STRUCTURE"`
  • `"LANGUAGE_DEPENDENT_TEXT"`
  • `"UNIT_CONVERSION_RATE"`
  • `"VALUE_HELP_PROVIDER"`
  • `"COLLECTIVE_VALUE_HELP"`
  • `"EXTRACTION_DATA_SOURCE"`
  • `"DERIVATION_FUNCTION"`
  • `"PARENT_CHILD_HIERARCHY_NODE_PROVIDER"`
  • `"SEARCHABLE_ENTITY"`
  • `"ENTERPRISE_SEARCH_PROVIDER"`
  • `"TRANSACTIONAL_PROVIDER"`
  • `"ANALYTICAL_QUERY"`
  • `"ANALYTICAL_DOCUMENT_STORE"`
  • `"ANALYTICAL_DIMENSION"`
  • `"ANALYTICAL_PROVIDER"`
  • `"ANALYTICAL_PARENT_CHILD_HIERARCHY_NODE"`
  • `"ANALYTICAL_KPI"`
  • `"OUTPUT_FORM_DATA_PROVIDER"`
  • `"OUTPUT_EMAIL_DATA_PROVIDER"`
  • `"OUTPUT_PARAMETER_DETERMINATION_DATA_SOURCE"`
  • `"SITUATION_ANCHOR"`
  • `"SITUATION_TRIGGER"`
  • `"SITUATION_DATACONTEXT"`
  • `"KEY_USER_COPYING_TEMPLATE"`
  • `"EXTERNAL_DATA_PROVIDER"`
  • `"ODM_COMPLIANT_PROVIDER"`
  • `"UI_PROVIDER_PROJECTION_SOURCE"`
| + diff --git a/docs/annotations/objectmodel.md b/docs/annotations/objectmodel.md new file mode 100644 index 00000000..1866e809 --- /dev/null +++ b/docs/annotations/objectmodel.md @@ -0,0 +1,158 @@ +--- +title: "@ObjectModel" +sidebar_position: 7 +description: "@ObjectModel annotations." +--- + +> BETA This annotation is beta and should be reviewed for completion and correctness. + +## Introduction + +The object model captures definitions of structural as well as transactional related aspects of the business data model. + +## Schema Definitions + +* This is an extension vocabulary for [CSN Interop Effective](../spec-v1/csn-interop-effective). + +### Annotations Overview + +| Annotation | Scope | Description | +| -------- | ---- | ----------- | +| [@ObjectModel.compositionRoot](#objectmodelcompositionroot) | Entity | Entity is the root of a compositional hierarchy. | +| [@ObjectModel.representativeKey](#objectmodelrepresentativekey) | Entity, Service | In case of multiple key elements: key element which represents the entity (in the sense that the entity itself is the list of values for this key element) | +| [@ObjectModel.semanticKey](#objectmodelsemantickey) | Type | The property contains element(s) which shall be used to display the key in UIs (instead of the technical key). | +| [@ObjectModel.modelingPattern](#objectmodelmodelingpattern) | Entity, Service | The property declares the modeling pattern applied in this entity definition. | +| [@ObjectModel.supportedCapabilities](#objectmodelsupportedcapabilities) | Entity, Service | The property declares the supported usage type for this entity in the context of consuming data models. | +| [@ObjectModel.foreignKey.association](#objectmodelforeignkeyassociation) | Type | The element is of type `cds.Association` which points to the list of values.

Use only for service internal associations. For cross service associations, use the [@EntityRelationship Vocabulary](./entity-relationship) instead. | +| [@ObjectModel.text.element](#objectmodeltextelement) | Type | The property contains element(s) containing a text for the annotated (id)element | +| [@ObjectModel.text.association](#objectmodeltextassociation) | Type | The element is of type cds.association, which points to an entity containing (language-dependent) texts for the annotated (id) element | +| [@ObjectModel.usageType.sizeCategory](#objectmodelusagetypesizecategory) | Entity | The size category enables the consumer to judge the possible result data set size.
It is a pure estimation at design time while modeling the entity what the data set size would be at runtime.
It reflects the set of data which has to be searched through to compute for example a count(*) of the data.

The labels correspond to the following size categories (expected number of rows at production customers):
- S: less than 1000
- M: less than 100.000
- L: less than 10.000.000
- XL: less than 100.000.000
- XXL: more than 100.000.000 | + +### @ObjectModel.compositionRoot + +Entity is the root of a compositional hierarchy. + +**Type:** boolean
+**Default Value**: `true`
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @ObjectModel.representativeKey + +In case of multiple key elements: key element which represents the entity (in the sense that the entity itself is the list of values for this key element) + +**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
+**Scope:** Entity, Service
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition) + +### @ObjectModel.semanticKey + +The property contains element(s) which shall be used to display the key in UIs (instead of the technical key). + +**Type:** Array<[Element Reference](../spec-v1/csn-interop-effective#element-reference)>
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition) + +### @ObjectModel.modelingPattern + +The property declares the modeling pattern applied in this entity definition. + +**Type**: Object(#) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"DATA_STRUCTURE"`
  • `"LANGUAGE_DEPENDENT_TEXT"`
  • `"UNIT_CONVERSION_RATE"`
  • `"VALUE_HELP_PROVIDER"`
  • `"COLLECTIVE_VALUE_HELP"`
  • `"DERIVATION_FUNCTION"`
  • `"PARENT_CHILD_HIERARCHY_NODE_PROVIDER"`
  • `"ENTERPRISE_SEARCH_PROVIDER"`
  • `"TRANSACTIONAL_INTERFACE"`
  • `"TRANSACTIONAL_QUERY"`
  • `"ANALYTICAL_QUERY"`
  • `"ANALYTICAL_DOCUMENT_STORE"`
  • `"ANALYTICAL_CUBE"`
  • `"ANALYTICAL_DIMENSION"`
  • `"ANALYTICAL_FACT"`
  • `"ANALYTICAL_PARENT_CHILD_HIERARCHY_NODE"`
  • `"ANALYTICAL_KPI"`
  • `"OUTPUT_FORM_DATA_PROVIDER"`
  • `"OUTPUT_EMAIL_DATA_PROVIDER"`
  • `"OUTPUT_PARAMETER_DETERMINATION_DATA_SOURCE"`
  • `"SITUATION_ANCHOR"`
  • `"SITUATION_TRIGGER"`
  • `"SITUATION_DATACONTEXT"`
  • `"EXTERNAL_DATA_PROVIDER"`
  • `"NONE"`
| + + +###### Example Values: + + +```js +{ + "#": "DATA_STRUCTURE" +} +``` + + +### @ObjectModel.supportedCapabilities + +The property declares the supported usage type for this entity in the context of consuming data models. + +**Type:** Array<[Supported Capabilities Enum Value](#supported-capabilities-enum-value)>
+**Scope:** Entity, Service
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition) + +### @ObjectModel.foreignKey.association + +The element is of type `cds.Association` which points to the list of values. + +Use only for service internal associations. For cross service associations, use the [@EntityRelationship Vocabulary](./entity-relationship) instead. + +**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition) + +### @ObjectModel.text.element + +The property contains element(s) containing a text for the annotated (id)element + +**Type:** Array<[Element Reference](../spec-v1/csn-interop-effective#element-reference)>
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition) +###### Example Values: + + +```js +[ + "BillingDocumentTypeName" +] +``` + + + +### @ObjectModel.text.association + +The element is of type cds.association, which points to an entity containing (language-dependent) texts for the annotated (id) element + +**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition) + +### @ObjectModel.usageType.sizeCategory + +The size category enables the consumer to judge the possible result data set size. +It is a pure estimation at design time while modeling the entity what the data set size would be at runtime. +It reflects the set of data which has to be searched through to compute for example a count(*) of the data. + +The labels correspond to the following size categories (expected number of rows at production customers): +- S: less than 1000 +- M: less than 100.000 +- L: less than 10.000.000 +- XL: less than 100.000.000 +- XXL: more than 100.000.000 + +**Type**: Object(#) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"S"`
  • `"M"`
  • `"L"`
  • `"XL"`
  • `"XXL"`
| + + +###### Example Values: + + +```js +{ + "#": "XL" +} +``` + + +### Supported Capabilities Enum Value + +**Type**: Object(#) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
#
MANDATORY
|
string
|
The entry declares one supported usage type.
**Allowed Values**:
  • `"SQL_DATA_SOURCE"`
  • `"CDS_MODELING_DATA_SOURCE"`
  • `"CDS_MODELING_ASSOCIATION_TARGET"`
  • `"DATA_STRUCTURE"`
  • `"LANGUAGE_DEPENDENT_TEXT"`
  • `"UNIT_CONVERSION_RATE"`
  • `"VALUE_HELP_PROVIDER"`
  • `"COLLECTIVE_VALUE_HELP"`
  • `"EXTRACTION_DATA_SOURCE"`
  • `"DERIVATION_FUNCTION"`
  • `"PARENT_CHILD_HIERARCHY_NODE_PROVIDER"`
  • `"SEARCHABLE_ENTITY"`
  • `"ENTERPRISE_SEARCH_PROVIDER"`
  • `"TRANSACTIONAL_PROVIDER"`
  • `"ANALYTICAL_QUERY"`
  • `"ANALYTICAL_DOCUMENT_STORE"`
  • `"ANALYTICAL_DIMENSION"`
  • `"ANALYTICAL_PROVIDER"`
  • `"ANALYTICAL_PARENT_CHILD_HIERARCHY_NODE"`
  • `"ANALYTICAL_KPI"`
  • `"OUTPUT_FORM_DATA_PROVIDER"`
  • `"OUTPUT_EMAIL_DATA_PROVIDER"`
  • `"OUTPUT_PARAMETER_DETERMINATION_DATA_SOURCE"`
  • `"SITUATION_ANCHOR"`
  • `"SITUATION_TRIGGER"`
  • `"SITUATION_DATACONTEXT"`
  • `"KEY_USER_COPYING_TEMPLATE"`
  • `"EXTERNAL_DATA_PROVIDER"`
  • `"ODM_COMPLIANT_PROVIDER"`
  • `"UI_PROVIDER_PROJECTION_SOURCE"`
| + diff --git a/docs/annotations/odm.md b/docs/annotations/odm.md new file mode 100644 index 00000000..f0ff620f --- /dev/null +++ b/docs/annotations/odm.md @@ -0,0 +1,50 @@ +--- +title: "@ODM" +sidebar_position: "8" +description: "@ODM for One Domain Model (ODM) related annotations." +--- + +> STABLE This annotation can be used productively. + +## Introduction + +Annotations of the one domain model allow specifying entities and their elements to make them ODM compliant accordingly to ODM Compliance rules. + +> 🔗 For more background, see blog post: [Harnessing Half a Century of Knowledge: SAP's Journey of Enriching APIs with Business Metadata](https://community.sap.com/t5/technology-blogs-by-sap/harnessing-half-a-century-of-knowledge-sap-s-journey-of-enriching-apis-with/ba-p/13578364) + +## Schema Definitions + +* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). +* The interface is available as JSON Schema: [odm.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/odm.schema.json#). + +### Annotations Overview + +| Annotation | Scope | Description | +| -------- | ---- | ----------- | +| [@ODM.entityName](#odmentityname) | Entity | The entity represents an ODM Entity with this official name. | +| [@ODM.oid](#odmoid) | Entity | The annotation references the element which contains the oid. | +| [@ODM.oidReference.entityName](#odmoidreferenceentityname) | Type | The property contains an OID for the ODM Entity with this official name | + +### @ODM.entityName + +The entity represents an ODM Entity with this official name. + +**Type:** string
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @ODM.oid + +The annotation references the element which contains the oid. + +**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @ODM.oidReference.entityName + +The property contains an OID for the ODM Entity with this official name + +**Type:** string
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) diff --git a/docs/annotations/personal-data.md b/docs/annotations/personal-data.md new file mode 100644 index 00000000..356eb56b --- /dev/null +++ b/docs/annotations/personal-data.md @@ -0,0 +1,95 @@ +--- +title: "@PersonalData" +sidebar_position: "9" +description: "@PersonalData to annotate DPP relevant information." +--- + +> STABLE This annotation can be used productively. + +## Introduction + +The processing of personal data is key in business processes. SAP's products must enable our customers to operate their applications in compliance with data protection laws. One way of enabling is applying DPP-related annotations. Via those annotations the specific DPP-related behavior can be enabled by the consumers. The annotations are derived from existing personal data annotations in OData and OpenAPI. + +## Notational Conventions + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", +"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be +interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119). + +## Related Links + +- OData personal data vocabulary: [PersonalData](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/PersonalData.md) +- OpenAPI: [Extensions](https://github.com/SAP/openapi-specification/tree/main/sap-extensions) + +## Schema Definitions + +* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). +* The interface is available as JSON Schema: [personal-data.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/personal-data.schema.json#). + +### Annotations Overview + +| Annotation | Scope | Description | +| -------- | ---- | ----------- | +| [@PersonalData.entitySemantics](#personaldataentitysemantics) | Entity | Primary meaning of the entities in the annotated entity set. Entities annotated with @PersonalData.entitySemantics are synonymous to @PersonalData.isPotentiallyPersonal. | +| [@PersonalData.dataSubjectRole](#personaldatadatasubjectrole) | Entity | Role of the data subjects in this set (e.g. employee, customer). Values are application-specific. | +| [@PersonalData.dataSubjectRoleDescription](#personaldatadatasubjectroledescription) | Entity | Language-dependent description of the role of the data subjects in this set (e.g. employee, customer). Values are application-specific. | +| [@PersonalData.fieldSemantics](#personaldatafieldsemantics) | Type | Primary meaning of the personal data contained in the annotated property. Changes to values of annotated properties are tracked in the audit log. Use this annotation also on fields that are already marked as contact or address data. Properties annotated with fieldSemantics need not be additionally annotated with @PersonalData.isPotentiallyPersonal. | +| [@PersonalData.isPotentiallyPersonal](#personaldataispotentiallypersonal) | Type | Property contains potentially personal data. Properties annotated with `@PersonalData.fieldSemantics` need not be additionally annotated with this annotation. Personal data describes any information which is related to an identified or identifiable natural person (data subject). An identifiable person is one who can be identified, directly or indirectly, in particular by a 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. | +| [@PersonalData.isPotentiallySensitive](#personaldataispotentiallysensitive) | Type | Property contains potentially sensitive personal data. Sensitive personal data is a category of personal data that needs special handling. The determination which personal data is sensitive may differ for different legal areas or industries.
Examples of sensitive personal data:
- Special categories of personal data, such as data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, trade union membership, genetic data, biometric data, data concerning health or sex life or sexual orientation.
- Personal data subject to professional secrecy
- Personal data relating to criminal or administrative offenses
- Personal data concerning insurances and bank or credit card accounts | + +### @PersonalData.entitySemantics + +Primary meaning of the entities in the annotated entity set. Entities annotated with @PersonalData.entitySemantics are synonymous to @PersonalData.isPotentiallyPersonal. + +**Type:** string
+**Allowed Values**:
  • `"DataSubject"`: Describes a data subject, for example, a customer or vendor.

  • `"DataSubjectDetails"`: Describes entities that contain details for a data subject, for example an address.

  • `"Other"`: Entities that contain personal data or references to data subjects but do not represent data subjects or details itself. For example: customer quote, customer order, or purchase order.

+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @PersonalData.dataSubjectRole + +Role of the data subjects in this set (e.g. employee, customer). Values are application-specific. + +**Type:** string
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @PersonalData.dataSubjectRoleDescription + +Language-dependent description of the role of the data subjects in this set (e.g. employee, customer). Values are application-specific. + +**Type:** string
+**Scope:** Entity
+**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) + +### @PersonalData.fieldSemantics + +Primary meaning of the personal data contained in the annotated property. Changes to values of annotated properties are tracked in the audit log. Use this annotation also on fields that are already marked as contact or address data. Properties annotated with fieldSemantics need not be additionally annotated with @PersonalData.isPotentiallyPersonal. + +**Type:** string
+**Allowed Values**:
  • `"DataSubjectID"`: Identifies the data subject unique key or references it.

  • `"DataSubjectIDType"`: The type describing the DataSubjectID identifying the data subject, e.g., an e-mail address, semantic of the ID or a customer.

  • `"ConsentID"`: The unique identifier for a consent. A consent is an action of data subjects confirming that the usage of their personal data shall be allowed for a given purpose. A consent functionality allows the storage of a consent record in relation to a specific purpose and shows if a data subject has granted, withdrawn, or denied consent.

  • `"PurposeID"`: The unique identifier for the purpose of processing of personal data. Any processing of personal data is based on specified, explicit, and legitimate purposes and not further processed in a manner that is incompatible with those purposes. The purpose is defined by the data controller or joint data controllers.

  • `"ContractRelatedID"`: The unique identifier for transactional data that is related to a contract that requires processing of personal data. For example, Sales Contract ID, Purchase Contract ID, or Service Contract ID.

  • `"DataControllerID"`: The unique identifier of a legal entity which alone or jointly with others determines the purposes and means of the processing of personal data. The Data Controller is fully responsible (and accountable) that data protection and privacy principles (such as purpose limitation or data minimization), defined in the European General Data Protection Regulation (GDPR) or any other data protection legislation, are adhered to when processing personal data. The DataControllerID succeeds the LegalEntityID.

  • `"UserID"`: The unique identifier of a user. A user is an individual who interacts with the services supplied by a system.

  • `"EndOfBusinessDate"`: Defines the end of active business and the start of residence time and retention period. End of business is the point in time when the processing of a set of personal data is no longer required for the active business, for example, when a contract is fulfilled. After it has been reached and a customer-defined residence period has passed, the data is blocked and can only be accessed by users with special authorizations (for example, tax auditors). All fields of type Edm.Date or Edm.DateTimeOffset on which the end of business determination depends should be annotated.

  • `"BlockingDate"`: Defines a date that marks when the provider of the data will block these. This is the point in time when the processing of a set of personal data is no longer required for the active business, for example, when a contract is fulfilled. After it has been reached, the data is blocked in the source and can only be displayed by users with special authorizations (for example, tax auditors); however, it is not allowed to create/change/copy/follow-up blocked data. Consumers of the data should consider if there is an additional purpose to process the data beyond the defined blocking date

  • `"EndOfRetentionDate"`: Defines a date that marks when the provider of the data can destroy these. Consumers of the data should consider if there is an additional purpose (or a legal hold) to process the data beyond the defined destruction date.

+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @PersonalData.isPotentiallyPersonal + +Property contains potentially personal data. Properties annotated with `@PersonalData.fieldSemantics` need not be additionally annotated with this annotation. Personal data describes any information which is related to an identified or identifiable natural person (data subject). An identifiable person is one who can be identified, directly or indirectly, in particular by a 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. + +**Type:** boolean
+**Default Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @PersonalData.isPotentiallySensitive + +Property contains potentially sensitive personal data. Sensitive personal data is a category of personal data that needs special handling. The determination which personal data is sensitive may differ for different legal areas or industries. +Examples of sensitive personal data: +- Special categories of personal data, such as data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, trade union membership, genetic data, biometric data, data concerning health or sex life or sexual orientation. +- Personal data subject to professional secrecy +- Personal data relating to criminal or administrative offenses +- Personal data concerning insurances and bank or credit card accounts + +**Type:** boolean
+**Default Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) diff --git a/docs/annotations/semantics.md b/docs/annotations/semantics.md new file mode 100644 index 00000000..daf79bb6 --- /dev/null +++ b/docs/annotations/semantics.md @@ -0,0 +1,340 @@ +--- +title: "@Semantics" +sidebar_position: "10" +description: "@Semantics annotations." +--- + +> BETA This annotation is beta and should be reviewed for completion and correctness. + +## Introduction + +The Core engines both on provision- and consumption-side need besides technical metadata also additional semantics for optimized processing. +These additional semantics are defined for data processing, analytics and data consumption. + +## Schema Definitions + +* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). +* The interface is available as JSON Schema: [semantics.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/semantics.schema.json#). + +### Annotations Overview + +| Annotation | Scope | Description | +| -------- | ---- | ----------- | +| [@Semantics.valueRange](#semanticsvaluerange) | IntegerType, Integer64Type, DecimalType, DoubleType | Informs consumers about the value range of a CDS element, allowing to specify minimal and/or maximal values, and indicate whether these are exclusive or inclusive.
This value range can be used for client-side validation of user input. | +| [@Semantics.currencyCode](#semanticscurrencycode) | Type | The property contains a currency code. | +| [@Semantics.amount.currencyCode](#semanticsamountcurrencycode) | Type | The element contains an amount.
The annotation points to an element containing the currency code. | +| [@Semantics.unitOfMeasure](#semanticsunitofmeasure) | Type | The element contains a unit of measure. | +| [@Semantics.quantity.unitOfMeasure](#semanticsquantityunitofmeasure) | Type | The element contains a quantity.
The annotation points to an element containing the unit of measure. | +| [@Semantics.calendar.dayOfMonth](#semanticscalendardayofmonth) | Type | The element states the day of month. | +| [@Semantics.calendar.dayOfYear](#semanticscalendardayofyear) | Type | The element states the day of year. | +| [@Semantics.calendar.week](#semanticscalendarweek) | Type | The element states the calendar week. | +| [@Semantics.calendar.month](#semanticscalendarmonth) | Type | The element states the calendar month. | +| [@Semantics.calendar.quarter](#semanticscalendarquarter) | Type | The element states the calendar quarter. | +| [@Semantics.calendar.halfyear](#semanticscalendarhalfyear) | Type | The element states the calendar halfyear. | +| [@Semantics.calendar.year](#semanticscalendaryear) | Type | The element states the calendar year. | +| [@Semantics.calendar.yearWeek](#semanticscalendaryearweek) | Type | The element states the calendar year week. | +| [@Semantics.calendar.yearMonth](#semanticscalendaryearmonth) | Type | The element states the calendar year month. | +| [@Semantics.calendar.yearQuarter](#semanticscalendaryearquarter) | Type | The element states the calendar year quarter. | +| [@Semantics.calendar.yearHalfyear](#semanticscalendaryearhalfyear) | Type | The element states the calendar year halfyear. | +| [@Semantics.fiscal.yearVariant](#semanticsfiscalyearvariant) | Type | The element states the calendar year variant. | +| [@Semantics.fiscal.period](#semanticsfiscalperiod) | Type | The element states the fiscal period. | +| [@Semantics.fiscal.year](#semanticsfiscalyear) | Type | The element states the fiscal year. | +| [@Semantics.fiscal.yearPeriod](#semanticsfiscalyearperiod) | Type | The element states the fiscal year period. | +| [@Semantics.fiscal.quarter](#semanticsfiscalquarter) | Type | The element states the fiscal quarter. | +| [@Semantics.fiscal.yearQuarter](#semanticsfiscalyearquarter) | Type | The element states the fiscal year quarter. | +| [@Semantics.fiscal.week](#semanticsfiscalweek) | Type | The element states the fiscal week. | +| [@Semantics.fiscal.yearWeek](#semanticsfiscalyearweek) | Type | The element states the fiscal year week. | +| [@Semantics.fiscal.dayOfYear](#semanticsfiscaldayofyear) | Type | The element states the fiscal day of year. | +| [@Semantics.language](#semanticslanguage) | Type | The property contains a language code. | +| [@Semantics.time](#semanticstime) | Type | This annotation is used to indicate a date semantic for the NVARCHAR-based ABAP type TIMS. | +| [@Semantics.text](#semanticstext) | Type | The property contains a human-readable text. | +| [@Semantics.uuid](#semanticsuuid) | Type | Tags a field containing a GUID in RAW16 or CHAR32 format.

It is RECOMMENDED to explicitly use the `csd.UUID` type. | +| [@Semantics.businessDate.from](#semanticsbusinessdatefrom) | Type | The property contains a date which is the lower boundary of a (validity) interval (for time dependent master data). | +| [@Semantics.businessDate.to](#semanticsbusinessdateto) | Type | The property contains a date which is the upper boundary of a (validity) interval (for time dependent master data). | + +### @Semantics.valueRange + +Informs consumers about the value range of a CDS element, allowing to specify minimal and/or maximal values, and indicate whether these are exclusive or inclusive. +This value range can be used for client-side validation of user input. + +**Type**: Object(minimum, exclusiveMinimum, maximum, exclusiveMaximum) + +| Property | Type | Description | +| -------- | ---- | ----------- | +|
minimum
OPTIONAL
|
string
|
Specifies the minimum value.
| +|
exclusiveMinimum
OPTIONAL
|
boolean
|
Specifies if the lower boundary should be excluded.
Not specifying this annotation means that the lower boundary is included.
**Default Value**: `false`
| +|
maximum
OPTIONAL
|
string
|
Specifies the maximum value.
| +|
exclusiveMaximum
OPTIONAL
|
boolean
|
Specifies if the upper boundary should be excluded.
Not specifying this annotation means that the upper boundary is included.
**Default Value**: `false`
| + + +### @Semantics.currencyCode + +The property contains a currency code. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.amount.currencyCode + +The element contains an amount. +The annotation points to an element containing the currency code. + +**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.unitOfMeasure + +The element contains a unit of measure. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.quantity.unitOfMeasure + +The element contains a quantity. +The annotation points to an element containing the unit of measure. + +**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.dayOfMonth + +The element states the day of month. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.dayOfYear + +The element states the day of year. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.week + +The element states the calendar week. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.month + +The element states the calendar month. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.quarter + +The element states the calendar quarter. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.halfyear + +The element states the calendar halfyear. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.year + +The element states the calendar year. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.yearWeek + +The element states the calendar year week. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.yearMonth + +The element states the calendar year month. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.yearQuarter + +The element states the calendar year quarter. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.calendar.yearHalfyear + +The element states the calendar year halfyear. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.fiscal.yearVariant + +The element states the calendar year variant. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.fiscal.period + +The element states the fiscal period. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.fiscal.year + +The element states the fiscal year. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.fiscal.yearPeriod + +The element states the fiscal year period. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.fiscal.quarter + +The element states the fiscal quarter. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.fiscal.yearQuarter + +The element states the fiscal year quarter. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.fiscal.week + +The element states the fiscal week. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.fiscal.yearWeek + +The element states the fiscal year week. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.fiscal.dayOfYear + +The element states the fiscal day of year. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.language + +The property contains a language code. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.time + +This annotation is used to indicate a date semantic for the NVARCHAR-based ABAP type TIMS. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.text + +The property contains a human-readable text. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.uuid + +Tags a field containing a GUID in RAW16 or CHAR32 format. + +It is RECOMMENDED to explicitly use the `csd.UUID` type. + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.businessDate.from + +The property contains a date which is the lower boundary of a (validity) interval (for time dependent master data). + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) + +### @Semantics.businessDate.to + +The property contains a date which is the upper boundary of a (validity) interval (for time dependent master data). + +**Type:** boolean
+**Constant Value**: `true`
+**Scope:** Type
+**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) From 18e503e54770aff801d4ea453bdb5aa41cc4be41 Mon Sep 17 00:00:00 2001 From: Simon Heimler Date: Wed, 2 Apr 2025 09:47:05 +0200 Subject: [PATCH 2/3] Remove accidental commit of generated files --- docs/annotations/aggregation.md | 56 -- docs/annotations/analytics-details.md | 53 -- docs/annotations/consumption.md | 131 ---- docs/annotations/enduser-text.md | 118 ---- docs/annotations/entity-relationship.md | 805 ------------------------ docs/annotations/object-model.md | 172 ----- docs/annotations/objectmodel.md | 158 ----- docs/annotations/odm.md | 50 -- docs/annotations/personal-data.md | 95 --- docs/annotations/semantics.md | 340 ---------- 10 files changed, 1978 deletions(-) delete mode 100644 docs/annotations/aggregation.md delete mode 100644 docs/annotations/analytics-details.md delete mode 100644 docs/annotations/consumption.md delete mode 100644 docs/annotations/enduser-text.md delete mode 100644 docs/annotations/entity-relationship.md delete mode 100644 docs/annotations/object-model.md delete mode 100644 docs/annotations/objectmodel.md delete mode 100644 docs/annotations/odm.md delete mode 100644 docs/annotations/personal-data.md delete mode 100644 docs/annotations/semantics.md diff --git a/docs/annotations/aggregation.md b/docs/annotations/aggregation.md deleted file mode 100644 index 1d181d09..00000000 --- a/docs/annotations/aggregation.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: "@Aggregation" -sidebar_position: "2" -description: "@Aggregation annotations." ---- - -> BETA This annotation is beta and should be reviewed for completion and correctness. - -## Introduction - -When purely relying on standard SQL, the developer/provider of a view needs to decide explicitly within the view definition, if the view should deliver aggregated results or single records. This definition cannot be overwritten by the consumer of the view. - -In some scenarios a more flexible behavior is desired, in a sense that the view definition doesn’t restrict its invocation either to delivering single records or aggregated results. This decision should be left to the consumer of the view who has explicit means in the CDS Query Language to express which behavior should be applied. This approach also allows avoiding the usage of the implicit aggregation behavior of the Calc Engine. - -To support those kinds of scenarios, the view developer - -- defines the “core” view definition (= the parts being described via a QL-Query) in a way that it returns single records (when the view is consumed via “aggregation-free” QL-statements) and -- adds dedicated annotations to the elements in the projection list that define which aggregation behavior should be applied when the consumer wants to get aggregated results from the view. - -## Schema Definitions - -* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). -* The interface is available as JSON Schema: [aggregation.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/aggregation.schema.json#). - -### Annotations Overview - -| Annotation | Scope | Description | -| -------- | ---- | ----------- | -| [@Aggregation.default](#aggregationdefault) | Type | The element shall per default be aggregated using the annotated SQL aggregate function.

The chosen value defines which aggregation semantics should be applied.
The aggregation types SUM, MAX, MIN, NOP are only allowed for elements with numeric type

> ℹ️ Note: There is an semantically equivalent annotation `@DefaultAggregation`, which is now obsolete.
> As consumers are not expected to interpret `@DefaultAggregation`, providers shall consistently adopt `@Aggregation.default` for interoperability. | - -### @Aggregation.default - -The element shall per default be aggregated using the annotated SQL aggregate function. - -The chosen value defines which aggregation semantics should be applied. -The aggregation types SUM, MAX, MIN, NOP are only allowed for elements with numeric type - -> ℹ️ Note: There is an semantically equivalent annotation `@DefaultAggregation`, which is now obsolete. -> As consumers are not expected to interpret `@DefaultAggregation`, providers shall consistently adopt `@Aggregation.default` for interoperability. - -**Type**: Object(#) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"NONE"`: Indicates that the element is not a measure.
    Usually these elements are used in filters and GROUP BY-statements. Should not be used explicit.
    It is the default for all elements which can be mapped to a dimension.

  • `"SUM"`: Correspond to the standard SQL aggregation type.

  • `"MIN"`: Correspond to the standard SQL aggregation type.

  • `"MAX"`: Correspond to the standard SQL aggregation type.

  • `"AVG"`: Correspond to the standard SQL aggregation type.

  • `"COUNT_DISTINCT"`: Counts the number of distinct values of the element specified with `@Aggregation.referenceElement`.

    > TODO: `@Aggregation.referenceElement` is not yet documented here.

  • `"NOP"`: Returns a value, if it is unique; otherwise it returns a special error value. It is the default in views with Analytics.dataCategory CUBE, FACT, and DIMENSION, if the data type of the element is numeric.

  • `"FORMULA"`: The element is a formula which has to be calculated after the operands have been determined by aggregation or calculation. It should never be aggregated. If the element is not a formula, then this value must not be used. It is only supported in analytical queries. Example: Margin : = Revenue / Cost. If in a report Margin should be shown per OrgUnit, then first the aggregates of Revenue and Cost have to be de-termined per OrgUnit and then the Margin has to be calculated per OrgUn-it. The Margin for the company is not the aggregate of the Margin per Or-gUnit but has to be calculated separately by Revenue for all OrgUnits divided by the Costs for all OrgUnits.

| - - -###### Example Values: - - -```js -{ - "#": "SUM" -} -``` - diff --git a/docs/annotations/analytics-details.md b/docs/annotations/analytics-details.md deleted file mode 100644 index 29617d30..00000000 --- a/docs/annotations/analytics-details.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "@AnalyticsDetails" -sidebar_position: "3" -description: "@AnalyticsDetails for data analytics use cases." ---- - -> BETA This annotation is beta and should be reviewed for completion and correctness. - -## Introduction - -Analytical consumption requires additional, specific semantics, which indicate how to map a relational model to the Analytical meta model, using terms like "Facts", "Dimensions", "Measures", "Cubes", "Queries" and "KPIs". - -On entity level these fundamental semantics are mainly captured via the annotations `@ObjectModel.modelingPattern` (design time hints; esp. #ANALYTICAL_FACT, #ANALYTICAL_DIMENSION, #ANALYTICAL_CUBE, #ANALYTICAL_QUERY), and `@ObjectModel.supportedCapabilities` (deployment/runtime hints; esp. #ANALYTICAL_DIMENSION, #ANALYTICAL_PROVIDER, #ANALYTICAL_QUERY). - -The annotation `@AnalyticsDetails` captures specific analytical semantics on element level. -We recommend to consistently use the annotations in combination with the above-mentioned analytical modeling patterns and supported capabilities on entity level. - -The most fundamental analytical specialization is to declare which elements represent a measure. -Because measures shall be aggregated in Analytical processing, all elements with a default aggregation annotation are candidates to be used as measures in Analytics. -Measures are further categorized into base, restricted and calculated measures. -Restricted and calculated measures shall be specifically treated by an Analytic Engine (esp. by MDS in HANA Cloud), whereas base measures have standard SQL semantics. - -## Schema Definitions - -* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). -* The interface is available as JSON Schema: [analytics-details.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/analytics-details.schema.json#). - -### Annotations Overview - -| Annotation | Scope | Description | -| -------- | ---- | ----------- | -| [@AnalyticsDetails.measureType](#analyticsdetailsmeasuretype) | Type | Specifies in which way a measure should treated. | - -### @AnalyticsDetails.measureType - -Specifies in which way a measure should treated. - -**Type**: Object(#) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"BASE"`: Measure from the provider.

  • `"RESTRICTION"`: Restricted measure.

  • `"CALCULATION"`: Calculated measure (formula).

| - - -###### Example Values: - - -```js -{ - "#": "BASE" -} -``` - diff --git a/docs/annotations/consumption.md b/docs/annotations/consumption.md deleted file mode 100644 index 4a74e592..00000000 --- a/docs/annotations/consumption.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: "@Consumption" -sidebar_position: "4" -description: "@Consumption annotations." ---- - -> BETA This annotation is beta and should be reviewed for completion and correctness. - -## Introduction - -Via those Annotations the specific behavior is defined which is related to the consumption of CDS content via domain-specific frameworks. This metadata makes no assumptions on the concrete consumption technology/infrastructure but is applicable across multiple consumption technologies (Analytics, OData, …). - -## Schema Definitions - -* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). -* The interface is available as JSON Schema: [consumption.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/consumption.schema.json#). - -### Annotations Overview - -| Annotation | Scope | Description | -| -------- | ---- | ----------- | -| [@Consumption.valueHelpDefinition](#consumptionvaluehelpdefinition) | Entity, Type | The property defines how value helps for this element shall be constructed.

It allows to associate a (set of) View/Entity that provides the "Value Help" for the annotated field or parameter.
This is achieved by either referencing the target view/entity of a modelled association or by directly establishing a relationship to view/entity that shall act as a value help provider. | - -### @Consumption.valueHelpDefinition - -The property defines how value helps for this element shall be constructed. - -It allows to associate a (set of) View/Entity that provides the "Value Help" for the annotated field or parameter. -This is achieved by either referencing the target view/entity of a modelled association or by directly establishing a relationship to view/entity that shall act as a value help provider. - -**Type:** Array<[Consumption Value Help Definition](#consumption-value-help-definition)>
-**Scope:** Entity, Type
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### Consumption Value Help Definition - -**Type**: Object(entity, additionalBinding, association, distinctValues) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
entity
OPTIONAL
|
[Consumption Value Help Definition](#consumption-value-help-definition)
|
Value help defining view or entity.
| -|
additionalBinding
OPTIONAL
|
Array<[Additional Binding](#additional-binding)>
|
Additional bindings for filtering the value help result list.
| -|
association
OPTIONAL
|
[Element Reference](../spec-v1/csn-interop-effective#element-reference)
|
Reference to the modelled association (in local entity) for which the target view represents the value help providing view or entity for the annotated local field. The on-condition of the association may only contain bindings of the source and target fields that use an equal operator. All these bindings are automatically considered by the value help for both filter and result mappings.
Mutually exclusive to the usage of `valueHelpDefinition.entity`.
| -|
distinctValues
OPTIONAL
|
boolean
|
Specifies whether the value help result list shall only contain distinct values for the annotated field or parameter.
If set to true all mappings will be used for filtering, but only the value for the field/parameter which the value help was requested for will be returned by the value help.
**Default Value**: `true`
| - - -###### Example Values: - - -```js -{ - "entity": { - "name": "I_ControllingAreaStdVH", - "element": "ControllingArea" - } -} -``` - - -```js -{ - "entity": { - "name": "I_CostCenterStdVH", - "element": "CostCenter" - }, - "additionalBinding": [ - { - "localElement": "ControllingArea", - "element": "ControllingArea" - } - ] -} -``` - - -```js -{ - "association": { - "=": "to_Airline" - } -} -``` - - -### Consumption Value Help Definition - -Value help defining view or entity. - -**Type**: Object(name, element) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
name
OPTIONAL
|
string
|
Name of the value help providing view or entity
| -|
element
OPTIONAL
|
string
|
Name of the field of the value help view or entity, which the annotated local field or parameter is bound to.

Mutually exclusive to the usage of `valueHelpDefinition.association`.
| - - -### Additional Binding - -Allows to define additional bindings (besides the ones defined by `valueHelpDefinition.association` or `valueHelpDefinition.entity`) for filtering the value help result list and/or returning values from the selected value help record. - -**Type**: Object(localElement, element, usage) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
localElement
OPTIONAL
|
string
|
Field of the current view/entity; mutually exclusive to the usage of `localParameter`.
| -|
element
OPTIONAL
|
string
|
Name of the field of the value help view or entity, which the annotated local field or parameter is bound to.
| -|
usage
OPTIONAL
|
[@Consumption.ConsumptionValueHelpDefinition.AdditionalBinding.Usage](#consumptionconsumptionvaluehelpdefinitionadditionalbindingusage)
|
The binding may either specify an additional filter-criterion on the value help list (`#FILTER`), or an additional result mapping for the selected value help record (`#RESULT`) or a combination thereof (`#FILTER_AND_RESULT`).
If not specified explicitly the usage is `#FILTER_AND_RESULT`.
If distinctValues is set to true, additional bindings must specify the usage as `#FILTER`.
| - - -### @Consumption.ConsumptionValueHelpDefinition.AdditionalBinding.Usage - -The binding may either specify an additional filter-criterion on the value help list (`#FILTER`), or an additional result mapping for the selected value help record (`#RESULT`) or a combination thereof (`#FILTER_AND_RESULT`). -If not specified explicitly the usage is `#FILTER_AND_RESULT`. -If distinctValues is set to true, additional bindings must specify the usage as `#FILTER`. - -**Type**: Object(#) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Default Value**: `FILTER_AND_RESULT`
**Allowed Values**:
  • `"FILTER"`
  • `"RESULT"`
  • `"FILTER_AND_RESULT"`
| - - -###### Example Values: - - -```js -{ - "#": "FILTER_AND_RESULT" -} -``` - diff --git a/docs/annotations/enduser-text.md b/docs/annotations/enduser-text.md deleted file mode 100644 index 0887eb11..00000000 --- a/docs/annotations/enduser-text.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: "@EndUserText" -sidebar_position: "5" -description: "@EndUserText annotations for end user UIs." ---- - -> BETA This annotation is beta and should be reviewed for completion and correctness. - -## Introduction - -To allow an intuitive consumption of the data model in (End User) UIs, further metadata needs to be defined which helps the end user to understand the semantics of the underlying data model artifacts. Depending on the concrete context different types of UI texts are required. The UI text is displayed on the screen in the logon language of the user (if the text was translated into this language). - -### Reference i18n keys - -In the `@EndUserText` annotations it is also possible to reference [i18n](../spec-v1/csn-interop-effective#i18n) entries that are embedded into the CSN document. -In this case, the string has to include `{i18n>` as a prefix, then the key and end with `}` - -Example: `{i18n>AD01PROFNR@ENDUSERTEXT.HEADING}` - -## Schema Definitions - -* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). -* The interface is available as JSON Schema: [enduser-text.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/enduser-text.schema.json#). - -### Annotations Overview - -| Annotation | Scope | Description | -| -------- | ---- | ----------- | -| [@EndUserText.label](#endusertextlabel) | Entity, Type, Service, Context, EnumDictionaryEntry | The property contains a human-readable text to be displayed on UIs (besides or instead of the technical name).

Corresponds to CAP CDS `@title` annotation. | -| [@EndUserText.heading](#endusertextheading) | Type | Defines a human-readable text that is displayed as column headers. | -| [@EndUserText.quickInfo](#endusertextquickinfo) | Entity, Type, Service, Context, EnumDictionaryEntry | Defines a human-readable text that provides additional information compared to the label text.
The quickInfo is used for accessibility hints or the "Mouse over" function.

Corresponds to CAP CDS `@description` annotation. | - -### @EndUserText.label - -The property contains a human-readable text to be displayed on UIs (besides or instead of the technical name). - -Corresponds to CAP CDS `@title` annotation. - -**Type:** string
-**Scope:** Entity, Type, Service, Context, EnumDictionaryEntry
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition), [ContextDefinition](../spec-v1/csn-interop-effective#context-definition), [EnumDictionaryEntry](../spec-v1/csn-interop-effective#enum-dictionary-entry) -###### Example Values: - - -```js -"Sales Order Header" -``` - - -```js -"{i18n>AD01PROFNR@ENDUSERTEXT.LABEL}" -``` - - - -### @EndUserText.heading - -Defines a human-readable text that is displayed as column headers. - -**Type:** string
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @EndUserText.quickInfo - -Defines a human-readable text that provides additional information compared to the label text. -The quickInfo is used for accessibility hints or the "Mouse over" function. - -Corresponds to CAP CDS `@description` annotation. - -**Type:** string
-**Scope:** Entity, Type, Service, Context, EnumDictionaryEntry
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition), [ContextDefinition](../spec-v1/csn-interop-effective#context-definition), [EnumDictionaryEntry](../spec-v1/csn-interop-effective#enum-dictionary-entry) -###### Example Values: - - -```js -"Sales Order Header that contains data relevant for all items" -``` - - - -## Complete Examples - - -```js -{ - "csnInteropEffective": "1.0", - "$version": "2.0", - "definitions": { - "SalesOrderHeader": { - "kind": "type", - "type": "cds.String", - "@EndUserText.label": "Sales Order Header", - "@EndUserText.quickInfo": "Sales Order Header that contains data relevant for all items" - } - } -} -``` - - -```js -{ - "csnInteropEffective": "1.0", - "$version": "2.0", - "definitions": { - "AD01PROFNR": { - "kind": "type", - "type": "cds.String", - "length": 8, - "@EndUserText.heading": "{i18n>AD01PROFNR@ENDUSERTEXT.HEADING}", - "@EndUserText.label": "{i18n>AD01PROFNR@ENDUSERTEXT.LABEL}", - "@EndUserText.quickInfo": "{i18n>AD01PROFNR@ENDUSERTEXT.QUICKINFO}" - } - } -} -``` - diff --git a/docs/annotations/entity-relationship.md b/docs/annotations/entity-relationship.md deleted file mode 100644 index e632ee03..00000000 --- a/docs/annotations/entity-relationship.md +++ /dev/null @@ -1,805 +0,0 @@ ---- -title: "@EntityRelationship" -sidebar_position: "6" -description: "@EntityRelationship annotations for cross boundary Entity-Relationship IDs and associations." ---- - -> BETA This annotation is in **beta state**. Please give feedback if the annotations are correct and sufficient. - -## Introduction - -Modern business application suites handle thousands of different types of business data and consist of many applications or services. -Business data is heavily interconnected and dynamically evolves over time. - -It is not possible to put all data together into a single API covering all relations between data. On the contrary, many smaller APIs are easier to develop and maintain. -As a consequence, many relations between different types of data go across different APIs. -Additionally, the same type of data can be offered by different APIs, either in different API versions, technologies, or even hosted by different technical systems and providers. - -Therefore, independent concepts for types of data (so called [entity types](#entity-type)) and for their identifiers (via so called [property types](#property-type)) are needed, which can be used for the flexible definition of references and relations across the local boundary. - -Jump to [Concept Explanation](#concept-explanation) for more explanations. - -## Schema Definitions - -* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). -* The interface is available as JSON Schema: [entity-relationship.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/entity-relationship.schema.json#). - -### Annotations Overview - -| Annotation | Scope | Description | -| -------- | ---- | ----------- | -| [@EntityRelationship.entityType](#entityrelationshipentitytype) | Entity | Defines which [Entity Type](#entity-type) the current data object represents.

There could be several data objects that are assigned to the same Entity Type.
One data object can only have one Entity Type assigned, which corresponds to the applications own Entity Type definition. | -| [@EntityRelationship.propertyType](#entityrelationshippropertytype) | Type | Defines the logical [Property Type](#property-type) of a property.
The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID. | -| [@EntityRelationship.entityIds](#entityrelationshipentityids) | Entity | Defines a list of IDs, which are available to look up the Entity Type or create a reference to it.
An Entity Type can have multiple IDs:
* There can be **alternative IDs** that can also be used to create a reference to the Entity Type
* Some ID properties form a **composite ID** together and need to be combined to function as a unique ID for references
* This is indicated by a [`propertyTypes`](#property-type) array with more than one Property Type ID entry. | -| [@EntityRelationship.reference](#entityrelationshipreference) | Type | Defines references to other Entity Types based on a single ID. | -| [@EntityRelationship.compositeReferences](#entityrelationshipcompositereferences) | Entity | Defines one or many references to other Entity Types based on a composite IDs. | -| [@EntityRelationship.temporalIds](#entityrelationshiptemporalids) | Entity | Defines a list of temporal IDs | -| [@EntityRelationship.temporalReferences](#entityrelationshiptemporalreferences) | Entity | Defines a list of temporal references | -| [@EntityRelationship.referencesWithConstantIds](#entityrelationshipreferenceswithconstantids) | Entity | Defines one or many references to other Entity Types based on a composite IDs where some properties of the references are constant values. | - -### @EntityRelationship.entityType - -Defines which [Entity Type](#entity-type) the current data object represents. - -There could be several data objects that are assigned to the same Entity Type. -One data object can only have one Entity Type assigned, which corresponds to the applications own Entity Type definition. - -**Type:** string
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) -###### Example Values: - - -```js -"sap.vdm.sont:BillOfMaterial" -``` - - - -### @EntityRelationship.propertyType - -Defines the logical [Property Type](#property-type) of a property. -The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID. - -**Type:** string
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) -###### Example Values: - - -```js -"sap.vdm.gfn:BillOfMaterialUUID" -``` - - - -### @EntityRelationship.entityIds - -Defines a list of IDs, which are available to look up the Entity Type or create a reference to it. -An Entity Type can have multiple IDs: -* There can be **alternative IDs** that can also be used to create a reference to the Entity Type -* Some ID properties form a **composite ID** together and need to be combined to function as a unique ID for references -* This is indicated by a [`propertyTypes`](#property-type) array with more than one Property Type ID entry. - -**Type:** Array<[Entity ID](#entity-id)>
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @EntityRelationship.reference - -Defines references to other Entity Types based on a single ID. - -**Type:** Array<[Reference Target](#reference-target)>
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @EntityRelationship.compositeReferences - -Defines one or many references to other Entity Types based on a composite IDs. - -**Type:** Array<[Composite Reference](#composite-reference)>
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @EntityRelationship.temporalIds - -Defines a list of temporal IDs - -**Type:** Array<[Temporal ID](#temporal-id)>
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @EntityRelationship.temporalReferences - -Defines a list of temporal references - -**Type:** Array<[Temporal Reference](#temporal-reference)>
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @EntityRelationship.referencesWithConstantIds - -Defines one or many references to other Entity Types based on a composite IDs where some properties of the references are constant values. - -**Type:** Array<[Reference with Constant ID](#reference-with-constant-id)>
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### Reference Target - -Defines a reference to another Entity Type based on a single ID. - -**Type**: Object(name, referencedEntityType, referencedPropertyType) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the reference.
| -|
referencedEntityType
MANDATORY
|
[Entity Type ID](#entity-type-id)
|
ID of the [Entity Type](#entity-type).
| -|
referencedPropertyType
MANDATORY
|
[Property Type ID](#property-type-id)
|
ID of the [Property Type](#property-type). The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID.
| - - -### Entity ID - -Defines an ID that can be used to look up the Entity Type or create a reference to it. - -**Type**: Object(name, description, propertyTypes) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the ID.
| -|
description
OPTIONAL
|
string
|
Optional description to describe the semantics of the ID.
| -|
propertyTypes
MANDATORY
|
Array<[Property Type ID](#property-type-id)>
|
List of [Property Type](#property-type) IDs.
| - - -### Composite Reference - -Defines single a reference to another Entity Type based on a composite ID. - -**Type**: Object(name, referencedEntityType, referencedPropertyTypes) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the reference.
| -|
referencedEntityType
MANDATORY
|
[Entity Type ID](#entity-type-id)
|
ID of the [Entity Type](#entity-type).
| -|
referencedPropertyTypes
MANDATORY
|
Array<[Referenced Property Type](#referenced-property-type)>
|
List of properties, the composite ID consists of.
| - - -### Referenced Property Type - -Grouping of the ID in the referenced entity, by its property type ID and the local name in this entity. - -**Type**: Object(referencedPropertyType, localPropertyName) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
referencedPropertyType
MANDATORY
|
[Property Type ID](#property-type-id)
|
ID of the [Property Type](#property-type). The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID.
| -|
localPropertyName
MANDATORY
|
[Local Property Name](#local-property-name)
|
Name of the property in the local Entity Type
| - - -### Temporal ID - -Defines an ID that includes a temporal interval. - -**Type**: Object(name, description, propertyTypes, temporalIntervalType, temporalType, temporalIntervalStartProperty, temporalIntervalEndProperty) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the ID.
| -|
description
OPTIONAL
|
string
|
Optional description to describe the semantics of the ID.
| -|
propertyTypes
MANDATORY
|
Array<[Property Type ID](#property-type-id)>
|
List of [Property Type](#property-type) IDs that are non-temporal.
| -|
temporalIntervalType
MANDATORY
|
string
|
Interval which includes the boundaries.
**Allowed Values**:
  • `"CLOSED_CLOSED"`

  • `"OPEN_OPEN"`

  • `"OPEN_CLOSED"`

  • `"CLOSED_OPEN"`


**Example Values**:
  • `"CLOSED_CLOSED"`
| -|
temporalType
MANDATORY
|
string
|
Temporal type.
**Allowed Values**:
  • `"DATE"`

  • `"DATETIME"`


**Example Values**:
  • `"DATE"`
| -|
temporalIntervalStartProperty
MANDATORY
|
[Local Property Name](#local-property-name)
|
Property in the local entity that is used to define the start of the interval.
| -|
temporalIntervalEndProperty
MANDATORY
|
[Local Property Name](#local-property-name)
|
Property in the local entity that is used to define the end of the interval.
| - - -### Temporal Reference - -Defines single temporal reference to another Entity Type. - -**Type**: Object(name, referencedEntityType, referencedPropertyTypes, category, selectionDateProperty) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the reference.
| -|
referencedEntityType
MANDATORY
|
[Entity Type ID](#entity-type-id)
|
ID of the [Entity Type](#entity-type).
| -|
referencedPropertyTypes
MANDATORY
|
Array<[Referenced Property Type](#referenced-property-type)>
|
List of non-temporal properties the composite temporal ID consists of.
| -|
category
MANDATORY
|
string
|
Category of the temporal reference.
**Allowed Values**:
  • `"TEMPORAL_DATE"`


**Example Values**:
  • `"TEMPORAL_DATE"`
| -|
selectionDateProperty
MANDATORY
|
[Local Property Name](#local-property-name)
|
Property in the local entity that is used to select the right date interval.
| - - -### Reference with Constant ID - -Defines single a reference to another Entity Type based on a composite ID. - -**Type**: Object(name, description, referencedEntityType, referencedPropertyTypes) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
name
OPTIONAL
|
string
|
Optional name to describe the semantics of the reference.
| -|
description
OPTIONAL
|
string
|
Optional description to describe the semantics of the reference.
| -|
referencedEntityType
MANDATORY
|
[Entity Type ID](#entity-type-id)
|
ID of the [Entity Type](#entity-type).
| -|
referencedPropertyTypes
MANDATORY
|
Array<[Referenced Property Type with Constant ID](#referenced-property-type-with-constant-id)>
|
List of properties, the composite ID consists of.
| - - -### Referenced Property Type with Constant ID - -Grouping of the ID in the referenced entity, by its property type ID and either the local name in this entity or a constant value. - -**Type**: Object(referencedPropertyType, localPropertyName, constantValue) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
referencedPropertyType
MANDATORY
|
[Property Type ID](#property-type-id)
|
ID of the [Property Type](#property-type). The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID.
| -|
localPropertyName
OPTIONAL
|
[Local Property Name](#local-property-name)
|
Name of the property in the local Entity Type
| -|
constantValue
OPTIONAL
|
string
|
String serialization of the constant value of the property in the referenced entity.
| - - -### Property Type ID - -ID of the [Property Type](#property-type). The reason is to have an ID to relate to the property, especially to state that it can be used as an ID or is part of a composite ID. - -**Type:** string - -###### Example Values: - - -```js -"sap.vdm.gfn:BillOfMaterialUUID" -``` - - - -### Entity Type ID - -ID of the [Entity Type](#entity-type). - -**Type:** string - -###### Example Values: - - -```js -"sap.vdm.sont:BillOfMaterial" -``` - - - -### Local Property Name - -Name of the property in the local Entity Type - -**Type:** string - - -## Complete Examples - - -```js -{ - "csnInteropEffective": "1.0", - "$version": "2.0", - "definitions": { - "BusinessPartner": { - "kind": "entity", - "@EntityRelationship.entityType": "sap.vdm.sont:BusinessPartner", - "@EntityRelationship.entityIds": [ - { - "name": "Semantic ID (composite ID)", - "propertyTypes": [ - "sap.vdm.gfn:BusinessPartnerNumber", - "sap.vdm.gfn:BusinessPartnerType" - ] - }, - { - "name": "UUID (single property ID)", - "propertyTypes": [ - "sap.vdm.gfn:BusinessPartnerUUID" - ] - } - ], - "elements": { - "number": { - "@EntityRelationship.propertyType": "sap.vdm.gfn:BusinessPartnerNumber", - "key": true, - "type": "cds.Integer" - }, - "type": { - "@EntityRelationship.propertyType": "sap.vdm.gfn:BusinessPartnerType", - "key": true, - "type": "cds.String" - }, - "uuid": { - "@EntityRelationship.propertyType": "sap.vdm.gfn:BusinessPartnerUUID", - "type": "cds.UUID" - } - } - } - } -} -``` - - -```js -{ - "csnInteropEffective": "1.0", - "$version": "2.0", - "definitions": { - "PurchaseOrder": { - "kind": "entity", - "@EntityRelationship.compositeReferences": [ - { - "name": "Main Supplier", - "referencedPropertyTypes": [ - { - "referencedPropertyType": "sap.vdm.gfn:BusinessPartnerNumber", - "localPropertyName": "mainSupplierNumber" - }, - { - "referencedPropertyType": "sap.vdm.gfn:BusinessPartnerType", - "localPropertyName": "mainSupplierType" - } - ] - } - ], - "elements": { - "mainSupplierNumber": { - "type": "cds.Integer" - }, - "mainSupplierType": { - "@EntityRelationship.propertyType": "sap.vdm.gfn:BusinessPartnerType", - "type": "cds.String" - }, - "alternativeSupplierUUID": { - "@EntityRelationship.reference": [ - { - "referencedEntityType": "sap.vdm.sont:BusinessPartner", - "referencedPropertyType": "sap.vdm.gfn:BusinessPartnerUUID" - } - ], - "type": "cds.UUID" - } - } - } - } -} -``` - -## Concept Explanation - -The purpose of `@EntityRelationship` annotations is to document the Entity Relationship model that goes beyond CSN native associations. -With the annotations its possible to describe "dangling references" and associations to entities outside of the current API / data model context including those provided by different products and technology stacks. - -### Problem Statement - -While CSN can express associations and references with the same CSN document, we also need to describe: - -- References across documents / APIs -- References across different API versions and Protocols -- References across different tenants -- References across different types of applications / services -- "Weak" References, where the target may or may not yet be available for joining data - -As a consequence, the Entity Relationship annotation concept is built on the following design decisions: - -- Reference pointers must not rely on physical API model structure, e.g. property names or document structure. -- Instead we introduce the more abstract and decoupled [Entity Types](#entity-type) and [Property Types](#property-type). -- IDs for Entity Types and Property Types are namespaced, so they are globally unique and conflict free for references across boundaries - -### Out of Scope - -- The annotations only express references that target unique IDs. - - This concept is not meant to replace a more complex query model how data can be joined together in various (often more complex) conditions. E.g., some properties can act as a selector for filter conditions / query conditions that return multiple values. - They could be seen as a special case of association and are always "to many" associations. We don't cover them in this concept here, because they don't contain actual unique IDs to instance data. Instead they describe filter values that may even require more complex query conditions in advanced use cases. This also includes `SELECT *` cases, where the reference value is actually a wildcard / select all. Such references without uniques are not in scope of this concept. -- The annotations just express the local/application specific ER model. - - They are no substitute for globally aligned annotations like ODM or semantic vocabularies, which can be added as complementary on top. - -### Glossary - -- **Entity Type**: An entity type represents a conceptual entity on type-level / class-level. It's conceptual, because the same entity type can have multiple different physical models / representations. -- **Property Type**: A Property Type is a logical ID for a property, so we can reference it without relying on property names or structure of the API data model. Property Types may be used as unique IDs in itself or be part of a composite ID, which can be used to identify instance data of an entity type. -- **Composite ID**: An ID consisting of several properties that only together form a unique ID. Aka Compound ID. -- **Reference**: A reference is an association from one entity type to another. A reference consists of one or multiple properties that follow the Property Types of the target entity type. - -### ID Concepts - -#### Entity Type - -Entity Types represent "conceptual models" that underlie the often very denormalized, concrete API Models. -For a full description, see [ORD Entity Type](https://sap.github.io/open-resource-discovery/details/articles/grouping-and-bundling#entity-type). - -The ID scheme for an Entity Type ID is as following: - -```xml - := :[:v] -``` - -For the mandatory namespaces we use the [Namespace Concept](https://sap.github.io/open-resource-discovery/spec-v1/#namespaces) of ORD. -In many cases Entity Types are not versioned. To ease handling and avoiding ambiguity, we forbid adding `v1` and therefore made `v1` the default. -If for the case of having a `v2` or higher of an Entity Type, the version must be added. - -Ideally the application specific Entity Types are described as ORD Entity Types, so we have at least a globally unique ORD ID and the title for it available. -Then it’s clear what Entity Type ID others should use for cross application references. -With the outlined pattern, we can convert an Entity Type ID to a globally unique [ORD ID](https://sap.github.io/open-resource-discovery/spec-v1/#ord-id) and vice versa: - -```xml - := :entityType::v -``` - -#### Property Type - -An Entity Type and its API models may have multiple IDs that can be used to create references to it. -Usually there is a primary ID (which may be also the primary key in the database) and optionally multiple alternative IDs / keys. -Primary or alternative IDs may be a composite ID and consist of multiple property values that only together form a unique ID. - -To point out, which properties are used to hold an ID, we introduce Property Types. -A Property Type is independent from the actual API / data structure, e.g. the property names. -The same property type can therefore be reused in multiple entity types in different APIs, even with different property names and structural differences. - -A [Property Type ID](#property-type-id) follows the same format and considerations as the Entity Type ID explained above: - -```xml - := :[:v] -``` - -The same Property Type MUST NOT be defined more than once in the same Entity Type. -However, the same Property Type MAY be part of multiple references within the same Entity Type. - -For describing references, it is sufficient to only annotate `@EntityRelationship.propertyType` on properties that are used as IDs (by itself, or by being part of a composite ID). - -> 🙋 Why do we not just use the property name where we'll find the ID? -> The reason is that ID properties can get renamed, ID schemes get changed or the structure of an API changes. -> All of that are incompatible API changes, but the goal of this reference concept is to work agnostic of API versions and even different API protocols. -> With the Property Type concept, we define the references purely on a conceptual level and are not coupled to the actual API / JSON structure and stable property names. - -> 🔭 We _may_ consider describing the IDs of Entity Types (and their property-types) on ORD level as well, attached to an ORD Entity Type. -> This would be optional and for the ID / Reference concept to work it is only important that the Entity Type and Property Type IDs are used consistently and conflict-free within their namespace. - -### Standard Use Cases - -#### Declaring Single Property IDs - -The following example shows a single ID in '@EntityRelationship.entityIds' that can be used to identify the Entity Type. It consists of a single property (`ObjectID`), identified through its [Property Type ID](#property-type) `sap.vdm.gfn:BillOfMaterialObjectID`. - -```javascript -@EntityRelationship.entityType : 'sap.vdm.sont:BillOfMaterial' -@EntityRelationship.entityIds : [{ - name: 'optional name for ID' - propertyTypes: ['sap.vdm.gfn:BillOfMaterialObjectID'] -}] -entity BillOfMaterial { - @EntityRelationship.propertyType : 'sap.vdm.gfn:BillOfMaterialObjectID' - key ObjectID : String; -} -``` - -#### Declaring Composite IDs - -In case of composite IDs, the same concept is used, with the difference that `propertyTypes` has more than one value. - -In the following example, the annotation is used to indicate which Property Types (`sap.vdm.gfn:BusinessPartnerNumber` and `sap.vdm.gfn:BusinessPartnerType`) of the Entity Type (`sap.vdm.sont:BusinessPartner`) form a composite ID together: - -```javascript -@EntityRelationship.entityType : 'sap.vdm.sont:BusinessPartner' -@EntityRelationship.entityIds : [{ - name: 'Semantic ID' - propertyTypes: ['sap.vdm.gfn:BusinessPartnerNumber', 'sap.vdm.gfn:BusinessPartnerType'] -},{ - name: 'UUID' - propertyTypes: ['sap.vdm.gfn:BusinessPartnerUUID'] -}] -entity BusinessPartner { - @EntityRelationship.propertyType : 'sap.vdm.gfn:BusinessPartnerNumber' - key number : Integer; - @EntityRelationship.propertyType : 'sap.vdm.gfn:BusinessPartnerType' - key type : String; - @EntityRelationship.propertyType : 'sap.vdm.gfn:BusinessPartnerUUID' - uuid : UUID; -} -``` - -It is also possible that the same Property Type is part of multiple (composite) IDs. -For example, a person can be identified by either `country` and `driversLicenseNumber` or `country` and `socialSecurityNumber`. -There is no guarantee that drivers license numbers or social security numbers are unique across countries. - -#### Referencing single IDs - -For **simple references to single property IDs** we need to state the target Entity Type and the Property Type of the target property that is used as the unique ID. - -The `referencedEntityType` and `referencedPropertyType` together ensure that the reference: - -- States what Entity Type is the target of the reference / association. -- Which Property Type of the target Entity Type is used as an ID value in the reference. - -```javascript -@EntityRelationship.entityType : 'sap.vdm.sont:BillOfMaterial' -@EntityRelationship.entityIds : [{ - //... -}] -entity BillOfMaterial { - //... - @EntityRelationship.reference[{ - referencedEntityType: 'sap.vdm.sont:Plant', - referencedPropertyType: 'sap.vdm.gfn:PlantObjectID' - }] - Plant : String -} -``` - -With the given information, we can look for a `sap.vdm.sont:Plant` Entity Type (e.g. in different APIs) and see if it has the Property Type `sap.vdm.gfn:PlantObjectID` in its list of IDs (`@EntityRelationship.entityIds`). -If this is given, we can merge / join / lookup the information with the reference value (ID) given in the property. - -The annotation is an array because there could be multiple Entity Types that are valid targets for the reference. -If an array is given, all of the reference targets MUST be valid places where the ID can be resolved, at least in a certain implementation or version of the target entity. -This also allows for references to polymorphic targets that share the same Property Type as an ID (e.g. a reference to either Cat or Dog, sharing the same Pet ID). - -> 🚧 Consideration: Provide optional attribute to state that a reference has a "composition" quality, in case that the API Model itself doesn't imply that already. -> This would help to know which entity type instances should be deleted if their parent is deleted and is usually also an indicator for transactional integrity. - -#### Referencing Composite IDs - -When we have references that use a composite ID that consists of several Property Types, we also need to indicate their grouping. -We do this by introducing a new annotation `@EntityRelationship.compositeReferences`. -Each entry indicates that there is a reference to another entity, using a composite ID. - -The grouping into a composite reference is based on the semantics of the referring model, as there can be multiple references to the same composite ID. - -When pointing to the Property Types of the target Entity Type (`referencedPropertyType`), we need to define how it maps to the local properties (`localPropertyName`). - -The following example shows how the Entity Type `PurchaseOrder` has a composite ID reference (consisting of `mainSupplierNumber` and `mainSupplierType`) to a `BusinessPartner` Entity Type. - -The composite ID indicates the semantics / grouping of the reference from the _referrals_ perspective, not the reference targets perspective (!). -There can be multiple references that use the same Composite ID but with different semantics. -The [`compositeReferences`](#composite-reference) in the example states that the first two composite ID references point to the `mainSupplier`. -The next composite ID reference points to the same Entity Type and Property Type, but is part of a different composite reference, "Alternative Supplier". - -A property can be potentially part of several composite references. - -```javascript -@EntityRelationship.entityType : 'sap.vdm.sont:PurchaseOrder' -@EntityRelationship.compositeReferences : [{ - //one composite reference - name: 'Main Supplier', - referencedEntityType: 'sap.vdm.sont:BusinessPartner' - referencedPropertyTypes: [{ - referencedPropertyType: 'sap.vdm.gfn:BusinessPartnerNumber', - localPropertyName: 'mainSupplierNumber' - },{ - referencedPropertyType: 'sap.vdm.gfn:BusinessPartnerType', - localPropertyName: 'mainSupplierType' - }] -},{ - // This demonstrates why the composite reference is necessary - // and is defined with the semantics from the referencing side. - name: 'Alternative Supplier', - referencedEntityType: 'sap.vdm.sont:BusinessPartner' - referencedPropertyTypes: [{ - referencedPropertyType: 'sap.vdm.gfn:BusinessPartnerNumber', - localPropertyName: 'alternativeSupplierNumber' - },{ - referencedPropertyType: 'sap.vdm.gfn:BusinessPartnerType', - localPropertyName: 'alternativeSupplierType' - }] -}] -entity PurchaseOrder { - //... - Plant : String; - mainSupplierNumber : Integer; - mainSupplierType : String; - alternativeSupplierNumber : Integer; - alternativeSupplierType : String; -} -``` - -### Advanced Cases - -All the annotations in this section are **optional** for providers and consumers to implement or understand. - -As a consequence: - -- All advanced functionality MUST be purely "opt-in" and must not break consumers that do not support it -- If references or IDs need special understanding, we cannot use the standard annotations but need to move to specialized annotations. -- If a consumer does not understand special-case IDs or References, they may therefore treat them as arbitrary properties. -- We may also propose alternative approaches, so special handling attributes can be avoided. - -> ⚠ In general, we recommend to not rely on advanced features if avoidable. If possible, we give guidance how to avoid special handling. - -#### Time Dependent References - -There can be references which include a time / date component, where the targeted entity type may return different values / state, depending on time. -As a consequence it's important for references to indicate which state in time they refer to. - -This situation can be handled with the existing concepts as composite IDs. - -In the example below, we have a Cost Center, where its instance data defines a validity range for the values through `ValidityStartDate` and `ValidityEndDate`. -For the Composite ID, we however need the `sap.vdm.gfn:ControllingArea` and `sap.vdm.gfn:CostCenter` Property Types plus a "virtual" property `KeyDate` that only exists on the API Model. -Those three together can be used to create a unique reference that also states the point in time. - -> 🔗 There is also an [OData Extension for Temporal Data](https://docs.oasis-open.org/odata/odata-temporal-ext/v4.0/cs01/odata-temporal-ext-v4.0-cs01.html). - -```javascript -@EntityRelationship.entityType : 'sap.vdm.sont:CostCenter' -@EntityRelationship.entityIds : [{ - name: 'ID for Point in Time' - propertyTypes: ["sap.vdm.gfn:ControllingArea", "sap.vdm.gfn:CostCenter", "sap.vdm.gfn:KeyDate"] -},{ - name: 'Time-independent ID (not unique)' - propertyTypes: ["sap.vdm.gfn:ControllingArea", "sap.vdm.gfn:CostCenter"] -}] -entity CostCenter { - @EntityRelationship.propertyType : 'sap.vdm.gfn:ControllingArea' - ControllingArea: String; // ControllingArea is also a reference to entity ControllingArea, but this is not shown here - @EntityRelationship.propertyType : 'sap.vdm.gfn:CostCenter' - CostCenter : String; - @EntityRelationship.propertyType : 'sap.vdm.gfn:KeyDate' - KeyDate : Date; // This is a virtual property, only there in an API model to indicate the point in time for the reference. - - ValidityStartDate: Date; // Not an ID, but can be set with create / update - ValidityEndDate: Date; - //... -} -``` - -Example how this is used in a time dependent reference from `SalesOrder`: - -```javascript -@EntityRelationship.entityType : 'sap.vdm.sont:SalesOrder' -@EntityRelationship.compositeReferences : [{ - name: 'Time Dependent Reference to CostCenter', - referencedEntityType: 'sap.vdm.sont:CostCenter' - referencedPropertyTypes: [{ - referencedPropertyType: 'sap.vdm.gfn:ControllingArea', - localPropertyName: 'ControllingArea' - },{ - referencedPropertyType: 'sap.vdm.gfn:CostCenter', - localPropertyName: 'CostCenter' - },{ - referencedPropertyType: 'sap.vdm.gfn:KeyDate', - localPropertyName: 'SalesOrderDate' - }] -}] -entity SalesOrder { - //... - ControllingArea : String; - CostCenter : String; - SalesOrderDate : Date; -} -``` - -#### Special Support for more involved Temporal References - -For more complex scenarios, we need to understand the nature of temporal data along with the references. -In the example below, the `ValidityStartDate` and `ValidityEndDate` need to be understood, as the client has to do a more complex query with filter conditions to get the data at a specific time. -That's because there is no convenience "key date" or "$at" property in the data / API model that can be used for a more simple composite ID reference lookup. - -Temporal IDs can be explicitly described via `@EntityRelationship.temporalIds`: - -```javascript -@EntityRelationship.entityType : 'sap.vdm.sont:CostCenter' -@EntityRelationship.temporalIds : [{ // all temporal IDs at a central place - name: 'temporalId' // optional - propertyTypes: ["sap.vdm.gfn:ControllingArea", "sap.vdm.gfn:CostCenter"] // non-temporal - temporalIntervalType: "CLOSED_CLOSED", // interval which includes the boundaries - temporalType: "DATE", // date or date-time interval - temporalIntervalStartProperty: "ValidityStartDate", // not needed by reference, therefore no property-type necessary - temporalIntervalEndProperty: "ValidityEndDate" -}] -entity CostCenter { - @EntityRelationship.propertyType : 'sap.vdm.gfn:ControllingArea' - ControllingArea: String; // ControllingArea is also a reference to entity ControllingArea, but this is not shown here - @EntityRelationship.propertyType : 'sap.vdm.gfn:CostCenter' - CostCenter : String; - - ValidityStartDate: Date; - ValidityEndDate: Date; // ValidityEndDate is not suited for references from foreign entities, do not expose the internal primary key - - //... -} -``` - -A temporal ID can be referenced via `@EntityRelationship.temporalReferences`: - -```javascript -@EntityRelationship.entityType : 'sap.vdm.sont:SalesOrder' -@EntityRelationship.temporalReferences : [{ - name: 'Temporal Reference to CostCenter', - referencedEntityType: 'sap.vdm.sont:CostCenter' - referencedPropertyTypes: [{ // reference-specific assignment to property-types, could include constants - referencedPropertyType: 'sap.vdm.gfn:ControllingArea', - localPropertyName: 'ControllingArea' - },{ - referencedPropertyType: 'sap.vdm.gfn:CostCenter', - localPropertyName: 'CostCenter' - }], - category: "temporal-date", // reference is to a temporal ID of category date - selectionDateProperty: "SalesOrderDate" // property used to select the right date interval -}] -entity SalesOrder { - //... - ControllingArea : String; - CostCenter : String; - SalesOrderDate : Date; -} -// a join or select condition derived from the temporal reference would use an additional condition: -// AND CostCenter.ValidityStartDate <= SalesOrder.SalesOrderDate -// AND CostCenter.ValidityEndDate >= SalesOrder.SalesOrderDate -``` - -#### References with Constant ID Values - -In this special case we have references where some additional IDs need to be set to a constant value to get to a unique ID reference. -It could also be understood as a composite ID where some of the required IDs (that may act as filters) are not available as reference properties, but we know from the metadata that we need to set them to a static value at the target Entity Type. - -##### Solution A: Add constant ID values as explicit properties - -One approach to address this situation is to just introduce the missing constant ID values as new properties in the entity type that holds the reference. -We can define such a value in CSN as [value](https://cap.cloud.sap/docs/cds/csn#properties-1) -The advantage is that we have then a regular composite ID reference, which we can handle without creating a new edge-case that needs special support. -The disadvantage is that we have to add new properties and instance data to our APIs. - -```javascript -@EntityRelationship.entityType : 'sap.vdm.sont:CostingSheet ' -@EntityRelationship.compositeReferences : [{ - referencedEntityType: 'sap.vdm.sont:CostingSheetProcedure' - referencedPropertyTypes: [{ - referencedPropertyType: 'sap.vdm.gfn:CostingSheetProcedure', - localPropertyName: 'costingSheetProcedure' - },{ - referencedPropertyType: 'sap.vdm.gfn:ConditionUsage', - localPropertyName: 'costingSheetProcedureConditionUsage' - },{ - referencedPropertyType: 'sap.vdm.gfn:ConditionApplication', - localPropertyName: 'costingSheetProcedureConditionApplication' - }] -}] -entity CostingSheet { - //... - costingSheetProcedure : String; - costingSheetProcedureConditionUsage : String = 'K'; - costingSheetProcedureConditionApplication : String = 'KS'; -} -``` - -##### Solution B: State constant ID composite keys explicitly - -Since this is a very special edge-case we did not want to introduce additional complexity to our regular cases. -We also don't want consumers who don't understand and support constant ID values to accidentally interpret incomplete composite ID references. - -As a consequence, we'll not use the `@EntityRelationship.references` annotation, but introduce a dedicated `@EntityRelationship.referencesWithConstantIds`. -It can describe a reference that includes constant ID values and also may consist of a composite ID of more than one property. - -```javascript -@EntityRelationship.entityType : 'sap.vdm.sont:CostingSheet ' -@EntityRelationship.referencesWithConstantIds : [{ - description: 'optional description' - referencedEntityType: 'sap.vdm.sont:CostingSheetProcedure' - referencedPropertyTypes: [{ - referencedPropertyType: 'sap.vdm.gfn:CostingSheetProcedureId', - localPropertyName: 'costingSheetProcedure' - },{ - referencedPropertyType: 'sap.vdm.gfn:ConditionUsage', - constantValue: 'K' - },{ - referencedPropertyType: 'sap.vdm.gfn:ConditionApplication', - constantValue: 'KS' - }] -}] -entity CostingSheet { - //... - costingSheetProcedure : String; -} -``` - -In this example the `costingSheetProcedure` property links to a `sap.vdm.gfn:CostingSheetProcedureId` Property Type, but by that alone the ID reference is not complete. -In the target, there are three Property Types that form a unique composite ID together. -The Property Types `sap.vdm.gfn:ConditionUsage` and `sap.vdm.gfn:ConditionApplication` are missing. -Since they always need to be set to a specific static value, we can indicate this on metadata level with `constantValue`. - -#### Concatenated IDs or References - -Some composite IDs or references are not available as separate properties, but concatenated together into a single string. - -We recommend two approaches: - -- Treat it as a dedicated (opaque) ID with its own Property Type, which may be used as any other ID without understanding (and parsing) its inner structure. -- Alternatively, split a concatenated ID / Reference into separate properties with their own Property Type. This can then be handled as regular composite IDs and references. \ No newline at end of file diff --git a/docs/annotations/object-model.md b/docs/annotations/object-model.md deleted file mode 100644 index 1c742ad7..00000000 --- a/docs/annotations/object-model.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: "@ObjectModel" -sidebar_position: "7" -description: "@ObjectModel annotations." ---- - -> BETA This annotation is beta and should be reviewed for completion and correctness. - -## Introduction - -The object model captures definitions of structural as well as transactional related aspects of the business data model. - -## Schema Definitions - -* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). -* The interface is available as JSON Schema: [object-model.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/object-model.schema.json#). - -### Annotations Overview - -| Annotation | Scope | Description | -| -------- | ---- | ----------- | -| [@ObjectModel.compositionRoot](#objectmodelcompositionroot) | Entity | Entity is the root of a compositional hierarchy. | -| [@ObjectModel.representativeKey](#objectmodelrepresentativekey) | Entity, Service | In case of multiple key elements: key element which represents the entity (in the sense that the entity itself is the list of values for this key element) | -| [@ObjectModel.semanticKey](#objectmodelsemantickey) | Type | The property contains element(s) which shall be used to display the key in UIs (instead of the technical key). | -| [@ObjectModel.modelingPattern](#objectmodelmodelingpattern) | Entity, Service | The property declares the modeling pattern applied in this entity definition. | -| [@ObjectModel.supportedCapabilities](#objectmodelsupportedcapabilities) | Entity, Service | The property declares the supported usage type for this entity in the context of consuming data models. | -| [@ObjectModel.foreignKey.association](#objectmodelforeignkeyassociation) | Type | The element is of type `cds.Association` which points to the list of values.

Use only for service internal associations. For cross service associations, use the [@EntityRelationship Vocabulary](./entity-relationship) instead. | -| [@ObjectModel.text.element](#objectmodeltextelement) | Type | The property contains element(s) containing a text for the annotated (id)element | -| [@ObjectModel.text.association](#objectmodeltextassociation) | Type | The element is of type cds.association, which points to an entity containing (language-dependent) texts for the annotated (id) element | -| [@ObjectModel.tenantWideUniqueName](#objectmodeltenantwideuniquename) | Entity | Unique technical name of the entity within the tenant / isolation context it is deployed to.
This may be used as a hint for database table names and help to keep them short enough.

Once chosen the technical name ID MUST be kept stable (immutable). | -| [@ObjectModel.usageType.sizeCategory](#objectmodelusagetypesizecategory) | Entity | The size category enables the consumer to judge the possible result data set size.
It is a pure estimation at design time while modeling the entity what the data set size would be at runtime.
It reflects the set of data which has to be searched through to compute for example a count(*) of the data.

The labels correspond to the following size categories (expected number of rows at production customers):
- S: less than 1000
- M: less than 100.000
- L: less than 10.000.000
- XL: less than 100.000.000
- XXL: more than 100.000.000 | - -### @ObjectModel.compositionRoot - -Entity is the root of a compositional hierarchy. - -**Type:** boolean
-**Default Value**: `true`
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @ObjectModel.representativeKey - -In case of multiple key elements: key element which represents the entity (in the sense that the entity itself is the list of values for this key element) - -**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
-**Scope:** Entity, Service
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition) - -### @ObjectModel.semanticKey - -The property contains element(s) which shall be used to display the key in UIs (instead of the technical key). - -**Type:** Array<[Element Reference](../spec-v1/csn-interop-effective#element-reference)>
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @ObjectModel.modelingPattern - -The property declares the modeling pattern applied in this entity definition. - -**Type**: Object(#) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"DATA_STRUCTURE"`
  • `"LANGUAGE_DEPENDENT_TEXT"`
  • `"UNIT_CONVERSION_RATE"`
  • `"VALUE_HELP_PROVIDER"`
  • `"COLLECTIVE_VALUE_HELP"`
  • `"DERIVATION_FUNCTION"`
  • `"PARENT_CHILD_HIERARCHY_NODE_PROVIDER"`
  • `"ENTERPRISE_SEARCH_PROVIDER"`
  • `"TRANSACTIONAL_INTERFACE"`
  • `"TRANSACTIONAL_QUERY"`
  • `"ANALYTICAL_QUERY"`
  • `"ANALYTICAL_DOCUMENT_STORE"`
  • `"ANALYTICAL_CUBE"`
  • `"ANALYTICAL_DIMENSION"`
  • `"ANALYTICAL_FACT"`
  • `"ANALYTICAL_PARENT_CHILD_HIERARCHY_NODE"`
  • `"ANALYTICAL_KPI"`
  • `"OUTPUT_FORM_DATA_PROVIDER"`
  • `"OUTPUT_EMAIL_DATA_PROVIDER"`
  • `"OUTPUT_PARAMETER_DETERMINATION_DATA_SOURCE"`
  • `"SITUATION_ANCHOR"`
  • `"SITUATION_TRIGGER"`
  • `"SITUATION_DATACONTEXT"`
  • `"EXTERNAL_DATA_PROVIDER"`
  • `"NONE"`
| - - -###### Example Values: - - -```js -{ - "#": "DATA_STRUCTURE" -} -``` - - -### @ObjectModel.supportedCapabilities - -The property declares the supported usage type for this entity in the context of consuming data models. - -**Type:** Array<[Supported Capabilities Enum Value](#supported-capabilities-enum-value)>
-**Scope:** Entity, Service
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition) - -### @ObjectModel.foreignKey.association - -The element is of type `cds.Association` which points to the list of values. - -Use only for service internal associations. For cross service associations, use the [@EntityRelationship Vocabulary](./entity-relationship) instead. - -**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @ObjectModel.text.element - -The property contains element(s) containing a text for the annotated (id)element - -**Type:** Array<[Element Reference](../spec-v1/csn-interop-effective#element-reference)>
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) -###### Example Values: - - -```js -[ - "BillingDocumentTypeName" -] -``` - - - -### @ObjectModel.text.association - -The element is of type cds.association, which points to an entity containing (language-dependent) texts for the annotated (id) element - -**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @ObjectModel.tenantWideUniqueName - -Unique technical name of the entity within the tenant / isolation context it is deployed to. -This may be used as a hint for database table names and help to keep them short enough. - -Once chosen the technical name ID MUST be kept stable (immutable). - -**Type:** string
-**Maximum Length**: `120`
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @ObjectModel.usageType.sizeCategory - -The size category enables the consumer to judge the possible result data set size. -It is a pure estimation at design time while modeling the entity what the data set size would be at runtime. -It reflects the set of data which has to be searched through to compute for example a count(*) of the data. - -The labels correspond to the following size categories (expected number of rows at production customers): -- S: less than 1000 -- M: less than 100.000 -- L: less than 10.000.000 -- XL: less than 100.000.000 -- XXL: more than 100.000.000 - -**Type**: Object(#) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"S"`
  • `"M"`
  • `"L"`
  • `"XL"`
  • `"XXL"`
| - - -###### Example Values: - - -```js -{ - "#": "XL" -} -``` - - -### Supported Capabilities Enum Value - -**Type**: Object(#) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
#
MANDATORY
|
string
|
The entry declares one supported usage type.
**Allowed Values**:
  • `"SQL_DATA_SOURCE"`
  • `"CDS_MODELING_DATA_SOURCE"`
  • `"CDS_MODELING_ASSOCIATION_TARGET"`
  • `"DATA_STRUCTURE"`
  • `"LANGUAGE_DEPENDENT_TEXT"`
  • `"UNIT_CONVERSION_RATE"`
  • `"VALUE_HELP_PROVIDER"`
  • `"COLLECTIVE_VALUE_HELP"`
  • `"EXTRACTION_DATA_SOURCE"`
  • `"DERIVATION_FUNCTION"`
  • `"PARENT_CHILD_HIERARCHY_NODE_PROVIDER"`
  • `"SEARCHABLE_ENTITY"`
  • `"ENTERPRISE_SEARCH_PROVIDER"`
  • `"TRANSACTIONAL_PROVIDER"`
  • `"ANALYTICAL_QUERY"`
  • `"ANALYTICAL_DOCUMENT_STORE"`
  • `"ANALYTICAL_DIMENSION"`
  • `"ANALYTICAL_PROVIDER"`
  • `"ANALYTICAL_PARENT_CHILD_HIERARCHY_NODE"`
  • `"ANALYTICAL_KPI"`
  • `"OUTPUT_FORM_DATA_PROVIDER"`
  • `"OUTPUT_EMAIL_DATA_PROVIDER"`
  • `"OUTPUT_PARAMETER_DETERMINATION_DATA_SOURCE"`
  • `"SITUATION_ANCHOR"`
  • `"SITUATION_TRIGGER"`
  • `"SITUATION_DATACONTEXT"`
  • `"KEY_USER_COPYING_TEMPLATE"`
  • `"EXTERNAL_DATA_PROVIDER"`
  • `"ODM_COMPLIANT_PROVIDER"`
  • `"UI_PROVIDER_PROJECTION_SOURCE"`
| - diff --git a/docs/annotations/objectmodel.md b/docs/annotations/objectmodel.md deleted file mode 100644 index 1866e809..00000000 --- a/docs/annotations/objectmodel.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: "@ObjectModel" -sidebar_position: 7 -description: "@ObjectModel annotations." ---- - -> BETA This annotation is beta and should be reviewed for completion and correctness. - -## Introduction - -The object model captures definitions of structural as well as transactional related aspects of the business data model. - -## Schema Definitions - -* This is an extension vocabulary for [CSN Interop Effective](../spec-v1/csn-interop-effective). - -### Annotations Overview - -| Annotation | Scope | Description | -| -------- | ---- | ----------- | -| [@ObjectModel.compositionRoot](#objectmodelcompositionroot) | Entity | Entity is the root of a compositional hierarchy. | -| [@ObjectModel.representativeKey](#objectmodelrepresentativekey) | Entity, Service | In case of multiple key elements: key element which represents the entity (in the sense that the entity itself is the list of values for this key element) | -| [@ObjectModel.semanticKey](#objectmodelsemantickey) | Type | The property contains element(s) which shall be used to display the key in UIs (instead of the technical key). | -| [@ObjectModel.modelingPattern](#objectmodelmodelingpattern) | Entity, Service | The property declares the modeling pattern applied in this entity definition. | -| [@ObjectModel.supportedCapabilities](#objectmodelsupportedcapabilities) | Entity, Service | The property declares the supported usage type for this entity in the context of consuming data models. | -| [@ObjectModel.foreignKey.association](#objectmodelforeignkeyassociation) | Type | The element is of type `cds.Association` which points to the list of values.

Use only for service internal associations. For cross service associations, use the [@EntityRelationship Vocabulary](./entity-relationship) instead. | -| [@ObjectModel.text.element](#objectmodeltextelement) | Type | The property contains element(s) containing a text for the annotated (id)element | -| [@ObjectModel.text.association](#objectmodeltextassociation) | Type | The element is of type cds.association, which points to an entity containing (language-dependent) texts for the annotated (id) element | -| [@ObjectModel.usageType.sizeCategory](#objectmodelusagetypesizecategory) | Entity | The size category enables the consumer to judge the possible result data set size.
It is a pure estimation at design time while modeling the entity what the data set size would be at runtime.
It reflects the set of data which has to be searched through to compute for example a count(*) of the data.

The labels correspond to the following size categories (expected number of rows at production customers):
- S: less than 1000
- M: less than 100.000
- L: less than 10.000.000
- XL: less than 100.000.000
- XXL: more than 100.000.000 | - -### @ObjectModel.compositionRoot - -Entity is the root of a compositional hierarchy. - -**Type:** boolean
-**Default Value**: `true`
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @ObjectModel.representativeKey - -In case of multiple key elements: key element which represents the entity (in the sense that the entity itself is the list of values for this key element) - -**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
-**Scope:** Entity, Service
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition) - -### @ObjectModel.semanticKey - -The property contains element(s) which shall be used to display the key in UIs (instead of the technical key). - -**Type:** Array<[Element Reference](../spec-v1/csn-interop-effective#element-reference)>
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition) - -### @ObjectModel.modelingPattern - -The property declares the modeling pattern applied in this entity definition. - -**Type**: Object(#) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"DATA_STRUCTURE"`
  • `"LANGUAGE_DEPENDENT_TEXT"`
  • `"UNIT_CONVERSION_RATE"`
  • `"VALUE_HELP_PROVIDER"`
  • `"COLLECTIVE_VALUE_HELP"`
  • `"DERIVATION_FUNCTION"`
  • `"PARENT_CHILD_HIERARCHY_NODE_PROVIDER"`
  • `"ENTERPRISE_SEARCH_PROVIDER"`
  • `"TRANSACTIONAL_INTERFACE"`
  • `"TRANSACTIONAL_QUERY"`
  • `"ANALYTICAL_QUERY"`
  • `"ANALYTICAL_DOCUMENT_STORE"`
  • `"ANALYTICAL_CUBE"`
  • `"ANALYTICAL_DIMENSION"`
  • `"ANALYTICAL_FACT"`
  • `"ANALYTICAL_PARENT_CHILD_HIERARCHY_NODE"`
  • `"ANALYTICAL_KPI"`
  • `"OUTPUT_FORM_DATA_PROVIDER"`
  • `"OUTPUT_EMAIL_DATA_PROVIDER"`
  • `"OUTPUT_PARAMETER_DETERMINATION_DATA_SOURCE"`
  • `"SITUATION_ANCHOR"`
  • `"SITUATION_TRIGGER"`
  • `"SITUATION_DATACONTEXT"`
  • `"EXTERNAL_DATA_PROVIDER"`
  • `"NONE"`
| - - -###### Example Values: - - -```js -{ - "#": "DATA_STRUCTURE" -} -``` - - -### @ObjectModel.supportedCapabilities - -The property declares the supported usage type for this entity in the context of consuming data models. - -**Type:** Array<[Supported Capabilities Enum Value](#supported-capabilities-enum-value)>
-**Scope:** Entity, Service
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition), [ServiceDefinition](../spec-v1/csn-interop-effective#service-definition) - -### @ObjectModel.foreignKey.association - -The element is of type `cds.Association` which points to the list of values. - -Use only for service internal associations. For cross service associations, use the [@EntityRelationship Vocabulary](./entity-relationship) instead. - -**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition) - -### @ObjectModel.text.element - -The property contains element(s) containing a text for the annotated (id)element - -**Type:** Array<[Element Reference](../spec-v1/csn-interop-effective#element-reference)>
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition) -###### Example Values: - - -```js -[ - "BillingDocumentTypeName" -] -``` - - - -### @ObjectModel.text.association - -The element is of type cds.association, which points to an entity containing (language-dependent) texts for the annotated (id) element - -**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition) - -### @ObjectModel.usageType.sizeCategory - -The size category enables the consumer to judge the possible result data set size. -It is a pure estimation at design time while modeling the entity what the data set size would be at runtime. -It reflects the set of data which has to be searched through to compute for example a count(*) of the data. - -The labels correspond to the following size categories (expected number of rows at production customers): -- S: less than 1000 -- M: less than 100.000 -- L: less than 10.000.000 -- XL: less than 100.000.000 -- XXL: more than 100.000.000 - -**Type**: Object(#) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
#
MANDATORY
|
string
|
Provide the value in `{ "#": "" }` enum notation.
**Allowed Values**:
  • `"S"`
  • `"M"`
  • `"L"`
  • `"XL"`
  • `"XXL"`
| - - -###### Example Values: - - -```js -{ - "#": "XL" -} -``` - - -### Supported Capabilities Enum Value - -**Type**: Object(#) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
#
MANDATORY
|
string
|
The entry declares one supported usage type.
**Allowed Values**:
  • `"SQL_DATA_SOURCE"`
  • `"CDS_MODELING_DATA_SOURCE"`
  • `"CDS_MODELING_ASSOCIATION_TARGET"`
  • `"DATA_STRUCTURE"`
  • `"LANGUAGE_DEPENDENT_TEXT"`
  • `"UNIT_CONVERSION_RATE"`
  • `"VALUE_HELP_PROVIDER"`
  • `"COLLECTIVE_VALUE_HELP"`
  • `"EXTRACTION_DATA_SOURCE"`
  • `"DERIVATION_FUNCTION"`
  • `"PARENT_CHILD_HIERARCHY_NODE_PROVIDER"`
  • `"SEARCHABLE_ENTITY"`
  • `"ENTERPRISE_SEARCH_PROVIDER"`
  • `"TRANSACTIONAL_PROVIDER"`
  • `"ANALYTICAL_QUERY"`
  • `"ANALYTICAL_DOCUMENT_STORE"`
  • `"ANALYTICAL_DIMENSION"`
  • `"ANALYTICAL_PROVIDER"`
  • `"ANALYTICAL_PARENT_CHILD_HIERARCHY_NODE"`
  • `"ANALYTICAL_KPI"`
  • `"OUTPUT_FORM_DATA_PROVIDER"`
  • `"OUTPUT_EMAIL_DATA_PROVIDER"`
  • `"OUTPUT_PARAMETER_DETERMINATION_DATA_SOURCE"`
  • `"SITUATION_ANCHOR"`
  • `"SITUATION_TRIGGER"`
  • `"SITUATION_DATACONTEXT"`
  • `"KEY_USER_COPYING_TEMPLATE"`
  • `"EXTERNAL_DATA_PROVIDER"`
  • `"ODM_COMPLIANT_PROVIDER"`
  • `"UI_PROVIDER_PROJECTION_SOURCE"`
| - diff --git a/docs/annotations/odm.md b/docs/annotations/odm.md deleted file mode 100644 index f0ff620f..00000000 --- a/docs/annotations/odm.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "@ODM" -sidebar_position: "8" -description: "@ODM for One Domain Model (ODM) related annotations." ---- - -> STABLE This annotation can be used productively. - -## Introduction - -Annotations of the one domain model allow specifying entities and their elements to make them ODM compliant accordingly to ODM Compliance rules. - -> 🔗 For more background, see blog post: [Harnessing Half a Century of Knowledge: SAP's Journey of Enriching APIs with Business Metadata](https://community.sap.com/t5/technology-blogs-by-sap/harnessing-half-a-century-of-knowledge-sap-s-journey-of-enriching-apis-with/ba-p/13578364) - -## Schema Definitions - -* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). -* The interface is available as JSON Schema: [odm.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/odm.schema.json#). - -### Annotations Overview - -| Annotation | Scope | Description | -| -------- | ---- | ----------- | -| [@ODM.entityName](#odmentityname) | Entity | The entity represents an ODM Entity with this official name. | -| [@ODM.oid](#odmoid) | Entity | The annotation references the element which contains the oid. | -| [@ODM.oidReference.entityName](#odmoidreferenceentityname) | Type | The property contains an OID for the ODM Entity with this official name | - -### @ODM.entityName - -The entity represents an ODM Entity with this official name. - -**Type:** string
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @ODM.oid - -The annotation references the element which contains the oid. - -**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @ODM.oidReference.entityName - -The property contains an OID for the ODM Entity with this official name - -**Type:** string
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) diff --git a/docs/annotations/personal-data.md b/docs/annotations/personal-data.md deleted file mode 100644 index 356eb56b..00000000 --- a/docs/annotations/personal-data.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "@PersonalData" -sidebar_position: "9" -description: "@PersonalData to annotate DPP relevant information." ---- - -> STABLE This annotation can be used productively. - -## Introduction - -The processing of personal data is key in business processes. SAP's products must enable our customers to operate their applications in compliance with data protection laws. One way of enabling is applying DPP-related annotations. Via those annotations the specific DPP-related behavior can be enabled by the consumers. The annotations are derived from existing personal data annotations in OData and OpenAPI. - -## Notational Conventions - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", -"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be -interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119). - -## Related Links - -- OData personal data vocabulary: [PersonalData](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/PersonalData.md) -- OpenAPI: [Extensions](https://github.com/SAP/openapi-specification/tree/main/sap-extensions) - -## Schema Definitions - -* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). -* The interface is available as JSON Schema: [personal-data.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/personal-data.schema.json#). - -### Annotations Overview - -| Annotation | Scope | Description | -| -------- | ---- | ----------- | -| [@PersonalData.entitySemantics](#personaldataentitysemantics) | Entity | Primary meaning of the entities in the annotated entity set. Entities annotated with @PersonalData.entitySemantics are synonymous to @PersonalData.isPotentiallyPersonal. | -| [@PersonalData.dataSubjectRole](#personaldatadatasubjectrole) | Entity | Role of the data subjects in this set (e.g. employee, customer). Values are application-specific. | -| [@PersonalData.dataSubjectRoleDescription](#personaldatadatasubjectroledescription) | Entity | Language-dependent description of the role of the data subjects in this set (e.g. employee, customer). Values are application-specific. | -| [@PersonalData.fieldSemantics](#personaldatafieldsemantics) | Type | Primary meaning of the personal data contained in the annotated property. Changes to values of annotated properties are tracked in the audit log. Use this annotation also on fields that are already marked as contact or address data. Properties annotated with fieldSemantics need not be additionally annotated with @PersonalData.isPotentiallyPersonal. | -| [@PersonalData.isPotentiallyPersonal](#personaldataispotentiallypersonal) | Type | Property contains potentially personal data. Properties annotated with `@PersonalData.fieldSemantics` need not be additionally annotated with this annotation. Personal data describes any information which is related to an identified or identifiable natural person (data subject). An identifiable person is one who can be identified, directly or indirectly, in particular by a 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. | -| [@PersonalData.isPotentiallySensitive](#personaldataispotentiallysensitive) | Type | Property contains potentially sensitive personal data. Sensitive personal data is a category of personal data that needs special handling. The determination which personal data is sensitive may differ for different legal areas or industries.
Examples of sensitive personal data:
- Special categories of personal data, such as data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, trade union membership, genetic data, biometric data, data concerning health or sex life or sexual orientation.
- Personal data subject to professional secrecy
- Personal data relating to criminal or administrative offenses
- Personal data concerning insurances and bank or credit card accounts | - -### @PersonalData.entitySemantics - -Primary meaning of the entities in the annotated entity set. Entities annotated with @PersonalData.entitySemantics are synonymous to @PersonalData.isPotentiallyPersonal. - -**Type:** string
-**Allowed Values**:
  • `"DataSubject"`: Describes a data subject, for example, a customer or vendor.

  • `"DataSubjectDetails"`: Describes entities that contain details for a data subject, for example an address.

  • `"Other"`: Entities that contain personal data or references to data subjects but do not represent data subjects or details itself. For example: customer quote, customer order, or purchase order.

-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @PersonalData.dataSubjectRole - -Role of the data subjects in this set (e.g. employee, customer). Values are application-specific. - -**Type:** string
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @PersonalData.dataSubjectRoleDescription - -Language-dependent description of the role of the data subjects in this set (e.g. employee, customer). Values are application-specific. - -**Type:** string
-**Scope:** Entity
-**Extending:** [EntityDefinition](../spec-v1/csn-interop-effective#entity-definition) - -### @PersonalData.fieldSemantics - -Primary meaning of the personal data contained in the annotated property. Changes to values of annotated properties are tracked in the audit log. Use this annotation also on fields that are already marked as contact or address data. Properties annotated with fieldSemantics need not be additionally annotated with @PersonalData.isPotentiallyPersonal. - -**Type:** string
-**Allowed Values**:
  • `"DataSubjectID"`: Identifies the data subject unique key or references it.

  • `"DataSubjectIDType"`: The type describing the DataSubjectID identifying the data subject, e.g., an e-mail address, semantic of the ID or a customer.

  • `"ConsentID"`: The unique identifier for a consent. A consent is an action of data subjects confirming that the usage of their personal data shall be allowed for a given purpose. A consent functionality allows the storage of a consent record in relation to a specific purpose and shows if a data subject has granted, withdrawn, or denied consent.

  • `"PurposeID"`: The unique identifier for the purpose of processing of personal data. Any processing of personal data is based on specified, explicit, and legitimate purposes and not further processed in a manner that is incompatible with those purposes. The purpose is defined by the data controller or joint data controllers.

  • `"ContractRelatedID"`: The unique identifier for transactional data that is related to a contract that requires processing of personal data. For example, Sales Contract ID, Purchase Contract ID, or Service Contract ID.

  • `"DataControllerID"`: The unique identifier of a legal entity which alone or jointly with others determines the purposes and means of the processing of personal data. The Data Controller is fully responsible (and accountable) that data protection and privacy principles (such as purpose limitation or data minimization), defined in the European General Data Protection Regulation (GDPR) or any other data protection legislation, are adhered to when processing personal data. The DataControllerID succeeds the LegalEntityID.

  • `"UserID"`: The unique identifier of a user. A user is an individual who interacts with the services supplied by a system.

  • `"EndOfBusinessDate"`: Defines the end of active business and the start of residence time and retention period. End of business is the point in time when the processing of a set of personal data is no longer required for the active business, for example, when a contract is fulfilled. After it has been reached and a customer-defined residence period has passed, the data is blocked and can only be accessed by users with special authorizations (for example, tax auditors). All fields of type Edm.Date or Edm.DateTimeOffset on which the end of business determination depends should be annotated.

  • `"BlockingDate"`: Defines a date that marks when the provider of the data will block these. This is the point in time when the processing of a set of personal data is no longer required for the active business, for example, when a contract is fulfilled. After it has been reached, the data is blocked in the source and can only be displayed by users with special authorizations (for example, tax auditors); however, it is not allowed to create/change/copy/follow-up blocked data. Consumers of the data should consider if there is an additional purpose to process the data beyond the defined blocking date

  • `"EndOfRetentionDate"`: Defines a date that marks when the provider of the data can destroy these. Consumers of the data should consider if there is an additional purpose (or a legal hold) to process the data beyond the defined destruction date.

-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @PersonalData.isPotentiallyPersonal - -Property contains potentially personal data. Properties annotated with `@PersonalData.fieldSemantics` need not be additionally annotated with this annotation. Personal data describes any information which is related to an identified or identifiable natural person (data subject). An identifiable person is one who can be identified, directly or indirectly, in particular by a 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. - -**Type:** boolean
-**Default Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @PersonalData.isPotentiallySensitive - -Property contains potentially sensitive personal data. Sensitive personal data is a category of personal data that needs special handling. The determination which personal data is sensitive may differ for different legal areas or industries. -Examples of sensitive personal data: -- Special categories of personal data, such as data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, trade union membership, genetic data, biometric data, data concerning health or sex life or sexual orientation. -- Personal data subject to professional secrecy -- Personal data relating to criminal or administrative offenses -- Personal data concerning insurances and bank or credit card accounts - -**Type:** boolean
-**Default Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) diff --git a/docs/annotations/semantics.md b/docs/annotations/semantics.md deleted file mode 100644 index daf79bb6..00000000 --- a/docs/annotations/semantics.md +++ /dev/null @@ -1,340 +0,0 @@ ---- -title: "@Semantics" -sidebar_position: "10" -description: "@Semantics annotations." ---- - -> BETA This annotation is beta and should be reviewed for completion and correctness. - -## Introduction - -The Core engines both on provision- and consumption-side need besides technical metadata also additional semantics for optimized processing. -These additional semantics are defined for data processing, analytics and data consumption. - -## Schema Definitions - -* This is an extension vocabulary for [CSN Interop Effective Document](../spec-v1/csn-interop-effective). -* The interface is available as JSON Schema: [semantics.schema.json](https://sap.github.io/csn-interop-specification/spec-v1/semantics.schema.json#). - -### Annotations Overview - -| Annotation | Scope | Description | -| -------- | ---- | ----------- | -| [@Semantics.valueRange](#semanticsvaluerange) | IntegerType, Integer64Type, DecimalType, DoubleType | Informs consumers about the value range of a CDS element, allowing to specify minimal and/or maximal values, and indicate whether these are exclusive or inclusive.
This value range can be used for client-side validation of user input. | -| [@Semantics.currencyCode](#semanticscurrencycode) | Type | The property contains a currency code. | -| [@Semantics.amount.currencyCode](#semanticsamountcurrencycode) | Type | The element contains an amount.
The annotation points to an element containing the currency code. | -| [@Semantics.unitOfMeasure](#semanticsunitofmeasure) | Type | The element contains a unit of measure. | -| [@Semantics.quantity.unitOfMeasure](#semanticsquantityunitofmeasure) | Type | The element contains a quantity.
The annotation points to an element containing the unit of measure. | -| [@Semantics.calendar.dayOfMonth](#semanticscalendardayofmonth) | Type | The element states the day of month. | -| [@Semantics.calendar.dayOfYear](#semanticscalendardayofyear) | Type | The element states the day of year. | -| [@Semantics.calendar.week](#semanticscalendarweek) | Type | The element states the calendar week. | -| [@Semantics.calendar.month](#semanticscalendarmonth) | Type | The element states the calendar month. | -| [@Semantics.calendar.quarter](#semanticscalendarquarter) | Type | The element states the calendar quarter. | -| [@Semantics.calendar.halfyear](#semanticscalendarhalfyear) | Type | The element states the calendar halfyear. | -| [@Semantics.calendar.year](#semanticscalendaryear) | Type | The element states the calendar year. | -| [@Semantics.calendar.yearWeek](#semanticscalendaryearweek) | Type | The element states the calendar year week. | -| [@Semantics.calendar.yearMonth](#semanticscalendaryearmonth) | Type | The element states the calendar year month. | -| [@Semantics.calendar.yearQuarter](#semanticscalendaryearquarter) | Type | The element states the calendar year quarter. | -| [@Semantics.calendar.yearHalfyear](#semanticscalendaryearhalfyear) | Type | The element states the calendar year halfyear. | -| [@Semantics.fiscal.yearVariant](#semanticsfiscalyearvariant) | Type | The element states the calendar year variant. | -| [@Semantics.fiscal.period](#semanticsfiscalperiod) | Type | The element states the fiscal period. | -| [@Semantics.fiscal.year](#semanticsfiscalyear) | Type | The element states the fiscal year. | -| [@Semantics.fiscal.yearPeriod](#semanticsfiscalyearperiod) | Type | The element states the fiscal year period. | -| [@Semantics.fiscal.quarter](#semanticsfiscalquarter) | Type | The element states the fiscal quarter. | -| [@Semantics.fiscal.yearQuarter](#semanticsfiscalyearquarter) | Type | The element states the fiscal year quarter. | -| [@Semantics.fiscal.week](#semanticsfiscalweek) | Type | The element states the fiscal week. | -| [@Semantics.fiscal.yearWeek](#semanticsfiscalyearweek) | Type | The element states the fiscal year week. | -| [@Semantics.fiscal.dayOfYear](#semanticsfiscaldayofyear) | Type | The element states the fiscal day of year. | -| [@Semantics.language](#semanticslanguage) | Type | The property contains a language code. | -| [@Semantics.time](#semanticstime) | Type | This annotation is used to indicate a date semantic for the NVARCHAR-based ABAP type TIMS. | -| [@Semantics.text](#semanticstext) | Type | The property contains a human-readable text. | -| [@Semantics.uuid](#semanticsuuid) | Type | Tags a field containing a GUID in RAW16 or CHAR32 format.

It is RECOMMENDED to explicitly use the `csd.UUID` type. | -| [@Semantics.businessDate.from](#semanticsbusinessdatefrom) | Type | The property contains a date which is the lower boundary of a (validity) interval (for time dependent master data). | -| [@Semantics.businessDate.to](#semanticsbusinessdateto) | Type | The property contains a date which is the upper boundary of a (validity) interval (for time dependent master data). | - -### @Semantics.valueRange - -Informs consumers about the value range of a CDS element, allowing to specify minimal and/or maximal values, and indicate whether these are exclusive or inclusive. -This value range can be used for client-side validation of user input. - -**Type**: Object(minimum, exclusiveMinimum, maximum, exclusiveMaximum) - -| Property | Type | Description | -| -------- | ---- | ----------- | -|
minimum
OPTIONAL
|
string
|
Specifies the minimum value.
| -|
exclusiveMinimum
OPTIONAL
|
boolean
|
Specifies if the lower boundary should be excluded.
Not specifying this annotation means that the lower boundary is included.
**Default Value**: `false`
| -|
maximum
OPTIONAL
|
string
|
Specifies the maximum value.
| -|
exclusiveMaximum
OPTIONAL
|
boolean
|
Specifies if the upper boundary should be excluded.
Not specifying this annotation means that the upper boundary is included.
**Default Value**: `false`
| - - -### @Semantics.currencyCode - -The property contains a currency code. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.amount.currencyCode - -The element contains an amount. -The annotation points to an element containing the currency code. - -**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.unitOfMeasure - -The element contains a unit of measure. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.quantity.unitOfMeasure - -The element contains a quantity. -The annotation points to an element containing the unit of measure. - -**External Type**: [Element Reference](../spec-v1/csn-interop-effective#element-reference)
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.dayOfMonth - -The element states the day of month. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.dayOfYear - -The element states the day of year. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.week - -The element states the calendar week. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.month - -The element states the calendar month. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.quarter - -The element states the calendar quarter. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.halfyear - -The element states the calendar halfyear. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.year - -The element states the calendar year. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.yearWeek - -The element states the calendar year week. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.yearMonth - -The element states the calendar year month. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.yearQuarter - -The element states the calendar year quarter. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.calendar.yearHalfyear - -The element states the calendar year halfyear. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.fiscal.yearVariant - -The element states the calendar year variant. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.fiscal.period - -The element states the fiscal period. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.fiscal.year - -The element states the fiscal year. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.fiscal.yearPeriod - -The element states the fiscal year period. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.fiscal.quarter - -The element states the fiscal quarter. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.fiscal.yearQuarter - -The element states the fiscal year quarter. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.fiscal.week - -The element states the fiscal week. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.fiscal.yearWeek - -The element states the fiscal year week. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.fiscal.dayOfYear - -The element states the fiscal day of year. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.language - -The property contains a language code. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.time - -This annotation is used to indicate a date semantic for the NVARCHAR-based ABAP type TIMS. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.text - -The property contains a human-readable text. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.uuid - -Tags a field containing a GUID in RAW16 or CHAR32 format. - -It is RECOMMENDED to explicitly use the `csd.UUID` type. - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.businessDate.from - -The property contains a date which is the lower boundary of a (validity) interval (for time dependent master data). - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) - -### @Semantics.businessDate.to - -The property contains a date which is the upper boundary of a (validity) interval (for time dependent master data). - -**Type:** boolean
-**Constant Value**: `true`
-**Scope:** Type
-**Extending:** [BooleanType](../spec-v1/csn-interop-effective#boolean-type), [StringType](../spec-v1/csn-interop-effective#string-type), [LargeStringType](../spec-v1/csn-interop-effective#largestring-type), [IntegerType](../spec-v1/csn-interop-effective#integer-type), [Integer64Type](../spec-v1/csn-interop-effective#integer64-type), [DecimalType](../spec-v1/csn-interop-effective#decimal-type), [DoubleType](../spec-v1/csn-interop-effective#double-type), [DateType](../spec-v1/csn-interop-effective#date-type), [TimeType](../spec-v1/csn-interop-effective#time-type), [DateTimeType](../spec-v1/csn-interop-effective#datetime-type), [TimestampType](../spec-v1/csn-interop-effective#timestamp-type), [UUIDType](../spec-v1/csn-interop-effective#uuid-type), [AssociationType](../spec-v1/csn-interop-effective#association-type), [CompositionType](../spec-v1/csn-interop-effective#composition-type), [CustomType](../spec-v1/csn-interop-effective#custom-type), [TypeDefinition](../spec-v1/csn-interop-effective#type-definition), [BooleanTypeDefinition](../spec-v1/csn-interop-effective#boolean-type-definition), [StringTypeDefinition](../spec-v1/csn-interop-effective#string-type-definition), [LargeStringTypeDefinition](../spec-v1/csn-interop-effective#largestring-type-definition), [IntegerTypeDefinition](../spec-v1/csn-interop-effective#integer-type-definition), [Integer64TypeDefinition](../spec-v1/csn-interop-effective#integer64-type-definition), [DecimalTypeDefinition](../spec-v1/csn-interop-effective#decimal-type-definition), [DoubleTypeDefinition](../spec-v1/csn-interop-effective#double-type-definition), [DateTypeDefinition](../spec-v1/csn-interop-effective#date-type-definition), [TimeTypeDefinition](../spec-v1/csn-interop-effective#time-type-definition), [DateTimeTypeDefinition](../spec-v1/csn-interop-effective#datetime-type-definition), [TimestampTypeDefinition](../spec-v1/csn-interop-effective#timestamp-type-definition), [UUIDTypeDefinition](../spec-v1/csn-interop-effective#uuid-type-definition), [AssociationTypeDefinition](../spec-v1/csn-interop-effective#association-type-definition), [CompositionTypeDefinition](../spec-v1/csn-interop-effective#composition-type-definition) From 73896447fc6f78146e8b8e1a9108323cf9a175c7 Mon Sep 17 00:00:00 2001 From: Simon Heimler Date: Wed, 2 Apr 2025 09:48:45 +0200 Subject: [PATCH 3/3] Add worflow_dispatch to deploy job --- .github/workflows/deploy.yml | 2 ++ .github/workflows/main.yml | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a1c63b56..f3dabff2 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,6 +3,8 @@ name: Main on: push: branches: [main] + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: jobs: build: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f96c0d1d..b300a4d8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,8 +3,6 @@ name: Main on: pull_request: branches: [main] - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: jobs: build: