【发布时间】:2015-11-23 13:53:59
【问题描述】:
目前我正在开发一个本体来表示特定用户可能对某事有的偏好。例如,用户可能将MediaVolumeLevel 首选项设置为VolumeLevel_3。
不同的级别(MediaVolumeLevel 班级的个人)是:
VolumeLevel_1, VolumeLevel_2, VolumeLevel_3 and VolumeLevel_4.
用户和首选项通过 objectProperty hasMediaVolumeLevelPreference 链接。
objectProperty 断言需要通过 SWRL 规则从其他 User 方面推断出来。例如,如果用户有听力障碍,则需要将MediaVolumeLevel 设置为VolumeLevel_4. 所以:
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。
【问题讨论】: