DDS-OPC UA Gateway 1.0 — Spec Coverage

Spec: OMG DDS-OPC UA Gateway 1.0 — formal/2020-01-01 →

Context: the DDS-OPC-UA gateway bridges between DDS topics and the OPC-UA address space (IEC 62541). ZeroDDS implements the type-system mapping layer (§8.2 + §9.2) and the address-space mapping (§9.3) as a pure-Rust no_std+alloc library. Subscription behavior + the OPC-UA binary wire encoding are caller-layer (typically an external OPC-UA stack).

Implementation:


§1 Scope

§1 Bidirectional bridge OPC UA ↔︎ DDS

Spec: §1, p. 1 (PDF) — “This specification overcomes this situation by defining a standard, vendor-independent, configurable gateway that enables interoperability and information exchange between systems that use DDS and systems that use OPC UA.”

Repo: crates/opcua-gateway/src/lib.rs crate doc.

Tests: cross-ref §8.2/§9.2/§9.3.

Status: done


§2 Conformance

§2 Conformance point 1: OPC UA to DDS mapping basic

Spec: §2 point 1 (p. 1) — UA type system + UA subscription mapping.

Repo: type-system mapping in crates/opcua-gateway/src/types.rs + dds_to_ua/walker.rs; subscription mapping in crates/opcua-gateway/src/subscription_mapping/{behavior,config,variant_dds}.rs.

Tests: cross-ref subscription_mapping::tests::*.

Status: done

§2 Conformance point 2: OPC UA to DDS mapping complete

Spec: §2 point 2 — basic + UA service sets.

Repo: point 1 + service sets in crates/opcua-gateway/src/service_sets/{attribute, method, query, view}.rs.

Tests: cross-ref service_sets::tests::*.

Status: done

§2 Conformance point 3: DDS to OPC UA mapping basic

Spec: §2 point 3 — DDS type system + DDS global data space (without historical).

Repo: type system via dds_to_ua/walker.rs (see §9.2); GDS mapping in address_space.rs::{DomainNode, TopicNode, SampleVariable} (see §9.3).

Tests: cross-ref dds_to_ua::walker::tests::* + address_space::tests::*.

Status: done

§2 Conformance point 4: DDS to OPC UA mapping complete

Spec: §2 point 4 — basic + historical access.

Repo: point 3 + historical access in crates/opcua-gateway/src/historical/{adapter, config, qos}.rs with a DDS-DurabilityService → UA-HistoryRead mapping.

Tests: cross-ref historical::tests::*.

Status: done

§2 Multi-point conformance marker

Spec: §2 — an implementation may satisfy several conformance points at once (“multi-point”).

Repo: crates/opcua-gateway/src/conformance.rs — an explicit, machine-queryable marker: the ConformancePoint enum (all four points with title + number + subsumes_basic), DECLARED_CONFORMANCE (= all four) + is_multi_point_conformant() / declares(). A server-stack integrator can query the conformance status programmatically instead of reading prose.

Tests: conformance::tests::* (declares-all-four, is-multi-point, unique numbering, complete-subsumes-basic, distinct titles).

Status: done


§3 Normative references

§3 References (DDS/DDSI/XTypes/IDL/OPCUA)

Spec: §3, p. 2-3 — DDS 1.4, DDS-RPC 1.0, DDS-Security 1.1, DDS-WEB, DDS-XML, DDS-XTYPES 1.2, DDSI-RTPS 2.3, IDL 4.2, OPCUA-01..-12.

Repo: cross-ref all the own spec-coverage files (zerodds-dcps-1.4.md, ddsi-rtps-2.5.md, dds-xtypes-1.3.md, omg-time-1.1.md, idl-4.2.md, etc.).

Tests:

Status: n/a (informative) — an external normative reference list; the OPCUA/DDS specs are fulfilled operationally in the consumer items §8/§9.


§4 Terms and definitions

Spec: §4 (PDF) — glossary.

Repo:

Tests:

Status: n/a (informative) — glossary; without a code mapping.

§5 Symbols and abbreviations

Spec: §5 (PDF) — abbreviations (DDS, OPC-UA, GDS, etc.).

Repo:

Tests:

Status: n/a (informative) — symbol table; without a code mapping.


§6 Additional information

Spec: §6 (PDF) — informative annex (roadmap, acknowledgements).

Repo:

