Skip to main content

AddIns

Introduction

AddIns in OPC UA are a way to extend the functionality of an OPC UA server by adding custom components using aggregation.

This page will guide you through creating AddIn object types and their instances using the OPC UA Modeler. It also explains how to define AddIn ObjectTypes in the YAML configuration.

Creating AddIn ObjectTypes

An AddIn ObjectType must have a 0:DefaultInstanceBrowseName property that specifies the BrowseName of the default instance of the AddIn. For simplicity, we have added a defaultInstanceBrowseName property shortcut in the YAML configuration.

Example

Using defaultInstanceBrowseName
objectTypes:
- browseName: MyComponentType
defaultInstanceBrowseName: MyComponent

This is equivalent to explicitly declaring the property on the object type:

Explicitly declaring DefaultInstanceBrowseName
objectTypes:
- browseName: MyExplicitComponentType
properties:
- browseName: ua:DefaultInstanceBrowseName
dataType: ua:QualifiedName
value: MyComponent

Creating Instances of AddIn object types

Once an AddIn object type has been created, you can create an instance of it by using the addIns: property.

Example

Creating AddIn instance
instances:
- browseName: MyDevice
typeDefinition: ua:BaseObjectType
organizedBy: /ua:Objects
addIns:
- typeDefinition: MyComponentType

By default, the AddIns instance name will be the same as the value stored in the defaultInstanceBrowseName property of the AddIn ObjectType.

Specifying Different Names for AddIn Instances

If you want to specify a different name for the AddIn instance or add multiple instances of the same component inside your object or object type, you can do so by using the browseName property:

Specifying custom BrowseNames
instances:
- browseName: MyMultiDevice
typeDefinition: ua:BaseObjectType
organizedBy: /ua:Objects
addIns:
- typeDefinition: MyComponentType
- typeDefinition: MyComponentType
browseName: MyComponent1
- typeDefinition: MyComponentType
browseName: MyComponent2

Instantiating AddIn inside an object type Declaration

You can also instantiate AddIns inside an object type declaration in the same way. When doing this, you can add the modellingRule property to specify whether the AddIn is optional or mandatory.

Example

Declaring AddIns on ObjectType
objectTypes:
- browseName: MyDeviceType
addIns:
- typeDefinition: MyComponentType
browseName: MyComponent1
# modellingRule: Mandatory (default)
- typeDefinition: MyComponentType
browseName: MyComponent2
modellingRule: Optional

In this example, MyComponentType is instantiated inside MyDeviceType. By default, the AddIn is mandatory, so you only need to specify modellingRule: Optional if the AddIn is optional.


Advanced AddIn Scenarios

Here are three advanced use cases that demonstrate how to manage optional properties, promote elements, and initialize data values on AddIns.

1. AddIn with Promoted to Mandatory (in Type)

When defining a new ObjectType, you can instantiate an AddIn and promote its optional properties to mandatory at the type definition level using the promotedToMandatory property.

addin-promoted.model.yaml
# yaml-language-server: $schema=../../../schemas/nodeset2.schema.json
namespaceUri: http://sterfive.com/UA/doc-examples/addins-promoted/
version: 1.0.0
publicationDate: "2026-05-26T00:00:00Z"

objectTypes:
- browseName: MyAddInType
defaultInstanceBrowseName: MyAddIn
properties:
- browseName: Model
dataType: ua:String
- browseName: Serial
dataType: ua:String
modellingRule: Optional

- browseName: MyContainerType
addIns:
- typeDefinition: MyAddInType
browseName: CustomAddIn
promotedToMandatory:
- Serial
📄 Generated NodeSet2.xml — addin-promoted.model.Nodeset2.xml
addin-promoted.model.Nodeset2.xml
<?xml version="1.0"?>
<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:ns1="http://sterfive.com/UA/doc-examples/addins-promoted/Type.xsd">
<NamespaceUris>
<Uri>http://sterfive.com/UA/doc-examples/addins-promoted/</Uri>
</NamespaceUris>
<Models>
<Model ModelUri="http://sterfive.com/UA/doc-examples/addins-promoted/" Version="1.0.0" PublicationDate="2026-05-26T00:00:00.000Z">
<RequiredModel ModelUri="http://opcfoundation.org/UA/" Version="1.05.06" PublicationDate="2025-11-08T00:00:00.000Z"/>
</Model>
</Models>
<Aliases>
<Alias Alias="HasAddIn">i=17604</Alias>
<Alias Alias="HasModellingRule">i=37</Alias>
<Alias Alias="HasProperty">i=46</Alias>
<Alias Alias="HasSubtype">i=45</Alias>
<Alias Alias="HasTypeDefinition">i=40</Alias>
<Alias Alias="QualifiedName">i=20</Alias>
<Alias Alias="String">i=12</Alias>
</Aliases>
<!--ReferenceTypes-->
<!--ObjectTypes-->
<!--ObjectType - 1:MyAddInType {{{{ -->
<UAObjectType NodeId="ns=1;i=1000" BrowseName="1:MyAddInType">
<DisplayName>MyAddInType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1001</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1002</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1003</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1001" BrowseName="1:Model" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="String">
<DisplayName>Model</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1002" BrowseName="1:Serial" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="String">
<DisplayName>Serial</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1003" BrowseName="DefaultInstanceBrowseName" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="QualifiedName">
<DisplayName>DefaultInstanceBrowseName</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
<Value>
<uax:QualifiedName>
<uax:Name>MyAddIn</uax:Name>
<uax:NamespaceIndex>1</uax:NamespaceIndex>
</uax:QualifiedName>
</Value>
</UAVariable>
<!--ObjectType - 1:MyAddInType }}}}-->
<!--ObjectType - 1:MyContainerType {{{{ -->
<UAObjectType NodeId="ns=1;i=1004" BrowseName="1:MyContainerType">
<DisplayName>MyContainerType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasAddIn">ns=1;i=1005</Reference>
</References>
</UAObjectType>
<!--Object - 1:CustomAddIn {{{{ -->
<UAObject NodeId="ns=1;i=1005" BrowseName="1:CustomAddIn" ParentNodeId="ns=1;i=1004">
<DisplayName>CustomAddIn</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1000</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1006</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1007</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1006" BrowseName="1:Model" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="String">
<DisplayName>Model</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1007" BrowseName="1:Serial" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="String">
<DisplayName>Serial</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--Object - 1:CustomAddIn }}}} -->
<!--ObjectType - 1:MyContainerType }}}}-->
<!--VariableTypes-->
<!--Other Nodes-->
</UANodeSet>

2. AddIn with Optionals (in Instance)

When instantiating an AddIn on a concrete instance, you can explicitly opt-in to instantiate optional components or properties defined in the AddIn's type definition using the optionals: list.

addin-optionals.model.yaml
# yaml-language-server: $schema=../../../schemas/nodeset2.schema.json
namespaceUri: http://sterfive.com/UA/doc-examples/addins-optionals/
version: 1.0.0
publicationDate: "2026-05-26T00:00:00Z"

objectTypes:
- browseName: MyAddInType
defaultInstanceBrowseName: MyAddIn
properties:
- browseName: Model
dataType: ua:String
- browseName: Serial
dataType: ua:String
modellingRule: Optional

