7.7.1 Подстановочные знаки в названиях тем
Разделитель уровня темы используется для введения структуры в название темы. Если он присутствует, он делит название темы на несколько "тематических уровней".
Фильтр тем подписки может содержать специальные символы подстановки, которые позволяют сразу подписываться на несколько тем.
Символы подстановки могут использоваться в фильтрах тем, но НЕ ДОЛЖНЫ использоваться в названии темы [MQTT-7.7.1-1].
7.7.1.1 Разделитель уровня
Прямая косая черта ('/' U + 002F) используется для разделения каждого уровня в дереве тем и обеспечения иерархической структуры названий тем. Использование разделителя уровня тем является важным, когда один из двух символов подстановки встречается в фильтрах тем, указанных Клиентами-подписчиками. Разделители тематических уровней могут отображаться в любом месте в фильтре тем или названии темы. Смежные разделители уровня тем указывают на уровень темы нулевой длины.
7.7.1.2 Многоуровневый шаблон
Знак решетки ('#' U + 0023) является подстановочным символом, который соответствует любому количеству уровней внутри темы. Многоуровневый подстановочный знак представляет собой родительский и любое количество дочерних уровней. Многоуровневый подстановочный знак ДОЛЖЕН быть указан либо самостоятельно, либо после разделителя уровня тем. В любом случае, он ДОЛЖЕН быть последним символом, указанным в фильтре тем [MQTT-7.7.1-2].
Пример - Если Клиент подписывается на "спорт/теннис/ теннисист1/#", он будет получать сообщения, опубликованные с использованием таких названий тем:
- "Спорт/теннис/теннисист1";
- "Спорт/теннис/теннисист1/рейтинг";
- "Спорт/теннис/теннисист1/счет/Уимблдон".
Кроме этого:
- "спорт/#" также соответствует единственному "спорту", так как # включает родительский уровень;
- "#" действителен и будет получать каждое сообщение приложения;
- "Спорт/теннис/#" действителен;
- "Спорт/теннис#" недействителен;
- "Спорт/теннис/#/рейтинг" недействителен.
7.7.1.3 Подстановочный шаблон одного уровня
Знак плюса ('+' U + 002В) является подстановочным символом, который соответствует только одному тематическому уровню.
Одноуровневый шаблон можно использовать на любом уровне фильтра тем, включая первый и последний уровни. Если он используется, он ДОЛЖЕН занимать весь уровень фильтра [MQTT-7.7.1-3]. Он может использоваться на нескольких уровнях в фильтре тем, и может использоваться в сочетании с многоуровневым шаблоном.
Пример - "спорт/теннис/+" соответствует "Спорт/теннис/ теннисист1" и "Спорт/теннис/ теннисист2", но не "Спорт/теннис/ теннисист1/рейтинг". Кроме того, поскольку одноуровневый шаблон соответствует только одному уровню, "Спорт/+" не соответствует "спорт", но он соответствует "спорт/".
Кроме этого:
- "+" действителен;
- "+/Теннис/#" действителен;
- "Спорт+" недействителен;
- "Спорт/+/теннисист1" действителен;
- "/финансы" соответствует "+/+" и "/+", но не "+".