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 )