Glossary · PubSub

PublishedDataSet

In OPC UA PubSub, a PublishedDataSet defines what a publisher makes available: an ordered list of published fields selected from the address space, plus the DataSetMetaData that names, types and versions those fields. It describes content only. A DataSetWriter decides when, where and in what encoding that content is sent.

Two kinds, and they are not interchangeable

PublishedDataItemsType holds a list of PublishedVariableDataType entries, each pointing at a NodeId and attribute with its own sampling interval, deadband and substitute value, which is the data-collection case. PublishedEventsType holds an event source NodeId, a selected field list and a where clause, which is the alarms and events case. A subscriber cannot tell them apart from the transport configuration alone; it learns the difference from the metadata.

DataSetMetaData is the interface contract

The metadata carries the dataset name, a namespace array, an enum and structure data type list, and one FieldMetaData entry per field with its name, built-in or custom DataType, ValueRank and ArrayDimensions. Field order in this list is what the wire format indexes into. It also carries a ConfigurationVersion with a major and a minor part: the major part changes when the field layout changes, the minor part when a description or a non-structural detail changes.

Configuration is itself an information model

PublishedDataSets live under the standard PublishSubscribe Object in the server's address space, so on a server that implements the PubSub configuration model you can browse the whole publisher setup with any ordinary client, and add or remove datasets through methods such as AddPublishedDataItems and AddVariables. Many products instead take a static configuration file or a UABinaryFileDataType blob, in which case the address space shows nothing and your only record of the interface is that file.

Sampling belongs here, publishing does not

Per-field sampling intervals on the published variables decide how often a value is refreshed into the dataset; the WriterGroup PublishingInterval decides how often the dataset is put on the wire. Setting a publishing interval faster than the sampling interval does not give you fresher data, it gives you the same value repeated with a moving timestamp, which is indistinguishable from real data downstream.

Example

A PublishedDataSet as it appears when you browse a publisher's configuration

Objects
  PublishSubscribe
    PublishedDataSets
      Line3_Press                      (PublishedDataItemsType)
        PublishedData     [3]          # ordered - index 0,1,2 is what the wire carries
          [0] ns=4;s=Press.Force       SamplingIntervalHint 100 ms
          [1] ns=4;s=Press.Position    SamplingIntervalHint 100 ms
          [2] ns=4;s=Press.CycleCount  SamplingIntervalHint 1000 ms
        DataSetMetaData
          Name                 "Line3_Press"
          ConfigurationVersion  MajorVersion 1725382914, MinorVersion 1725382914
          Fields                Force:Double, Position:Double, CycleCount:UInt32
The mistake people make: Adding or reordering a field without letting the ConfigurationVersion major part change. Every subscriber decodes by field index, so inserting a new variable in the middle silently shifts each later value into the wrong field. A pressure reading arrives as a cycle count, with Good status and a fresh timestamp, and nothing in the system flags it.

Defined in: Part 14 - PubSub, PublishedDataSet and DataSetMetaData.

Status codes you will meet

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