DDS (Data Distribution Service) 数据分发服务-规范中文翻译_012

2.以数据为中心的订阅发布(DCPS)

2.2 平台无关模型(Platform Independent Model ,PIM)

2.2.2 平台无关模型(PIM)描述

2.2.2.3 主题定义(Topic-Definition)模块

2.2.2.3.3 ContentFilteredTopic类

ContentFilteredTopic类是TopicDescription类的一种特殊化,允许基于内容的订阅。
DDS (Data Distribution Service) 数据分发服务-规范中文翻译_012
ContentFilteredTopic描述了一种更复杂的订阅场景,这种情况下订阅者不一定要收到此主题(Tpic)下发布的每个实例的内容。相反,订阅者只想接收内容满足特定条件的值。 因此,ContentFilteredTopic类可用于发起基于内容的订阅。

通过使用参数为expression_parameters的filter_expression属性完成基于内容的选择。

  • filter_expression属性是一个字符串,用于指定选择感兴趣的数据样本的条件。它类似于SQL语句中的WHERE部分。
  • expression_parameters属性是一系列字符串,它们为filter_expression中的“parameters”(即“%n”标记)赋值。提供的参数的数量必须与filter_expression中的请求值一致(即%n符号的数量)。

附件B描述了filter_expression和expression_parameters的语法。

2.2.2.3.3.1 get_related_topic

此方法返回与ContentFilteredTopic关联的主题(Topic),即在创建ContentFilteredTopic时指定的主题。

2.2.2.3.3.2 filter_expression

与ContentFilteredTopic关联的filter_expression,即创建ContentFilteredTopic时指定的表达式。

2.2.2.3.3.3 get_expression_parameters

此方法返回与ContentFilteredTopic关联的expression_parameters,即上次成功调用set_expression_parameters时指定的参数,或者从未调用set_expression_parameters,在创建ContentFilteredTopic时指定的参数。

2.2.2.3.3.4 set_expression_parameters

此方法设置与ContentFilteredTopic关联的expression_parameters。

2.2.2.3.4 MultiTopic类[可选]

MultiTopic类是TopicDescription类的一种特殊化,允许订阅方组合/过滤/重新排列来自多个主题的数据。
DDS (Data Distribution Service) 数据分发服务-规范中文翻译_012

MultiTopic允许一种更复杂的订阅场景,这种场景下订阅方可以选择同时订阅多个主题的数据,并将从多个主题接收的数据组合成单个结果类型(由继承的type_name指定)。然后根据参数为expression_parameters的subscription_expression属性,对这些数据进行过滤(选择)甚至重新排列(聚合/投影)。

  • subscription_expression属性是一个字符串,用于标识从关联主题中选择和重新排列数据。它类似于一个SQL语句,其中SELECT部分提供要保留的字段,FROM部分提供字段来源的主题名称,WHERE部分提供内容过滤器。组合的主题可能具有不同的类型,但它们受到限制,因为用于NATURAL JOIN操作的字段类型必须相同。
  • expression_parameters属性是一个字符串序列,它为subscription_expression中的“parameters”(即“%n”标记)赋值。提供的参数数量必须与subscription_expression中的请求值一致(即%n符号的数量)。
  • 只要与MultiTopic相关的任何主题的数据发生修改,就会通过常规的监听器或条件机制(参见2.2.4,监听器,条件和等待集)提醒与MultiTopic关联的DataReader实体。
  • 与MultiTopic关联的DataReader实体会访问以下实例,这些实例在DataReader端通过多个DataWriter实体写入的实例“构造”。只要所有构成主题实例都存在,MultiTopic访问实例就会存在。view_state和instance_state是根据构成实例的相应状态计算的:
  • 如果至少有一个构成实例具有view_state = NEW,则MultiTopic实例的view_state(参见2.2.2.5.1)为NEW,否则为NOT_NEW。
  • 如果所有构成主题实例的instance_state为ALIVE,则MultiTopic实例的instance_state(参见2.2.2.5.1)为“ALIVE”。如果至少有一个构成主题实例是NOT_ALIVE_DISPOSED,则为“NOT_ALIVE_DISPOSED”,否则为NOT_ALIVE_NO_WRITERS。

附件B描述了subscription_expression和expression_parameters的语法。

2.2.2.3.4.1 subscription_expression

与MultiTopic相关联的subscription_expressionjie,即创建MultiTopic时指定的表达式。

2.2.2.3.4.2 get_expression_parameters

此方法返回与MultiTopic关联的expression_parameters,即上次成功调用set_expression_parameters时指定的参数,或者从未调用set_expression_parameters,创建MultiTopic时指定的参数。

2.2.2.3.4.3 set_expression_parameters

此方法改变与MultiTopic关联的expression_parameters。


译文连载

DDS规范-上一篇:DDS (Data Distribution Service) 数据分发服务-规范中文翻译_011

DDS规范-下一篇:待续

RTPS规范-译文连载:实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_001


相关链接

【What:什么是DDS? 】【Why:为什么选择DDS?

【How:DDS如何工作?

DDS科普:一文读懂DDS(数据分发服务)

产品介绍:BLUE DCS分布式数据连接解决方案

产品试用: 海蓝云平台-Blue DCS


DDS (Data Distribution Service) 数据分发服务-规范中文翻译_012