2017-04-21 37 views
0

我建立3个班的本体值:门生使用SWRL:等于比较数据类型属性的

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

2 dataproperties,域名:消息和范围xsd:string:

  1. hasInterest
  2. hasCategory

2 SWRL规则: 消息(X?),hasInterest,hasCategory,SWRL:等于 - (X,A?)(X,B?)(A,B?) >火腿(X?)

消息,hasInterest,hasCategory,SWRL(X +)(X,A?)(X,b?):(?A b)notEqual - >垃圾邮件(?x)的

我想将class Message的实例分类为Spam或Ham类;如果hasCategory值(信息类)等于hasInterest值(用户利益)则消息是火腿其他垃圾

此工作正常如果我有1个消息类别和1个兴趣 例如: M1 hasInterests体育 M1 hasCategory体育

那么,如果我有iterests或类别的前一个列表: 每条信息都有超过1个利益{体育,电影} 每条信息都有超过1类{电影,政治}

我想要说如果两个列表相交则消息是h我是如此swrl:平等不起作用我怎么能定义它来比较所有的个人

我所做的是重复hasInterests和hasCategory取决于个人值我的意思是手动定义列表和它的工作,是否有另一个自动方式使用字符串列表以及如何在swrl中比较它们?

回答

0

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)