JA:セミコロンによる値区切り

From OpenStreetMap Wiki
Jump to navigation Jump to search

状況によっては、タグの値にセミコロンによる値の区切り文字(「;」の文字)を使用しています。これは単一の要素が同じキーで複数のを必要とする場合に、これが必要になることがあります。

一部の特別なアプリケーションだけがセミコロンで区切られた値を、一部のタグだけで扱うことを知っておくことは重要です。多くのOSMツール、地図レンダラー、taginfo、XAPIはこれらの値を扱いません。連続した値の最初だけを認識するものもありますが、多くは文字列全体を一つの値として認識するので、項目が検索結果から落ちたり、ツールの出力が不明になったり、地図に描かれなかったりします。

使用例

  • ref=B500;B550はB500とB550の両方が指定されている道路区間であることを表しています。同一区間の道路が両方の参照記号の値を採る場合のみ使用してください。なお、この道路の区間上にあるある地点で参照記号が変わるような場合、これは正しい方法では'ありません。その地点にノードを置いて、その地点でウェイを分割してください。
  • あまり重要でない一部の「プロパティ」のタグは、複数のタグを持つことが適しています。例えばカー用品店をマッピングするときには、JA:Tag:shop=carページに書かれているようにservice=dealer;tyres;repairというタグを追加できます。
  • 明らかにサブキーを使って表すことができない複雑な値(特に項目の順番のない一覧)にはセミコロンを使っても構いません。例: opening_hours=Tu-Fr 08:00-18:00;Mo 09:00-18:00;Sa 09:00-12:00;closed Aug

使用するべきでない場合

一般にできるだけ「;」区切りの値を避けるべきです。複数の値を表すためのより良い方法がある場合は、地図の描画やこのWiki上での提案でこれを使用しないください。セミコロンを値の区切り文字として使用することは、データの協力者(マッパー)と利用者の両方に対して、シンプルにするという目的に反することになるからです。新しい協力者やデータを利用しようする人(レンダリング、検索、「近所のカフェを探す」モバイルアプリなどを開発する人)のためにも、特殊な文字の入った値の利用は最少にするべきです。

より重要な「トップレベル」タグにおいては、「;」区切りの値を(合理的に可能である限り)避けることはとりわけ重要です。すなわち、要素が何であるかを定義するタグです。複数の値を持つところでは、通常は2つの改善方法があります。

  • 一つの値を採る 「第一の」値で上書きし、そのままにします。例えば、カフェでもバーでもあるものをマッピングしているとします。amenity=cafeまたはamenity=barのどちらかにした方がはるかに使いやすくなります(実際にカフェ/バーを見て判断してください。主にカフェなのか?主にバーなのか?)amenity=cafe;barとタグ付けするのは良くありません。
  • 要素を分割する 普通のタグで別々にタグ付けできるよう、別々のものを地物の中に設置します。例えば、中にカフェがある図書館をマッピング中であるとします。カフェのノードを配置し、図書館を表すエリア(大きな建物)または別なノートとして配置します。amenity=library;cafeとタグ付けするのは良くありません。

どちらの場合も、amenityの値の中に「;」を使用すると、「近所のカフェを探す」モバイルアプリには全く表示されなくなるでしょう。システムが値を解析し、「;」の文字で区切ることは可能ですが、既存のほとんどのシステムは行っていません。

文法の詳細

空白のパディング

ふつう、セミコロン区切りの値は空白なしのものを使用しますが(例:ref=B500;B550)、それぞれの「;」文字の後に空白文字を入れることもできます(例:ref=B500; B550)。Opening timesをタグ付けするときには部分的に有効です。現在のところ、自動的に値を区切る方法はJOSMとPotlatch(各バージョン)で一致していません。

「;;」によるエスケープ

データの実際の値にセミコロンが含まれている場合、「;;」と連続して2つのセミコロンを入力してください。これはコンピューターのプログラミングやデータ形式で使われる「エスケープ文字」の手法です。このような状況が起こることはめったになく、興味本位でここに挙げているだけです。 OpenStreetMap のデータを使用するごく一部のツールだけが解釈することができます。

古い区切り文字

セミコロン「;」を使用するというコミュニティの合意が得られる前に、他の様々な文字が区切り文字として提案されていました。たとえば「/」(スラッシュ)、「 」(空白)、「-」(ハイフン)、「#」(ナンバーサイン)などです。現在ではセミコロンが区切り文字として広く受け入れられていて、 PotlatchJOSM が対応しており、古いものを置き換えられるようになっています。

変更方法

値をセミコロンで区切る必要があるような新しいタグ付け方法を提案しようとしている場合は、名前空間によるアプローチと真偽値を使用した複数のタグに変換できないかを検討してください。例えば、公共図書館が提供する本や資料の種類を記述するタグ付け方法を想定すると、次のように表現できます。

amenity=library
library:stock=books;newspapers;recorded_music

これは、おそらく次に説明する考え方の方法に書き直した方が良いでしょう。

amenity=library
library:stock:books=yes
library:stock:newspapers=yes
library:stock:recorded_music=yes

payment=*fuel=*は2番目の方法のよい例です。真偽値のタグは必要に応じて、後から別な値や、さらに名前空間を追加して意味を拡張できます。

関連項目