Interfaces
Defining an Interface
An interface in OPC UA Modeler is defined using the interfaceTypes keyword. Each interface can have multiple components, each with a browseName, dataType, and modellingRule.
Here is an example of defining an interface called IVendorPlateType:
interfaceTypes:
- browseName: IVendorPlateType
components:
- browseName: Manufacturer
dataType: ua:LocalizedText
- browseName: SerialNumber
dataType: ua:String
- browseName: Revision
dataType: ua:LocalizedText
modellingRule: Optional # only specify modellingRule if the component is optional, by default it is mandatory
Implementing an Interface at the Object Type Level
To implement an interface at the object type level, you use the interfaces keyword within the object type definition.
Here is an example of defining an object type called MySensorType that implements the IVendorPlateType interface:
objectTypes:
- browseName: MySensorType
subtypeOf: di:ComponentType
interfaces:
- browseName: IVendorPlateType
Implementing an Interface at the Component Level
Interfaces can also be implemented at the component level, meaning that the component itself implements the interface. This is done using the interfaces keyword within the components definition.
Here is an example of defining an object type called MySensorType with a component called Identification that implements the IVendorPlateType interface:
objectTypes:
- browseName: MySensorType
subtypeOf: di:ComponentType
components:
- browseName: Identification
typeDefinition: ua:FolderType
interfaces:
- browseName: IVendorPlateType
Promoting Optional Members to Mandatory at the interface implementation level
For advanced use, it is possible to promote some optional members of the original interface to mandatory. This is done using the promotedToMandatory keyword within the interfaces definition.
Here is an example of promoting the Revision member to mandatory:
objectTypes:
- browseName: MySensorType
subtypeOf: di:ComponentType
components:
- browseName: Identification
typeDefinition: ua:FolderType
interfaces:
- browseName: IVendorPlateType
promotedToMandatory:
- di:Revision
Implementing an Interface from another namespace
You can also implement an interface that has been defined in another namespace by prefixing the browseName with the namespace alias.
namespaces:
- di # import the device integration namespace
objectTypes:
- browseName: MySensorType
subtypeOf: di:ComponentType
interfaces:
# implement the IVendorPlateType interface from the di namespace
- browseName: di:IVendorNameplateType
# and turn the optional property of IVendorPlateType into mandatory in
# our implementation
promotedToMandatory:
- di:Revision
- di:Manufacturer
- di:SerialNumber
Examples
Example: Interface application to an ObjectType

# yaml-language-server: $schema=../../schemas/nodeset2.schema.json
namespaceUri: http://sterfive.com/UA/test/
publicationDate: "2020-01-01T00:00:00.000Z"
interfaceTypes:
- browseName: ISerializeServiceType
components:
- browseName: SerialiazedData
dataType: ua:ByteString
methods:
- browseName: Serialize
- browseName: ITransactionServiceType
methods:
- browseName: Start
- browseName: Abort
- browseName: Commit
- browseName: ILocationType
properties:
- browseName: GPS
dataType: ua:String
modellingRule: Mandatory
- browseName: FloorLocation
dataType: ua:String
modellingRule: Optional
- browseName: Address
dataType: ua:String
modellingRule: Optional
# Interface application to an ObjectType
objectTypes:
- browseName: XYZDeviceType
interfaces:
- browseName: ILocationType
promotedToMandatory:
- Address
instances:
- browseName: MD002
typeDefinition: XYZDeviceType
organizedBy: /ua:Objects

XML file for the above example
<?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/test/Type.xsd">
<NamespaceUris>
<Uri>http://sterfive.com/UA/test/</Uri>
</NamespaceUris>
<Models>
<Model ModelUri="http://sterfive.com/UA/test/" Version="0.0.0" PublicationDate="2020-01-01T00: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="ByteString">i=15</Alias>
<Alias Alias="HasComponent">i=47</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="Organizes">i=35</Alias>
<Alias Alias="String">i=12</Alias>
</Aliases>
<!--ReferenceTypes-->
<!--ObjectTypes-->
<!--ObjectType - 1:ISerializeServiceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1000" BrowseName="1:ISerializeServiceType">
<DisplayName>ISerializeServiceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1001</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1002</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1001" BrowseName="1:SerialiazedData" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="ByteString">
<DisplayName>SerialiazedData</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAMethod NodeId="ns=1;i=1002" BrowseName="1:Serialize" ParentNodeId="ns=1;i=1000">
<DisplayName>Serialize</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<!--ObjectType - 1:ISerializeServiceType }}}}-->
<!--ObjectType - 1:ITransactionServiceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1003" BrowseName="1:ITransactionServiceType">
<DisplayName>ITransactionServiceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1004</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1005</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1006</Reference>
</References>
</UAObjectType>
<UAMethod NodeId="ns=1;i=1004" BrowseName="1:Start" ParentNodeId="ns=1;i=1003">
<DisplayName>Start</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<UAMethod NodeId="ns=1;i=1005" BrowseName="1:Abort" ParentNodeId="ns=1;i=1003">
<DisplayName>Abort</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<UAMethod NodeId="ns=1;i=1006" BrowseName="1:Commit" ParentNodeId="ns=1;i=1003">
<DisplayName>Commit</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<!--ObjectType - 1:ITransactionServiceType }}}}-->
<!--ObjectType - 1:ILocationType {{{{ -->
<UAObjectType NodeId="ns=1;i=1007" BrowseName="1:ILocationType">
<DisplayName>ILocationType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1008</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1009</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1010</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1008" BrowseName="1:GPS" ParentNodeId="ns=1;i=1007" AccessLevel="3" DataType="String">
<DisplayName>GPS</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1009" BrowseName="1:FloorLocation" ParentNodeId="ns=1;i=1007" AccessLevel="3" DataType="String">
<DisplayName>FloorLocation</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1010" BrowseName="1:Address" ParentNodeId="ns=1;i=1007" AccessLevel="3" DataType="String">
<DisplayName>Address</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:ILocationType }}}}-->
<!--ObjectType - 1:XYZDeviceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1011" BrowseName="1:XYZDeviceType">
<DisplayName>XYZDeviceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasInterface">ns=1;i=1007</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1012</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1013</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1014</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1012" BrowseName="1:GPS" ParentNodeId="ns=1;i=1011" AccessLevel="3" DataType="String">
<DisplayName>GPS</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1013" BrowseName="1:FloorLocation" ParentNodeId="ns=1;i=1011" AccessLevel="3" DataType="String">
<DisplayName>FloorLocation</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1014" BrowseName="1:Address" ParentNodeId="ns=1;i=1011" AccessLevel="3" DataType="String">
<DisplayName>Address</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:XYZDeviceType }}}}-->
<!--VariableTypes-->
<!--Other Nodes-->
<!--Object - 1:MD002 {{{{ -->
<UAObject NodeId="ns=1;i=1015" BrowseName="1:MD002">
<DisplayName>MD002</DisplayName>
<References>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1011</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1016</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1017</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1016" BrowseName="1:GPS" ParentNodeId="ns=1;i=1015" AccessLevel="3" DataType="String">
<DisplayName>GPS</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1017" BrowseName="1:Address" ParentNodeId="ns=1;i=1015" AccessLevel="3" DataType="String">
<DisplayName>Address</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<!--Object - 1:MD002 }}}} -->
</UANodeSet>
Example: One Interface applied to an ObjectType another one to the instance

