我扩展了原始的pizza.owl,现在我的Protege中有以下SWRL规则(规则编辑器:Windows / Views / Ontology views / Rules):
NationalPizza
规则应该为所有比萨饼个体声明MeatTopping
,其中至少有两种成分(例如PizzaToppings)来自同一个国家(例如CreamTopping
Lardon_Alsace和hasCountryOfOrigin
CrèmeFraîche_Normandie都有{{1}等于个人法国)。
推理者(Pellet)什么都没发现。
我可以使用任何swrlb函数吗?
+++的 EDIT1 +++
我提出了以下解决方案:
Pizza(?p),
hasIngredient(?p, ?ing1), hasIngredient(?p, ?ing2),
hasCountryOfOrigin(?ing1, ?c1), hasCountryOfOrigin(?ing2, ?c1) -> NationalPizza(?p)
给出了正确的结果。
或者,我也尝试使用OWL表达式:
Pizza(?p), (hasIngredient min 2 PizzaTopping)(?ing) -> NationalPizza(?p)
但是我如何纳入国家必须相同的条件?有什么想法吗?
+++的 EDIT2 +++
我在SWRLTab中对SWRL规则进行了以下更改(基于@AKSW评论):
Pizza(?p) ^
hasIngredient(?p, ?i1) ^ hasIngredient(?p, ?i2) ^
hasName(?i1, ?ni1) ^ hasName(?i2, ?ni2) ^ swrlb:notEqual(?ni1, ?ni2) ^
hasCountryOfOrigin(?i1, ?c1) ^ hasCountryOfOrigin(?i2, ?c2) ^
hasName(?c1, ?nc1) ^ hasName(?c2, ?nc2) ^ swrlb:equal(?nc1, ?nc2)
-> NationalPizza(?p)
但是Pellet(增量)推理器没有声明个体BlancheAuxLardonds_MaMère
,它确实具有(至少)来自同一国家的两种不同成分(Lardon_Alsace
和Reblochon_LEcho-des-Alpages
)({ {1}})。
+++的 EDIT3 +++
我对本体进行了以下更改(基于@AKSW评论):
France
对此有何帮助?
我的本体是here。