source: trunk/grails-app/domain/dbnp/data/Ontology.groovy @ 565

Last change on this file since 565 was 565, checked in by duh, 12 years ago
  • upon adding a term the termEditorController now also adds the ontology when the ontologies doest not exist
  • extended the Ontology domain class with functionality to instantiate the Ontology class using the versioned ncboId
  • added 'addDummy' support to termElements and templateElements which caused the study and subject page not to work properly on an empty database (these fields were not rendered so exceptions were thrown).
  • this fixed bug # 107 in half... now the species select (ONTOLOGYTERM) somehow does not show the species in the database, still needs to be fixed
  • Property svn:keywords set to Date Rev Author
File size: 3.9 KB
Line 
1package dbnp.data
2
3/**
4 * This class describes an existing ontology, of which terms can be stored (actually 'cached' would be a better description)
5 * in the (global) Term store.
6 * This information is mapped from the BioPortal NCBO REST service, e.g.: http://rest.bioontology.org/bioportal/ontologies/38802
7 * @see http://www.bioontology.org/wiki/index.php/NCBO_REST_services
8 *
9 * Revision information:
10 * $Rev: 565 $
11 * $Author: duh $
12 * $Date: 2010-06-15 15:45:16 +0000 (di, 15 jun 2010) $
13 */
14class Ontology implements Serializable {
15        String name             // BioPortal: displayLabel
16        String description      // BioPortal: description
17        String url              // BioPortal: homepage
18        String versionNumber    // BioPortal: versionNumber
19        int ncboId              // BioPortal: ontologyId
20        int ncboVersionedId     // BioPortal: id
21
22        /**
23         * Find child terms
24         * @return A set containing all terms that reside under this ontology
25         */
26        Set<Term> giveTerms() {
27                Term.findAllByOntology(this)
28        }
29
30        Object giveTermByName(String name) {
31                giveTerms().find {
32                        it.name == name
33                }
34
35                /* TODO: find out why the following doesn't work (probably more efficient):
36                Term.find {
37                        it.name == name
38                        it.ontology == this
39                }
40                }*/
41        }
42
43        static Ontology getBioPortalOntology(String ncboId) {
44                // Get ontology from BioPortal via Ontocat
45                // TODO: maybe make a static OntologyService instance to be more efficient, and decorate it with caching?
46                uk.ac.ebi.ontocat.OntologyService os = new uk.ac.ebi.ontocat.bioportal.BioportalOntologyService()
47                uk.ac.ebi.ontocat.Ontology o = os.getOntology(ncboId)
48
49                // Instantiate and return Ontology object
50                new dbnp.data.Ontology(
51                        name: o.label,
52                        description: o.description,
53                        url: o.properties['homepage'] ?: "http://bioportal.bioontology.org/ontologies/${o.id}",
54                        versionNumber: o.versionNumber,
55                        ncboId: o.ontologyAccession,
56                        ncboVersionedId: o.id
57                );
58        }
59
60        static Ontology getBioPortalOntologyByTerm(String termId) {
61                // Get ontology from BioPortal via Ontocat
62                // TODO: maybe make a static OntologyService instance to be more efficient, and decorate it with caching?
63                uk.ac.ebi.ontocat.OntologyService os = new uk.ac.ebi.ontocat.bioportal.BioportalOntologyService()
64                uk.ac.ebi.ontocat.OntologyTerm term = os.getTerm( termId );
65                println( term );
66                uk.ac.ebi.ontocat.Ontology o = os.getOntology( term.getOntologyAccession() );
67                println( o );
68
69                // Instantiate and return Ontology object
70                new dbnp.data.Ontology(
71                        name: o.label,
72                        description: o.description,
73                        url: o.properties['homepage'] ?: "http://bioportal.bioontology.org/ontologies/${o.id}",
74                        versionNumber: o.versionNumber,
75                        ncboId: o.ontologyAccession,
76                        ncboVersionedId: o.id
77                );
78        }
79
80        /**
81         * Instantiate Ontotology class by searching the web service for (versioned)id.
82         * @param       ontologyId (bioportal versionedId)
83         * @return      ontology instance
84         */
85        static Ontology getBioPortalOntologyByVersionedId(String ncboVersionedId) {
86                try {
87                        // use the NCBO REST service to fetch ontology information
88                        def url = "http://rest.bioontology.org/bioportal/ontologies/" + ncboVersionedId
89                        def xml = new URL(url).getText()
90                        def data = new XmlParser().parseText(xml)
91                        def bean = data.data.ontologyBean
92
93                        // instantiate Ontology with the proper values
94                        def ontology = new dbnp.data.Ontology(
95                                name: bean.displayLabel.text(),
96                                description: bean.description.text(),
97                                url: bean.homepage.text(),
98                                versionNumber: bean.versionNumber.text(),
99                                ncboId: bean.ontologyId.text() as int,
100                                ncboVersionedId: bean.id.text() as int
101                        )
102
103                        // validate ontology
104                        if (ontology.validate()) {
105                                // proper instance
106                                return ontology
107                        } else {
108                                // it does not validate
109                                println ".encountered errors instantiating Ontology by versionedId [" + ncboVersionedId + "] :"
110                                ontology.errors.each() {
111                                        println "  -" + it
112                                }
113                                throw new Exception("instantiating Ontology by (versioned) id [" + ncboVersionedId + "] failed")
114                        }
115                } catch (Exception e) {
116                        // whoops?!
117                        return false
118                }
119        }
120}
Note: See TracBrowser for help on using the repository browser.