RU:Разделитель значений ";"

From OpenStreetMap Wiki
Jump to: navigation, search
Доступные языки — Semi-colon_value_separator
Afrikaans Alemannisch aragonés asturianu azərbaycanca Bahasa Indonesia Bahasa Melayu Bân-lâm-gú Basa Jawa Baso Minangkabau bosanski brezhoneg català čeština dansk Deutsch eesti English español Esperanto estremeñu euskara français Frysk Gaeilge Gàidhlig galego Hausa hrvatski Igbo interlingua Interlingue isiXhosa isiZulu íslenska italiano Kiswahili Kreyòl ayisyen kréyòl gwadloupéyen kurdî latviešu Lëtzebuergesch lietuvių magyar Malagasy Malti Nederlands Nedersaksies norsk norsk nynorsk occitan Oromoo oʻzbekcha/ўзбекча Plattdüütsch polski português português do Brasil română shqip slovenčina slovenščina Soomaaliga suomi svenska Tiếng Việt Türkçe Vahcuengh vèneto Wolof Yorùbá Zazaki српски / srpski беларуская български қазақша македонски монгол русский тоҷикӣ українська Ελληνικά Հայերեն ქართული नेपाली मराठी हिन्दी অসমীয়া বাংলা ਪੰਜਾਬੀ ગુજરાતી ଓଡ଼ିଆ தமிழ் తెలుగు ಕನ್ನಡ മലയാളം සිංහල ไทย မြန်မာဘာသာ ລາວ ភាសាខ្មែរ ⵜⴰⵎⴰⵣⵉⵖⵜ አማርኛ 한국어 日本語 中文(简体)‎ 吴语 粵語 中文(繁體)‎ ייִדיש עברית اردو العربية پښتو سنڌي فارسی ދިވެހިބަސް

В некоторых случаях при записи тега используется разделитель значений ключа (знак «;»). Обычно это нужно, когда некий элемент необходимо отметить несколькими значениями одного ключа.

Важно иметь в виду, что только некоторые специализированные приложения правильно обрабатывают значения, разделённые точкой с запятой, и не для всех тегов. Большинство OSM-утилит, программ для рендеринга карты, taginfo и XAPI не обрабатывают такие значения. Некоторые берут только первую часть до точки с запятой, но большинство рассматривает всю строку как одно значение, так что сущность выпадает из результатов поиска и работы программ как неидентифицированная и никогда не будет отрисована на карте.

Примеры

  • ref=B500;B550 для участка дороги, имеющего номера B500 и B550. Так можно делать, только если один и тот же участок дороги имеющеет оба номера. Замечание: если на этом участке дороги имеется точка, в которой нумерация дороги меняется с одного значения на другое, то правильней будет разделить этот участок точкой и задать разные номера получившимся дорогам.
  • Некоторые более мелкие теги "свойств" могут принимать несколько значений. Для примера, автомагазин можно отметить так: service=dealer;tyres;repair - как это описано на странице RU:Tag:shop=car.

Когда НЕ нужно использовать разделитель

В целом избегайте разделять значения, где только возможно. Не используйте их в вашей работе над картой и не предлагайте их на вики, если есть лучший способ. Почему? Сама идея использовать точки с запятой как разделитель значений тегов противоречит цели делать как можно проще. С тегами должно быть просто обращаться как картографам, так и пользователям данных (разработчикам программ отрисовки карт, поиска, мобильных приложений типа "найти ближайшее кафе" и т.д.). Ради этих людей мы должны свести к минимуму использование специальных символов в значениях.

Особенно важно избегать (там, где это возможно и оправдано) составных значений в наиболее важных тегах "верхнего уровня", то есть в тегах, которые определяют то, какой объект этот элемент представляет. В ситуациях, когда у вас есть несколько значений, можно применить несколько альтернативных подходов:

  • Выберите одно из значений. Возьмите наиболее "важное" значение и укажите его. Пример: вы заносите данные о кафе, которое также является баром. Более правильно просто взять amenity=cafe или amenity=bar. Посмотрите на это кафе/бар и сделайте выбор. Это в первую очередь кафе или скорее бар? Не лучшая идея отобразить его как amenity=cafe;bar.
  • Разделите элемент. Выделите ипостаси элемента в отдельные точки/линии, чтобы они могли быть помечены каждый отдельно с простыми тегами. Это хороший вариант, особенно там, где объекты разнесены в пространстве. Пример: вы отметили библиотеку, которая имеет кафе внутри. Разместите точку для кафе, а затем нанесите полигон библиотеки (большое здание) или отметьте библиотеку как отдельную точку. Плохая идея отобразить всё это в виде amenity=library;cafe

В обоих примерах, если вы используете ";" в качестве разделителя значений, то скорее всего мобильные приложения типа "найти ближайшее кафе" не смогут определять такое место ещё достаточно долго. Хотя вполне вероятно, что системы с возможностью анализа разделителей появятся, на сегодняшний день большинство этого не умеет и в ближайшем будущем ситуация не изменится.

Синтаксические особенности

Разбивка пробелом

Обычно мы разделяем значения точкой с запятой без дополнительных пробелов (например, service=dealer;tyres;repair), однако возможно добавлять пробел после каждого символа ";" (пример: service=dealer; tyres; repair), в частности при указании времени работы. В настоящее время это несогласованность существует между JOSM и Potlatch (обеих верий) в их подходе к автоматическому разделению значений.

Экранирование ';;'

Если точка с запятой входит в реальное значение, которое нужно задать тегу, то её нужно вводить как два последовательных символа ';;'. Такой подход, "экранирующий символ", используется в программировании и форматах данных [1]. Такая ситуация практически никогда не встречается и упоминается здесть как любопытная особенность. Лишь немногие инструменты, работающие с OSM, поддерживают экранирование.

Разделители, использовавшиеся в прошлом

До того как в сообществе был принят консенсус об использовании точки с запятой ';', предлагалось несколько других символов для разделения значений. Среди них: слеш "/", пробел " ", дефис "-", хеш "#". В настоящее время именно точка с запятой широко применяется в качестве разделителя и поддерживается редакторами Potlatch и JOSM. Другие символы-разделители теперь могут быть заменены на точку с запятой.

Альтернативные подходы

Если вы предлагает схему тегирования, которая, как вам кажется, требует нескольких значений для одного тега, разделённых точкой с запятой, рассмотрите преобразвание её к пространствам имён с булевыми значениями в нескольких тегах. Например, гипотетическая схема для описания видов книг и других носителей информации в публичной библиотеке может быть выражена так:

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=* - хорошие примеры второго подхода. Теги с булевыми значениями могут впоследствии быть расширены дополнительными значениями по необходимости или осмысленно заменены пространствами имён.

См. также