Fiware 如何在Orion上下文代理NGSIv2上创建高级订阅表达式?

Fiware 如何在Orion上下文代理NGSIv2上创建高级订阅表达式?,fiware,fiware-orion,Fiware,Fiware Orion,根据: 可以在条件中包含过滤表达式。比如说 不仅当压力变化时,而且当压力在 范围在700-800之间。这是一个高级主题,请参阅“订阅” 中的节 在NGSIv2订阅中,没有任何notifyConditions,例如NGSIv1,它被subject.condition对象替换: 条件:触发通知的条件。此字段是可选的 它可能包含两个属性,都是可选的: attrs:属性名称数组 expression:由q、mq、georel组成的表达式, geometry和coords(有关此操作,请参阅上面的“列出

根据:

可以在条件中包含过滤表达式。比如说 不仅当压力变化时,而且当压力在 范围在700-800之间。这是一个高级主题,请参阅“订阅” 中的节

在NGSIv2订阅中,没有任何
notifyConditions
,例如NGSIv1,它被subject.condition对象替换:

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

  • attrs
    :属性名称数组

  • expression
    :由
    q
    mq
    georel
    组成的表达式,
    geometry
    coords
    (有关此操作,请参阅上面的“列出实体”操作 (现场)

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

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

获取拼图片段可以推断:

  • 可以组合
    subject.condition.expression
    subject.condition.attrs
    。如果我设置和属性不同的表达式,例如attr foo和表达式'boo>10',它会做什么?这会像
    一样吗
  • 可以设置多个表达式。这会像
    一样吗
如果能有一些更复杂的订阅的例子,结合订阅中实体的不同划分方式,那就更好了


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

我认为下面的演示示例(当前版本中的幻灯片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"
      }
      }
    },
   ...
}
如本例所示,您可以使用不同的条件(
q
mq
、geoquery等),并从和的角度对它们进行解释。此外,
q
mq
也允许在和的意义上解释复杂表达式,例如:

"q": "speed>90;engine!=fail",
请注意,
q
mq
出现在订阅
expression
中时遵循的规则与出现在同步查询中时遵循的规则相同(即
GET/v2/entities?q=…
)。中的“简单查询语言”部分介绍了这些规则