如何在 Orion Context Broker NGSIv2 上创建高级订阅表达式?



根据 Orion 上下文代理 NGSIv2 的官方文档:

您可以在条件中包含筛选表达式。例如,到 不仅在压力发生变化时收到通知,而且在压力发生变化时收到通知 范围 700-800。这是一个高级主题,请参阅"订阅" 部分。

在NGSIv2订阅中,没有像NGSIv1这样的notifyConditions,它被替换为subject.condition object:

condition:触发通知的条件。此字段是可选的 它可能包含两个属性,都是可选的:

  • attrs:属性名称数组

  • expression:由qmqgeorel组成的表达式,geometrycoords(请参阅上面的"列出实体"操作( 字段(

当我们使用subject.condition.attrs,它包含一个属性名称数组,这些名称定义了"触发属性",即在创建/更改时由于实体创建或更新而触发通知的属性。

但是,对于subject.condition.expression官方文档中没有示例。

得到拼图碎片可以推断出:

  • 可以结合subject.condition.expressionsubject.condition.attrs。如果我设置和属性不同的表达式,例如。带有"boo>10"表情的attr foo会做什么?这会表现得像OR还是AND
  • 可以设置多个表达式。 这会表现得像OR还是AND

最好有一些这些更复杂的订阅示例,这些示例结合了在订阅中分隔实体的不同方法。

注意:此问题与 Orion 版本 1.7.0+ 有关

我认为以下示例来自 NGSIv2 概述,适用于已经了解 NGSIv1 的开发人员演示文稿(当前版本中的幻灯片 34(,可以帮助澄清。

示例:订阅以车辆结尾的任何类型的任何实体(例如道路车辆、飞行车辆等(中的速度变化 当速度大于 90 时,其平均元数据介于 80 和 90 之间,并且车辆到马德里市中心的距离小于 100 公里

请求:

POST /v2/subscriptions
...
{  
"subject": {
"entities": [
{
"idPattern": ".*",
"typePattern": ".*Vehicle"
},
],
"condition": {
"attrs": [ "speed"  ],
"expression":  {
"q": "speed>90",
"mq": "speed.average==80..100",
"georel": "near;maxDistance:100000",
"geometry": "point",
"coords": "40.418889,-3.691944"
}
}
},
...
}

如本例所示,您可以使用不同的条件(qmq、地理查询等(,它们在 AND 意义上进行解释。此外,qmq允许在 AND 意义上解释复杂的表达式,例如:

"q": "speed>90;engine!=fail",

请注意,qmq出现在订阅中时expression遵循与它们出现在同步查询中的规则相同的规则(即GET /v2/entities?q=...(。这些规则在 NGSIv2 规范中的"简单查询语言"部分中进行了描述。

最新更新