Skip to main content

ObjectTypes

ObjectType structure
objectTypes:
- browseName: MySensorType
# Add components, properties, organizes, methods as needed

browseName

  • The browse name is a normative name for the OPCUA node it represents, and must be chosen with care. Indeed, the browseName is used by OPCUA clients to browse the tree of nodes by their access path. The path of a node in the tree is made of browseNames.
  • We will follow the naming style already used by companion standards such as Device Integration, Analyser Device Integration, Robotics etc. which are referenced to ensure a uniform style.
  • It is commonly accepted that the BrowseName should be a term expressed in 'English' to allow for internationalization of the API.
  • The use of acronyms or abbreviations should be avoided and the use of an explicit term or combination of terms should be preferred.
  • The use of the naming convention called PascalCase is strongly recommended. The first letter of the name starts with a capital letter, in case of a compound name (e.g. Adjective+Name), the two terms are pasted without space and each term starts with a capital letter.
  • In practice, it consists of alpha-numeric characters. A browse name must not start with a number.

Examples:

  • capteur_de_temperature (French terms, no PascalCase)
  • temperature_Sensor (underscores not allowed)
  • TemperatureSensor (correct — English, PascalCase)

subtypeOf

subtypeOf specifies the ObjectType from which the new ObjectType is derived. If omitted, the modeler assumes it derives from ua:BaseObjectType.

Subtyping an existing type
objectTypes:
- browseName: MySensorDeviceType
subtypeOf: di:DeviceType

Components, Properties, Methods

Components, properties, and methods are declared in their respective subsections.

Methods

Methods on an instance
instances:
- browseName: Calculator
organizedBy: /ua:Objects
methods:
- browseName: AddTwoValues
inputArguments:
- name: Operand1
dataType: ua:Double
description: First operand
- name: Operand2
dataType: ua:Double
description: Second operand
outputArguments:
- name: Result
dataType: ua:Double
  • inputArguments / outputArguments describe the arguments of the method.
  • name uses PascalCase and a universal (English) term.
  • dataType references the data type, prefixed with the namespace alias if needed:
    • ua:Double — standard OPC UA Double
    • di:DeviceHealthEnumeration — from the Device Integration companion spec

Conventions

modellingRule is Mandatory by default

Components and features added to an objectType or variableType have modellingRule: Mandatory by default. Explicitly set modellingRule: Optional to make it optional.

In rare cases where no modelling rule should be applied at all, use modellingRule: false.

Modelling rules
objectTypes:
- browseName: MeasurementType
components:
- browseName: MyMandatoryComponent
dataType: ua:Double
# modellingRule defaults to Mandatory — no need to write it
- browseName: MyOptionalComponent
dataType: ua:Double
modellingRule: Optional
- browseName: MyComponentWithNoModelingRule
dataType: ua:Double
modellingRule: false
- browseName: <MyOptionalPlaceholderComponent>
dataType: ua:Double
modellingRule: OptionalPlaceholder
- browseName: <MyMandatoryPlaceholderComponent>
dataType: ua:Double
modellingRule: MandatoryPlaceholder

Overloading optional components or properties

To make an optional component from a base type mandatory in your derived type, redefine it:

Overloading an optional component
objectTypes:
- browseName: MySensorDeviceTypeV2
subtypeOf: di:DeviceType
components:
# Redefine the optional ParameterSet from di:DeviceType as mandatory
- browseName: di:ParameterSet
components:
- browseName: Temperature
dataType: ua:Double
note
  • Put the overloaded item in the correct category (components:, properties:, methods:).
  • Prefix the browseName with the source namespace alias (e.g. di:ParameterSet).

Turning optional properties into mandatory properties

Use promotedToMandatory to expose optional elements from a base type and enforce them as Mandatory in your ObjectType:

promotedToMandatory on a state machine
stateMachines:
- browseName: CustomStateMachineType
subtypeOf: ua:FiniteStateMachineType
promotedToMandatory:
- CurrentState.Name
- LastTransition.Id
- LastTransition.TransitionTime

