1

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(); 
} 
4

1 に答える 1

0

推論されたオントロジー (InferredOntologyGenerator から取得したもの) を保存するのが最善の方法のようです。

私が理解していることから、新しい推論器を作成するとき、推論器は一貫性をチェックし、オントロジーを分類しますが、すべての推論を明示的にしたので、より高速です。

于 2012-08-15T10:21:11.157 に答える