# yaml-language-server: $schema=./nodeset2.schema.json
namespaceUri: http://sterfive.com/UA/test/
publicationDate: "2020-01-01T00:00:00.000Z"
interfaceTypes:
- browseName: ISerializeServiceType
components:
- browseName: SerialiazedData
dataType: ua:ByteString
methods:
- browseName: Serialize
- browseName: ITransactionServiceType
methods:
- browseName: Start
- browseName: Abort
- browseName: Commit
- browseName: ILocationType
properties:
- browseName: GPS
dataType: ua:String
modellingRule: Mandatory
- browseName: FloorLocation
dataType: ua:String
modellingRule: Optional
- browseName: Address
dataType: ua:String
modellingRule: Optional
# Interface application to an ObjectType
objectTypes:
- browseName: XYZDeviceType
instances:
- browseName: MD002
typeDefinition: XYZDeviceType
organizedBy: /ua:Objects
interfaces:
- browseName: ISerializeServiceType
optionals:
- Address
XML file for the above example
<?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/test/Type.xsd">
<NamespaceUris>
<Uri>http://sterfive.com/UA/test/</Uri>
</NamespaceUris>
<Models>
<Model ModelUri="http://sterfive.com/UA/test/" Version="0.0.0" PublicationDate="2020-01-01T00: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="ByteString">i=15</Alias>
<Alias Alias="HasComponent">i=47</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="Organizes">i=35</Alias>
<Alias Alias="String">i=12</Alias>
</Aliases>
<!--ReferenceTypes-->
<!--ObjectTypes-->
<!--ObjectType - 1:ISerializeServiceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1000" BrowseName="1:ISerializeServiceType">
<DisplayName>ISerializeServiceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1001</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1002</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1001" BrowseName="1:SerialiazedData" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="ByteString">
<DisplayName>SerialiazedData</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAMethod NodeId="ns=1;i=1002" BrowseName="1:Serialize" ParentNodeId="ns=1;i=1000">
<DisplayName>Serialize</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<!--ObjectType - 1:ISerializeServiceType }}}}-->
<!--ObjectType - 1:ITransactionServiceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1003" BrowseName="1:ITransactionServiceType">
<DisplayName>ITransactionServiceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1004</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1005</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1006</Reference>
</References>
</UAObjectType>
<UAMethod NodeId="ns=1;i=1004" BrowseName="1:Start" ParentNodeId="ns=1;i=1003">
<DisplayName>Start</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<UAMethod NodeId="ns=1;i=1005" BrowseName="1:Abort" ParentNodeId="ns=1;i=1003">
<DisplayName>Abort</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<UAMethod NodeId="ns=1;i=1006" BrowseName="1:Commit" ParentNodeId="ns=1;i=1003">
<DisplayName>Commit</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<!--ObjectType - 1:ITransactionServiceType }}}}-->
<!--ObjectType - 1:ILocationType {{{{ -->
<UAObjectType NodeId="ns=1;i=1007" BrowseName="1:ILocationType">
<DisplayName>ILocationType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1008</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1009</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1010</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1008" BrowseName="1:GPS" ParentNodeId="ns=1;i=1007" AccessLevel="3" DataType="String">
<DisplayName>GPS</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1009" BrowseName="1:FloorLocation" ParentNodeId="ns=1;i=1007" AccessLevel="3" DataType="String">
<DisplayName>FloorLocation</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1010" BrowseName="1:Address" ParentNodeId="ns=1;i=1007" AccessLevel="3" DataType="String">
<DisplayName>Address</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:ILocationType }}}}-->
<!--ObjectType - 1:XYZDeviceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1011" BrowseName="1:XYZDeviceType">
<DisplayName>XYZDeviceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:XYZDeviceType }}}}-->
<!--VariableTypes-->
<!--Other Nodes-->
<!--Object - 1:MD002 {{{{ -->
<UAObject NodeId="ns=1;i=1012" BrowseName="1:MD002">
<DisplayName>MD002</DisplayName>
<References>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasInterface">ns=1;i=1000</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1011</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1013</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1014</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1013" BrowseName="1:SerialiazedData" ParentNodeId="ns=1;i=1012" AccessLevel="3" DataType="ByteString">
<DisplayName>SerialiazedData</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAMethod NodeId="ns=1;i=1014" BrowseName="1:Serialize" ParentNodeId="ns=1;i=1012" MethodDeclarationId="ns=1;i=1002">
<DisplayName>Serialize</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<!--Object - 1:MD002 }}}} -->
</UANodeSet>
Exampme: Interface hierachy

