# get an AnnotationCollectionI somehow, eg
$ac = $seq->annotation();
foreach $key ( $ac->get_all_annotation_keys() ) {
@values = $ac->get_Annotations($key);
foreach $value ( @values ) {
# value is an Bio::AnnotationI, and defines a "as_text" method
print "Annotation ",$key," stringified value ",$value->as_text,"\n";
# also defined hash_tree method, which allows data orientated
# access into this object
$hash = $value->hash_tree();
}
}
Annotation Collections are a way of storing a series of "interesting
facts" about something. We call an "interesting fact" in Bioperl an
Annotation (this differs from a Sequence Feature, which is called
a Sequence Feature and may or may not have an Annotation Collection).
A benefit of this approach is that all sorts of simple, interesting
observations can be collected, the possibility is endless.
The Bioperl approach is that the "interesting facts" are represented by
Bio::AnnotationI objects. The interface Bio::AnnotationI guarantees
two methods
$obj->as_text(); # string formated to display to users
and
$obj->hash_tree(); # hash with defined rules for data-orientated discovery
The hash_tree method is designed to play well with XML output and
other "nested-tag-of-data-values", think BoulderIO and/or Ace stuff. For more
information see
Bio::AnnotationI.
Annotations are stored in AnnotationCollections, each Annotation under a
different "tag". The tags allow simple discovery of the available annotations,
and in some cases (like the tag "gene_name") indicate how to interpret the
data underneath the tag. The tag is only one tag deep and each tag can have an
array of values.
In addition, AnnotationCollections are guaranteed to maintain consistent
types of objects under each tag - at least that each object complies to one
interface. The "standard" AnnotationCollection insists the following rules
are set up:
Tag Object
--- ------
comment Bio::Annotation::Comment
dblink Bio::Annotation::DBLink
description Bio::Annotation::SimpleValue
gene_name Bio::Annotation::SimpleValue
ontology_term Bio::Annotation::OntologyTerm
reference Bio::Annotation::Reference
These tags are the implict tags that the SeqIO system needs to round-trip
GenBank/EMBL/Swissprot.
However, you as a user and us collectively as a community can grow the
"standard" tag mapping over time and specifically for a particular
area.
The rest of the documentation details each of the object methods. Internal methods
are usually preceded with a _
Use these for Bio::AnnotationI object access.