2017-08-03 99 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的「簡單查詢語言」部分進行了描述。