instances:
- browseName: MyContainer
typeDefinition: ua:BaseObjectType
organizedBy: /ua:Objects
addIns:
- typeDefinition: MyAddInType
optionals:
- Serial
📄 Generated NodeSet2.xml — addin-optionals.model.Nodeset2.xml
addin-optionals.model.Nodeset2.xml
<?xml version="1.0"?>
<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:ns1="http://sterfive.com/UA/doc-examples/addins-optionals/Type.xsd">
<NamespaceUris>
<Uri>http://sterfive.com/UA/doc-examples/addins-optionals/</Uri>
</NamespaceUris>
<Models>
<Model ModelUri="http://sterfive.com/UA/doc-examples/addins-optionals/" Version="1.0.0" PublicationDate="2026-05-26T00:00:00.000Z">
<RequiredModel ModelUri="http://opcfoundation.org/UA/" Version="1.05.06" PublicationDate="2025-11-08T00:00:00.000Z"/>
</Model>
</Models>
<Aliases>
<Alias Alias="HasAddIn">i=17604</Alias>
<Alias Alias="HasModellingRule">i=37</Alias>
<Alias Alias="HasProperty">i=46</Alias>
<Alias Alias="HasSubtype">i=45</Alias>
<Alias Alias="HasTypeDefinition">i=40</Alias>
<Alias Alias="Organizes">i=35</Alias>
<Alias Alias="QualifiedName">i=20</Alias>
<Alias Alias="String">i=12</Alias>
</Aliases>
<!--ReferenceTypes-->
<!--ObjectTypes-->
<!--ObjectType - 1:MyAddInType {{{{ -->
<UAObjectType NodeId="ns=1;i=1000" BrowseName="1:MyAddInType">
<DisplayName>MyAddInType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1001</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1002</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1003</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1001" BrowseName="1:Model" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="String">
<DisplayName>Model</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1002" BrowseName="1:Serial" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="String">
<DisplayName>Serial</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1003" BrowseName="DefaultInstanceBrowseName" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="QualifiedName">
<DisplayName>DefaultInstanceBrowseName</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
<Value>
<uax:QualifiedName>
<uax:Name>MyAddIn</uax:Name>
<uax:NamespaceIndex>1</uax:NamespaceIndex>
</uax:QualifiedName>
</Value>
</UAVariable>
<!--ObjectType - 1:MyAddInType }}}}-->
<!--VariableTypes-->
<!--Other Nodes-->
<!--Object - 1:MyContainer {{{{ -->
<UAObject NodeId="ns=1;i=1004" BrowseName="1:MyContainer">
<DisplayName>MyContainer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasAddIn">ns=1;i=1005</Reference>
</References>
</UAObject>
<!--Object - 1:MyAddIn {{{{ -->
<UAObject NodeId="ns=1;i=1005" BrowseName="1:MyAddIn" ParentNodeId="ns=1;i=1004">
<DisplayName>MyAddIn</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1000</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1006</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1006" BrowseName="1:Model" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="String">
<DisplayName>Model</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<!--Object - 1:MyAddIn }}}} -->
<!--Object - 1:MyContainer }}}} -->
</UANodeSet>

3. AddIn with Initializers (in Instance)

You can assign initial values to variables and properties residing inside the AddIn instance by utilizing the initializers: block.

addin-initializers.model.yaml
# yaml-language-server: $schema=../../../schemas/nodeset2.schema.json
namespaceUri: http://sterfive.com/UA/doc-examples/addins-initializers/
version: 1.0.0
publicationDate: "2026-05-26T00:00:00Z"

namespaces:
- di

objectTypes:
- browseName: MyComponentType
defaultInstanceBrowseName: MyComponent
interfaces:
- browseName: di:IVendorNameplateType
promotedToMandatory:
- di:Manufacturer
- di:SerialNumber

instances:
- browseName: MyContainer
typeDefinition: ua:BaseObjectType
organizedBy: /ua:Objects
addIns:
- typeDefinition: MyComponentType
initializers:
- variable: di:Manufacturer
value:
text: "Sterfive"
- variable: di:SerialNumber
value: "SN-99999"
📄 Generated NodeSet2.xml — addin-initializers.model.Nodeset2.xml
addin-initializers.model.Nodeset2.xml
<?xml version="1.0"?>
<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:ns1="http://sterfive.com/UA/doc-examples/addins-initializers/Type.xsd">
<NamespaceUris>
<Uri>http://sterfive.com/UA/doc-examples/addins-initializers/</Uri>
</NamespaceUris>
<Models>
<Model ModelUri="http://sterfive.com/UA/doc-examples/addins-initializers/" Version="1.0.0" PublicationDate="2026-05-26T00:00:00.000Z">
<RequiredModel ModelUri="http://opcfoundation.org/UA/" Version="1.05.06" PublicationDate="2025-11-08T00:00:00.000Z"/>
</Model>
</Models>
<Aliases>
<Alias Alias="HasAddIn">i=17604</Alias>
<Alias Alias="HasInterface">i=17603</Alias>
<Alias Alias="HasModellingRule">i=37</Alias>
<Alias Alias="HasProperty">i=46</Alias>
<Alias Alias="HasSubtype">i=45</Alias>
<Alias Alias="HasTypeDefinition">i=40</Alias>
<Alias Alias="LocalizedText">i=21</Alias>
<Alias Alias="Organizes">i=35</Alias>
<Alias Alias="QualifiedName">i=20</Alias>
<Alias Alias="String">i=12</Alias>
</Aliases>
<!--ReferenceTypes-->
<!--ObjectTypes-->
<!--ObjectType - 1:MyComponentType {{{{ -->
<UAObjectType NodeId="ns=1;i=1008" BrowseName="1:MyComponentType">
<DisplayName>MyComponentType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1009</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1010</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1011</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1009" BrowseName="Manufacturer" ParentNodeId="ns=1;i=1008" DataType="LocalizedText">
<DisplayName>Manufacturer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1010" BrowseName="SerialNumber" ParentNodeId="ns=1;i=1008" DataType="String">
<DisplayName>SerialNumber</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1011" BrowseName="DefaultInstanceBrowseName" ParentNodeId="ns=1;i=1008" AccessLevel="3" DataType="QualifiedName">
<DisplayName>DefaultInstanceBrowseName</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
<Value>
<uax:QualifiedName>
<uax:Name>MyComponent</uax:Name>
<uax:NamespaceIndex>1</uax:NamespaceIndex>
</uax:QualifiedName>
</Value>
</UAVariable>
<!--ObjectType - 1:MyComponentType }}}}-->
<!--VariableTypes-->
<!--Other Nodes-->
<!--Object - 1:MyContainer {{{{ -->
<UAObject NodeId="ns=1;i=1004" BrowseName="1:MyContainer">
<DisplayName>MyContainer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasAddIn">ns=1;i=1012</Reference>
</References>
</UAObject>
<!--Object - 1:MyComponent {{{{ -->
<UAObject NodeId="ns=1;i=1012" BrowseName="1:MyComponent" ParentNodeId="ns=1;i=1004">
<DisplayName>MyComponent</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1008</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1013</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1014</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1013" BrowseName="Manufacturer" ParentNodeId="ns=1;i=1012" DataType="LocalizedText">
<DisplayName>Manufacturer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1014" BrowseName="SerialNumber" ParentNodeId="ns=1;i=1012" DataType="String">
<DisplayName>SerialNumber</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<!--Object - 1:MyComponent }}}} -->
<!--Object - 1:MyContainer }}}} -->
</UANodeSet>

