RU:Catalog/Hind
Коталог объектов OSM призван создать простой машиночитаемый формат, унифицирующий определение, иерархию и перевод тегов и значений. Предполагаемое использование:
- Полный перевод описаний и ключевых слов: человекочитаемость, живой поиск на своем языке;
- Конвертация в пресеты JOSM;
- Создание иерархии элементов для различных каталогов/списков и её однородность;
- Организация списка «правильных» тегов, для пользователей и валидаторов.
Обсуждение http://forum.openstreetmap.org/viewtopic.php?id=16704
GitHub https://github.com/ErshKUS/osmCatalog
Описание схемы
Формат представляет собой JSON-объект с двумя свойствами, каждое из которых отвечает за свой раздел:
{ tags: [], classes: [] }
tags
tags описывает все используемые теги и представляет собой массив объектов следующей структуры:
Свойство | Тип | Обязательный | Описание |
---|---|---|---|
id | строка | да | Идентификатор тега. Рекомендуется использовать только латинские символы нижнего регистра, цифры и точку. Можно использовать сам тег, приводя его к такому виду. |
tag | строка | да | Ключ тега |
values | массив | да | Объект или массив объектов, описывающих допустимые значения тега. Описание структуры таких объектов в таблице ниже. |
description | строка / объект | Строка или объект translation, содержащий описание тега |
Объект value:
Свойство | Тип | Обязательный | Описание |
---|---|---|---|
id | строка | Идентификатор значения. Рекомендуется использовать только латинские символы нижнего регистра, цифры и точку. | |
type | строка | да | Тип значения. Варианты: *, preset, numeric, integer, boolean, regexp |
value | строка | да, для preset и regexp | Для варианта preset — точное значение, regexp — регулярное выражение |
description | строка / объект | Строка или объект translation, содержащий описание значения |
Объект translation:
Свойство | Тип | Обязательный | Описание |
---|---|---|---|
Код языка в стандарте ISO 639-1 | строка | Содержимое на соответствующем языке |
classes
Определение класса представляет собой JSON-объект:
Свойство | Тип | Обязательный | Описание |
---|---|---|---|
id | строка | да | Имя класса. Рекомендуется использовать только латинские символы нижнего регистра, цифры и точку. Пространство имён не пересекается с тегами и значениями. |
abstract | булев | Если присутствует и установлено в true, то класс считается абстрактным. Абстрактные классы не должны применяться напрямую (например, экспортироваться в JOSM)! | |
parents | строка / массив | id родителей. | |
tags | строка / объект / массив | да, при отсутствии родителей | Объект или массив объектов, описывающих характерные теги. Вместо объектов можно указывать id тега в виде строки (результат аналогичен незаполненным required и values в таблице ниже) |
type | строка / массив | да, при отсутствии родителей | Типы объектов, к которым допустимо применение класса. Рекомендуемые значения: *, point, line, area. Допустимые значения: node, way, closeway, relation. |
description | строка / объект | Строка или объект translation, содержащий описание класса |
Объекты tags в определении класса необходимы для обозначения необходимости тега и ссылки на его определение из первого раздела.
Свойство | Тип | Обязательный | Описание |
---|---|---|---|
required | булев | true — тег обязателен для объекта класса. false или не задан — не обязателен | |
tag | строка | да | id тега |
values | строка / массив | Идентификаторы значений. Если не задан, допускаются любые значения, предусмотренные тегом. |
Наследование
Массивы допустимых тегов объединяются. Если тег присутствует в обоих документах, массивы возможных значений также объединяются.
Потомок получает всё многообразие тегов и значений родителей.Обязательность тегов наследуется по правилу «ИЛИ»: если тег был обязателен хотя бы у одного предка, он будет обязателен у потомка.
Массивы допустимых типов пересекаются! Если родитель(-и) и/или потомок не имеют общих типов применения, потомка нельзя применить ни к чему.
Описание класса не наследуется (но можно выводить описания всех родителей по цепочке).
Пример
{ tags: [ { id: "name", tag: "name", values: [ { type: "*", description: { "en": "Any readable text.", "ru": "Любой читаемый текст." } } ], description: { "en": "Object name.", "ru": "Название объекта." } }, { id: "opening.hours", tag: "opening_hours", values: [ { type: "*", description: { "en": "Value in format http://wiki.openstreetmap.org/wiki/Key:opening_hours", "ru": "Значение в формате http://wiki.openstreetmap.org/wiki/RU:Key:opening_hours" } }, { id: "24.7", type: "preset", value: "24/7", description: { "en": "Day and night.", "ru": "Круглосуточно, без выходных и обеда." } } ], description: { "en": "Object opening hours.", "ru": "Часы работы объекта." } }, { id: "phone", tag: "phone", values: [ { type: "regexp", value: "/^\+[0-9 -]+$/", description: { "en": "Phone number as +<country code> <area code> <local number>", "ru": "Телефонный номер в формате +<код страны> <код города> <местный номер>" } } ], description: { "en": "Object phone number.", "ru": "Номер телефона объекта." } }, { id: "amenity", tag: "amenity", values: [ { id: "school", type: "preset", value: "school", description: { "en": "Object is a school.", "ru": "Объект является школой." } } ], description: { "en": "Amenities.", "ru": "Приятности." } } ], classes: [ { id: "nameable", abstract: true, tags: [ "name" ], type: "*", description: { "en": "Nameable object.", "ru": "Именуемый объект." } }, { id: "poi", abstract: true, parents: ["nameable"], tags: [ "opening.hours", "phone" ], type: ["point", "area"], description: { "en": "Point of interest.", "ru": "Точка интереса." } }, { id: "school", parents: ["poi"], tags: [ { required: true, tag: "amenity", values: "school" } ], description: { "en": "School.", "ru": "Школа." } } ] }