2016-04-22 32 views
0

我想使用Jena API複製OWL本體,每次向該本體添加新語句。 但是一開始它應該得到原始的本體而沒有新的陳述。在Jena複製OWL本體

以下代碼每次都會在前一個代碼中添加一條新語句。

this runs in a for loop{ 

     OntModel curOnto = onto1.getOntology(); 

     curOnto.add(s,p,o); 

     /*printing the statement from onto1 
     it seems it is adding new statement in onto1 on top of previous statement*/ 

     int lineNum = 0; 
     for (StmtIterator i = onto1.getOntology().listStatements(); i.hasNext();) { 
      Statement stmt = i.nextStatement(); 
      System.out.println(lineNum++ + " - " + PrintUtil.print(stmt)); 
     } 
} 

正如在其他職位,建議我試圖本體複製這樣的:

Model copyOnto = ModelFactory.createModelForGraph(onto1.getOntology().getGraph()); 
OntModel curOnto = new OntModelImpl(onto1.getOntology().getSpecification(), copyOnto); 

,但仍然是相同的,它不斷添加新的聲明onto1。 我需要得到的原始副本到curOnto for循環的每次運行。任何幫助?

在此先感謝。

+0

嗨,在protege你有一個選擇導出本體java代碼,你沒有嘗試嗎? – Abhijeet

+0

感謝您的信息。但我需要在運行時從源... – ruben

+0

我也是新的親愛的...我的問題也沒有回答...尋找答案...我的更簡單... http://stackoverflow.com /問題/ 36741623 /動作,在貓頭鷹建模?noredirect = 1#comment61100964_36741623 – Abhijeet

回答

1

上面的建議(使用org.apache.jena.rdf.model.ModelFactory#createModelForGraph)是錯誤的。所有信息都保存在圖表中。所以你需要複製整個圖形(所有三元組)。它可以完成(例如)通過方法org.apache.jena.graph.GraphUtil#addInto