目前我正在开发一个本体来表示特定用户可能对某事有的偏好。例如,用户可能将MediaVolumeLevel
偏好设置为VolumeLevel_3
。
不同级别(班级的个人MediaVolumeLevel
)是:
VolumeLevel_1, VolumeLevel_2, VolumeLevel_3 and VolumeLevel_4
。
user 和 Preference 由 objectProperty 链接hasMediaVolumeLevelPreference
。
objectProperty 断言需要通过 SWRL 规则从其他 User 方面推断出来。例如,如果用户有听力障碍,则MediaVolumeLevel
需要设置为VolumeLevel_4.
So:
User(?u), hasDifficulty(?u,Hearing) -> hasMediaVolumeLevelPreference(?u,VolumeLevel_4)
这工作正常。但是,由于我还有其他 SWRL 规则也可以MediaVolumeLevel
为相同的用户推断,例如:
User(?u), hasContext(?u,NoisyRoom) -> hasMediaVolumeLevelPreference(?u, VolumeLevel_3)
并且 SWRL 仅支持单调推理,推理器将断言 VolumeLevels (VolumeLevel_4
和VolumeLevel_3
)。
我需要的是一条规则,以某种方式,只有在没有更高级别已经断言的情况下才会断言偏好。在给定的示例中,即使hasContext(?u,NoisyRoom)
为真,唯一断言的级别应该是VolumeLevel_4
因为其他规则断言了它。
对此有何建议?使用 SWRL 可以实现我想要的吗?我正在使用 Protege 4.3 和 Pellet Reasoner
谢谢,MFV。