我有一个Jena本体模型(OntModel)我修改编程方式.这一模式最初创建的使用 默认ModelFactory方法,以创建一个体模型(没有参数).问题是,作为程序运行和该模型被改变,默认Jena的推理会的运行(和运行、运行和运行)。该过程完全是速度太慢,为什么,我需要会跑出来的存在的大数据集。

我改变了该程序的使用 一个不同体型工厂的方法 建立一个模型具有推理.这非常快速和显示出没有记忆的问题我之前看到的(即使是非常大的数据集的).这种方法的问题是,我只可以访问的数据通过直接使用它的直接的类型(我不能获得使用对象是父类)。

例如,想象一下我有两类资源的"花"和"种子"。这些继承一个共同的父母,"植物材料"。我的计划需要的所有的"种子"、运行的方法称为"成长",它将"种子"的对象变成了"花"对象。"成长"方法的运行速度太慢,内存用完时采用的推理(即使是微的推理).如果我关闭的推理,那么我不能访问所有的"花"和"种子"使用"植物材料"类。

有没有首选方式(一个快乐的媒体)以做这个...允许的能力,访问对象使用其超类,同时也正在快速且不存猪?

我一直在寻找一种"关闭的推理"虽然我行我的"成长"方法,然后把它放回一次的方法完成。这是可能以某种方式?

有帮助吗?

解决方案

我得到了一些帮助和建议的,那么这是我如何解决了这个问题。

基本上,我获得了进入另一个模型没有一个理性者,分批我所有的更改基本模型,然后反弹的完整模型与推理得到更新。

这里的一些伪代码。这并不完全符合我的“真实”的场景,但你的想法。

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