我扩展了原始的 Pizza.owl,现在在我的 Protege 中有以下 SWRL 规则(规则编辑器:Windows/Views/Ontology views/Rules):
Pizza(?p),
hasIngredient(?p, ?ing1), hasIngredient(?p, ?ing2),
hasCountryOfOrigin(?ing1, ?c1), hasCountryOfOrigin(?ing2, ?c1),
differentFrom(?ing1, ?ing2) -> NationalPizza(?p)
该规则应NationalPizza
适用于至少两种成分(例如 PizzaToppings)来自同一国家(例如MeatTopping
Lardon_Alsace 和CreamTopping
CrèmeFraîche_Normandie 都hasCountryOfOrigin
等于单个法国)的所有比萨饼个体。推理者 (Pellet) 一无所获。我可以改用任何 swrlb 函数吗?
+++编辑1 +++
我想出了以下解决方案:
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
France
+++ EDIT3 +++
我对本体进行了以下更改(基于@AKSW 评论):
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#AllDifferent"/>
<owl:distinctMembers rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.co-ode.org/ontologies/pizza#CrèmeFraîche_Normandie"/>
<rdf:Description rdf:about="http://www.co-ode.org/ontologies/pizza#Gorgonzola_Maribor"/>
<rdf:Description rdf:about="http://www.co-ode.org/ontologies/pizza#Lardon_Alsace"/>
<rdf:Description rdf:about="http://www.co-ode.org/ontologies/pizza#Mozzarella_Buffala"/>
<rdf:Description rdf:about="http://www.co-ode.org/ontologies/pizza#Reblochon_LEcho-des-Alpages"/>
</owl:distinctMembers>
</rdf:Description>
有什么帮助吗?
我的本体在这里。