Files
Marc Schier 59374fc81d Generate MatrixOf<T> properties for OneOrMoreDimension types (#3625) (#3868)
# Description

Closes the original PR #3619 TODO and extends the `MatrixOf<T>` opt-in
to every place the source generator previously fell back to `Variant`
for `ValueRank="OneOrMoreDimensions"`.

## Generator changes (`Tools/Opc.Ua.SourceGeneration.Core`)

### Site 1 — DataType structure fields (`DataTypeGenerator.cs`)

Fields declared with matrix rank now render as
`global::Opc.Ua.MatrixOf<T>` instead of `Variant`, mirroring the
existing `ArrayOf<T>` treatment for `Array` rank. Encode/decode is
routed per the field's `DataType`:

| Field `DataType` | Property | Encode | Decode |
| ------------------------------------------------- |
--------------------------------------- |
----------------------------------------------------------- |
-----------------------------------------------------------------------
|
| primitive (`Boolean`, `Int32`, `String`, …) | `MatrixOf<bool>` etc. |
`WriteVariant(name, Variant.From(field));` |
`ReadVariant(name).GetBooleanMatrix();` (etc.) |
| `Structure` / abstract structure | `MatrixOf<ExtensionObject>` |
`WriteVariant(name, Variant.From(field));` |
`ReadVariant(name).GetExtensionObjectMatrix();` |
| concrete `IEncodeable` (e.g. `Vector`) | `MatrixOf<Vector>` |
`WriteEncodeableMatrix(name, field);` |
`ReadEncodeableMatrix<Vector>(name);` |
| typed enum | `MatrixOf<MyEnum>` | `WriteVariant(name,
Variant.From(field));` |
`ReadVariant(name).GetEnumerationMatrix<MyEnum>();` |
| `BaseDataType` / `Number` / `Integer` / `UInteger`|
`MatrixOf<Variant>` | `WriteVariant(name, Variant.From(field));` |
`ReadVariant(name).GetVariantMatrix();` |

### Site 2 — VariableType State classes (`NodeStateGenerator.cs`)

Replaces the original `// TODO: matrixOf;` from #3619. Concrete matrix
variable types now inherit the typed `<MatrixOf<T>>` chain. Standard
model:

- `XYArrayItemState :
ArrayItemState<MatrixOf<XVType>>.Implementation<StructureBuilder<XVType>>`

Abstract bases (`ArrayItemType`, `CubeItemType`, `ImageItemType`,
`NDimensionArrayItemType` — all `DataType="BaseDataType"`) keep the
existing `<T>` early-return.

### Site 3 — Property / Variable instances
(`ModelDesignExtensions.GetNodeStateClassName`)

Adds a `OneOrMoreDimensions` branch after the existing `Array` branch
and refines `IsTemplateParameterRequired` / `IsIndeterminateType` so
matrix-rank concrete types are no longer treated as indeterminate.
Standard model:

- `EnumDictionaryEntries: PropertyState<MatrixOf<NodeId>>`
- `FailureSystemIdentifier: BaseDataVariableState<MatrixOf<byte>>`

### Site 4 — Method parameters (`ClientApiGenerator` /
`ServerApiGenerator`)

`CollectParameters` opts in to `useMatrixTypeInsteadOfVariant` via
`SupportsMatrixOf()`. Zero standard-service impact (no OPC UA service
declares matrix args).

## Encoder / decoder API

Adds the parameterless overload `MatrixOf<T>
ReadEncodeableMatrix<T>(string? fieldName) where T : IEncodeable, new()`
to `IDecoder` and all implementations (`BinaryDecoder`, `JsonDecoder`,
`XmlDecoder`, `XmlParser`, `PubSubJsonDecoder`), mirroring the existing
`ReadEncodeableArray<T>(string?)` shape so the generator does not need a
runtime encoding-id lookup.

## Consumer migration

-
`Applications/Quickstarts.Servers/ReferenceServer/ReferenceNodeManager.cs`
— `CreateXYArrayItemVariable` updated from
`Variant.FromStructure(ArrayOf.Wrapped(...))` to `new XVType[] { …
}.ToMatrixOf(5)` to match the new typed `XYArrayItemState.Value`
surface.

## Tests added

- **Generator snippet tests**:
`GenerateMatrixValueDataType_EmitsMatrixOfPropertiesAndCalls` (custom
data-type matrix fields) and
`NodeStateGeneratorEmitsMatrixOfTemplateParameterForStandardModel`
(standard-model VariableType + instance types).
- **Encoder round-trip**: new `EncodeableMatrixRoundTripTests` exercises
`WriteEncodeableMatrix` ↔ `ReadEncodeableMatrix<T>(string?)` through
Binary, XML, and parameterless overloads with null-matrix and populated
payloads.
- **Extension tests**: parameterised
`GetDotNetTypeName_OneOrMoreDimensionsValueRankWithBasicDataTypes_ReturnsCorrectMatrixOfType`
and `IsTemplateParameterRequired_OneOrMoreDimensionsWith…` tables;
`SupportsMatrixOf` coverage including `DiagnosticInfo → false` and
`ArgumentNullException` for null receiver.
- **Test resource models** (`TestDataDesign.xml`, `DemoModel.xml`,
`TestModel.xml`): new `MatrixValueDataType` /
`SampleStructureWithMatrixFields` exercise every branch end-to-end
through the existing `GenerateAndCompileDesignFileAsync` integration
test.

## Documentation

`Docs/MigrationGuide.md` — new sub-section "Generated data type fields
with ValueRank=OneOrMoreDimensions" with a per-`BasicDataType` mapping
table, the `IDecoder.ReadEncodeableMatrix<T>(string?)` overload note for
custom decoder implementations, and a sibling block covering
VariableType State classes, property-state instances, and service
parameters with before/after code samples.

## Verification

| Suite (net10.0) | Result |
| --------------- | ------ |
| `Opc.Ua.Types.Tests` | 7553 passed |
| `Opc.Ua.SourceGeneration.Core.Tests` | 3623 passed, 8 skipped
(analyzer-conditional) |
| `Opc.Ua.SourceGeneration.Stack.Tests` | 90 passed |
| `Opc.Ua.SourceGeneration.Tests` | 40 passed |
| `Opc.Ua.Server.Tests` (focused on `ReferenceServer`/`ArrayItem`) | 37
passed |
| Full `UA.slnx` build | 0 errors (42 pre-existing unrelated CA2007
warnings) |

The `// TODO: matrixOf;` comment is gone from `NodeStateGenerator.cs`.

## Related Issues

- Fixes #3625

## Checklist

