我使用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似乎只使用基础文件而不是导入文件......