我正在构建 3 个类的本体:
- 留言
- 火腿
- 垃圾邮件
2个数据属性,域:消息和范围xsd:字符串:
- 有兴趣
- 有类别
2 SWRL 规则:Message(?x),hasInterest(?x,?a),hasCategory(?x,?b), swrl:equal(?a,?b) ->Ham(?x)
Message(?x),hasInterest(?x,?a),hasCategory(?x,?b), swrl:notEqual(?a?b) ->Spam(?x)
我想将 Message 类的实例分类为 Spam 或 Ham 类;如果 hasCategory 值(邮件类别)等于 hasInterest 值(用户兴趣),则该邮件为 ham 否则为垃圾邮件
如果我有 1 个消息类别和 1 个兴趣,这可以正常工作: m1 hasInterests sports m1 hasCategory sports
那么,如果我有一个 iterests 或类别列表,例如:每条消息有超过 1 个兴趣{体育、电影}每条消息有超过 1 个类别 {电影、政治}
我想说如果两个列表相交那么消息是火腿所以 swrl:equal 不起作用我如何定义它来比较所有个人
我所做的是重复 hasInterests 和 hasCategory 取决于我的意思是手动定义列表的各个值并且它有效,是否有另一种使用字符串列表的自动方式以及如何在 swrl 中比较它们?