GOBO

 view release on metacpan or  search on metacpan

GOBO/Parsers/OBOParserDispatchHash.pm  view on Meta::CPAN

			$ud = new GOBO::ClassExpression::Union;
			$args->{node}->union_definition($ud);
		}
		$ud->add_argument($u);
	},
	"transitive_over" => sub {
		my ($self, $args) = @_;
		my $rn = $args->{graph}->relation_noderef($args->{value});
		$args->{node}->transitive_over($rn);
	},
	"holds_over_chain" => sub {
		my ($self, $args) = @_;
#		my @rels  = map { $self->getnode($_,'r') } split(' ',$args->{value});
		my @rels  = map { $args->{graph}->relation_noderef($_) } split(' ',$args->{value});
		$args->{node}->add_holds_over_chain(\@rels);
	},
	"equivalent_to_chain" => sub {
		my ($self, $args) = @_;
#		my @rels  = map { $self->getnode($_,'r') } split(' ',$args->{value});
		my @rels  = map { $args->{graph}->relation_noderef($_) } split(' ',$args->{value});
		$args->{node}->add_equivalent_to_chain(\@rels);
	},
	"is_" => sub {
		my ($self, $args) = @_;
		my $att = $args->{tag};
		if ($args->{value} eq 'true')
		{	$args->{node}->$att( 1 );
		}
		# TODO: check!
	},
	# following for annotation stanzas only
	"subject" => sub {
		my ($self, $args) = @_;
#		$args->{node}->node($self->getnode($args->{value}));
		$args->{node}->node($args->{graph}->noderef($args->{value}));
	},
	"relation" => sub {
		my ($self, $args) = @_;
#		$args->{node}->relation($self->getnode($args->{value},'r'));
		$args->{node}->relation($args->{graph}->relation_noderef($args->{value}));
	},
	"object" => sub {
		my ($self, $args) = @_;
#		$args->{node}->target($self->getnode($args->{value}));
		$args->{node}->target($args->{graph}->noderef($args->{value}));
	},
	"description" => sub {
		my ($self, $args) = @_;
		$args->{node}->description($args->{value});
	},
	"source" => sub {
		my ($self, $args) = @_;
#		$args->{node}->provenance($self->getnode($args->{value}));
		$args->{node}->provenance($args->{graph}->noderef($args->{value}));
	},
	"assigned_by" => sub {
		my ($self, $args) = @_;
#		$args->{node}->source($self->getnode($args->{value}));
		$args->{node}->source($args->{graph}->noderef($args->{value}));
	},
	"formula" => sub {
		my ($self, $args) = @_;
		my $vals = [];
		_parse_vals($args->{value},$vals);
		my $f = new GOBO::Formula(text=>$vals->[0],
								  language=>$vals->[1]);
		$f->associated_with($args->{node});
		$args->{graph}->add_formula($f);
	},

};


my $header_subs = {
	'subsetdef' => sub {
		my ($self, $args) = @_;
		# subsetdef: gosubset_prok "Prokaryotic GO subset"
		if ($args->{value} =~ /^(\S+)\s+\"(.*)\"/)
		{	my ($id,$label) = ($1,$2);
			my $ss = new GOBO::Subset(id=>$id, label=>$label);
			$args->{graph}->subset_index->{$id} = $ss;
		}
		else {
			warn "Uh-oh... subset value " . $args->{value};
		}
	},
	'date' => sub {
		my ($self, $args) = @_;
		$args->{graph}->date($args->{value});
	},
	'remark' => sub {
		my ($self, $args) = @_;
		$args->{graph}->comment($args->{value});
	},
	'data-version' => sub {
		my ($self, $args) = @_;
		$args->{graph}->version($args->{value});
	},
	'default' => sub {
		my ($self, $args) = @_;
		$args->{graph}->set_property_value($args->{tag},$args->{value});
	},
	'default-namespace' => sub {
		my ($self, $args) = @_;
		$self->default_namespace($args->{value});
	},
	'format-version' => sub {
		my ($self, $args) = @_;
		$self->format_version($args->{value});
	},
};


override 'parse_header' => sub {
#sub parse_header {
	my $self = shift;
	my $g = $self->graph;
	my $header_check = $self->get_header_check_sub;

	$/ = "\n";
	while($_ = $self->next_line) {
		next unless /\S/;

		if (/^\[/) {
			$self->unshift_line($_);
			last;
		}



( run in 0.456 second using v1.01-cache-2.11-cpan-99c4e6809bf )