How to know the structure of a base type

Consult the PDF documentation associated with the imported companion specs to understand the structure of the types you wish to use. You can also explore types in the OPC UA tree with an OPC UA client.


Advanced component reference types

New in v4.10.0

For industrial companion specifications, OPC UA defines specialised component reference types beyond HasComponent. Use these fields on components inside an objectType or instance to express precise physical and logical relationships:

FieldOPC UA referenceDescription
componentsHasComponentStandard composition
orderedComponentsHasOrderedComponentComponents where order matters (e.g. a sequence of steps)
physicalComponentsHasPhysicalComponentPhysical sub-parts (e.g. sub-assemblies, physical sensors)
containedComponentsIsContainedInLogical containment within an enclosure or module
attachedComponentsHasAttachedComponentAttached accessories or peripherals
Advanced component reference types
objectTypes:
- browseName: AssemblyType
orderedComponents:
- browseName: Step1
typeDefinition: ua:BaseObjectType
- browseName: Step2
typeDefinition: ua:BaseObjectType
physicalComponents:
- browseName: Housing
typeDefinition: ua:BaseObjectType
containedComponents:
- browseName: ControlBoard
typeDefinition: ua:BaseObjectType

generatedEvents

Declare which event types instances of this ObjectType may emit. This adds GeneratesEvent references to the generated NodeSet, informing OPC UA clients which event types to subscribe to.

generatedEvents
objectTypes:
- browseName: PressureVesselType
generatedEvents:
- OverpressureAlarmType
- PressureOutOfRangeType

See Event Types for how to define custom event types.


Variable access control

Control read/write access and sampling behaviour on component variables:

accessLevel and userAccessLevel

Access level control
objectTypes:
- browseName: SensorType
components:
- browseName: Temperature
dataType: ua:Double
accessLevel: CurrentRead # read-only for all clients
- browseName: SetPoint
dataType: ua:Double
accessLevel: CurrentRead | CurrentWrite # read-write
userAccessLevel: CurrentRead # but user-level access is read-only
ValueDescription
CurrentReadClients can read the current value
CurrentWriteClients can write the current value
CurrentRead | CurrentWriteBoth
NoneNo access

minimumSamplingInterval

The minimum interval (in milliseconds) at which the server will sample this variable:

minimumSamplingInterval
objectTypes:
- browseName: FastSensorType
components:
- browseName: FastSensor
dataType: ua:Double
minimumSamplingInterval: 50 # 50 ms minimum sampling interval
📄 Full working example — object-types.model.yaml
object-types.model.yaml
# yaml-language-server: $schema=../../../../schemas/nodeset2.schema.json
#
# Living documentation example for: s50_object-types.md
# Validate: opcua-modeler generate --input object-types.model.yaml

namespaceUri: http://example.com/doc/object-types/
version: 1.0.0
namespaces:
- di

# ── Event types referenced by generatedEvents (must be defined first) ─────────
eventTypes:
- browseName: OverpressureAlarmType
subtypeOf: ua:BaseEventType
description: Emitted when pressure exceeds the safe operating limit.

- browseName: PressureOutOfRangeType
subtypeOf: ua:BaseEventType
description: Emitted when pressure drifts outside the calibrated range.

# ── StateMachine used to demonstrate promotedToMandatory ──────────────────────
stateMachines:
- browseName: CustomStateMachineType
subtypeOf: ua:FiniteStateMachineType
promotedToMandatory:
- CurrentState.Name
- LastTransition.Id
- LastTransition.TransitionTime

# ── ObjectTypes ────────────────────────────────────────────────────────────────
objectTypes:
- browseName: MySensorType
# Add components, properties, organizes, methods as needed

- browseName: MySensorDeviceType
subtypeOf: di:DeviceType

