Skip to main content

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.

Defining an interface
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:

Implementing interface at ObjectType level
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:

Implementing interface at component level
objectTypes:
- browseName: MySensorComponentType
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:

Promoting optional interface members
objectTypes:
- browseName: MySensorPromotedType
subtypeOf: di:ComponentType
components:
- browseName: Identification
typeDefinition: ua:FolderType
interfaces:
- browseName: IVendorPlateType
promotedToMandatory:
- 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.

Implementing interface from foreign namespace
objectTypes:
- browseName: MySensorForeignType
subtypeOf: di:ComponentType
interfaces:
# implement the IVendorNameplateType interface from the di namespace
- browseName: di:IVendorNameplateType
# and turn the optional properties of IVendorNameplateType into mandatory in
# our implementation
promotedToMandatory:
- di:Revision
- di:Manufacturer
- di:SerialNumber

Examples

Example: Interface application to an ObjectType

alt text

First, we define the reusable service and location interfaces:

Defining ILocationType and other service interfaces
interfaceTypes:
- browseName: ILocationType
properties:
- browseName: GPS
dataType: ua:String
modellingRule: Mandatory
- browseName: FloorLocation
dataType: ua:String
modellingRule: Optional
- browseName: Address
dataType: ua:String
modellingRule: Optional

- browseName: ISerializeServiceType
components:
- browseName: SerialiazedData
dataType: ua:ByteString
methods:
- browseName: Serialize

- browseName: ITransactionServiceType
methods:
- browseName: Start
- browseName: Abort
- browseName: Commit

Next, we apply the ILocationType interface to the custom XYZDeviceType and promote Address to mandatory:

XYZDeviceType interface application
objectTypes:
- browseName: XYZDeviceType
interfaces:
- browseName: ILocationType
promotedToMandatory:
- Address

Finally, we instantiate XYZDeviceType under MD002 in the address space:

Instantiating MD002
instances:
- browseName: MD002
typeDefinition: XYZDeviceType
organizedBy: /ua:Objects

Example: Interface applied to an Instance

You can also apply interfaces directly at the instance level. In this example, the XYZDeviceType is a simple object type, and the ISerializeServiceType interface is added to the instance MD003:

Applying interface directly to instance
instances:
- browseName: MD003
typeDefinition: XYZDeviceType
organizedBy: /ua:Objects
interfaces:
- browseName: ISerializeServiceType

Example: Interface hierarchy

Interfaces can inherit from other interfaces. When an object type implements an interface, it automatically implements all parent interfaces in the inheritance hierarchy.

Level 1 and Level 2 interfaces
interfaceTypes:
- browseName: ILevelType
properties:
- browseName: L1Prop
dataType: ua:String
methods:
- browseName: L1Method

- browseName: ILevel2Type
subtypeOf: ILevelType
properties:
- browseName: L2Prop1
dataType: ua:String
- browseName: L2Prop2
dataType: ua:String
modellingRule: Optional

We apply the subtyped ILevel2Type interface to XYZDeviceHierarchyType:

ObjectType implementing subtyped interface
objectTypes:
- browseName: XYZDeviceHierarchyType
properties:
- browseName: XYZ_Var1
dataType: ua:String
- browseName: XYZ_Var2
dataType: ua:String
modellingRule: Optional
interfaces:
- browseName: ILevel2Type

Instances can then opt into the optional properties of the interface hierarchy:

Instantiating hierarchy interfaces
instances:
- browseName: XYZInstance1
typeDefinition: XYZDeviceHierarchyType
organizedBy: /ua:Objects
optionals:
- L2Prop2
- XYZ_Var2

# instance with mandatory only
- browseName: XYZInstance2
typeDefinition: XYZDeviceHierarchyType
organizedBy: /ua:Objects

Full example

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

namespaces:
- di

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

- browseName: ILocationType
properties:
- browseName: GPS
dataType: ua:String
modellingRule: Mandatory
- browseName: FloorLocation
dataType: ua:String
modellingRule: Optional
- browseName: Address
dataType: ua:String
modellingRule: Optional

- browseName: ISerializeServiceType
components:
- browseName: SerialiazedData
dataType: ua:ByteString
methods:
- browseName: Serialize

