An alternative way (to using a node ID) of specifying a node in OPC address space is using a browse path. The browse path is a sequence of node names, starting from a known location (e.g. the root of the OPC address space). The browse path can also be expressed as a string, where the individual node names are separated by delimiters (e.g. “/”, a slash).
Browse paths can be absolute (starting from a specified node), or relative.
The advantage of the browse paths is that you can construct them yourself, with just knowledge of the node names, without knowing the full node IDs. In the end, each item must be addressed by its node ID, and QuickOPC will resolve the browse path to a node ID as necessary.
In OPC Unified Architecture, each element of the browse path is not a simple string, but instead, it is a structured object (UABrowsePathElement) which contains more information that allows identifying the child node.
The OPC-UA browse path element contains a qualified name of the child node (a name qualified with a namespace URI), in the UABrowsePathElement.TargetName property. This allows ensuring the uniqueness of browse path elements in complex OPC-UA servers, such as when the address space is aggregated from multiple sources.
Because in OPC-UA there may be various references that lead from the parent node to a child node, the OPC-UA browse paths need to specify which type of reference should be used. This is done by the UABrowsePathElement.ReferenceTypeId property; in addition, it is possible to specify whether the reference should be followed in reverse direction (UABrowsePathElement.ReferenceIsInverse), and whether subtypes of the given reference type should also be considered.
An absolute browse path for OPC-UA is contained in a UABrowsePath object. The starting node of an OPC-UA browse path is contained in the UABrowsePath.StartingNodeId property. Browse paths are commonly specified by the BrowsePath property of the UANodeDescriptor object.
The UABrowsePath can be a null browse path, in case its StartingNodeId is a null node ID. A null browse path is used to specify that no browse path is known or given. Note that passing a null browse path object is different from passing a null reference to UABrowsePath (which is not allowed in most places).
If a non-null NodeId is specified in the descriptor, QuickOPC will use this node Id and ignore the browse path. If NodeId is null, QuickOPC will attempt to resolve the browse path contained in the BrowsePath property of the descriptor. Either node ID, or browse path (or both) must be specified.