Tests:

Status: n/a (informative)

§7 UA/DDS overview (informative)

Spec: §7 (PDF) — non-normative overview material on UA + DDS.

Repo:

Tests:

Status: n/a (informative) — the spec marks §7 explicitly as a non-normative overview.


§8 OPC UA to DDS bridge

§8.1 OPC UA to DDS bridge overview

Spec: §8.1 (PDF) — bridge architecture overview (informative).

Repo: cross-ref §8.2-§8.4.

Tests:

Status: n/a (informative)

§8.2 OPC UA type system mapping

Spec: §8.2, p. 11-12 (PDF) — a BuiltinTypeKind enum with all 25 OPC-UA built-in type IDs (Boolean=1, …, DiagnosticInfo=25).

Repo: crates/opcua-gateway/src/types.rs::BuiltinTypeKind with all 25 values + a value() method.

Tests: types::tests::builtin_type_kind_values_match_spec.

Status: done

§8.2.1 Built-in primitive types

Spec: §8.2.1, p. 12 Tab 8.1 — primitive mapping (Boolean→Boolean, SByte→Byte/int8, Byte→Byte/uint8, Int16/UInt16/Int32/UInt32/Int64/UInt64 1:1, Float→Float32, Double→Float64, String→String8).

Repo: crates/opcua-gateway/src/types.rs::{dds_idl_primitive, dds_xtypes_name, map_primitive_to_dds}.

Tests: types::tests::primitive_mapping_matches_spec_table_8_1, xtypes_names_match_spec_table_8_1, sbyte_and_byte_both_map_to_dds_byte_in_xtypes, composite_types_have_no_primitive_mapping, map_primitive_to_dds_helper_yields_token.

Status: done

§8.2.2 Built-in complex types

Spec: §8.2.2, p. 13-15 Tab 8.2 — DateTime/Guid/ByteString/XmlElement/ NodeId/ExpandedNodeId/StatusCode/QualifiedName/LocalizedText/ ExtensionObject/DataValue/Variant/DiagnosticInfo with the exact IDL-equivalent structures.

Repo: fully modeled in: * types.rs::{Guid, StatusCode, ByteString, QualifiedName, LocalizedText}. * node_id.rs::{NodeId, NodeIdentifier, NodeIdentifierKind, ExpandedNodeId} with all 4 identifier cases (Numeric/String/Guid/Opaque) + a 4096-byte limit validation. * data_value.rs::{Variant, VariantValue, DataValue, ExtensionObject, ExtensionObjectBody, BodyEncoding} with all 21 VariantValue cases.

Tests: types::tests::guid_round_trips_via_bytes, qualified_name_carries_namespace_and_name, localized_text_supports_optional_fields; node_id::tests::* (8 tests incl. the canonical string format ns=N;<kind>=<id>); data_value::tests::* (8 tests incl. round-trip of all VariantValue cases + scalar/1d_array/multi-dim detection).

Status: done — DiagnosticInfo is exposed as a ScopedName reference point; the mutable @optional-field model would be extendable analogous to LocalizedText.

§8.3 OPC UA service sets mapping

Spec: §8.3, p. 16-30 — View/Query/Attribute/Method service set as DDS-RPC interfaces.

Repo: crates/opcua-gateway/src/service_sets/{view,query,attribute, method}.rs with DDS-RPC bindings via crates/rpc/.

Tests: inline.

Status: done

§8.4 OPC UA subscription model mapping

Spec: §8.4, p. 31-48 — mapping OPC-UA subscriptions onto DDS DataReader listeners with MonitoredItems push.

Repo: crates/opcua-gateway/src/subscription_mapping/{behavior,config,variant_dds}.rs.

Tests: inline.

Status: done


§9 DDS to OPC UA bridge

§9.1 DDS to OPC UA bridge overview

Spec: §9.1 (PDF) — bridge architecture DDS→UA (informative).

Repo: cross-ref §9.2-§9.3.

Tests:

Status: n/a (informative)

§9.2 DDS type system mapping

Spec: §9.2, p. 49-93 — DDS primitive/string/enum/aggregated/collection/nested/alias/keyed types → OPC-UA variables.

