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

利用ツール概要

 このケーススタディでは、無償公開されているCoppell Technologiesの”ctoj“というツールを利用します。このケーススタディの末尾にツールの自製の記事を掲載しましたので、ctojがうまく動作しない場合や機能が足りない場合は自製も検討してみては如何でしょうか。

法人情報の作成

 このケーススタディのFMシステムには既に記述した様に法人情報を出力する機能は無い事としています。法人情報は自治体と包括施設管理業務を委託される事業者の2件しかありませんので、共通データ仕様に準拠した形式で手作業で作成しても構いませんが、ここでは前ページで用意したcsvファイルをCoppell Technplogiesが無償公開しているツールを使って作成しましょう。

 まずは、csvの項目名と共通データ仕様の項目名の対応表を作ります。前ページでは自治体と事業者の二件のデータを作りましたが、バリエーションを増やすために他の自治体や設備メーカも登録します。そこで、対応表は以下となります。

csv項目名変換後のAttribute名補足
法人番号id, identificationGroup.identification“id”は法人番号の前に”urn:ngsi-ld:Organization:JP”を付けて生成する。identificationGroupはidentificationTypeが”法人番号”である”identification”として生成する
自治体コードidentificationGroup.identification“identificationType”が”自治体コード”である”identification”として生成する
法人名name“呉市”、”ハリー株式会社”、他の自治体名、および設備のメーカ名を登録します
法人名カナnameKana“呉市”、”ハリー株式会社”などの法人名のカナ表示です
所在地registeredAddress色々な書き方で住所が表記されているとします。csv中に同名の自治体がある府中市が含まれているため、既定値の情報として県名に”広島県”を指定します
種別category“市区町村”または”株式会社”
都道府県containedInPlace自治体の場合に、自治体を識別するための都道府県名

 Excelを使って法人情報のcsvファイルを読み込んで自治体やメーカの情報を追加して作成します。csvファイルを読み込む際には、「データ型を検出しない」指定で読み込んでください。そうしないと、数字からなる文字列が数値として処理され、先頭のゼロが削除されたり、桁数が多いと浮動小数点の形式に勝手に変換されてしまう場合があります。

 東広島市は漢数字が使われ、府中市は全角数字が使われね府中町は郡名の指定が無いバリエーションです。所在地メーカについては法人番号と法人名以外の情報は使わないので、他の項目は登録していません。

