导入的OWL文件未被使用

时间:2013-02-17 20:05:04

标签: java import jena ontology owl

我使用Protege在TURTLE表示法中创建了一个OWL文件,该文件使用了两个导入:

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

我在耶拿装了这个。当我查询文件时,我没有得到任何来自导入的答案,只是来自文件本身。 例如,如果我有一个类“Person”并且我查询模型(使用SPARQL或使用推理器)来查找此类的个人,我只会在我的文件中获取个人,但不会从导入的文件“imported1.owl”中获取和“imported2.owl”。

我已经读过默认加载​​导入的文件(imports processing)我还有什么需要做的吗?

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

====编辑====

两个文件(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()进行了检查):

ontology.countSubModels():2

所以我放弃了导入未正确加载。不知何故,Jena似乎只使用基础文件而不是导入文件......

0 个答案:

没有答案