GOBO
view release on metacpan or search on metacpan
GOBO/Parsers/OBOParserDispatchHash.pm view on Meta::CPAN
=head1 NAME
GOBO::Parsers::OBOParserDispatchHash
=head1 DESCRIPTION
An GOBO::Parsers::Parser that parses OBO Files.
Mostly identical to GOBO::Parsers::OBOParser but uses a dispatch table rather than an if/else cascade
=cut
package GOBO::Parsers::OBOParserDispatchHash;
use Moose;
#use base
extends 'GOBO::Parsers::OBOParser';
has header_check_sub => (is=>'rw', isa=>'CodeRef', writer => 'set_header_check_sub', reader => 'get_header_check_sub', default=>sub{ return sub { return 1 }; });
has stanza_check_sub => (is=>'rw', isa=>'CodeRef', writer => 'set_stanza_check_sub', reader => 'get_stanza_check_sub', default=>sub{ return sub { return 1 }; });
has tag_check_sub => (is=>'rw', isa=>'CodeRef', writer => 'set_tag_check_sub', reader => 'get_tag_check_sub', default=>sub{ return sub { return 1 }; });
use Data::Dumper;
my $body_subs = {
"id" => sub {
my ($self, $args) = @_;
# print STDERR "node before: " . Dumper(${$args->{node}}) . "\n";
if ($args->{stanzaclass} eq 'term') {
${$args->{node}} = ${$args->{graph}}->add_term($args->{value});
}
elsif ($args->{stanzaclass} eq 'typedef') {
${$args->{node}} = ${$args->{graph}}->add_relation($args->{value});
}
elsif ($args->{stanzaclass} eq 'instance') {
${$args->{node}} = ${$args->{graph}}->instance_noderef($args->{value});
${$args->{graph}}->add_instance(${$args->{node}});
}
elsif ($args->{stanzaclass} eq 'annotation') {
# TODO
}
else {
warn "Unknown stanza class " . $args->{stanzaclass};
}
if (!${$args->{node}}) {
die "cannot parse: $_";
}
${$args->{node}}->namespace($self->default_namespace) if (!${$args->{node}}->namespace && $self->default_namespace);
# print STDERR "node now: " . Dumper(${$args->{node}}) . "\n";
},
"name" => sub {
my ($self, $args) = @_;
$args->{node}->label($args->{value});
},
"namespace" => sub {
my ($self, $args) = @_;
$args->{node}->namespace($args->{value});
},
"alt_id" => sub {
my ($self, $args) = @_;
$args->{node}->add_alt_ids($args->{value});
},
"def" => sub {
my ($self, $args) = @_;
my $vals = [];
_parse_vals($args->{value},$vals);
( run in 1.103 second using v1.01-cache-2.11-cpan-2398b32b56e )