Как Forge Viewer взаимодействует с локальным хранилищем (файлы json)? - PullRequest
0 голосов
/ 04 октября 2019

Мне нужно реализовать некоторые настройки в средстве просмотра Autodesk, и для этого мне нужно понять, как работают отношения с файлами репозитория, чтобы понять эти отношения, я также использую модель.sdb, предоставляемую forge производным-api. (то же самое, что дает нам файлы json).

Я определил 6 файлов:

objects_ids.json.gz
objects_attrs.json.gz
objects_avs.json.gz
objects_vals.json.gz
objects_offs.json.gz
objects_viewables.json.gz

Некоторые из этих файлов довольно просты для понимания:

objects_ids.json.gz - Этот файл имеет то же содержимое, что и таблица _objecs_id, в основном это внешний id и dbids (номер строки -1).

objects_attrs.json. gz - Опять же, этот файл эквивалентен таблице в базе данных sdb, очень легко читаемой. Здесь у нас есть определение атрибутов, используемых в просмотрщике моделей. Он имеет следующие «столбцы»: идентификатор, имя, категория, тип_данных, тип_данных_контекста, описание, имя_отображения, флаги, display_precision

objects_vals.json.gz Эквивалент таблицы _objects_val, здесь мы имеемдве вещи, ID и VALUE (для атрибутов, определенных в предыдущем документе json).

До сих пор все было довольно просто ... У нас есть идентификация объекта, атрибуты и возможные значения, но проблема в том,как заставить потом работать вместе? Прямо сейчас они изолированы, поэтому они бесполезны прямо сейчас. Мне нужно связать идентификацию объекта с его атрибутами с его значениями.

Для этого в model.mdb мы можем объединить таблицы с основной таблицей отношений: _objects_eav Он имеет entity_id, attribute_id и value_id,Таким образом, чтобы объединить данные и получить необходимую нам информацию, мы можем просто сделать:

`SELECT * FROM _objects_id
INNER JOIN _objects_eav ON _objects_id.id = _objects_eav.entity_id
INNER JOIN _objects_attr ON _objects_attr.id = _objects_eav.attribute_id
INNER JOIN _objects_val ON _objects_val.id = _objects_eav.value_id`

Но не существует файла json, эквивалентного таблице _objects_eav ...

Вместо этого мы имеем следующееfiles objects_avs.json.gz, objects_offs.json.gz, objects_viewables.json.gz

В настоящее время я не знаю, как объединить данные между этими файлами и получить всю необходимую информацию,Есть ли какие-либо сложности по этому поводу?

Другие мысли: В качестве альтернативы я мог бы использовать model.sdb для доступа к данным, но я бы предпочел использовать JSON, поскольку они намного меньше (в 30 раз меньше, чем model.sdb, этоогромное количество).

Я мог бы также получить некоторые данные, используя методы, предоставляемые объектами просмотра в JavaScript, но тогда я застрял бы с методами и свойствами, предоставленными средством просмотра, и, к сожалению, они не выполняютвсе мои требования.

Тогда есть возможность использовать производный от модели API, но одно из моих требований - уметь работать с отключенными данными (автономно).

1 Ответ

1 голос
/ 04 октября 2019

Вот что содержат отдельные файлы .json.gz:

  • objects_ids.json.gz - идентификаторы объектов
  • objects_offs.json.gz - для каждого идентификатора объекта с таким же индексом в objects_ids.json.gz, этот массив определяет смещение в списке атрибут-значение в objects_avs.json.gz
  • objects_avs.json.gz - содержит пары атрибут-значение, которые в основном смещаются в objects_attrs.json.gz и objects_vals.json.gz
  • objects_attrs.json.gz - содержит различные атрибуты (и, по-моему, их метаданные)
  • objects_vals.json.gz - содержит дедуплицированные значения

С учетом вышесказанного, я все же предлагаю использоватьФормат sqlite (хотя он и больше) вместо проприетарных файлов .json.gz, так как они действительно предназначены для использования в Forge Viewer и могут измениться в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...