- browseName: MeasurementType
components:
- browseName: MyMandatoryComponent
dataType: ua:Double
# modellingRule defaults to Mandatory — no need to write it
- browseName: MyOptionalComponent
dataType: ua:Double
modellingRule: Optional
- browseName: MyComponentWithNoModelingRule
dataType: ua:Double
modellingRule: false
- browseName: <MyOptionalPlaceholderComponent>
dataType: ua:Double
modellingRule: OptionalPlaceholder
- browseName: <MyMandatoryPlaceholderComponent>
dataType: ua:Double
modellingRule: MandatoryPlaceholder

- browseName: MySensorDeviceTypeV2
subtypeOf: di:DeviceType
components:
# Redefine the optional ParameterSet from di:DeviceType as mandatory
- browseName: di:ParameterSet
components:
- browseName: Temperature
dataType: ua:Double

- browseName: AssemblyType
orderedComponents:
- browseName: Step1
typeDefinition: ua:BaseObjectType
- browseName: Step2
typeDefinition: ua:BaseObjectType
physicalComponents:
- browseName: Housing
typeDefinition: ua:BaseObjectType
containedComponents:
- browseName: ControlBoard
typeDefinition: ua:BaseObjectType

- browseName: PressureVesselType
generatedEvents:
- OverpressureAlarmType
- PressureOutOfRangeType

- browseName: SensorType
components:
- browseName: Temperature
dataType: ua:Double
accessLevel: CurrentRead # read-only for all clients
- browseName: SetPoint
dataType: ua:Double
accessLevel: CurrentRead | CurrentWrite # read-write
userAccessLevel: CurrentRead # but user-level access is read-only

- browseName: FastSensorType
components:
- browseName: FastSensor
dataType: ua:Double
minimumSamplingInterval: 50 # 50 ms minimum sampling interval

