3.2.17 Changing Node Attributes

After a Node has been published, modifying certain attributes constitutes a breaking change, while others may be changed without affecting backward compatibility. Some constraints are already implied—for example, the DataType of a Variable shall not be changed (see 3.2.12). In general, changes to attributes should be avoided unless there is a compelling justification.

Table 1 lists all Node attributes and specifies whether they may be modified without introducing breaking changes (column “Rule to avoid breaking changes”).

The table also indicates whether an attribute may still be changed by a Server implementation when a companion specification is implemented in the Server (column “Change in Server allowed?”). For example, the Description attribute, when provided by the companion specification, may be left out in the Server. This reduces memory consumption and may be helpful servers running in small, embedded environments. Or the text may be provided in other locales.

Note that the information if an attribute may be changed in the Server is not related to backward compatibility.

Table 1 – Rules for backward compatibly of attributes
NodeClass Attribute Rule to avoid breaking changes Change in Server allowed?
BaseNodeIdShall not changeNo
NodeClassShall not changeNo
BrowseNameShall not changeNo
DisplayNameMay change; the meaning shall not changeYes
DescriptionMay change; the meaning shall not changeYes
WriteMaskTypically, not defined; may be changedYes
UserWriteMaskImplementation-specific; is not definedYes (Calculated in server)
RolePermissionsTypically, not defined; may be changedYes
UserRolePermissionsImplementation-specific; is not definedYes (Calculated in server)
AccessRestrictionsTypically, not defined; may be changedYes
ReferenceTypeIsAbstractMay be changed from true to false, but not vice versaNo
SymmetricShall not changeNo
InverseNameMay change; the meaning shall not changeYes
ViewContainsNoLoopsTypically, not defined; may be changedYes
EventNotifierTypically, not defined; may be changedYes
ObjectEventNotifierTypically, not defined; may be changedYes
ObjectTypeIsAbstractMay be changed from true to false, but not vice versaNo
VariableValueTypically, not defined; may be changedYes
DataTypeShall not change

No, for InstanceDeclarations

Yes, for instances, if it becomes more restrictive (subtype)

ValueRankShall not change

No, for InstanceDeclarations

Yes, for instances, if it becomes more restrictive (as in subtype rules)

ArrayDimensionsTypically, not defined; shall not changeYes, if not defined
(per dimension)
AccessLevelMay be changedYes
UserAccessLevelImplementation-specific; is not definedYes (Calculated in server)
MinimumSamplingIntervalTypically, not defined; may be changedYes
HistorizingTypically, not defined; may be changedYes
AccessLevelExMay be changedYes
VariableTypeValueTypically, not defined; may be changedYes
DataTypeShall not changeNo
ValueRankShall not changeNo
ArrayDimensionsTypically, not defined; shall not changeYes, if not defined
(per dimension)
IsAbstractMay be changed from true to false, but not vice versaNo
MethodExecutableImplementation-specific; should not be definedYes
UserExecutableImplementation-specific; is not definedYes (Calculated in server)
DataTypeIsAbstractMay be changed from true to false, not vice versaNo
DataTypeDefinitionShall not changeNo

Remark: A special case is the SymbolicName, which is not an OPC UA attribute but can be defined in a UANodeSet. Changing a SymbolicName is not considered a breaking change; however, it should be avoided because it may affect code generation. Implementers may change the SymbolicName before using a standardized UANodeSet without violating the specification.