如果我有一个包含子属性公理的简单本体:
ex:hasChair rdfs:subPropertyOf ex:hasParticipant .
我想声称“Paul Pill是示例会议的主席,Jack Jill是示例会议的参与者。”写这是否正确:
:exampleConference a ex:AcademicConference ;
ex:hasChair :paul_pill ;
ex:hasParticipant :jack_jill .
或者我还需要明确指定Paul Pill是参与者(即使hasChair是hasParticipant的子属性)?也就是说,我需要写:
:exampleConference a ex:AcademicConference ;
ex:hasChair :paul_pill ;
ex:hasParticipant :paul_pill, :jack_jill .
答案 0 :(得分:4)
当您尝试从本体检索数据时,这在很大程度上取决于您是否有推理器。说那个
hasChair⊑hasParticipant
等同于一阶公式:
∀x,y。(hasChair(x,y)→hasParticipant(x,y))
这意味着它逻辑上来自hasChair(exampleConference,paulPill)hasParticipant(exampleConference,paulPill)。但是,如果只断言hasChair句子,则需要一个OWL(或RDFS)推理器来证明它。如果断言hasChair和hasParticipant句子,那么你不需要推理器来找出hasParticipant(exampleConference,paulPill)。
耶拿用户问过similar question'邮件列表最近关于逆属性。
如果a具有功能/反函数对,我应该 createStatement两个方向,或者我应该使用某种方式 推理装置填写?我在这里创造了很多三元组,所以 由于害怕横向非常缓慢,我倾向于自己制作它们 一个大型模型。
也就是说,如果你有一个属性参与,并且它是hasParticipant的反转,那么问题是它是否足以断言
hasParticipant(exampleConference,paulPill)
或者你是否应该同时做两件事
hasParticipant(exampleConference,paulPill)
participatesIn(paulPill,exampleConference)
答案大致相同:如果你有一个推理器,那么就足够了。如果你没有,那么你可能想要两者。