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类的一种特殊化,允许基于内容的订阅。
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类的一种特殊化,允许订阅方组合/过滤/重新排列来自多个主题的数据。
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。