0

ステートメントで満たされた Jena モデルがあり、次のGenericRuleReasonerようにカスタム ルール文字列を使用します ( Jena チュートリアル ページから直接取得した例)

String rules = "[rule1: (?a eg:p ?b) (?b eg:p ?c) -> (?a eg:p ?c)]";
Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rules));
reasoner.setDerivationLogging(true);
InfModel inf = ModelFactory.createInfModel(reasoner, model);

Jena reasoner についての私の理解では、新しい推論モデルには、ルールによって生成されたステートメントと、新しく推論されたinfステートメントが含まれます。modelステートメントのインスタンスは両方infmodel共有されていますか、それとも異なっていますか? もし違うなら、これはメモリを浪費しすぎませんか?

私が抱えている問題は、推論されたステートメントをmodel. モデルをループしてinf新しく推論されたステートメントを見つけて追加するmodelのは、単純なアプローチのようです。他に賢明な方法はありますか?

最後に、古いステートメントを から削除するための最良の方法は何だろうと思っていmodelます。時代遅れのステートメントで私が意味することは、おそらく例によって最もよく説明されます。にステートメント (Speaker hasSoundLevel 50) があるとしmodelます。その後、(Speaker hasSoundLevel 80) などの新しいステートメントが挿入されると、model. これはルールを使用して達成できますか? ステートメントが挿入されてから一定の時間が経過した後、そのステートメントを古くする必要がある場合はどうすればよいでしょうか? これを達成する方法についての提案をいただければ幸いです。

ありがとう、

4

2 に答える 2

0

生成される推論モデルには、元のオントロジーからのステートメントと、推論者からの推論されたステートメントの両方が含まれます。私の知る限り、これらのステートメントは共有されていませんが、多くのメモリを浪費しているとは思いません。詳細を知りたい場合は、実際に Jena に取り組んでいる人に、メーリング リストからメールを送信してください。

古いステートメントの削除に関しては、ルールを介して直接行うことはできません。ただし、Jena ルール用のカスタム ビルトインを作成して、ルール ファイルを介してフィードしたステートメントを削除するか、プログラムでいくつかの基本的な論理条件を指定して OntModel で API 呼び出しを使用することができます。
繰り返しますが、私の知る限り、Jena はステートメントがモデルに追加されたときのタイムスタンプをネイティブに保持していないため、一定時間後にステートメントを無効にすることはできませんが、リスナーを追加してログを保持することはできます。ログ時間を使用して、いつ無効にするかを判断します。

于 2015-09-15T06:43:56.747 に答える