Repo: full DDS→UA type walking in crates/opcua-gateway/src/dds_to_ua/walker.rs::{Walker, NodeKind, NodeSpec} with recursive aggregated (struct/union) and collection handling (sequence-of-struct, Map<String, Sequence>); the inverse mapping symmetric via BuiltinTypeKind. Instance side: address_space.rs::build_sample_instance recursively decomposes a structured sample into an InstanceNode variable hierarchy (HasComponent member components, nested; collections as array/object variables) — mirroring the §9.2 type recursion on the §9.3 instance side. SampleVariable::scalar remains for the simple scalar value path.

Tests: cross-ref dds_to_ua::walker::tests::* + address_space::tests::* (incl. struct_sample_decomposes_*, nested_struct_sample_recurses_*, union_sample_has_switchfield_*).

Status: done — data model + scalar mapping + aggregated/collection/ nested recursion in both the type walker and the instance builder.

§9.3 DDS global data space mapping

Spec: §9.3, p. 94-107 — DDS domain → OPC-UA ObjectNode with BrowseName Domain<id>; DDS topic → OPC-UA ObjectNode with BrowseName = topic name; DDS sample → OPC-UA variable.

Repo: crates/opcua-gateway/src/address_space.rs::{DomainNode, TopicNode, SampleVariable, mangle_topic_node_browse_name}.

Tests: address_space::tests::domain_node_for_zero_yields_browse_name_domain0, domain_node_for_42_yields_browse_name_domain42, mangle_topic_node_browse_name_is_pass_through, topic_node_carries_parent_domain_reference, sample_variable_scalar_has_value_rank_minus_1.

Status: done

§9.3.4 Reading historical data from instance nodes

Spec: §9.3.4 — historical-access subset (conformance point 4 “complete”).

Repo: crates/opcua-gateway/src/historical/{adapter,config,qos}.rs.

Tests: inline.

Status: done


§10 OPC UA/DDS gateway configuration

§10.1 Gateway configuration overview

Spec: §10.1 (PDF) — configuration model for the UA-DDS gateway (connections, address mappings, QoS).

Repo: cross-ref §10.2 + code in crates/opcua-gateway/.

Tests:

Status: n/a (informative)

§10.2 XML configuration

Spec: §10, p. 109-127 — XML configuration schema for gateway bridge defs (UAtoDDS / DDStoUA connections).

Repo: crates/opcua-gateway/src/xml.rs::parse_gateway_config (roxmltree-based, the same backend choice as crates/xml/src/qos.rs + crates/security-permissions/). Data model: GatewayConfig with Vec<BridgeDef>, each bridge with a domain ID + n UaConnection entries, both directions (ConnectionDirection::UaToDds / DdsToUa), an optional browse_path + XmlNodeId (numeric or string).

Tests: xml::tests::parses_full_two_bridge_sample, ua_to_dds_connection_yields_expected_fields, dds_to_ua_connection_uses_string_node_id, auxiliary_bridge_omits_optional_node_id_and_browse_path, malformed_xml_yields_parse_error, wrong_root_element_yields_unexpected_root_error, missing_dds_topic_yields_missing_element_error, invalid_numeric_node_id_yields_specific_error, bridge_without_name_yields_missing_attribute_error.

Status: done


Audit status

15 done / 0 partial / 0 open / 8 n/a (informative) / 0 n/a (rejected).

Test run: cargo test -p zerodds-opcua-gateway — 133 lib tests green, 0 failed. Modules with tests: address_space, conformance, data_value, dds_to_ua::naming, dds_to_ua::node_spec, dds_to_ua::walker, historical::adapter, historical::config, historical::qos, node_id, service_sets (+ attribute/method/query/view), subscription_mapping (+ behavior/config/variant_dds), types, xml.

DDS-OPC UA Gateway 1.0 — Spec-Coverage

Spec: OMG DDS-OPC UA Gateway 1.0 — formal/2020-01-01 →

Kontext: DDS-OPC-UA-Gateway bridge zwischen DDS-Topics und OPC-UA-AddressSpace (IEC 62541). ZeroDDS implementiert die Type-System-Mapping-Layer (§8.2 + §9.2) sowie das AddressSpace-Mapping (§9.3) als pure-Rust no_std+alloc Library. Subscription-Behavior + OPC-UA-Binary- Wire-Encoding sind Caller-Layer (typisch externer OPC-UA-Stack).

Implementation:


§1 Scope

§1 Bidirectional Bridge OPC UA ↔︎ DDS

