Skip to content

Property

Kevalkumar edited this page Nov 6, 2026 · 2 revisions

Overview

A Property is a scalar-valued SubmodelElement used to represent a single, typed value identified by a semantic ID. According to the IDTA AAS specification, a Property has no inherent ambiguity when its semantic ID is unique.

DataEngine supports Property elements as a core SubmodelElement type and treats them as the simplest and most deterministic form of value resolution.

Semantics and intent

  • A Property represents a single scalar value.

  • The meaning of the value is defined entirely by its semanticId.

  • The expected data type is defined by valueType.

Because of this strict definition, Properties are ideal candidates for semanticId-based resolution via Plugins.

How DataEngine handles Property

DataEngine applies the following handling rules for Property elements:

  • A strict one-to-one mapping is maintained between a semanticId and its value.

  • The semanticId is extracted from the template during submodel or submodel element requests.

  • Only when the template has no valid value, DataEngine requests the value for the semanticId from the Plugin and passes the expected valueType to the Plugin.

  • The Plugin returns a scalar value mapped to the semanticId.

  • DataEngine validates the value against the declared valueType.

  • The validated value is injected into the Property element without altering its structure.

DataEngine does not infer, aggregate, or transform Property values.

Example

Submodel template (from Template Repository)

The following example shows a Property definition in a submodel template. The template contains structural and semantic information but no runtime value.

{
	"modelType": "Property",
	"idShort": "RatedVoltage",
	"semanticId": {
		"type": "ExternalReference",
		"keys": [{ "type": "GlobalReference", "value": "https://example.com/semantics/electrical/ratedVoltage" }]
	},
	"valueType": "xs:double",
	"value": ""
}

Value provided by Plugin

The Plugin resolves the semanticId and returns the corresponding scalar value. The response format is based on semanticId-to-value mapping.

{
  "https://example.com/semantics/electrical/ratedVoltage": "230.0"
}

DataEngine response to user

DataEngine injects the resolved value into the Property while preserving all original metadata.

{
	"modelType": "Property",
	"idShort": "RatedVoltage",
	"semanticId": {
		"type": "ExternalReference",
		"keys": [{ "type": "GlobalReference", "value": "https://example.com/semantics/electrical/ratedVoltage" }]
	},
	"valueType": "xs:double",
	"value": "230.0"
}

Template value resolution

If the template already contains a value for the Property, DataEngine returns that value and does not request it from the Plugin. A value counts as present unless it is null, empty, whitespace-only or the text null (any casing). Values such as 0 and false are valid. When no valid value is present, the normal Plugin flow applies unchanged.

Constraints and behavior

  • Each Property semanticId must resolve to at most one value.

  • If a Plugin does not return a value for the semanticId, the Property may be returned with an empty value or throw erorr depedens on Cardinality.

  • If the returned value does not match valueType, the request will fail.

Clone this wiki locally