【问题标题】:SWRL - Rules depending on other rules assertionsSWRL - 取决于其他规则断言的规则
【发布时间】: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。

【问题讨论】:

    标签: owl ontology swrl


    【解决方案1】:

    这是可能的,但仅限于某些情况。请允许我解释一下。


    1) 您的hasMediaVolumeLevelPreference 是与个人VolumeLevel_1, VolumeLevel_2, VolumeLevel_3 and VolumeLevel_4 相关的对象属性。这些个体在本体中没有相对排序。作为人类设计师,您知道VolumeLevel_4 大于VolumeLevel_3,但对于推理者而言,不存在这样的相对顺序。如果您要将hasMediaVolumeLevelPreference 更改为范围为int(或long 或其他任何内容)的数据属性,那么您已经提供了个人背后的具体数据值。因此,您可以使用 swrl 比较内置函数编写规则,即 swrl:greaterThan 等。

    2) 您现在可以将子句写入规则中,在先行词中进行比较,以便仅断言最高值,但 SWRL 仅支持单调推理。因此,SWRL 规则不能用于修改本体中的现有信息。 SWRL 规则不能从本体中撤回或删除信息。因此,如果在Volume_4 之前断言了较小的卷Volume_3,则无法从本体中删除关系hasMediaVolumeLevelPreference(Volume_3)。

    3) 一切都还没有丢失,Apache Jena 有一个规则引擎,可用于在 rdf 三重级别操作本体。您可能必须编写自己的内置函数,但您可以从 rdf 子图中删除属性和类描述。转至here 了解有关耶拿规则的更多信息。

    我希望这会有所帮助。

    【讨论】:

    • 请注意,Jena 规则不能通过 xml 语法直接放在本体中,必须从外部 .txt 文件加载并馈送到 Jena 规则推理器。
    • 首先,感谢您的回答@kunal-khaladkar 1) 好的,但是如果没有 VolumeLevel 已经被断言呢?规则:User(?u), hasDifficulty(?u,Hearing), hasMediaVolumeLevelPreference(?vl), lessThan(?vl,4) -> hasMediaVolumeLevelPreference(?u,VolumeLevel_4) 不起作用,因为 hasMediaVolumeLevelPreference(?vl) 不正确。有什么解决方法可以解决这个问题还是我弄错了? 3)我读过关于耶拿的链接,看起来很有趣。不幸的是,我已经使用 OWL api 编写了我的软件并从头开始重新编码将花费我太长时间
    • 对于 1) 你是对的,如果hasMediaVolumeLevelPreference 没有在个人身上断言,则该规则不会触发。至于解决方法,我真的无法想象它的实际外观和行为。但是,由于您使用的是 owl api,因此您最好允许 hasMediaVolumeLevelPreference 属性的多个断言并通过您的代码处理检索“最大”的一个。不过,我会继续思考这个问题,如果我能想出什么办法,请告诉你。
    • 这正是我现在正在做的事情,但在我看来这是一个丑陋的解决方案。在本体本身中包含一些东西将是一种更好的方法。感谢您迄今为止的关注!
    猜你喜欢
    • 2013-02-21
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2019-01-28
    • 2021-11-12
    • 1970-01-01
    • 2022-01-18
    • 2023-01-03
    相关资源
    最近更新 更多