Pergunta

Eu tenho um modelo ontologia Jena ( OntModel ) que eu estou modificando programaticamente. Este modelo foi inicialmente criada usando o método ModelFactory padrão para criar um modelo de Ontologia (sem parâmetros) . O problema era, como a RAN programa e o modelo foi alterado, o padrão Jena Reasoner seria executado (e correr e correr e correr). O processo foi inteiramente demasiado lento para o que eu preciso e iria ficar sem memória em grandes conjuntos de dados.

Eu mudei o programa para uso um modelo diferente ontologia método de fábrica para criar um modelo sem reasoner. Este correu extremamente rápido e nenhum exibiu dos problemas de memória que eu vi antes (mesmo para grandes conjuntos de dados). O problema com esta abordagem é que eu só pode acessar os dados usando diretamente é tipo de classe direta (eu não posso ter acesso a objetos usando sua classe pai).

Por exemplo, imagine que eu tinha dois recursos de classe, "flor" e "semente". Estes herdam de um pai comum, "material vegetal". Meu programa tem todas as "sementes", executa um método chamado "crescer", que transforma o objeto de "semente" em um objeto de "flor". O "crescer" método funciona muito lento e ficar sem memória ao usar um Reasoner (mesmo o micro Reasoner). Se eu desligar o Reasoner, então eu não posso acessar todas as "flores" e "sementes" usando a classe "material vegetal".

Existe uma maneira preferida (um meio termo) para fazer isso ... permitindo a capacidade de acessar objetos usando sua superclasse, enquanto também é rápido e não um devorador de memória?

Eu estive procurando uma maneira de "desligar o pensador" enquanto eu executar o meu método de "crescer" e, em seguida, ligá-lo novamente uma vez as concluída método. Isso é possível de alguma forma?

Foi útil?

Solução

Eu tenho alguns ajuda e sugestões , então este é como eu resolver este problema.

Basicamente, ganhei acesso a outro modelo sem Reasoner, agrupadas todas as minhas alterações para o modelo básico, em seguida, recuperar o modelo completo com o MI para obter as atualizações.

Aqui está algum código pseudo. Ele não corresponder exatamente meu cenário "real", mas você começa a idéia.

// 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....
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top