oborel / obo-relations

RO is an ontology of relations for use with biological ontologies
http://oborel.github.io/
Other
92 stars 47 forks source link

ro.obo is highly incomplete #618

Open matentzn opened 2 years ago

matentzn commented 2 years ago

There are a few things in RO that cannot be captured in RO:

All in all there are 147 axioms squished into the owl-axioms header of ro.obo.

Stuff dropped from ro.obo ``` SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) AnnotationPropertyRange( xsd:nonNegativeInteger) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) SubAnnotationPropertyOf( ) ObjectPropertyRange( ObjectIntersectionOf( ObjectComplementOf())) ObjectPropertyRange( ObjectIntersectionOf( ObjectSomeValuesFrom( ))) ObjectPropertyRange( ObjectUnionOf( ObjectSomeValuesFrom( ))) ObjectPropertyRange( ObjectUnionOf( ObjectSomeValuesFrom( ))) ObjectPropertyRange( ObjectSomeValuesFrom( )) ObjectPropertyRange( ObjectSomeValuesFrom( )) ObjectPropertyRange( ObjectUnionOf( )) ObjectPropertyRange( ObjectUnionOf( )) IrreflexiveObjectProperty() SubObjectPropertyOf( ObjectInverseOf()) ObjectPropertyRange( ObjectSomeValuesFrom( )) ObjectPropertyRange( ObjectUnionOf( )) ObjectPropertyRange( ObjectUnionOf( )) ObjectPropertyRange( ObjectUnionOf( )) ObjectPropertyRange( ObjectUnionOf( )) IrreflexiveObjectProperty() IrreflexiveObjectProperty() ObjectPropertyRange( ObjectUnionOf( )) ObjectPropertyRange( ObjectUnionOf( )) ObjectPropertyRange( ObjectUnionOf( )) ObjectPropertyRange( ObjectUnionOf( )) ObjectPropertyRange( ObjectUnionOf( )) IrreflexiveObjectProperty() IrreflexiveObjectProperty() IrreflexiveObjectProperty() IrreflexiveObjectProperty() DataPropertyRange( DatatypeRestriction(xsd:short xsd:minInclusive \"0\"^^xsd:short xsd:maxInclusive \"100\"^^xsd:short)) SubClassOf( owl:Thing) DisjointClasses( ObjectSomeValuesFrom( )) SubClassOf( owl:Thing) DisjointClasses( ObjectSomeValuesFrom( )) DisjointClasses( ObjectSomeValuesFrom( )) DisjointClasses( ObjectSomeValuesFrom( )) SubClassOf( owl:Thing) SubClassOf( ObjectHasSelf()) SubClassOf( owl:Thing) SubClassOf( owl:Thing) SubClassOf( ObjectHasSelf()) SubClassOf( owl:Thing) SubClassOf( ObjectHasSelf()) SubClassOf( owl:Thing) SubClassOf( owl:Thing) SubClassOf( owl:Thing) SubClassOf(owl:Nothing owl:Nothing) SubClassOf( owl:Thing) SubClassOf(ObjectSomeValuesFrom( ) ObjectUnionOf(ObjectSomeValuesFrom( ObjectSomeValuesFrom( )) ObjectSomeValuesFrom( ObjectSomeValuesFrom( ObjectSomeValuesFrom( ))))) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ObjectInverseOf()) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ObjectInverseOf()) ) SubObjectPropertyOf(ObjectPropertyChain( ObjectInverseOf()) ) SubObjectPropertyOf(ObjectPropertyChain( ObjectInverseOf()) ) SubObjectPropertyOf(ObjectPropertyChain( ObjectInverseOf()) ) SubObjectPropertyOf(ObjectPropertyChain( ObjectInverseOf()) ) SubObjectPropertyOf(ObjectPropertyChain( ObjectInverseOf()) ) SubObjectPropertyOf(ObjectPropertyChain( ObjectInverseOf()) ) SubObjectPropertyOf(ObjectPropertyChain(ObjectInverseOf() ) ) SubObjectPropertyOf(ObjectPropertyChain(ObjectInverseOf() ) ) DLSafeRule(Body(ObjectPropertyAtom( Variable() Variable()) ClassAtom( Variable()) ClassAtom( Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation( \"true\"^^xsd:boolean) Annotation(rdfs:comment \"MF(X)-directly_regulates->MF(Y)-enabled_by->GP(Z) => MF(Y)-has_input->GP(Y) e.g. if 'protein kinase activity'(X) directly_regulates 'protein binding activity (Y)and this is enabled by GP(Z) then X has_input Z\"^^xsd:string) Annotation(rdfs:label \"infer input from direct reg\"^^xsd:string) Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()) ClassAtom( Variable()) ClassAtom( Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:comment \"GP(X)-enables->MF(Y)-has_part->MF(Z) => GP(X) enables MF(Z), e.g. if GP X enables ATPase coupled transporter activity' and 'ATPase coupled transporter activity' has_part 'ATPase activity' then GP(X) enables 'ATPase activity'\") Annotation(rdfs:label \"enabling an MF enables its parts\") Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation( \"true\"^^xsd:boolean) Annotation(rdfs:comment \"GP(X)-enables->MF(Y)-part_of->BP(Z) => GP(X) involved_in BP(Z) e.g. if X enables 'protein kinase activity' and Y 'part of' 'signal tranduction' then X involved in 'signal transduction'\"^^xsd:string) Annotation(rdfs:label \"involved in BP\"^^xsd:string) Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ObjectPropertyAtom( Variable() Variable()) ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:comment \"If a molecular function (X) has a regulatory subfunction, then any gene product which is an input to that subfunction has an activity that directly_regulates X. Note: this is intended for cases where the regaultory subfunction is protein binding, so it could be tightened with an additional clause to specify this.\") Annotation(rdfs:label \"inferring direct reg edge from input to regulatory subfunction\") Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:label \"inferring direct neg reg edge from input to regulatory subfunction\") Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:label \"inferring direct positive reg edge from input to regulatory subfunction\") Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:label \"effector input is compound function input\") Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:label \"Input of effector is input of its parent MF\") Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:comment \"if effector directly regulates X, its parent MF directly regulates X\") Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:comment \"if effector directly positively regulates X, its parent MF directly positively regulates X\") Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:label \"if effector directly negatively regulates X, its parent MF directly negatively regulates X\") Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:label \"'causally downstream of' and 'overlaps' should be disjoint properties (a SWRL rule is required because these are non-simple properties).\") Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ClassAtom(owl:Nothing Variable()) ClassAtom(owl:Nothing Variable()))) DLSafeRule(Annotation(rdfs:label \"'causally upstream of' and 'overlaps' should be disjoint properties (a SWRL rule is required because these are non-simple properties).\") Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ClassAtom(owl:Nothing Variable()) ClassAtom(owl:Nothing Variable()))) DLSafeRule(Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) AnnotationAssertion(rdfs:comment \"\") ```
matentzn commented 2 years ago

There is a second problem here though:

owltools --use-catalog ro.owl --merge-import-closure -o -f obo ro.obo.tmp && mv ro.obo.tmp ro.obo
$ grep OMO_ ro.owl
    <!-- http://purl.obolibrary.org/obo/OMO_0002000 -->
    <owl:AnnotationProperty rdf:about="http://purl.obolibrary.org/obo/OMO_0002000"/>
        <obo:OMO_0002000 rdf:datatype="http://www.w3.org/2001/XMLSchema#string">PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;
}</obo:OMO_0002000>
        <obo:OMO_0002000 rdf:datatype="http://www.w3.org/2001/XMLSchema#string">PREFIX owl: &lt;http://www.w3.org/2002/07/owl#&gt;
}</obo:OMO_0002000>
        <obo:OMO_0002000 rdf:datatype="http://www.w3.org/2001/XMLSchema#string">PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;
}</obo:OMO_0002000>
$grep OMO: ro.obo
NO OUTPUT

In other words, the OMO annotations entirely disappear cycling through owltools.