Obsolete Terms In Ontologies
3
7
Entering edit mode
14.3 years ago
Andrew Craig ▴ 90

I have a database storing genotype data. I also want to add phenotype data by using terms taken from the Human Phenotype Ontology.

When the phenotype ontology is updated, if a term I have used becomes obsolete, I will need to replace the obsolete term with a newer equivalent. I notice OBO defines tags "replaced_by" which indicates an alternative term that can be used to automatically replace the obsoleted term and "consider" which is similar but needs additional human intervention. Unfortunately the ontology I am interested in using does not seem to provide these attributes.

Apart from the two obvious ways to manage this i.e "use one version of the ontology and never update" or "just prompt the user to redo the annotation for expired terms", is there another established way to automatically identify replacements for obsoleted terms in an ontology? For example it seems as though some information from the relationships in the two ontology graphs could be exploited here?

If anyone could suggest a paper dealing with this problem I would be very grateful.

ontology • 3.7k views
ADD COMMENT
3
Entering edit mode
14.3 years ago

Unfortunately, the replaced_by tag is sometimes not used, even by well-established OBO ontologies like the SO (Sequence Ontology). In contrast, the GO (Gene Ontology) is heavily curated and usually contains this information, for the reasons that you have discovered.

I would contact the curators of the ontology to request that they include this information in future, explaining why you (as a member of their user community) need it.

If you need to find out where previous term deprecations have occurred, you will need access to the ontology's source repository. If possible, convert it to git and use git bisect to track down the point at which the term was obsoleted. You may see other terms in that (or neighbouring) commits that indicate why it happened.

While it may be possible to recover some hints from the rest of the ontology, it is probably easier to look at the edit history.

If we assume a semantically similar term has superseded the old one, it would be possible to query for that. However, if the old term were removed because it was simply wrong, the old and new terms could have radically different semantics and be very hard to link.

ADD COMMENT
0
Entering edit mode

Thanks Keith, I'll try contacting the HPO curators.

ADD REPLY
0
Entering edit mode

The OBO 1.2 spec states that "Obsolete terms must have no relationships, and no defined is_a, inverse_of, disjoint_from, union_of, or intersection_of tags." Therefore most useful information is elided on obsoletion and the querying I suggested is not possible without the previous version of the ontology. If you have two different versions you can use obodiff. From the OBO-Edit documentation: "The obodiff utility compares a pair of OBO files and reports all of the edits necessary to transform the first file into the second."

ADD REPLY
2
Entering edit mode
14.3 years ago

See Alternatives for Obsolete Terms on wiki.geneontology.org.

It must be possible to get all this information using a mysql database for GO; A public mysql for GO is available here.

See also "searching for Obsolete terms".

ADD COMMENT
0
Entering edit mode

Thank you for your suggestions. I realised my question is a little ambiguous. I am writing as an end user of the ontology, not the ontology curator.

In a nutshell, my question is there another way to infer appropriate replacement term(s) for an obsoleted term in an ontology that does not provide any "replaced_by" or "consider" attributes.

ADD REPLY
2
Entering edit mode
14.3 years ago

2nd answer:

download GO as OWL:

wget http://archive.geneontology.org/latest-full/go_201007-termdb.owl.gz
gunzip go_201007-termdb.owl.gz

and apply the following stylesheet:


<xsl:stylesheet xmlns:xsl="&lt;a href="http://www.w3.org/1999/XSL/Transform" "="" rel="nofollow">http://www.w3.org/1999/XSL/Transform'
    version='1.0'
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:oboInOwl="http://www.geneontology.org/formats/oboInOwl#"
    >

<xsl:output method="text"/>

<xsl:template match="/">
<xsl:apply-templates select="//oboInOwl:replacedBy"/>
</xsl:template>

<xsl:template match="oboInOwl:replacedBy">
<xsl:value-of select="substring-after(@rdf:resource,'#')"/>
<xsl:text>  replace </xsl:text>
<xsl:value-of select="substring-after(../@rdf:about,'#')"/>
<xsl:text>
</xsl:text>
</xsl:template>

</xsl:stylesheet>

using xsltproc:

xsltproc obsolete.xsl go_201007-termdb.owl

result:

GO_0000750 replace GO_0000174
GO_0005337 replace GO_0000259
GO_0005622 replace GO_0000259
GO_0046961 replace GO_0000260
GO_0046962 replace GO_0000261
GO_0000753 replace GO_0000284
GO_0000384 replace GO_0000362
GO_0000384 replace GO_0000363
(...)
ADD COMMENT
1
Entering edit mode

Impressive answer in such a short time. I though I you had a new job?? Your clear 4,216 BioStar overlord state is well deserved...

ADD REPLY
1
Entering edit mode

Egon, this is a just a race between Neil and me :-) ( must win, must win, must win...)

ADD REPLY
0
Entering edit mode

Again thanks for the suggestion, but I don't think this answers the question, my fault for not writing more clearly.

I know the standard way to replace obsolete terms is via the "replaced_by" attribute.

I am working with the human phenotype ontology (HPO) not the gene ontology (GO). HPO does not provide any "replaced_by" information.

I am looking for a method to identify replacement terms for obsoleted terms when no "replaced_by" information was provided by the ontology curators.

ADD REPLY

Login before adding your answer.

Traffic: 2810 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6