簡體   English   中英

Java 中從 OWLOntology 到 Jena 模型的轉換

[英]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);
    }
}

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

為了避免通過 i/o 流進行這種可怕的轉換,您可以使用ONT-API :它實現了從圖中直接讀取 owl 公理,無需任何轉換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM