Menu

Coppell Technologies
Fiwareで都市OSを動かしてみよう
NGSI-LDにも挑戦
データ仕様の現状と課題
スマートシティの標準規定(案)
データモデルのユースケース


Column
Link集
用語集


Coppell

Technologies

利用例-11 (Complaint)


■利用例の概要
 不具合を表現するデータモデルである、Complaintをcsvファイルから生成します。

■csvファイル
 本利用例は、利用例-9の報告の一覧には不具合情報も含まれている事を想定しています。サンプルのcsvファイルのファイル名は"Reportcsv.csv"であり、data配下に格納してあります。一般的には1件の案件に複数の報告があるので、csvは案件と報告で別々に用意する必要がありますが、本例では1対1になっているので、同じcsvを入力としています。

■拡張JSON Schema
 元となるJSON Schemaは、このリンクから入手します。
 csvからJSONに変換するルールとして、以下の情報を追加します。追加した拡張JSON Schemaはdata配下にComplaint.exschema.jsonというファイル名で格納してありります

Attribute 追加ルール 説明
id

dataSource

csvAttr csvの項目名として"案件コード"を指定します
prefix idを作成するために、"urn:ngsi-ld:Complaint:JP9000020342025-"を案件番号の前に付加します
phenomenon

category

dataSource

csvAttr csvの項目名として"現象概要"を指定します
remarks

dataSource

csvAttr csvの項目名として"現象補足"を指定します
description

dataSource

csvAttr csvの項目名として"説明"を指定します
isPartOf

dataSource

csvAttr csvの項目名として"参照案件コード"を指定します
name

dataSource

csvAttr csvの項目名として"案件名"を指定します
status

dataSource

csvAttr csvの項目名として"ステータス"を指定します
timestamps 複数の日付を設定するため、itemsをリスト構造にします

0 timestamp

dataSource

csvAttr csvの項目名として"実施日付"を指定します
step

const 即値で"受付"をそれぞれ指定します
1 timestamp

dataSource

csvAttr csvの項目名として"報告日付"を指定します
step

const timestampが何の日時がを示すために、即値で"報告"を指定します
2 timestamp

dataSource

csvAttr csvの項目名として"処置日付"を指定します
step

const timestampが何の日時がを示すために、即値で"処置"を指定します
refBuilding

dataSource

dataSource

csvAttr csvの項目名として"管理通番"を指定します
entityType 施設番号からBuildingのidを求めるために、検索対象に"Building"を指定します
searchAttr 施設番号が格納されているAttributeである、"facilityID"を指定します
valueAttr idが格納されているAttributeである"id"を指定します
zones リスト構造の中に値を最大3っつ登録したいので、itemsの中をリスト構造とし、3っつの指定ができる様にします

abstracts

0 dataSource

csvAttr csvの項目名として"場所大分類"を指定します
1 dataSource

csvAttr csvの項目名として"場所中分類""を指定します
2 dataSource

csvAttr csvの項目名として"場所小分類"を指定します
remarks

dataSource

csvAttr csvの項目名として"場所補足"を指定します
parts

abstracts

dataSource

csvAttr csvの項目名として"部位概要"を指定します
refComponent

dataSource


dataSource



csvAttr csvの項目名として"部位/設備名称"を指定します

entityType 検索する"Device"を指定します

searchAttr 検索するAttributeである"name"を指定します

valueAttr 検索結果を求めるAttributeである"id"を指定します

alternate Deviceに見つからなかったときにBuildingComponentを探します


entityType 検索する"BuildingComponent"を指定します


searchAttr 検索するAttributeである"name"を指定します


valueAttr 検索結果を求めるAttributeである"id"を指定します


alternate Deviceに見つからなかったときにBuildingComponentを探します
remarks

dataSource

csvAttr csvの項目名として"部位/設備補足"を指定します
cause

abstracts

dataSource

csvAttr csvの項目名として"原因概要"を指定します
remarks

dataSource

csvAttr csvの項目名として"原因補足"を指定します
severityMark

dataSource

csvAttr csvの項目名として"緊急度マーク"を指定します
severity

dataSource

csvAttr csvの項目名として"緊急度補足"を指定します
repairPlan

dataSource

csvAttr csvの項目名として"処置計画"を指定します

これら以外のAttrributeはそのまま残します。消しても残しても無視されます。但し、typeはrequiredに指定してあるので、JSONに変換されます。

■実行
 cドライブ直下にTooldというフォルダを作成して、全てのファイルをここに格納して実行しています。


C:\Users\owner>chdir c:/Tools/

c:\Tools>Python ctoj.py dir=c:/Tools/data/ inputfile=Reportcsv.csv outputfile=Complaintjson.json schemafile=Complaint.exschema.json Buildingfile=Buildingjson.json Devicefile=Devicejson.json BuildingComponentfile=BuildingComponentjson.jsonlogfile=Complaintlog.txt
##### start ctoj converter #####
CSV translated to JSON successfully. Number of output Entities: 3

