-
Notifications
You must be signed in to change notification settings - Fork 52
Obsoletion
There are a few reasons that the HPO will make a term obsolete.
- Inadvertantly, two separate terms were created that are actually synonymous -- we therefore merge these terms by transfering all of the information from one term to the other and then making the former term obsolete.
- It is recognized that a term is not a good ontology term and we decide to remove it
A major concern with obsoleting a term is that external users may have used the term to annotate a patient, and if we just removed the term without a trace, then the external user would essentially lose information. We therefore do several things to help external users, and we only obsolete a term if absolutely necessary. Term obsoletion was commonly required in the early years of the HPO project, but as the quality has grown, it is only rarely necessary now (a handful of times in 2016, for instance).
The procedure is (for term mergers)
- Take the id of the term that is to be obsoleted, and add is as 'has_alt_id' to the other term
- Add the label of the term that is to be obsoleted as a synonym (usually exact synonym) to the other term
- Transfer any other relevant information including especially alt ids, useful comments, database xrefs
- Transfer any subclasses of the term to be obsoleted to the new class
- Remove information such as logical definitions that does not need to be retained
- Add the annotation 'term replaced by' and indicate the primary id of the other term
- Consider adding a comment explaining the reason for the obsoletion
- Add the annotation owl:deprecated with the literal value 'true'
The procedure for simple obsoletion is the same except one does not transfer information to any new term. Here it is important to write a comment that will tell users what other terms they may want to consider.
Please note that obsolete terms cannot have alt_ids, since this will cause obscure error messages. Please use the
term replaced by
annotation, and remove definitions, synonyms, and anything else. Remember, if the term is obsolete, it should not be associated with any more information than the fact that it is obsolete and what it was replaced by!
Exception in thread "main" java.lang.IllegalArgumentException: character to be escaped is missing
at java.util.regex.Matcher.appendReplacement(Matcher.java:809)
at org.monarchinitiative.phenol.io.obo.OboEscapeUtils.unescapeImpl(OboEscapeUtils.java:67)
at org.monarchinitiative.phenol.io.obo.OboEscapeUtils.unescape(OboEscapeUtils.java:56)
at org.monarchinitiative.phenol.io.obo.OboParserListener.exitKeyValueGeneric(OboParserListener.java:464)
at de.charite.compbio.ontolib.io.obo.parser.Antlr4OboParser$KeyValueGenericContext.exitRule(Antlr4OboParser.java:3002)
at org.antlr.v4.runtime.Parser.triggerExitRuleEvent(Parser.java:408)
at org.antlr.v4.runtime.Parser.exitRule(Parser.java:642)
at de.charite.compbio.ontolib.io.obo.parser.Antlr4OboParser.oboFile(Antlr4OboParser.java:214)
at org.monarchinitiative.phenol.io.obo.OboParser.parseInputStream(OboParser.java:119)
at org.monarchinitiative.phenol.io.obo.OboParser.parseFile(OboParser.java:71)
at org.monarchinitiative.phenol.io.obo.OboImmutableOntologyLoader.load(OboImmutableOntologyLoader.java:100)
at org.monarchinitiative.phenol.io.obo.hpo.HpoOboParser.parse(HpoOboParser.java:75)
at org.monarchinitiative.hpoworkbench.io.HPOParser.parse(HPOParser.java:32)
at org.monarchinitiative.hpoworkbench.io.HPOParser.<init>(HPOParser.java:21)
at org.monarchinitiative.hpoworkbench.cmd.HpoStatsCommand.inputHPOdata(HpoStatsCommand.java:85)
at org.monarchinitiative.hpoworkbench.cmd.HpoStatsCommand.<init>(HpoStatsCommand.java:54)
at org.monarchinitiative.hpoworkbench.io.Commandline.<init>(Commandline.java:106)
at org.monarchinitiative.hpoworkbench.HpoWorkbench.main(HpoWorkbench.java:17)
If two terms are identified that are actually synonymous and they are merged, this does not cause downstream difficulties. However, if we decide the obsolete terms such as Congenital neutropenia
it can lose information
if this term is being used to annotate patient data (instead of Neutropenia
with the time point recorded as a modifier or a timestamp).
The problem is that we can't easily request a timely re-annotation of patients that external projects have annotated with the "bad" term, since the data-analyist-to-data-provider path is very long. Also, there is no information-preserving automated replaced-by strategy. In that case, the replace by annotation refers to a class that does not the contain the onset information.
Therefore, if the decision is made that a term like this needs to be obsoleted,
- Classes will be marked as soon-to-be-obsoleted and will be obsoleted after a period of 1-2 years.
- Consider finding a way to obsolete in a computer-interpretable way, such that it is possible to automatically replace the annotation to "congenital neutropenia" with an annotation to "neutropenia" with onset modifier "congenital".