[英]Conversion from OWLOntology to Jena Model in Java
我需要將數據從 OWLOntology 對象(OWL api 的一部分)轉換為模型對象(Jena Api 的一部分)。 我的Java程序應該能夠加載owl文件並將其內容發送到fuseki服務器。 根據我所讀到的,只有 Jena Api 才能通過 Java 程序使用 fuseki 服務器,這就是我使用它的原因。
所以我找到了一些使用 Jena api 將本體發送到 fuseki 服務器的示例,並將其修改為這個函數:
private static void sendOntologyToFuseki(DatasetAccessor accessor, OWLOntology owlModel){
Model model;
/*
..
conversion from OWLOntology to Model
..
*/
if(accessor != null){
accessor.add(model);
}
}
此功能應該向fuseki 服務器添加新的本體。 任何想法如何填補缺少的轉換? 或者任何其他想法,如何使用OWL api將本體發送到fuseki服務器?
我閱讀了這個解決方案: Sparql 查詢在通過 Java 代碼插入一些數據時不會更新
但是我的java程序的目的是增量發送這些本體,因為它是相當大的數據,如果我將它們加載到本地內存中,我的計算機就無法管理它。
這個想法是寫入 Java OutputStream
並將其通過管道傳輸到InputStream
。 一個可能的實現可能是這樣的:
/**
* Converts an OWL API ontology into a JENA API model.
* @param ontology the OWL API ontology
* @return the JENA API model
*/
public static Model getModel(final OWLOntology ontology) {
Model model = ModelFactory.createDefaultModel();
try (PipedInputStream is = new PipedInputStream(); PipedOutputStream os = new PipedOutputStream(is)) {
new Thread(new Runnable() {
@Override
public void run() {
try {
ontology.getOWLOntologyManager().saveOntology(ontology, new TurtleDocumentFormat(), os);
os.close();
} catch (OWLOntologyStorageException | IOException e) {
e.printStackTrace();
}
}
}).start();
model.read(is, null, "TURTLE");
return model;
} catch (Exception e) {
throw new RuntimeException("Could not convert OWL API ontology to JENA API model.", e);
}
}
或者,您可以簡單地使用ByteArrayOutputStream
和ByteArrayInputStream
而不是管道流。
為了避免通過 i/o 流進行這種可怕的轉換,您可以使用ONT-API :它實現了從圖中直接讀取 owl 公理,無需任何轉換
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.