OWL API を使用して、または Hermit 推論器のようなものを使用して、オントロジーに関する推論を生成したいと考えています。これは簡単です (以下にコードを示します)。ただし、毎回推論を再実行する必要がないように、これらの結果をキャッシュ/保存/保存したいと思います。これが VM で発生することです。初めてこれを呼び出す:
Set<OWLClass> classes = reasoner.getSubClasses(parent, false).getFlattened();
約 20 秒かかります (この例では)。2 回目は、キャッシュされているため、同じ結果を生成するのに時間がかかりません。それは素晴らしい。ただし、VM をバウンスした場合は、推論を再実行するか (かなり長いクエリがいくつかあります)、出力をデータベースに保存してすぐに表示する必要があります。
Reasoner は (Hermit から、または OWL API を介して) シリアライズ可能ではなく、Reasoner を再作成して以前の結果をそこにロードする明らかな方法はないようです。毎回再計算する必要があります。
オントロジーのシリアル化は簡単ですが、同じ呼び出しを再度行わなくても済むように、結果を推論エンジンにリロードする方法がわかりません。
足りないものはありますか?これにはイエナの方が適していますか?
OWLOntologyManager owlOntologyManager = OWLManager.createOWLOntologyManager();
File file = new File("resource/RDFData/release", "NEMOv2.85_GAFLP1_diffwave_data.rdf");
IRI iri = IRI.create(file);
OWLDataFactory factory = owlOntologyManager.getOWLDataFactory();
OWLOntology owlOntology = owlOntologyManager.loadOntologyFromOntologyDocument(iri);
Reasoner reasoner = new Reasoner(owlOntology);
OWLClass parent = factory.getOWLClass(IRI.create(DataSet.NS + "#NEMO_0877000"));
Set<OWLClass> classes = reasoner.getSubClasses(parent, false).getFlattened();
FileOutputStream fos = null;
ObjectOutputStream out = null;
try {
fos = new FileOutputStream("reasoner.ser");
out = new ObjectOutputStream(fos);
out.writeObject(reasoner);
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}