我有一个不同类型事件的本体论。 因此我有三个类: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的信息。
我的问题是:
或者我的方法完全错了吗?
编辑:
用更好的例子澄清我的目标:
我有一个不同类型事件的本体论。
我的目标是通过在推理者的帮助下形成描述这种关系的新个体(事件)来连接属于一起的某些个体(事件)。
例如:
此时此类人员根本没有相关性。 现在我想要一个推理器来创建一个类型为" 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(请参阅下面的威廉姆斯答案)?
答案 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()