[从OWLOntology到Java的Jena模型的转换

问题描述 投票:0回答:2

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

因此,我找到了一些使用Jena api向本体服务器发送本体的示例,并将其修改为该功能:

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

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

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

此功能应将新的本体添加到融合服务器。任何想法如何填补缺失的转化?或任何其他想法,如何使用OWL API将本体发送到Fusionki服务器?

我阅读了以下解决方案:Sparql query doesn't upadate when insert some data through java code

但是我的Java程序的目的是递增地发送这些本体,因为它是相当大的数据,如果我将它们加载到本地内存中,则我的计算机将无法对其进行管理。

java rdf jena owl fuseki
2个回答
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);
    }
}

或者,您可以简单地使用ByteArrayOutputStreamByteArrayInputStream代替管道流。


1
投票

为了避免通过I / O流进行这种可怕的转换,您可以使用ONT-API:它实现了直接从图中读取猫头鹰轴心的方式,而无需任何转换

© www.soinside.com 2019 - 2024. All rights reserved.