我正在尝试使用
swrlx:makeOwlThing
构建一些 SWRL 规则,从而在 protege 中使用 drools。
但是,我的规则之一取决于根据
owl:equivalentClass
的断言推断出其类别的个人。例如,如果我运行 Pellet,则等效的类断言有效。
但是,当我单击 OWL+SWRL 并运行 drools 时,我的规则不起作用,因为
owl:equivalentClass
从未被断言。因此,我做了一个实验,并手动创建了另一个 SWRL 规则,该规则复制了我在 protege 编辑器上所做的 owl:equivalentClass
断言。
附件是我正在测试的本体。规则 S1 是我必须手动添加的规则,以复制
中的两个
owl:equivalentClass
断言
### http://www.semanticweb.org/user/ontologies/2023/11/untitled-ontology-330#ProcessData
:ProcessData rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :isProcessData ;
owl:hasValue "true"^^xsd:boolean
] .
### http://www.semanticweb.org/user/ontologies/2023/11/untitled-ontology-330#ProcessDataInput
:ProcessDataInput rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :hasAE ;
owl:hasValue :Vel
] ;
rdfs:subClassOf :ProcessData .
所以我不确定我这边是否缺少某些东西,或者我应该复制我所有的
owl:equivalentClass
作为 SWRL 规则吗?
海龟格式的完整本体
https://github.com/vChavezB/swrl_equivalent_stack_ovflow/blob/main/test.ttl
不,您并没有错过这里的任何内容以及您所目睹的预期行为。
您有 2 个选择:
运行 Pellet 等 OWL2 推理机和 Drools 引擎。推理机将推断出等价关系和其他推论,并且基于这些推论,Drools 可以推断出进一步的推论。
向 SWRL 规则添加其他规则,以复制来自 OWL 推理器的推论,从而只能运行 Drools 引擎。
我的建议是优先选择选项 1。我的动机如下。
TL;DR:严格来说,使用 OWL2 推理器进行推理的算法与使用规则引擎进行推理的算法是不同的算法。使用 OWL2 推理器和规则引擎进行的推论之间存在一些重叠。但 OWL2 推理器可以做出规则引擎无法做出的推论,并且规则引擎可以做出 OWL2 推理器无法做出的推论。因此,结合使用它们可以让您两全其美。
更长的解释
OWL2 推理器可以为您提供比规则引擎更多的推论。 OWL2 推理器的推论取决于本体的表达能力 - 本体的表达能力越强,可以做出的推论就越多。相反,如果你的本体论表达能力不是很强,则只能做出一些推论。对于富有表现力的本体,您将需要添加大量规则来复制它。此外,某些推论无法使用规则引擎进行。但是,如果您的本体论表达能力不是很强,则可以将本体论的公理复制为规则。
为什么要使用规则引擎?从规则引擎获得的推论不如从本体获得的推论丰富,但有些推论是 OWL2 推理器无法做出的。规则引擎的主要优点是在处理大量个体时(例如 RDF 三元组存储的情况),其性能比 OWL2 推理机好几个数量级。
我建议优先考虑选项 1 ,因为您正在使用 Protege,因此您不太可能与很多人打交道。