Spec: §1, S. 1 (PDF) — “This specification overcomes this situation by defining a standard, vendor-independent, configurable gateway that enables interoperability and information exchange between systems that use DDS and systems that use OPC UA.”

Repo: crates/opcua-gateway/src/lib.rs Crate-Doc.

Tests: Cross-Ref §8.2/§9.2/§9.3.

Status: done


§2 Conformance

§2 Conformance Point 1: OPC UA to DDS Mapping Basic

Spec: §2 Punkt 1 (S. 1) — UA Type-System + UA Subscription Mapping.

Repo: Type-System-Mapping in crates/opcua-gateway/src/types.rs + dds_to_ua/walker.rs; Subscription-Mapping in crates/opcua-gateway/src/subscription_mapping/{behavior,config, variant_dds}.rs.

Tests: Cross-Ref subscription_mapping::tests::*.

Status: done

§2 Conformance Point 2: OPC UA to DDS Mapping Complete

Spec: §2 Punkt 2 — Basic + UA Service-Sets.

Repo: Punkt 1 + Service-Sets in crates/opcua-gateway/src/service_sets/{attribute, method, query, view}.rs.

Tests: Cross-Ref service_sets::tests::*.

Status: done

§2 Conformance Point 3: DDS to OPC UA Mapping Basic

Spec: §2 Punkt 3 — DDS Type-System + DDS Global Data Space (without Historical).

Repo: Type-System via dds_to_ua/walker.rs (siehe §9.2); GDS-Mapping in address_space.rs::{DomainNode, TopicNode, SampleVariable} (siehe §9.3).

Tests: Cross-Ref dds_to_ua::walker::tests::* + address_space::tests::*.

Status: done

§2 Conformance Point 4: DDS to OPC UA Mapping Complete

Spec: §2 Punkt 4 — Basic + Historical Access.

Repo: Punkt 3 + Historical-Access in crates/opcua-gateway/src/historical/{adapter, config, qos}.rs mit DDS-DurabilityService → UA-HistoryRead-Mapping.

Tests: Cross-Ref historical::tests::*.

Status: done

§2 Multi-Point Conformance Marker

Spec: §2 — eine Implementierung kann mehrere Conformance-Points gleichzeitig erfüllen (“multi-point”).

Repo: crates/opcua-gateway/src/conformance.rs — expliziter, maschinen-abfragbarer Marker: ConformancePoint-Enum (alle vier Punkte mit Titel + Nummer + subsumes_basic), DECLARED_CONFORMANCE (= alle vier) + is_multi_point_conformant() / declares(). Damit kann ein Server-Stack-Integrator den Conformance-Stand programmatisch abfragen statt Prosa zu lesen.

Tests: conformance::tests::{declares_all_four_conformance_points, is_multi_point, points_are_numbered_one_to_four_uniquely, complete_points_subsume_their_basic, every_point_has_a_distinct_title}.

Status: done


§3 Normative References

§3 References (DDS/DDSI/XTypes/IDL/OPCUA)

Spec: §3, S. 2-3 — DDS 1.4, DDS-RPC 1.0, DDS-Security 1.1, DDS-WEB, DDS-XML, DDS-XTYPES 1.2, DDSI-RTPS 2.3, IDL 4.2, OPCUA-01..-12.

Repo: Cross-Ref alle eigenen Spec-Coverage-Files (zerodds-dcps-1.4.md, ddsi-rtps-2.5.md, dds-xtypes-1.3.md, omg-time-1.1.md, idl-4.2.md, etc.).

Tests:

Status: n/a (informative) — Externe normative Referenz-Liste; OPCUA-/DDS-Specs werden in den Konsumenten-Items §8/§9 operativ erfüllt.


§4 Terms and Definitions

Spec: §4 (PDF) — Glossar.

Repo:

Tests:

Status: n/a (informative) — Glossar; ohne Code-Mapping.

§5 Symbols and Abbreviations

Spec: §5 (PDF) — Abkürzungen (DDS, OPC-UA, GDS, etc.).

Repo:

Tests:

Status: n/a (informative) — Symbol-Tabelle; ohne Code-Mapping.


§6 Additional Information

Spec: §6 (PDF) — informativer Anhang (Roadmap, Acknowledgements).

Repo:

Tests:

Status: n/a (informative)

§7 UA/DDS Overview (Informative)

