Menu

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


Column
Link集
用語集


Coppell

Technologies

利用例-6 (Zones)


■利用例の概要
 建物を表現するデータモデルである、Buildingの一部である建物内の「場所」を表現するAttributeであるZonesをcsvファイルから生成します。利用例-4のBuildingとidは共通化してあり、名寄せする事で完全なEntityとなります。尚、Fiware/Orionでは、ひとつのEntityを複数回に分けて登録する事が可能です。

■csvファイル
 本利用例は、場所の一覧をcsvファイルで入手できる事を想定しています。本利用例のcsvはこちら

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

Attribute 追加ルール 説明
id

dataSource

dataSource

csvAttr csvの項目名として、"施設名"を指定します。
entityType 施設名からidをとりだすため、検索すべきEntity typeとして"Building"を指定します
searchAttr 施設名で検索するため、施設名が格納されている"name"を指定します
valueAttr idを取り出すため、値を取り出すAttributeとして"id"を指定します
zones subzoneNameの


merge ここまでの利用例では、csvの一行がひとつのEntityに対応していました。それに対し、zonesはcsv上の複数の行をマージする必要があります。そこで、"union"を指定します
value zonesはvaluesり中身が一致しているcsv上の行をマージします


mergekey 一致しているかどうかを確認する項目として、"zoneName"を指定します
zoneName

dataSource

csvAttr csvの項目名として、"大分類"を指定します。
subZones


mergekey 一致しているかどうかを確認する項目として、"subzoneName"の最初の要素を指定します。指定方法は、["subzoneName",0]です。リストの要素の番号はゼロオリジンなので、最初の要素は"0"となります
subzoneName arratの一つ目と二つ目の要素に二つの値を入れないとならないため、subzoneNameのメンバのitemsをリスト構造に展開として二つの値を登録できる様にしますし、

0 dataSource 最初の要素はmergekeyに指定されているので、同じ値は名寄せされます

csvAttr csvの項目名として"中分類"を指定します
1 dataSource 二番目の要素は、データ仕様ではりリスト構造なので、typeがarrayの構造を作ってからdataSourceを記述します

csvAttr csvの項目名として"細分類"を指定します

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

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


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

c:\Tools>Python ctoj.py dir=c:/Tools/data/ inputfile=Zonescsv.csv outputfile=BuildingZonesjson.json schemafile=BuildingZones.exschema.json Buildingfile=Buildingjson.json logfile=Zoneslog.txt
##### start ctoj converter #####
CSV translated to JSON successfully. output Entity number: 3

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


 [
   {
     "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": [
                 "植栽"
               ]
             }
           ]
         }
       ]
     }
   },
   {
     "id": "urn:ngsi-ld:Building:JP9000020342025-03000012",
     "type": "Building",
     "zones": {
       "type": "Text",
       "value": [
         {
           "zoneName": "校舎",
           "subzones": [
             {
               "subzoneName": [
                 "1F",
                 [
                   "正面玄関",
                   "職員玄関",
                   "職員室",
                   "校長室",
                   "音楽室",
                   "西階段室",
                   "東階段室",
                   "給食室"
                 ]
               ]
             },
             {
               "subzoneName": [
                 "2F",
                 [
                   "1年1組",
                   "1年2組",
                   "西階段室",
                   "東階段室",
                   "廊下"
                 ]
               ]
             },
             {
               "subzoneName": [
                 "3F",
                 [
                   "2年1組",
                   "2年2組",
                   "西階段室",
                   "東階段室",
                   "廊下",
                   "音楽室",
                   "倉庫"
                 ]
               ]
             }
           ]
         },
         {
           "zoneName": "体育館",
           "subzones": [
             {
               "subzoneName": [
                 "部隊"
               ]
             },
             {
               "subzoneName": [
                 "コート"
               ]
             }
           ]
         },
         {
           "zoneName": "屋外",
           "subzones": [
             {
               "subzoneName": [
                 "正門"
               ]
             },
             {
               "subzoneName": [
                 "裏門"
               ]
             },
             {
               "subzoneName": [
                 "グランド"
               ]
             },
             {
               "subzoneName": [
                 "花壇"
               ]
             }
           ]
         }
       ]
     }
   },
   {
     "id": "urn:ngsi-ld:Building:JP9000020342025-04000008",
     "type": "Building",
     "zones": {
       "type": "Text",
       "value": [
         {
           "zoneName": "校舎",
           "subzones": [
             {
               "subzoneName": [
                 "1F",
                 [
                   "正面玄関",
                   "職員玄関",
                   "職員室",
                   "校長室",
                   "音楽室",
                   "西階段室",
                   "東階段室",
                   "給食室"
                 ]
               ]
             },
             {
               "subzoneName": [
                 "2F",
                 [
                   "1年1組",
                   "1年2組",
                   "西階段室",
                   "東階段室",
                   "廊下"
                 ]
               ]
             },
             {
               "subzoneName": [
                 "3F",
                 [
                   "2年1組",
                   "2年2組",
                   "西階段室",
                   "東階段室",
                   "廊下",
                   "音楽室",
                   "倉庫"
                 ]
               ]
             }
           ]
         },
         {
           "zoneName": "体育館",
           "subzones": [
             {
               "subzoneName": [
                 "部隊"
               ]
             },
             {
               "subzoneName": [
                 "コート"
               ]
             }
           ]
         },
         {
           "zoneName": "屋外",
           "subzones": [
             {
               "subzoneName": [
                 "正門"
               ]
             },
             {
               "subzoneName": [
                 "裏門"
               ]
             },
             {
               "subzoneName": [
                 "グランド"
               ]
             },
             {
               "subzoneName": [
                 "花壇"
               ]
             }
           ]
         }
       ]
     }
   }
 ]

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

