go-perl
view release on metacpan or search on metacpan
GO/IO/OBDXML.pm view on Meta::CPAN
## Create an annotation instance node.
$self->__draw_node(-id=>$ann_inst_id,
-metadata=>'instance');
## Link annotation node to gp/term link.
$self->__draw_link(-subject=>$ann_inst_id,
-object=>$gp->acc . '_obd:has_role_' . $term->acc,
-predicate=>'obd:posits',
-id=>$ann_inst_id . '_obd:posits_assoc');
## Now we'll deal with all the evidence...
if( $show_evidence eq 'yes') {
my $ev_list = $assoc->evidence_list;
foreach my $ev (@$ev_list) {
## Make an ID for the node.
#my $ev_node_id = $ev->xref->xref_key;
my $ev_node_id = 'ENID:' . $ev->id;
## Draw term node. Way of drawing depends on $show_ xrefs.
if( $show_xrefs eq 'yes'){
$self->__draw_node(-id=>$ev_node_id,
-metadata=>'instance',
-label=>$ev->code,
-xrefs=>$ev->xref_list);
}else{
## Create evidence instance node w/o xrefs.
$self->__draw_node(-id=>$ev_node_id,
-metadata=>'instance',
-label=>$ev->code);
}
## Create link from annotation instance to evidence instance.
$self->__draw_link(-subject=>$ann_inst_id,
-object=>$ev_node_id,
-predicate=>'obd:has_evidence');
}
}
}
}
}
##
sub __draw_node {
my $self = shift;
my ($id, $metadata, $label, $source, $description, $aliases, $xrefs) =
rearrange([qw(id metadata label source description aliases xrefs)], @_);
# Open node.
if( $metadata ){
$self->{writer}->startTag('node', 'id'=>$id, 'metadata'=>$metadata);
}else{
$self->{writer}->startTag('node', 'id'=>$id);
}
# Populate the node with: label, source, and description.
if( $label ){
$self->{writer}->startTag('label');
$self->{writer}->cdata($label);
$self->{writer}->endTag('label');
}
if( $source ){
$self->{writer}->emptyTag('source', 'about'=>$source);
}
if( $description ){
$self->__draw_sit(-tag=>'description', -label=>$description);
}
# Add any aliases.
if( $aliases ){
foreach my $alias ( @$aliases ) {
$self->__draw_sit(-tag=>'alias', -label=>$alias, -scope=>'exact');
}
}
# Add any xrefs.
if( $xrefs ){
foreach my $xref ( @$xrefs ) {
$self->__draw_xref(-about=>$xref->xref_key, -context=>$xref->dbname);
}
}
# Close node.
$self->{writer}->endTag('node');
}
##
sub __draw_link {
my $self = shift;
my ($subject, $object, $predicate, $id) =
rearrange([qw(subject object predicate id)], @_);
if( $id ){
$self->{writer}->startTag('link', 'id'=>$id);
}else{
$self->{writer}->startTag('link');
}
$self->{writer}->emptyTag('predicate', 'about'=>$predicate);
$self->{writer}->emptyTag('subject', 'about'=>$subject);
$self->{writer}->emptyTag('object', 'about'=>$object);
$self->{writer}->endTag('link');
}
## BUG: xrefs not implemented here.
sub __draw_sit {
my $self = shift;
my ($tag, $label, $id, $scope, $type) =
rearrange([qw(tag label id scope type)], @_);
my %attr_hash;
if( $id ){ $attr_hash{'id'} = $id; }
if( $scope ){ $attr_hash{'scope'} = $scope; }
if( $type ){ $attr_hash{'type'} = $type; }
$self->{writer}->startTag($tag,
%attr_hash);
$self->{writer}->startTag('label');
$self->{writer}->cdata($label);
$self->{writer}->endTag('label');
$self->{writer}->endTag($tag);
}
##
sub __draw_xref {
my $self = shift;
my ($about, $context) =
rearrange([qw(about context)], @_);
if( $context ){
$self->{writer}->startTag('xref', 'context'=>$context);
}else{
$self->{writer}->startTag('xref');
}
$self->{writer}->emptyTag('linkref', 'about'=>$about);
$self->{writer}->endTag('xref');
}
1;
( run in 2.365 seconds using v1.01-cache-2.11-cpan-995e09ba956 )