1

我扩展了原始的 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)来自同一国家(例如MeatToppingLardon_Alsace 和CreamToppingCrè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-AlpagesFrance

+++ 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>

有什么帮助吗?

我的本体在这里

4

0 回答 0