地方自治体コードの RDF を作っている。これに共通語彙基盤を適用してみて、つまづいたところのまとめ。
ic:コード種別のカーディナリティ
次のように、コードリストを改定するケースを考える。
list_old = ["a","b"]
list_new = ["a","b","c"]
list_old
を RDF で書くとすると、こうなるだろうか。
_:list_old a ic:コードリスト型 ;
ic:バージョン "list_old"^^xsd:string .
_:a a ic:コード型 ;
ic:識別値 "a"^^xsd:string ;
ic:コード種別 _:list_old .
_:b a ic:コード型 ;
ic:識別値 "b"^^xsd:string ;
ic:コード種別 _:list_old .
ここで list_new
を追加で記述しようとすると、こうしたくなる。
_:list_old a ic:コードリスト型 ;
ic:バージョン "list_old"^^xsd:string .
_:list_new a ic:コードリスト型 ;
ic:バージョン "list_new"^^xsd:string .
_:a a ic:コード型 ;
ic:識別値 "a"^^xsd:string ;
ic:コード種別 _:list_old ;
ic:コード種別 _:list_new .
_:b a ic:コード型 ;
ic:識別値 "b"^^xsd:string ;
ic:コード種別 _:list_old ;
ic:コード種別 _:list_new .
_:c a ic:コード型 ;
ic:識別値 "c"^^xsd:string ;
ic:コード種別 _:list_new .
ところが、これはスキーマ違反になる。[コア語彙 v2.3.1] (http://goikiban.ipa.go.jp/node1161)。
ic:コード型 a owl:Class ;
rdfs:subClassOf [
a owl:Restriction ;
owl:onProperty ic:コード種別 ;
owl:onClass ic:コードリスト型 ;
owl:maxQualifiedCardinality 1 ;
rdfs:comment "コードの種別を記述するためのプロパティ用語"@ja
] .
問題は「コード種別」と「バージョン」が結合しているところ。
素直に実装するなら、ic:コードリスト型がic:コード型のコレクションを持てばいいのではないだろうか?
_:list_old a ic:コードリスト型 ;
ic:バージョン "list_old"^^xsd:string ;
dcterms:hasPart _:a , _:b .
_:list_new a ic:コードリスト型 ;
ic:バージョン "list_new"^^xsd:string ;
dcterms:hasPart _:a , _:b , _:c .
_:a a ic:コード型 ;
ic:識別値 "a"^^xsd:string .
_:b a ic:コード型 ;
ic:識別値 "b"^^xsd:string .
_:c a ic:コード型 ;
ic:識別値 "c"^^xsd:string .
市区町村コード桁数
全国地方公共団体コード/標準地域コードは仕様上 6 桁固定幅のコード体系になっている。6 桁目は checksum で、技術的には 5 桁あれば復元することはできる。このため 5 桁あるいは 6 桁として使われることがある。また 5 桁はさらに 都道府県 2 桁と内部の市区町村 3 桁にわかれて採番されている。
慣例的に「6」あるいは「5-(1)」あるいは「(2)-3-(1)」と使われる。個人的には 6 桁で使うべきだと考えているけど、実際に紙に書いたりするときには、確かに省略したい。
ところが 住所 IEP v1.0 によると、ic:都道府県コード
は「全国地方公共団体コード(左2桁)を記載」で、ic:市区町村コード
は「全国地方公共団体コード(右4桁)を記載」とされている。
これは困った感じで、次のようなリソースを作ることになる。
jiti:LG-C19211-20060801 a ic:コード型 ;
ic:表記 "笛吹市"^^xsd:string ;
ic:識別値 "2112"^^xsd:string .
jiti:LG-C08211-20060101 a ic:コード型 ;
ic:表記 "常総市"^^xsd:string ;
ic:識別値 "2112"^^xsd:string .
4 桁を取り出すのは普通じゃないように思える。また、日本全国規模でデータを整理したときに、右 4 桁では識別値になりえない。ic:識別値
でリンクさせようとしてもうまくいかない。
標準地域コードはあくまで 6 桁で識別されるコードなので、分割せずにそのまま使うべきではないだろうか。
ちなみに都道府県についても 010006
といった 6 桁のコードが与えられているので、2 桁を無理に取り出す必要もなかったりする。「2-4」に分割した際に次のようになるのも奇妙だ。
[]
ic:都道府県コード [
a ic:コード型 ;
ic:識別値 "01" ;
ic:表記 "北海道"
] ;
ic:市区町村コード [
a ic:コード型 ;
ic:識別値 "0006" ;
ic:表記 "北海道"
] ;
ic:上位コード
を使って、コード側で解決してもいい。「2 桁でリンクさせたい」という気持ちもわかるけど、それならいっそ、都道府県の整数のコードをそのまま定義したらいいんじゃなかろうか。
住所 IEP の表記
「ic:住所型」の表の説明が簡素なので、うっかり次のような RDF を書いてしまいそうになのは無理もない…。
[] a ic:住所型 ;
ic:都道府県コード "08" ;
ic:市区町村コード "2112" .
正しくはこうなるはずなので、「n文字を記載」ではなく「n文字のic:識別値を持ったic:コード型を記載」ぐらい丁寧に書いたほうがいいと思った。
[] a ic:住所型 ;
ic:都道府県コード [
a ic:コード型 ;
ic:識別値 "08"^^xsd:string .
] ;
ic:市区町村コード [
a ic:コード型 ;
ic:識別値 "2112"^^xsd:string .
] .