我有一个包含不同类型事件的本体。因此我有三个类:A、B、C 和一个辅助类 Temp。
我希望推理器为找到的每一对个体 a (rdf:typeOf A) 和 b (rdf:typeOf B) 创建一个新个体作为 C 的子类。这个新的个人应该包含关于 a 和 b 的信息。
过去我使用带有自己的规则文件的耶拿推理器来获得这个结果,但现在我想切换到标准的 OWL DL 推理器。
我最初的想法是链接 a 和 b,例如:
a onto:hasB b
并且广告给出了类型 Temp,对 Temp 有以下限制:
hasbB some B
现在我想创建一个 C 类型的新个体,但对 Temp 有限制:
hasC some C
通过这个新的个人,我可以访问 a 和 b 的信息。
我的问题是:
- 我怎样才能得到连接a和b的推理机?
- 我认为 C 的创建不会起作用,因为它是对 Temp 的限制,由于这种限制,它永远不会被分配为类型。
还是我的方法完全错误?
编辑:
用一个更好的例子来阐明我的目标:
我有一个包含不同类型事件的本体。
我的目标是通过在推理器的帮助下形成一个描述这种关系的新个体(事件)来连接属于一起的某些个体(事件)。
例如:
- 我在本体中读到了一个描述“警报”(类型)的事件(个人)。
- 我读了一个事件(个人),它将“断电”(类型)描述到本体中。
这些个体目前完全没有关系。现在我想要一个推理器来创建一个类型为“PowerManipulation”的新事件(个人)。事实上,我想要一个类型为“PowerManipulation”的人,为每对(尚未连接)的人创建一个类型为“PowerOutage”和“Alarm”的人。这些新个体应该具有对导致其创建的个体的引用(属性)(“警报”和“断电”)。
推理前的本体:
(alarm1 rdf:type "Alarm")
(out1 rdf:type "PowerOutage")
推理后我希望本体看起来像什么
(alarm1 rdf:type "Alarm")
(out1 rdf:type "PowerOutage")
(man1 rdf:type "PowerManipulation")
(man1 ont:hasRealtadInd alarm1)
(man1 ont:hasRealtedInd out1)
以前我使用耶拿规则和耶拿推理器来完成这项任务。但我想切换到标准的 OWL DL 推理器。
是否有可能在基本限制的情况下完成这项任务?还是我需要 SWRL 规则或 SPIN(请参阅下面的威廉姆斯回答)?