Spec: §7 (PDF) — non-normative Overview-Material zu UA + DDS.

Repo:

Tests:

Status: n/a (informative) — Spec markiert §7 explizit als non-normative Overview.


§8 OPC UA to DDS Bridge

§8.1 OPC UA to DDS Bridge Overview

Spec: §8.1 (PDF) — Bridge-Architektur-Überblick (informativ).

Repo: Cross-Ref §8.2-§8.4.

Tests:

Status: n/a (informative)

§8.2 OPC UA Type System Mapping

Spec: §8.2, S. 11-12 (PDF) — BuiltinTypeKind Enum mit allen 25 OPC-UA-Built-in-Type-IDs (Boolean=1, …, DiagnosticInfo=25).

Repo: crates/opcua-gateway/src/types.rs::BuiltinTypeKind mit allen 25 Werten + value()-Methode.

Tests: types::tests::builtin_type_kind_values_match_spec.

Status: done

§8.2.1 Built-in Primitive Types

Spec: §8.2.1, S. 12 Tab 8.1 — Primitive-Mapping (Boolean→Boolean, SByte→Byte/int8, Byte→Byte/uint8, Int16/UInt16/Int32/UInt32/Int64/ UInt64 1:1, Float→Float32, Double→Float64, String→String8).

Repo: crates/opcua-gateway/src/types.rs::{dds_idl_primitive, dds_xtypes_name, map_primitive_to_dds}.

Tests: types::tests::primitive_mapping_matches_spec_table_8_1, xtypes_names_match_spec_table_8_1, sbyte_and_byte_both_map_to_dds_byte_in_xtypes, composite_types_have_no_primitive_mapping, map_primitive_to_dds_helper_yields_token.

Status: done

§8.2.2 Built-in Complex Types

Spec: §8.2.2, S. 13-15 Tab 8.2 — DateTime/Guid/ByteString/ XmlElement/NodeId/ExpandedNodeId/StatusCode/QualifiedName/ LocalizedText/ExtensionObject/DataValue/Variant/DiagnosticInfo mit den exakten IDL-Equivalent-Strukturen.

Repo: Voll modelliert in: * types.rs::{Guid, StatusCode, ByteString, QualifiedName, LocalizedText}. * node_id.rs::{NodeId, NodeIdentifier, NodeIdentifierKind, ExpandedNodeId} mit allen 4 Identifier-Cases (Numeric/String/Guid/ Opaque) + 4096-Byte-Limit-Validation. * data_value.rs::{Variant, VariantValue, DataValue, ExtensionObject, ExtensionObjectBody, BodyEncoding} mit allen 21 VariantValue-Cases.

Tests: types::tests::guid_round_trips_via_bytes, qualified_name_carries_namespace_and_name, localized_text_supports_optional_fields; node_id::tests::* (8 Tests inkl. canonical-string-Format ns=N;<kind>=<id>); data_value::tests::* (8 Tests inkl. round-trip aller VariantValue- Cases + scalar/1d_array/multi-dim Detection).

Status: done — DiagnosticInfo ist als ScopedName-Bezugspunkt exposed; das mutable @optional-Felder-Modell wäre analog zu LocalizedText ergänzbar.

§8.3 OPC UA Service Sets Mapping

Spec: §8.3, S. 16-30 — View/Query/Attribute/Method-Service-Set als DDS-RPC-Interfaces.

Repo: crates/opcua-gateway/src/service_sets/{view,query,attribute, method}.rs mit DDS-RPC-Bindings über crates/rpc/.

Tests: Inline.

Status: done

§8.4 OPC UA Subscription Model Mapping

Spec: §8.4, S. 31-48 — Mapping von OPC-UA-Subscriptions auf DDS-DataReader-Listener mit MonitoredItems-Push.

Repo: crates/opcua-gateway/src/subscription_mapping/{behavior, config,variant_dds}.rs.

Tests: Inline.

Status: done


§9 DDS to OPC UA Bridge

§9.1 DDS to OPC UA Bridge Overview

Spec: §9.1 (PDF) — Bridge-Architektur DDS→UA (informativ).

Repo: Cross-Ref §9.2-§9.3.

Tests:

Status: n/a (informative)

§9.2 DDS Type System Mapping

Spec: §9.2, S. 49-93 — DDS-Primitive/String/Enum/Aggregated/ Collection/Nested/Alias/Keyed-Types → OPC-UA-Variables.

