我需要将数据从OWLOntology对象(OWL api的一部分)转换为Model对象(Jena Api的一部分)。我的Java程序应该能够加载owl文件并将其内容发送到fuseki服务器。根据我的阅读,只有Jena Api才能通过Java程序使用fuseki服务器,这就是我使用它的原因。
所以我找到了一些使用Jena api向fuseki服务器发送本体的示例,并将其修改为此函数:
<script>
$(document).ready(function () {
$("#btn").click(function () {
$.ajax({
url : "footershop.txt",
dataType: "text",
success : function (data) {
$("#test").html(data);
}
});
});
});
</script>
此功能应为fuseki服务器添加新的本体。任何想法如何填补缺失的转换?或者任何其他想法,如何使用OWL api将本体发送到fuseki服务器?
我读了这个解决方案: Sparql query doesn't upadate when insert some data through java code
但我的java程序的目的是逐步发送这些本体,因为它是非常大的数据,如果我将它们加载到本地内存中,我的计算机就无法管理它。
答案 0 :(得分:1)
想法是写入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
代替管道流即可。
答案 1 :(得分:1)
为了避免通过i / o流进行这种可怕的转换,您可以使用ONT-API:它实现了从图中直接读取owl-axiom而无需任何转换