Serialization 使用网站的OWL API序列化本体推理器结果

Serialization 使用网站的OWL API序列化本体推理器结果,serialization,ontology,owl,Serialization,Ontology,Owl,我想使用OWLAPI或直接使用HermitReasoner之类的工具,在本体上生成推论。这很简单(代码如下所示)。但是,我希望缓存/存储/保存这些结果,这样就不必每次都重新运行推理程序。这就是虚拟机中发生的情况。我第一次称之为: Set<OWLClass> classes = reasoner.getSubClasses(parent, false).getFlattened(); Set classes=reasoner.getsubclass(parent,false).get

我想使用OWLAPI或直接使用HermitReasoner之类的工具,在本体上生成推论。这很简单(代码如下所示)。但是,我希望缓存/存储/保存这些结果,这样就不必每次都重新运行推理程序。这就是虚拟机中发生的情况。我第一次称之为:

Set<OWLClass> classes = reasoner.getSubClasses(parent, false).getFlattened();
Set classes=reasoner.getsubclass(parent,false).getflatten();
大约需要20秒(在本例中)。第二次生成相同的结果不需要时间,因为它们是缓存的。那太好了。然而,如果我跳出我的虚拟机,我必须重新运行reasoner(我有一些相当长的查询),或者将输出保存到数据库中,以便立即显示它们

Reasoner是不可序列化的(无论是从Hermit还是通过OWLAPI),我似乎没有明显的方法来重新创建Reasoner并将以前的结果加载到其中。每次都必须重新计算它们

序列化本体很简单,但我看不到任何方法 将结果重新加载到推理器中,以避免您不得不 同样的电话又来了

有什么我遗漏的吗?耶拿会是更好的选择吗

OWLOntologyManager-OWLOntologyManager=OWLManager.createOWLOntologyManager();
File File=新文件(“resource/RDFData/release”,“NEMOv2.85_GAFLP1_diffwave_data.rdf”);
IRI IRI=IRI.create(文件);
OWLDataFactory=owletologymanager.getOWLDataFactory();
OWLOntology=owlOntologyManager.loadOntologyFromOntologyDocument(iri);
推理机推理机=新推理机(本体);
OWLClass parent=factory.getOWLClass(IRI.create(DataSet.NS+“#NEMO_0877000”);
Set classes=reasoner.getsubclass(parent,false).getflatten();
FileOutputStream=null;
ObjectOutputStream out=null;
试试{
fos=新文件输出流(“reasoner.ser”);
out=新对象输出流(fos);
out.writeObject(推理机);
out.close();
}捕获(IOEX){
例如printStackTrace();
} 

保存推断出的本体(从InferredOntologyGenerator获得)似乎是最好的方法


但据我所知,当您创建新的推理器时,推理器仍然会检查一致性并对本体进行分类,但速度更快,因为您已经明确了所有的推断。

答案是使用推断出的本体导出OWL本体。在阅读了新的推断本体并用它创建了一个推理器之后,推理器不觉得需要重新推断。遵循此处描述的导出:然后重新导入:owlOntologReadOntology=owlOntologyManager.loadOntology(iriOut);推理机r2=新推理机(readOntology);classes=r2.GetSubClass(父类,false).GetFlatten();