- [x] I have signed the
[CLA](https://opcfoundation.org/license/cla/ContributorLicenseAgreementv1.0.pdf)
and read the
[CONTRIBUTING](https://github.com/OPCFoundation/UA-.NETStandard/blob/master/CONTRIBUTING.md)
doc.
- [x] I have added tests that prove my fix is effective or that my
feature works and increased code coverage.
- [x] I have added all necessary documentation.
- [x] I have verified that my changes do not introduce (new) build or
analyzer warnings.
- [x] I ran **all** tests locally using the **UA.slnx** solution against
at least .net **framework** and .net **10**, and all passed.
- [ ] I fixed **all** failing and flaky tests in the CI pipelines and
**all** CodeQL warnings.
- [ ] I have addressed **all** PR feedback received.
2026-06-12 12:45:39 +02:00

967 lines
61 KiB
XML

<?xml version="1.0" encoding="utf-8" ?>
<opc:ModelDesign
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:opc="http://opcfoundation.org/UA/ModelDesign.xsd"
xmlns:ua="http://opcfoundation.org/UA/"
xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd"
xmlns="http://test.org/UA/Data/"
TargetNamespace="http://test.org/UA/Data/"
>
<opc:Namespaces>
<opc:Namespace Name="OpcUa" Prefix="Opc.Ua" XmlNamespace="http://opcfoundation.org/UA/2008/02/Types.xsd">http://opcfoundation.org/UA/</opc:Namespace>
<opc:Namespace Name="TestData" Prefix="TestData">http://test.org/UA/Data/</opc:Namespace>
</opc:Namespaces>
<opc:Method SymbolicName="GenerateValuesMethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="Iterations" DataType="ua:UInt32">
<opc:Description>The number of new values to generate.</opc:Description>
</opc:Argument>
</opc:InputArguments>
</opc:Method>
<opc:ObjectType SymbolicName="GenerateValuesEventType" BaseType="ua:BaseEventType">
<opc:Children>
<opc:Property SymbolicName="Iterations" DataType="ua:UInt32" ModellingRule="Mandatory" />
<opc:Property SymbolicName="NewValueCount" DataType="ua:UInt32" ModellingRule="Mandatory" />
</opc:Children>
</opc:ObjectType>
<!--
<opc:ObjectType SymbolicName="Foo_Bar_Type" BaseType="ua:BaseObjectType">
<opc:Children>
<opc:Object SymbolicName="Blue_Fish">
<opc:Children>
<opc:Property SymbolicName="Apple_Array" DataType="ua:String" ValueRank="Array" MinimumSamplingInterval="1000" />
<opc:Property SymbolicName="Orange_Array" DataType="ua:String" ValueRank="Array" MinimumSamplingInterval="1000">
<opc:References>
<opc:Reference>
<opc:ReferenceType>ua:HasEffect</opc:ReferenceType>
<opc:TargetId>Foo_Bar_Type_Gold_Fish</opc:TargetId>
</opc:Reference>
<opc:Reference>
<opc:ReferenceType>ua:HasEffect</opc:ReferenceType>
<opc:TargetId>Foo_Bar_Type</opc:TargetId>
</opc:Reference>
</opc:References>
</opc:Property>
</opc:Children>
</opc:Object>
<opc:Object SymbolicName="Gold_Fish">
<opc:Children>
<opc:Property SymbolicName="Apple_Array" DataType="ua:String" ValueRank="Array" MinimumSamplingInterval="1000">
<opc:References>
<opc:Reference>
<opc:ReferenceType>ua:HasEffect</opc:ReferenceType>
<opc:TargetId>Foo_Bar_Type_Blue_Fish_Orange_Array</opc:TargetId>
</opc:Reference>
</opc:References>
</opc:Property>
<opc:Property SymbolicName="Namespace_Array" DataType="ua:String" ValueRank="Array" MinimumSamplingInterval="1000" />
</opc:Children>
</opc:Object>
</opc:Children>
</opc:ObjectType>
<opc:Object SymbolicName="Hello_World" TypeDefinition="ua:FolderType" SupportsEvents="true">
<opc:Children>
<opc:Object SymbolicName="Foo_Bar_1" TypeDefinition="Foo_Bar_Type" SupportsEvents="true">
</opc:Object>
</opc:Children>
<opc:References>
<opc:Reference IsInverse="true">
<opc:ReferenceType>ua:Organizes</opc:ReferenceType>
<opc:TargetId>ua:ObjectsFolder</opc:TargetId>
</opc:Reference>
</opc:References>
</opc:Object>
-->
<opc:ObjectType SymbolicName="TestDataObjectType" BaseType="ua:BaseObjectType">
<opc:Children>
<opc:Property SymbolicName="SimulationActive" DataType="ua:Boolean" ModellingRule="Mandatory">
<opc:Description>If true the server will produce new values for each monitored variable.</opc:Description>
</opc:Property>
<opc:Method SymbolicName="GenerateValues" TypeDefinition="GenerateValuesMethodType" ModellingRule="Mandatory"></opc:Method>
<opc:Object SymbolicName="CycleComplete" TypeDefinition="ua:AcknowledgeableConditionType" ModellingRule="Mandatory">
<opc:References>
<opc:Reference IsInverse="true">
<opc:ReferenceType>ua:HasEventSource</opc:ReferenceType>
<opc:TargetId>TestDataObjectType</opc:TargetId>
</opc:Reference>
</opc:References>
</opc:Object>
</opc:Children>
</opc:ObjectType>
<opc:DataType SymbolicName="ScalarStructureDataType" BaseType="ua:Structure">
<opc:Fields>
<opc:Field Name="BooleanValue" DataType="ua:Boolean" />
<opc:Field Name="SByteValue" DataType="ua:SByte" />
<opc:Field Name="ByteValue" DataType="ua:Byte" />
<opc:Field Name="Int16Value" DataType="ua:Int16" />
<opc:Field Name="UInt16Value" DataType="ua:UInt16" />
<opc:Field Name="Int32Value" DataType="ua:Int32" />
<opc:Field Name="UInt32Value" DataType="ua:UInt32" />
<opc:Field Name="Int64Value" DataType="ua:Int64" />
<opc:Field Name="UInt64Value" DataType="ua:UInt64" />
<opc:Field Name="FloatValue" DataType="ua:Float" />
<opc:Field Name="DoubleValue" DataType="ua:Double" />
<opc:Field Name="StringValue" DataType="ua:String" />
<opc:Field Name="DateTimeValue" DataType="ua:DateTime" />
<opc:Field Name="GuidValue" DataType="ua:Guid" />
<opc:Field Name="ByteStringValue" DataType="ua:ByteString" />
<opc:Field Name="XmlElementValue" DataType="ua:XmlElement" />
<opc:Field Name="NodeIdValue" DataType="ua:NodeId" />
<opc:Field Name="ExpandedNodeIdValue" DataType="ua:ExpandedNodeId" />
<opc:Field Name="QualifiedNameValue" DataType="ua:QualifiedName" />
<opc:Field Name="LocalizedTextValue" DataType="ua:LocalizedText" />
<opc:Field Name="StatusCodeValue" DataType="ua:StatusCode" />
<opc:Field Name="VariantValue" DataType="ua:BaseDataType" />
<opc:Field Name="EnumerationValue" DataType="ua:Enumeration" />
<opc:Field Name="StructureValue" DataType="ua:Structure" />
<opc:Field Name="NumberValue" DataType="ua:Number" />
<opc:Field Name="IntegerValue" DataType="ua:Integer" />
<opc:Field Name="UIntegerValue" DataType="ua:UInteger" />
</opc:Fields>
</opc:DataType>
<opc:VariableType SymbolicName="ScalarStructureVariableType" DataType="ScalarStructureDataType" BaseType="ua:BaseDataVariableType">
<opc:Children>
<opc:Variable SymbolicName="BooleanValue" DataType="ua:Boolean" ModellingRule="Mandatory"/>
<opc:Variable SymbolicName="SByteValue" DataType="ua:SByte" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteValue" DataType="ua:Byte" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int16Value" DataType="ua:Int16" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt16Value" DataType="ua:UInt16" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int32Value" DataType="ua:Int32" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt32Value" DataType="ua:UInt32" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int64Value" DataType="ua:Int64" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt64Value" DataType="ua:UInt64" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="FloatValue" DataType="ua:Float" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DoubleValue" DataType="ua:Double" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StringValue" DataType="ua:String" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DateTimeValue" DataType="ua:DateTime" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="GuidValue" DataType="ua:Guid" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteStringValue" DataType="ua:ByteString" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="XmlElementValue" DataType="ua:XmlElement" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="NodeIdValue" DataType="ua:NodeId" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ExpandedNodeIdValue" DataType="ua:ExpandedNodeId" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="QualifiedNameValue" DataType="ua:QualifiedName" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="LocalizedTextValue" DataType="ua:LocalizedText" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StatusCodeValue" DataType="ua:StatusCode" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VariantValue" DataType="ua:BaseDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="EnumerationValue" DataType="ua:Enumeration" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StructureValue" DataType="ua:Structure" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="NumberValue" DataType="ua:Number" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="IntegerValue" DataType="ua:Integer" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UIntegerValue" DataType="ua:UInteger" ModellingRule="Mandatory" />
</opc:Children>
</opc:VariableType>
<opc:Method SymbolicName="ScalarValue1MethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="BooleanIn" DataType="ua:Boolean" />
<opc:Argument Name="SByteIn" DataType="ua:SByte" />
<opc:Argument Name="ByteIn" DataType="ua:Byte" />
<opc:Argument Name="Int16In" DataType="ua:Int16" />
<opc:Argument Name="UInt16In" DataType="ua:UInt16" />
<opc:Argument Name="Int32In" DataType="ua:Int32" />
<opc:Argument Name="UInt32In" DataType="ua:UInt32" />
<opc:Argument Name="Int64In" DataType="ua:Int64" />
<opc:Argument Name="UInt64In" DataType="ua:UInt64" />
<opc:Argument Name="FloatIn" DataType="ua:Float" />
<opc:Argument Name="DoubleIn" DataType="ua:Double" />
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="BooleanOut" DataType="ua:Boolean" />
<opc:Argument Name="SByteOut" DataType="ua:SByte" />
<opc:Argument Name="ByteOut" DataType="ua:Byte" />
<opc:Argument Name="Int16Out" DataType="ua:Int16" />
<opc:Argument Name="UInt16Out" DataType="ua:UInt16" />
<opc:Argument Name="Int32Out" DataType="ua:Int32" />
<opc:Argument Name="UInt32Out" DataType="ua:UInt32" />
<opc:Argument Name="Int64Out" DataType="ua:Int64" />
<opc:Argument Name="UInt64Out" DataType="ua:UInt64" />
<opc:Argument Name="FloatOut" DataType="ua:Float" />
<opc:Argument Name="DoubleOut" DataType="ua:Double" />
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="ScalarValue2MethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="StringIn" DataType="ua:String" />
<opc:Argument Name="DateTimeIn" DataType="ua:DateTime" />
<opc:Argument Name="GuidIn" DataType="ua:Guid" />
<opc:Argument Name="ByteStringIn" DataType="ua:ByteString" />
<opc:Argument Name="XmlElementIn" DataType="ua:XmlElement" />
<opc:Argument Name="NodeIdIn" DataType="ua:NodeId" />
<opc:Argument Name="ExpandedNodeIdIn" DataType="ua:ExpandedNodeId" />
<opc:Argument Name="QualifiedNameIn" DataType="ua:QualifiedName" />
<opc:Argument Name="LocalizedTextIn" DataType="ua:LocalizedText" />
<opc:Argument Name="StatusCodeIn" DataType="ua:StatusCode" />
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="StringOut" DataType="ua:String" />
<opc:Argument Name="DateTimeOut" DataType="ua:DateTime" />
<opc:Argument Name="GuidOut" DataType="ua:Guid" />
<opc:Argument Name="ByteStringOut" DataType="ua:ByteString" />
<opc:Argument Name="XmlElementOut" DataType="ua:XmlElement" />
<opc:Argument Name="NodeIdOut" DataType="ua:NodeId" />
<opc:Argument Name="ExpandedNodeIdOut" DataType="ua:ExpandedNodeId" />
<opc:Argument Name="QualifiedNameOut" DataType="ua:QualifiedName" />
<opc:Argument Name="LocalizedTextOut" DataType="ua:LocalizedText" />
<opc:Argument Name="StatusCodeOut" DataType="ua:StatusCode" />
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="ScalarValue3MethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="VariantIn" DataType="ua:BaseDataType" />
<opc:Argument Name="EnumerationIn" DataType="ua:Enumeration" />
<opc:Argument Name="StructureIn" DataType="ua:Structure" />
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="VariantOut" DataType="ua:BaseDataType" />
<opc:Argument Name="EnumerationOut" DataType="ua:Enumeration" />
<opc:Argument Name="StructureOut" DataType="ua:Structure" />
</opc:OutputArguments>
</opc:Method>
<opc:ObjectType SymbolicName="ScalarValueObjectType" BaseType="TestDataObjectType">
<opc:Children>
<opc:Variable SymbolicName="BooleanValue" DataType="ua:Boolean" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="SByteValue" DataType="ua:SByte" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteValue" DataType="ua:Byte" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int16Value" DataType="ua:Int16" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt16Value" DataType="ua:UInt16" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int32Value" DataType="ua:Int32" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt32Value" DataType="ua:UInt32" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int64Value" DataType="ua:Int64" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt64Value" DataType="ua:UInt64" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="FloatValue" DataType="ua:Float" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DoubleValue" DataType="ua:Double" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StringValue" DataType="ua:String" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DateTimeValue" DataType="ua:DateTime" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="GuidValue" DataType="ua:Guid" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteStringValue" DataType="ua:ByteString" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="XmlElementValue" DataType="ua:XmlElement" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="NodeIdValue" DataType="ua:NodeId" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ExpandedNodeIdValue" DataType="ua:ExpandedNodeId" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="QualifiedNameValue" DataType="ua:QualifiedName" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="LocalizedTextValue" DataType="ua:LocalizedText" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StatusCodeValue" DataType="ua:StatusCode" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VariantValue" DataType="ua:BaseDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="EnumerationValue" DataType="ua:Enumeration" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StructureValue" DataType="ua:Structure" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="NumberValue" DataType="ua:Number" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="IntegerValue" DataType="ua:Integer" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UIntegerValue" DataType="ua:UInteger" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VectorValue" DataType="Vector" TypeDefinition="VectorVariableType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VectorUnionValue" DataType="VectorUnion" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VectorWithOptionalFieldsValue" DataType="VectorWithOptionalFields" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="MultipleVectorsValue" DataType="MultipleVectors" ModellingRule="Mandatory" />
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="StructureValueObjectType" BaseType="TestDataObjectType">
<opc:Children>
<opc:Variable SymbolicName="ScalarStructure" DataType="ScalarStructureDataType" TypeDefinition="ScalarStructureVariableType" ModellingRule="Mandatory"/>
<opc:Variable SymbolicName="VectorStructure" DataType="Vector" TypeDefinition="VectorVariableType" ModellingRule="Mandatory" />
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="AnalogScalarValueObjectType" BaseType="TestDataObjectType">
<opc:Children>
<opc:Variable SymbolicName="SByteValue" TypeDefinition="ua:AnalogItemType" DataType="ua:SByte" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteValue" TypeDefinition="ua:AnalogItemType" DataType="ua:Byte" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int16Value" TypeDefinition="ua:AnalogItemType" DataType="ua:Int16" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt16Value" TypeDefinition="ua:AnalogItemType" DataType="ua:UInt16" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int32Value" TypeDefinition="ua:AnalogItemType" DataType="ua:Int32" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt32Value" TypeDefinition="ua:AnalogItemType" DataType="ua:UInt32" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int64Value" TypeDefinition="ua:AnalogItemType" DataType="ua:Int64" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt64Value" TypeDefinition="ua:AnalogItemType" DataType="ua:UInt64" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="FloatValue" TypeDefinition="ua:AnalogItemType" DataType="ua:Float" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DoubleValue" TypeDefinition="ua:AnalogItemType" DataType="ua:Double" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="NumberValue" TypeDefinition="ua:AnalogItemType" DataType="ua:Number" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="IntegerValue" TypeDefinition="ua:AnalogItemType" DataType="ua:Integer" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UIntegerValue" TypeDefinition="ua:AnalogItemType" DataType="ua:UInteger" ModellingRule="Mandatory" />
</opc:Children>
</opc:ObjectType>
<opc:DataType SymbolicName="ArrayValueDataType" BaseType="ua:Structure">
<opc:Fields>
<opc:Field Name="BooleanValue" DataType="ua:Boolean" ValueRank="Array" />
<opc:Field Name="SByteValue" DataType="ua:SByte" ValueRank="Array" />
<opc:Field Name="ByteValue" DataType="ua:Byte" ValueRank="Array" />
<opc:Field Name="Int16Value" DataType="ua:Int16" ValueRank="Array" />
<opc:Field Name="UInt16Value" DataType="ua:UInt16" ValueRank="Array" />
<opc:Field Name="Int32Value" DataType="ua:Int32" ValueRank="Array" />
<opc:Field Name="UInt32Value" DataType="ua:UInt32" ValueRank="Array" />
<opc:Field Name="Int64Value" DataType="ua:Int64" ValueRank="Array" />
<opc:Field Name="UInt64Value" DataType="ua:UInt64" ValueRank="Array" />
<opc:Field Name="FloatValue" DataType="ua:Float" ValueRank="Array" />
<opc:Field Name="DoubleValue" DataType="ua:Double" ValueRank="Array" />
<opc:Field Name="StringValue" DataType="ua:String" ValueRank="Array" />
<opc:Field Name="DateTimeValue" DataType="ua:DateTime" ValueRank="Array" />
<opc:Field Name="GuidValue" DataType="ua:Guid" ValueRank="Array" />
<opc:Field Name="ByteStringValue" DataType="ua:ByteString" ValueRank="Array" />
<opc:Field Name="XmlElementValue" DataType="ua:XmlElement" ValueRank="Array" />
<opc:Field Name="NodeIdValue" DataType="ua:NodeId" ValueRank="Array" />
<opc:Field Name="ExpandedNodeIdValue" DataType="ua:ExpandedNodeId" ValueRank="Array" />
<opc:Field Name="QualifiedNameValue" DataType="ua:QualifiedName" ValueRank="Array" />
<opc:Field Name="LocalizedTextValue" DataType="ua:LocalizedText" ValueRank="Array" />
<opc:Field Name="StatusCodeValue" DataType="ua:StatusCode" ValueRank="Array" />
<opc:Field Name="VariantValue" DataType="ua:BaseDataType" ValueRank="Array" />
<opc:Field Name="EnumerationValue" DataType="ua:Enumeration" ValueRank="Array" />
<opc:Field Name="StructureValue" DataType="ua:Structure" ValueRank="Array" />
<opc:Field Name="NumberValue" DataType="ua:Number" ValueRank="Array" />
<opc:Field Name="IntegerValue" DataType="ua:Integer" ValueRank="Array" />
<opc:Field Name="UIntegerValue" DataType="ua:UInteger" ValueRank="Array" />
</opc:Fields>
</opc:DataType>
<opc:Method SymbolicName="ArrayValue1MethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="BooleanIn" DataType="ua:Boolean" ValueRank="Array" />
<opc:Argument Name="SByteIn" DataType="ua:SByte" ValueRank="Array" />
<opc:Argument Name="ByteIn" DataType="ua:Byte" ValueRank="Array" />
<opc:Argument Name="Int16In" DataType="ua:Int16" ValueRank="Array" />
<opc:Argument Name="UInt16In" DataType="ua:UInt16" ValueRank="Array" />
<opc:Argument Name="Int32In" DataType="ua:Int32" ValueRank="Array" />
<opc:Argument Name="UInt32In" DataType="ua:UInt32" ValueRank="Array" />
<opc:Argument Name="Int64In" DataType="ua:Int64" ValueRank="Array" />
<opc:Argument Name="UInt64In" DataType="ua:UInt64" ValueRank="Array" />
<opc:Argument Name="FloatIn" DataType="ua:Float" ValueRank="Array" />
<opc:Argument Name="DoubleIn" DataType="ua:Double" ValueRank="Array" />
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="BooleanOut" DataType="ua:Boolean" ValueRank="Array" />
<opc:Argument Name="SByteOut" DataType="ua:SByte" ValueRank="Array" />
<opc:Argument Name="ByteOut" DataType="ua:Byte" ValueRank="Array" />
<opc:Argument Name="Int16Out" DataType="ua:Int16" ValueRank="Array" />
<opc:Argument Name="UInt16Out" DataType="ua:UInt16" ValueRank="Array" />
<opc:Argument Name="Int32Out" DataType="ua:Int32" ValueRank="Array" />
<opc:Argument Name="UInt32Out" DataType="ua:UInt32" ValueRank="Array" />
<opc:Argument Name="Int64Out" DataType="ua:Int64" ValueRank="Array" />
<opc:Argument Name="UInt64Out" DataType="ua:UInt64" ValueRank="Array" />
<opc:Argument Name="FloatOut" DataType="ua:Float" ValueRank="Array" />
<opc:Argument Name="DoubleOut" DataType="ua:Double" ValueRank="Array" />
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="ArrayValue2MethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="StringIn" DataType="ua:String" ValueRank="Array" />
<opc:Argument Name="DateTimeIn" DataType="ua:DateTime" ValueRank="Array" />
<opc:Argument Name="GuidIn" DataType="ua:Guid" ValueRank="Array" />
<opc:Argument Name="ByteStringIn" DataType="ua:ByteString" ValueRank="Array" />
<opc:Argument Name="XmlElementIn" DataType="ua:XmlElement" ValueRank="Array" />
<opc:Argument Name="NodeIdIn" DataType="ua:NodeId" ValueRank="Array" />
<opc:Argument Name="ExpandedNodeIdIn" DataType="ua:ExpandedNodeId" ValueRank="Array" />
<opc:Argument Name="QualifiedNameIn" DataType="ua:QualifiedName" ValueRank="Array" />
<opc:Argument Name="LocalizedTextIn" DataType="ua:LocalizedText" ValueRank="Array" />
<opc:Argument Name="StatusCodeIn" DataType="ua:StatusCode" ValueRank="Array" />
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="StringOut" DataType="ua:String" ValueRank="Array" />
<opc:Argument Name="DateTimeOut" DataType="ua:DateTime" ValueRank="Array" />
<opc:Argument Name="GuidOut" DataType="ua:Guid" ValueRank="Array" />
<opc:Argument Name="ByteStringOut" DataType="ua:ByteString" ValueRank="Array" />
<opc:Argument Name="XmlElementOut" DataType="ua:XmlElement" ValueRank="Array" />
<opc:Argument Name="NodeIdOut" DataType="ua:NodeId" ValueRank="Array" />
<opc:Argument Name="ExpandedNodeIdOut" DataType="ua:ExpandedNodeId" ValueRank="Array" />
<opc:Argument Name="QualifiedNameOut" DataType="ua:QualifiedName" ValueRank="Array" />
<opc:Argument Name="LocalizedTextOut" DataType="ua:LocalizedText" ValueRank="Array" />
<opc:Argument Name="StatusCodeOut" DataType="ua:StatusCode" ValueRank="Array" />
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="ArrayValue3MethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="VariantIn" DataType="ua:BaseDataType" ValueRank="Array" />
<opc:Argument Name="EnumerationIn" DataType="ua:Enumeration" ValueRank="Array" />
<opc:Argument Name="StructureIn" DataType="ua:Structure" ValueRank="Array" />
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="VariantOut" DataType="ua:BaseDataType" ValueRank="Array" />
<opc:Argument Name="EnumerationOut" DataType="ua:Enumeration" ValueRank="Array" />
<opc:Argument Name="StructureOut" DataType="ua:Structure" ValueRank="Array" />
</opc:OutputArguments>
</opc:Method>
<opc:ObjectType SymbolicName="ArrayValueObjectType" BaseType="TestDataObjectType">
<opc:Children>
<opc:Variable SymbolicName="BooleanValue" DataType="ua:Boolean" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="SByteValue" DataType="ua:SByte" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteValue" DataType="ua:Byte" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int16Value" DataType="ua:Int16" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt16Value" DataType="ua:UInt16" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int32Value" DataType="ua:Int32" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt32Value" DataType="ua:UInt32" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int64Value" DataType="ua:Int64" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt64Value" DataType="ua:UInt64" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="FloatValue" DataType="ua:Float" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DoubleValue" DataType="ua:Double" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StringValue" DataType="ua:String" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DateTimeValue" DataType="ua:DateTime" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="GuidValue" DataType="ua:Guid" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteStringValue" DataType="ua:ByteString" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="XmlElementValue" DataType="ua:XmlElement" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="NodeIdValue" DataType="ua:NodeId" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ExpandedNodeIdValue" DataType="ua:ExpandedNodeId" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="QualifiedNameValue" DataType="ua:QualifiedName" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="LocalizedTextValue" DataType="ua:LocalizedText" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StatusCodeValue" DataType="ua:StatusCode" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VariantValue" DataType="ua:BaseDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="EnumerationValue" DataType="ua:Enumeration" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StructureValue" DataType="ua:Structure" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="NumberValue" DataType="ua:Number" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="IntegerValue" DataType="ua:Integer" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UIntegerValue" DataType="ua:UInteger" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VectorValue" DataType="Vector" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VectorUnionValue" DataType="VectorUnion" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VectorWithOptionalFieldsValue" DataType="VectorWithOptionalFields" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="MultipleVectorsValue" DataType="MultipleVectors" ValueRank="Array" ModellingRule="Mandatory" />
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="AnalogArrayValueObjectType" BaseType="TestDataObjectType">
<opc:Children>
<opc:Variable SymbolicName="SByteValue" TypeDefinition="ua:AnalogItemType" DataType="ua:SByte" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteValue" TypeDefinition="ua:AnalogItemType" DataType="ua:Byte" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int16Value" TypeDefinition="ua:AnalogItemType" DataType="ua:Int16" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt16Value" TypeDefinition="ua:AnalogItemType" DataType="ua:UInt16" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int32Value" TypeDefinition="ua:AnalogItemType" DataType="ua:Int32" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt32Value" TypeDefinition="ua:AnalogItemType" DataType="ua:UInt32" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int64Value" TypeDefinition="ua:AnalogItemType" DataType="ua:Int64" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt64Value" TypeDefinition="ua:AnalogItemType" DataType="ua:UInt64" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="FloatValue" TypeDefinition="ua:AnalogItemType" DataType="ua:Float" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DoubleValue" TypeDefinition="ua:AnalogItemType" DataType="ua:Double" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="NumberValue" TypeDefinition="ua:AnalogItemType" DataType="ua:Number" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="IntegerValue" TypeDefinition="ua:AnalogItemType" DataType="ua:Integer" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UIntegerValue" TypeDefinition="ua:AnalogItemType" DataType="ua:UInteger" ValueRank="Array" ModellingRule="Mandatory" />
</opc:Children>
</opc:ObjectType>
<opc:DataType SymbolicName="BooleanDataType" BaseType="ua:Boolean" />
<opc:DataType SymbolicName="SByteDataType" BaseType="ua:SByte" />
<opc:DataType SymbolicName="ByteDataType" BaseType="ua:Byte" />
<opc:DataType SymbolicName="Int16DataType" BaseType="ua:Int16" />
<opc:DataType SymbolicName="UInt16DataType" BaseType="ua:UInt16" />
<opc:DataType SymbolicName="Int32DataType" BaseType="ua:Int32" />
<opc:DataType SymbolicName="UInt32DataType" BaseType="ua:UInt32" />
<opc:DataType SymbolicName="Int64DataType" BaseType="ua:Int64" />
<opc:DataType SymbolicName="UInt64DataType" BaseType="ua:UInt64" />
<opc:DataType SymbolicName="FloatDataType" BaseType="ua:Float" />
<opc:DataType SymbolicName="DoubleDataType" BaseType="ua:Double" />
<opc:DataType SymbolicName="StringDataType" BaseType="ua:String" />
<opc:DataType SymbolicName="DateTimeDataType" BaseType="ua:DateTime" />
<opc:DataType SymbolicName="GuidDataType" BaseType="ua:Guid" />
<opc:DataType SymbolicName="ByteStringDataType" BaseType="ua:ByteString" />
<opc:DataType SymbolicName="XmlElementDataType" BaseType="ua:XmlElement" />
<opc:DataType SymbolicName="NodeIdDataType" BaseType="ua:NodeId" />
<opc:DataType SymbolicName="ExpandedNodeIdDataType" BaseType="ua:ExpandedNodeId" />
<opc:DataType SymbolicName="QualifiedNameDataType" BaseType="ua:QualifiedName" />
<opc:DataType SymbolicName="LocalizedTextDataType" BaseType="ua:LocalizedText" />
<opc:DataType SymbolicName="StatusCodeDataType" BaseType="ua:StatusCode" />
<opc:DataType SymbolicName="VariantDataType" BaseType="ua:BaseDataType" />
<opc:DataType SymbolicName="UserScalarValueDataType" BaseType="ua:Structure">
<opc:Fields>
<opc:Field Name="BooleanDataType" DataType="BooleanDataType" />
<opc:Field Name="SByteDataType" DataType="SByteDataType" />
<opc:Field Name="ByteDataType" DataType="ByteDataType" />
<opc:Field Name="Int16DataType" DataType="Int16DataType" />
<opc:Field Name="UInt16DataType" DataType="UInt16DataType" />
<opc:Field Name="Int32DataType" DataType="Int32DataType" />
<opc:Field Name="UInt32DataType" DataType="UInt32DataType" />
<opc:Field Name="Int64DataType" DataType="Int64DataType" />
<opc:Field Name="UInt64DataType" DataType="UInt64DataType" />
<opc:Field Name="FloatDataType" DataType="FloatDataType" />
<opc:Field Name="DoubleDataType" DataType="DoubleDataType" />
<opc:Field Name="StringDataType" DataType="StringDataType" />
<opc:Field Name="DateTimeDataType" DataType="DateTimeDataType" />
<opc:Field Name="GuidDataType" DataType="GuidDataType" />
<opc:Field Name="ByteStringDataType" DataType="ByteStringDataType" />
<opc:Field Name="XmlElementDataType" DataType="XmlElementDataType" />
<opc:Field Name="NodeIdDataType" DataType="NodeIdDataType" />
<opc:Field Name="ExpandedNodeIdDataType" DataType="ExpandedNodeIdDataType" />
<opc:Field Name="QualifiedNameDataType" DataType="QualifiedNameDataType" />
<opc:Field Name="LocalizedTextDataType" DataType="LocalizedTextDataType" />
<opc:Field Name="StatusCodeDataType" DataType="StatusCodeDataType" />
<opc:Field Name="VariantDataType" DataType="VariantDataType" />
</opc:Fields>
</opc:DataType>
<opc:ObjectType SymbolicName="UserScalarValueObjectType" BaseType="TestDataObjectType">
<opc:Children>
<opc:Variable SymbolicName="BooleanValue" DataType="BooleanDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="SByteValue" DataType="SByteDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteValue" DataType="ByteDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int16Value" DataType="Int16DataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt16Value" DataType="UInt16DataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int32Value" DataType="Int32DataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt32Value" DataType="UInt32DataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int64Value" DataType="Int64DataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt64Value" DataType="UInt64DataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="FloatValue" DataType="FloatDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DoubleValue" DataType="DoubleDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StringValue" DataType="StringDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DateTimeValue" DataType="DateTimeDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="GuidValue" DataType="GuidDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteStringValue" DataType="ByteStringDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="XmlElementValue" DataType="XmlElementDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="NodeIdValue" DataType="NodeIdDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ExpandedNodeIdValue" DataType="ExpandedNodeIdDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="QualifiedNameValue" DataType="QualifiedNameDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="LocalizedTextValue" DataType="LocalizedTextDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StatusCodeValue" DataType="StatusCodeDataType" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VariantValue" DataType="VariantDataType" ModellingRule="Mandatory" />
</opc:Children>
</opc:ObjectType>
<opc:Method SymbolicName="UserScalarValue1MethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="BooleanIn" DataType="BooleanDataType" />
<opc:Argument Name="SByteIn" DataType="SByteDataType" />
<opc:Argument Name="ByteIn" DataType="ByteDataType" />
<opc:Argument Name="Int16In" DataType="Int16DataType" />
<opc:Argument Name="UInt16In" DataType="UInt16DataType" />
<opc:Argument Name="Int32In" DataType="Int32DataType" />
<opc:Argument Name="UInt32In" DataType="UInt32DataType" />
<opc:Argument Name="Int64In" DataType="Int64DataType" />
<opc:Argument Name="UInt64In" DataType="UInt64DataType" />
<opc:Argument Name="FloatIn" DataType="FloatDataType" />
<opc:Argument Name="DoubleIn" DataType="DoubleDataType" />
<opc:Argument Name="StringIn" DataType="StringDataType" />
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="BooleanOut" DataType="BooleanDataType" />
<opc:Argument Name="SByteOut" DataType="SByteDataType" />
<opc:Argument Name="ByteOut" DataType="ByteDataType" />
<opc:Argument Name="Int16Out" DataType="Int16DataType" />
<opc:Argument Name="UInt16Out" DataType="UInt16DataType" />
<opc:Argument Name="Int32Out" DataType="Int32DataType" />
<opc:Argument Name="UInt32Out" DataType="UInt32DataType" />
<opc:Argument Name="Int64Out" DataType="Int64DataType" />
<opc:Argument Name="UInt64Out" DataType="UInt64DataType" />
<opc:Argument Name="FloatOut" DataType="FloatDataType" />
<opc:Argument Name="DoubleOut" DataType="DoubleDataType" />
<opc:Argument Name="StringOut" DataType="StringDataType" />
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="UserScalarValue2MethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="DateTimeIn" DataType="DateTimeDataType" />
<opc:Argument Name="GuidIn" DataType="GuidDataType" />
<opc:Argument Name="ByteStringIn" DataType="ByteStringDataType" />
<opc:Argument Name="XmlElementIn" DataType="XmlElementDataType" />
<opc:Argument Name="NodeIdIn" DataType="NodeIdDataType" />
<opc:Argument Name="ExpandedNodeIdIn" DataType="ExpandedNodeIdDataType" />
<opc:Argument Name="QualifiedNameIn" DataType="QualifiedNameDataType" />
<opc:Argument Name="LocalizedTextIn" DataType="LocalizedTextDataType" />
<opc:Argument Name="StatusCodeIn" DataType="StatusCodeDataType" />
<opc:Argument Name="VariantIn" DataType="VariantDataType" />
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="DateTimeOut" DataType="DateTimeDataType" />
<opc:Argument Name="GuidOut" DataType="GuidDataType" />
<opc:Argument Name="ByteStringOut" DataType="ByteStringDataType" />
<opc:Argument Name="XmlElementOut" DataType="XmlElementDataType" />
<opc:Argument Name="NodeIdOut" DataType="NodeIdDataType" />
<opc:Argument Name="ExpandedNodeIdOut" DataType="ExpandedNodeIdDataType" />
<opc:Argument Name="QualifiedNameOut" DataType="QualifiedNameDataType" />
<opc:Argument Name="LocalizedTextOut" DataType="LocalizedTextDataType" />
<opc:Argument Name="StatusCodeOut" DataType="StatusCodeDataType" />
<opc:Argument Name="VariantOut" DataType="VariantDataType" />
</opc:OutputArguments>
</opc:Method>
<opc:DataType SymbolicName="UserArrayValueDataType" BaseType="ua:Structure">
<opc:Fields>
<opc:Field Name="BooleanDataType" DataType="BooleanDataType" ValueRank="Array" />
<opc:Field Name="SByteDataType" DataType="SByteDataType" ValueRank="Array" />
<opc:Field Name="ByteDataType" DataType="ByteDataType" ValueRank="Array" />
<opc:Field Name="Int16DataType" DataType="Int16DataType" ValueRank="Array" />
<opc:Field Name="UInt16DataType" DataType="UInt16DataType" ValueRank="Array" />
<opc:Field Name="Int32DataType" DataType="Int32DataType" ValueRank="Array" />
<opc:Field Name="UInt32DataType" DataType="UInt32DataType" ValueRank="Array" />
<opc:Field Name="Int64DataType" DataType="Int64DataType" ValueRank="Array" />
<opc:Field Name="UInt64DataType" DataType="UInt64DataType" ValueRank="Array" />
<opc:Field Name="FloatDataType" DataType="FloatDataType" ValueRank="Array" />
<opc:Field Name="DoubleDataType" DataType="DoubleDataType" ValueRank="Array" />
<opc:Field Name="StringDataType" DataType="StringDataType" ValueRank="Array" />
<opc:Field Name="DateTimeDataType" DataType="DateTimeDataType" ValueRank="Array" />
<opc:Field Name="GuidDataType" DataType="GuidDataType" ValueRank="Array" />
<opc:Field Name="ByteStringDataType" DataType="ByteStringDataType" ValueRank="Array" />
<opc:Field Name="XmlElementDataType" DataType="XmlElementDataType" ValueRank="Array" />
<opc:Field Name="NodeIdDataType" DataType="NodeIdDataType" ValueRank="Array" />
<opc:Field Name="ExpandedNodeIdDataType" DataType="ExpandedNodeIdDataType" ValueRank="Array" />
<opc:Field Name="QualifiedNameDataType" DataType="QualifiedNameDataType" ValueRank="Array" />
<opc:Field Name="LocalizedTextDataType" DataType="LocalizedTextDataType" ValueRank="Array" />
<opc:Field Name="StatusCodeDataType" DataType="StatusCodeDataType" ValueRank="Array" />
<opc:Field Name="VariantDataType" DataType="VariantDataType" ValueRank="Array" />
</opc:Fields>
</opc:DataType>
<opc:ObjectType SymbolicName="UserArrayValueObjectType" BaseType="TestDataObjectType">
<opc:Children>
<opc:Variable SymbolicName="BooleanValue" DataType="BooleanDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="SByteValue" DataType="SByteDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteValue" DataType="ByteDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int16Value" DataType="Int16DataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt16Value" DataType="UInt16DataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int32Value" DataType="Int32DataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt32Value" DataType="UInt32DataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="Int64Value" DataType="Int64DataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="UInt64Value" DataType="UInt64DataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="FloatValue" DataType="FloatDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DoubleValue" DataType="DoubleDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StringValue" DataType="StringDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="DateTimeValue" DataType="DateTimeDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="GuidValue" DataType="GuidDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ByteStringValue" DataType="ByteStringDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="XmlElementValue" DataType="XmlElementDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="NodeIdValue" DataType="NodeIdDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="ExpandedNodeIdValue" DataType="ExpandedNodeIdDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="QualifiedNameValue" DataType="QualifiedNameDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="LocalizedTextValue" DataType="LocalizedTextDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="StatusCodeValue" DataType="StatusCodeDataType" ValueRank="Array" ModellingRule="Mandatory" />
<opc:Variable SymbolicName="VariantValue" DataType="VariantDataType" ValueRank="Array" ModellingRule="Mandatory" />
</opc:Children>
</opc:ObjectType>
<opc:DataType SymbolicName="Vector" BaseType="ua:Structure">
<opc:Fields>
<opc:Field Name="X" DataType="ua:Double" />
<opc:Field Name="Y" DataType="ua:Double" />
<opc:Field Name="Z" DataType="ua:Double" />
</opc:Fields>
</opc:DataType>
<opc:VariableType SymbolicName="VectorVariableType" DataType="Vector" BaseType="ua:BaseDataVariableType">
<opc:Children>
<opc:Property SymbolicName="X" DataType="ua:Double" ModellingRule="Mandatory"/>
<opc:Property SymbolicName="Y" DataType="ua:Double" ModellingRule="Mandatory" />
<opc:Property SymbolicName="Z" DataType="ua:Double" ModellingRule="Mandatory" />
</opc:Children>
</opc:VariableType>
<opc:DataType SymbolicName="VectorUnion" BaseType="ua:Union" IsUnion="true">
<opc:Fields>
<opc:Field Name="X" DataType="ua:Double" />
<opc:Field Name="Y" DataType="ua:Double" />
<opc:Field Name="Z" DataType="ua:Double" />
</opc:Fields>
</opc:DataType>
<opc:DataType SymbolicName="VectorWithOptionalFields" BaseType="ua:Structure" >
<opc:Fields>
<opc:Field Name="X" DataType="ua:Double" IsOptional="true" />
<opc:Field Name="Y" DataType="ua:Double" IsOptional="true" />
<opc:Field Name="Z" DataType="ua:Double" IsOptional="true" />
</opc:Fields>
</opc:DataType>
<opc:DataType SymbolicName="MultipleVectors" BaseType="ua:Structure" >
<opc:Fields>
<opc:Field Name="Vector" DataType="Vector" />
<opc:Field Name="VectorUnion" DataType="VectorUnion" />
<opc:Field Name="VectorWithOptionalFields" DataType="VectorWithOptionalFields" />
<opc:Field Name="VectorArray" DataType="Vector" ValueRank="Array" />
<opc:Field Name="VectorUnionArray" DataType="VectorUnion" ValueRank="Array" />
<opc:Field Name="VectorWithOptionalFieldsArray" DataType="VectorWithOptionalFields" ValueRank="Array" />
</opc:Fields>
</opc:DataType>
<opc:DataType SymbolicName="MatrixValueDataType" BaseType="ua:Structure" >
<opc:Fields>
<opc:Field Name="BooleanMatrix" DataType="ua:Boolean" ValueRank="OneOrMoreDimensions" ArrayDimensions="0,0" />
<opc:Field Name="Int32Matrix" DataType="ua:Int32" ValueRank="OneOrMoreDimensions" ArrayDimensions="0,0" />
<opc:Field Name="StringMatrix" DataType="ua:String" ValueRank="OneOrMoreDimensions" ArrayDimensions="0,0" />
<opc:Field Name="NodeIdMatrix" DataType="ua:NodeId" ValueRank="OneOrMoreDimensions" ArrayDimensions="0,0" />
<opc:Field Name="VariantMatrix" DataType="ua:BaseDataType" ValueRank="OneOrMoreDimensions" ArrayDimensions="0,0" />
<opc:Field Name="ExtensionObjectMatrix" DataType="ua:Structure" ValueRank="OneOrMoreDimensions" ArrayDimensions="0,0" />
<opc:Field Name="VectorMatrix" DataType="Vector" ValueRank="OneOrMoreDimensions" ArrayDimensions="0,0" />
<opc:Field Name="AbstractVectorMatrix" DataType="Vector" ValueRank="OneOrMoreDimensions" ArrayDimensions="0,0" AllowSubTypes="true" />
<opc:Field Name="HeaterStatusMatrix" DataType="HeaterStatus" ValueRank="OneOrMoreDimensions" ArrayDimensions="0,0" />
</opc:Fields>
</opc:DataType>
<opc:DataType SymbolicName="HeaterStatus" BaseType="ua:Enumeration">
<opc:Fields>
<opc:Field Name="Off" Identifier="0" />
<opc:Field Name="Heating" Identifier="1" />
<opc:Field Name="Cooling" Identifier="2" />
</opc:Fields>
</opc:DataType>
<!--
<opc:DataType SymbolicName="SampleUnion" BaseType="ua:Union" IsUnion="true">
<opc:Fields>
<opc:Field Name="FieldA" DataType="ua:UInt32" />
<opc:Field Name="FieldB" DataType="ua:String" ValueRank="Array" />
<opc:Field Name="FieldC" DataType="ua:ByteString" />
<opc:Field Name="FieldD" DataType="WorkOrderType" />
</opc:Fields>
</opc:DataType>
<opc:DataType SymbolicName="SampleStructureWithOptionalFields" BaseType="ua:Structure">
<opc:Fields>
<opc:Field Name="FieldA" DataType="ua:UInt32" />
<opc:Field Name="FieldB" DataType="ua:String" ValueRank="Array" IsOptional="true" />
<opc:Field Name="FieldC" DataType="ua:ByteString" />
<opc:Field Name="FieldD" DataType="WorkOrderType" IsOptional="true" />
</opc:Fields>
</opc:DataType>
<opc:DataType SymbolicName="WorkOrderTypeWithDescription" BaseType="ua:Structure">
<opc:Fields>
<opc:Field Name="ID" DataType="ua:Guid" />
<opc:Field Name="AssetID" DataType="ua:String" />
<opc:Field Name="StartTime" DataType="ua:DateTime" />
<opc:Field Name="Description" DataType="ua:String" IsOptional="true" />
<opc:Field Name="StatusComments" DataType="WorkOrderStatusType" ValueRank="Array" />
</opc:Fields>
</opc:DataType>
-->
<opc:DataType SymbolicName="WorkOrderStatusType" BaseType="ua:Structure">
<opc:Fields>
<opc:Field Name="Actor" DataType="ua:String" />
<opc:Field Name="Timestamp" DataType="ua:DateTime" />
<opc:Field Name="Comment" DataType="ua:LocalizedText" />
</opc:Fields>
</opc:DataType>
<opc:DataType SymbolicName="WorkOrderType" BaseType="ua:Structure">
<opc:Fields>
<opc:Field Name="ID" DataType="ua:Guid" />
<opc:Field Name="AssetID" DataType="ua:String" />
<opc:Field Name="StartTime" DataType="ua:DateTime" />
<opc:Field Name="StatusComments" DataType="WorkOrderStatusType" ValueRank="Array" />
</opc:Fields>
</opc:DataType>
<opc:Method SymbolicName="UserArrayValue1MethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="BooleanIn" DataType="BooleanDataType" ValueRank="Array" />
<opc:Argument Name="SByteIn" DataType="SByteDataType" ValueRank="Array" />
<opc:Argument Name="ByteIn" DataType="ByteDataType" ValueRank="Array" />
<opc:Argument Name="Int16In" DataType="Int16DataType" ValueRank="Array" />
<opc:Argument Name="UInt16In" DataType="UInt16DataType" ValueRank="Array" />
<opc:Argument Name="Int32In" DataType="Int32DataType" ValueRank="Array" />
<opc:Argument Name="UInt32In" DataType="UInt32DataType" ValueRank="Array" />
<opc:Argument Name="Int64In" DataType="Int64DataType" ValueRank="Array" />
<opc:Argument Name="UInt64In" DataType="UInt64DataType" ValueRank="Array" />
<opc:Argument Name="FloatIn" DataType="FloatDataType" ValueRank="Array" />
<opc:Argument Name="DoubleIn" DataType="DoubleDataType" ValueRank="Array" />
<opc:Argument Name="StringIn" DataType="StringDataType" ValueRank="Array" />
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="BooleanOut" DataType="BooleanDataType" ValueRank="Array" />
<opc:Argument Name="SByteOut" DataType="SByteDataType" ValueRank="Array" />
<opc:Argument Name="ByteOut" DataType="ByteDataType" ValueRank="Array" />
<opc:Argument Name="Int16Out" DataType="Int16DataType" ValueRank="Array" />
<opc:Argument Name="UInt16Out" DataType="UInt16DataType" ValueRank="Array" />
<opc:Argument Name="Int32Out" DataType="Int32DataType" ValueRank="Array" />
<opc:Argument Name="UInt32Out" DataType="UInt32DataType" ValueRank="Array" />
<opc:Argument Name="Int64Out" DataType="Int64DataType" ValueRank="Array" />
<opc:Argument Name="UInt64Out" DataType="UInt64DataType" ValueRank="Array" />
<opc:Argument Name="FloatOut" DataType="FloatDataType" ValueRank="Array" />
<opc:Argument Name="DoubleOut" DataType="DoubleDataType" ValueRank="Array" />
<opc:Argument Name="StringOut" DataType="StringDataType" ValueRank="Array" />
</opc:OutputArguments>
</opc:Method>
<opc:Method SymbolicName="UserArrayValue2MethodType" ModellingRule="Mandatory">
<opc:InputArguments>
<opc:Argument Name="DateTimeIn" DataType="DateTimeDataType" ValueRank="Array" />
<opc:Argument Name="GuidIn" DataType="GuidDataType" ValueRank="Array" />
<opc:Argument Name="ByteStringIn" DataType="ByteStringDataType" ValueRank="Array" />
<opc:Argument Name="XmlElementIn" DataType="XmlElementDataType" ValueRank="Array" />
<opc:Argument Name="NodeIdIn" DataType="NodeIdDataType" ValueRank="Array" />
<opc:Argument Name="ExpandedNodeIdIn" DataType="ExpandedNodeIdDataType" ValueRank="Array" />
<opc:Argument Name="QualifiedNameIn" DataType="QualifiedNameDataType" ValueRank="Array" />
<opc:Argument Name="LocalizedTextIn" DataType="LocalizedTextDataType" ValueRank="Array" />
<opc:Argument Name="StatusCodeIn" DataType="StatusCodeDataType" ValueRank="Array" />
<opc:Argument Name="VariantIn" DataType="VariantDataType" ValueRank="Array" />
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="DateTimeOut" DataType="DateTimeDataType" ValueRank="Array" />
<opc:Argument Name="GuidOut" DataType="GuidDataType" ValueRank="Array" />
<opc:Argument Name="ByteStringOut" DataType="ByteStringDataType" ValueRank="Array" />
<opc:Argument Name="XmlElementOut" DataType="XmlElementDataType" ValueRank="Array" />
<opc:Argument Name="NodeIdOut" DataType="NodeIdDataType" ValueRank="Array" />
<opc:Argument Name="ExpandedNodeIdOut" DataType="ExpandedNodeIdDataType" ValueRank="Array" />
<opc:Argument Name="QualifiedNameOut" DataType="QualifiedNameDataType" ValueRank="Array" />
<opc:Argument Name="LocalizedTextOut" DataType="LocalizedTextDataType" ValueRank="Array" />
<opc:Argument Name="StatusCodeOut" DataType="StatusCodeDataType" ValueRank="Array" />
<opc:Argument Name="VariantOut" DataType="VariantDataType" ValueRank="Array" />
</opc:OutputArguments>
</opc:Method>
<opc:ObjectType SymbolicName="MethodTestType" BaseType="ua:FolderType">
<opc:Children>
<opc:Method SymbolicName="ScalarMethod1" TypeDefinition="ScalarValue1MethodType" ModellingRule="Mandatory" />
<opc:Method SymbolicName="ScalarMethod2" TypeDefinition="ScalarValue2MethodType" ModellingRule="Mandatory" />
<opc:Method SymbolicName="ScalarMethod3" TypeDefinition="ScalarValue3MethodType" ModellingRule="Mandatory" />
<opc:Method SymbolicName="ArrayMethod1" TypeDefinition="ArrayValue1MethodType" ModellingRule="Mandatory" />
<opc:Method SymbolicName="ArrayMethod2" TypeDefinition="ArrayValue2MethodType" ModellingRule="Mandatory" />
<opc:Method SymbolicName="ArrayMethod3" TypeDefinition="ArrayValue3MethodType" ModellingRule="Mandatory" />
<opc:Method SymbolicName="UserScalarMethod1" TypeDefinition="UserScalarValue1MethodType" ModellingRule="Mandatory" />
<opc:Method SymbolicName="UserScalarMethod2" TypeDefinition="UserScalarValue2MethodType" ModellingRule="Mandatory" />
<opc:Method SymbolicName="UserArrayMethod1" TypeDefinition="UserArrayValue1MethodType" ModellingRule="Mandatory" />
<opc:Method SymbolicName="UserArrayMethod2" TypeDefinition="UserArrayValue2MethodType" ModellingRule="Mandatory" />
</opc:Children>
</opc:ObjectType>
<opc:ObjectType SymbolicName="TestSystemConditionType" BaseType="ua:ConditionType">
<opc:Children>
<opc:Property SymbolicName="MonitoredNodeCount" DataType="ua:Int32" ModellingRule="Mandatory" />
</opc:Children>
</opc:ObjectType>
<opc:Object SymbolicName="Data" TypeDefinition="ua:FolderType" SupportsEvents="true">
<opc:Children>
<opc:Object SymbolicName="Static" TypeDefinition="ua:FolderType" SupportsEvents="true">
<opc:Children>
<opc:Object SymbolicName="Scalar" TypeDefinition="ScalarValueObjectType" ModellingRule="Mandatory"/>
<opc:Object SymbolicName="Structure" TypeDefinition="StructureValueObjectType" ModellingRule="Mandatory"/>
<opc:Object SymbolicName="Array" TypeDefinition="ArrayValueObjectType" ModellingRule="Mandatory"/>
<opc:Object SymbolicName="UserScalar" TypeDefinition="UserScalarValueObjectType" ModellingRule="Mandatory"/>
<opc:Object SymbolicName="UserArray" TypeDefinition="UserArrayValueObjectType" ModellingRule="Mandatory"/>
<opc:Object SymbolicName="AnalogScalar" TypeDefinition="AnalogScalarValueObjectType" ModellingRule="Mandatory"/>
<opc:Object SymbolicName="AnalogArray" TypeDefinition="AnalogArrayValueObjectType" ModellingRule="Mandatory"/>
<opc:Object SymbolicName="MethodTest" TypeDefinition="MethodTestType" ModellingRule="Mandatory"/>
</opc:Children>
<opc:References>
<opc:Reference>
<opc:ReferenceType>ua:HasEventSource</opc:ReferenceType>
<opc:TargetId>Data_Static_Scalar</opc:TargetId>
</opc:Reference>
<opc:Reference>
<opc:ReferenceType>ua:HasEventSource</opc:ReferenceType>
<opc:TargetId>Data_Static_Array</opc:TargetId>
</opc:Reference>
</opc:References>
</opc:Object>
<opc:Object SymbolicName="Dynamic" TypeDefinition="ua:FolderType" SupportsEvents="true">
<opc:Children>
<opc:Object SymbolicName="Scalar" TypeDefinition="ScalarValueObjectType" ModellingRule="Mandatory">
<opc:Children>
<opc:Property SymbolicName="SimulationActive">
<opc:DefaultValue>
<uax:Boolean>true</uax:Boolean>
</opc:DefaultValue>
</opc:Property>
</opc:Children>
</opc:Object>
<opc:Object SymbolicName="Structure" TypeDefinition="StructureValueObjectType" ModellingRule="Mandatory">
<opc:Children>
<opc:Property SymbolicName="SimulationActive">
<opc:DefaultValue>
<uax:Boolean>true</uax:Boolean>
</opc:DefaultValue>
</opc:Property>
</opc:Children>
</opc:Object>
<opc:Object SymbolicName="Array" TypeDefinition="ArrayValueObjectType" ModellingRule="Mandatory">
<opc:Children>
<opc:Property SymbolicName="SimulationActive">
<opc:DefaultValue>
<uax:Boolean>true</uax:Boolean>
</opc:DefaultValue>
</opc:Property>
</opc:Children>
</opc:Object>
<opc:Object SymbolicName="UserScalar" TypeDefinition="UserScalarValueObjectType" ModellingRule="Mandatory">
<opc:Children>
<opc:Property SymbolicName="SimulationActive">
<opc:DefaultValue>
<uax:Boolean>true</uax:Boolean>
</opc:DefaultValue>
</opc:Property>
</opc:Children>
</opc:Object>
<opc:Object SymbolicName="UserArray" TypeDefinition="UserArrayValueObjectType" ModellingRule="Mandatory">
<opc:Children>
<opc:Property SymbolicName="SimulationActive">
<opc:DefaultValue>
<uax:Boolean>true</uax:Boolean>
</opc:DefaultValue>
</opc:Property>
</opc:Children>
</opc:Object>
<opc:Object SymbolicName="AnalogScalar" TypeDefinition="AnalogScalarValueObjectType" ModellingRule="Mandatory">
<opc:Children>
<opc:Property SymbolicName="SimulationActive">
<opc:DefaultValue>
<uax:Boolean>true</uax:Boolean>
</opc:DefaultValue>
</opc:Property>
</opc:Children>
</opc:Object>
<opc:Object SymbolicName="AnalogArray" TypeDefinition="AnalogArrayValueObjectType" ModellingRule="Mandatory">
<opc:Children>
<opc:Property SymbolicName="SimulationActive">
<opc:DefaultValue>
<uax:Boolean>true</uax:Boolean>
</opc:DefaultValue>
</opc:Property>
</opc:Children>
</opc:Object>
</opc:Children>
<opc:References>
<opc:Reference>
<opc:ReferenceType>ua:HasEventSource</opc:ReferenceType>
<opc:TargetId>Data_Dynamic_Scalar</opc:TargetId>
</opc:Reference>
<opc:Reference>
<opc:ReferenceType>ua:HasEventSource</opc:ReferenceType>
<opc:TargetId>Data_Dynamic_Array</opc:TargetId>
</opc:Reference>
</opc:References>
</opc:Object>
<opc:Object SymbolicName="Conditions" TypeDefinition="ua:FolderType" SupportsEvents="true">
<opc:Children>
<opc:Object SymbolicName="SystemStatus" TypeDefinition="TestSystemConditionType" ModellingRule="Mandatory" />
</opc:Children>
<opc:References>
<opc:Reference>
<opc:ReferenceType>ua:HasEventSource</opc:ReferenceType>
<opc:TargetId>Data_Conditions_SystemStatus</opc:TargetId>
</opc:Reference>
</opc:References>
</opc:Object>
</opc:Children>
<opc:References>
<opc:Reference IsInverse="true">
<opc:ReferenceType>ua:Organizes</opc:ReferenceType>
<opc:TargetId>ua:ObjectsFolder</opc:TargetId>
</opc:Reference>
<opc:Reference IsInverse="true">
<opc:ReferenceType>ua:HasNotifier</opc:ReferenceType>
<opc:TargetId>ua:Server</opc:TargetId>
</opc:Reference>
<opc:Reference>
<opc:ReferenceType>ua:HasNotifier</opc:ReferenceType>
<opc:TargetId>Data_Static</opc:TargetId>
</opc:Reference>
<opc:Reference>
<opc:ReferenceType>ua:HasNotifier</opc:ReferenceType>
<opc:TargetId>Data_Dynamic</opc:TargetId>
</opc:Reference>
<!--
<opc:Reference>
<opc:ReferenceType>ua:HasNotifier</opc:ReferenceType>
<opc:TargetId>Data_Conditions</opc:TargetId>
</opc:Reference>
-->
</opc:References>
</opc:Object>
</opc:ModelDesign>