2009-03-17 3 views
4

У меня есть онтологическая модель Йены (OntModel), которую я изменяю программно. Первоначально эта модель была создана с использованием default ModelFactory method to create an Ontology model (with no parameters). Проблема заключалась в том, что по мере запуска программы и изменения модели, по умолчанию Jena Reasoner будет запускаться (и запускать, запускать и запускать). Процесс был слишком медленным для того, что мне нужно, и на больших наборах данных закончилось бы нехватка памяти.Toggle Jena Reasoner

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

Например, представьте, что у меня было два ресурса класса: «цветок» и «семя». Они наследуются от общего родителя, «растительного материала». Моя программа принимает все «семена», запускает метод «расти», который превращает «семенной» объект в объект «цветок». Метод «расти» работает слишком медленно и исчерпывает память при использовании Reasoner (даже Micro Reasoner). Если я выключу Reasoner, то я не смогу получить доступ ко всем «цветкам» и «семенам», используя класс «растительный материал».

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

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

ответ

4

У меня есть help and suggestions, то вот как я решил эту проблему.

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

Вот какой-то код псевдео. Это точно не соответствует моему «реальному» сценарию, но вы получаете эту идею.

// 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.... 
Смежные вопросы