Jena程序在创建OntModel时冻结

时间:2015-12-10 14:01:08

标签: java c# jena owl ontology

背景

我目前正致力于存储,操作和推断信息的本体。最终目标是拥有一个Unity程序,作为操作和可视化此类信息的界面。 我的工作是提供本体结构(我为此目的使用Protege),本体的数据馈送程序(不同的解析器和与手工程序中的问题无关)和一组信息检索工具来获取这些信息(一个C#脚本,包含完成这些任务的方法。)

由于Jena软件包实际上是Java,Unity在.NET框架内工作,因此我从IKVM导入库来解决这个问题。

该程序的另一个动机是成为一个.dll库,供负责GUI模块的Unity程序使用。

问题:

我创建了一个程序,其中包含许多不同的方法,用于提取和过滤本体(.owl)文件所包含的信息,位于 ontdir 描述的文件路径中。下面引用该程序的一个片段。

我一直在研究使用推理来创建比通过推断规则提供的更丰富的模型的问题,但是,我或者仍然缺少一些基本的或者我需要经验丰富的帮助。

代码:

我现在正在运行的代码看起来像这样(显然是C#):

private Reasoner reasoner = null;
private OntModelSpec specs = null;
private OntModel m = null;
private string NS;
private string RDF;

public ontologyInfoRetriever (string ontdir)
    {
        try
        {
            this.m = ModelFactory.createOntologyModel();
            this.m.read("file:///" + ontdir, "");
            //this.reasoner = ReasonerRegistry.getOWLReasoner();
            //this.reasoner = this.reasoner.bindSchema(m);
            //this.specs = OntModelSpec.OWL_MEM; //I tried diferent values here
            //this.specs.setReasoner(this.reasoner);
            //this.m = ModelFactory.createOntologyModel(this.specs, this.m);
            this.NS = this.m.getNsPrefixURI("doc");
            this.RDF = this.m.getNsPrefixURI("rdf");
        }
        catch(Exception e)
        {
            Debug.Log (e.ToString ());
        }
    }

它的工作原理同样好,但由于没有在模型上使用推理,我只缺少一些信息。

但是当我取消注释该部分时,重新构建并将.dll导入到测试的Unity程序中并播放它...... Unity冻结了。 我等了5-10分钟,看看是不是只是我不耐烦但是内存使用只是保持堆叠(当猫头鹰文件本身不超过90Kb时我甚至达到了~1.8 GB)并且没有好处。

请帮助我t_t

修改 试着等待更多。内存使用率为5.4 Gb。等待流产。什么花了这么多时间和记忆?我怀疑有一个循环纠缠着推理者但是当我在Protege中管理本体并使用推理器时,没有死亡的死亡循环:(

EDIT2: 现实生活中的消息来源告诉我,jena只为reasoners提供了一个界面,你要么自己配置推理器,要么用一个包(Hermit,Pellet等)导入包。这导致我this issue

0 个答案:

没有答案