使用SWRL的蛋白质:等于比较数据类型属性的值



我正在建立3个类的本体:

  1. 消息
  2. 火腿
  3. 垃圾邮件

2个数据处理,域:消息和范围XSD:字符串:

  1. HASENTEST
  2. 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)

最新更新