2017-08-03 69 views
3

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

您可以在条件过滤表达式。例如,至 不仅得到通知压力是否变化,但如果它在 变化范围700-800。这是一个高级主题,请参阅NGSIv2 specification中的“订阅” 部分。

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

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

  • attrs:属性名称的数组

  • expression:表达式组成的qmqgeorelgeometrycoords(请参阅上面关于此 字段的“列表实体”操作)

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

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

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

  • 可以做结合subject.condition.expressionsubject.condition.attrs。如果我设置和表达不同的表达,例如。 attr foo表达'boo> 10'它会做什么?这会像ORAND
  • 可以设置多个表达式。这会像ORAND

将这些更复杂的订阅的一些例子结合在订阅中定义实体的不同方式将会很好。

注:这个问题是关系到猎户座版本1.7.0+

回答

2

我觉得下面的例子中,从NGSIv2 Overview for Developers That Already Know NGSIv1演示(在当前版本幻灯片34),可以帮助澄清。

:订阅速度变化在任何类型的载体(如RoadVehicle,AirVehicle等结束的任何实体)每当速度大于90其平均元数据是80和90,并马德里市中心车辆距离之间小于百公里

请求:

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等),它们在AND意义上被解释。 Morevoer,qmq让复杂的表达式也解释在和责任感,比如:

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

注意qmq当他们出现在订阅expression遵循比那些相同的规则,当他们出现在同步查询(即GET /v2/entities?q=...)。这些规则在NGSIv2 specification的“简单查询语言”部分进行了描述。