首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >切换Jena推理机

切换Jena推理机
EN

Stack Overflow用户
提问于 2009-03-17 13:14:05
回答 1查看 1.3K关注 0票数 5

我有一个Jena本体模型(OntModel),我正在对其进行编程修改。此模型最初是使用default ModelFactory method to create an Ontology model (with no parameters)创建的。问题是,随着程序的运行和模型的改变,默认的Jena Reasoner将会运行(并且运行,运行,再运行)。对于我需要的东西来说,这个过程完全太慢了,而且在大数据集上会耗尽内存。

我更改了程序,使用a different ontology model factory method创建了一个没有推理机的模型。它运行得非常快,没有表现出我之前看到的任何内存问题(即使是非常大的数据集)。这种方法的问题是,我只能通过直接使用它的直接类类型来访问数据(我不能使用它的父类访问对象)。

例如,假设我有两个类资源,“花朵”和“种子”。这些都继承自一个共同的亲本--“植物材料”。我的程序获取所有的“种子”,运行一个名为"grow“的方法,它将”种子“对象转换为”花“对象。当使用推理器(甚至是微型推理器)时,"grow“方法运行太慢,内存不足。如果我关闭了推理机,那么我就不能使用"plant material“类访问所有的”花朵“和”种子“。

有没有一种更好的方式(一种愉快的媒介)来做到这一点……允许使用它们的超类访问对象的能力,同时也是快速的,而不是占用大量内存?

我一直在寻找一种方法,在我运行我的"grow“方法时”关闭推理机“,然后在该方法完成后将其返回一个。这是不是有可能呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-03-18 20:34:26

我得到了一些help and suggestions,然后这就是我如何解决这个问题的。

基本上,我在没有推理机的情况下访问另一个模型,批量处理我对基本模型的所有更改,然后使用推理机重新绑定完整的模型以获得更新。

下面是一些psuedo代码。它与我的“真实”场景并不完全匹配,但是你已经明白了。

代码语言:javascript
运行
复制
// 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....
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/654189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档