首先,我的英语很差,如果我的写作令人困惑,那就很抱歉。
我正在尝试在实例之间创建以下关系:if A propertyX B
和C propertyY A
,然后是C propertyX B
。在我的情况下,我想指定如果ManagerA
“管理”一名员工,ManagerB
与ManagerA
的工作相同,那么他也会管理同一名员工。
我尝试使用链属性来做到这一点,但是当我激活它时,推理器(FaCT ++ 1.6.5)不起作用(日志表示非简单属性被用作一个)。我认为问题在于,“管理”属性是不对称和反射性的,属性“sameJob”是传递和对称的,但我不确定是否是这种情况。我在“manage”属性中应用了chain属性,声明:sameJob o manages SubPropertyOf: manages
。
我刚开始使用Protégé,并会非常感谢任何帮助。
答案 0 :(得分:1)
错误的原因是由于manages
不是一个简单的角色,即如果你有r1 o ... o rn subPropertyOf r
,其中n> 1,那么r
是一个非简单的角色。 IrreflexiveObjectProperty
和AsymmetricObjectProperty
中不能使用非简单角色。见OWL 2 syntax第11节。限制角色的原因是保持可判定性。
但是,您可以通过添加SWRL规则来实现所需的结果:
manages(?x, ?y) ^ sameJob(?x, ?z) -> manages(?z, ?y)
。