我想做的:用 Java 为本体创建一个 validator 。为此,我想在推断模型上使用耶拿规则。不幸的是,我不能同时使用标准推理器 (ReasonerRegistry.getOWLReasoner()
) 和我自己的推理器 (new GenericRuleReasoner(Rule.rulesFromURL("file:rulefile.txt"))
)。这有可能吗?
最佳答案
耶拿内的默认本体推理应该为标准 owl 本体提供良好的验证。下面解释了如何对可能超出 owl 提供的范围的域使用相同的机制。
为了在使用 GnericRuleReasoner
时生成特定于域的冲突,需要在 FBRuleInfGraph.validate()
时刺激特定于域的 ValidityReport
的生成。被调用。
此方法向推理图引入了一个三元组:
728 Triple validateOn = new Triple(NodeFactory.createAnon(),
729 ReasonerVocabulary.RB_VALIDATION.asNode();
730 Functor.makeFunctorNode("on", new Node[] {}));
这背后的想法是域内的规则会对这个三元组的存在敏感,然后生成一个 RB_VALIDATE_REPORT
当域的约束失败时。
以现有 OWL 域为例,我们可以搜索表示违反 OWL 域特定约束的规则(来自 etc/owl-fb.rules
):
[validationIndiv2: (?v rb:validation on()) (?X owl:disjointWith ?Y) ->
[validationIndiv: (?I rb:violation error('conflict', 'Individual a member of disjoint classes', ?X, ?Y))
<- (?I rdf:type ?X), (?I rdf:type ?Y) noValue(?T rb:prototype ?I)] ]
此前向链接规则引入了后向链接规则,当个体是不相交类的成员时,该规则表示 rb:violation
。
关于java - 在推断模型上使用 Jena 规则文件为本体创建 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25342195/