在推断模型上使用Jena Rules File为本体创建验证器

时间:2014-08-16 17:34:09

标签: java jena rule-engine jena-rules

我想做什么:在Java中为本体创建验证器。为此,我想在推断模型上使用Jena Rules。不幸的是,我不能同时使用标准推理器(ReasonerRegistry.getOWLReasoner())和我自己的推理器(new GenericRuleReasoner(Rule.rulesFromURL("file:rulefile.txt")))。这有可能吗?

2 个答案:

答案 0 :(得分:2)

耶拿内的默认本体论推理应该为标准猫头鹰本体提供可靠的验证。以下内容解释了如何对可能超出猫头鹰提供范围的域使用相同的机制。

为了在使用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

答案 1 :(得分:0)

@Joshua的答案绝对正确。您唯一需要知道的是,您可以将rdf推理器解析为GenericRuleReasoner,或者将owl推理器解析为OWLFBRuleReasoner。从GenericRuleReasoner / OWLFBRuleReasoner,您可以获得规则列表。 List<Rule> rules = new ArrayList<>((OWLFBRuleReasoner)ReasonerRegistry.getOWLReasoner().getRules()); rules.addAll(Rule.rulesFromURL("file:JENA_RULES_FILE")); GenericRuleReasoner completeReasoner = new GenericRuleReasoner(rules);