简体   繁体   中英

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.

在此处输入图片说明

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

在此处输入图片说明

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM