1

我从 Protege 以 TURTLE 表示法创建了一个 OWL 文件,它使用两个导入:

owl:imports <http://localhost/imported1.owl> ,
<http://localhost/imported2.owl> .

我已经在 J​​ena 上加载了这个。当我查询文件时,我没有从导入中得到任何答案,而只是从文件本身中得到答案。例如,如果我有一个类“Person”并且我查询模型(使用 SPARQL 或使用推理器)以查找该类的个人,我只会在我的文件中获取个人,而不是从导入的文件“imported1.owl”和“imported2.owl”。

我已阅读默认加载导入的文件(导入处理)我还有什么需要做的吗?

例如,如果我将三个文件合二为一,而不是使用导入,我会得到预期的结果。

==== 编辑 ====

这两个文件(imported1.owl 和imported2.owl)都可以通过Web 服务器访问(如果我输入了URL,我就可以正确地得到文件)。

这是代码:

        Model model = ModelFactory.createDefaultModel();
        OntModel ontology = ModelFactory.createOntologyModel();
        InputStream in = FileManager.get().open(file);
        if (in == null) {
            return;
        } else {
            ontology.read(in, null, "TURTLE");
        }
        Reasoner owlReasoner = ReasonerRegistry.getOWLReasoner();
        Reasoner reasoner = owlReasoner.bindSchema(ontology);
        InfModel infModel = ModelFactory.createInfModel(reasoner, ontology);

        String queryString = " PREFIX eg: <http://eg.owl#>"
                + " SELECT ?p WHERE { ?p <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> eg:Person }";

        Query query = QueryFactory.create(queryString);
        QueryExecution qe = QueryExecutionFactory.create(query, ontology);
        ResultSet results = qe.execSelect();
        ResultSetFormatter.out(System.out, results, query);

如果此代码使用“owl:imports”针对 owl 文件运行,我将仅获得文件本身中定义的 Person 实例,但忽略导入文件中定义的实例。

==== 编辑 2====

[无关]

似乎我做错了什么 - 由于原始 .owl 文件中的错误而未加载导入,或者 Jena 仅使用基本文档。

==== 编辑 3====

似乎模型已正确加载(我还检查了 hasLoadedImport()):

本体.countSubModels(): 2

所以我丢弃了没有正确加载的导入。不知何故,Jena 似乎只使用基本文件而不是导入的文件......

4

0 回答 0