基本表現 -1
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",
・・・補足情報の並び・・・
} |
|