1

我有一个包含不同类型事件的本体。因此我有三个类: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 的信息。

我的问题是:

  1. 我怎样才能得到连接a和b的推理机?
  2. 我认为 C 的创建不会起作用,因为它是对 Temp 的限制,由于这种限制,它永远不会被分配为类型。

还是我的方法完全错误?

编辑:

用一个更好的例子来阐明我的目标:

我有一个包含不同类型事件的本体。

我的目标是通过在推理器的帮助下形成一个描述这种关系的新个体(事件)来连接属于一起的某些个体(事件)。

例如:

  1. 我在本体中读到了一个描述“警报”(类型)的事件(个人)。
  2. 我读了一个事件(个人),它将“断电”(类型)描述到本体中。

这些个体目前完全没有关系。现在我想要一个推理器来创建一个类型为“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(请参阅下面的威廉姆斯回答)?

4

1 回答 1

0

您可以很容易地使用 SPIN 构造函数和 SPIN 插入来做到这一点。

http://www.w3.org/Submission/2011/SUBM-spin-modeling-20110222/#spin-rules-construct

http://www.w3.org/Submission/2011/SUBM-spin-modeling-20110222/#spin-rules-update

SPIN 和 OWL 可以幸福地生活在一起。看看有两个扩展的 groovy 库:

https://github.com/williamgreenly/lescot

下面的例子:

def model = new GroovyRdfModel()
model.add(""" some turtle data """)
model.add(""" some OWL rules """)
model.add(""" some SPIN rules """)
def inferredModelByOWLReasoning = model.owl()
def inferredModelBySPINRules = model.spin()
于 2015-03-30T16:27:45.363 回答