基本表現 -1


JSON Schemaの骨格の定義

 JSON文は、波括弧で囲むオブジェクト、大括弧で囲むArray、 キーとバリューをコロンを挟んで繋げるマップ、および数値や文字列などの値を組み合わせて記述します。NGSI V2もJSONに準拠していますから、この構造は同じです。例えば、単純な電子帳票は以下の様に記述されます。


{
   "id": "abc0001",
   "type": "Example",
   "child":
       "type": "StructuredValue",
       "value": {
           "age": 10
           "name": "太郎",
           "nickname":  ["たろちゃん", "ター君"]
       }
   }
}

 この例ではabc001という番号が振られれている電子帳票には「太郎」君の情報として、あだ名が「たろちゃん」と「ター君」の二つがあると記述されています。この例では、マップとしては「"id":"abc0001"}、「"type": "Example"」、「"child":{・・・}」、「"type": "StructuredValue"」、「"value": {・・・}」、「"age": 10」、「"name": "太郎"」、「"nickname":  [・・・]」の8種類が定義されています。尚、マップの中のコロンの左側をキーと呼び、右側をバリューと呼びます。バリューには別のオブジェクトやArrayや値が含まれる入れ子の構造となっています。そこで、JSON Schemaでは、このExampleという帳票の定義(データモデルを以下のルールで表現します。
  • オブジェクト(波括弧)
    JSON Schema内では、波括弧の中に「"type": "object"」と「不properties": (オブジェクト内の定義)を記述する事で、その波括弧の中はオブジェクトを表現している事を示します。オブジェクトの中身はマップだけですから、後述するマップも記述します。マっプである事を示すのは、「"properties":{・・・}です。
  • Array(大括弧)
    同様に、波括弧の中に「"type": "list"」と「"items": "(Array内の定義)を記述する事で表現します。Arrayの中には、マップと値とArrayが入り得ますので、"items"にはそれらの内容を示す情報を記述します
  • マップ
    既に記述した様に、JSONではマップは必ずオブジェクトの中に記述されますので、前記の"properties"の中にというキーを記述し、そのキーのバリューに波括弧を記述し、マップの記述を並べます。マップのキーはAttribute名であり、バリューはオブジェクト、Arrayまたは値を記述します

  • 値は、波括弧の中に、"type":"string"や"type":integer"などと書きます。この"string"や"integer"は値の属性によって変わります
 細かく説明するよりも、例を見た方が分かりやすいと思うので、前記のJSON文のJSON Schemaを見てみましょう。


{
   "type": "object",
   "properties": {
       "id": {
           "type": "string"
       },
       "type": {
           "type": "string"
       },
       "child": {
           "type": "object",
           "properties": {
               "type": {
                   "type": "string"
               },
               "value": {
                   "type": "object",
                   "properties": {
                       "age": {
                           "type": "integer"
                       },
                       "name": {
                           "type": "string"
                       },
                       "nickname": {
                           "type": "array",
                           "items": {
                               "type": "string"
                           }
                       }
                   }
               }
           }
       }
   }
}

JSON SchemaのキーワードであるtypeとNGSI V2でキーとなっているtypeの区別が付く様に、JSON Schemaのキーワードは赤字で記述しました。Entity全体は波括弧で囲われているので、まずは"type":"object"で始まります。オブジェクトの中身はidとtypeとchildのみっつのマップなので、"properties"を記述して、その中にみっつのAttribute名を並べます。idとtypeのバリューは、文字列なので、"type":"string"を波括弧でくるんで記述します。childのバリューはtypeとvalueをキーとするマップなので、propertiesを記述して、そのバリューとして波括弧で囲んでtypeとvalueを並べます。typeは文字列なので、"type":"string"を記述します。一方、vlueの方は、波括弧なので、"type:"object"を記述します。サブアトリビュートはpropertiesを記述して、そのバリューとしてage、name、nicjnameを並べます。areは数値なので、"type":"integer"、nameは文字列なので、"type":"string"です。nicknameは、値ではなくArrayなので、"type":"array"を記述し、Arrayの中身の値は"items"を記述し、そのバリューとして"type":"string"を記述します。
 この様に、結構煩雑ではありますが、地道に構造を記述していく事でJSON Schemaが出来上がります。

 改めて、オブジェクト、Array、マップ、および値の形式をまとめます。


オブジェクト
{
   "type": "object",
   "properties": {
       ・・・マップの並び・・・
   },
       ・・・補足情報の並び・・・
}
Array
{
   "type": "array",
   "items": {
       ・・・オブジェクト、Arrayまたは値・・・
   },
       ・・・補足情報の並び・・・
}
マップ
"マップのキー": {
       ・・・オブジェクト、Array、または値・・・
}

{
   "type": "string"、"integer"、"number"、または"boolean",
       ・・・補足情報の並び・・・
}