02: inputdir: c:/Tools/Data/, inputfile: Zonescsv.csv
04: directory: Buildingdir, Buildingfile: Buildingfile
09: outputdir: c:/Tools/Data/, outputfile: BuildingZonesjson.json
10: CSV Line# 2
10: CSV Line# 3
10: CSV Line# 4
10: CSV Line# 5
10: CSV Line# 6
10: CSV Line# 7
10: CSV Line# 8
10: CSV Line# 9
10: CSV Line# 10
10: CSV Line# 11
10: CSV Line# 12
10: CSV Line# 13
10: CSV Line# 14
10: CSV Line# 15
10: CSV Line# 16
10: CSV Line# 17
10: CSV Line# 18
10: CSV Line# 19
10: CSV Line# 20
10: CSV Line# 21
10: CSV Line# 22
10: CSV Line# 23
10: CSV Line# 24
10: CSV Line# 25
10: CSV Line# 26
10: CSV Line# 27
10: CSV Line# 28
10: CSV Line# 29
10: CSV Line# 30
10: CSV Line# 31
10: CSV Line# 32
10: CSV Line# 33
10: CSV Line# 34
10: CSV Line# 35
10: CSV Line# 36
10: CSV Line# 37
10: CSV Line# 38
10: CSV Line# 39
10: CSV Line# 40
10: CSV Line# 41
10: CSV Line# 42
10: CSV Line# 43
10: CSV Line# 44
10: CSV Line# 45
10: CSV Line# 46
10: CSV Line# 47
10: CSV Line# 48
10: CSV Line# 49
10: CSV Line# 50
10: CSV Line# 51
10: CSV Line# 52
10: CSV Line# 53
10: CSV Line# 54
10: CSV Line# 55
10: CSV Line# 56
10: CSV Line# 57
10: CSV Line# 58
10: CSV Line# 59
10: CSV Line# 60
10: CSV Line# 61
10: CSV Line# 62
10: CSV Line# 63
10: CSV Line# 64
10: CSV Line# 65
10: CSV Line# 66
10: CSV Line# 67
10: CSV Line# 68
10: CSV Line# 69
10: CSV Line# 70
10: CSV Line# 71
10: CSV Line# 72
10: CSV Line# 73
10: CSV Line# 74
10: CSV Line# 75
10: CSV Line# 76
10: CSV Line# 77
10: CSV Line# 78
10: CSV Line# 79
10: CSV Line# 80
10: CSV Line# 81
10: CSV Line# 82
12: CSV translated to JSON successfully. Enity number: 3