1
# $Id: OntologyIO.pm,v 1.7 2003/11/20 06:34:11 allenday Exp $
3
# BioPerl module for Bio::OntologyIO
5
# Cared for by Hilmar Lapp <hlapp at gmx.net>
7
# Copyright Hilmar Lapp
9
# You may distribute this module under the same terms as perl itself
12
# (c) Hilmar Lapp, hlapp at gmx.net, 2003.
13
# (c) GNF, Genomics Institute of the Novartis Research Foundation, 2003.
15
# You may distribute this module under the same terms as perl itself.
16
# Refer to the Perl Artistic License (see the license accompanying this
17
# software package, or see http://www.perl.com/language/misc/Artistic.html)
18
# for the terms under which you may use, modify, and redistribute this module.
20
# THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
21
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
22
# MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
25
# POD documentation - main docs before the code
29
Bio::OntologyIO - Parser factory for Ontology formats
35
my $parser = Bio::OntologyIO->new(-format => "go",
38
while(my $ont = $parser->next_ontology()) {
39
print "read ontology ",$ont->name()," with ",
40
scalar($ont->get_root_terms)," root terms, and ",
41
scalar($ont->get_leaf_terms)," leaf terms\n";
46
This is the parser factory for different ontology sources and
47
formats. Conceptually, it is very similar to L<Bio::SeqIO>, but the
48
difference is that the chunk of data returned as an object is an
55
User feedback is an integral part of the evolution of this and other
56
Bioperl modules. Send your comments and suggestions preferably to
57
the Bioperl mailing list. Your participation is much appreciated.
59
bioperl-l@bioperl.org - General discussion
60
http://bioperl.org/MailList.shtml - About the mailing lists
64
Report bugs to the Bioperl bug tracking system to help us keep track
65
of the bugs and their resolution. Bug reports can be submitted via
68
http://bugzilla.bioperl.org/
70
=head1 AUTHOR - Hilmar Lapp
72
Email hlapp at gmx.net
74
Describe contact details here
78
Additional contributors names and emails here
82
The rest of the documentation details each of the object methods.
83
Internal methods are usually preceded with a _
88
# Let the code begin...
91
package Bio::OntologyIO;
95
# Object preamble - inherits from Bio::Root::Root
100
@ISA = qw(Bio::Root::Root Bio::Root::IO);
103
# Maps from format name to driver suitable for the format.
105
my %format_driver_map = (
108
"interpro" => "InterProParser",
109
"evoc" => "simplehierarchy",
115
Usage : my $parser = Bio::OntologyIO->new(-format => 'go', @args);
116
Function: Returns a stream of ontologies opened on the specified input
117
for the specified format.
118
Returns : An ontology parser (an instance of Bio::OntologyIO) initialized
119
for the specified format.
120
Args : Named parameters. Common parameters are
122
-format - the format of the input; supported right now are
123
'go' (synonymous with goflat), 'so' (synonymous
124
with soflat), and 'interpro'
125
-file - the file holding the data
126
-fh - the stream providing the data (-file and -fh are
128
-ontology_name - the name of the ontology
129
-engine - the L<Bio::Ontology::OntologyEngineI> object
130
to be reused (will be created otherwise); note
131
that every L<Bio::Ontology::OntologyI> will
132
qualify as well since that one inherits from the
134
-term_factory - the ontology term factory to use. Provide a
135
value only if you know what you are doing.
137
DAG-Edit flat file parsers will usually also accept the
138
following parameters.
140
-defs_file - the name of the file holding the term
142
-files - an array ref holding the file names (for GO,
143
there will usually be 3 files: component.ontology,
144
function.ontology, process.ontology)
146
Other parameters are specific to the parsers.
151
my ($caller,@args) = @_;
152
my $class = ref($caller) || $caller;
153
# or do we want to call SUPER on an object if $caller is an
155
if( $class =~ /Bio::OntologyIO::(\S+)/ ) {
156
my ($self) = $class->SUPER::new(@args);
157
$self->_initialize(@args);
161
@param{ map { lc $_ } keys %param } = values %param; # lowercase keys
162
my $format = $class->_map_format($param{'-format'});
164
# normalize capitalization
165
return undef unless( $class->_load_format_module($format) );
166
return "Bio::OntologyIO::$format"->new(@args);
172
my($self, @args) = @_;
174
# initialize factories etc
175
my ($eng,$fact,$ontname) =
176
$self->_rearrange([qw(TERM_FACTORY)
178
# term object factory
179
$self->term_factory($fact) if $fact;
181
# initialize the Bio::Root::IO part
182
$self->_initialize_io(@args);
187
Title : next_ontology
188
Usage : $ont = $stream->next_ontology()
189
Function: Reads the next ontology object from the stream and returns it.
190
Returns : a L<Bio::Ontology::OntologyI> compliant object, or undef at the
198
shift->throw_not_implemented();
204
Usage : $obj->term_factory($newval)
205
Function: Get/set the ontology term factory to use.
207
As a user of this module it is not necessary to call this
208
method as there will be default. In order to change the
209
default, the easiest way is to instantiate
210
L<Bio::Ontology::TermFactory> with the proper -type
211
argument. Most if not all parsers will actually use this
212
very implementation, so even easier than the aforementioned
213
way is to simply call
214
$ontio->term_factory->type("Bio::Ontology::MyTerm").
217
Returns : value of term_factory (a Bio::Factory::ObjectFactoryI object)
218
Args : on set, new value (a Bio::Factory::ObjectFactoryI object, optional)
226
return $self->{'term_factory'} = shift if @_;
227
return $self->{'term_factory'};
230
=head1 Private Methods
232
Some of these are actually 'protected' in OO speak, which means you
233
may or will want to utilize them in a derived ontology parser, but
234
you should not call them from outside.
238
=head2 _load_format_module
240
Title : _load_format_module
241
Usage : *INTERNAL OntologyIO stuff*
242
Function: Loads up (like use) a module at run time on demand
249
sub _load_format_module {
250
my ($self, $format) = @_;
251
my $module = "Bio::OntologyIO::" . $format;
255
$ok = $self->_load_module($module);
259
$self: $format cannot be found
261
For more information about the OntologyIO system please see the docs.
262
This includes ways of checking for formats at compile time, not run time
280
$mod = $format_driver_map{lc($format)};
281
$mod = lc($format) unless $mod;
283
$self->throw("unable to guess ontology format, specify -format");
289
my( $self, $ref ) = @_;
290
$ref =~ s/<\\;/\</g;
291
$ref =~ s/>\\;/\>/g;
292
$ref =~ s/&pct\\;/\%/g;