如果我有一个包含子属性公理的简单本体:
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 .
这在很大程度上取决于当你试图从本体检索数据时,你是否会有一个推理器。说
hasChair ⊑hasParticipant
等价于一阶公式:
原则;x, y。(hasChair (x, y) →hasParticipant (x, y)
这意味着它在逻辑上遵循hasChair(exampleconconference,paulPill), hasParticipant(exampleconconference,paulPill)。但是,如果只断言hasChair语句,则需要一个OWL(或RDFS)推理器来为您证明这一点。如果断言了hasChair和hasParticipant句子,那么就不需要推理器来找出hasParticipant(exampleConference,paulPill)。
最近在Jena用户的邮件列表中有一个关于逆属性的类似问题。
如果a有一个泛函/逆泛函对,我应该createstatstatement两个方向,或者我应该使用某种推理装置要填吗?我在这里创建了很多三元组,所以我倾向于自己做,因为我怕做得太慢一个大模型
也就是说,如果你有一个属性participesin,并且它是hasParticipant的逆,问题是断言
是否足够hasParticipant (exampleConference paulPill)
还是两者都做
hasParticipant (exampleConference paulPill)
participatesIn (paulPill exampleConference)
答案大致相同:如果你有一个推理者,那么一个就足够了。如果你不喜欢,那么你可能两者都想要。