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

时间:2017-08-03 17:04:16

标签: fiware fiware-orion

根据official documentation of Orion Context Broker NGSIv2

  

您可以在条件中包含过滤表达式。例如,到   不仅会在压力变化时获得通知,而且如果压力发生变化   范围700-800。这是一个高级主题,请参阅“订阅”   NGSIv2 specification中的部分。

在NGSIv2订阅中没有+,例如NGSIv1,它被subject.condition对象取代:

  

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

     
      
  • condition:属性名称数组

  •   
  • attrs:由expressionqmq组成的表达式,   georelgeometry(请参阅上面的“列出实体”操作   场)

  •   

当我们使用coords时,它包含一系列属性名称,这些名称定义了“触发属性”,即由于实体创建或更新而创建/更改时触发通知的属性。

但是,对于subject.condition.attrs,官方文件中没有例子。

可以推断拼图:

  • 可以合并subject.condition.expressionsubject.condition.expression。如果我设置和表达不同的表达式,例如。 attr foo表达'boo> 10'它会做什么?这会表现得像subject.condition.attrsOR吗?
  • 可以设置多个表达式。这会表现得像ANDOR吗?

将这些更复杂的订阅的一些示例与订阅中的实体分隔的不同方式结合起来会很不错。

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

有关

1 个答案:

答案 0 :(得分:2)

我认为以下示例来自NGSIv2 Overview for Developers That Already Know NGSIv1演示文稿(当前版本中的幻灯片34),有助于澄清。

  

示例:每当速度 speed 更改>大于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,geoquery等),并且它们在AND意义上进行解释。 Morevoer,qmq允许在AND意义上解释的复杂表达式,例如:

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

请注意qmq出现在订阅expression时遵循的规则与同步查询中显示的规则相同(即GET /v2/entities?q=...)。这些规则在NGSIv2 specification

中的“简单查询语言”部分中进行了描述