[Bioperl-l] Bio::*Taxonomy* changes

Sendu Bala bix at sendu.me.uk
Mon Jul 24 04:21:55 EDT 2006


Hilmar Lapp wrote:
> On Jul 21, 2006, at 12:51 AM, Chris Fields wrote:
> 
>> my $db = Bio::DB::Taxonomy->new(-source => 'entrez');
>>
>> # normally not needed as this is set by default internally, but as a
>> demo here...
>> $species->db_handle($db);
>>
>> # reset the appropriate data (genus, species, etc) based on Entrez
>> tax data
>> $species->reset_data();     # this method, BTW, doesn't exist yet but
>> should be easy to implement
> 
> Don't call this reset_data() as it may be misleading (usually reset()  
> means to revert into a native or original state). Instead, you would  
> use fetch_from_db() or something.
> 
> However, it seems redundant to me to begin with. If we ignore for a  
> second that the return value in the following isn't exactly  
> compatible, why would you not just call
> 
> 	$species = $db->get_Taxonomy_Node(-taxonid => $species->ncbi_taxid);

If Bio::Species was a Bio::Taxonomy, and we had FactoryI implementing 
classes or similar, we would say:

$species = $factory->fetch(-taxon_id => $species->ncbi_taxid);


> Instead, there should be a separate module (in essence a Bio::Species  
> factory) which can translate a Bio::Taxonomy::Node into a  
> Bio::Species object - if the rank is 'species' or below.

I don't think a 'translation' module is necessary. Bio::Species can just 
be a Bio::Taxonomy.


> At any rate, I think Bio::Taxonomy::Node should be stripped of legacy  
> methods that are only there to achieve Bio::Species compatibility.

Yes :)


> I think this would be the way to go. I.e.,
> 
> 
>           |------Node
> NodeI----|
>           |-|
>             |----SpeciesNode
> Species----|

Actually, if we're changing the name of the module that Species 
interacts with, any existing code needs to be re-written. So why not 
just do it properly and have Bio::Species interact with Bio::Taxonomy?

                   |----Bio::Taxonomy
Bio::TaxonomyI----|
                   |----Bio::Species

Or

Bio::TaxonomyI----|----Bio::Taxonomy----|----Bio::Species

Leaving Node completely free to be just a node. This way we don't have a 
crufty SpeciesNode there simply for the sake of Bio::Species. 
Bio::Species itself provides all the legacy stuff it needs for itself, 
while interacting with Nodes via TaxonomyI methods in the 'correct' way 
only.




More information about the Bioperl-l mailing list