OBOFoundry / COB

An experimental ontology containing key terms from Open Biological and Biomedical Ontologies (OBO)
https://obofoundry.github.io/COB
Creative Commons Zero v1.0 Universal
35 stars 8 forks source link

Avoid use of "inverse(Property)" expression in class expressions in favour of providing an inverse relation #229

Open matentzn opened 1 year ago

matentzn commented 1 year ago

We rely a lot on ELK, and this kind of axiom, using complex property expressions in class expressions will result in incomplete reasoning:

    <owl:Class rdf:about="http://purl.obolibrary.org/obo/COB_0000113">
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty>
                    <rdf:Description>
                        <owl:inverseOf rdf:resource="http://purl.obolibrary.org/obo/COB_0000087"/>
                    </rdf:Description>
                </owl:onProperty>
                <owl:allValuesFrom rdf:resource="http://purl.obolibrary.org/obo/COB_0000082"/>
            </owl:Restriction>
        </rdfs:subClassOf>
        <rdfs:label xml:lang="en">plan</rdfs:label>
    </owl:Class>

I would like to propose to avoid use of "inverse(Property)" expression in class expressions in favour of providing a named inverse relation. Apart from the fact that we can actually use the expression for reasoning, it is much easier to read, and also better supported by ontology formats that are not OWL (OBO, obographs-json).

bpeters42 commented 1 year ago

I believe the only reason we used 'inverse of' was that sometimes it was not-trival to come up with a label for the inverse property, and we wanted to move quickly. For the exact reasons Nico pointed out, we should move away from that.

matentzn commented 1 month ago

This is also causing OBO format conversions to break when people are importing COB directly..

matentzn commented 1 month ago

I had to hotfix some builds like

https://github.com/monarch-initiative/vertebrate-breed-ontology/commit/d509ecf57f094ef8638c74759d5f815294efc6e1

because the OBO error is so big that even --check false fails..