Вопрос

У меня есть модель онтологии Jena ( OntModel ) который я изменяю программно. Эта модель изначально была создана с использованием метод ModelFactory по умолчанию для создания модели онтологий (без параметров) . Проблема заключалась в том, что, поскольку программа работала и модель изменялась, по умолчанию запускалась Jena Reasoner (и запускалась, и запускалась, и запускалась). Процесс был слишком медленным для того, что мне нужно, и на больших наборах данных не хватало бы памяти.

Я изменил программу на использование другой метод фабрики моделей онтологий , чтобы создать модель без аргумента. Это работало очень быстро и не показывало никаких проблем с памятью, которые я видел ранее (даже для очень больших наборов данных). Проблема этого подхода в том, что я могу получить доступ к данным только напрямую, используя прямой тип класса (я не могу получить доступ к объектам, используя его родительский класс).

Например, представьте, что у меня есть два класса ресурсов: " flower " и " seed " ;. Они наследуются от общего родителя, & Quot; растительный материал & Quot ;. Моя программа берет все & Quot; seed & Quot ;, запускает метод с именем & Quot; grow & Quot; который преобразует " seed " объект в " flower " объект. & Quot; grow & Quot; метод работает слишком медленно и не хватает памяти при использовании Reasoner (даже микро Reasoner). Если я отключу Reasoner, то не смогу получить доступ ко всем & Quot; flowers & Quot; и " семена " используя " растительный материал " класс.

Есть ли предпочтительный способ (удачный способ) сделать это ... позволяющий получить доступ к объектам с помощью их суперкласса, при этом будучи быстрым и не забирая память?

Я искал способ & отключить рассуждение &; пока я запускаю свой " grow " метод, а затем поверните его обратно один раз, когда метод завершится. Возможно ли это как-то?

Это было полезно?

Решение

Я получил некоторую справку и предложения , а затем Вот как я решил эту проблему.

По сути, я получил доступ к другой модели без Reasoner, собрал все свои изменения в базовой модели, а затем восстановил всю модель с помощью анализатора, чтобы получить обновления.

Вот немного кода псевдо. Это не совсем соответствует моему & Quot; реальному & Quot; сценарий, но вы поняли.

// Create a model with a reasoner and load the full model from owl files or
// whatever
OntModel fullModel = ModelFactory.createOntologyModel();
fullModel.read(...);

// create a model without a reasoner and load it from the full model with
// reified statements
OntModel basicModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
basicModel.add(fullModel);

// batch modifications to the basic model programatically
//(**** RUNS REALLY QUICK *****)

// rebind the full model
fullModel.rebind();

// continue on....
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top