Glossary · Modelling

Type dictionary (legacy)

In OPC UA, a type dictionary is the pre-1.04 mechanism for describing server-defined structures: an OPC Binary .bsd or XML schema document published as a ByteString Variable in the server's type system folder. DataTypeDefinition replaced it, the OPC Foundation marks the .bsd files obsolete, and many deployed clients still expect it.

How the dictionary is published

Under the TypesFolder the server exposes type system folders for OPC Binary and XML Schema. Each holds DataTypeDictionary Variables whose value is the entire schema document as a ByteString, plus DataTypeDescription Variables naming individual structures within it. A DataType's encoding node points at its description with a HasDescription reference, so the decode path is: encoding node, HasDescription to the description, description's value gives the name to look up inside the dictionary blob.

Why it was replaced

The dictionary is a document, not a model. A client has to download it - often hundreds of kilobytes on a rich server - parse a second schema language, and match names by string. It cannot express the 1.04 structure features, and it puts a parser for an obsolete format into every client. DataTypeDefinition moves the same information into node attributes the client is reading anyway, which is why the UA-Nodeset repository now marks the .Types.bsd files obsolete while still shipping them.

The interoperability failure

The two mechanisms are independent, and a server may publish either, both or neither. A modern client that only reads DataTypeDefinition, pointed at an older server that only publishes a dictionary, gets no definition and returns opaque ExtensionObjects with a Good status - the read succeeds and the data is unusable. The mirror case is just as common: an older client or a compiled-stub stack against a lean 1.05 server that publishes no dictionary at all. This migration is still live in the field; the umati dashboard client documents custom DataTypes via type dictionary as only partially working and the DataTypeDefinition path as still coming.

What to do about it

Test both paths explicitly when you qualify a client-server pair. Browse the type system folders: if they are absent or empty, the server has gone definition-only. Read the DataTypeDefinition attribute on one custom DataType: if it comes back empty, the server is dictionary-only. Where you control the server, publishing both is the pragmatic answer for a mixed estate; where you control the client, implement the definition path first and keep the dictionary path as fallback.

Example

The two decode paths from the same DataType node

DataType  ns=1;i=3002  RecipeStep
 |
 |-- Modern path (1.04+)
 |     Read attribute DataTypeDefinition
 |       -> StructureDefinition { DefaultEncodingId, StructureType, Fields[] }
 |     Decode directly. No document download.
 |
 +-- Legacy path (pre-1.04)
       --HasEncoding--> ns=1;i=5002  "Default Binary"
           --HasDescription--> ns=1;i=6002  DataTypeDescription
               Value: "RecipeStep"          <- name inside the dictionary
               --ComponentOf--> ns=1;i=7001 DataTypeDictionary
                   Value: ByteString, the whole .bsd document
                   e.g. <opc:StructuredType Name="RecipeStep"> ...

Browse to tell which a server supports:
  Types
   +- OPC Binary        <- present and non-empty  => dictionary available
   +- XML Schema        <- often present but unused
  (both folders absent or empty => definition-only server)
The mistake people make: Concluding a server is broken because your client returns raw bytes for a custom structure. Nine times out of ten the server is fine and the two ends simply support different description mechanisms. Check which one the server publishes before you open a support ticket, and note that in Python the split is visible in the API: asyncua's load_data_type_definitions() uses the modern path, while the older dictionary-parsing helper does not.

Defined in: Part 3 - Address Space Model for DataTypeDefinition; Part 5 - Information Model for the DataTypeDictionary and DataTypeDescription node types; the OPC Binary schema files ship as .Types.bsd in the UA-Nodeset repository and are marked obsolete there.

Last verified 7 September 2026 against OPC UA 1.05.07. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.

Free download
OPC UA Server Acceptance Test Pack
A 40-check acceptance test you run against a vendor's server before commissioning sign-off. Weighted scoring, three hard gates, and a one-page verdict for the supplier meeting.
Get the free test pack →
Free, no course, no login