2017-04-21 115 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)