# yaml-language-server: $schema=./nodeset2.schema.json
namespaceUri: http://sterfive.com/UA/test/
publicationDate: "2020-01-01T00:00:00.000Z"
interfaceTypes:
- browseName: ILevelType
methods:
- browseName: L1Method
properties:
- browseName: L1Prop
dataType: ua:String
- browseName: ILevel2Type
subtypeOf: ILevelType
properties:
- browseName: L2Prop1
dataType: ua:String
- browseName: L2Prop2
dataType: ua:String
modellingRule: Optional
objectTypes:
- browseName: XYZDeviceType
interfaces:
- browseName: ILevel2Type
properties:
- browseName: XYZ_Var1
dataType: ua:String
- browseName: XYZ_Var2
dataType: ua:String*
modellingRule: Optional
instances:
- browseName: XYZInstance1
typeDefinition: XYZDeviceType
organizedBy: /ua:Objects
optionals:
- L2Prop2
- XYZ_Var2
# instance with mandatory only
- browseName: XYZInstance2
typeDefinition: XYZDeviceType
organizedBy: /ua:Objects
XML file for the above example
<?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/test/Type.xsd">
<NamespaceUris>
<Uri>http://sterfive.com/UA/test/</Uri>
</NamespaceUris>
<Models>
<Model ModelUri="http://sterfive.com/UA/test/" Version="0.0.0" PublicationDate="2020-01-01T00: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="HasComponent">i=47</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="Organizes">i=35</Alias>
<Alias Alias="String">i=12</Alias>
</Aliases>
<!--ReferenceTypes-->
<!--ObjectTypes-->
<!--ObjectType - 1:ILevelType {{{{ -->
<UAObjectType NodeId="ns=1;i=1000" BrowseName="1:ILevelType">
<DisplayName>ILevelType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1001</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1002</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1001" BrowseName="1:L1Prop" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="String">
<DisplayName>L1Prop</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAMethod NodeId="ns=1;i=1002" BrowseName="1:L1Method" ParentNodeId="ns=1;i=1000">
<DisplayName>L1Method</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<!--ObjectType - 1:ILevelType }}}}-->
<!--ObjectType - 1:ILevel2Type {{{{ -->
<UAObjectType NodeId="ns=1;i=1003" BrowseName="1:ILevel2Type">
<DisplayName>ILevel2Type</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">ns=1;i=1000</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1004</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1005</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1004" BrowseName="1:L2Prop1" ParentNodeId="ns=1;i=1003" AccessLevel="3" DataType="String">
<DisplayName>L2Prop1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1005" BrowseName="1:L2Prop2" ParentNodeId="ns=1;i=1003" AccessLevel="3" DataType="String">
<DisplayName>L2Prop2</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:ILevel2Type }}}}-->
<!--ObjectType - 1:XYZDeviceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1006" BrowseName="1:XYZDeviceType">
<DisplayName>XYZDeviceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasInterface">ns=1;i=1003</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1007</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1008</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1009</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1010</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1011</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1012</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1007" BrowseName="1:L2Prop1" ParentNodeId="ns=1;i=1006" AccessLevel="3" DataType="String">
<DisplayName>L2Prop1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1008" BrowseName="1:L2Prop2" ParentNodeId="ns=1;i=1006" AccessLevel="3" DataType="String">
<DisplayName>L2Prop2</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1009" BrowseName="1:L1Prop" ParentNodeId="ns=1;i=1006" AccessLevel="3" DataType="String">
<DisplayName>L1Prop</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAMethod NodeId="ns=1;i=1010" BrowseName="1:L1Method" ParentNodeId="ns=1;i=1006" MethodDeclarationId="ns=1;i=1002">
<DisplayName>L1Method</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<UAVariable NodeId="ns=1;i=1011" BrowseName="1:XYZ_Var1" ParentNodeId="ns=1;i=1006" AccessLevel="3" DataType="String">
<DisplayName>XYZ_Var1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1012" BrowseName="1:XYZ_Var2" ParentNodeId="ns=1;i=1006" AccessLevel="3" DataType="String">
<DisplayName>XYZ_Var2</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:XYZDeviceType }}}}-->
<!--VariableTypes-->
<!--Other Nodes-->
<!--Object - 1:XYZInstance1 {{{{ -->
<UAObject NodeId="ns=1;i=1013" BrowseName="1:XYZInstance1">
<DisplayName>XYZInstance1</DisplayName>
<References>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1006</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1014</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1015</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1016</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1017</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1018</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1019</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1014" BrowseName="1:L2Prop1" ParentNodeId="ns=1;i=1013" AccessLevel="3" DataType="String">
<DisplayName>L2Prop1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1015" BrowseName="1:L2Prop2" ParentNodeId="ns=1;i=1013" AccessLevel="3" DataType="String">
<DisplayName>L2Prop2</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1016" BrowseName="1:L1Prop" ParentNodeId="ns=1;i=1013" AccessLevel="3" DataType="String">
<DisplayName>L1Prop</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAMethod NodeId="ns=1;i=1017" BrowseName="1:L1Method" ParentNodeId="ns=1;i=1013" MethodDeclarationId="ns=1;i=1010">
<DisplayName>L1Method</DisplayName>
<References/>
</UAMethod>
<UAVariable NodeId="ns=1;i=1018" BrowseName="1:XYZ_Var1" ParentNodeId="ns=1;i=1013" AccessLevel="3" DataType="String">
<DisplayName>XYZ_Var1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1019" BrowseName="1:XYZ_Var2" ParentNodeId="ns=1;i=1013" AccessLevel="3" DataType="String">
<DisplayName>XYZ_Var2</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<!--Object - 1:XYZInstance1 }}}} -->
<!--Object - 1:XYZInstance2 {{{{ -->
<UAObject NodeId="ns=1;i=1020" BrowseName="1:XYZInstance2">
<DisplayName>XYZInstance2</DisplayName>
<References>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1006</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1021</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1022</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1023</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1024</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1021" BrowseName="1:L2Prop1" ParentNodeId="ns=1;i=1020" AccessLevel="3" DataType="String">
<DisplayName>L2Prop1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1022" BrowseName="1:L1Prop" ParentNodeId="ns=1;i=1020" AccessLevel="3" DataType="String">
<DisplayName>L1Prop</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAMethod NodeId="ns=1;i=1023" BrowseName="1:L1Method" ParentNodeId="ns=1;i=1020" MethodDeclarationId="ns=1;i=1010">
<DisplayName>L1Method</DisplayName>
<References/>
</UAMethod>
<UAVariable NodeId="ns=1;i=1024" BrowseName="1:XYZ_Var1" ParentNodeId="ns=1;i=1020" AccessLevel="3" DataType="String">
<DisplayName>XYZ_Var1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<!--Object - 1:XYZInstance2 }}}} -->
</UANodeSet>