ncbo / bioportal_web_ui

A Rails application for biological ontologies
http://bioportal.bioontology.org/
Other
21 stars 2 forks source link

Add OBO Id Badges for terms that are OBO Ids #310

Open matthewhorridge opened 4 months ago

matthewhorridge commented 4 months ago

This is a UI enhancement request. In search results, for terms that are OBO Ids, I would like to be able to clearly see the OBO Id.

I've mocked up an example in the image below to illustrate what I think a solution could be. Here we see a search result for the term that has an OBO Id of CL:0000256. This is the actual string that I searched for "CL:0000256".

image

jvendetti commented 4 months ago

@mdorf - do I understand correctly that the OBO IDs Matthew refers to are found in the "notation" field in our REST API?

For example, given the following REST call:

https://data.bioontology.org/search?q=melanoma&display_context=false&display_links=false&exact_match=true&include=prefLabel,notation

... I noticed that some of the notation fields are the same as the preferred label, whereas other notation fields resemble the {ontology_acronym}:{term_id} format:

"collection": [
        {
            "prefLabel": "melanoma",
            "notation": "melanoma",
            "@id": "http://www.gamuts.net/entity#melanoma",
            "@type": "http://www.w3.org/2002/07/owl#Class"
        },
        {
            "prefLabel": "melanoma",
            "notation": "DOID:1909",
            "@id": "http://purl.obolibrary.org/obo/DOID_1909",
            "@type": "http://www.w3.org/2002/07/owl#Class"
        },
mdorf commented 4 months ago

@jvendetti, the notation field is constructed during the OWL API processing phase. At that time, either the notation property OR the prefixIRI property gets added to each class (unless the actual notation property already natively exists within the ontology, in which case, that value is preserved). At the indexing phase, we add the value of either the notation or the prefixIRI attribute to the notation field in the index. The oboID field is a separate attribute, which is ONLY used in search. It exists in the index schema and gets populated using the logic referred to here: https://github.com/bmir-radx/radx-project/issues/46#issuecomment-1939782535 and here: https://github.com/bmir-radx/radx-project/issues/46#issuecomment-1939932614 In some cases, the oboID matches the value of the notation but not universally.

jvendetti commented 4 months ago

@mdorf - thanks for the reply. I know about the initial processing step where we ensure that all classes coming into BioPortal have either a skos:notation or prefixIRI property.

I think what I was trying to ask is whether the OBO IDs that Matthew refers to are surfaced by the REST API so that clients like the Rails application could display them. Assuming I understood what you said above, it sounds like the OBO IDs only exist as field values in solr's index schema?

For example - if I execute a term search using an OBO ID like NCIT:C20047, I get results back from the REST API. But if I look at the classes in the JSON result set, there's nothing there to indicate if they have associated OBO IDs:

{
  "prefLabel": "Diagnostic or Prognostic Factor",
  "synonym": [
      "Diagnostic or Prognostic Factor"
  ],
  "definition": [
      "A characteristic of an organism that contributes to the diagnosis or treatment of a disease or to the prediction of clinical outcomes."
  ],
  "obsolete": false,
  "ontologyType": "ONTOLOGY",
  "provisional": false,
  "@id": "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C20047",
  "@type": "http://www.w3.org/2002/07/owl#Class"
},
{
  "prefLabel": "Diagnostic or Prognostic Factor",
  "definition": [
      "A characteristic of an organism that contributes to the diagnosis or treatment of a disease or to the prediction of clinical outcomes."
  ],
  "obsolete": false,
  "matchType": "notation",
  "ontologyType": "ONTOLOGY",
  "provisional": false,
  "@id": "http://purl.obolibrary.org/obo/NCIT_C20047",
  "@type": "http://www.w3.org/2002/07/owl#Class"
},

I tried modifying the REST call to use the include parameter to return notation values, but this has a side effect of modifying the makeup of the returned JSON. Keys like obsolete are eliminated, which the Rails application makes use of to alter the display of obsolete classes:

{
  "prefLabel": "Diagnostic or Prognostic Factor",
  "synonym": [
      "Diagnostic or Prognostic Factor"
  ],
  "definition": [
      "A characteristic of an organism that contributes to the diagnosis or treatment of a disease or to the prediction of clinical outcomes."
  ],
  "notation": "Thesaurus:C20047",
  "@id": "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C20047",
  "@type": "http://www.w3.org/2002/07/owl#Class"
},
{
  "prefLabel": "Diagnostic or Prognostic Factor",
  "definition": [
      "A characteristic of an organism that contributes to the diagnosis or treatment of a disease or to the prediction of clinical outcomes."
  ],
  "notation": "NCIT:C20047",
  "@id": "http://purl.obolibrary.org/obo/NCIT_C20047",
  "@type": "http://www.w3.org/2002/07/owl#Class"
},

And currently there is no possibility to adjust the include parameter to get everything required:

"errors": [
  "The `include` query string parameter cannot accept obsolete, please use only prefLabel, synonym, definition, notation, cui, semanticType, properties"
],
"status": 400