[英]Method listIndividual() takes more than 15 mins with “DBPedia_2014.owl” (2MB-size file)
“dbpedia_2014.owl”是一个组织不同概念的owl文件,不包含个体。 可以通过http://data.dws.informatik.uni-mannheim.de/dbpedia/2014/dbpedia_2014.owl.bz2下载
问题是当我在 Jena 中使用 listIndividual() 方法时,处理这么小的 (2MB) 文件需要超过 15 分钟。 代码如下:
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.ModelFactory;
public class OntModelTest
{
public static void main(String[] args)
{
String fileName1 = new String("owl_qiwang_test/vc-db-1.rdf");
String fileName2 = new String("owl_qiwang_test/dbpedia_2014.owl");
OntModel ontModel = ModelFactory.createOntologyModel();
ontModel.read(fileName2);
long startMil = System.currentTimeMillis();
System.out.println("Start: " + startMil);
ontModel.listIndividuals();
long endMil = System.currentTimeMillis();
System.out.println("Duration: " + (endMil - startMil));
}
}
我想知道为什么要花这么长时间才能做到这一点。 有任何想法吗?
您正在使用的方法的 javadoc 说它提供了一些推理功能。 这可能是性能问题的根源,因为推理的复杂性与大小没有密切联系:较大的本体通常比较小的本体更难推理,但是小本体可能真的很难推理。
public static OntModel createOntologyModel()
回答一个新的本体模型,该模型将处理表示默认本体语言 (OWL) 的本体的内存模型。 默认文档管理器将用于加载本体的包含文档。
注意:为 OWL 和 RDFS 选择的默认模型包括一个弱推理器,其中包含一些蕴涵(例如子类和子属性层次结构上的传递闭包)。 想要根本不进行推理,或者想要更完整的推理的用户,应该使用允许声明首选 OntModel 规范的其他 createOntologyModel 方法之一。
我在这里有一个类似的问题
如果你想在不使用推理器的情况下使用listIndividuals()
方法,你可以这样做:
Model _model = model.getRawModel();
OntModel newModel = new OntModelImpl(OntModelSpec.OWL_MEM, _model);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.