法人情報の変換

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

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

 次に、このcsvファイルをJSON形式に変換しますが、そのために前記の変換表をツールの仕様に従って拡張JSON Schemaとして記述します。組織の場合は例えば以下となります。詳細はツールのwebサイトをご覧ください。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://ppp-database.org/spec/datamodel/Organization/",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "dataSource": {
        "csvAttr": "法人番号",
        "prefix": "urn:ngsi-ld:Organization:JP"
      }
    },
    "type": {
      "const": "Organization"
    },
    "identificationGroup": {
      "type": "object",
      "properties": {
        "type": {"const": "IdentificationGroup"},
        "value": {
          "type": "array",
          "items": [
            {
              "type": "object",
              "properties":{
                "identification": {
                  "type": "string",
                  "dataSource": {"csvAttr": "自治体コード"}
                },
                "identificationType": {"const": "自治体コード"}
--以下略--

 この拡張JSON Schemaを指定してctojツールを実行すると、以下の様に共通データ仕様に形式変換した結果が得られます。下の左図は変換後の先頭部分、右が住所の部分です。住所の記述は色々ありますが、共通仕様に合わせて統一されている事が分かります。この様に住所の表現は共通化する必要がありますから、csvデータを作成する際に最初から揃えておくか、ツールで揃える必要があります。

 余談ですが、NGSI V2ではこの”id”と”type”以外のAttributeに”type”と”value”が記述されている形式をNormalized形式と呼んでいます。簡略化して見やすくしたkeyValues形式と言うものがありますが、type名などが失われるので、情報を保存する際にはこのNormalized形式を利用します。

  [
    {
      "id": "urn:ngsi-ld:Organization:JP9000020342025",
      "type": "Organization",
      "identificationGroup": {
        "type": "IdentificationGroup",
        "value": [
          {
            "identification": "342025",
            "identificationType": "自治体コード"
          },
          {
            "identification": "9000020342025",
            "identificationType": "法人番号"
          }
        ]
      },
      "name": {
        "type": "Text",
        "value": "呉市"
      },
      "containedInPlace": {
        "type": "Text",
        "value": "広島県"
      },
      "nameKana": {
        "type": "Text",
        "value": "クレシ"
      },
      "category": {
--以下略--
      "registeredAddress": {
        "type": "PostalAddress",
        "value": {
          "addressCountry": "JP",
          "addressRegion": "広島県",
          "addressLocality": "呉市",
          "streetAddress": "中央4-1-6"
        }
      }
      "registeredAddress": {
        "type": "PostalAddress",
        "value": {
          "addressCountry": "JP",
          "addressRegion": "広島県",
          "addressLocality": "東広島市",
          "streetAddress": "西条栄町8-29"
        }
      }
      "registeredAddress": {
        "type": "PostalAddress",
        "value": {
          "addressCountry": "JP",
          "addressRegion": "広島県",
          "addressLocality": "府中市",
          "streetAddress": "府川町315"
        }
      }

 更に余談ですが、このツールでは、出力の形式を選べます。記載の例はPythonなどでそのままリストとして読み込める形式ですが、この他に、デジタル庁の推奨モジュールであるFiware/Orionにそのまま入力できる形式も選択可能です。

所管課情報の作成

 想定FMシステムでは、所管課の一覧も出力する機能もありませんので、前ページの記述通り、これもExcelで作ります。尚、施設一覧に所管課名は掲載されているので、もし施設一覧に部門番号も掲載されているのであれば、Excelを作る必要はなく、施設一覧を入力とする方法もあります。

csv項目名Attribute名補足
部門番号id部門番号の前に”urn:ngsi-ld:Organization:JP”と法人番号と”-“を付けて生成する
部門名name部門名
法人名departmentOf既に作成した法人情報を検索して、法人の”id”を取り出します

 今回のケーススタディでは所管部門は二つしかありませんので、部門の一覧も2件だけです。本ケーススタディでは、以下の様に作成しました。

このデータをcsvファイルとして書き込みます。もし、変換ツールとして”ctoj”を利用するのであれば、ツールの仕様通りutf-8で書き込みます。

 次に、このcsvファイルをJSON形式に変換します、変換の指定は例えば以下となります。詳細はツールのwebサイトをご覧ください。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://ppp-database.org/spec/datamodel/Department/",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "dataSource":[
        {
          "dataSource": {"csvAttr": "法人名"},
          "entityType" : "Organization",
          "searchAttr" : "name",
          "valueAttr" : "identificationGroup.identification",
          "identificationType": "法人番号",
          "prefix": "urn:ngsi-ld:Department:JP"
        },
        {
          "csvAttr": "部門番号",
          "pattern": "^[0-9]{7}$",
          "prefix": "-"
        }
      ]
    },
    "type": {"const": "Department"},
    "name": {
      "type": "object",
      "properties": {
        "type": {"const": "Text"},
        "value": {
          "type": "string",
--以下略--

 これをctojツールに入力すると、以下の様にExcelのcsvデータを共通データ仕様に形式変換した結果が得られます。

  [
    {
      "id": "urn:ngsi-ld:Department:JP9000020342025-0402004",
      "type": "Department",
      "name": {
        "type": "Text",
        "value": "吉浦まちづくりセンター"
      },
      "departmentOf": {
        "type": "Relationship",
        "value": "urn:ngsi-ld:Organization:JP9000020342025"
      }
    },
    {
      "id": "urn:ngsi-ld:Department:JP9000020342025-0602003",
      "type": "Department",
      "name": {
        "type": "Text",
        "value": "学校施設課"
      },
      "departmentOf": {
        "type": "Relationship",
        "value": "urn:ngsi-ld:Organization:JP9000020342025"
      }
    }
  ]