質問

Jenaオントロジーモデルを持っています( OntModel )これをプログラムで変更しています。このモデルは、最初にオントロジーモデルを作成するデフォルトのModelFactoryメソッド(パラメーターなし)。問題は、プログラムが実行され、モデルが変更されたときに、デフォルトのJena Reasonerが実行(および実行および実行および実行)されることでした。このプロセスは、私が必要とするものには完全に遅すぎ、大きなデータセットではメモリ不足になります。

異なるオントロジーモデルファクトリメソッドを使用して、推論なしでモデルを作成します。これは非常に高速で実行され、以前に見たメモリの問題はまったくありませんでした(非常に大きなデータセットであっても)。このアプローチの問題は、直接クラス型を直接使用することによってのみデータにアクセスできることです(親クラスを使用してオブジェクトにアクセスすることはできません)。

たとえば、<!> quot; flower <!> quot;という2つのクラスリソースがあるとします。および<!> quot; seed <!> quot;。これらは、共通の親である<!> quot; plant material <!> quot;を継承します。私のプログラムはすべての<!> quot; seeds <!> quot;を受け取り、<!> quot; grow <!> quotというメソッドを実行します。 <!> quot; seed <!> quot;を変換します。オブジェクトを<!> quot; flower <!> quot;オブジェクト。 <!> quot; grow <!> quot; Reasoner(micro Reasonerを含む)を使用すると、メソッドの実行が非常に遅くなり、メモリ不足になります。 Reasonerをオフにすると、すべての<!> quot; flowers <!> quot;にアクセスできなくなります。および<!> quot; seeds <!> quot; <!> quot; plant material <!> quot;クラス。

これを行うための好ましい方法(幸せな媒体)はありますか?スーパークラスを使用してオブジェクトにアクセスする能力を許可する一方で、高速であり、メモリを浪費することはありませんか?

<!> quot; reasoner <!> quot;をオフにする方法を探していました。 <!> quot; grow <!> quot;を実行中メソッドを完了し、メソッドが完了したら元に戻します。これはどういうわけか可能ですか?

役に立ちましたか?

解決

ヘルプと提案があり、これはこの問題の解決方法です。

基本的に、Reasonerを使用せずに別のモデルにアクセスし、基本モデルへのすべての変更をバッチ処理してから、更新プログラムを取得するために推論システムで完全なモデルをリバウンドしました。

ここに疑似コードを示します。私の<!> quot; real <!> 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