You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by ld...@apache.org on 2024/08/19 21:50:20 UTC

(plc4x) 01/02: Include wider pool of OPC-UA types in mspec.

This is an automated email from the ASF dual-hosted git repository.

ldywicki pushed a commit to branch opc-ua-events
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 2e86d87e66192b4aac2d30f53423b48e94fa14fd
Author: Łukasz Dywicki <lu...@code-house.org>
AuthorDate: Mon Aug 5 18:01:46 2024 +0200

    Include wider pool of OPC-UA types in mspec.
    
    Signed-off-by: Łukasz Dywicki <lu...@code-house.org>
---
 .../readwrite/UserIdentityTokenDefinition.java     | 166 ----
 .../opcua/protocol/OpcuaSubscriptionHandle.java    |  25 +-
 .../generated/protocols/opcua/opc-manual.mspec     | 983 +++++++++++++++++----
 protocols/opcua/src/main/xslt/opc-common.xsl       |  15 +-
 protocols/opcua/src/main/xslt/opc-manual.xsl       |  28 +-
 5 files changed, 839 insertions(+), 378 deletions(-)

diff --git a/plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/UserIdentityTokenDefinition.java b/plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/UserIdentityTokenDefinition.java
deleted file mode 100644
index 40c68160ba..0000000000
--- a/plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/UserIdentityTokenDefinition.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.plc4x.java.opcua.readwrite;
-
-import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
-import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
-import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
-import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
-import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
-
-import java.time.*;
-import java.util.*;
-import org.apache.plc4x.java.api.exceptions.*;
-import org.apache.plc4x.java.api.value.*;
-import org.apache.plc4x.java.spi.codegen.*;
-import org.apache.plc4x.java.spi.codegen.fields.*;
-import org.apache.plc4x.java.spi.codegen.io.*;
-import org.apache.plc4x.java.spi.generation.*;
-
-// Code generated by code-generation. DO NOT EDIT.
-
-public abstract class UserIdentityTokenDefinition implements Message {
-
-  // Abstract accessors for discriminator values.
-  public abstract String getIdentifier();
-
-  public UserIdentityTokenDefinition() {
-    super();
-  }
-
-  protected abstract void serializeUserIdentityTokenDefinitionChild(WriteBuffer writeBuffer)
-      throws SerializationException;
-
-  public void serialize(WriteBuffer writeBuffer) throws SerializationException {
-    PositionAware positionAware = writeBuffer;
-    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
-    writeBuffer.pushContext("UserIdentityTokenDefinition");
-
-    // Switch field (Serialize the sub-type)
-    serializeUserIdentityTokenDefinitionChild(writeBuffer);
-
-    writeBuffer.popContext("UserIdentityTokenDefinition");
-  }
-
-  @Override
-  public int getLengthInBytes() {
-    return (int) Math.ceil((float) getLengthInBits() / 8.0);
-  }
-
-  @Override
-  public int getLengthInBits() {
-    int lengthInBits = 0;
-    UserIdentityTokenDefinition _value = this;
-    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
-
-    // Length of sub-type elements will be added by sub-type...
-
-    return lengthInBits;
-  }
-
-  public static UserIdentityTokenDefinition staticParse(ReadBuffer readBuffer, Object... args)
-      throws ParseException {
-    PositionAware positionAware = readBuffer;
-    if ((args == null) || (args.length != 1)) {
-      throw new PlcRuntimeException(
-          "Wrong number of arguments, expected 1, but got " + args.length);
-    }
-    String identifier;
-    if (args[0] instanceof String) {
-      identifier = (String) args[0];
-    } else if (args[0] instanceof String) {
-      identifier = String.valueOf((String) args[0]);
-    } else {
-      throw new PlcRuntimeException(
-          "Argument 0 expected to be of type String or a string which is parseable but was "
-              + args[0].getClass().getName());
-    }
-    return staticParse(readBuffer, identifier);
-  }
-
-  public static UserIdentityTokenDefinition staticParse(ReadBuffer readBuffer, String identifier)
-      throws ParseException {
-    readBuffer.pullContext("UserIdentityTokenDefinition");
-    PositionAware positionAware = readBuffer;
-    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
-
-    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-    UserIdentityTokenDefinitionBuilder builder = null;
-    if (EvaluationHelper.equals(identifier, (String) "anonymous")) {
-      builder =
-          AnonymousIdentityToken.staticParseUserIdentityTokenDefinitionBuilder(
-              readBuffer, identifier);
-    } else if (EvaluationHelper.equals(identifier, (String) "username")) {
-      builder =
-          UserNameIdentityToken.staticParseUserIdentityTokenDefinitionBuilder(
-              readBuffer, identifier);
-    } else if (EvaluationHelper.equals(identifier, (String) "certificate")) {
-      builder =
-          X509IdentityToken.staticParseUserIdentityTokenDefinitionBuilder(readBuffer, identifier);
-    } else if (EvaluationHelper.equals(identifier, (String) "identity")) {
-      builder =
-          IssuedIdentityToken.staticParseUserIdentityTokenDefinitionBuilder(readBuffer, identifier);
-    }
-    if (builder == null) {
-      throw new ParseException(
-          "Unsupported case for discriminated type"
-              + " parameters ["
-              + "identifier="
-              + identifier
-              + "]");
-    }
-
-    readBuffer.closeContext("UserIdentityTokenDefinition");
-    // Create the instance
-    UserIdentityTokenDefinition _userIdentityTokenDefinition = builder.build();
-    return _userIdentityTokenDefinition;
-  }
-
-  public interface UserIdentityTokenDefinitionBuilder {
-    UserIdentityTokenDefinition build();
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (!(o instanceof UserIdentityTokenDefinition)) {
-      return false;
-    }
-    UserIdentityTokenDefinition that = (UserIdentityTokenDefinition) o;
-    return true;
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash();
-  }
-
-  @Override
-  public String toString() {
-    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
-    try {
-      writeBufferBoxBased.writeSerializable(this);
-    } catch (SerializationException e) {
-      throw new RuntimeException(e);
-    }
-    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
-  }
-}
diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaSubscriptionHandle.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaSubscriptionHandle.java
index a68a04fb4d..050fb624c4 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaSubscriptionHandle.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaSubscriptionHandle.java
@@ -27,6 +27,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionEvent;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
 import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
+import org.apache.plc4x.java.api.types.PlcSubscriptionType;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.opcua.context.Conversation;
 import org.apache.plc4x.java.opcua.tag.OpcuaTag;
@@ -111,12 +112,29 @@ public class OpcuaSubscriptionHandle extends DefaultPlcSubscriptionHandle {
                     monitoringMode = MonitoringMode.monitoringModeReporting;
             }
 
-            long clientHandle = clientHandles.getAndIncrement();
+            ExtensionObject eventFilter = OpcuaProtocolLogic.NULL_EXTENSION_OBJECT;
+            if (tagDefaultPlcSubscription.getPlcSubscriptionType() == PlcSubscriptionType.EVENT) {
+                FilterOperand filterOperand = new FilterOperand();
+                EventFilter eventFilter1 = new EventFilter(
+                    0,
+                    Arrays.asList(filterOperand),
+                    new NullExtension()
+                );
+                ExpandedNodeId expandedNodeId = new ExpandedNodeId(false, false,
+                    new NodeIdFourByte((short) 0, Integer.parseInt(eventFilter.getIdentifier())),
+                    null, null
+                );
+                eventFilter = new ExtensionObject(expandedNodeId,
+                    new ExtensionObjectEncodingMask(false, false, true),
+                    eventFilter1
+                );
+            }
 
+            long clientHandle = clientHandles.getAndIncrement();
             MonitoringParameters parameters = new MonitoringParameters(
                 clientHandle,
                 (double) cycleTime,     // sampling interval
-                OpcuaProtocolLogic.NULL_EXTENSION_OBJECT,       // filter, null means use default
+                eventFilter,       // filter, null means use default
                 1L,   // queue size
                 true        // discard oldest
             );
@@ -204,6 +222,9 @@ public class OpcuaSubscriptionHandle extends DefaultPlcSubscriptionHandle {
                                 .filter(extensionObjectDefinition -> extensionObjectDefinition instanceof MonitoredItemNotification)
                                 .map(extensionObjectDefinition -> (MonitoredItemNotification) extensionObjectDefinition)
                                 .toArray(MonitoredItemNotification[]::new));
+                        } else if (notification instanceof NotificationData) {
+                            NotificationData data = (NotificationData) notification;
+
                         } else {
                             LOGGER.warn("Unsupported Notification type");
                         }
diff --git a/protocols/opcua/src/main/generated/protocols/opcua/opc-manual.mspec b/protocols/opcua/src/main/generated/protocols/opcua/opc-manual.mspec
index 91b6d22c00..f07636c78f 100644
--- a/protocols/opcua/src/main/generated/protocols/opcua/opc-manual.mspec
+++ b/protocols/opcua/src/main/generated/protocols/opcua/opc-manual.mspec
@@ -191,7 +191,7 @@
             
         ]
         ['"16315"' AdditionalParametersType
-            [simple int 32 noOfParameters]
+            [implicit int 32 noOfParameters 'COUNT(parameters)']
             
             [array ExtensionObjectDefinition('"14535"') parameters count 'noOfParameters']
                     
@@ -272,13 +272,13 @@
         ]
         ['"12556"' TrustListDataType
             [simple uint 32 specifiedLists]
-            [simple int 32 noOfTrustedCertificates]
+            [implicit int 32 noOfTrustedCertificates 'COUNT(trustedCertificates)']
             [array PascalByteString trustedCertificates count 'noOfTrustedCertificates']
-                    [simple int 32 noOfTrustedCrls]
+                    [implicit int 32 noOfTrustedCrls 'COUNT(trustedCrls)']
             [array PascalByteString trustedCrls count 'noOfTrustedCrls']
-                    [simple int 32 noOfIssuerCertificates]
+                    [implicit int 32 noOfIssuerCertificates 'COUNT(issuerCertificates)']
             [array PascalByteString issuerCertificates count 'noOfIssuerCertificates']
-                    [simple int 32 noOfIssuerCrls]
+                    [implicit int 32 noOfIssuerCrls 'COUNT(issuerCrls)']
             [array PascalByteString issuerCrls count 'noOfIssuerCrls']
                     
         ]
@@ -289,13 +289,13 @@
             
         ]
         ['"15536"' DataTypeSchemaHeader
-            [simple int 32 noOfNamespaces]
+            [implicit int 32 noOfNamespaces 'COUNT(namespaces)']
             [array PascalString namespaces count 'noOfNamespaces']
-                    [simple int 32 noOfStructureDataTypes]
+                    [implicit int 32 noOfStructureDataTypes 'COUNT(structureDataTypes)']
             [array DataTypeDescription('"14525"') structureDataTypes count 'noOfStructureDataTypes']
-                    [simple int 32 noOfEnumDataTypes]
+                    [implicit int 32 noOfEnumDataTypes 'COUNT(enumDataTypes)']
             [array DataTypeDescription('"14525"') enumDataTypes count 'noOfEnumDataTypes']
-                    [simple int 32 noOfSimpleDataTypes]
+                    [implicit int 32 noOfSimpleDataTypes 'COUNT(simpleDataTypes)']
             [array DataTypeDescription('"14525"') simpleDataTypes count 'noOfSimpleDataTypes']
                     
         ]
