Skip to content
Kevalkumar edited this page Jan 23, 2026 · 1 revision

Overview

A Range is a SubmodelElement used to represent a value interval defined by two bounds: min and max.According to the IDTA AAS specification, both bounds share the same semantic meaning, which introduces ambiguity when resolving values purely by semantic ID.

DataEngine supports Range elements by applying a deterministic semanticId-splitting strategy that allows unambiguous value resolution via Plugins.

Semantics and intent

  • A Range represents an interval with a lower bound (min) and an upper bound (max).
  • Both bounds conceptually share the same semantic meaning.
  • The expected data type for both bounds is defined by valueType.
  • Because a single semanticId cannot uniquely identify two values, special handling is required during runtime resolution.

How DataEngine handles Range

DataEngine applies the following handling rules for Range elements:

  • A single semanticId is extracted from the template during submodel or submodel element requests.
  • To avoid ambiguity, DataEngine derives variant-specific semantic IDs for the bounds:
    • <semanticId>_min
    • <semanticId>_max
  • The suffix separator and naming convention are configurable.
  • DataEngine requests both derived semantic IDs from the Plugin.
  • The Plugin returns one value per derived semantic ID.
  • DataEngine maps the returned values back to the min and max fields of the Range element.
  • Both values are validated against the declared valueType.
  • DataEngine does not infer missing bounds or reorder values.

Example

Submodel template (from Template Repository)

{
	"modelType": "Range",
	"idShort": "Wavelength",
	"semanticId": {
		"type": "ExternalReference",
		"keys": [{ "type": "GlobalReference", "value": "https://admin-shell.io/SMT/General/Wavelength" }]
	},
	"valueType": "xs:double",
	"min": "",
	"max": ""
}

Value provided by Plugin

The Plugin returns values for the derived semantic IDs.

{
    "https://admin-shell.io/SMT/General/Wavelength": {
        "https://admin-shell.io/SMT/General/Wavelength_min": "11.0",
        "https://admin-shell.io/SMT/General/Wavelength_max": "98.3"
    }
}

DataEngine response to user

DataEngine maps the resolved values back into the Range element.

{
	"modelType": "Range",
	"idShort": "Wavelength",
	"semanticId": {
		"type": "ExternalReference",
		"keys": [{ "type": "GlobalReference", "value": "https://admin-shell.io/SMT/General/Wavelength" }]
	},
	"valueType": "xs:double",
	"min": "11.0",
	"max": "36.4"
}

Constraints and behavior

  • Each Range semanticId must resolve to exactly two bound values (min and max) when fully populated.
  • Plugins must follow the agreed suffix convention when returning values.
  • If one bound is missing, the Range may be returned partially populated.
  • DataEngine does not enforce ordering (for example, min < max).
  • Type validation is applied uniformly to both bounds based on valueType.

Clone this wiki locally