使用OWL DL推理器创建和连接个人

时间:2015-03-30 14:37:00

标签: semantic-web owl ontology protege reasoning

我有一个不同类型事件的本体论。 因此我有三个类:A,B,C和辅助类Temp。

我希望推理者为每一对个体a(rdf:typeOf A)和b(rdf:typeOf B)创建一个新的个体作为C的子类。这些新的个人应该包含关于a和b的信息。

过去我使用jena推理器和自己的规则文件来获得此结果,但现在我想切换到标准的OWL DL推理器。

我最初的想法是链接一个和b,例如:

a onto:hasB b

广告为Temp提供以下限制Temp:

hasbB some B

现在我想创建一个C类型的新个体,其限制为Temp:

hasC some C

在这个新的个人身上,我可以访问a和b的信息。

我的问题是:

  1. 如何让推理人连接a和b?
  2. 我不认为C的创建会起作用,因为它对Temp的限制,由于这种限制,它永远不会被指定为类型。
  3. 或者我的方法完全错了吗?

    编辑:

    用更好的例子澄清我的目标:

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

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

    例如:

    1. 我读了一个事件(个人),它描述了一个"警报" (类型)进入本体。
    2. 我读了一个事件(个人),它描述了一个" PowerOutage" (类型)进入本体。
    3. 此时此类人员根本没有相关性。 现在我想要一个推理器来创建一个类型为" PowerManipulation"的新事件(个人)。事实上,我想要一个类型为#34; PowerManipulation"为每个对(类型为" PowerOutage"和#34;警报"找到。这些新人应该为个人提供引用他们创建的参考(属性)("警报"以及" PowerOutage")。

      推理前的本体论:

      (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)
      

      显然,我使用Jena规则和Jena推理器来完成这项任务。 但我想切换到标准的OWL DL推理器。

      是否可以通过基本限制来完成此任务? 或者我是否需要SWRL规则或SPIN(请参阅下面的威廉姆斯答案)?

1 个答案:

答案 0 :(得分: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()