ケーススタディ#1 – 施設情報のcsvファイルを活用した多目的電子データ生成 (5/8)

建物内の場所の情報の作成

 既に建物(Building)の情報は作成しましたが、場所(Zones)の情報が抜けていました。これは、csvファイルが別々であると想定しているためです。NGSI V2の仕様では、同じidのEntityのAttributeは別々に作成しても良いので、ここでも別々のJSONファイルとして作成する事とします。

■建物情報 (Building)

csv項目名Attribute名補足
施設IDid建物(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": ["植栽"]}
            ]
          }
        ]
      }
    },
--以下略--