代码之家  ›  专栏  ›  技术社区  ›  Vinnie

杰娜推理机

  •  4
  • Vinnie  · 技术社区  · 17 年前

    我有一个Jena本体模型( OntModel default ModelFactory method to create an Ontology model (with no parameters) . 问题是,随着程序运行和模型更改,默认的Jena Reasoner将运行(并且运行,运行,运行,运行)。这个过程对于我所需要的东西来说太慢了,并且会在大数据集上耗尽内存。

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

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

    我一直在寻找一种方法,在运行“grow”方法时“关闭reasoner”,然后在方法完成后将其返回一次。这有可能吗?

    1 回复  |  直到 17 年前
        1
  •  5
  •   Vinnie    17 年前

    help and suggestions ,那么这就是我解决这个问题的方法。

    基本上,我在没有推理机的情况下获得了对另一个模型的访问权,对基本模型进行了批量更改,然后使用推理机恢复完整模型以获得更新。

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

    // 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....
    
    推荐文章