owlontologyprotegepellet

Protege : Equivalent class definition issue


Seems there is a bug in Protege5. a sample ontology is defined as below:

<?xml version="1.0"?>
<rdf:RDF xmlns="http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#"
     xml:base="http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144"
     xmlns:owl="http://www.w3.org/2002/07/owl#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:xml="http://www.w3.org/XML/1998/namespace"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
    <owl:Ontology rdf:about="http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144"/>



    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Data properties
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->




    <!-- http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#has_something_1 -->

    <owl:DatatypeProperty rdf:about="http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#has_something_1">
        <owl:propertyDisjointWith rdf:resource="http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#has_something_2"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#has_something_2 -->

    <owl:DatatypeProperty rdf:about="http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#has_something_2"/>



    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Classes
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->




    <!-- http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#classA -->

    <owl:Class rdf:about="http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#classA">
        <owl:equivalentClass>
            <owl:Restriction>
                <owl:onProperty rdf:resource="http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#has_something_1"/>
                <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:minCardinality>
            </owl:Restriction>
        </owl:equivalentClass>
        <owl:equivalentClass>
            <owl:Restriction>
                <owl:onProperty rdf:resource="http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#has_something_2"/>
                <owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:minCardinality>
            </owl:Restriction>
        </owl:equivalentClass>
    </owl:Class>



    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Individuals
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->




    <!-- http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#ind_1 -->

    <owl:NamedIndividual rdf:about="http://www.semanticweb.org/user/ontologies/2020/0/untitled-ontology-144#ind_1">
        <has_something_1 rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">10</has_something_1>
    </owl:NamedIndividual>
</rdf:RDF>



<!-- Generated by the OWL API (version 4.5.9.2019-02-01T07:24:44Z) https://github.com/owlcs/owlapi -->

as you see in below picture, classA is defined as two separate axioms has_something_1 min 1 and has_something_1 min 1. and ind_1 has only one axiom :has_something_1 10.

int this case, pellet pellet infer ind_1 as an instance of classA, that is wrong.

enter image description here

but as depicted in below picture, if classA definition was (has_something_1 min 1 ) and (has_something_2 min 1), pellet would not infer ind_1 as classA individual (that is true).

I have already post this issue on github

enter image description here


Solution

  • Defining the class with two axioms and defining it with one axiom with a conjunction between class expressions create very different ontologies.

    In the first one, the two class expressions are defined equivalent by transitivity, and that's why Pellet is drawing the inference (correctly). In short, the first version has A equiv B, A equiv C, while the second has A equiv B and C. In the first version, B equiv C is a valid inference and any individual of B is an individual of C.