属性の構造化された値 (Structured values for attributes)¶
22.5 や "yellow" などの単純な値以外にも、複雑な構造を属性値として使用できます。特に、属性は、作成/更新時にベクトルまたはキー値マップ (通常は "object" と呼ばれます) に設定できます。これらの値は、クエリおよび通知時に取得されます。
ベクトルまたはキーマップの値は、それぞれ JSON ベクターおよび JSON オブジェクトに直接対応します。したがって、次の create entity リクエストは、属性 "A" の値をベクトルに設定し、属性 "B" の値をキーマップ・オブジェクトに設定します エンティティ作成オペレーションでは表示しますが、属性更新に対しても同じことが適用されます。
NGSIv2 の場合 :
curl localhost:1026/v2/entities -s -S --header 'Content-Type: application/json' \
-d @- <<EOF
{
"id": "E1",
"type": "T",
"A": {
"type": "T",
"value": [
"22",
{
"x": [
"x1",
"x2"
],
"y": "3"
},
[
"z1",
"z2"
]
]
},
"B": {
"type": "T",
"value": {
"x": {
"x1": "a",
"x2": "b"
},
"y": [
"y1",
"y2"
]
}
}
}
EOF
NGSIv1 の場合 :
(curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' \
--header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
"contextElements": [
{
"type": "T1",
"isPattern": "false",
"id": "E1",
"attributes": [
{
"name": "A",
"type": "T",
"value": [
"22",
{
"x": [
"x1",
"x2"
],
"y": "3"
},
[
"z1",
"z2"
]
]
},
{
"name": "B",
"type": "T",
"value": {
"x": {
"x1": "a",
"x2": "b"
},
"y": [
"y1",
"y2"
]
}
}
]
}
],
"updateAction": "UPDATE"
}
EOF
属性の値は、Orion Context Broker によってフォーマットに依存しない表現で内部的に格納されます。
JSON 表現を揃えるために NGSIv1 の場合、すべてのベクトルとキーマップを走査した後の属性の構造化された値の最後の "leaf" 要素は、常に文字列と見なされることに注意してください。したがって、たとえば、{"x": 3.2 }
などの更新でフィールド値として JSON 番号を使用することはできますが、クエリや通知で文字列を取得します。例 : {"x":"3.2"}
NGSIv2 では、すべてのベクトルとキーマップを走査した後の属性の構造化された値の最後の "leaf" 要素は、正しいネイティブ JSON 型(数値、ブール値など)を使用します。したがって、たとえば、{"x": 3.2 }
のような更新でフィールド値として JSON 番号を使用すると、クエリと通知で数字を取得します。例 : {"x": 3.2 }