LoginSignup
0
0

More than 5 years have passed since last update.

共通語彙基盤あれこれ

Last updated at Posted at 2016-10-30

地方自治体コードの 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

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 .
    ] .
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0