データモデルの文法
2023-04-01/2025-03-07
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> ::= “<識別子>” | <識別子>については、こちらを参照してください。 |
<Entity type> ::= “<識別子>” | |
<Attribute> ::= <Non-structured-attr> | <Structured-attr> | 値が構造化していない場合の定義です。 縦棒は「または」と言う意味です 値が構造化している場合の定義です。 |
<Non-structured-attr> ::= <Attr-name> : { “type”: <Attr-type>, “value”: <Attr-value> } | ここは、値が構造化しない場合の形式です。 typeの省略については後述します。 valueを省略すると、valueにnullを指定したと解釈されます。 情報モデルで記載したようにNGSI V2ではmetadataの指定が可能ですが、使用を避けるため記述していません |
<Attr-name> ::= “<識別子>” | |
<Attr-type> ::= “<識別子>” | ここに記載しても良い識別子については、データタイプを参照してください。但し、StructuredValueを除きます。 |
<Attr-value> ::= <値> | この<値>はJSONの<値>ですが、<object>を除きます。値の形式については<Attribute type>と一致している必要があります。 <object>に相当するの定義は、構造化した場合の形式である、<Structured Attribute>です。 |
<Structured-attr> ::= <Attribute name> : { “type”: <Structured-attr-type>, “value” :<Structured-value> } | 値が構造化した場合の形式です。 情報モデルで記載したようにNGSI V2ではmetadataの指定が可能ですが、使用を避けるため記述していません |
<Structured-attr-type> ::= “StructuredValue” | <Attr-type> | <Attribute type>に”Text”, “Number”, “Boolean”, “None”は指定できません。 |
<Structured-value> ::= <object> | { “type”: “geo:json”, “value”: { <geo:json記述> } } | 値が構造化した場合の規定です。 <object>はJSONの値の内の<object>です。 座標を表現する形式です。 typeにgeo:pointやgeo:polygonなどを指定する事も可能ですが、共通データ仕様ではgeo:jsonで記述しているのでここでは省略します。<geo:json記述>の詳細についてはデータパーツをご覧ください。 |
StructuredValueの補足
構造化された値の中の形式は、NGSI V2でkeyValuesオプションを指定した形式と同じですが、optionsでkeyValuesを指定する必要はありません。これは、構造化された項目の値はJSONのObjectと解釈されるので、かなり幅広い表現が可能となるためです。
Objectの中のkeyはJSON上は日本語も利用可能ですが、URL内に記述される事と、NGSI-LDではObjectの中のkeyもAttributeと定義されることから、共通データ仕様では識別子の規則に準拠することとしています。
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の詳細は、「データタイプ」を参照してください。
更新情報
■コメントおよび更新の一覧
コメント日 | コメント内容 | 対応 | 更新日 |
---|---|---|---|
事務局 ・Metadataの記述が中途半端に残っている ・StructuredValueのAttribute neme部分の記述が曖昧 | ・Metadataの不要な記述を削除 ・StructuredValueの記述を修正 尚、仕様に変更はなく、説明の修正です | ||