ONTO-PERL
view release on metacpan or search on metacpan
lib/OBO/Parser/OBOParser.pm view on Meta::CPAN
#
# Module : OBOParser.pm
# Purpose : Parse OBO-formatted files.
# License : Copyright (c) 2006-2015 by Erick Antezana. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
# Contact : Erick Antezana <erick.antezana -@- gmail.com>
#
package OBO::Parser::OBOParser;
use OBO::Core::Dbxref;
use OBO::Core::Instance;
use OBO::Core::Ontology;
use OBO::Core::Relationship;
use OBO::Core::RelationshipType;
use OBO::Core::SubsetDef;
use OBO::Core::SynonymTypeDef;
use OBO::Core::Term;
use OBO::Util::IDspaceSet;
use OBO::Util::Set;
use OBO::XO::OBO_ID;
use Carp;
use Date::Manip qw(ParseDate UnixDate);
use strict;
use warnings;
use open qw(:std :utf8); # Make All I/O Default to UTF-8
$Carp::Verbose = 1;
sub new {
my $class = shift;
my $self = {};
$self->{OBO_FILE} = undef; # required, (1)
bless ($self, $class);
return $self;
}
=head2 work
Usage - $OBOParser->work($obo_file_path)
Returns - the parsed OBO ontology
Args - the OBO file to be parsed
Function - parses an OBO file
=cut
sub work {
my $self = shift;
if (defined $_[0]) {
$self->{OBO_FILE} = shift;
} else {
croak 'You have to provide an OBO file as input';
}
open (OBO_FILE, $self->{OBO_FILE}) || croak 'The OBO file (', $self->{OBO_FILE}, ') cannot be opened: ', $!;
$/ = ""; # one paragraph at the time
chomp(my @chunks = <OBO_FILE>);
chomp(@chunks);
close OBO_FILE;
#
# Treat OBO file header tags
#
my $file_line_number = 0;
if (defined $chunks[0] && $chunks[0] =~ /^format-version:\s*(.*)/) {
my @header = split (/\n/, $chunks[0]);
$file_line_number = $#header + 2; # amount of lines in the header
$chunks[0] = join("\n", @header);
#
# format-version
#
my $format_version;
if ($chunks[0] =~ /(^format-version:\s*(.*)\n?)/m) { # required tag
$format_version = $2;
$chunks[0] =~ s/$1//;
}
#
# data_version
#
my $data_version;
if ($chunks[0] =~ /(^data-version:\s*(.*)\n?)/m) {
$data_version = $2;
$chunks[0] =~ s/$1//;
}
#
# ontology
#
my $ontology_id_space;
if ($chunks[0] =~ /(^ontology:\s*(.*)\n?)/m) { # as of OBO spec 1.4
$ontology_id_space = $2;
$chunks[0] =~ s/$1//;
}
#
# date
#
my $date;
if ($chunks[0] =~ /(^date:\s*(.*)\n?)/m) {
$date = $2;
$chunks[0] =~ s/$1//;
}
#
# saved_by
#
my $saved_by;
if ($chunks[0] =~ /(^saved-by:\s*(.*)\n?)/m) {
$saved_by = $2;
$chunks[0] =~ s/$1//;
}
#
( run in 1.760 second using v1.01-cache-2.11-cpan-364913b4093 )