< RU:Catalog

RU:Catalog/Hind

Коталог объектов OSM призван создать простой машиночитаемый формат, унифицирующий определение, иерархию и перевод тегов и значений. Предполагаемое использование:

  1. Полный перевод описаний и ключевых слов: человекочитаемость, живой поиск на своем языке;
  2. Конвертация в пресеты JOSM;
  3. Создание иерархии элементов для различных каталогов/списков и её однородность;
  4. Организация списка «правильных» тегов, для пользователей и валидаторов.


Обсуждение 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": "Школа."
       }
     }
   ]
 }
This article is issued from Openstreetmap. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.