gpt4 book ai didi

java - Java 中 OWLOntology 到 Jena 模型的转换

转载 作者:行者123 更新时间:2023-12-02 02:32:31 26 4
gpt4 key购买 nike

我需要将数据从 OWLOntology 对象(OWL api 的一部分)转换为模型对象(Jena Api 的一部分)。我的Java程序应该能够加载owl文件并将其内容发送到fuseki服务器。根据我读到的内容,只有使用 Jena Api 才能通过 Java 程序使用 fusioni 服务器,这就是我使用它的原因。

所以我找到了一些使用Jena api将本体发送到fuseki服务器的示例,并将其修改为这个功能:

private static void sendOntologyToFuseki(DatasetAccessor accessor, OWLOntology owlModel){
Model model;

/*
..
conversion from OWLOntology to Model
..
*/

if(accessor != null){
accessor.add(model);
}
}

此功能应该向 fusioni 服务器添加新的本体。有什么想法如何填补缺失的转换吗?或者任何其他想法,如何使用 OWL api 将本体发送到 fusioni 服务器?

我读到了这个解决方案: Sparql query doesn't upadate when insert some data through java code

但是我的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);
}
}

或者,您可以简单地使用 ByteArrayOutputStreamByteArrayInputStream 而不是管道流。

关于java - Java 中 OWLOntology 到 Jena 模型的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46866783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com