JA:Semi-colon value separator
私達は、いくつの状況で、タグの値にセミコロン value separator (';' の記号)を使う事が出来ます。ひとつのelementが、同じKeyに対して複数の値(value)を必要とする時、これを使います。
Contents |
例
nat_ref=B500;B550 はB500とB550の両方が指定されている道路区間であることを表しています。両方の参照値を用いている道路の同一区間である場合にだけこの指定を行います(Places where authorities have screwed up their numbering systems. Quite rare, although seemingly surprisingly common on U.S. interstates!)。 注意:あなたがある参照値から他の参照値へ変更した道路の区間上にあるポイントである場合、これは正しくない方法です。代わりにこのポイントにノードを配置してウェイを分割します。
いくつかの比較的重要でない「特性」タグは複数の値を表すのに役立ちます。たとえば自動車販売店をマッピングするときに service=dealer;tyres;repair というタグを追加することができます。もしこれがまれにしか出てこないタグではない場合、あなたが Tag:shop=car ページを参照するように、そのタグの文書化によって使用方法を示す例を提供することを期待しています。
セミコロンによる値の分割を使わない場合
一般的には、可能なら、';' 区切りの値を使わないでください。 もしよりよい表現方法があるなら、これをマッピングに使ったり、この wiki でこれを提案したりしないでください。 なぜかというと…
The whole idea of sticking semi-colons into tag values is very contrary to the aim of keeping it simple. Tags are supposed to be dead easy for mappers: Easy for new mappers to learn how to use (Not just 20-something male geeks. Think mothers and five-year-old children) Easy for people to read, and type quickly while mapping. Easy for people to type on mobile device touch screens.
Tags are also supposed to be dead easy for data users to work with. In truth this is not the case. There are many aspects of OpenStreetMap tagging which make life very difficult for data users. Semi-colon value separator would be one of them. For the sake of anyone trying use the data (people building software for rendering, searching, "find my nearest cafe" mobile apps, etc) we should minimise use of values with special characters.
もっとも重要な「トップレベル」タグで ';' を使わないようにするのは、(たとえ合理的な理由があったとしても)特に重要です。 これは要素が何であるかを定義するものだからです。 普通、複数の値がある状況では、二つの代替案があります:
- 一つの値を選ぶ 「主な」値を選んで、それを使います。例: カフェでもバーでもあるような場所をマッピングするとします。単に amenity=cafe か amenity=bar を使う方が遥かに有用です (その店を見て、どちらかを選びます。ここはカフェが主でしょうか、それともバーが主でしょうか?) これを{Tag|amenity||cafe;bar}} とマッピングするのは良い考えではありません。
- 要素を分割する 普通のタグを別々にタグ付けできるように、ノードやウェイを分割します。これは地理的に分割できるものの場合はいい選択肢です。例: 中にカフェがある図書館をマッピングするとします。カフェにノードを使い、より大きな建物である図書館をエリアで表現するか、単に図書館の中心に別のノードを使います。これを amenity=library;cafe とマッピングするのは 良い考えではありません。
双方の例に置いて、もし amenity の値として ';' を使うと、「最寄りのカフェを探す」モバイルアプリでは表示されないでしょう。システム側で値をパースして ';' で分割することも可能ではありますが、ほとんどのシステムは対応していませんし、これから対応されることもないでしょう。
ねじれと非一貫性
その他の区切り文字?
区切り文字に関して、様々な側面からの議論が進行中ですが、多かれ少なかれ区切り文字としてセミコロン ';' を使うことに合意があります。 区切り文字として、他の文字が使われているのを見ることがあるかもしれません。 過去には、例えば "/" (スラッシュ), " " (空白), "-" (ハイフン), or "#" (シャープ) などが提案されてきました。 今ではセミコロンが区切り文字として広く受け入れられていて、Potlatch と JOSM が対応しています(これらのエディタは、要素をマージしたときに自動的に ';' を追加します)。
空白によるパッディング
- service=dealer;tyres;repair
とするべきか
- service=dealer; tyres; repair
とするべきか?
多くのタグ文書では追加の空白なしでセミコロン分割された値が使われていますが、';' 文字の後に空白文字を追加することはとても一般的です。 現在の所、これに関しては JOSM と Potlatch で動作が異なります。
';;' によるエスケープ
もし実際の値としてセミコロンがある場合、セミコロン 2 つ ';;' を入力するべきという提案がありました。 これはコンピュータプログラミングとデータ形式で使われる「エスケープ文字」手法です [1]。 これが意味することは、パース機構を開発する人は ';;' を考慮に入れるべきということです。 実際の所このような状況はまず起こりませんし、これに対応しているパース機構はほとんどありません。