Такое не предлагается. Это основа онтологии и вменяемых информационных систем, кто бы и что про неё не думал.
Мы прячем старые говорливые теги в иерархии меток. Метки могут быть иерархичны (метка ##shop:tea зависит от #shop), а могут быть полностью независимы (более адекватный подход, позволяет несколько таксономий, которые если очень хочется можно потом объединить новой более общей меткой или зависимостью от другой метки)
В недоработанной онтологии OSM пользователи путают атрибут (key=value) и понятия (##метка у семантической коробки). Класса объекта в OSM нет. Нет машинно-читаемого архетипа, если вам будет проще.
Проблема в том что главная ##метка меняется:
- пишете ли вы рендер (для всего мира, только для одной страны)
- пишете ли вы геокодер (самая сложная задача для всего мира вообще, ответы на вопрос “как назвать этот объект?”)
- что является для вас “спортом” (бокс - нет, шахматы - да, фигурное плавание - нет, компьютерные игры - нет)
- интересны ли для вас только группы спортов (только бильярды)
Вопрос сложный, зависит от цели для которой вы хотите распарить объект. На понятийном уровне нужно учитывать семантические коробки (фигурные скобки у синтаксиса OverQuantum:
##highway
{
#surface: asphalt
#oneway: true
#lanes: 2
#maxspeed: 40
#name: улица Космонавтов
}
Т.е. чтобы распарсить такую структуру (я специально сделал #highway похожим на данные из OSM) для графа дорог логика будет очень похожа на предыдущую:
- Если встречаешь у коробки #highway, то тебе эта группа тегов (коробка) как минимум интересна (валидация)
- Если противоречивых тегов нет у коробки #highway ##nothighway, то можно собственно приступать к извлечению данных
2.1 можно останавливаться если встречаются метки, отличные от вашего белого списка
2.2 можно продолжать извлекать данные, на свой страх и риск (те метки могут значить “это не дорога”, а могут не значит ничего ##ufo или вам не мешать ##namedobject) - Извлекаем только те атрибуты которые нам интересны (не нужно имя для графа дорог) и умываем руки
тот же самый объект реального мира могут замапить как
##namedobject
{
#name: улица Космонавтов
#name:ru: улица Космонавтов
#name:en: Kosmonavtov street
#description: угадываю название на Английском
}
##highway
{
#surface: asphalt
#oneway: true
#lanes: 2
#maxspeed: 40
#name: улица Космонавтов
}
Геокодер может обрабатывать только коробку с ##namedobject если хочет работать быстро или “смотреть атрибуты только для него”. Тегирование под роутинг, геокодинг и рендеринг (#hex-значения, которых в реальном мире-то нет) это вообще-то, нормально. Просто делать нужно в отдельных для этого местах, чтобы людей не смущать.
“Постойте-ка в реальном мире только одно имя, мы тут сущности плодим”.
В этом вся соль и есть. Онтологии не строятся из абстрактных побуждений ##объектмира, ##боженькасотворил.
Вместо этого абсолютно все пользователи будут использовать самые-самые практичные для них онтологии:
- #shop // не самая лучшая идея, я бы сразу использовал ##sells:goods и ##sells:services
- #highway
- #poi // плохая категория, я бы такую не стал использовать
Что делать если на вашу очень осмысленную коробку покушаются какой-то непонятной меткой? Завелось тут ##ufo понимаешь, что с ними делать теперь. Ну во-первых, спросить у автора метки ##ufo (до этого дооооооолгий и мучительный процесс принятия тегов) что он хочет с ней делать или посмотреть что он написал в её описании на вики, может быть она вам не навредит с её атрибутами.
Если не походит чья-то метка, делайте копию старой вашей коробки. Например: у вас было #highway {}, кто-то пришел и указал #highway #poi {}
Эту схему poi вы считаете непримиримой к данному объекту реального мира, у вас пасинг ломается от её специфических атрибутов схемы #poi. Эту ситуацию мы всегда видим у приверженцев тега type=. **У одних одно, у других он значит **другое.
Поэтому вы копируете старую коробку только с #highway и не мешаете людям экспериментировать с #poi. Может он у них заработает и вы к них присоединитесь. Может нет, у вас будет своя коробка (и ваш любимый хеш-тег на ней).