An ExtensionObject is a container for any Structured DataTypeswhich cannot be encoded as one of the other built-in data types. The ExtensionObject contains a complex value serialized as a sequence of bytes or as an XML element. It also contains an identifier which indicates what data it contains and how it is encoded.

Structured DataTypesare represented in a Serveraddress space as sub-types of the Structure DataType. The DataEncodingsavailable for any given Structured DataTypesare represented as a DataTypeEncoding Objectin the Server AddressSpace. The NodeIdfor the DataTypeEncoding Objectis the identifier stored in the ExtensionObject. OPC 10000-3describes how DataTypeEncoding Nodesare related to other Nodesof the AddressSpace.

Serverimplementers should use namespace qualified numeric NodeIdsfor any DataTypeEncoding Objectsthey define. This will minimize the overhead introduced by packing Structured DataType values into an ExtensionObject.

ExtensionObjects and Variantsallow unlimited nesting which could result in stack overflow errors even if the message size is less than the maximum allowed. Decoders shall support at least 100 nesting levels. Decoders shall report an error if the number of nesting levels exceeds what it supports.