当前位置: 首页 > 面试题库 >

从OWLOntology转换为Java中的Jena模型

酆茂才
2023-03-14
问题内容

我需要将数据从OWLOntology对象(OWL api的一部分)转换为Model对象(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将本体发送到Fusionki服务器?

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


问题答案:

这个想法是写Java OutputStream并将其通过管道传递给Java 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代替管道流。



 类似资料:
  • 问题内容: 我生成了一个安全的随机数,并将其值放入一个字节中。这是我的代码。 但是我遇到一个错误: 问题答案: 您的数组是基元,但是您正在尝试对其调用方法。 您无需做任何显式操作即可将a转换为,只需: …因为这不是垂头丧气。 请注意,-to- 转换的默认行为是保留值的符号(请记住,在Java中是带符号的类型)。因此,例如: 如果您想到的是无符号(156)而不是有符号(-100),那么从Java 8

  • 问题内容: 如果我正在使用,并将其转换为,则该如何正确工作?值会被截断以适合浮点数吗?还是舍入值不同?抱歉,这听起来有点补救,但是我正在尝试掌握和转换的概念。 问题答案: 根据 Java语言规范的 第5.1.3节 : 从double到float的原始转换变窄由IEEE 754舍入规则(第4.2.4节)控制。这种转换可能会失去精度,但也会失去范围,导致非零双精度浮点为零,而有限双精度浮点为无穷大。双

  • 问题内容: 我试图将long值传递给该方法,并在那里使用它来创建Long Array。但是,在创建数组时,出现“可能从long到int的有损转换”错误 尽管我还没有使用任何整数值。 问题答案: 数组维只能是类型。编译器期望使用该类型,但是您要传递一种类型。您可以更改传递给的参数类型,并进行相应的更改。 为了完整起见,这是JLS关于数组变量的内容 它们由使用非负 整数 索引值的数组访问表达式引用。

  • 问题内容: 好的,所以我试图用“,”分割字符串,它们不在’[‘或’]’内部。我有一个适用于JavaScript的RegEx,但无法将其转换为Java语法。 JS RegEX: 例句: 它在http://refiddle.com上运行良好,但是当我尝试在Java中(在Eclipse下)使用RegEx时,出现错误消息: 索引10附近的未封闭字符类,(?![^ [] *]) 我所做的就是删除开头的“ /

  • 问题内容: 如何将String 列表转换为数组?以下代码返回错误。 错误: 问题答案: 你要 有关文档,请参见此处,请注意,您也可以以填充已传递数组的方式调用此方法,而不仅仅是使用它来计算要返回的类型。另请注意,也许当您打印阵列时,您更喜欢 因为那将打印实际的元素。

  • 在的内部类中。 演员们在这里是怎么工作的?我在这里期待,因为我们要将一个纯超类对象转换为子类。