OPC UA relates Nodes using References. This concept is intentionally a simple construct, where the only information of a Reference is the SourceNode, the TargetNode, the ReferenceType and for asymmetric ReferenceTypes the direction (forward or inverse).
Sometimes, it is desirable to add more information to such a Reference. The concept of a ReferenceDescription keeps the simple Reference unchanged, and creates a Variable which is used to add more information about the Reference. Such a Variable can be referenced from the SourceNode and / or the TargetNode of such a Reference. Potentially, it can also be referenced by other Nodes to provide additional information (see also 5.2). As Nodes can have several References, each ReferenceDescription Variable contains the unique definition of one Reference. An example is given in Figure 2. ObjectA references ObjectB and ObjectC, each using the ReferenceType SomeReferenceType. Both References are described by a ReferenceDescription, that is, the Variables SomeReferenceType1 and SomeReferenceType2. The Values of those Variables uniquely identify the References by providing SourceNode, TargetNode, ReferenceType and direction. In the example, both ReferenceDescriptions have a Property with additional information, one called AdditionalInformationABC and the other AdditionalInformationXYZ.
Figure 2 – Example of ReferenceDescriptions
The following rules apply for using a ReferenceDescription.
- A ReferenceDescription Variable shall be of VariableType ReferenceDescriptionVariableType (see 5.3.1) or a subtype.
- The ReferenceDescription Variable shall exist only in addition to the Reference it describes.
- The Server shall expose the Reference in the direction described in the ReferenceDescription, i.e. if it is described as inverse, the inverse Path shall be browsable.
- The SourceNode defined in the Value shall reference the ReferenceDescription Variable using the HasReferenceDescription ReferenceType (see 5.4.1) or a subtype. The TargetNode and potentially other Nodes might reference the ReferenceDescription Variable using the HasReferenceDescription ReferenceType.
- The BrowseName of a ReferenceDescription Variable should be the BrowseName of the ReferenceType, or in case of ambiguities, prefixed with the BrowseName of the ReferenceType followed by a suffix making the BrowseName unique in that context. In case of an inverse Reference (IsForward set to FALSE), the BrowseName should be prefixed with the BrowseName of the ReferenceType, followed by “Inverse”, and potentially followed by a suffix making the BrowseName unique in that context. Clients shall not make assumptions about the BrowseName and therefore should use for the ReferenceType and/or VariableType to receive ReferenceDescription Variables, not the BrowseName.
- For each unique Reference (SourceNode, ReferenceType, IsForward, TargetNode) there shall be at most one ReferenceDescription Variable. The same Reference might be exposed two times by switching SourceNode and TargetNode and, in case of asymmetric References, inverting IsForward. In case of symmetric References, the IsForward is always set to TRUE.