【发布时间】:2015-06-03 15:17:55
【问题描述】:
我有一个包含不同类型事件的本体。 因此我有三个类:A、B、C 和一个辅助类 Temp。
我希望推理器为找到的每一对个体 a (rdf:typeOf A) 和 b (rdf:typeOf B) 创建一个新个体作为 C 的子类。这个新的个人应该包含关于 a 和 b 的信息。
过去我使用带有自己的规则文件的 jena 推理器来获得此结果,但现在我想切换到标准的 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(请参阅下面的 Williams 回答)?
【问题讨论】:
-
我不太清楚你在问什么。您有 A 类和 B 类,A 类型的个体 a 和 B 类型的个体 b。a 和 b 由 hasB 关联,即“a hasB b”。现在,这意味着 a 是“hasB some B”类的一个实例(推理者可以确认这一点)。现在你想做什么?假设有一个 C 类型的实例 c 具有一些属性?它应该具有哪些属性?
-
我在帖子末尾添加了一些信息,并提供了一个更好的示例。我的本体中有不相关的个体。我想在推理者的帮助下根据他们的存在创造新的个体。这个新个体旨在指示未连接个体之间的关系,并参考它们(财产)。我之前的示例只是我实现该目标的策略。我希望通过有关事件的示例本体可以清楚我的问题。
-
我想要一个……为每一对(尚未连接)的个人创建。关于“未连接还”的部分>" 可能非常困难。推理任务不应该真正取决于首先得出哪些推论。如果你有 Alarm1 和 Alarm2 以及 PowerOutage1 和 PowerOutage2,你想要多少个 PowerManipulations? 2个还是4个?
-
这也是我过去挣扎的部分。理想情况下,我想得到两个。我设法通过 Jena 中的“noValue”构造和辅助属性获得了这个结果。但是随着每个新个体添加到本体中,就有可能打破已经推断的关系并创建新的混合“关系对”(stackoverflow.com/questions/28745833/… 供参考)。你会建议将关系的创建转移到程序逻辑吗?
-
好吧,配对过程是任意的,所以可能没有办法以一种很好的逻辑方式指定它。每次结果都可能不同,这是我们通常不希望演绎推理器提供的结果。看起来它真的会从众所周知的帽子中挑选一对,所以让它成为该计划的一部分可能更有意义。
标签: semantic-web owl ontology protege reasoning