2 # BioPerl module for Bio::Das::FeatureTypeI
4 # Please direct questions and support issues to <bioperl-l@bioperl.org>
6 # Cared for by Lincoln Stein <lstein@cshl.org>
8 # Copyright Lincoln Stein
10 # You may distribute this module under the same terms as perl itself
12 # POD documentation - main docs before the code
16 Bio::Das::FeatureTypeI - Simple interface to Sequence Ontology feature types
20 # Get a Bio::Das::FeatureTypeI object from somewhere
21 $term = $db->fetch....
23 # Get the name of the term
24 $definition = $term->name;
26 # Get the accession of the term
27 $accession = $term->accession;
29 # Get the definition of the term
30 $definition = $term->definition;
32 # Get the parents of the term, optionally filtered by relationship
33 @parents = $term->parents($relationship);
35 # Get the children of the term, optionally filtered by relationship
36 @children = $term->children($relationship);
38 # Given a parent and child, returns their relationship, or undef if
39 # not directly related
40 $relationship = $parent->relationship($child);
42 # Return true if two terms are identical
43 $match = $term1->equals($term2);
45 # Return true if $term2 is a descendent of $term1, optionally
46 # filtering by relationship ("isa" assumed)
47 $match = $term1->is_descendent($term2,$relationship);
49 # Return true if $term2 is a parent of $term1, optionally
50 # filtering by relationship ("isa" assumed)
51 $match = $term1->is_parent($term2,$relationship);
53 # Return true if $term2 is equal to $term1 or if $term2 descends
54 # from term 1 via the "isa" relationship
55 $match = $term1->match($term2);
57 # Create a new term de novo
58 $term = Bio::Das::FeatureTypeI->new(-name => $name,
59 -accession => $accession,
60 -definition => $definition);
62 # Add a child to a term
63 $term1->add_child($term2,$relationship);
65 # Delete a child from a term
66 $term1->delete_child($term2);
70 Bio::Das::FeatureTypeI is an interface to the Gene Ontology
71 Consortium's Sequence Ontology (SO). The SO, like other ontologies,
72 is a directed acyclic graph in which a child node may have multiple
73 parents. The relationship between parent and child is one of a list
74 of relationships. The SO currently recognizes two relationships "isa"
77 The intent of this interface is to interoperate with older software
78 that uses bare strings to represent feature types. For this reason,
79 the interface overloads the stringify ("") and string equals (eq)
86 User feedback is an integral part of the evolution of this
87 and other Bioperl modules. Send your comments and suggestions preferably
88 to one of the Bioperl mailing lists.
89 Your participation is much appreciated.
91 bioperl-l@bio.perl.org
95 Please direct usage questions or support issues to the mailing list:
97 I<bioperl-l@bioperl.org>
99 rather than to the module maintainer directly. Many experienced and
100 reponsive experts will be able look at the problem and quickly
101 address it. Please include a thorough description of the problem
102 with code and data examples if at all possible.
104 =head2 Reporting Bugs
106 Report bugs to the Bioperl bug tracking system to help us keep track
107 the bugs and their resolution. Bug reports can be submitted via the
110 https://redmine.open-bio.org/projects/bioperl/
112 =head1 AUTHOR - Lincoln Stein
114 Email lstein@cshl.org
118 The rest of the documentation details each of the object
119 methods. Internal methods are usually preceded with a _
124 # Let the code begin...
126 package Bio
::Das
::FeatureTypeI
;
129 use overload
'""' => 'name',
133 # Object preamble - inherits from Bio::Root::RootI;
137 this is somehow FUBAR, implementation classes cannot successfully inherit from Bio::Das::FeatureTypeI
141 use base
qw(Bio::Root::RootI);
146 Usage : $string = $term->name
147 Function: return the term for the type
154 sub name
{ shift->throw_not_implemented }
159 Usage : $string = $term->accession
160 Function: return the accession number for the term
167 sub accession
{ shift->throw_not_implemented }
172 Usage : $string = $term->definition
173 Function: return the human-readable definition for the term
180 sub definition
{ shift->throw_not_implemented }
185 Usage : @terms = $term->parents($relationship)
186 Function: return parent terms
187 Returns : list of Bio::Das::FeatureTypeI
191 Returns the parents for the current term, empty if there are none. An
192 optional relationship argument will return those parents
193 that are related via the specified relationship type.
195 The relationship is one of "isa" or "partof".
199 sub parents
{ shift->throw_not_implemented; }
204 Usage : @terms = $term->children($relationship)
205 Function: return children terms
206 Returns : list of Bio::Das::FeatureTypeI
210 Returns the children for the current term, empty if there are none. An
211 optional relationship argument will return those children
212 that are related via the specified relationship type.
214 The relationship is one of "isa" or "partof".
218 sub children
{ shift->throw_not_implemented; }
223 Usage : $relationship = $parent->relationship($child)
224 Function: return the relationship between a parent and a child
225 Returns : one of "isa" or "partof"
229 This method returns the relationship between a parent and one of its
230 immediate descendents. It can return "isa", "partof", or undef if
231 there is not a direct parent/child relationship (kissing cousins are
236 sub relationship
{ shift->throw_not_implemented }
241 Usage : $boolean = $term1->equals($term2)
242 Function: return true if $term1 and $term2 are the same
247 The two terms must be identical. In practice, this means that if
248 term2 is a Bio::Das::FeatureI object, then its accession number must
249 match the first term's accession number. Otherwise, if term2 is a
250 bare string, then it must equal (in a case insensitive manner)
253 NOTE TO IMPLEMENTORS: This method is defined in terms of other
254 methods, so does not need to be implemented.
262 if ($term2->isa('Bio::Das::FeatureTypeI')) {
263 return $self->accession eq $term2->accession;
265 return lc $self->name eq lc $term2;
271 Title : is_descendent
272 Usage : $boolean = $term1->is_descendent($term2 [,$relationship])
273 Function: return true of $term2 is a descendent of $term1
278 This method returns true if $term2 descends from $term1. The
279 operation traverses the tree. The traversal can be limited to the
280 relationship type ("isa" or "partof") if desired. $term2 can be a
281 bare string, in which case the term names will be used as the basis
282 for term matching (see equals()).
284 NOTE TO IMPLEMENTORS: this method is defined as the inverse of
285 is_parent(). Do not implement it directly, but do implement
292 my ($term,$relationship) = @_;
293 $self->throw("$term is not a Bio::Das::FeatureTypeI")
294 unless $term->isa('Bio::Das::FeatureTypeI');
295 $term->is_parent($self,$relationship);
301 Usage : $boolean = $term1->is_parent($term2 [,$relationship])
302 Function: return true of $term2 is a parent of $term1
307 This method returns true if $term2 is a parent of $term1. The
308 operation traverses the tree. The traversal can be limited to the
309 relationship type ("isa" or "partof") if desired. $term2 can be a
310 bare string, in which case the term names will be used as the basis
311 for term matching (see equals()).
313 NOTE TO IMPLEMENTORS: Implementing this method will also implement
318 sub is_parent
{ shift->throw_not_implemented }
323 Usage : $boolean = $term1->match($term2)
324 Function: return true if $term1 equals $term2 or if $term2 is an "isa" descendent
329 This method combines equals() and is_descendent() in such a way that
330 the two terms will match if they are the same or if the second term is
331 an instance of the first one. This is also the basis of the operator
334 NOTE TO IMPLEMENTORS: This method is defined in terms of other methods
335 and does not need to be implemented.
342 return 1 if $self->equals($term2);
343 return $self->is_descendent($term2,'isa');
349 Usage : $term = Bio::Das::FeatureTypeI->new(@args)
350 Function: create a new term
355 This method creates a new Bio::Das::FeatureTypeI. Arguments:
358 -------- ------------
360 -name Name of this term
362 -accession Accession number for the term
364 -definition Definition of the term
368 sub new
{ shift->throw_not_implemented }
373 Usage : $boolean = $term->add_child($term2,$relationship)
374 Function: add a child to a term
375 Returns : a boolean indicating success
377 Throws : a "cycle detected" exception
380 This method adds a new child to the indicated node. It may detect a
381 cycle in the DAG and throw a "cycle detected" exception.
385 sub add_child
{ shift->throw_not_implemented }
391 Usage : $boolean = $term->delete_child($term2);
392 Function: delete a child of the term
393 Returns : a boolean indicating success
394 Args : child to be deleted
395 Throws : a "not a child" exception
398 This method deletes a new child from the indicated node. It will
399 throw an exception if the indicated child is not a direct descendent.
403 sub delete_child
{ shift->throw_not_implemented }