■変換結果
 ツール実行結果は以下の通りです。


 [
   {
     "id": "urn:ngsi-ld:Complaint:JP9000020342025-2023-123-000010",
     "type": "Complaint",
     "phenomenon": {
       "type": "StructuredValue",
       "value": {
         "category": [
           "汚損"
         ],
         "remarks": "ペンキ様の赤色塗料の文字"
       }
     },
     "name": {
       "type": "Text",
       "value": "吉浦まちづくりセンター図書室汚損"
     },
     "status": {
       "type": "Text",
       "value": "完了"
     },
     "timestamps": {
       "type": "Array",
       "value": [
         {
           "step": "受付",
           "timestamp": "2023-07-25"
         },
         {
           "step": "報告",
           "timestamp": "2023-07-25"
         },
         {
           "step": "処置",
           "timestamp": "2023-07-25"
         }
       ]
     },
     "refBuilding": {
       "type": "Relationship",
       "value": "urn:ngsi-ld:Building:JP9000020342025-01234567"
     },
     "zones": {
       "type": "StructuredValue",
       "value": {
         "abstracts": [
           "建物内部",
           "2F",
           "図書室"
         ],
         "remarks": "北側の内壁に設置"
       }
     },
     "parts": {
       "type": "StructuredValue",
       "value": {
         "abstracts": [
           "空調機"
         ],
         "refComponent": "urn:ngsi-ld:Device:JP7010001008844-RAS-DM28KE801234567VVV"
       }
     },
     "cause": {
       "type": "StructuredValue",
       "value": {
         "abstracts": "盗難・いたづら(故意)",
         "remarks": "現象から推定"
       }
     },
     "severityMark": {
       "type": "Text",
       "value": "C"
     }
   },
   {
     "id": "urn:ngsi-ld:Complaint:JP9000020342025-2023-155-000001",
     "type": "Complaint",
     "phenomenon": {
       "type": "StructuredValue",
       "value": {
         "remarks": "雨漏り"
       }
     },
     "isPartOf": {
       "type": "Array",
       "value": [
         "完了"
       ]
     },
     "name": {
       "type": "Text",
       "value": "吉浦まちづくりセンター休憩室雨漏り"
     },
     "timestamps": {
       "type": "Array",
       "value": [
         {
           "step": "受付",
           "timestamp": "2023-06-30"
         },
         {
           "step": "報告",
           "timestamp": "2023-06-30"
         },
         {
           "step": "処置",
           "timestamp": "2023-06-30"
         }
       ]
     },
     "refBuilding": {
       "type": "Relationship",
       "value": "urn:ngsi-ld:Building:JP9000020342025-01234567"
     },
     "zones": {
       "type": "StructuredValue",
       "value": {
         "abstracts": [
           "建物内部",
           "1F",
           "休憩室"
         ]
       }
     },
     "parts": {
       "type": "StructuredValue",
       "value": {
         "abstracts": [
           "天井"
         ],
         "refComponent": "urn:ngsi-ld:BuildingComponent:85171489-5fc2-46a1-af22-080f53300cb6"
       }
     },
     "cause": {
       "type": "StructuredValue",
       "value": {
         "remarks": "その他"
       }
     },
     "severityMark": {
       "type": "Text",
       "value": "窓側天井から雨漏り"
     },
     "severity": {
       "type": "Text",
       "value": "A"
     }
   },
   {
     "id": "urn:ngsi-ld:Complaint:JP9000020342025-2023-155-000002",
     "type": "Complaint",
     "phenomenon": {
       "type": "StructuredValue",
       "value": {
         "category": [
           "汚損"
         ],
         "remarks": "シミが発生"
       }
     },
     "name": {
       "type": "Text",
       "value": "吉浦まちづくりセンター休憩室汚損"
     },
     "status": {
       "type": "Text",
       "value": "調査予定"
     },
     "timestamps": {
       "type": "Array",
       "value": [
         {
           "step": "受付",
           "timestamp": "2023-07-03"
         },
         {
           "step": "報告",
           "timestamp": "2023-07-03"
         },
         {
           "step": "処置",
           "timestamp": "2023-07-03"
         }
       ]
     },
     "refBuilding": {
       "type": "Relationship",
       "value": "urn:ngsi-ld:Building:JP9000020342025-01234567"
     },
     "zones": {
       "type": "StructuredValue",
       "value": {
         "abstracts": [
           "建物内部",
           "1F",
           "休憩室"
         ]
       }
     },
     "parts": {
       "type": "StructuredValue",
       "value": {
         "abstracts": [
           "天井"
         ],
         "refComponent": "urn:ngsi-ld:BuildingComponent:85171489-5fc2-46a1-af22-080f53300cb6"
       }
     },
     "cause": {
       "type": "StructuredValue",
       "value": {
         "abstracts": "その他",
         "remarks": "雨漏りの乾燥"
       }
     },
     "severityMark": {
       "type": "Text",
       "value": "C"
     }
   }
 ]

ログファイルは以下の通りです。全ての行でエラーは発生していません。

08: inputdir: c:/Tools/data/, inputfile: Reportcsv.csv
09: referenced entities. directory: c:/Tools/data/, Buildingfile: Buildingjson.json
09: referenced entities. directory: c:/Tools/data/, BuildingComponentfile: BuildingComponentjson.json
09: referenced entities. directory: c:/Tools/data/, Devicefile: Devicejson.json
09: outputdir: c:/Tools/data/, outputfile: Complaintjson.json
10: CSV Line# 2
10: CSV Line# 3
10: CSV Line# 4
12: CSV translated to JSON successfully. Entities number: 3