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.
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: 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:
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.
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

First, we define the reusable service and location 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:
objectTypes:
- browseName: XYZDeviceType
interfaces:
- browseName: ILocationType
promotedToMandatory:
- Address
Finally, we instantiate XYZDeviceType under MD002 in the address space:
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:
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.
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:
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:
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
# 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
<?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>