@@ -303,6 +303,42 @@
             [simple NodeId dataTypeId]
             [simple QualifiedName name]
             
+        ]
+        ['"15489"' StructureDescription
+            [simple NodeId dataTypeId]
+            [simple QualifiedName name]
+            [simple DataTypeDefinition structureDefinition]
+            
+        ]
+        ['"15490"' EnumDescription
+            [simple NodeId dataTypeId]
+            [simple QualifiedName name]
+            [simple DataTypeDefinition enumDefinition]
+            [simple uint 8 builtInType]
+            
+        ]
+        ['"15007"' SimpleTypeDescription
+            [simple NodeId dataTypeId]
+            [simple QualifiedName name]
+            [simple NodeId baseDataType]
+            [simple uint 8 builtInType]
+            
+        ]
+        ['"15008"' UABinaryFileDataType
+            [implicit int 32 noOfNamespaces 'COUNT(namespaces)']
+            [array PascalString namespaces count 'noOfNamespaces']
+                    [implicit int 32 noOfStructureDataTypes 'COUNT(structureDataTypes)']
+            [array DataTypeDescription('"14525"') structureDataTypes count 'noOfStructureDataTypes']
+                    [implicit int 32 noOfEnumDataTypes 'COUNT(enumDataTypes)']
+            [array DataTypeDescription('"14525"') enumDataTypes count 'noOfEnumDataTypes']
+                    [implicit int 32 noOfSimpleDataTypes 'COUNT(simpleDataTypes)']
+            [array DataTypeDescription('"14525"') simpleDataTypes count 'noOfSimpleDataTypes']
+                    [simple PascalString schemaLocation]
+            [implicit int 32 noOfFileHeader 'COUNT(fileHeader)']
+            
+            [array ExtensionObjectDefinition('"14535"') fileHeader count 'noOfFileHeader']
+                    [simple Variant body]
+            
         ]
         ['"24107"' PortableQualifiedName
             [simple PascalString namespaceUri]
@@ -313,6 +349,25 @@
             [simple uint 32 numerator]
             [simple uint 32 denominator]
             
+        ]
+        ['"14525"' DataSetMetaDataType
+            [implicit int 32 noOfNamespaces 'COUNT(namespaces)']
+            [array PascalString namespaces count 'noOfNamespaces']
+                    [implicit int 32 noOfStructureDataTypes 'COUNT(structureDataTypes)']
+            [array DataTypeDescription('"14525"') structureDataTypes count 'noOfStructureDataTypes']
+                    [implicit int 32 noOfEnumDataTypes 'COUNT(enumDataTypes)']
+            [array DataTypeDescription('"14525"') enumDataTypes count 'noOfEnumDataTypes']
+                    [implicit int 32 noOfSimpleDataTypes 'COUNT(simpleDataTypes)']
+            [array DataTypeDescription('"14525"') simpleDataTypes count 'noOfSimpleDataTypes']
+                    [simple PascalString name]
+            [simple LocalizedText description]
+            [implicit int 32 noOfFields 'COUNT(fields)']
+            
+            [array ExtensionObjectDefinition('"14526"') fields count 'noOfFields']
+                    [simple GuidValue dataSetClassId]
+            
+            [simple ExtensionObjectDefinition('"14595"') configurationVersion]
+            
         ]
         ['"14526"' FieldMetaData
             [simple PascalString name]
@@ -321,11 +376,11 @@
             [simple uint 8 builtInType]
             [simple NodeId dataType]
             [simple int 32 valueRank]
-            [simple int 32 noOfArrayDimensions]
+            [implicit int 32 noOfArrayDimensions 'COUNT(arrayDimensions)']
             [array uint 32 arrayDimensions count 'noOfArrayDimensions']
                     [simple uint 32 maxStringLength]
             [simple GuidValue dataSetFieldId]
-            [simple int 32 noOfProperties]
+            [implicit int 32 noOfProperties 'COUNT(properties)']
             
             [array ExtensionObjectDefinition('"14535"') properties count 'noOfProperties']
                     
@@ -346,9 +401,28 @@
             [simple float 64 deadbandValue]
             [simple PascalString indexRange]
             [simple Variant substituteValue]
-            [simple int 32 noOfMetaDataProperties]
+            [implicit int 32 noOfMetaDataProperties 'COUNT(metaDataProperties)']
             [array QualifiedName metaDataProperties count 'noOfMetaDataProperties']
                     
+        ]
+        ['"15583"' PublishedDataItemsDataType
+            [implicit int 32 noOfPublishedData 'COUNT(publishedData)']
+            
+            [array ExtensionObjectDefinition('"14275"') publishedData count 'noOfPublishedData']
+                    
+        ]
+        ['"15584"' PublishedEventsDataType
+            [simple NodeId eventNotifier]
+            [implicit int 32 noOfSelectedFields 'COUNT(selectedFields)']
+            [array FilterOperand('"589"') selectedFields count 'noOfSelectedFields']
+                    
+            [simple ExtensionObjectDefinition('"588"') filter]
+            
+        ]
+        ['"25271"' PublishedDataSetCustomSourceDataType
+            [reserved uint 7 '0x00']
+            [simple bit cyclicDataSet]
+            
         ]
         ['"15599"' DataSetWriterDataType
             [simple PascalString name]
@@ -358,7 +432,7 @@
             [simple DataSetFieldContentMask dataSetFieldContentMask]
             [simple uint 32 keyFrameCount]
             [simple PascalString dataSetName]
-            [simple int 32 noOfDataSetWriterProperties]
+            [implicit int 32 noOfDataSetWriterProperties 'COUNT(dataSetWriterProperties)']
             
             [array ExtensionObjectDefinition('"14535"') dataSetWriterProperties count 'noOfDataSetWriterProperties']
                     [simple ExtensionObject('true') transportSettings]
@@ -377,13 +451,40 @@
             [simple bit enabled]
             [simple MessageSecurityMode securityMode]
             [simple PascalString securityGroupId]
-            [simple int 32 noOfSecurityKeyServices]
+            [implicit int 32 noOfSecurityKeyServices 'COUNT(securityKeyServices)']
+            
+            [array ExtensionObjectDefinition('"314"') securityKeyServices count 'noOfSecurityKeyServices']
+                    [simple uint 32 maxNetworkMessageSize]
+            [implicit int 32 noOfGroupProperties 'COUNT(groupProperties)']
+            
+            [array ExtensionObjectDefinition('"14535"') groupProperties count 'noOfGroupProperties']
+                    
+        ]
+        ['"15482"' WriterGroupDataType
+            [simple PascalString name]
+            [reserved uint 7 '0x00']
+            [simple bit enabled]
+            [simple MessageSecurityMode securityMode]
+            [simple PascalString securityGroupId]
+            [implicit int 32 noOfSecurityKeyServices 'COUNT(securityKeyServices)']
             
             [array ExtensionObjectDefinition('"314"') securityKeyServices count 'noOfSecurityKeyServices']
                     [simple uint 32 maxNetworkMessageSize]
-            [simple int 32 noOfGroupProperties]
+            [implicit int 32 noOfGroupProperties 'COUNT(groupProperties)']
             
             [array ExtensionObjectDefinition('"14535"') groupProperties count 'noOfGroupProperties']
+                    [simple uint 16 writerGroupId]
+            [simple float 64 publishingInterval]
+            [simple float 64 keepAliveTime]
+            [simple uint 8 priority]
+            [implicit int 32 noOfLocaleIds 'COUNT(localeIds)']
+            [array PascalString localeIds count 'noOfLocaleIds']
+                    [simple PascalString headerLayoutUri]
+            [simple ExtensionObject('true') transportSettings]
+            [simple ExtensionObject('true') messageSettings]
+            [implicit int 32 noOfDataSetWriters 'COUNT(dataSetWriters)']
+            
+            [array ExtensionObjectDefinition('"15599"') dataSetWriters count 'noOfDataSetWriters']
                     
         ]
         ['"15613"' WriterGroupTransportDataType
@@ -399,13 +500,13 @@
             [simple Variant publisherId]
             [simple PascalString transportProfileUri]
             [simple ExtensionObject('true') address]
-            [simple int 32 noOfConnectionProperties]
+            [implicit int 32 noOfConnectionProperties 'COUNT(connectionProperties)']
             
             [array ExtensionObjectDefinition('"14535"') connectionProperties count 'noOfConnectionProperties']
                     [simple ExtensionObject('true') transportSettings]
-            [simple int 32 noOfWriterGroups]
+            [implicit int 32 noOfWriterGroups 'COUNT(writerGroups)']
             [array PubSubGroupDataType('"15609"') writerGroups count 'noOfWriterGroups']
-                    [simple int 32 noOfReaderGroups]
+                    [implicit int 32 noOfReaderGroups 'COUNT(readerGroups)']
             [array PubSubGroupDataType('"15609"') readerGroups count 'noOfReaderGroups']
                     
         ]
