データモデルの文法
2023-04-01
NGSI V2のデータモデルは以下の形式です。尚、NGSI V2ではNormalized形式とkeyValues形式を許していますが、以下はNormalized形式です。
以下の記述は、”::=”の左辺の定義の書き方を右辺で示しています。書き方が複数ある場合は、縦棒”|”で分けて記載してあります。右辺に出てくる”<“と”>”で囲まれた文字列は変数です。つまり、その変数の定義は別に記載しているか、説明の中で記載しています。
文法 | 説明 |
---|---|
<Entity> ::= { “id”: <Entity id>, “type”: <Entity type>, <Attribute>, <Attribute>, ・・・・ } | 一つひとつのEntityは必ず波括弧のペアで囲みます。 idとtypeは必須です。NGSI V2はJSONで記述するので、左の文の各行はJSONの文法では<要素>という事になります。従って、<要素>の間はカンマで区切ります。 |
<Entity id> ::= “<識別子>” | <識別子>については、こちらを参照してください。 idの<識別子>の規則も記載してあります |
<Entity type> ::= “<識別子>” | <識別子>については、こちらを参照してください。 Entity typeの<識別子>の規則も記載してあります |
<Attribute> ::= <Non-structured Attribute> | <Structured Attribute> | 値が構造化していない場合の定義です。 縦棒は「または」と言う意味です 値が構造化している場合の定義です。 |
<Non-structured Attribute> ::= <Attribute name> : { “type”: <Attribute type>, “value”: <Attribute value> } | ここは、値が構造化しない場合の形式です。 typeの省略については後述します。 valueを省略すると、valueにnullを指定したと解釈されます。また、座標の値の時は、”value”の代わりに”coordinates”を使います。 NGSI V2ではmetadataの指定が可能ですが、使用を避けるため記述していません |
<Attribute name> ::= “<識別子>” | 識別子>については、こちらを参照してください。 Attribute nameの<識別子>の規則も記載してあります |
<Attribute type> ::= “<識別子>” | <識別子>については、こちらを参照してください。 Attribute typeの<識別子>の規則も記載してあります |
<Attribute value> ::= <値> | この<値>はJSONの<値>ですが、<object>を除きます。 <object>に相当するの定義は、構造化した場合の形式である、<Structured Attribute>です。 |
<Metadata name> ::= “<識別子>” | <識別子>については、こちらを参照してください。 Metadata nameの<識別子>の規則も記載してあります |
<Metadata type> ::= “<識別子>” | <識別子>については、こちらを参照してください。 Metadata typeの<識別子>の規則も記載してあります |
<Metadata value> ::= <値> | この<値>はJSONの<値>です |
<Structured Attribute> ::= <Attribute name> : { “type”: <Structured attribute type>, “value” :<Structured value> } | 値が構造化した場合の形式です。 NGSI V2ではmetadataの指定が可能ですが、使用を避けるため記述していません |
<Structured attribute type> ::= “StructuredValue” | <Attribute type> | <Attribute type>にText, Number, Boolean, noneは指定できません。 |
<Structured value> ::= { <Sub-attribute>, <Sub-attribute>, ・・・・ } | { “type”: “geo:json”, “value”: { <geo:json記述> } } | 値が構造化した場合の規定です。NGSI V2に規定が無いため、追加しています。 座標を表現する形式です。 <geo:json記述>について記載しませんが、点を表す形式(Point)と面を表す形式(Polygon)については、策定データ仕様に記述してあります。 |
<Sub-attribute> ::= | <Attribute名> : <Structured value> |
StructuredValueの補足
構造化された値の中の形式は、NGSI V2でkeyValuesオプションを指定した形式と同じですが、optionsでkeyValuesを指定する必要はありません。これは、構造化された項目の値はJSONのObjectと解釈されるので、かなり幅広い表現が可能となるためです。
Attribute typeの補足
keyValuesオプションを指定したときには、その仕様によりAttribute typeは指定できません。従って、デフォルトデータタイプ以外のデータタイプもAttribute typeに指定する事は出来ません。従って、Attribute typeを指定するデータモデルを策定したとしても、Entityを読み出した時にはデータモデルで規定したAttribute typeではなく、デフォルトデータタイプが読み出される可能性があります。プログラムを作成する際には注意が必要です。
Attribute typeの省略
2023-04-01
idとtypeは特別なAttributeであり、Attribute typeは指定しませんが、idとtype以外でもEntity登録時にはAttribute typeを省略できます。省略するとValueの値の形式により、Boolean、Text、Number、StructuredValue、およびnoneが指定されたと解釈されます。Boolean、Text、Number、およびStructuredValueは、デフォルトデータタイプと呼びます。noneとはvalueにnullを指定したとき、またはvalueを省略したときに解釈されるタイプです。
例えば、Attribute typeを省略して、Valueの値にダブルクォートで囲まれた文字列を指定すると、Attribute typeにTextが指定されたと解釈されます。尚、Attribute typeの詳細は、「データタイプ」を参照してください。