Да ты меня правильно понял:
- нечего выдумывать сложности для 0,1% значений
- нечего ради этого 0,1% новичкам горовит слово “регулярка”. Тебе нравится когда твоё имя предлагают найти как ~ди~? Димой тебя не зовут? Dmitry нет такого имени? Зачем я вообще это должен кому-то объяснять?
- нечего поддерживать программы которые парсят name=* или считают что highway=* найдёт дороги. Что ~Дми~ это регулярка имени Дмитрий. Ты пол людей тоже по именам определаешь? А не отдельному смысловому тегу “пол”?
Вообще не нужно разделять по точке с запятой. Ты не строки парсишь.
http://wiki.openstreetmap.org/wiki/Tag%3Ashop%3Dsupermarket “A large store for groceries and other goods”
Хотят твои пользователи “groceries and other goods” ищи для них “shop”=“supermarket”. Обрати внимание на кавычки. Я настаиваю что код счиатющие shop= - магазинами сломан изначально. Те кто от лени ищут все с shop=* не должны говорить остальным что магазины это shop=. У нас 200+ тегов магазинов, никих регулярок shop= в OSM нет.
Это делается один раз и выкладывается на гитхаб. Никакого секрета в 200 тегах через дизъюнкцию нет. Вместо этого ты хочешь чтобы каждый разработчик блестал (как ему кажется) регулярками.
Более того, обычные пользователи не могут использовать регулярки в значениях у программ которые пытаешься защищать.
Попробуй-ка мне найти volleyball этими osmosis или osmfilter:
у объектов с sport=soccer;volleyball
Конечно же да. Если osmosis еще можно пожалеть как основную программу импорта.
Ни osmosis
Ни osmfilter
Не могут выполнить функции базы данных. Если ты составлял запросы в них, а не postgres, спешу тебя огорчить, есть более продуктивные инструменты для работы с данными OSM. Пропогандируя менее эффективные инструменты (в т.ч. регулярки) ты не напрямую, но затягиваешь процесс эволюции.
osmosis это утилита выгрузки-загрузки в DB, не более. То, что ты видишь фильтрацию в ней это плюшки, а не основная функция.
Основаную фукнцию запросов выполняют
- postgresql
- overpass
- OSM API 0.6
В блокнотике тоже можно xml читать, но это не значит что это хорошая идея или стоит так советовать всем делать.
Фраза хорошая, но целиком не соглашусь.
Смысл объекта мира нужно дробить, тогда его можно будет впихнуть в маленькие теги OSM.
Если раньше жили sport=soccer;volleyball и казалось нормально, то сегодня нужно два тега:
sport:soccer=yes
sport:volleyball=yes
Получилось впихнуть? Конечно. Можно найти воллебольную площадку? Да запросто:
“sport:volleyball”=“yes”
Никаких регулярок вообще никому или разбиения по ; в коде.
Для обратной совместимости с предыдущими программами можно указать ещё один тег-костыль:
sport=multi либо sport=soccer
phone=* тоже в исключения, нет смысла их разделять на теги. У телефонов нет смыслов poi. Вы не ишете по 11цифрам-значениям. Напротив, для спорта, вам нужен только определённый спорт.
Не нужно писать sport=multi, это почти ничего не значит. Это подойдёт только для совместимости со старыми программами.
То же что и с телефонами, смысла различать их нет как разные POI, пока что у нас нет массивов вместо тупой строки value (tag=value), придётся их писать через ;. Как только появятся массивы, тут же перетегируем без точкозапятых.
Насчёт alt_name= еще можно согласится, то old_name=* точно нельзя смешивать с name=. old_name= значит старое имя, name=* для текущего и действующего.
Про old name: как вариант можно договориться использовать не old_name=, а was:name=. Но это чисто наше Российское соглашение будет, дубов в tagging@ сдвинуть нереально.