@@ -415,6 +516,31 @@
         ['"15504"' NetworkAddressDataType
             [simple PascalString networkInterface]
             
+        ]
+        ['"15512"' NetworkAddressUrlDataType
+            [simple PascalString networkInterface]
+            [simple PascalString url]
+            
+        ]
+        ['"15522"' ReaderGroupDataType
+            [simple PascalString name]
+            [reserved uint 7 '0x00']
+            [simple bit enabled]
+            [simple MessageSecurityMode securityMode]
+            [simple PascalString securityGroupId]
+            [implicit int 32 noOfSecurityKeyServices 'COUNT(securityKeyServices)']
+            
+            [array ExtensionObjectDefinition('"314"') securityKeyServices count 'noOfSecurityKeyServices']
+                    [simple uint 32 maxNetworkMessageSize]
+            [implicit int 32 noOfGroupProperties 'COUNT(groupProperties)']
+            
+            [array ExtensionObjectDefinition('"14535"') groupProperties count 'noOfGroupProperties']
+                    [simple ExtensionObject('true') transportSettings]
+            [simple ExtensionObject('true') messageSettings]
+            [implicit int 32 noOfDataSetReaders 'COUNT(dataSetReaders)']
+            
+            [array ExtensionObjectDefinition('"15625"') dataSetReaders count 'noOfDataSetReaders']
+                    
         ]
         ['"15623"' ReaderGroupTransportDataType
             
@@ -430,6 +556,12 @@
         ]
         ['"15632"' SubscribedDataSetDataType
             
+        ]
+        ['"15633"' TargetVariablesDataType
+            [implicit int 32 noOfTargetVariables 'COUNT(targetVariables)']
+            
+            [array ExtensionObjectDefinition('"14746"') targetVariables count 'noOfTargetVariables']
+                    
         ]
         ['"14746"' FieldTargetDataType
             [simple GuidValue dataSetFieldId]
@@ -440,38 +572,57 @@
             [simple OverrideValueHandling overrideValueHandling]
             [simple Variant overrideValue]
             
+        ]
+        ['"15637"' SubscribedDataSetMirrorDataType
+            [simple PascalString parentNodeName]
+            [implicit int 32 noOfRolePermissions 'COUNT(rolePermissions)']
+            
+            [array ExtensionObjectDefinition('"98"') rolePermissions count 'noOfRolePermissions']
+                    
         ]
         ['"15532"' PubSubConfigurationDataType
-            [simple int 32 noOfPublishedDataSets]
+            [implicit int 32 noOfPublishedDataSets 'COUNT(publishedDataSets)']
             
             [array ExtensionObjectDefinition('"15580"') publishedDataSets count 'noOfPublishedDataSets']
-                    [simple int 32 noOfConnections]
+                    [implicit int 32 noOfConnections 'COUNT(connections)']
             
             [array ExtensionObjectDefinition('"15619"') connections count 'noOfConnections']
                     [reserved uint 7 '0x00']
             [simple bit enabled]
             
+        ]
+        ['"23601"' StandaloneSubscribedDataSetRefDataType
+            [simple PascalString dataSetName]
+            
+        ]
+        ['"23602"' StandaloneSubscribedDataSetDataType
+            [simple PascalString name]
+            [implicit int 32 noOfDataSetFolder 'COUNT(dataSetFolder)']
+            [array PascalString dataSetFolder count 'noOfDataSetFolder']
+                    [simple DataTypeSchemaHeader dataSetMetaData]
+            [simple ExtensionObject('true') subscribedDataSet]
+            
         ]
         ['"23603"' SecurityGroupDataType
             [simple PascalString name]
-            [simple int 32 noOfSecurityGroupFolder]
+            [implicit int 32 noOfSecurityGroupFolder 'COUNT(securityGroupFolder)']
             [array PascalString securityGroupFolder count 'noOfSecurityGroupFolder']
                     [simple float 64 keyLifetime]
             [simple PascalString securityPolicyUri]
             [simple uint 32 maxFutureKeyCount]
             [simple uint 32 maxPastKeyCount]
             [simple PascalString securityGroupId]
-            [simple int 32 noOfRolePermissions]
+            [implicit int 32 noOfRolePermissions 'COUNT(rolePermissions)']
             
             [array ExtensionObjectDefinition('"98"') rolePermissions count 'noOfRolePermissions']
-                    [simple int 32 noOfGroupProperties]
+                    [implicit int 32 noOfGroupProperties 'COUNT(groupProperties)']
             
             [array ExtensionObjectDefinition('"14535"') groupProperties count 'noOfGroupProperties']
                     
         ]
         ['"25272"' PubSubKeyPushTargetDataType
             [simple PascalString applicationUri]
-            [simple int 32 noOfPushTargetFolder]
+            [implicit int 32 noOfPushTargetFolder 'COUNT(pushTargetFolder)']
             [array PascalString pushTargetFolder count 'noOfPushTargetFolder']
                     [simple PascalString endpointUrl]
             [simple PascalString securityPolicyUri]
@@ -479,15 +630,164 @@
             [simple ExtensionObjectDefinition('"306"') userTokenType]
             [simple uint 16 requestedKeyCount]
             [simple float 64 retryInterval]
-            [simple int 32 noOfPushTargetProperties]
+            [implicit int 32 noOfPushTargetProperties 'COUNT(pushTargetProperties)']
             
             [array ExtensionObjectDefinition('"14535"') pushTargetProperties count 'noOfPushTargetProperties']
-                    [simple int 32 noOfSecurityGroups]
+                    [implicit int 32 noOfSecurityGroups 'COUNT(securityGroups)']
             [array PascalString securityGroups count 'noOfSecurityGroups']
                     
+        ]
+        ['"23604"' PubSubConfiguration2DataType
+            [implicit int 32 noOfPublishedDataSets 'COUNT(publishedDataSets)']
+            
+            [array ExtensionObjectDefinition('"15580"') publishedDataSets count 'noOfPublishedDataSets']
+                    [implicit int 32 noOfConnections 'COUNT(connections)']
+            
+            [array ExtensionObjectDefinition('"15619"') connections count 'noOfConnections']
+                    [reserved uint 7 '0x00']
+            [simple bit enabled]
+            [implicit int 32 noOfSubscribedDataSets 'COUNT(subscribedDataSets)']
+            [array SubscribedDataSetDataType('"15630"') subscribedDataSets count 'noOfSubscribedDataSets']
+                    [implicit int 32 noOfDataSetClasses 'COUNT(dataSetClasses)']
+            [array DataTypeSchemaHeader('"15534"') dataSetClasses count 'noOfDataSetClasses']
+                    [implicit int 32 noOfDefaultSecurityKeyServices 'COUNT(defaultSecurityKeyServices)']
+            
+            [array ExtensionObjectDefinition('"314"') defaultSecurityKeyServices count 'noOfDefaultSecurityKeyServices']
+                    [implicit int 32 noOfSecurityGroups 'COUNT(securityGroups)']
+            
+            [array ExtensionObjectDefinition('"23603"') securityGroups count 'noOfSecurityGroups']
+                    [implicit int 32 noOfPubSubKeyPushTargets 'COUNT(pubSubKeyPushTargets)']
+            
+            [array ExtensionObjectDefinition('"25272"') pubSubKeyPushTargets count 'noOfPubSubKeyPushTargets']
+                    [simple uint 32 configurationVersion]
+            [implicit int 32 noOfConfigurationProperties 'COUNT(configurationProperties)']
+            
+            [array ExtensionObjectDefinition('"14535"') configurationProperties count 'noOfConfigurationProperties']
+                    
+        ]
+        ['"15647"' UadpWriterGroupMessageDataType
+            [simple uint 32 groupVersion]
+            [simple DataSetOrderingType dataSetOrdering]
+            [simple UadpNetworkMessageContentMask networkMessageContentMask]
+            [simple float 64 samplingOffset]
+            [implicit int 32 noOfPublishingOffset 'COUNT(publishingOffset)']
+            [array float 64 publishingOffset count 'noOfPublishingOffset']
+                    
+        ]
+        ['"15654"' UadpDataSetWriterMessageDataType
+            [simple UadpDataSetMessageContentMask dataSetMessageContentMask]
+            [simple uint 16 configuredSize]
+            [simple uint 16 networkMessageNumber]
+            [simple uint 16 dataSetOffset]
+            
+        ]
+        ['"15655"' UadpDataSetReaderMessageDataType
+            [simple uint 32 groupVersion]
+            [simple uint 16 networkMessageNumber]
+            [simple uint 16 dataSetOffset]
+            [simple GuidValue dataSetClassId]
+            [simple UadpNetworkMessageContentMask networkMessageContentMask]
+            [simple UadpDataSetMessageContentMask dataSetMessageContentMask]
+            [simple float 64 publishingInterval]
+            [simple float 64 receiveOffset]
+            [simple float 64 processingOffset]
+            
+        ]
+        ['"15659"' JsonWriterGroupMessageDataType
+            [simple JsonNetworkMessageContentMask networkMessageContentMask]
+            
+        ]
+        ['"15666"' JsonDataSetWriterMessageDataType
+            [simple JsonDataSetMessageContentMask dataSetMessageContentMask]
+            
+        ]
+        ['"15667"' JsonDataSetReaderMessageDataType
+            [simple JsonNetworkMessageContentMask networkMessageContentMask]
+            [simple JsonDataSetMessageContentMask dataSetMessageContentMask]
+            
         ]
         ['"23605"' QosDataType
             
+        ]
+        ['"23606"' TransmitQosDataType
+            
+        ]
+        ['"23607"' TransmitQosPriorityDataType
+            [simple PascalString priorityLabel]
+            
+        ]
+        ['"23610"' ReceiveQosDataType
+            
+        ]
+        ['"23611"' ReceiveQosPriorityDataType
+            [simple PascalString priorityLabel]
+            
+        ]
+        ['"17469"' DatagramConnectionTransportDataType
+            [simple ExtensionObject('true') discoveryAddress]
+            
+        ]
+        ['"23614"' DatagramConnectionTransport2DataType
+            [simple ExtensionObject('true') discoveryAddress]
+            [simple uint 32 discoveryAnnounceRate]
+            [simple uint 32 discoveryMaxMessageSize]
+            [simple PascalString qosCategory]
+            [implicit int 32 noOfDatagramQos 'COUNT(datagramQos)']
+            [array ExtensionObject('true') datagramQos count 'noOfDatagramQos']
+                    
+        ]
+        ['"15534"' DatagramWriterGroupTransportDataType
+            [simple uint 8 messageRepeatCount]
+            [simple float 64 messageRepeatDelay]
+            
+        ]
+        ['"23615"' DatagramWriterGroupTransport2DataType
+            [simple uint 8 messageRepeatCount]
+            [simple float 64 messageRepeatDelay]
+            [simple ExtensionObject('true') address]
+            [simple PascalString qosCategory]
+            [implicit int 32 noOfDatagramQos 'COUNT(datagramQos)']
+            [array ExtensionObject('true') datagramQos count 'noOfDatagramQos']
+                    [simple uint 32 discoveryAnnounceRate]
+            [simple PascalString topic]
+            
+        ]
+        ['"23616"' DatagramDataSetReaderTransportDataType
+            [simple ExtensionObject('true') address]
+            [simple PascalString qosCategory]
+            [implicit int 32 noOfDatagramQos 'COUNT(datagramQos)']
+            [array ExtensionObject('true') datagramQos count 'noOfDatagramQos']
+                    [simple PascalString topic]
+            
+        ]
+        ['"15009"' BrokerConnectionTransportDataType
+            [simple PascalString resourceUri]
+            [simple PascalString authenticationProfileUri]
+            
+        ]
+        ['"15669"' BrokerWriterGroupTransportDataType
+            [simple PascalString queueName]
+            [simple PascalString resourceUri]
+            [simple PascalString authenticationProfileUri]
+            [simple BrokerTransportQualityOfService requestedDeliveryGuarantee]
+            
+        ]
+        ['"15671"' BrokerDataSetWriterTransportDataType
+            [simple PascalString queueName]
+            [simple PascalString resourceUri]
+            [simple PascalString authenticationProfileUri]
+            [simple BrokerTransportQualityOfService requestedDeliveryGuarantee]
+            [simple PascalString metaDataQueueName]
+            [simple float 64 metaDataUpdateTime]
+            
+        ]
+        ['"15672"' BrokerDataSetReaderTransportDataType
+            [simple PascalString queueName]
+            [simple PascalString resourceUri]
+            [simple PascalString authenticationProfileUri]
+            [simple BrokerTransportQualityOfService requestedDeliveryGuarantee]
+            [simple PascalString metaDataQueueName]
+            
         ]
         ['"25521"' PubSubConfigurationRefDataType
             [simple PubSubConfigurationRefMask configurationMask]
@@ -498,7 +798,7 @@
         ]
         ['"23470"' AliasNameDataType
             [simple QualifiedName aliasName]
-            [simple int 32 noOfReferencedNodes]
+            [implicit int 32 noOfReferencedNodes 'COUNT(referencedNodes)']
             [array ExpandedNodeId referencedNodes count 'noOfReferencedNodes']
                     
         ]
@@ -543,18 +843,32 @@
             [simple LocalizedText description]
             [simple NodeId dataType]
             [simple int 32 valueRank]
-            [simple int 32 noOfArrayDimensions]
+            [implicit int 32 noOfArrayDimensions 'COUNT(arrayDimensions)']
             [array uint 32 arrayDimensions count 'noOfArrayDimensions']
                     [simple uint 32 maxStringLength]
             [reserved uint 7 '0x00']
             [simple bit isOptional]
             
