[Bioperl-l] Bio::Ontology
Hilmar Lapp
hlapp@gnf.org
Sun, 22 Sep 2002 13:51:31 -0700
On Sunday, September 22, 2002, at 12:51 PM, Chris Mungall wrote:
>
>
> On Sat, 21 Sep 2002, Hilmar Lapp wrote:
>
>> It appears that ideally and as one of the first steps of reconciling
>> the two designs we should be able to merge ChrisM's VocabTermI and
>> ChrisZ's TermI.
>>
>> The following lists the differences and my votes.
>>
>>
<snip>
>> 4) label(). I'm not sure what this would be and whether it is
>> crucial for a Term. ChrisM as the expert, could you comment?
>
> label is just the name/phrase, eg 'transmembrane receptor'
OK, so my mistake - ChrisZ had name() here. To me as an
ontology-layman name() is more intuitive than label(), which seems
to be more graph-reminiscent, but I'm fine with both. ChrisZ, what
do you think? Anyone else want to cast a vote?
<snip>
>> 8) timestamp(). ChrisM, is this crucial to a Term, or does it only
>> pertain to those who created the ontology? Is it rather a version()?
>
> it's not crucial - version would be fine
>
Great - I guess this also makes TermI then eligible for being
IdentifiableI. Doesn't it?
>> 9) category(). Isn't this in fact a relationship of the Term? Should
>> there or should there not be an each_relationship() method on Term?
>
> this can be viewed as another relationship, between the term, and
> the top
> level/generic terms in the ontology
>
So it would be like asking 'which ontology does this term belong to?'
> regarding making each_relationship() a method of Term - do you have an
> implementation that doesn't introduce cyclical perl references?
Good point. You mean because the relationship would have a link back
to the term it was obtained from? If all the relationship objects
are stored in memory along with the terms, then it's hard to imagine
how you could avoid cycles.
However, an implementation could choose to keep the relationships in
another form, and construct the RelationshipI objects only once they
are requested. Also, the engine underpinning an ontology may be a
database, and obtaining the relationships for a term may be
implemented by triggering a query to the database.
I thought it'd be nice if you could transparently get the
relationships for a term in the same way, independent of the
underlying engine (graph, database, whatever). One way would be to
stick the method to get those onto TermI, and the implementation
makes sure you get the right thing for the particular engine that
holds your ontology. Another one is to define an interface for an
'OntologyEngine,' and once you obtained that you go. Or both may be
useful. The first option appears easier to use to me, but may in
practice be implemented by delegating to an OntologyEngineI object
(just fantasizing about the name, but we actually had a discussion
in this direction here on Friday).
>
>> These are all the differences as far as I see.
>>
>> RelationshipI makes a lot of sense to me, except that I think it
>> should not inherit from Graph::ArcI, and I'm also not sure why
>> Relationships shall have stable identifiers.
>>
>> Comments/thoughts/votes more than welcome.
>
> i'm happy with all the other changes
>
Wow - have you started meanwhile rolling in your code? If not, would
you mind if I start rolling in at least those of your modules that
we would need here? Or maybe I or someone can fix the problem that
you have with cvs?
-hilmar
--
-------------------------------------------------------------
Hilmar Lapp email: lapp at gnf.org
GNF, San Diego, Ca. 92121 phone: +1-858-812-1757
-------------------------------------------------------------