Variablesare used to represent values. Two types of Variablesare defined, Propertiesand DataVariables. They differ in the kind of data that they represent and whether they can contain other Variables.

Propertiesare Server-defined characteristics of Objects, DataVariablesand other Nodes. Propertiesdiffer from Attributesin that they characterise whatthe Noderepresents, such as a device or a purchase order. Attributesdefine additional metadata that is instantiated for all Nodesfrom a NodeClass. Attributesare common to all Nodesof a NodeClassand only defined by this specification whereas Propertiescan be Server-defined.

For example, an Attributedefines the DataTypeof Variableswhereas a Propertycan be used to specify the engineering unit of some Variables.

To prevent recursion, Propertiesare not allowed to have Propertiesdefined for them. To easily identify Properties, the BrowseNameof a Propertyshall be unique in the context of the Nodecontaining the Properties (see 5.6.3for details).

A Nodeand its Propertiesshall always reside in the same Server.

DataVariablesrepresent the content of an Object. For example, a file Objectmay be defined that contains a stream of bytes. The stream of bytes may be defined as a DataVariablethat is an array of bytes. Propertiesmay be used to expose the creation time and owner of the file Object.

For example, if a DataVariableis defined by a data structure that contains two fields, “startTime” and “endTime” then it might have a Propertyspecific to that data structure, such as “earliestStartTime”.

As another example, function blocks in control systems might be represented as Objects. The parameters of the function block, such as its setpoints, may be represented as DataVariables. The function block Objectmight also have Propertiesthat describe its execution time and its type.

DataVariablesmay have additional DataVariables, but only if they are complex. In this case, their DataVariablesshall always be elements of their complex definitions. Following the example introduced by the description of Propertiesin 4.4.2, the Servercould expose “startTime” and “endTime” as separate components of the data structure.

As another example, a complex DataVariablemay define an aggregate of temperature values generated by three separate temperature transmitters that are also visible in the AddressSpace. In this case, this complex DataVariablecould define HasComponent Referencesfrom it to the individual temperature values that it is composed of.