Uk:Multiple values
Теґи OSM складаються ключа та відповідного значення. За допомогою теґів мапери описують об'єкти реального світу. В деяких випадках можуть утворюватись теґи що мають більше одного значення для одного ключа. Тут ви можете дізнатись чому та коли використовуються такі теґи, теґи з кількома значеннями.
Коли (не) треба використовувати кілька значень
Добре це чи погано? По-перше, вам за можливості треба уникати створення теґів, що мають кілька значень. Переважно через те, що споживачі даних мають складнощі з обробкою таких теґів, чи то через те що вони не очікують їх наявності, або через явну неоднозначність таких випадків. Модель даних OSM напряму не підтримує багатозначні теґи, вони були запроваджені не належним чином, з певним рівнем незграбності.
Уникайте використання багатозначних теґів якщо…
- Коли за логікою теґ не може бути багатозначним, наприклад highway=primary;secondary. Таке зазвичай трапляється коли редактор зливає два об'єкти в один без можливості самотужки розв'язати такі випадки. Спробуйте визначити, який клас дороги відповідає такому відрізку та позначте відповідно (у більшості випадків це буде вищий клас дороги).
- Існує інша схема позначення, яка краще виражає речі, наприклад, замість recycling=glass;paper можна позначити кожен тип вторсировини окремо recycling:glass=yes + recycling:paper=yes.
- Завжди намагайтеся використовувати відповідні семантичні теґи замість того, щоб поєднувати значення в ланцюжок. Наприклад, використовуйте теґи old_name, loc_name, short_name замість додавання кількох значень до ключа name=*.
- Ви можете позначати речі окремими об'єктами, наприклад, додайте туалет окремою точкою з теґом amenity=toilets на заправці чи в парку.
- Друге значення може стосуватись дуже незначної характеристики, якою можна знехтувати, наприклад, великий магазин побутових товарів, у якому також є прилавок із солодощами.
Використовуйте багатозначні теґи якщо…
- Жодне з перерахованого вище не підходить, а вам все одно потрібно додати кілька значень.
- У вас недостатньо інформації, щоб використовувати одну з точніших схем теґування (наприклад, якщо ви не можете визначити, чи це застаріла назва, чи місцева).
Як додавати кілька значень теґу
На поточний час OSM напряму не підтримує теґи з кількома значеннями на рівні API, натомість мапери винайшли кілька схем теґування, щоб обійти поточні обмеження, кожна з власними перевагами та вадами. Перелічені нижче випадки мають певну підтримку як з боку маперів, так і з боку споживачів даних. У багатьох випадках вибір залежить від особистих вподобань маперів. Іноді вони навіть змішуються разом в одному об'єкті або тезі, але так краще не робити.
Використання крапки з комою ;
Використовується тільки один ключ, значення в якому розділяються за допомогою крапки з комою ;
.
- Скорочується ввід з клавіатури.
- Достатньо легко читається.
- Відносно непогано підтримується споживачами даних, наприклад у ref=*.
- Таких підхід не може бути застосований до теґів в значені яких явним чином присутній символ
;
(можливий спосіб обійти це обмеження – екранування подвійним символом, але він не досить широко підтримується споживачами даних). - Досить легко можна досягти обмеження API на довжину значення у 255 символів.
- Споживачі даних, які не обробляють наявність крапки з комою в значеннях можуть мати непередбачувані результати.
- Споживачі даних, які обробляють наявність крапки з комою мають мати перелік теґів яких вони можуть очікувати наявність такого символу не тільки як роздільника.
Номерні ключі
Номерні ключі, такі як name_1=* чи alt_name_1=* не мають використовуватись для позначення кількох значень. Вони були створені під час імпортів і такого теґування слід уникати.
Ключі, які доповнюються номерами "_1", "_2" й так далі, використовувались, щоб рознести значення в окремі теґи. Також були варіанти з додаванням до ключів суфіксів [1], чи %1, або :1, і навіть просто 1, але вони були менш поширеними.
- Достатньо просто читати.
- Немає проблем із роздільниками літер у значеннях або з обмеженням на довжину рядка.
- Споживачі даних, які не підтримують суфікси в ключах можуть їх ігнорувати.
- Споживачі даних, що працюють з суфіксами в ключах, простіші алгоритми для їх опрацювання.
- Підтримка просторів імен в ключах через зазначення відповідного простору імен, наприклад source_1:name=* дозволяє вказати додаткове джерело для отримання чи перевірки назви, в той час, як source:name_1=* буде вказувати на джерело для другої назви.
- Більш громіздка, ніж інші схеми, не так елегантно виглядає.
- Підтримка з боку споживачів даних може бути нижчою, ніж для інших схем (?).
Використання префіксу "alt"
Дозволяє додавати "альтернативне значення", додаючи префікс "alt_
" до ключа.
- Просто використовувати та читати.
- Широко використовується для ключів типу name=*.
- Споживачі, які не підтримують префікси можуть їх ігнорувати.
- Досить рідко використовуються для інших теґів та майже не підтримуються споживачами даних.
- Дозволяє додати лише одне додаткове значення.
Спеціальні схеми
Інші багатозначні схеми були створені та задокументовані для конкретних ключів, як правило, тому, що для них існують особливі вимоги. Наприклад, схема позначення властивостей смуг руху на дорогах (див Lanes), є дворівневою подібною до схеми з використанням крапки з комою, що передбачає використання просторів імен та порожніх значень. Позначення морських (водних) навігаційних знаків, наприклад буїв, чи місць для стоянки вздовж дороги використовують номерні підтеґи *:2=*.
Схема позначення адрес розроблена для Карлсруе (Karlsruhe schema) була запропонована до появи схеми з використанням крапки з комою, вона дозволяє вказати кілька значень для номерів будинків addr:housenumber=* використовуючи кому як роздільник значень. Інші ключі з цифровими значеннями, такі як addr:unit=* та grades=*, також стали використовуватися таким чином, але крапка з комою також зазвичай використовується з усіма трьома ключами.
Зв'язки
Використання зв'язків не є в прямому сенсі схемою позначення кількох значень, але той факт, що об'єкти OSM можуть входити до складу кількох зв'язків, тож вони можуть нести кілька подібних значень, представляючи різні сутності. Таким прикладом можуть бути дороги highway=* по яких проходять кілька шляхів.
Камінь спотикання
Редактор iD колись створював номерні суфікси
До лютого 2019 створював номерні суфікси для ключів, що викликало певні непорозуміння. Деякі теґи типу foo_1=* були додані в базу випадково. Якщо ви підозрюєте, що такий теґ у базі даних створено випадково, спершу зверніться до мапера, який додав його.