データモデル

データモデルの文法

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