- browseName: ITransactionServiceType
methods:
- browseName: Start
- browseName: Abort
- browseName: Commit

- browseName: ILevelType
properties:
- browseName: L1Prop
dataType: ua:String
methods:
- browseName: L1Method

- browseName: ILevel2Type
subtypeOf: ILevelType
properties:
- browseName: L2Prop1
dataType: ua:String
- browseName: L2Prop2
dataType: ua:String
modellingRule: Optional

objectTypes:
- browseName: MySensorType
subtypeOf: di:ComponentType
interfaces:
- browseName: IVendorPlateType

- browseName: MySensorComponentType
subtypeOf: di:ComponentType
components:
- browseName: Identification
typeDefinition: ua:FolderType
interfaces:
- browseName: IVendorPlateType

- browseName: MySensorPromotedType
subtypeOf: di:ComponentType
components:
- browseName: Identification
typeDefinition: ua:FolderType
interfaces:
- browseName: IVendorPlateType
promotedToMandatory:
- Revision

- browseName: MySensorForeignType
subtypeOf: di:ComponentType
interfaces:
# implement the IVendorNameplateType interface from the di namespace
- browseName: di:IVendorNameplateType
# and turn the optional properties of IVendorNameplateType into mandatory in
# our implementation
promotedToMandatory:
- di:Revision
- di:Manufacturer
- di:SerialNumber

- browseName: XYZDeviceType
interfaces:
- browseName: ILocationType
promotedToMandatory:
- Address

- browseName: XYZDeviceHierarchyType
properties:
- browseName: XYZ_Var1
dataType: ua:String
- browseName: XYZ_Var2
dataType: ua:String
modellingRule: Optional
interfaces:
- browseName: ILevel2Type

instances:
- browseName: MD002
typeDefinition: XYZDeviceType
organizedBy: /ua:Objects

- browseName: MD003
typeDefinition: XYZDeviceType
organizedBy: /ua:Objects
interfaces:
- browseName: ISerializeServiceType

- browseName: XYZInstance1
typeDefinition: XYZDeviceHierarchyType
organizedBy: /ua:Objects
optionals:
- L2Prop2
- XYZ_Var2

