Inference/Classification question

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Inference/Classification question

Bellave Jayaram
I am trying to model something in OWL-DL. I have created a simple example to
be able to infer how something (a cup) might satisfy a requirement
(mustBeAbleToHoldHotCoffee) and am looking for some clarification. The
example OWL file is below.

Essentially, I would like to be able to infer that:
if a cup canContain HotCoffee then it hasFeature holdsHotLiquids AND
meetsRequirement mustBeAbleToHoldHotCoffee.

Also, I would like MyCoffeeCup to be classified as a HeatTolerantCup.

When I run Pellet, I get a message that:
Individual mustBeAbleToHoldHotCoffee is forced to belong to class Entity and
its complement

Can anyone tell me what is causing this and suggest how I can change my
model to accomplish such inference/classification using Pellet and Protégé ?

Thanks,
Jayaram


<?xml version="1.0"?>
<rdf:RDF xmlns="http://www.owl-ontologies.com/Ontology1145431997.owl#"
     xml:base="http://www.owl-ontologies.com/Ontology1145431997.owl"
     xmlns:p1="http://www.owl-ontologies.com/assert.owl#"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:owl="http://www.w3.org/2002/07/owl#">
    <owl:Ontology rdf:about=""/>
    <owl:ObjectProperty rdf:ID="canContain">
        <rdfs:domain rdf:resource="#Container"/>
    </owl:ObjectProperty>
    <owl:Class rdf:ID="Cold">
        <rdfs:subClassOf rdf:resource="#Temperature"/>
        <owl:disjointWith rdf:resource="#Hot"/>
    </owl:Class>
    <ColdLiquid rdf:ID="ColdCoffee">
        <hasFeature rdf:resource="#roomTemperature"/>
    </ColdLiquid>
    <owl:Class rdf:ID="ColdLiquid">
        <owl:equivalentClass>
            <owl:Restriction>
                <owl:onProperty rdf:resource="#hasFeature"/>
                <owl:allValuesFrom rdf:resource="#Cold"/>
            </owl:Restriction>
        </owl:equivalentClass>
        <rdfs:subClassOf rdf:resource="#Liquid"/>
    </owl:Class>
    <owl:Class rdf:ID="Container">
        <rdfs:subClassOf rdf:resource="#Solid"/>
    </owl:Class>
    <owl:Class rdf:ID="Cup">
        <rdfs:subClassOf rdf:resource="#Container"/>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="#meetsRequirement"/>
                <owl:someValuesFrom rdf:resource="#Requirement"/>
            </owl:Restriction>
        </rdfs:subClassOf>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="#canContain"/>
                <owl:someValuesFrom rdf:resource="#Liquid"/>
            </owl:Restriction>
        </rdfs:subClassOf>
    </owl:Class>
    <owl:Class rdf:ID="Entity">
        <owl:disjointWith rdf:resource="#Feature"/>
        <owl:disjointWith rdf:resource="#Requirement"/>
    </owl:Class>
    <owl:Class rdf:ID="Feature">
        <owl:disjointWith rdf:resource="#Requirement"/>
        <owl:disjointWith rdf:resource="#Entity"/>
    </owl:Class>
    <owl:ObjectProperty rdf:ID="hasFeature">
        <rdfs:domain>
            <owl:Class>
                <owl:unionOf rdf:parseType="Collection">
                    <owl:Class rdf:about="#Container"/>
                    <owl:Class rdf:about="#Liquid"/>
                </owl:unionOf>
            </owl:Class>
        </rdfs:domain>
    </owl:ObjectProperty>
    <owl:ObjectProperty rdf:ID="hasManufacturer">
        <rdfs:domain rdf:resource="#Container"/>
    </owl:ObjectProperty>
    <owl:Class rdf:ID="HeatTolerantCup">
        <owl:equivalentClass>
            <owl:Restriction>
                <owl:onProperty rdf:resource="#canContain"/>
                <owl:someValuesFrom rdf:resource="#HotLiquid"/>
            </owl:Restriction>
        </owl:equivalentClass>
        <rdfs:subClassOf rdf:resource="#Cup"/>
    </owl:Class>
    <Feature rdf:ID="holdsHotLiquids"/>
    <Feature rdf:ID="holdsLiquids"/>
    <owl:Class rdf:ID="Hot">
        <rdfs:subClassOf rdf:resource="#Temperature"/>
        <owl:disjointWith rdf:resource="#Cold"/>
    </owl:Class>
    <HotLiquid rdf:ID="HotCoffee">
        <hasFeature rdf:resource="#waterBoilingTemperature"/>
    </HotLiquid>
    <owl:Class rdf:ID="HotLiquid">
        <owl:equivalentClass>
            <owl:Restriction>
                <owl:onProperty rdf:resource="#hasFeature"/>
                <owl:allValuesFrom rdf:resource="#Hot"/>
            </owl:Restriction>
        </owl:equivalentClass>
        <rdfs:subClassOf rdf:resource="#Liquid"/>
    </owl:Class>
    <owl:ObjectProperty rdf:ID="isMetby">
        <rdfs:domain rdf:resource="#Requirement"/>
        <owl:inverseOf rdf:resource="#meetsRequirement"/>
    </owl:ObjectProperty>
    <owl:Class rdf:ID="Liquid">
        <rdfs:subClassOf rdf:resource="#Entity"/>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="#hasFeature"/>
                <owl:someValuesFrom rdf:resource="#Temperature"/>
            </owl:Restriction>
        </rdfs:subClassOf>
        <owl:disjointWith rdf:resource="#Solid"/>
    </owl:Class>
    <owl:ObjectProperty rdf:ID="meetsRequirement">
        <rdfs:range rdf:resource="#Requirement"/>
        <owl:inverseOf rdf:resource="#isMetby"/>
    </owl:ObjectProperty>
    <TemperatureTolerance rdf:ID="mustBeAbleToHoldHotCoffee"/>
    <Cup rdf:ID="MyCoffeeCup">
        <hasFeature rdf:resource="#holdsLiquids"/>
        <canContain rdf:resource="#HotCoffee"/>
    </Cup>
    <owl:Class rdf:ID="Requirement">
        <rdfs:subClassOf
rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="#isMetby"/>
                <owl:someValuesFrom rdf:resource="#Entity"/>
            </owl:Restriction>
        </rdfs:subClassOf>
        <owl:disjointWith rdf:resource="#Feature"/>
        <owl:disjointWith rdf:resource="#Entity"/>
    </owl:Class>
    <Cold rdf:ID="roomTemperature"/>
    <owl:Class rdf:ID="Solid">
        <rdfs:subClassOf rdf:resource="#Entity"/>
        <owl:disjointWith rdf:resource="#Liquid"/>
    </owl:Class>
    <owl:Class rdf:ID="Temperature">
        <rdfs:subClassOf rdf:resource="#Feature"/>
    </owl:Class>
    <owl:Class rdf:ID="TemperatureTolerance">
        <rdfs:subClassOf rdf:resource="#Requirement"/>
    </owl:Class>
    <Hot rdf:ID="waterBoilingTemperature"/>
</rdf:RDF>

-------------------------------------------------------------------------
To unsubscribe go to http://protege.stanford.edu/community/subscribe.html

Reply | Threaded
Open this post in threaded view
|

Re: Inference/Classification question

Hai Wang
Hi Jayaram,
You model has at least the following problem.

You defined the class ColdLiquid as
ColdLiquid = hasFeature only Cold.
By this, you are saying that for everything, as long as its feature  
is cold, it will be a ColdLiquid. It will include those individuals  
which can not have any value for the property hasFeature at all.

Also hasFeature has domain defined as Container or Liquid.
Therefore, all the classes which are disjointed with Container or  
Liquid (e.g Feature class, requirement class) will be inferred as  
subclasses of ColdLiquid, because that they can not have any value  
for the perperty hasFeature.  It will make your model inconsistent.

I suggest you change your model to
ColdLiquid = hasFeature only Cold and Entity.

Same problem occurs for hotLiquid class.

Regards
Hai

On 19 Apr 2006, at 19:17, Bellave Jayaram wrote:

> I am trying to model something in OWL-DL. I have created a simple  
> example to
> be able to infer how something (a cup) might satisfy a requirement
> (mustBeAbleToHoldHotCoffee) and am looking for some clarification. The
> example OWL file is below.
>
> Essentially, I would like to be able to infer that:
> if a cup canContain HotCoffee then it hasFeature holdsHotLiquids AND
> meetsRequirement mustBeAbleToHoldHotCoffee.
>
> Also, I would like MyCoffeeCup to be classified as a HeatTolerantCup.
>
> When I run Pellet, I get a message that:
> Individual mustBeAbleToHoldHotCoffee is forced to belong to class  
> Entity and
> its complement
>
> Can anyone tell me what is causing this and suggest how I can  
> change my
> model to accomplish such inference/classification using Pellet and  
> Protégé ?
>
> Thanks,
> Jayaram
>
>
> <?xml version="1.0"?>
> <rdf:RDF xmlns="http://www.owl-ontologies.com/Ontology1145431997.owl#"
>      xml:base="http://www.owl-ontologies.com/Ontology1145431997.owl"
>      xmlns:p1="http://www.owl-ontologies.com/assert.owl#"
>      xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
>      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
>      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>      xmlns:owl="http://www.w3.org/2002/07/owl#">
>     <owl:Ontology rdf:about=""/>
>     <owl:ObjectProperty rdf:ID="canContain">
>         <rdfs:domain rdf:resource="#Container"/>
>     </owl:ObjectProperty>
>     <owl:Class rdf:ID="Cold">
>         <rdfs:subClassOf rdf:resource="#Temperature"/>
>         <owl:disjointWith rdf:resource="#Hot"/>
>     </owl:Class>
>     <ColdLiquid rdf:ID="ColdCoffee">
>         <hasFeature rdf:resource="#roomTemperature"/>
>     </ColdLiquid>
>     <owl:Class rdf:ID="ColdLiquid">
>         <owl:equivalentClass>
>             <owl:Restriction>
>                 <owl:onProperty rdf:resource="#hasFeature"/>
>                 <owl:allValuesFrom rdf:resource="#Cold"/>
>             </owl:Restriction>
>         </owl:equivalentClass>
>         <rdfs:subClassOf rdf:resource="#Liquid"/>
>     </owl:Class>
>     <owl:Class rdf:ID="Container">
>         <rdfs:subClassOf rdf:resource="#Solid"/>
>     </owl:Class>
>     <owl:Class rdf:ID="Cup">
>         <rdfs:subClassOf rdf:resource="#Container"/>
>         <rdfs:subClassOf>
>             <owl:Restriction>
>                 <owl:onProperty rdf:resource="#meetsRequirement"/>
>                 <owl:someValuesFrom rdf:resource="#Requirement"/>
>             </owl:Restriction>
>         </rdfs:subClassOf>
>         <rdfs:subClassOf>
>             <owl:Restriction>
>                 <owl:onProperty rdf:resource="#canContain"/>
>                 <owl:someValuesFrom rdf:resource="#Liquid"/>
>             </owl:Restriction>
>         </rdfs:subClassOf>
>     </owl:Class>
>     <owl:Class rdf:ID="Entity">
>         <owl:disjointWith rdf:resource="#Feature"/>
>         <owl:disjointWith rdf:resource="#Requirement"/>
>     </owl:Class>
>     <owl:Class rdf:ID="Feature">
>         <owl:disjointWith rdf:resource="#Requirement"/>
>         <owl:disjointWith rdf:resource="#Entity"/>
>     </owl:Class>
>     <owl:ObjectProperty rdf:ID="hasFeature">
>         <rdfs:domain>
>             <owl:Class>
>                 <owl:unionOf rdf:parseType="Collection">
>                     <owl:Class rdf:about="#Container"/>
>                     <owl:Class rdf:about="#Liquid"/>
>                 </owl:unionOf>
>             </owl:Class>
>         </rdfs:domain>
>     </owl:ObjectProperty>
>     <owl:ObjectProperty rdf:ID="hasManufacturer">
>         <rdfs:domain rdf:resource="#Container"/>
>     </owl:ObjectProperty>
>     <owl:Class rdf:ID="HeatTolerantCup">
>         <owl:equivalentClass>
>             <owl:Restriction>
>                 <owl:onProperty rdf:resource="#canContain"/>
>                 <owl:someValuesFrom rdf:resource="#HotLiquid"/>
>             </owl:Restriction>
>         </owl:equivalentClass>
>         <rdfs:subClassOf rdf:resource="#Cup"/>
>     </owl:Class>
>     <Feature rdf:ID="holdsHotLiquids"/>
>     <Feature rdf:ID="holdsLiquids"/>
>     <owl:Class rdf:ID="Hot">
>         <rdfs:subClassOf rdf:resource="#Temperature"/>
>         <owl:disjointWith rdf:resource="#Cold"/>
>     </owl:Class>
>     <HotLiquid rdf:ID="HotCoffee">
>         <hasFeature rdf:resource="#waterBoilingTemperature"/>
>     </HotLiquid>
>     <owl:Class rdf:ID="HotLiquid">
>         <owl:equivalentClass>
>             <owl:Restriction>
>                 <owl:onProperty rdf:resource="#hasFeature"/>
>                 <owl:allValuesFrom rdf:resource="#Hot"/>
>             </owl:Restriction>
>         </owl:equivalentClass>
>         <rdfs:subClassOf rdf:resource="#Liquid"/>
>     </owl:Class>
>     <owl:ObjectProperty rdf:ID="isMetby">
>         <rdfs:domain rdf:resource="#Requirement"/>
>         <owl:inverseOf rdf:resource="#meetsRequirement"/>
>     </owl:ObjectProperty>
>     <owl:Class rdf:ID="Liquid">
>         <rdfs:subClassOf rdf:resource="#Entity"/>
>         <rdfs:subClassOf>
>             <owl:Restriction>
>                 <owl:onProperty rdf:resource="#hasFeature"/>
>                 <owl:someValuesFrom rdf:resource="#Temperature"/>
>             </owl:Restriction>
>         </rdfs:subClassOf>
>         <owl:disjointWith rdf:resource="#Solid"/>
>     </owl:Class>
>     <owl:ObjectProperty rdf:ID="meetsRequirement">
>         <rdfs:range rdf:resource="#Requirement"/>
>         <owl:inverseOf rdf:resource="#isMetby"/>
>     </owl:ObjectProperty>
>     <TemperatureTolerance rdf:ID="mustBeAbleToHoldHotCoffee"/>
>     <Cup rdf:ID="MyCoffeeCup">
>         <hasFeature rdf:resource="#holdsLiquids"/>
>         <canContain rdf:resource="#HotCoffee"/>
>     </Cup>
>     <owl:Class rdf:ID="Requirement">
>         <rdfs:subClassOf
> rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
>         <rdfs:subClassOf>
>             <owl:Restriction>
>                 <owl:onProperty rdf:resource="#isMetby"/>
>                 <owl:someValuesFrom rdf:resource="#Entity"/>
>             </owl:Restriction>
>         </rdfs:subClassOf>
>         <owl:disjointWith rdf:resource="#Feature"/>
>         <owl:disjointWith rdf:resource="#Entity"/>
>     </owl:Class>
>     <Cold rdf:ID="roomTemperature"/>
>     <owl:Class rdf:ID="Solid">
>         <rdfs:subClassOf rdf:resource="#Entity"/>
>         <owl:disjointWith rdf:resource="#Liquid"/>
>     </owl:Class>
>     <owl:Class rdf:ID="Temperature">
>         <rdfs:subClassOf rdf:resource="#Feature"/>
>     </owl:Class>
>     <owl:Class rdf:ID="TemperatureTolerance">
>         <rdfs:subClassOf rdf:resource="#Requirement"/>
>     </owl:Class>
>     <Hot rdf:ID="waterBoilingTemperature"/>
> </rdf:RDF>
>
> ----------------------------------------------------------------------
> ---
> To unsubscribe go to http://protege.stanford.edu/community/ 
> subscribe.html
>

Regards
Hai


Research Associate
Department of Computer Science
Kilburn Building
University of Manchester
Oxford Road
Manchester M13 9PL
UK
Homepage: http://www.cs.man.ac.uk/~hwang



-------------------------------------------------------------------------
To unsubscribe go to http://protege.stanford.edu/community/subscribe.html