Repo: Vollständiges DDS→UA-Type-Walking in crates/opcua-gateway/src/dds_to_ua/walker.rs::{Walker, NodeKind, NodeSpec} mit rekursiver Aggregated- (Struct/Union) und Collection- Behandlung (Sequence-of-Struct, Map<String, Sequence>); inverses Mapping symmetrisch via BuiltinTypeKind. Instance-Seite: address_space.rs::build_sample_instance zerlegt ein strukturiertes Sample rekursiv in eine InstanceNode-Variablen-Hierarchie (HasComponent-Komponenten pro Member, verschachtelt; Collections als Array-/Object-Variablen) — spiegelt die §9.2-Typ-Rekursion auf der §9.3-Instance-Seite. SampleVariable::scalar bleibt für den einfachen Skalar-Wert-Pfad.

Tests: Cross-Ref dds_to_ua::walker::tests::* + address_space::tests::* (inkl. struct_sample_decomposes_*, nested_struct_sample_recurses_*, union_sample_has_switchfield_*).

Status: done — Datenmodell + Scalar-Mapping + Aggregated/Collection/ Nested-Recursion im Typ-Walker UND im Instance-Builder abgedeckt.

§9.3 DDS Global Data Space Mapping

Spec: §9.3, S. 94-107 — DDS-Domain → OPC-UA-ObjectNode mit BrowseName Domain<id>; DDS-Topic → OPC-UA-ObjectNode mit BrowseName = Topic-Name; DDS-Sample → OPC-UA-Variable.

Repo: crates/opcua-gateway/src/address_space.rs::{DomainNode, TopicNode, SampleVariable, mangle_topic_node_browse_name}.

Tests: address_space::tests::domain_node_for_zero_yields_browse_name_domain0, domain_node_for_42_yields_browse_name_domain42, mangle_topic_node_browse_name_is_pass_through, topic_node_carries_parent_domain_reference, sample_variable_scalar_has_value_rank_minus_1.

Status: done

§9.3.4 Reading Historical Data from Instance Nodes

Spec: §9.3.4 — Historical-Access-Subset (Conformance-Point 4 “Complete”).

Repo: crates/opcua-gateway/src/historical/{adapter,config, qos}.rs.

Tests: Inline.

Status: done


§10 OPC UA/DDS Gateway Configuration

§10.1 Gateway Configuration Overview

Spec: §10.1 (PDF) — Configuration-Modell für UA-DDS-Gateway (Connections, Address-Mappings, QoS).

Repo: Cross-Ref §10.2 + Code in crates/opcua-gateway/.

Tests:

Status: n/a (informative)

§10.2 XML Configuration

Spec: §10, S. 109-127 — XML-Configuration-Schema für Gateway-Bridge-Defs (UAtoDDS / DDStoUA Connections).

Repo: crates/opcua-gateway/src/xml.rs::parse_gateway_config (roxmltree-basiert, gleiche Backend-Wahl wie crates/xml/src/qos.rs + crates/security-permissions/). Datenmodell: GatewayConfig mit Vec<BridgeDef>, jede Bridge mit Domain-Id + n UaConnection-Einträgen, beide Richtungen (ConnectionDirection::UaToDds / DdsToUa), optionalem browse_path + XmlNodeId (numeric oder string).

Tests: xml::tests::parses_full_two_bridge_sample, ua_to_dds_connection_yields_expected_fields, dds_to_ua_connection_uses_string_node_id, auxiliary_bridge_omits_optional_node_id_and_browse_path, malformed_xml_yields_parse_error, wrong_root_element_yields_unexpected_root_error, missing_dds_topic_yields_missing_element_error, invalid_numeric_node_id_yields_specific_error, bridge_without_name_yields_missing_attribute_error.

Status: done


Audit-Status

15 done / 0 partial / 0 open / 8 n/a (informative) / 0 n/a (rejected).

Test-Lauf: cargo test -p zerodds-opcua-gateway — 133 lib-Tests grün, 0 failed. Module mit Tests: address_space, conformance, data_value, dds_to_ua::naming, dds_to_ua::node_spec, dds_to_ua::walker, historical::adapter, historical::config, historical::qos, node_id, service_sets (+ attribute/method/query/view), subscription_mapping (+ behavior/config/variant_dds), types, xml.