更新1:如果遇到protege桌面端下载问题,可尝试webprotege,注册账号后即可联网使用,网址:WebProtégé
更新2:
有童鞋问在哪里能建立SWRL规则,打开protege时会收到软件更新通知,提供多个插件下载,其中就有这个(见下图)。如果没收到通知,请登录官网https://protegewiki.stanford.edu/wiki/SWRLTab,该网站提供各类插件。此外,这个网站内还可查找protege的历史版本。更多功能请自行explore。
下载安装好后,在如下窗口可找到它,找不到请在help里输入关键词(找不到任何功能都可以求助help)
--------------------我是分割线---------------------
整理本体参考资料:
-----------------------------------
Cheers
-----------------------------------
不清楚题主建立的本体结构是什么样的,我只能附上自己以前做过的题目作为参考。
我想完成的推理是:在一家茶食店,如果一个顾客至少购买了2次甜食,则顾客喜欢甜食(请先忽略这个逻辑是否合理,看实现过程)。
我们把这个需求拆分一下,则需要protege完成如下功能:
1、判断一款茶食是甜食
2、判断一个顾客买了甜食
3、知道该顾客买甜食超过2次
4、判断该顾客喜欢甜食
我们顺着这四个要求一个个来看:
1、判断茶食是否为甜食。
a. 复用dbpedia ontology(简称dbo)的data property "taste",在建立一个实例(如“豆沙包”)时,用taste描述为“甜”,如下图所示
b. 建立tea_food类描述所有茶食,下设sweet子类类描述所有甜食,定义sweet equivalent to "dbo:taste some xsd:string[pattern "甜"]",如下图所示
2、判断顾客是否买了甜食+3、买甜食超过2次
把两个合并在一块儿,是因为我需要对“顾客买甜食”这个行为计数。protege可以统计实例间的关系数量,我可以利用它做判断。
a. 建立person类,描述顾客。
b. 建立bill类,它的一个实例是顾客的某次购物记录。
c. 建立object property “hasBill", 其domain为person,range为tea_food,表示顾客有购物记录。
d. 建立object property “hasSweet",其domain为bill,range为sweet,表示购物记录里有甜食。
e. 把类“bill”, 属性“hasSweet" 和类”sweet“构成的声明(购物记录有甜食)定义为类”sweetBill",设该类为“bill的子类"。这样,我就可以计数“有多少账单有甜食”了。结构如下图所示:
f. 在person下建立子类”likeSweet",表示喜欢甜食的人
g. 定义该类equivalent to "Person and (hasBill min 3 sweetBill)",表示喜欢甜食的人是拥有超过2个含甜食的购物记录之人,其实就是“买甜食超过2次”。如下图所示
4、判断该顾客喜欢甜食
到这里就需要你建立实例,使用reasoner,protege有自带的(如下图所示)
点击start reasoner,我们看看前面建立的实例“豆沙包”的结果:
(请忽略其他类)标黄的是Reasoner推理的结果,你可以看到protege判断豆沙包是sweet的一个实例。
我们建立一个person的实例Alex,她拥有三个账单,两个账单买了桃酥饼,一个买了豆沙包,都是甜食。所以她是一个喜欢甜食的人。bill实例如下所示
person实例如下所示
运行Reasoner,可以看到结果:
这是很简单的推理,protege还有很多功能,我作为初学者也了解不多。希望有所帮助!