Menu

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


Column
Link集
用語集


Coppell

Technologies

利用例-3 (Land)


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

■csvファイル
 利用例-3のLandから利用例-5のFacilityまでは、同じcsvファイルから項目を選んで変換します。これは、一般に「施設」と呼んだ場合、建物とその敷地である土地、およびその建物を使って提供されるサービスのみっつのモノをひとまとめにして施設と呼んでいるためです。比較的小さな施設ではこれらの土地と建物とサービスは一対一対一で対応付けられる場合も多いのですが、例えば学校や公営住宅の様に複数の建物で構成されていたり、逆に複合施設と呼ばれる建物では複数のサービスが提供されていたりします。このため、共通データ仕様では多目的にデータを活用しやすくするために、これら三つの「モノ」を別のデータモデルとして定義しつつ、リンクを使ってひとまとめにすることで、柔軟性を持たせています。
 本利用例は、施設管理を想定しているため、厳密にサービスを分割する必要は無いため、csvのデータは建物単位作成されています。本利用例のcsvはこちら

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

Attribute 追加ルール 説明
id

dataSource

csvAttr csvの項目名として、"不動産ID"を指定します。
prefix 不動産IDの前に付加する文字列として、"urn:ngsi-ld:Land:"を指定します。これにより、idの文字列が"urn:ngsi-ld:Land:"と土地の不動産IDを結合した文字列になります
alternate 自治体が保有する土地は登記しなくても良いという例外の規定があり、実際に殆どの不動産は登記されていません。このため、不動産IDも割り振られていないのが現状です。そこで、不動産IDがなかった場合に備えてalternateの指定もします。この指定はid直下のdataSourceで指定したcsvファイルの項目に値が無かった場合に使用されます。内容はcsvAttrとprefixの指定であり、不動産IDもどきの文字列を生成します。この例では、法人番号と施設IDを組み合わせて文字列を生成しました
0 dataSource

csvAttr 法人番号を求めるための元情報元情報としてcsvの項目名として、"部門番号"を指定します。
entityType 部門名から部門番号を求めるためのentitiesとして"Organization"を指定します
searchAttr Organizationをサーチする項目として法人名が格納してある"name"を指定します
searchAttr 法人番号を取り出す項目として、identificationGroupのidentificationを指定します
identificationType identificationGroupのどの要素かを指定するために"部門番号"を指定します
prefix 法人番号の前に付加する文字列として、"urn:ngsi-ld:Land:JP"を指定します。これにより、idの文字列が"urn:ngsi-ld:Land:JP"と呉市の法人番号を結合した文字列になります
1 csvAttr csvの項目名として、"部門番号"を指定します。
prefix 法人番号の前に付加する文字列として、"-"を指定します。これにより、最終的にidの文字列が"urn:ngsi-ld:Land:JP"と呉市の法人番号と"-"と部門番号を結合した文字列になります
identificationGroup

identifivationType

const "不動産ID"を設定します。c
identifivation

dataSource


csvAttr csvの項目名として"不動産ID"を指定します。
usage

const 公共施設の用地なので、"公益施設用地"を設定します。尚、このAttributeはcsvAttrの指定が無く、このままではJSON文が生成されないため、entity全体のrequiredに"usage"を追加します。
address


format "PostalAddress"を指定します。これにより、住所の文字列内に県名や自治体名が記載されていても、項目を分割して登録します
addressRegion
addressLocality


const 自治体名と都道府県名は所在地に含まれてい場合があるので、formatの参考情報としてconstで"呉市"と"広島県を指定します。尚、府中市の様に同名の自治体がある場合は、都道府県名の指定は必須です
streetAddress

dataSource

csvAttr csvの項目名として、"所在地"を指定します
refOwner

dataSource

dataSource

csvAttr 所有しているOrganizationのEntityのidを求めるため、csvファイルの項目名として、"所管部門"を指定します
entityType 部門名からDepartmentのidを求めるために、検索するEntityとして"Department"を指定します
searchAttr Organizationのidが登録されているAttributeとして、"name"を指定します
valueAttr Departmentからidを取り出すために、Attributeとして、"departmentOf"を指定します
refDepartment

dataSource

dataSource

csvAttr 所管部門のEntityのidを求めるため、csvファイルの項目名として、"所管部門"を指定します
entityType 部門名からDepartmentのidを求めるために、検索するEntityとして"Department"を指定します
searchAttr Departmentの部門名が登録されているAttributeとして、"name"を指定します
valueAttr Departmentからidを取り出すために、Attributeとして、"id"を指定します

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

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


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

c:\Tools>Python ctoj.py dir=c:/Tools/data/ inputfile=Facilitycsv.csv outputfile=Landjson.json schemafile=Land.exschema.json Departmentfile=Departmentjson.json logfile=Landlog.txt
##### start ctoj converter #####
CSV translated to JSON successfully. output Entity number: 3

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


 [
   {
     "id": "urn:ngsi-ld:Land:JP9000020342025-01234567",
     "type": "Land",
     "usage": {
       "type": "Array",
       "value": [
         "公益施設用地"
       ]
     },
     "address": {
       "type": "PostalAddress",
       "value": {
         "addressRegion": "広島県",
         "addressLocality": "呉市",
         "streetAddress": "吉浦東本町1-7-23"
       }
     },
     "refOwner": {
       "type": "Relationship",
       "value": "urn:ngsi-ld:Organization:JP9000020342025"
     },
     "refDepartment": {
       "type": "Relationship",
       "value": "urn:ngsi-ld:Department:JP9000020342025-402004"
     }
   },
   {
     "id": "urn:ngsi-ld:Land:JP9000020342025-03000012",
     "type": "Land",
     "usage": {
       "type": "Array",
       "value": [
         "公益施設用地"
       ]
     },
     "address": {
       "type": "PostalAddress",
       "value": {
         "addressRegion": "広島県",
         "addressLocality": "呉市",
         "streetAddress": "吉浦中町2-6-5"
       }
     },
     "refOwner": {
       "type": "Relationship",
       "value": "urn:ngsi-ld:Organization:JP9000020342025"
     },
     "refDepartment": {
       "type": "Relationship",
       "value": "urn:ngsi-ld:Department:JP9000020342025-602003"
     }
   },
   {
     "id": "urn:ngsi-ld:Land:JP9000020342025-04000008",
     "type": "Land",
     "usage": {
       "type": "Array",
       "value": [
         "公益施設用地"
       ]
     },
     "address": {
       "type": "PostalAddress",
       "value": {
         "addressRegion": "広島県",
         "addressLocality": "呉市",
         "streetAddress": "狩留賀町8-6"
       }
     },
     "refOwner": {
       "type": "Relationship",
       "value": "urn:ngsi-ld:Organization:JP9000020342025"
     },
     "refDepartment": {
       "type": "Relationship",
       "value": "urn:ngsi-ld:Department:JP9000020342025-602003"
     }
   }
 ]


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

02: inputdir: c:/Tools/Data/, inputfile: Facilitycsv.csv
04: directory: Departmentdir, Departmentfile: Departmentfile
09: outputdir: c:/Tools/Data/, outputfile: Landjson.json
10: CSV Line# 2
10: CSV Line# 3
10: CSV Line# 4
12: CSV translated to JSON successfully. Enity number: 3