我正在建立3个类的本体:
- 消息
- 火腿
- 垃圾邮件
2个数据处理,域:消息和范围XSD:字符串:
- HASENTEST
- hasCategory
2 SWRL规则:消息(?x(,intermestest(?x,?a(,category(?x,?b(,swrl:quare(?a,?b( -> ham(?x(
消息(?x(,interestest(?x,?a(,category(?x,?b(,swrl:notequal(?a?b( -> spam(?x(
我想将课堂消息的实例分类为类垃圾邮件或火腿;如果hasCategory值(消息类别(等于HASINTEST值(用户兴趣(,则消息为HAM else spam
如果我有1个消息类别和1个兴趣,则可以正常工作前任:M1兴趣运动M1 HASCategory Sports
所以如果我有迭代或类别列表,例如:每条消息都有超过1个兴趣{体育,电影}每条消息都有1个以上的类别{电影,政治}
我想说的是两个列表是否相交,那么消息是ham,所以swrl:quall不起作用,我该如何定义它以比较所有个人
我所做的是根据单个值重复hastests和hasCategory,这是指我是指手动定义列表并起作用的,是否有另一种自动方式使用字符串列表,以及如何在swrl中比较它们?
swrl内置 - 用于字符串(http://www.daml.org/rules/proposal/builtins.html(仅支持简单的字符串函数。在您的模型中,您可以对消息单个 m1
建模,其中有许多兴趣和许多类别:
m1 hasInterests "sports", m1 hasInterests "movies"
m1 hasCategory "sports", m1 m1 hasCategory "movies"
和您的规则
Message(?x),hasInterest(?x,?a),hasCategory(?x,?b), swrl:equal(?a,?b) ->Ham(?x)
至少一个等于类别的兴趣的每条消息都变成 Ham
。
也许有用的提示可以找到兴趣数量,但使用SQWRL查询:
Message(?x) ^ hasInterest(?x,?a) → sqwrl:select(?x) ^ sqwrl:count(?a)