ケーススタディ#2 – CSVから共通データ仕様の形式への変換 (8/14) — 部位(BuildingComponent)

部位(BuildingComponent)の項目への変換ルール

 ケーススタディ#1の部位一覧表の例で「部位(BuildingComponent)」から選択した項目は以下の通りです。各項目の変換の仕方も表内記入しました。

元となるCSV表の項目名共通データ仕様上の項目名表形式への変換の説明
(なし)id部位IDです。部位一覧表の項目には、CSVの各行を一意に識別する項目はありません。運用上はnameなどが一意に命名されているかもしれませんが、それが建物内で一意なのか、全世界で一意なのか不明確です。そこでここでは、UUID1と呼ばれるIDを使ってidを作る事にします。尚、UUIDは作成する度に違う文字列になるので、これを使えるのは最初の一度だけです。二度目からはちゃんと引き継いでidが変わらない様にする必要があります。
(なし)typeデータモデルのtypeを登録します。ここでは”BuildingComponent”を登録します
部位種別category設置した日付です。そのままコピーします
部位名称name製造年月日です。そのままコピーします
説明description設備情報として公開可能な詳細情報です。そのままコピーします
管理通番refBuildingこの設備が部位が存在する建物の建物IDです。オーナーの法人番号と、管理通番と組み合わせてidの文字列を作成します。オーナーを区別する項目が無い為、法人番号は固定値で設定します
場所大分類zoneInstalled[0]場所の大分類です。そのままコピーします
場所中分類zoneInstalled[1]場所の中分類です。そのままコピーします。
場所小分類zoneInstalled[2]場所の小分類です。そのままコピーします。
場所備考zoneRemarks前項の補足情報です。そのままコピーします。

CSV表の準備

 ケーススタディ#1の部位一覧表の例を使います。

■入力となる表

建物名管理通番部位種別部位名称説明場所大分類場所中分類場所小分類場所備考
呉市吉浦市民センター01234567窓-1F-支所-001建物内部1F吉浦支所
呉市吉浦市民センター01234567ロールスクリーン・ブラインドロブ-1F-支所-002建物内部1F吉浦支所
呉市吉浦市民センター01234567棚-1F-支所-003建物内部1F吉浦支所
呉市吉浦市民センター01234567内壁内壁-1F-支所-004建物内部1F男子トイレ
呉市吉浦市民センター01234567開き戸開戸-1F-支所-005建物内部1F男子トイレ
呉市吉浦市民センター01234567窓-1F-支所-006建物内部1F男子トイレ
呉市吉浦市民センター01234567入口ドア(手動)ドア-1F-支所-007建物内部1F正面玄関
呉市吉浦市民センター01234567風除室風除-1F-支所-008建物内部1F正面玄関
呉市立吉浦小学校03000012内壁内壁-2F-吉小-001校舎2F1年1組
呉市立吉浦小学校03000012天井天井-2F-吉小-001校舎2F1年1組
呉市立吉浦小学校03000012床-2F-吉小-001人造石校舎2F1年1組
呉市立吉浦小学校03000012窓-2F-吉小-001校舎2F1年1組
呉市立吉浦小学校03000012カーテンレールカー-2F-吉小-001YJJ校舎2F1年1組
呉市立吉浦小学校03000012踏面踏面-2F-吉小-001校舎2F西階段室
呉市立吉浦小学校03000012蹴上蹴上-2F-吉小-001校舎2F西階段室
呉市立吉浦小学校03000012ノンスリップノス-2F-吉小-001スベラヘンW18校舎2F西階段室
呉市立吉浦小学校03000012床-2F-吉小-001フローリング体育館舞台 
呉市立吉浦中学校04000008内壁内壁-2F-吉中-001校舎3F3年A組
呉市立吉浦中学校04000008天井天井-2F-吉中-001校舎3F3年A組
呉市立吉浦中学校04000008床-2F-吉中-001タイルカーペット校舎3F3年A組
呉市立吉浦中学校04000008窓-2F-吉中-001校舎3F3年A組
呉市立吉浦中学校04000008カーテンレールカー-2F-吉中-001YJJ校舎3F3年A組
呉市立吉浦中学校04000008舗装・砂利敷舗装-2F-吉中-001屋外正門 
呉市立吉浦中学校04000008門扉門扉-2F-吉中-001スチール門扉H1500屋外正門 
呉市立吉浦中学校04000008倉庫倉庫-2F-吉中-001屋外グランド 

■CSVファイルの内容

建物名,管理通番,部位種別,部位名称,説明,場所大分類,場所中分類,場所小分類,場所備考
呉市吉浦市民センター,01234567,窓,窓-1F-支所-001,,建物内部,1F,吉浦支所,
呉市吉浦市民センター,01234567,ロールスクリーン・ブラインド,ロブ-1F-支所-002,,建物内部,1F,吉浦支所,
呉市吉浦市民センター,01234567,棚,棚-1F-支所-003,,建物内部,1F,吉浦支所,
呉市吉浦市民センター,01234567,内壁,内壁-1F-支所-004,,建物内部,1F,男子トイレ,
呉市吉浦市民センター,01234567,開き戸,開戸-1F-支所-005,,建物内部,1F,男子トイレ,
呉市吉浦市民センター,01234567,窓,窓-1F-支所-006,,建物内部,1F,男子トイレ,
呉市吉浦市民センター,01234567,入口ドア(手動),ドア-1F-支所-007,,建物内部,1F,正面玄関,
呉市吉浦市民センター,01234567,風除室,風除-1F-支所-008,,建物内部,1F,正面玄関,
呉市立吉浦小学校,03000012,内壁,内壁-2F-吉小-001,,校舎,2F,1年1組,
呉市立吉浦小学校,03000012,天井,天井-2F-吉小-001,,校舎,2F,1年1組,
呉市立吉浦小学校,03000012,床,床-2F-吉小-001,人造石,校舎,2F,1年1組,
呉市立吉浦小学校,03000012,窓,窓-2F-吉小-001,,校舎,2F,1年1組,
呉市立吉浦小学校,03000012,カーテンレール,カー-2F-吉小-001,YJJ,校舎,2F,1年1組,
呉市立吉浦小学校,03000012,踏面,踏面-2F-吉小-001,,校舎,2F,西階段室,
呉市立吉浦小学校,03000012,蹴上,蹴上-2F-吉小-001,,校舎,2F,西階段室,
呉市立吉浦小学校,03000012,ノンスリップ,ノス-2F-吉小-001,スベラヘンW18,校舎,2F,西階段室,
呉市立吉浦小学校,03000012,床,床-2F-吉小-001,フローリング,体育館,舞台,,
呉市立吉浦中学校,04000008,内壁,内壁-2F-吉中-001,,校舎,3F,3年A組,
呉市立吉浦中学校,04000008,天井,天井-2F-吉中-001,,校舎,3F,3年A組,
呉市立吉浦中学校,04000008,床,床-2F-吉中-001,タイルカーペット,校舎,3F,3年A組,
呉市立吉浦中学校,04000008,窓,窓-2F-吉中-001,,校舎,3F,3年A組,
呉市立吉浦中学校,04000008,カーテンレール,カー-2F-吉中-001,YJJ,校舎,3F,3年A組,
呉市立吉浦中学校,04000008,舗装・砂利敷,舗装-2F-吉中-001,,屋外,正門,,
呉市立吉浦中学校,04000008,門扉,門扉-2F-吉中-001,スチール門扉H1500,屋外,正門,,
呉市立吉浦中学校,04000008,倉庫,倉庫-2F-吉中-001,,屋外,グランド,,

部位情報の変換

 このケーススタディでは”ctoj”というツールを使いますので、csvファイルを作成する際にはutf-8で書き込んでおきます。

このケーススタディでは以下の様に拡張JSON Schemaを策定しました。拡張JSON Schemaとは、本協議会が公開しているJSON SchemaにcsvからJSONファイルに変換する際のルールを追記したものです。詳しくはツールのサイトを参照してください。「部位」の場合は例えば以下となります。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://ppp-database.org/spec/datamodel/BuildingComponent/",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "dataSource": {
        "dataSource": "uuid",    ---------------------------- UUIDでidを生成します
        "prefix": "urn:ngsi-ld:BuildingComponent:"
      }
    },
    "type": {"const": "BuildingComponent"},
    "category": {
      "type": "object",
      "properties": {
        "type": {"const": "Text"},
        "value": {
          "type": "string",
          "dataSource": {"csvAttr": "部位種別"}
        }
      },
      "required": ["type", "value"]
    },
    "name": {
      "type": "object",
      "properties": {
        "type": {"const": "Text"},
        "value": {
          "type": "string",
          "dataSource": {"csvAttr": "部位名称"}
        }
      },
      "required": ["type", "value"]
    },
--以下略--

 この拡張JSON Schemaを指定してctojツールを実行すると、以下の様に共通データ仕様の形式変換した結果が得られます。下図は変換後の先頭部分です。

  [
    {
      "id": "urn:ngsi-ld:BuildingComponent:a95c7e58-2973-451d-bac0-d5e4179f30fa",    --- UUIDでidが生成されています
      "type": "BuildingComponent",
      "category": {
        "type": "Text",
        "value": "窓"
      },
      "name": {
        "type": "Text",
        "value": "窓-1F-支所-001"
      },
      "refBuilding": {
        "type": "Relationship",
        "value": "urn:ngsi-ld:Building:JP9000020342025-01234567"
      },
      "zoneInstalled": {
        "type": "Array",
        "value": [
          "建物内部",
          "1F",
          "吉浦支所"
        ]
      }
    },
    {
      "id": "urn:ngsi-ld:BuildingComponent:764e21e8-f6ed-4e9c-9aa4-e2b1f66019d4",
      "type": "BuildingComponent",
      "category": {
        "type": "Text",
        "value": "ロールスクリーン・ブラインド"
      },
      "name": {
        "type": "Text",
        "value": "ロブ-1F-支所-002"
      },
      "refBuilding": {
        "type": "Relationship",
        "value": "urn:ngsi-ld:Building:JP9000020342025-01234567"
      },
      "zoneInstalled": {
        "type": "Array",
        "value": [
          "建物内部",
          "1F",
          "吉浦支所"
        ]
      }
    },

--以下略--
  1. UUID (Universally Unique Identifier): 世界で一意となる文字列であり、ソフトウェアで広く用いられる手法です。その実装には多様なものがあります。本ユースケースではランダムな文字列としています。但し、含まれる文字は0-9の数字とa-fの英小文字の16種類をハイフンで繋いだものです。 ↩︎