+        ]
+        ['"101"' StructureDefinition
+            [simple NodeId defaultEncodingId]
+            [simple NodeId baseDataType]
+            [simple StructureType structureType]
+            [implicit int 32 noOfFields 'COUNT(fields)']
+            
+            [array ExtensionObjectDefinition('"103"') fields count 'noOfFields']
+                    
+        ]
+        ['"102"' EnumDefinition
+            [implicit int 32 noOfFields 'COUNT(fields)']
+            [array EnumValueType('"7594"') fields count 'noOfFields']
+                    
         ]
         ['"298"' Argument
             [simple PascalString name]
             [simple NodeId dataType]
             [simple int 32 valueRank]
-            [simple int 32 noOfArrayDimensions]
+            [implicit int 32 noOfArrayDimensions 'COUNT(arrayDimensions)']
             [array uint 32 arrayDimensions count 'noOfArrayDimensions']
                     [simple LocalizedText description]
             
@@ -564,6 +878,13 @@
             [simple LocalizedText displayName]
             [simple LocalizedText description]
             
+        ]
+        ['"104"' EnumField
+            [simple int 64 value]
+            [simple LocalizedText displayName]
+            [simple LocalizedText description]
+            [simple PascalString name]
+            
         ]
         ['"12757"' OptionSet
             [simple PascalByteString value]
@@ -583,7 +904,7 @@
             [simple ApplicationType applicationType]
             [simple PascalString gatewayServerUri]
             [simple PascalString discoveryProfileUri]
-            [simple int 32 noOfDiscoveryUrls]
+            [implicit int 32 noOfDiscoveryUrls 'COUNT(discoveryUrls)']
             [array PascalString discoveryUrls count 'noOfDiscoveryUrls']
                     
         ]
@@ -602,7 +923,7 @@
             [simple uint 32 requestHandle]
             [simple StatusCode serviceResult]
             [simple DiagnosticInfo serviceDiagnostics]
-            [simple int 32 noOfStringTable]
+            [implicit int 32 noOfStringTable 'COUNT(stringTable)']
             [array PascalString stringTable count 'noOfStringTable']
                     [simple ExtensionObject('true') additionalHeader]
             
@@ -614,19 +935,19 @@
         ]
         ['"15903"' SessionlessInvokeRequestType
             [simple uint 32 urisVersion]
-            [simple int 32 noOfNamespaceUris]
+            [implicit int 32 noOfNamespaceUris 'COUNT(namespaceUris)']
             [array PascalString namespaceUris count 'noOfNamespaceUris']
-                    [simple int 32 noOfServerUris]
+                    [implicit int 32 noOfServerUris 'COUNT(serverUris)']
             [array PascalString serverUris count 'noOfServerUris']
-                    [simple int 32 noOfLocaleIds]
+                    [implicit int 32 noOfLocaleIds 'COUNT(localeIds)']
             [array PascalString localeIds count 'noOfLocaleIds']
                     [simple uint 32 serviceId]
             
         ]
         ['"21001"' SessionlessInvokeResponseType
-            [simple int 32 noOfNamespaceUris]
+            [implicit int 32 noOfNamespaceUris 'COUNT(namespaceUris)']
             [array PascalString namespaceUris count 'noOfNamespaceUris']
-                    [simple int 32 noOfServerUris]
+                    [implicit int 32 noOfServerUris 'COUNT(serverUris)']
             [array PascalString serverUris count 'noOfServerUris']
                     [simple uint 32 serviceId]
             
@@ -635,16 +956,16 @@
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [simple PascalString endpointUrl]
-            [simple int 32 noOfLocaleIds]
+            [implicit int 32 noOfLocaleIds 'COUNT(localeIds)']
             [array PascalString localeIds count 'noOfLocaleIds']
-                    [simple int 32 noOfServerUris]
+                    [implicit int 32 noOfServerUris 'COUNT(serverUris)']
             [array PascalString serverUris count 'noOfServerUris']
                     
         ]
         ['"425"' FindServersResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfServers]
+            [implicit int 32 noOfServers 'COUNT(servers)']
             
             [array ExtensionObjectDefinition('"310"') servers count 'noOfServers']
                     
@@ -653,7 +974,7 @@
             [simple uint 32 recordId]
             [simple PascalString serverName]
             [simple PascalString discoveryUrl]
-            [simple int 32 noOfServerCapabilities]
+            [implicit int 32 noOfServerCapabilities 'COUNT(serverCapabilities)']
             [array PascalString serverCapabilities count 'noOfServerCapabilities']
                     
         ]
@@ -662,7 +983,7 @@
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [simple uint 32 startingRecordId]
             [simple uint 32 maxRecordsToReturn]
-            [simple int 32 noOfServerCapabilityFilter]
+            [implicit int 32 noOfServerCapabilityFilter 'COUNT(serverCapabilityFilter)']
             [array PascalString serverCapabilityFilter count 'noOfServerCapabilityFilter']
                     
         ]
@@ -670,7 +991,7 @@
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
             [simple int 64 lastCounterResetTime]
-            [simple int 32 noOfServers]
+            [implicit int 32 noOfServers 'COUNT(servers)']
             
             [array ExtensionObjectDefinition('"12191"') servers count 'noOfServers']
                     
@@ -690,7 +1011,7 @@
             [simple PascalByteString serverCertificate]
             [simple MessageSecurityMode securityMode]
             [simple PascalString securityPolicyUri]
-            [simple int 32 noOfUserIdentityTokens]
+            [implicit int 32 noOfUserIdentityTokens 'COUNT(userIdentityTokens)']
             
             [array ExtensionObjectDefinition('"306"') userIdentityTokens count 'noOfUserIdentityTokens']
                     [simple PascalString transportProfileUri]
@@ -701,16 +1022,16 @@
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [simple PascalString endpointUrl]
-            [simple int 32 noOfLocaleIds]
+            [implicit int 32 noOfLocaleIds 'COUNT(localeIds)']
             [array PascalString localeIds count 'noOfLocaleIds']
-                    [simple int 32 noOfProfileUris]
+                    [implicit int 32 noOfProfileUris 'COUNT(profileUris)']
             [array PascalString profileUris count 'noOfProfileUris']
                     
         ]
         ['"431"' GetEndpointsResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfEndpoints]
+            [implicit int 32 noOfEndpoints 'COUNT(endpoints)']
             
             [array ExtensionObjectDefinition('"314"') endpoints count 'noOfEndpoints']
                     