# instance with mandatory only
- browseName: XYZInstance2
typeDefinition: XYZDeviceHierarchyType
organizedBy: /ua:Objects
📄 Generated NodeSet2.xml — interfaces.model.Nodeset2.xml
interfaces.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:ns2="http://opcfoundation.org/UA/DI/Type.xsd" xmlns:ns1="http://sterfive.com/UA/doc-examples/interfaces/Type.xsd">
<NamespaceUris>
<Uri>http://sterfive.com/UA/doc-examples/interfaces/</Uri>
<Uri>http://opcfoundation.org/UA/DI/</Uri>
</NamespaceUris>
<Models>
<Model ModelUri="http://sterfive.com/UA/doc-examples/interfaces/" 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"/>
<RequiredModel ModelUri="http://opcfoundation.org/UA/DI/" Version="1.05.0" PublicationDate="2025-11-15T00: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="LocalizedText">i=21</Alias>
<Alias Alias="Organizes">i=35</Alias>
<Alias Alias="String">i=12</Alias>
</Aliases>
<!--ReferenceTypes-->
<!--ObjectTypes-->
<!--ObjectType - 1:IVendorPlateType {{{{ -->
<UAObjectType NodeId="ns=1;i=1000" BrowseName="1:IVendorPlateType">
<DisplayName>IVendorPlateType</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>
<Reference ReferenceType="HasComponent">ns=1;i=1003</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1001" BrowseName="1:Manufacturer" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="LocalizedText">
<DisplayName>Manufacturer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1002" BrowseName="1:SerialNumber" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="String">
<DisplayName>SerialNumber</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1003" BrowseName="1:Revision" ParentNodeId="ns=1;i=1000" AccessLevel="3" DataType="LocalizedText">
<DisplayName>Revision</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:IVendorPlateType }}}}-->
<!--ObjectType - 1:ILocationType {{{{ -->
<UAObjectType NodeId="ns=1;i=1004" BrowseName="1:ILocationType">
<DisplayName>ILocationType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1005</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1006</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1007</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1005" BrowseName="1:GPS" ParentNodeId="ns=1;i=1004" 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=1006" BrowseName="1:FloorLocation" ParentNodeId="ns=1;i=1004" 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=1007" BrowseName="1:Address" ParentNodeId="ns=1;i=1004" 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:ISerializeServiceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1008" BrowseName="1:ISerializeServiceType">
<DisplayName>ISerializeServiceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1009</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1010</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1009" BrowseName="1:SerialiazedData" ParentNodeId="ns=1;i=1008" 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=1010" BrowseName="1:Serialize" ParentNodeId="ns=1;i=1008">
<DisplayName>Serialize</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<!--ObjectType - 1:ISerializeServiceType }}}}-->
<!--ObjectType - 1:ITransactionServiceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1011" BrowseName="1:ITransactionServiceType">
<DisplayName>ITransactionServiceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1012</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1013</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1014</Reference>
</References>
</UAObjectType>
<UAMethod NodeId="ns=1;i=1012" BrowseName="1:Start" ParentNodeId="ns=1;i=1011">
<DisplayName>Start</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<UAMethod NodeId="ns=1;i=1013" BrowseName="1:Abort" ParentNodeId="ns=1;i=1011">
<DisplayName>Abort</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<UAMethod NodeId="ns=1;i=1014" BrowseName="1:Commit" ParentNodeId="ns=1;i=1011">
<DisplayName>Commit</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<!--ObjectType - 1:ITransactionServiceType }}}}-->
<!--ObjectType - 1:ILevelType {{{{ -->
<UAObjectType NodeId="ns=1;i=1015" BrowseName="1:ILevelType">
<DisplayName>ILevelType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1016</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1017</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1016" BrowseName="1:L1Prop" ParentNodeId="ns=1;i=1015" 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=1017" BrowseName="1:L1Method" ParentNodeId="ns=1;i=1015">
<DisplayName>L1Method</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<!--ObjectType - 1:ILevelType }}}}-->
<!--ObjectType - 1:ILevel2Type {{{{ -->
<UAObjectType NodeId="ns=1;i=1018" BrowseName="1:ILevel2Type">
<DisplayName>ILevel2Type</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">ns=1;i=1015</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1019</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1020</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1019" BrowseName="1:L2Prop1" ParentNodeId="ns=1;i=1018" 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=1020" BrowseName="1:L2Prop2" ParentNodeId="ns=1;i=1018" 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:MySensorType {{{{ -->
<UAObjectType NodeId="ns=1;i=1021" BrowseName="1:MySensorType">
<DisplayName>MySensorType</DisplayName>
<References>
<Reference ReferenceType="HasInterface">ns=1;i=1000</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1022</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1023</Reference>
<Reference ReferenceType="HasSubtype" IsForward="false">ns=2;i=15063</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1022" BrowseName="1:Manufacturer" ParentNodeId="ns=1;i=1021" AccessLevel="3" DataType="LocalizedText">
<DisplayName>Manufacturer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1023" BrowseName="1:SerialNumber" ParentNodeId="ns=1;i=1021" AccessLevel="3" DataType="String">
<DisplayName>SerialNumber</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:MySensorType }}}}-->
<!--ObjectType - 1:MySensorComponentType {{{{ -->
<UAObjectType NodeId="ns=1;i=1024" BrowseName="1:MySensorComponentType">
<DisplayName>MySensorComponentType</DisplayName>
<References>
<Reference ReferenceType="HasComponent">ns=1;i=1025</Reference>
<Reference ReferenceType="HasSubtype" IsForward="false">ns=2;i=15063</Reference>
</References>
</UAObjectType>
<!--Object - 1:Identification {{{{ -->
<UAObject NodeId="ns=1;i=1025" BrowseName="1:Identification" ParentNodeId="ns=1;i=1024">
<DisplayName>Identification</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=61</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
<Reference ReferenceType="HasInterface">ns=1;i=1000</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1026</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1027</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1026" BrowseName="1:Manufacturer" ParentNodeId="ns=1;i=1025" AccessLevel="3" DataType="LocalizedText">
<DisplayName>Manufacturer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1027" BrowseName="1:SerialNumber" ParentNodeId="ns=1;i=1025" AccessLevel="3" DataType="String">
<DisplayName>SerialNumber</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--Object - 1:Identification }}}} -->
<!--ObjectType - 1:MySensorComponentType }}}}-->
<!--ObjectType - 1:MySensorPromotedType {{{{ -->
<UAObjectType NodeId="ns=1;i=1028" BrowseName="1:MySensorPromotedType">
<DisplayName>MySensorPromotedType</DisplayName>
<References>
<Reference ReferenceType="HasComponent">ns=1;i=1029</Reference>
<Reference ReferenceType="HasSubtype" IsForward="false">ns=2;i=15063</Reference>
</References>
</UAObjectType>
<!--Object - 1:Identification {{{{ -->
<UAObject NodeId="ns=1;i=1029" BrowseName="1:Identification" ParentNodeId="ns=1;i=1028">
<DisplayName>Identification</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=61</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
<Reference ReferenceType="HasInterface">ns=1;i=1000</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1030</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1031</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1032</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1030" BrowseName="1:Manufacturer" ParentNodeId="ns=1;i=1029" AccessLevel="3" DataType="LocalizedText">
<DisplayName>Manufacturer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1031" BrowseName="1:SerialNumber" ParentNodeId="ns=1;i=1029" AccessLevel="3" DataType="String">
<DisplayName>SerialNumber</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1032" BrowseName="1:Revision" ParentNodeId="ns=1;i=1029" AccessLevel="3" DataType="LocalizedText">
<DisplayName>Revision</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--Object - 1:Identification }}}} -->
<!--ObjectType - 1:MySensorPromotedType }}}}-->
<!--ObjectType - 1:MySensorForeignType {{{{ -->
<UAObjectType NodeId="ns=1;i=1033" BrowseName="1:MySensorForeignType">
<DisplayName>MySensorForeignType</DisplayName>
<References>
<Reference ReferenceType="HasProperty">ns=1;i=1034</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1035</Reference>
<Reference ReferenceType="HasInterface">ns=2;i=15035</Reference>
<Reference ReferenceType="HasSubtype" IsForward="false">ns=2;i=15063</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1034" BrowseName="2:Manufacturer" ParentNodeId="ns=1;i=1033" 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=1035" BrowseName="2:SerialNumber" ParentNodeId="ns=1;i=1033" DataType="String">
<DisplayName>SerialNumber</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:MySensorForeignType }}}}-->
<!--ObjectType - 1:XYZDeviceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1036" BrowseName="1:XYZDeviceType">
<DisplayName>XYZDeviceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasInterface">ns=1;i=1004</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1037</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1038</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1037" BrowseName="1:GPS" ParentNodeId="ns=1;i=1036" 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=1038" BrowseName="1:Address" ParentNodeId="ns=1;i=1036" 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 }}}}-->
<!--ObjectType - 1:XYZDeviceHierarchyType {{{{ -->
<UAObjectType NodeId="ns=1;i=1039" BrowseName="1:XYZDeviceHierarchyType">
<DisplayName>XYZDeviceHierarchyType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasInterface">ns=1;i=1018</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1040</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1041</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1042</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1043</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1044</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1040" BrowseName="1:L2Prop1" ParentNodeId="ns=1;i=1039" 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=1041" BrowseName="1:L1Prop" ParentNodeId="ns=1;i=1039" 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=1042" BrowseName="1:L1Method" ParentNodeId="ns=1;i=1039" MethodDeclarationId="ns=1;i=1017">
<DisplayName>L1Method</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAMethod>
<UAVariable NodeId="ns=1;i=1043" BrowseName="1:XYZ_Var1" ParentNodeId="ns=1;i=1039" 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=1044" BrowseName="1:XYZ_Var2" ParentNodeId="ns=1;i=1039" 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:XYZDeviceHierarchyType }}}}-->
<!--VariableTypes-->
<!--Other Nodes-->
<!--Object - 1:MD002 {{{{ -->
<UAObject NodeId="ns=1;i=1045" BrowseName="1:MD002">
<DisplayName>MD002</DisplayName>
<References>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1036</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1046</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1047</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1046" BrowseName="1:GPS" ParentNodeId="ns=1;i=1045" AccessLevel="3" DataType="String">
<DisplayName>GPS</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1047" BrowseName="1:Address" ParentNodeId="ns=1;i=1045" AccessLevel="3" DataType="String">
<DisplayName>Address</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<!--Object - 1:MD002 }}}} -->
<!--Object - 1:MD003 {{{{ -->
<UAObject NodeId="ns=1;i=1048" BrowseName="1:MD003">
<DisplayName>MD003</DisplayName>
<References>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasInterface">ns=1;i=1008</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1036</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1049</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1050</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1051</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1052</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1049" BrowseName="1:GPS" ParentNodeId="ns=1;i=1048" AccessLevel="3" DataType="String">
<DisplayName>GPS</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1050" BrowseName="1:Address" ParentNodeId="ns=1;i=1048" AccessLevel="3" DataType="String">
<DisplayName>Address</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1051" BrowseName="1:SerialiazedData" ParentNodeId="ns=1;i=1048" AccessLevel="3" DataType="ByteString">
<DisplayName>SerialiazedData</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
</References>
</UAVariable>
<UAMethod NodeId="ns=1;i=1052" BrowseName="1:Serialize" ParentNodeId="ns=1;i=1048" MethodDeclarationId="ns=1;i=1010">
<DisplayName>Serialize</DisplayName>
<References/>
</UAMethod>
<!--Object - 1:MD003 }}}} -->
<!--Object - 1:XYZInstance1 {{{{ -->
<UAObject NodeId="ns=1;i=1053" BrowseName="1:XYZInstance1">
<DisplayName>XYZInstance1</DisplayName>
<References>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1039</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1054</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1055</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1056</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1057</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1058</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1059</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1054" BrowseName="1:L2Prop1" ParentNodeId="ns=1;i=1053" AccessLevel="3" DataType="String">
<DisplayName>L2Prop1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1055" BrowseName="1:L1Prop" ParentNodeId="ns=1;i=1053" AccessLevel="3" DataType="String">
<DisplayName>L1Prop</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAMethod NodeId="ns=1;i=1056" BrowseName="1:L1Method" ParentNodeId="ns=1;i=1053" MethodDeclarationId="ns=1;i=1042">
<DisplayName>L1Method</DisplayName>
<References/>
</UAMethod>
<UAVariable NodeId="ns=1;i=1057" BrowseName="1:XYZ_Var1" ParentNodeId="ns=1;i=1053" AccessLevel="3" DataType="String">
<DisplayName>XYZ_Var1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1058" BrowseName="1:XYZ_Var2" ParentNodeId="ns=1;i=1053" AccessLevel="3" DataType="String">
<DisplayName>XYZ_Var2</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1059" BrowseName="1:L2Prop2" ParentNodeId="ns=1;i=1053" AccessLevel="3" DataType="String">
<DisplayName>L2Prop2</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<!--Object - 1:XYZInstance1 }}}} -->
<!--Object - 1:XYZInstance2 {{{{ -->
<UAObject NodeId="ns=1;i=1060" BrowseName="1:XYZInstance2">
<DisplayName>XYZInstance2</DisplayName>
<References>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1039</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1061</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1062</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1063</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1064</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1061" BrowseName="1:L2Prop1" ParentNodeId="ns=1;i=1060" AccessLevel="3" DataType="String">
<DisplayName>L2Prop1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1062" BrowseName="1:L1Prop" ParentNodeId="ns=1;i=1060" AccessLevel="3" DataType="String">
<DisplayName>L1Prop</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<UAMethod NodeId="ns=1;i=1063" BrowseName="1:L1Method" ParentNodeId="ns=1;i=1060" MethodDeclarationId="ns=1;i=1042">
<DisplayName>L1Method</DisplayName>
<References/>
</UAMethod>
<UAVariable NodeId="ns=1;i=1064" BrowseName="1:XYZ_Var1" ParentNodeId="ns=1;i=1060" AccessLevel="3" DataType="String">
<DisplayName>XYZ_Var1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
</References>
</UAVariable>
<!--Object - 1:XYZInstance2 }}}} -->
</UANodeSet>