データモデル

データモデルの文法

 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の詳細は、「データタイプ」を参照してください。

更新情報

■コメントおよび更新の一覧

コメント日コメント内容対応更新日
2025-03-07事務局
・Metadataの記述が中途半端に残っている
・StructuredValueのAttribute neme部分の記述が曖昧
・Metadataの不要な記述を削除
・StructuredValueの記述を修正
尚、仕様に変更はなく、説明の修正です
2025-03-07