@@ -718,11 +1039,11 @@
         ['"434"' RegisteredServer
             [simple PascalString serverUri]
             [simple PascalString productUri]
-            [simple int 32 noOfServerNames]
+            [implicit int 32 noOfServerNames 'COUNT(serverNames)']
             [array LocalizedText serverNames count 'noOfServerNames']
                     [simple ApplicationType serverType]
             [simple PascalString gatewayServerUri]
-            [simple int 32 noOfDiscoveryUrls]
+            [implicit int 32 noOfDiscoveryUrls 'COUNT(discoveryUrls)']
             [array PascalString discoveryUrls count 'noOfDiscoveryUrls']
                     [simple PascalString semaphoreFilePath]
             [reserved uint 7 '0x00']
@@ -743,22 +1064,28 @@
         ]
         ['"12892"' DiscoveryConfiguration
             
+        ]
+        ['"12893"' MdnsDiscoveryConfiguration
+            [simple PascalString mdnsServerName]
+            [implicit int 32 noOfServerCapabilities 'COUNT(serverCapabilities)']
+            [array PascalString serverCapabilities count 'noOfServerCapabilities']
+                    
         ]
         ['"12195"' RegisterServer2Request
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             
             [simple ExtensionObjectDefinition('"434"') server]
-            [simple int 32 noOfDiscoveryConfiguration]
+            [implicit int 32 noOfDiscoveryConfiguration 'COUNT(discoveryConfiguration)']
             [array ExtensionObject('true') discoveryConfiguration count 'noOfDiscoveryConfiguration']
                     
         ]
         ['"12196"' RegisterServer2Response
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfConfigurationResults]
+            [implicit int 32 noOfConfigurationResults 'COUNT(configurationResults)']
             [array StatusCode configurationResults count 'noOfConfigurationResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -830,10 +1157,10 @@
             [simple float 64 revisedSessionTimeout]
             [simple PascalByteString serverNonce]
             [simple PascalByteString serverCertificate]
-            [simple int 32 noOfServerEndpoints]
+            [implicit int 32 noOfServerEndpoints 'COUNT(serverEndpoints)']
             
             [array ExtensionObjectDefinition('"314"') serverEndpoints count 'noOfServerEndpoints']
-                    [simple int 32 noOfServerSoftwareCertificates]
+                    [implicit int 32 noOfServerSoftwareCertificates 'COUNT(serverSoftwareCertificates)']
             
             [array ExtensionObjectDefinition('"346"') serverSoftwareCertificates count 'noOfServerSoftwareCertificates']
                     
@@ -846,10 +1173,10 @@
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             
             [simple ExtensionObjectDefinition('"458"') clientSignature]
-            [simple int 32 noOfClientSoftwareCertificates]
+            [implicit int 32 noOfClientSoftwareCertificates 'COUNT(clientSoftwareCertificates)']
             
             [array ExtensionObjectDefinition('"346"') clientSoftwareCertificates count 'noOfClientSoftwareCertificates']
-                    [simple int 32 noOfLocaleIds]
+                    [implicit int 32 noOfLocaleIds 'COUNT(localeIds)']
             [array PascalString localeIds count 'noOfLocaleIds']
                     [simple ExtensionObject('true') userIdentityToken]
             
@@ -860,9 +1187,9 @@
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
             [simple PascalByteString serverNonce]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array StatusCode results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -897,11 +1224,118 @@
             [simple uint 32 writeMask]
             [simple uint 32 userWriteMask]
             
+        ]
+        ['"354"' ObjectAttributes
+            [simple uint 32 specifiedAttributes]
+            [simple LocalizedText displayName]
+            [simple LocalizedText description]
+            [simple uint 32 writeMask]
+            [simple uint 32 userWriteMask]
+            [simple uint 8 eventNotifier]
+            
+        ]
+        ['"357"' VariableAttributes
+            [simple uint 32 specifiedAttributes]
+            [simple LocalizedText displayName]
+            [simple LocalizedText description]
+            [simple uint 32 writeMask]
+            [simple uint 32 userWriteMask]
+            [simple Variant value]
+            [simple NodeId dataType]
+            [simple int 32 valueRank]
+            [implicit int 32 noOfArrayDimensions 'COUNT(arrayDimensions)']
+            [array uint 32 arrayDimensions count 'noOfArrayDimensions']
+                    [simple uint 8 accessLevel]
+            [simple uint 8 userAccessLevel]
+            [simple float 64 minimumSamplingInterval]
+            [reserved uint 7 '0x00']
+            [simple bit historizing]
+            
+        ]
+        ['"360"' MethodAttributes
+            [simple uint 32 specifiedAttributes]
+            [simple LocalizedText displayName]
+            [simple LocalizedText description]
+            [simple uint 32 writeMask]
+            [simple uint 32 userWriteMask]
+            [reserved uint 6 '0x00']
+            [simple bit userExecutable]
+            [simple bit executable]
+            
+        ]
+        ['"363"' ObjectTypeAttributes
+            [simple uint 32 specifiedAttributes]
+            [simple LocalizedText displayName]
+            [simple LocalizedText description]
+            [simple uint 32 writeMask]
+            [simple uint 32 userWriteMask]
+            [reserved uint 7 '0x00']
+            [simple bit isAbstract]
+            
+        ]
+        ['"366"' VariableTypeAttributes
+            [simple uint 32 specifiedAttributes]
+            [simple LocalizedText displayName]
+            [simple LocalizedText description]
+            [simple uint 32 writeMask]
+            [simple uint 32 userWriteMask]
+            [simple Variant value]
+            [simple NodeId dataType]
+            [simple int 32 valueRank]
+            [implicit int 32 noOfArrayDimensions 'COUNT(arrayDimensions)']
+            [array uint 32 arrayDimensions count 'noOfArrayDimensions']
+                    [reserved uint 7 '0x00']
+            [simple bit isAbstract]
+            
+        ]
+        ['"369"' ReferenceTypeAttributes
+            [simple uint 32 specifiedAttributes]
+            [simple LocalizedText displayName]
+            [simple LocalizedText description]
+            [simple uint 32 writeMask]
+            [simple uint 32 userWriteMask]
+            [reserved uint 6 '0x00']
+            [simple bit symmetric]
+            [simple bit isAbstract]
+            [simple LocalizedText inverseName]
+            
+        ]
+        ['"372"' DataTypeAttributes
+            [simple uint 32 specifiedAttributes]
+            [simple LocalizedText displayName]
+            [simple LocalizedText description]
+            [simple uint 32 writeMask]
+            [simple uint 32 userWriteMask]
+            [reserved uint 7 '0x00']
+            [simple bit isAbstract]
+            
+        ]
+        ['"375"' ViewAttributes
+            [simple uint 32 specifiedAttributes]
+            [simple LocalizedText displayName]
+            [simple LocalizedText description]
+            [simple uint 32 writeMask]
+            [simple uint 32 userWriteMask]
+            [reserved uint 7 '0x00']
+            [simple bit containsNoLoops]
+            [simple uint 8 eventNotifier]
+            
         ]
         ['"17608"' GenericAttributeValue
             [simple uint 32 attributeId]
             [simple Variant value]
             
+        ]
+        ['"17609"' GenericAttributes
+            [simple uint 32 specifiedAttributes]
+            [simple LocalizedText displayName]
+            [simple LocalizedText description]
+            [simple uint 32 writeMask]
+            [simple uint 32 userWriteMask]
+            [implicit int 32 noOfAttributeValues 'COUNT(attributeValues)']
+            
+            [array ExtensionObjectDefinition('"17608"') attributeValues count 'noOfAttributeValues']
+                    
         ]
         ['"378"' AddNodesItem
             [simple ExpandedNodeId parentNodeId]
@@ -921,7 +1355,7 @@
         ['"488"' AddNodesRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfNodesToAdd]
+            [implicit int 32 noOfNodesToAdd 'COUNT(nodesToAdd)']
             
             [array ExtensionObjectDefinition('"378"') nodesToAdd count 'noOfNodesToAdd']
                     
@@ -929,10 +1363,10 @@
         ['"491"' AddNodesResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             
             [array ExtensionObjectDefinition('"485"') results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -949,7 +1383,7 @@
         ['"494"' AddReferencesRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfReferencesToAdd]
+            [implicit int 32 noOfReferencesToAdd 'COUNT(referencesToAdd)']
             
             [array ExtensionObjectDefinition('"381"') referencesToAdd count 'noOfReferencesToAdd']
                     
@@ -957,9 +1391,9 @@
         ['"497"' AddReferencesResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array StatusCode results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -972,7 +1406,7 @@
         ['"500"' DeleteNodesRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfNodesToDelete]
+            [implicit int 32 noOfNodesToDelete 'COUNT(nodesToDelete)']
             
             [array ExtensionObjectDefinition('"384"') nodesToDelete count 'noOfNodesToDelete']
                     
@@ -980,9 +1414,9 @@
         ['"503"' DeleteNodesResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array StatusCode results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -999,7 +1433,7 @@
         ['"506"' DeleteReferencesRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfReferencesToDelete]
+            [implicit int 32 noOfReferencesToDelete 'COUNT(referencesToDelete)']
             
             [array ExtensionObjectDefinition('"387"') referencesToDelete count 'noOfReferencesToDelete']
                     
@@ -1007,9 +1441,9 @@
         ['"509"' DeleteReferencesResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array StatusCode results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1043,7 +1477,7 @@
         ['"524"' BrowseResult
             [simple StatusCode statusCode]
             [simple PascalByteString continuationPoint]
-            [simple int 32 noOfReferences]
+            [implicit int 32 noOfReferences 'COUNT(references)']
             
             [array ExtensionObjectDefinition('"520"') references count 'noOfReferences']
                     
@@ -1054,7 +1488,7 @@
             
             [simple ExtensionObjectDefinition('"513"') view]
             [simple uint 32 requestedMaxReferencesPerNode]
-            [simple int 32 noOfNodesToBrowse]
+            [implicit int 32 noOfNodesToBrowse 'COUNT(nodesToBrowse)']
             
             [array ExtensionObjectDefinition('"516"') nodesToBrowse count 'noOfNodesToBrowse']
                     
@@ -1062,10 +1496,10 @@
         ['"530"' BrowseResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             
             [array ExtensionObjectDefinition('"524"') results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1074,17 +1508,17 @@
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [reserved uint 7 '0x00']
             [simple bit releaseContinuationPoints]
-            [simple int 32 noOfContinuationPoints]
+            [implicit int 32 noOfContinuationPoints 'COUNT(continuationPoints)']
             [array PascalByteString continuationPoints count 'noOfContinuationPoints']
                     
         ]
         ['"536"' BrowseNextResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             
             [array ExtensionObjectDefinition('"524"') results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1097,7 +1531,7 @@
             
         ]
         ['"542"' RelativePath
-            [simple int 32 noOfElements]
+            [implicit int 32 noOfElements 'COUNT(elements)']
             
             [array ExtensionObjectDefinition('"539"') elements count 'noOfElements']
                     
@@ -1115,7 +1549,7 @@
         ]
         ['"551"' BrowsePathResult
             [simple StatusCode statusCode]
-            [simple int 32 noOfTargets]
+            [implicit int 32 noOfTargets 'COUNT(targets)']
             
             [array ExtensionObjectDefinition('"548"') targets count 'noOfTargets']
                     
@@ -1123,7 +1557,7 @@
         ['"554"' TranslateBrowsePathsToNodeIdsRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfBrowsePaths]
+            [implicit int 32 noOfBrowsePaths 'COUNT(browsePaths)']
             
             [array ExtensionObjectDefinition('"545"') browsePaths count 'noOfBrowsePaths']
                     
@@ -1131,31 +1565,31 @@
         ['"557"' TranslateBrowsePathsToNodeIdsResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             
             [array ExtensionObjectDefinition('"551"') results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
         ['"560"' RegisterNodesRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfNodesToRegister]
+            [implicit int 32 noOfNodesToRegister 'COUNT(nodesToRegister)']
             [array NodeId nodesToRegister count 'noOfNodesToRegister']
                     
         ]
         ['"563"' RegisterNodesResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfRegisteredNodeIds]
+            [implicit int 32 noOfRegisteredNodeIds 'COUNT(registeredNodeIds)']
             [array NodeId registeredNodeIds count 'noOfRegisteredNodeIds']
                     
         ]
         ['"566"' UnregisterNodesRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfNodesToUnregister]
+            [implicit int 32 noOfNodesToUnregister 'COUNT(nodesToUnregister)']
             [array NodeId nodesToUnregister count 'noOfNodesToUnregister']
                     
         ]
@@ -1188,7 +1622,7 @@
             [simple ExpandedNodeId typeDefinitionNode]
             [reserved uint 7 '0x00']
             [simple bit includeSubTypes]
-            [simple int 32 noOfDataToReturn]
+            [implicit int 32 noOfDataToReturn 'COUNT(dataToReturn)']
             
             [array ExtensionObjectDefinition('"572"') dataToReturn count 'noOfDataToReturn']
                     
@@ -1196,7 +1630,7 @@
         ['"579"' QueryDataSet
             [simple ExpandedNodeId nodeId]
             [simple ExpandedNodeId typeDefinitionNode]
-            [simple int 32 noOfValues]
+            [implicit int 32 noOfValues 'COUNT(values)']
             [array Variant values count 'noOfValues']
                     
         ]
@@ -1205,46 +1639,71 @@
             [simple NodeId referenceTypeId]
             [reserved uint 7 '0x00']
             [simple bit isForward]
-            [simple int 32 noOfReferencedNodeIds]
+            [implicit int 32 noOfReferencedNodeIds 'COUNT(referencedNodeIds)']
             [array NodeId referencedNodeIds count 'noOfReferencedNodeIds']
                     
         ]
         ['"585"' ContentFilterElement
             [simple FilterOperator filterOperator]
-            [simple int 32 noOfFilterOperands]
+            [implicit int 32 noOfFilterOperands 'COUNT(filterOperands)']
             [array ExtensionObject('true') filterOperands count 'noOfFilterOperands']
                     
         ]
         ['"588"' ContentFilter
-            [simple int 32 noOfElements]
+            [implicit int 32 noOfElements 'COUNT(elements)']
             
             [array ExtensionObjectDefinition('"585"') elements count 'noOfElements']
                     
         ]
         ['"591"' FilterOperand
             
+        ]
+        ['"594"' ElementOperand
+            [simple uint 32 index]
+            
+        ]
+        ['"597"' LiteralOperand
+            [simple Variant value]
+            
+        ]
+        ['"600"' AttributeOperand
+            [simple NodeId nodeId]
+            [simple PascalString alias]
+            
+            [simple ExtensionObjectDefinition('"542"') browsePath]
+            [simple uint 32 attributeId]
+            [simple PascalString indexRange]
+            
+        ]
+        ['"603"' SimpleAttributeOperand
+            [simple NodeId typeDefinitionId]
+            [implicit int 32 noOfBrowsePath 'COUNT(browsePath)']
+            [array QualifiedName browsePath count 'noOfBrowsePath']
+                    [simple uint 32 attributeId]
+            [simple PascalString indexRange]
+            
         ]
         ['"606"' ContentFilterElementResult
             [simple StatusCode statusCode]
-            [simple int 32 noOfOperandStatusCodes]
+            [implicit int 32 noOfOperandStatusCodes 'COUNT(operandStatusCodes)']
             [array StatusCode operandStatusCodes count 'noOfOperandStatusCodes']
-                    [simple int 32 noOfOperandDiagnosticInfos]
+                    [implicit int 32 noOfOperandDiagnosticInfos 'COUNT(operandDiagnosticInfos)']
             [array DiagnosticInfo operandDiagnosticInfos count 'noOfOperandDiagnosticInfos']
                     
         ]
         ['"609"' ContentFilterResult
-            [simple int 32 noOfElementResults]
+            [implicit int 32 noOfElementResults 'COUNT(elementResults)']
             
             [array ExtensionObjectDefinition('"606"') elementResults count 'noOfElementResults']
-                    [simple int 32 noOfElementDiagnosticInfos]
+                    [implicit int 32 noOfElementDiagnosticInfos 'COUNT(elementDiagnosticInfos)']
             [array DiagnosticInfo elementDiagnosticInfos count 'noOfElementDiagnosticInfos']
                     
         ]
         ['"612"' ParsingResult
             [simple StatusCode statusCode]
-            [simple int 32 noOfDataStatusCodes]
+            [implicit int 32 noOfDataStatusCodes 'COUNT(dataStatusCodes)']
             [array StatusCode dataStatusCodes count 'noOfDataStatusCodes']
-                    [simple int 32 noOfDataDiagnosticInfos]
+                    [implicit int 32 noOfDataDiagnosticInfos 'COUNT(dataDiagnosticInfos)']
             [array DiagnosticInfo dataDiagnosticInfos count 'noOfDataDiagnosticInfos']
                     
         ]
@@ -1253,7 +1712,7 @@
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             
             [simple ExtensionObjectDefinition('"513"') view]
-            [simple int 32 noOfNodeTypes]
+            [implicit int 32 noOfNodeTypes 'COUNT(nodeTypes)']
             
             [array ExtensionObjectDefinition('"575"') nodeTypes count 'noOfNodeTypes']
                     
@@ -1265,14 +1724,14 @@
         ['"618"' QueryFirstResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfQueryDataSets]
+            [implicit int 32 noOfQueryDataSets 'COUNT(queryDataSets)']
             
             [array ExtensionObjectDefinition('"579"') queryDataSets count 'noOfQueryDataSets']
                     [simple PascalByteString continuationPoint]
-            [simple int 32 noOfParsingResults]
+            [implicit int 32 noOfParsingResults 'COUNT(parsingResults)']
             
             [array ExtensionObjectDefinition('"612"') parsingResults count 'noOfParsingResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
             [simple ExtensionObjectDefinition('"609"') filterResult]
@@ -1289,7 +1748,7 @@
         ['"624"' QueryNextResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfQueryDataSets]
+            [implicit int 32 noOfQueryDataSets 'COUNT(queryDataSets)']
             
             [array ExtensionObjectDefinition('"579"') queryDataSets count 'noOfQueryDataSets']
                     [simple PascalByteString revisedContinuationPoint]
@@ -1307,7 +1766,7 @@
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [simple float 64 maxAge]
             [simple TimestampsToReturn timestampsToReturn]
-            [simple int 32 noOfNodesToRead]
+            [implicit int 32 noOfNodesToRead 'COUNT(nodesToRead)']
             
             [array ExtensionObjectDefinition('"628"') nodesToRead count 'noOfNodesToRead']
                     
@@ -1315,9 +1774,9 @@
         ['"634"' ReadResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array DataValue results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1336,9 +1795,57 @@
         ]
         ['"643"' HistoryReadDetails
             
+        ]
+        ['"646"' ReadEventDetails
+            [simple uint 32 numValuesPerNode]
+            [simple int 64 startTime]
+            [simple int 64 endTime]
+            [simple MonitoringFilter filter]
+            
+        ]
+        ['"32801"' ReadEventDetails2
+            [simple uint 32 numValuesPerNode]
+            [simple int 64 startTime]
+            [simple int 64 endTime]
+            [simple MonitoringFilter filter]
+            [reserved uint 7 '0x00']
+            [simple bit readModified]
+            
+        ]
+        ['"649"' ReadRawModifiedDetails
+            [reserved uint 7 '0x00']
+            [simple bit isReadModified]
+            [simple int 64 startTime]
+            [simple int 64 endTime]
+            [simple uint 32 numValuesPerNode]
+            [reserved uint 7 '0x00']
+            [simple bit returnBounds]
+            
+        ]
+        ['"652"' ReadProcessedDetails
+            [simple int 64 startTime]
+            [simple int 64 endTime]
+            [simple float 64 processingInterval]
+            [implicit int 32 noOfAggregateType 'COUNT(aggregateType)']
+            [array NodeId aggregateType count 'noOfAggregateType']
+                    
+            [simple ExtensionObjectDefinition('"950"') aggregateConfiguration]
+            
+        ]
+        ['"655"' ReadAtTimeDetails
+            [implicit int 32 noOfReqTimes 'COUNT(reqTimes)']
+            [array int 64 reqTimes count 'noOfReqTimes']
+                    [reserved uint 7 '0x00']
+            [simple bit useSimpleBounds]
+            
+        ]
+        ['"23499"' ReadAnnotationDataDetails
+            [implicit int 32 noOfReqTimes 'COUNT(reqTimes)']
+            [array int 64 reqTimes count 'noOfReqTimes']
+                    
         ]
         ['"658"' HistoryData
-            [simple int 32 noOfDataValues]
+            [implicit int 32 noOfDataValues 'COUNT(dataValues)']
             [array DataValue dataValues count 'noOfDataValues']
                     
         ]
@@ -1347,12 +1854,29 @@
             [simple HistoryUpdateType updateType]
             [simple PascalString userName]
             
+        ]
+        ['"11219"' HistoryModifiedData
+            [implicit int 32 noOfDataValues 'COUNT(dataValues)']
+            [array DataValue dataValues count 'noOfDataValues']
+                    [implicit int 32 noOfModificationInfos 'COUNT(modificationInfos)']
+            
+            [array ExtensionObjectDefinition('"11218"') modificationInfos count 'noOfModificationInfos']
+                    
         ]
         ['"661"' HistoryEvent
-            [simple int 32 noOfEvents]
+            [implicit int 32 noOfEvents 'COUNT(events)']
             
             [array ExtensionObjectDefinition('"922"') events count 'noOfEvents']
                     
+        ]
+        ['"32826"' HistoryModifiedEvent
+            [implicit int 32 noOfEvents 'COUNT(events)']
+            
+            [array ExtensionObjectDefinition('"922"') events count 'noOfEvents']
+                    [implicit int 32 noOfModificationInfos 'COUNT(modificationInfos)']
+            
+            [array ExtensionObjectDefinition('"11218"') modificationInfos count 'noOfModificationInfos']
+                    
         ]
         ['"664"' HistoryReadRequest
             
@@ -1361,7 +1885,7 @@
             [simple TimestampsToReturn timestampsToReturn]
             [reserved uint 7 '0x00']
             [simple bit releaseContinuationPoints]
-            [simple int 32 noOfNodesToRead]
+            [implicit int 32 noOfNodesToRead 'COUNT(nodesToRead)']
             
             [array ExtensionObjectDefinition('"637"') nodesToRead count 'noOfNodesToRead']
                     
@@ -1369,10 +1893,10 @@
         ['"667"' HistoryReadResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             
             [array ExtensionObjectDefinition('"640"') results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1386,7 +1910,7 @@
         ['"673"' WriteRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfNodesToWrite]
+            [implicit int 32 noOfNodesToWrite 'COUNT(nodesToWrite)']
             
             [array ExtensionObjectDefinition('"670"') nodesToWrite count 'noOfNodesToWrite']
                     
@@ -1394,61 +1918,104 @@
         ['"676"' WriteResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array StatusCode results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
         ['"679"' HistoryUpdateDetails
             
+        ]
+        ['"682"' UpdateDataDetails
+            [simple NodeId nodeId]
+            [simple PerformUpdateType performInsertReplace]
+            [implicit int 32 noOfUpdateValues 'COUNT(updateValues)']
+            [array DataValue updateValues count 'noOfUpdateValues']
+                    
+        ]
+        ['"11297"' UpdateStructureDataDetails
+            [simple NodeId nodeId]
+            [simple PerformUpdateType performInsertReplace]
+            [implicit int 32 noOfUpdateValues 'COUNT(updateValues)']
+            [array DataValue updateValues count 'noOfUpdateValues']
+                    
+        ]
+        ['"685"' UpdateEventDetails
+            [simple NodeId nodeId]
+            [simple PerformUpdateType performInsertReplace]
+            [simple MonitoringFilter filter]
+            [implicit int 32 noOfEventData 'COUNT(eventData)']
+            
+            [array ExtensionObjectDefinition('"922"') eventData count 'noOfEventData']
+                    
+        ]
+        ['"688"' DeleteRawModifiedDetails
+            [simple NodeId nodeId]
+            [reserved uint 7 '0x00']
+            [simple bit isDeleteModified]
+            [simple int 64 startTime]
+            [simple int 64 endTime]
+            
+        ]
+        ['"691"' DeleteAtTimeDetails
+            [simple NodeId nodeId]
+            [implicit int 32 noOfReqTimes 'COUNT(reqTimes)']
+            [array int 64 reqTimes count 'noOfReqTimes']
+                    
+        ]
+        ['"694"' DeleteEventDetails
+            [simple NodeId nodeId]
+            [implicit int 32 noOfEventIds 'COUNT(eventIds)']
+            [array PascalByteString eventIds count 'noOfEventIds']
+                    
         ]
         ['"697"' HistoryUpdateResult
             [simple StatusCode statusCode]
-            [simple int 32 noOfOperationResults]
+            [implicit int 32 noOfOperationResults 'COUNT(operationResults)']
             [array StatusCode operationResults count 'noOfOperationResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
         ['"700"' HistoryUpdateRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfHistoryUpdateDetails]
+            [implicit int 32 noOfHistoryUpdateDetails 'COUNT(historyUpdateDetails)']
             [array ExtensionObject('true') historyUpdateDetails count 'noOfHistoryUpdateDetails']
                     
         ]
         ['"703"' HistoryUpdateResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             
             [array ExtensionObjectDefinition('"697"') results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
         ['"706"' CallMethodRequest
             [simple NodeId objectId]
             [simple NodeId methodId]
-            [simple int 32 noOfInputArguments]
+            [implicit int 32 noOfInputArguments 'COUNT(inputArguments)']
             [array Variant inputArguments count 'noOfInputArguments']
                     
         ]
         ['"709"' CallMethodResult
             [simple StatusCode statusCode]
-            [simple int 32 noOfInputArgumentResults]
+            [implicit int 32 noOfInputArgumentResults 'COUNT(inputArgumentResults)']
             [array StatusCode inputArgumentResults count 'noOfInputArgumentResults']
-                    [simple int 32 noOfInputArgumentDiagnosticInfos]
+                    [implicit int 32 noOfInputArgumentDiagnosticInfos 'COUNT(inputArgumentDiagnosticInfos)']
             [array DiagnosticInfo inputArgumentDiagnosticInfos count 'noOfInputArgumentDiagnosticInfos']
-                    [simple int 32 noOfOutputArguments]
+                    [implicit int 32 noOfOutputArguments 'COUNT(outputArguments)']
             [array Variant outputArguments count 'noOfOutputArguments']
                     
         ]
         ['"712"' CallRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfMethodsToCall]
+            [implicit int 32 noOfMethodsToCall 'COUNT(methodsToCall)']
             
             [array ExtensionObjectDefinition('"706"') methodsToCall count 'noOfMethodsToCall']
                     
@@ -1456,15 +2023,28 @@
         ['"715"' CallResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             
             [array ExtensionObjectDefinition('"709"') results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
         ['"721"' MonitoringFilter
             
+        ]
+        ['"724"' DataChangeFilter
+            [simple DataChangeTrigger trigger]
+            [simple uint 32 deadbandType]
+            [simple float 64 deadbandValue]
+            
+        ]
+        ['"727"' EventFilter
+            [implicit int 32 noOfSelectClauses 'COUNT(selectClauses)']
+            [array FilterOperand('"589"') selectClauses count 'noOfSelectClauses']
+                    
+            [simple ExtensionObjectDefinition('"588"') whereClause]
+            
         ]
         ['"950"' AggregateConfiguration
             [reserved uint 6 '0x00']
@@ -1475,9 +2055,33 @@
             [reserved uint 7 '0x00']
             [simple bit useSlopedExtrapolation]
             
+        ]
+        ['"730"' AggregateFilter
+            [simple int 64 startTime]
+            [simple NodeId aggregateType]
+            [simple float 64 processingInterval]
+            
+            [simple ExtensionObjectDefinition('"950"') aggregateConfiguration]
+            
         ]
         ['"733"' MonitoringFilterResult
             
+        ]
+        ['"736"' EventFilterResult
+            [implicit int 32 noOfSelectClauseResults 'COUNT(selectClauseResults)']
+            [array StatusCode selectClauseResults count 'noOfSelectClauseResults']
+                    [implicit int 32 noOfSelectClauseDiagnosticInfos 'COUNT(selectClauseDiagnosticInfos)']
+            [array DiagnosticInfo selectClauseDiagnosticInfos count 'noOfSelectClauseDiagnosticInfos']
+                    
+            [simple ExtensionObjectDefinition('"609"') whereClauseResult]
+            
+        ]
+        ['"739"' AggregateFilterResult
+            [simple int 64 revisedStartTime]
+            [simple float 64 revisedProcessingInterval]
+            
+            [simple ExtensionObjectDefinition('"950"') revisedAggregateConfiguration]
+            
         ]
         ['"742"' MonitoringParameters
             [simple uint 32 clientHandle]
@@ -1509,7 +2113,7 @@
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [simple uint 32 subscriptionId]
             [simple TimestampsToReturn timestampsToReturn]
-            [simple int 32 noOfItemsToCreate]
+            [implicit int 32 noOfItemsToCreate 'COUNT(itemsToCreate)']
             
             [array ExtensionObjectDefinition('"745"') itemsToCreate count 'noOfItemsToCreate']
                     
@@ -1517,10 +2121,10 @@
         ['"754"' CreateMonitoredItemsResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             
             [array ExtensionObjectDefinition('"748"') results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1542,7 +2146,7 @@
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [simple uint 32 subscriptionId]
             [simple TimestampsToReturn timestampsToReturn]
-            [simple int 32 noOfItemsToModify]
+            [implicit int 32 noOfItemsToModify 'COUNT(itemsToModify)']
             
             [array ExtensionObjectDefinition('"757"') itemsToModify count 'noOfItemsToModify']
                     
@@ -1550,10 +2154,10 @@
         ['"766"' ModifyMonitoredItemsResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             
             [array ExtensionObjectDefinition('"760"') results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1562,16 +2166,16 @@
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [simple uint 32 subscriptionId]
             [simple MonitoringMode monitoringMode]
-            [simple int 32 noOfMonitoredItemIds]
+            [implicit int 32 noOfMonitoredItemIds 'COUNT(monitoredItemIds)']
             [array uint 32 monitoredItemIds count 'noOfMonitoredItemIds']
                     
         ]
         ['"772"' SetMonitoringModeResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array StatusCode results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1580,22 +2184,22 @@
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [simple uint 32 subscriptionId]
             [simple uint 32 triggeringItemId]
-            [simple int 32 noOfLinksToAdd]
+            [implicit int 32 noOfLinksToAdd 'COUNT(linksToAdd)']
             [array uint 32 linksToAdd count 'noOfLinksToAdd']
-                    [simple int 32 noOfLinksToRemove]
+                    [implicit int 32 noOfLinksToRemove 'COUNT(linksToRemove)']
             [array uint 32 linksToRemove count 'noOfLinksToRemove']
                     
         ]
         ['"778"' SetTriggeringResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfAddResults]
+            [implicit int 32 noOfAddResults 'COUNT(addResults)']
             [array StatusCode addResults count 'noOfAddResults']
-                    [simple int 32 noOfAddDiagnosticInfos]
+                    [implicit int 32 noOfAddDiagnosticInfos 'COUNT(addDiagnosticInfos)']
             [array DiagnosticInfo addDiagnosticInfos count 'noOfAddDiagnosticInfos']
-                    [simple int 32 noOfRemoveResults]
+                    [implicit int 32 noOfRemoveResults 'COUNT(removeResults)']
             [array StatusCode removeResults count 'noOfRemoveResults']
-                    [simple int 32 noOfRemoveDiagnosticInfos]
+                    [implicit int 32 noOfRemoveDiagnosticInfos 'COUNT(removeDiagnosticInfos)']
             [array DiagnosticInfo removeDiagnosticInfos count 'noOfRemoveDiagnosticInfos']
                     
         ]
@@ -1603,16 +2207,16 @@
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [simple uint 32 subscriptionId]
-            [simple int 32 noOfMonitoredItemIds]
+            [implicit int 32 noOfMonitoredItemIds 'COUNT(monitoredItemIds)']
             [array uint 32 monitoredItemIds count 'noOfMonitoredItemIds']
                     
         ]
         ['"784"' DeleteMonitoredItemsResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array StatusCode results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1661,44 +2265,63 @@
             [simple ExtensionObjectDefinition('"391"') requestHeader]
             [reserved uint 7 '0x00']
             [simple bit publishingEnabled]
-            [simple int 32 noOfSubscriptionIds]
+            [implicit int 32 noOfSubscriptionIds 'COUNT(subscriptionIds)']
             [array uint 32 subscriptionIds count 'noOfSubscriptionIds']
                     
         ]
         ['"802"' SetPublishingModeResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array StatusCode results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
         ['"805"' NotificationMessage
             [simple uint 32 sequenceNumber]
             [simple int 64 publishTime]
-            [simple int 32 noOfNotificationData]
+            [implicit int 32 noOfNotificationData 'COUNT(notificationData)']
             [array ExtensionObject('true') notificationData count 'noOfNotificationData']
                     
         ]
         ['"947"' NotificationData
             
+        ]
+        ['"811"' DataChangeNotification
+            [implicit int 32 noOfMonitoredItems 'COUNT(monitoredItems)']
+            
+            [array ExtensionObjectDefinition('"808"') monitoredItems count 'noOfMonitoredItems']
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
+            [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
+                    
         ]
         ['"808"' MonitoredItemNotification
             [simple uint 32 clientHandle]
             [simple DataValue value]
             
+        ]
+        ['"916"' EventNotificationList
+            [implicit int 32 noOfEvents 'COUNT(events)']
+            
+            [array ExtensionObjectDefinition('"919"') events count 'noOfEvents']
+                    
         ]
         ['"919"' EventFieldList
             [simple uint 32 clientHandle]
-            [simple int 32 noOfEventFields]
+            [implicit int 32 noOfEventFields 'COUNT(eventFields)']
             [array Variant eventFields count 'noOfEventFields']
                     
         ]
         ['"922"' HistoryEventFieldList
-            [simple int 32 noOfEventFields]
+            [implicit int 32 noOfEventFields 'COUNT(eventFields)']
             [array Variant eventFields count 'noOfEventFields']
                     
+        ]
+        ['"820"' StatusChangeNotification
+            [simple StatusCode status]
+            [simple DiagnosticInfo diagnosticInfo]
+            
         ]
         ['"823"' SubscriptionAcknowledgement
             [simple uint 32 subscriptionId]
@@ -1708,7 +2331,7 @@
         ['"826"' PublishRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfSubscriptionAcknowledgements]
+            [implicit int 32 noOfSubscriptionAcknowledgements 'COUNT(subscriptionAcknowledgements)']
             
             [array ExtensionObjectDefinition('"823"') subscriptionAcknowledgements count 'noOfSubscriptionAcknowledgements']
                     
@@ -1717,15 +2340,15 @@
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
             [simple uint 32 subscriptionId]
-            [simple int 32 noOfAvailableSequenceNumbers]
+            [implicit int 32 noOfAvailableSequenceNumbers 'COUNT(availableSequenceNumbers)']
             [array uint 32 availableSequenceNumbers count 'noOfAvailableSequenceNumbers']
                     [reserved uint 7 '0x00']
             [simple bit moreNotifications]
             
             [simple ExtensionObjectDefinition('"805"') notificationMessage]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array StatusCode results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1745,14 +2368,14 @@
         ]
         ['"838"' TransferResult
             [simple StatusCode statusCode]
-            [simple int 32 noOfAvailableSequenceNumbers]
+            [implicit int 32 noOfAvailableSequenceNumbers 'COUNT(availableSequenceNumbers)']
             [array uint 32 availableSequenceNumbers count 'noOfAvailableSequenceNumbers']
                     
         ]
         ['"841"' TransferSubscriptionsRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfSubscriptionIds]
+            [implicit int 32 noOfSubscriptionIds 'COUNT(subscriptionIds)']
             [array uint 32 subscriptionIds count 'noOfSubscriptionIds']
                     [reserved uint 7 '0x00']
             [simple bit sendInitialValues]
@@ -1761,26 +2384,26 @@
         ['"844"' TransferSubscriptionsResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             
             [array ExtensionObjectDefinition('"838"') results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
         ['"847"' DeleteSubscriptionsRequest
             
             [simple ExtensionObjectDefinition('"391"') requestHeader]
-            [simple int 32 noOfSubscriptionIds]
+            [implicit int 32 noOfSubscriptionIds 'COUNT(subscriptionIds)']
             [array uint 32 subscriptionIds count 'noOfSubscriptionIds']
                     
         ]
         ['"850"' DeleteSubscriptionsResponse
             
             [simple ExtensionObjectDefinition('"394"') responseHeader]
-            [simple int 32 noOfResults]
+            [implicit int 32 noOfResults 'COUNT(results)']
             [array StatusCode results count 'noOfResults']
-                    [simple int 32 noOfDiagnosticInfos]
+                    [implicit int 32 noOfDiagnosticInfos 'COUNT(diagnosticInfos)']
             [array DiagnosticInfo diagnosticInfos count 'noOfDiagnosticInfos']
                     
         ]
@@ -1800,13 +2423,13 @@
             
         ]
         ['"11945"' EndpointUrlListDataType
-            [simple int 32 noOfEndpointUrlList]
+            [implicit int 32 noOfEndpointUrlList 'COUNT(endpointUrlList)']
             [array PascalString endpointUrlList count 'noOfEndpointUrlList']
                     
         ]
         ['"11946"' NetworkGroupDataType
             [simple PascalString serverUri]
-            [simple int 32 noOfNetworkPaths]
+            [implicit int 32 noOfNetworkPaths 'COUNT(networkPaths)']
             
             [array ExtensionObjectDefinition('"11945"') networkPaths count 'noOfNetworkPaths']
                     
@@ -1850,7 +2473,7 @@
             [simple ExtensionObjectDefinition('"310"') clientDescription]
             [simple PascalString serverUri]
             [simple PascalString endpointUrl]
-            [simple int 32 noOfLocaleIds]
+            [implicit int 32 noOfLocaleIds 'COUNT(localeIds)']
             [array PascalString localeIds count 'noOfLocaleIds']
                     [simple float 64 actualSessionTimeout]
             [simple uint 32 maxResponseMessageSize]
@@ -1923,7 +2546,7 @@
         ['"870"' SessionSecurityDiagnosticsDataType
             [simple NodeId sessionId]
             [simple PascalString clientUserIdOfSession]
-            [simple int 32 noOfClientUserIdHistory]
+            [implicit int 32 noOfClientUserIdHistory 'COUNT(clientUserIdHistory)']
             [array PascalString clientUserIdHistory count 'noOfClientUserIdHistory']
                     [simple PascalString authenticationMechanism]
             [simple PascalString encoding]
@@ -2018,7 +2641,7 @@
             [simple ExtensionObjectDefinition('"886"') eURange]
             [simple LocalizedText title]
             [simple AxisScaleEnumeration axisScaleType]
-            [simple int 32 noOfAxisSteps]
+            [implicit int 32 noOfAxisSteps 'COUNT(axisSteps)']
             [array float 64 axisSteps count 'noOfAxisSteps']
                     
         ]
@@ -2034,10 +2657,10 @@
             [simple int 64 lastTransitionTime]
             [simple PascalString lastMethodCall]
             [simple NodeId lastMethodSessionId]
-            [simple int 32 noOfLastMethodInputArguments]
+            [implicit int 32 noOfLastMethodInputArguments 'COUNT(lastMethodInputArguments)']
             
             [array ExtensionObjectDefinition('"298"') lastMethodInputArguments count 'noOfLastMethodInputArguments']
-                    [simple int 32 noOfLastMethodOutputArguments]
+                    [implicit int 32 noOfLastMethodOutputArguments 'COUNT(lastMethodOutputArguments)']
             
             [array ExtensionObjectDefinition('"298"') lastMethodOutputArguments count 'noOfLastMethodOutputArguments']
                     [simple int 64 lastMethodCallTime]
@@ -2052,15 +2675,15 @@
             [simple int 64 lastTransitionTime]
             [simple PascalString lastMethodCall]
             [simple NodeId lastMethodSessionId]
-            [simple int 32 noOfLastMethodInputArguments]
+            [implicit int 32 noOfLastMethodInputArguments 'COUNT(lastMethodInputArguments)']
             
             [array ExtensionObjectDefinition('"298"') lastMethodInputArguments count 'noOfLastMethodInputArguments']
-                    [simple int 32 noOfLastMethodOutputArguments]
+                    [implicit int 32 noOfLastMethodOutputArguments 'COUNT(lastMethodOutputArguments)']
             
             [array ExtensionObjectDefinition('"298"') lastMethodOutputArguments count 'noOfLastMethodOutputArguments']
-                    [simple int 32 noOfLastMethodInputValues]
+                    [implicit int 32 noOfLastMethodInputValues 'COUNT(lastMethodInputValues)']
             [array Variant lastMethodInputValues count 'noOfLastMethodInputValues']
-                    [simple int 32 noOfLastMethodOutputValues]
+                    [implicit int 32 noOfLastMethodOutputValues 'COUNT(lastMethodOutputValues)']
             [array Variant lastMethodOutputValues count 'noOfLastMethodOutputValues']
                     [simple int 64 lastMethodCallTime]
             [simple StatusCode lastMethodReturnStatus]
@@ -2073,24 +2696,6 @@
             
         ]
 
-        ['"811"' DataChangeNotification
-            [implicit int 32 notificationLength 'lengthInBytes']
-            [simple int 32 noOfMonitoredItems]
-            [array ExtensionObjectDefinition('"808"')  monitoredItems count 'noOfMonitoredItems']
-            [simple int 32 noOfDiagnosticInfos]
-            [array DiagnosticInfo  diagnosticInfos count 'noOfDiagnosticInfos']
-        ]
-        ['"916"' EventNotificationList
-            [implicit int 32 notificationLength 'lengthInBytes']
-            [simple int 32 noOfEvents]
-            [array ExtensionObjectDefinition('"919"')  events count 'noOfEvents']
-        ]
-        ['"820"' StatusChangeNotification
-            [implicit int 32 notificationLength 'lengthInBytes']
-            [simple StatusCode status]
-            [simple DiagnosticInfo diagnosticInfo]
-        ]
-
         ['"316"' UserIdentityToken
             [implicit int 32 policyLength 'policyId.lengthInBytes  + userIdentityTokenDefinition.lengthInBytes']
             [simple PascalString policyId]
@@ -2296,6 +2901,7 @@
 [type XmlElement
     // An XML element encoded as a UTF-8 string.
     [simple int 32 length]
+            [implicit int 32 length 'COUNT(value)']
             [array string 8 value count 'length']
                     
 ]
@@ -2387,6 +2993,9 @@
 ]
     
 
+// StructuredTypes extensions
+
+
 // EnumeratedTypes
 
 
diff --git a/protocols/opcua/src/main/xslt/opc-common.xsl b/protocols/opcua/src/main/xslt/opc-common.xsl
index b4898480dd..1e3a7d7ae5 100644
--- a/protocols/opcua/src/main/xslt/opc-common.xsl
+++ b/protocols/opcua/src/main/xslt/opc-common.xsl
@@ -141,8 +141,8 @@
 ]
     </xsl:template>
 
-    <xsl:template match="opc:StructuredType[starts-with(@BaseType, 'tns:')]">
-        <xsl:message>[INFO] Parsing Structured Datatype - <xsl:value-of select="@Name"/></xsl:message>
+    <xsl:template match="opc:StructuredType[not (@BaseType)]">
+        <xsl:message>[INFO] Parsing Structured Datatype - top level - <xsl:value-of select="@Name"/></xsl:message>
         <xsl:variable name="objectTypeId">
             <xsl:call-template name="clean-datatype-string">
                 <xsl:with-param name="text" select="@Name"/>
@@ -222,7 +222,8 @@
         </xsl:variable>
         <!-- Depending on what kind of mspec variable it is, we have to include different arguments -->
         <xsl:choose>
-            <xsl:when test="@LengthField">
+            <xsl:when test="@LengthField">[implicit int 32 <xsl:value-of select="$lowerCaseLengthField"/> 'COUNT(<xsl:value-of select="$lowerCaseName" />)']<xsl:text>
+            </xsl:text>
                 <xsl:choose>
                     <xsl:when test="$dataType = 'ExtensionObjectDefinition'">
                         <xsl:variable name="browseName" select="substring-after(@TypeName,':')"/>
@@ -257,7 +258,12 @@
             </xsl:when>
             <xsl:when test="$dataType = 'ExtensionObject'">[<xsl:value-of select="$mspecType"/><xsl:text> </xsl:text><xsl:value-of select="$dataType"/>('true')<xsl:text> </xsl:text><xsl:value-of select="$lowerCaseName"/>]
             </xsl:when>
-            <xsl:otherwise>[<xsl:value-of select="$mspecType"/><xsl:text> </xsl:text><xsl:value-of select="$dataType"/><xsl:text> </xsl:text><xsl:value-of select="$lowerCaseName"/>]
+            <xsl:otherwise>
+                <xsl:choose>
+                    <xsl:when test="$mspecType != ''">[<xsl:value-of select="$mspecType"/><xsl:text> </xsl:text><xsl:value-of select="$dataType"/><xsl:text> </xsl:text><xsl:value-of select="$lowerCaseName"/>]<xsl:text>
+            </xsl:text>
+                    </xsl:when>
+                </xsl:choose>
             </xsl:otherwise>
         </xsl:choose>
     </xsl:template>
@@ -268,6 +274,7 @@
         <xsl:param name="name"/>
         <xsl:param name="switchField"/>
         <xsl:choose>
+            <xsl:when test="starts-with($name, 'noOf')"></xsl:when><!-- All noOfXyz (names lowercased by caller) fields in OPC UA are implicit array sizes -->
             <xsl:when test="starts-with($name, 'reserved')">reserved</xsl:when>
             <xsl:when test="$switchField != ''">optional</xsl:when>
             <xsl:otherwise>simple</xsl:otherwise>
diff --git a/protocols/opcua/src/main/xslt/opc-manual.xsl b/protocols/opcua/src/main/xslt/opc-manual.xsl
index b7ccfb080c..dd949b9aa8 100644
--- a/protocols/opcua/src/main/xslt/opc-manual.xsl
+++ b/protocols/opcua/src/main/xslt/opc-manual.xsl
@@ -230,29 +230,16 @@
         ['"0"' NullExtension
         ]
 
-        <xsl:for-each select="/opc:TypeDictionary/opc:StructuredType[(@BaseType = 'ua:ExtensionObject') and not(@Name = 'UserIdentityToken') and not(@Name = 'PublishedDataSetDataType') and not(@Name = 'DataSetReaderDataType') and not(@Name = 'PubSubConfigurationValueDataType') and not(@Name = 'PortableNodeId')]">
+        <xsl:for-each select="/opc:TypeDictionary/opc:StructuredType[((@BaseType = 'ua:ExtensionObject') or (starts-with(@BaseType, 'tns:') and not (@BaseType = 'tns:UserIdentityToken'))) and
+            not(@Name = 'UserIdentityToken') and
+            not(@Name = 'PublishedDataSetDataType') and
+            not(@Name = 'DataSetReaderDataType') and
+            not(@Name = 'PubSubConfigurationValueDataType') and
+            not(@Name = 'PortableNodeId')]">
             <xsl:variable name="extensionName" select="@Name"/>
             <xsl:apply-templates select="$file/node:UANodeSet/node:UADataType[@BrowseName=$extensionName]"/>
         </xsl:for-each>
 
-        ['"811"' DataChangeNotification
-            [implicit int 32 notificationLength 'lengthInBytes']
-            [simple int 32 noOfMonitoredItems]
-            [array ExtensionObjectDefinition('"808"')  monitoredItems count 'noOfMonitoredItems']
-            [simple int 32 noOfDiagnosticInfos]
-            [array DiagnosticInfo  diagnosticInfos count 'noOfDiagnosticInfos']
-        ]
-        ['"916"' EventNotificationList
-            [implicit int 32 notificationLength 'lengthInBytes']
-            [simple int 32 noOfEvents]
-            [array ExtensionObjectDefinition('"919"')  events count 'noOfEvents']
-        ]
-        ['"820"' StatusChangeNotification
-            [implicit int 32 notificationLength 'lengthInBytes']
-            [simple StatusCode status]
-            [simple DiagnosticInfo diagnosticInfo]
-        ]
-
         ['"316"' UserIdentityToken
             [implicit int 32 policyLength 'policyId.lengthInBytes  + userIdentityTokenDefinition.lengthInBytes']
             [simple PascalString policyId]
@@ -457,6 +444,9 @@
 // StructuredTypes
 <xsl:apply-templates select="/opc:TypeDictionary/opc:StructuredType[(@Name != 'ExtensionObject') and (@Name != 'Variant') and (@Name != 'NodeId') and (@Name != 'ExpandedNodeId') and not(@BaseType)]"/>
 
+// StructuredTypes extensions
+<!--<xsl:apply-templates select="/opc:TypeDictionary/opc:StructuredType[(@Name != 'ExtensionObject') and (@Name != 'Variant') and (@Name != 'NodeId') and (@Name != 'ExpandedNodeId') and (@BaseType != 'ua:ExtensionObject')]"/>-->
+
 // EnumeratedTypes
 <xsl:apply-templates select="/opc:TypeDictionary/opc:EnumeratedType"/>