建物内の場所の情報の作成
既に建物(Building)の情報は作成しましたが、場所(Zones)の情報が抜けていました。これは、csvファイルが別々であると想定しているためです。NGSI V2の仕様では、同じidのEntityのAttributeは別々に作成しても良いので、ここでも別々のJSONファイルとして作成する事とします。
■建物情報 (Building)
Attribute名 | 補足 | |
---|---|---|
施設ID | id | 建物(Building)と同様にidは不動産IDの代替として施設IDから生成します |
施設名 | name | 施設名の値をそのまま利用します |
大分類 | zones.zonename | 建物内の場所の大分類です |
中分類 | zones.subZonename[0] | 大分類を更に分類した名称です。subzoneNameのarrayの一つ目の要素として登録します。 |
細分類 | zones.subZonename[1][n] | 中分類を更に分類した名称です。subzoneNameのarrayの二つ目の要素にarrayの要素として登録します。 |
想定FMシステムが出力するcsvファイルの内容は以下の通りとしました。幅が広いので、途中で折り返して表示しています。
このデータをcsvファイルとして書き込みます。その際、”ctoj”の指定通り、utf-8で書き込みます。
次に、このcsvファイルをJSON形式に変換しますが、拡張JSON Schemaは例えば以下となります。詳細はツールのwebサイトをご覧ください。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://ppp-database.org/spec/datamodel/Building/",
"type": "object",
"properties": {
--途中略--
"zones": {
"type": "object",
"properties": {
"type": {"const": "Text"},
"value": {
"type": "array",
"items": {
"type": "object",
"properties": {
"zoneName": {
"type": "string",
"dataSource": {"csvAttr": "大分類"}
},
"subzones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"subzoneName": {
"type": "array",
"items": [
{
"type": "string",
"dataSource": {"csvAttr": "中分類"}
},
{
"type": "array",
"items": {
"type": "string",
"dataSource": {"csvAttr": "細分類"}
}
}
],
"ordered": true
}
},
"required": ["subzoneName"]
},
"mergekey": ["subzoneName",0]
}
},
"required": ["zoneName"]
},
"mergekey": "zoneName"
}
},
"required": ["type", "value"],
"merge": "union"
},
--以下略--
これをctojツールに入力すると、以下の様にFMシステムの出力を共通データ仕様に形式変換した結果が得られます。
[
{
"id": "urn:ngsi-ld:Building:JP9000020342025-01234567",
"type": "Building",
"zones": {
"type": "Text",
"value": [
{
"zoneName": "建物内部",
"subzones": [
{"subzoneName": ["1F",["吉浦支所","男子トイレ","女子トイレ","正面玄関","階段室","共用ロビー"]]},
{"subzoneName": ["2F",["市民センター窓口","音楽室","調理室","図書室","階段室","共用ロビー"]]},
{"subzoneName": ["3F",["学習室1","学習室2","階段室","共用ロビー"]]},
{"subzoneName": ["4F",["ホール","控室1","階段室","共用ロビー"]]}
]
},
{
"zoneName": "建物外部",
"subzones": [
{"subzoneName": ["屋上",["塔屋","屋上床"]]},
{"subzoneName": ["外壁",["北面","南面","西面","東面"]]},
{"subzoneName": ["アプローチ"]}
]
},
{
"zoneName": "建物周辺",
"subzones": [
{"subzoneName": ["駐車場"]},
{"subzoneName": ["植栽"]}
]
}
]
}
},
--以下略--