繁体   English   中英

切换耶拿推理机

[英]Toggle Jena Reasoner

我有一个 Jena 本体 model (OntModel ),我正在以编程方式对其进行修改。 这个 model 最初是使用默认的 ModelFactory 方法创建的,用于创建本体 model(无参数) 问题是,随着程序的运行和 model 的更改,默认的 Jena Reasoner 将运行(并运行并运行并运行)。 这个过程对于我需要的东西来说太慢了,并且在大型数据集上会用完 memory。

我更改了程序以使用不同的本体 model 工厂方法来创建没有推理器的 model。 这运行得非常快,并且没有出现我之前看到的 memory 问题(即使对于非常大的数据集)。 这种方法的问题是我只能通过直接使用它的直接 class 类型来访问数据(我无法使用它的父类访问对象)。

例如,假设我有两个 class 资源,“花”和“种子”。 这些继承自一个共同的父母,“植物材料”。 我的程序获取所有“种子”,运行一个名为“grow”的方法,将“种子”object 转换为“花”object。 当使用 Reasoner(甚至是 micro Reasoner)时,“增长”方法运行速度太慢并且用完 memory。 如果我关闭 Reasoner,那么我无法使用“植物材料”class 访问所有“花”和“种子”。

有没有一种首选的方法(一种快乐的媒介)来做到这一点......允许使用它们的超类访问对象的能力,同时也很快而不是 memory 猪?

我一直在寻找一种在运行“增长”方法时“关闭推理器”的方法,然后在方法完成后将其转回。 这有可能吗?

我得到了一些帮助和建议,这就是我解决这个问题的方法。

基本上,我在没有 Reasoner 的情况下获得了另一个 model 的访问权限,将我对基本 model 的所有更改批量化,然后使用推理器重新启动完整的 model 以获取更新。

这是一些伪代码。 它不完全符合我的“真实”场景,但你明白了。

// 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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM