Protege生成单文件含schema与数据时如何使用Jena的ModelFactory.createInfModel
同文件包含Schema与实例时的Apache Jena推理模型创建方法
你不需要拆分Protege导出的同时包含本体Schema和实例数据的OWL文件,两种常用写法均可正常生成推理模型,效果完全一致:
- 写法1:直接传入合并模型(单文件场景首选)
// 加载Protege导出的合并OWL文件 Model combinedModel = RDFDataMgr.loadModel("file:data/你的文件名称.owl"); Reasoner reasoner = ReasonerRegistry.getOWLReasoner(); // 直接传入合并模型即可,推理器会自动识别其中的Schema公理 InfModel infModel = ModelFactory.createInfModel(reasoner, combinedModel);
Jena的OWL推理器本身不强制要求Schema和实例分文件存储,所有三元组只要在传入的模型中,都会被按语义规则处理,拆分文件只是官方示例为了清晰区分层级的演示写法。
- 写法2:保留bindSchema逻辑(Schema复用场景适用)
如果你后续需要复用绑定了当前Schema的推理器,给其他仅含实例的RDF数据做推理,可以用这种写法:
Model combinedModel = RDFDataMgr.loadModel("file:data/你的文件名称.owl"); Reasoner reasoner = ReasonerRegistry.getOWLReasoner(); // 直接用合并模型完成Schema绑定 reasoner = reasoner.bindSchema(combinedModel); // 数据层也传入同一个合并模型即可,推理器会自动跳过重复的Schema三元组 InfModel infModel = ModelFactory.createInfModel(reasoner, combinedModel);
注:两种写法的推理结果没有任何差异,仅根据是否需要复用推理器选择即可。
内容的提问来源于stack exchange,提问作者nilrem
相关产品推荐
相关产品推荐

