【问题标题】:Create and connect individuals with an OWL DL reasoner使用 OWL DL 推理器创建和连接个人
【发布时间】: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 的信息。

我的问题是:

  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(请参阅下面的 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


【解决方案1】:

您可以很容易地使用 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()

【讨论】:

  • 您能否提供一个实际示例来解决 OP 的问题?目前我还不清楚OP实际上试图推断什么。在不知道这一点(以及它是否需要除 OWL 推理器之外的任何机器)的情况下,很难看出这个答案是否有帮助。一些显示如何解决 OP 问题的代码(甚至是伪代码)会澄清。
  • 我想根据某些个体的存在来创建一个新的个体。可以说我分别读过母亲和父亲。现在,我想让一个孩子与他们的父母有联系。我的第一步是在父母之间创建一个链接(属性:hasChildWith)。我现在真的不知道,即使有限制和推理也是可能的。明天我一定会研究 SPIN
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多