# ── Instances ──────────────────────────────────────────────────────────────────
instances:
- browseName: Calculator
organizedBy: /ua:Objects
methods:
- browseName: AddTwoValues
inputArguments:
- name: Operand1
dataType: ua:Double
description: First operand
- name: Operand2
dataType: ua:Double
description: Second operand
outputArguments:
- name: Result
dataType: ua:Double
📄 Generated NodeSet2.xml — object-types.model.Nodeset2.xml
object-types.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://example.com/doc/object-types/Type.xsd">
<NamespaceUris>
<Uri>http://example.com/doc/object-types/</Uri>
<Uri>http://opcfoundation.org/UA/DI/</Uri>
</NamespaceUris>
<Models>
<Model ModelUri="http://example.com/doc/object-types/" Version="1.0.0" PublicationDate="2026-06-02T17:03: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="Argument">i=296</Alias>
<Alias Alias="Double">i=11</Alias>
<Alias Alias="GeneratesEvent">i=41</Alias>
<Alias Alias="HasComponent">i=47</Alias>
<Alias Alias="HasContainedComponent">i=25263</Alias>
<Alias Alias="HasModellingRule">i=37</Alias>
<Alias Alias="HasOrderedComponent">i=49</Alias>
<Alias Alias="HasPhysicalComponent">i=25262</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>
</Aliases>
<!--ReferenceTypes-->
<!--ObjectTypes-->
<!--ObjectType - 1:CustomStateMachineType {{{{ -->
<UAObjectType NodeId="ns=1;i=1000" BrowseName="1:CustomStateMachineType">
<DisplayName>CustomStateMachineType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=2771</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:CustomStateMachineType }}}}-->
<!--ObjectType - 1:OverpressureAlarmType {{{{ -->
<UAObjectType NodeId="ns=1;i=1001" BrowseName="1:OverpressureAlarmType">
<DisplayName>OverpressureAlarmType</DisplayName>
<Description>Emitted when pressure exceeds the safe operating limit.</Description>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=2041</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:OverpressureAlarmType }}}}-->
<!--ObjectType - 1:PressureOutOfRangeType {{{{ -->
<UAObjectType NodeId="ns=1;i=1002" BrowseName="1:PressureOutOfRangeType">
<DisplayName>PressureOutOfRangeType</DisplayName>
<Description>Emitted when pressure drifts outside the calibrated range.</Description>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=2041</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:PressureOutOfRangeType }}}}-->
<!--ObjectType - 1:MySensorType {{{{ -->
<UAObjectType NodeId="ns=1;i=1003" BrowseName="1:MySensorType">
<DisplayName>MySensorType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:MySensorType }}}}-->
<!--ObjectType - 1:MySensorDeviceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1004" BrowseName="1:MySensorDeviceType">
<DisplayName>MySensorDeviceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">ns=2;i=1002</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:MySensorDeviceType }}}}-->
<!--ObjectType - 1:MeasurementType {{{{ -->
<UAObjectType NodeId="ns=1;i=1005" BrowseName="1:MeasurementType">
<DisplayName>MeasurementType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1006</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1007</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1008</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1009</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1010</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1006" BrowseName="1:MyMandatoryComponent" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="Double">
<DisplayName>MyMandatoryComponent</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1007" BrowseName="1:MyOptionalComponent" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="Double">
<DisplayName>MyOptionalComponent</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1008" BrowseName="1:MyComponentWithNoModelingRule" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="Double">
<DisplayName>MyComponentWithNoModelingRule</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1009" BrowseName="1:&lt;MyOptionalPlaceholderComponent>" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="Double">
<DisplayName>&lt;MyOptionalPlaceholderComponent&gt;</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=11508</Reference>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1010" BrowseName="1:&lt;MyMandatoryPlaceholderComponent>" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="Double">
<DisplayName>&lt;MyMandatoryPlaceholderComponent&gt;</DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=11510</Reference>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:MeasurementType }}}}-->
<!--ObjectType - 1:MySensorDeviceTypeV2 {{{{ -->
<UAObjectType NodeId="ns=1;i=1011" BrowseName="1:MySensorDeviceTypeV2">
<DisplayName>MySensorDeviceTypeV2</DisplayName>
<References>
<Reference ReferenceType="HasComponent">ns=1;i=1012</Reference>
<Reference ReferenceType="HasSubtype" IsForward="false">ns=2;i=1002</Reference>
</References>
</UAObjectType>
<!--Object - 2:ParameterSet {{{{ -->
<UAObject NodeId="ns=1;i=1012" BrowseName="2:ParameterSet" ParentNodeId="ns=1;i=1011">
<DisplayName>ParameterSet</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1013</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1013" BrowseName="1:Temperature" ParentNodeId="ns=1;i=1012" AccessLevel="3" DataType="Double">
<DisplayName>Temperature</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--Object - 2:ParameterSet }}}} -->
<!--ObjectType - 1:MySensorDeviceTypeV2 }}}}-->
<!--ObjectType - 1:AssemblyType {{{{ -->
<UAObjectType NodeId="ns=1;i=1014" BrowseName="1:AssemblyType">
<DisplayName>AssemblyType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasOrderedComponent">ns=1;i=1015</Reference>
<Reference ReferenceType="HasOrderedComponent">ns=1;i=1016</Reference>
<Reference ReferenceType="HasPhysicalComponent">ns=1;i=1017</Reference>
<Reference ReferenceType="HasContainedComponent">ns=1;i=1018</Reference>
</References>
</UAObjectType>
<!--Object - 1:Step1 {{{{ -->
<UAObject NodeId="ns=1;i=1015" BrowseName="1:Step1">
<DisplayName>Step1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAObject>
<!--Object - 1:Step1 }}}} -->
<!--Object - 1:Step2 {{{{ -->
<UAObject NodeId="ns=1;i=1016" BrowseName="1:Step2">
<DisplayName>Step2</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAObject>
<!--Object - 1:Step2 }}}} -->
<!--Object - 1:Housing {{{{ -->
<UAObject NodeId="ns=1;i=1017" BrowseName="1:Housing">
<DisplayName>Housing</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAObject>
<!--Object - 1:Housing }}}} -->
<!--Object - 1:ControlBoard {{{{ -->
<UAObject NodeId="ns=1;i=1018" BrowseName="1:ControlBoard">
<DisplayName>ControlBoard</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAObject>
<!--Object - 1:ControlBoard }}}} -->
<!--ObjectType - 1:AssemblyType }}}}-->
<!--ObjectType - 1:PressureVesselType {{{{ -->
<UAObjectType NodeId="ns=1;i=1019" BrowseName="1:PressureVesselType">
<DisplayName>PressureVesselType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="GeneratesEvent">ns=1;i=1001</Reference>
<Reference ReferenceType="GeneratesEvent">ns=1;i=1002</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:PressureVesselType }}}}-->
<!--ObjectType - 1:SensorType {{{{ -->
<UAObjectType NodeId="ns=1;i=1020" BrowseName="1:SensorType">
<DisplayName>SensorType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1021</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1022</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1021" BrowseName="1:Temperature" ParentNodeId="ns=1;i=1020" DataType="Double">
<DisplayName>Temperature</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1022" BrowseName="1:SetPoint" ParentNodeId="ns=1;i=1020" AccessLevel="3" DataType="Double">
<DisplayName>SetPoint</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:SensorType }}}}-->
<!--ObjectType - 1:FastSensorType {{{{ -->
<UAObjectType NodeId="ns=1;i=1023" BrowseName="1:FastSensorType">
<DisplayName>FastSensorType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1024</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1024" BrowseName="1:FastSensor" ParentNodeId="ns=1;i=1023" AccessLevel="3" MinimumSamplingInterval="50" DataType="Double">
<DisplayName>FastSensor</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:FastSensorType }}}}-->
<!--VariableTypes-->
<!--Other Nodes-->
<!--Object - 1:Calculator {{{{ -->
<UAObject NodeId="ns=1;i=1025" BrowseName="1:Calculator">
<DisplayName>Calculator</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1026</Reference>
</References>
</UAObject>
<UAMethod NodeId="ns=1;i=1026" BrowseName="1:AddTwoValues" ParentNodeId="ns=1;i=1025">
<DisplayName>AddTwoValues</DisplayName>
<References>
<Reference ReferenceType="HasProperty">ns=1;i=1027</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1028</Reference>
</References>
</UAMethod>
<UAVariable NodeId="ns=1;i=1027" BrowseName="InputArguments" ParentNodeId="ns=1;i=1026" ValueRank="1" ArrayDimensions="2" DataType="Argument">
<DisplayName>InputArguments</DisplayName>
<Description>the definition of the input argument of method 1:Calculator.1:AddTwoValues</Description>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
<Value>
<ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>Operand1</Name>
<DataType>
<Identifier>i=11</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions/>
<Description>
<Text>First operand</Text>
</Description>
</Argument>
</Body>
</ExtensionObject>
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>Operand2</Name>
<DataType>
<Identifier>i=11</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions/>
<Description>
<Text>Second operand</Text>
</Description>
</Argument>
</Body>
</ExtensionObject>
</ListOfExtensionObject>
</Value>
</UAVariable>
<UAVariable NodeId="ns=1;i=1028" BrowseName="OutputArguments" ParentNodeId="ns=1;i=1026" ValueRank="1" ArrayDimensions="1" DataType="Argument">
<DisplayName>OutputArguments</DisplayName>
<Description>the definition of the output arguments of method 1:Calculator.1:AddTwoValues</Description>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
<Value>
<ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>Result</Name>
<DataType>
<Identifier>i=11</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions/>
<Description>
<Text/>
</Description>
</Argument>
</Body>
</ExtensionObject>
</ListOfExtensionObject>
</Value>
</UAVariable>
<!--Object - 1:Calculator }}}} -->
</UANodeSet>