如何在Jena OntModel中阻止owl:import动态导入?
如何在Jena中读取OWL文件时禁用自动导入关联文件
当然可行!默认情况下Jena的OntModel确实会自动解析并加载owl:imports属性指向的外部OWL文件,这就是你看到导入内容出现在查询结果里的原因。不过我们可以通过自定义模型配置来关闭这个自动导入行为。
具体修改步骤
你只需要在创建OntModel时,指定一个禁用导入策略的OntModelSpec即可:
// 创建一个配置为禁用自动导入的模型规范 OntModelSpec noImportSpec = new OntModelSpec(OntModelSpec.OWL_MEM); noImportSpec.setImportPolicy(OntModelSpec.IMPORT_NONE); // 使用这个规范创建OntModel OntModel onto = ModelFactory.createOntologyModel(noImportSpec); onto.read(rdfURL);
原理说明
OntModelSpec.IMPORT_NONE这个策略会告诉Jena完全忽略本体中的owl:imports声明,不会自动加载任何关联的外部OWL文件。- 这样处理后,你的模型里就只会包含当前读取的OWL文件中的类、属性等内容,导入文件里的元素不会出现在查询结果中。
如果之后你需要手动导入某个特定的文件,还是可以通过onto.addImport(ResourceFactory.createResource("导入文件的URL"))来按需添加,灵活性很高。
内容的提问来源于stack exchange,提问作者Nja




