【问题标题】:Toggle Jena Reasoner切换耶拿推理机
【发布时间】:2010-10-13 20:12:52
【问题描述】:

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

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

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

有没有一种首选的方式(一种快乐的媒介)来做到这一点...允许使用它们的超类访问对象,同时又快又不占用内存?

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

【问题讨论】:

    标签: semantics jena


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 2015-06-15
      相关资源
      最近更新 更多