문제

나는 예나 온톨로지 모델이있다.OntModel) 프로그램 적으로 수정하고 있습니다. 이 모델은 처음에 The를 사용하여 만들어졌습니다 온톨로지 모델을 만들기위한 기본 modelfactory 메소드 (매개 변수 없음). 문제는 프로그램이 실행되고 모델이 변경됨에 따라 기본 Jena Tase는 실행 (실행 및 실행 및 실행)이었습니다. 프로세스는 내가 필요로하는 것에 대해 너무 느리고 큰 데이터 세트에서 메모리가 부족했습니다.

사용하도록 프로그램을 변경했습니다 다른 온톨로지 모델 공장 방법 추론자가없는 모델을 만듭니다. 이것은 매우 빠르게 달렸고 이전에 본 메모리 문제 중 어느 것도 나타나지 않았습니다 (매우 큰 데이터 세트의 경우조차도). 이 접근법의 문제점은 데이터를 직접 클래스 유형을 직접 사용하여 데이터에만 액세스 할 수 있다는 것입니다 (부모 클래스를 사용하여 객체에 액세스 할 수 없음).

예를 들어, "꽃"과 "씨"라는 두 가지 클래스 자원이 있다고 상상해보십시오. 이들은 일반적인 부모 "식물 재료"로부터 물려받습니다. 내 프로그램은 모든 "씨앗"을 가져 와서 "씨앗"객체를 "꽃"객체로 변환하는 "grow"라는 메소드를 실행합니다. "Grow"방법은 너무 느리게 실행되고 추론 자 (심지어 Micro Coreger)를 사용할 때 메모리가 부족합니다. 내가 추론자를 끄면 "식물 재료"클래스를 사용하여 모든 "꽃"과 "씨앗"에 액세스 할 수 없습니다.

이 작업을 수행하는 데 선호하는 방법 (행복한 매체)이 있습니까? 메모리 돼지가 아닌 빠르고 빠르지 않고 슈퍼 클래스를 사용하여 객체에 액세스 할 수 있습니까?

"Grow"메소드를 실행하는 동안 "추론 자"를 끄는 방법을 찾고 있습니다. 그런 다음 메소드가 완료되면 다시 돌아갑니다. 어떻게 든 가능합니까?

도움이 되었습니까?

해결책

난 좀 얻었다 도움과 제안, 이것이 내가이 문제를 해결하는 방법입니다.

기본적으로 추론자가없는 다른 모델에 대한 액세스를 얻었고, 모든 변경 사항을 기본 모델에 배치 한 다음, 전체 모델을 추론 자로 반등시켜 업데이트를 얻었습니다.

다음은 psuedo 코드입니다. 내 "실제"시나리오와 정확히 일치하지는 않지만 아이디어를 얻습니다.

// 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