2 # BioPerl module for Bio::Annotation::DBLink
4 # Please direct questions and support issues to <bioperl-l@bioperl.org>
6 # Cared for by Ewan Birney <birney@ebi.ac.uk>
8 # Copyright Ewan Birney
10 # You may distribute this module under the same terms as perl itself
12 # POD documentation - main docs before the code
16 Bio::Annotation::DBLink - untyped links between databases
20 $link1 = Bio::Annotation::DBLink->new(-database => 'TSC',
21 -primary_id => 'TSC0000030'
26 $link2 = Bio::Annotation::DBLink->new();
27 $link2->database('dbSNP');
28 $link2->primary_id('2367');
30 # DBLink is-a Bio::AnnotationI object, can be added to annotation
31 # collections, e.g. the one on features or seqs
32 $feat->annotation->add_Annotation('dblink', $link2);
37 Provides an object which represents a link from one object to something
38 in another database without prescribing what is in the other database.
40 Aside from L<Bio::AnnotationI>, this class also implements
41 L<Bio::IdentifiableI>.
43 =head1 AUTHOR - Ewan Birney
45 Ewan Birney - birney@ebi.ac.uk
49 The rest of the documentation details each of the object
50 methods. Internal methods are usually preceded with a _
55 # Let the code begin...
57 package Bio
::Annotation
::DBLink
;
60 use base
qw(Bio::Root::Root Bio::AnnotationI Bio::IdentifiableI);
66 Usage : $dblink = Bio::Annotation::DBLink->new(-database =>"GenBank",
67 -primary_id => "M123456");
68 Function: Creates a new instance of this class.
70 Returns : A new instance of Bio::Annotation::DBLink.
71 Args : Named parameters. At present, the following parameters are
74 -database the name of the database referenced by the xref
75 -primary_id the primary (main) id of the referenced entry
76 (usually this will be an accession number)
77 -optional_id a secondary ID under which the referenced entry
78 is known in the same database
79 -comment comment text for the dbxref
80 -tagname the name of the tag under which to add this
81 instance to an annotation bundle (usually 'dblink')
82 -type the type of information in the referenced entry
83 (e.g. protein, mRNA, structure)
84 -namespace synonymous with -database (also overrides)
85 -version version of the referenced entry
86 -authority attribute of the Bio::IdentifiableI interface
87 -url attribute of the Bio::IdentifiableI interface
92 my($class,@args) = @_;
94 my $self = $class->SUPER::new
(@args);
96 my ($database,$primary_id,$optional_id,$comment,$tag,$type,$ns,$auth,$v,$url) =
97 $self->_rearrange([qw(DATABASE
109 $database && $self->database($database);
110 $primary_id && $self->primary_id($primary_id);
111 $optional_id && $self->optional_id($optional_id);
112 $comment && $self->comment($comment);
113 $tag && $self->tagname($tag);
114 $type && $self->type($type);
115 # Bio::IdentifiableI parameters:
116 $ns && $self->namespace($ns); # this will override $database
117 $auth && $self->authority($auth);
118 defined($v) && $self->version($v);
119 defined($url) && $self->url($url);
124 =head1 AnnotationI implementing functions
144 return "Direct database link to ".$self->primary_id
145 .($self->version ?
".".$self->version : "")
146 .($self->optional_id ?
" (".$self->optional_id.")" : "")
147 ." in database ".$self->database;
153 Usage : my $str = $ann->display_text();
154 Function: returns a string. Unlike as_text(), this method returns a string
155 formatted as would be expected for te specific implementation.
157 One can pass a callback as an argument which allows custom text
158 generation; the callback is passed the current instance and any text
162 Args : [optional] callback
167 my $DEFAULT_CB = sub { (($_[0]->database ?
$_[0]->database . ':' : '' ) .
168 ($_[0]->primary_id ?
$_[0]->primary_id : '') .
169 ($_[0]->version ?
'.' . $_[0]->version : '')) || '' };
172 my ($self, $cb) = @_;
174 $self->throw("Callback must be a code reference") if ref $cb ne 'CODE';
196 $h->{'database'} = $self->database;
197 $h->{'primary_id'} = $self->primary_id;
198 if( defined $self->optional_id ) {
199 $h->{'optional_id'} = $self->optional_id;
201 if( defined $self->comment ) {
202 # we know that comments have hash_tree methods
203 $h->{'comment'} = $self->comment;
212 Usage : $obj->tagname($newval)
213 Function: Get/set the tagname for this annotation value.
215 Setting this is optional. If set, it obviates the need to
216 provide a tag to Bio::AnnotationCollectionI when adding
217 this object. When obtaining an AnnotationI object from the
218 collection, the collection will set the value to the tag
219 under which it was stored unless the object has a tag
223 Returns : value of tagname (a scalar)
224 Args : new value (a scalar, optional)
232 return $self->{'tagname'} = shift if @_;
233 return $self->{'tagname'};
236 =head1 Specific accessors for DBLinks
243 Usage : $self->database($newval)
244 Function: set/get on the database string. Databases are just
245 a string here which can then be interpreted elsewhere
247 Returns : value of database
248 Args : newvalue (optional)
255 return $self->{'database'} = shift if @_;
256 return $self->{'database'};
262 Usage : $self->primary_id($newval)
263 Function: set/get on the primary id (a string)
264 The primary id is the main identifier used for this object in
265 the database. Good examples would be accession numbers. The id
266 is meant to be the main, stable identifier for this object
268 Returns : value of primary_id
269 Args : newvalue (optional)
276 return $self->{'primary_id'} = shift if @_;
277 return $self->{'primary_id'};
283 Usage : $self->optional_id($newval)
284 Function: get/set for the optional_id (a string)
286 optional id is a slot for people to use as they wish. The
287 main issue is that some databases do not have a clean
288 single string identifier scheme. It is hoped that the
289 primary_id can behave like a reasonably sane "single string
290 identifier" of objects, and people can use/abuse optional
291 ids to their heart's content to provide precise mappings.
294 Returns : value of optional_id
295 Args : newvalue (optional)
304 return $self->{'optional_id'} = shift if @_;
305 return $self->{'optional_id'};
311 Usage : $self->comment($newval)
312 Function: get/set of comments (comment object)
313 Sets or gets comments of this dblink, which is sometimes relevant
315 Returns : value of comment (Bio::Annotation::Comment)
316 Args : newvalue (optional)
323 return $self->{'comment'} = shift if @_;
324 return $self->{'comment'};
330 Usage : $self->type($newval)
331 Function: get/set of type
332 Sets or gets the type of this dblink.
333 Example : $self->type('protein')
334 Returns : value of type
335 Args : newvalue (optional)
342 return $self->{'type'} = shift if @_;
343 return $self->{'type'};
346 =head1 Methods for Bio::IdentifiableI compliance
351 Usage : $string = $obj->object_id()
352 Function: a string which represents the stable primary identifier
353 in this namespace of this object. For DNA sequences this
354 is its accession_number, similarly for protein sequences
356 This is aliased to primary_id().
363 return shift->primary_id(@_);
369 Usage : $version = $obj->version()
370 Function: a number which differentiates between versions of
371 the same object. Higher numbers are considered to be
372 later and more relevant, but a single object described
373 the same identifier should represent the same concept
382 return $self->{'version'} = shift if @_;
383 return $self->{'version'};
390 Usage : $url = $obj->url()
391 Function: URL which is associated with this DB link
392 Returns : string, full URL descriptor
398 return $self->{'url'} = shift if @_;
399 return $self->{'url'};
406 Usage : $authority = $obj->authority()
407 Function: a string which represents the organisation which
408 granted the namespace, written as the DNS name for
409 organisation (eg, wormbase.org)
418 return $self->{'authority'} = shift if @_;
419 return $self->{'authority'};
425 Usage : $string = $obj->namespace()
426 Function: A string representing the name space this identifier
427 is valid in, often the database name or the name
428 describing the collection
430 For DBLink this is the same as database().
437 return shift->database(@_);