2

我了解到您可以使用以下代码提取 rdf 文件并在 jena 中初始化为 Model:

DatasetAccessor accessor = DatasetAccessorFactory.createHTTP("http://localhost:3030/ds/data"); Model updated = accessor.getModel();


但是当我尝试像这样将它放在 OntModel 中时:

 OntModel updated = accessor.getModel();

它会产生这样的错误:Incompatible types: Model cannot be converted to OntModel

当我尝试这样做时:OntModel model = (OntModel) accessor.getModel();

它仍然输出一个错误说:com.hp.hpl.jena.rdf.model.impl.ModelCom cannot be cast to com.hp.hpl.jena.ontology.OntModel

4

1 回答 1

1

您可能无法直接从 Fuseki 获取 OntModel,但是您可以将模型保存在本地文件中,然后将其读入 OntModel。例如:

OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
    DatasetAccessor myDA = DatasetAccessorFactory.createHTTP("URL");
    Model model = myDA.getModel("GRAPH");

File myFile = new File(_path);
        try
        {
            PrintStream ps_Writer = new PrintStream(myFile);
            _model.write(ps_Writer, "TTL").toString();

        }
        catch (FileNotFoundException ex)
        {

        }
ontModel.read(_path);

重要的是要记住,您必须OntModelSpec在创建 OntModel 时指定一个(在我的情况下使用OWL_MEM),并确保在将 OntModel 保存到 Fuseki 时使用相同的规范。我花了一段时间才发现,当你DatasetAccessor.putModel将 OntModel 放入 Fuseki 时,它会将其转换为普通的 rdf Model,如果你不指定 OntModelSpec,它会在转换时应用一些推理,你会发现Fuseki中的结果不太一样。

于 2017-09-14T14:53:03.733 回答