References


Full example

📄 Full working example — add-ins.model.yaml
add-ins.model.yaml
# yaml-language-server: $schema=../../../schemas/nodeset2.schema.json
namespaceUri: http://sterfive.com/UA/doc-examples/addins/
version: 1.0.0
publicationDate: "2026-05-26T00:00:00Z"

namespaces:
- di

objectTypes:
- browseName: MyComponentType
defaultInstanceBrowseName: MyComponent

- browseName: MyExplicitComponentType
properties:
- browseName: ua:DefaultInstanceBrowseName
dataType: ua:QualifiedName
value: MyComponent

- browseName: MyDeviceType
addIns:
- typeDefinition: MyComponentType
browseName: MyComponent1
# modellingRule: Mandatory (default)
- typeDefinition: MyComponentType
browseName: MyComponent2
modellingRule: Optional

instances:
- browseName: MyDevice
typeDefinition: ua:BaseObjectType
organizedBy: /ua:Objects
addIns:
- typeDefinition: MyComponentType

- browseName: MyMultiDevice
typeDefinition: ua:BaseObjectType
organizedBy: /ua:Objects
addIns:
- typeDefinition: MyComponentType
- typeDefinition: MyComponentType
browseName: MyComponent1
- typeDefinition: MyComponentType
browseName: MyComponent2
📄 Generated NodeSet2.xml — add-ins.model.Nodeset2.xml
add-ins.model.Nodeset2.xml
<?xml version="1.0"?>
<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:ns1="http://sterfive.com/UA/doc-examples/addins/Type.xsd">
<NamespaceUris>
<Uri>http://sterfive.com/UA/doc-examples/addins/</Uri>
</NamespaceUris>
<Models>
<Model ModelUri="http://sterfive.com/UA/doc-examples/addins/" Version="1.0.0" PublicationDate="2026-05-26T00:00:00.000Z">
<RequiredModel ModelUri="http://opcfoundation.org/UA/" Version="1.05.06" PublicationDate="2025-11-08T00:00:00.000Z"/>
</Model>
</Models>
<Aliases>
<Alias Alias="HasAddIn">i=17604</Alias>
<Alias Alias="HasModellingRule">i=37</Alias>
<Alias Alias="HasProperty">i=46</Alias>
<Alias Alias="HasSubtype">i=45</Alias>
<Alias Alias="HasTypeDefinition">i=40</Alias>
<Alias Alias="Organizes">i=35</Alias>
<Alias Alias="QualifiedName">i=20</Alias>
</Aliases>
<!--ReferenceTypes-->
<!--ObjectTypes-->
<!--ObjectType - 1:MyComponentType {{{{ -->
<UAObjectType NodeId="ns=1;i=1000" BrowseName="1:MyComponentType">
<DisplayName>MyComponentType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1001</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1001" BrowseName="DefaultInstanceBrowseName" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="QualifiedName">
<DisplayName>DefaultInstanceBrowseName</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
<Value>
<uax:QualifiedName>
<uax:Name>MyComponent</uax:Name>
<uax:NamespaceIndex>1</uax:NamespaceIndex>
</uax:QualifiedName>
</Value>
</UAVariable>
<!--ObjectType - 1:MyComponentType }}}}-->
<!--ObjectType - 1:MyExplicitComponentType {{{{ -->
<UAObjectType NodeId="ns=1;i=1002" BrowseName="1:MyExplicitComponentType">
<DisplayName>MyExplicitComponentType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1003</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1003" BrowseName="DefaultInstanceBrowseName" ParentNodeId="ns=1;i=1002" AccessLevel="3" DataType="QualifiedName">
<DisplayName>DefaultInstanceBrowseName</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
<Value>
<uax:QualifiedName>
<uax:Name>MyComponent</uax:Name>
</uax:QualifiedName>
</Value>
</UAVariable>
<!--ObjectType - 1:MyExplicitComponentType }}}}-->
<!--ObjectType - 1:MyDeviceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1004" BrowseName="1:MyDeviceType">
<DisplayName>MyDeviceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasAddIn">ns=1;i=1005</Reference>
<Reference ReferenceType="HasAddIn">ns=1;i=1006</Reference>
</References>
</UAObjectType>
<!--Object - 1:MyComponent1 {{{{ -->
<UAObject NodeId="ns=1;i=1005" BrowseName="1:MyComponent1" ParentNodeId="ns=1;i=1004">
<DisplayName>MyComponent1</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1000</Reference>
</References>
</UAObject>
<!--Object - 1:MyComponent1 }}}} -->
<!--Object - 1:MyComponent2 {{{{ -->
<UAObject NodeId="ns=1;i=1006" BrowseName="1:MyComponent2" ParentNodeId="ns=1;i=1004">
<DisplayName>MyComponent2</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1000</Reference>
</References>
</UAObject>
<!--Object - 1:MyComponent2 }}}} -->
<!--ObjectType - 1:MyDeviceType }}}}-->
<!--VariableTypes-->
<!--Other Nodes-->
<!--Object - 1:MyDevice {{{{ -->
<UAObject NodeId="ns=1;i=1007" BrowseName="1:MyDevice">
<DisplayName>MyDevice</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasAddIn">ns=1;i=1008</Reference>
</References>
</UAObject>
<!--Object - 1:MyComponent {{{{ -->
<UAObject NodeId="ns=1;i=1008" BrowseName="1:MyComponent" ParentNodeId="ns=1;i=1007">
<DisplayName>MyComponent</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1000</Reference>
</References>
</UAObject>
<!--Object - 1:MyComponent }}}} -->
<!--Object - 1:MyDevice }}}} -->
<!--Object - 1:MyMultiDevice {{{{ -->
<UAObject NodeId="ns=1;i=1009" BrowseName="1:MyMultiDevice">
<DisplayName>MyMultiDevice</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasAddIn">ns=1;i=1010</Reference>
<Reference ReferenceType="HasAddIn">ns=1;i=1011</Reference>
<Reference ReferenceType="HasAddIn">ns=1;i=1012</Reference>
</References>
</UAObject>
<!--Object - 1:MyComponent {{{{ -->
<UAObject NodeId="ns=1;i=1010" BrowseName="1:MyComponent" ParentNodeId="ns=1;i=1009">
<DisplayName>MyComponent</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1000</Reference>
</References>
</UAObject>
<!--Object - 1:MyComponent }}}} -->
<!--Object - 1:MyComponent1 {{{{ -->
<UAObject NodeId="ns=1;i=1011" BrowseName="1:MyComponent1" ParentNodeId="ns=1;i=1009">
<DisplayName>MyComponent1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1000</Reference>
</References>
</UAObject>
<!--Object - 1:MyComponent1 }}}} -->
<!--Object - 1:MyComponent2 {{{{ -->
<UAObject NodeId="ns=1;i=1012" BrowseName="1:MyComponent2" ParentNodeId="ns=1;i=1009">
<DisplayName>MyComponent2</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1000</Reference>
</References>
</UAObject>
<!--Object - 1:MyComponent2 }}}} -->
<!--Object - 1:MyMultiDevice }}}} -->
</UANodeSet>