[Bio] / FigKernelPackages / KGML.pm Repository:
ViewVC logotype

View of /FigKernelPackages/KGML.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (download) (as text) (annotate)
Tue May 15 21:12:18 2007 UTC (12 years, 6 months ago) by olson
Branch: MAIN
CVS Tags: mgrast_dev_08112011, rast_rel_2009_05_18, mgrast_dev_08022011, rast_rel_2014_0912, rast_rel_2008_06_18, myrast_rel40, rast_rel_2008_06_16, mgrast_dev_05262011, rast_rel_2008_12_18, mgrast_dev_04082011, rast_rel_2008_07_21, rast_rel_2010_0928, rast_2008_0924, mgrast_version_3_2, mgrast_dev_12152011, rast_rel_2008_04_23, mgrast_dev_06072011, rast_rel_2008_09_30, rast_rel_2009_0925, rast_rel_2010_0526, rast_rel_2014_0729, mgrast_dev_02212011, rast_rel_2010_1206, mgrast_release_3_0, mgrast_dev_03252011, rast_rel_2010_0118, mgrast_rel_2008_0924, mgrast_rel_2008_1110_v2, rast_rel_2009_02_05, rast_rel_2011_0119, mgrast_rel_2008_0625, mgrast_release_3_0_4, mgrast_release_3_0_2, mgrast_release_3_0_3, mgrast_release_3_0_1, mgrast_dev_03312011, mgrast_release_3_1_2, mgrast_release_3_1_1, mgrast_release_3_1_0, mgrast_dev_04132011, rast_rel_2008_10_09, mgrast_dev_04012011, rast_release_2008_09_29, mgrast_rel_2008_0806, mgrast_rel_2008_0923, mgrast_rel_2008_0919, rast_rel_2009_07_09, rast_rel_2010_0827, mgrast_rel_2008_1110, myrast_33, rast_rel_2011_0928, rast_rel_2008_09_29, mgrast_rel_2008_0917, rast_rel_2008_10_29, mgrast_dev_04052011, mgrast_dev_02222011, rast_rel_2009_03_26, mgrast_dev_10262011, rast_rel_2008_11_24, rast_rel_2008_08_07, HEAD
Changes since 1.3: +13 -0 lines
Hope college modifications.

#
# Copyright (c) 2003-2006 University of Chicago and Fellowship
# for Interpretations of Genomes. All Rights Reserved.
#
# This file is part of the SEED Toolkit.
# 
# The SEED Toolkit is free software. You can redistribute
# it and/or modify it under the terms of the SEED Toolkit
# Public License. 
#
# You should have received a copy of the SEED Toolkit Public License
# along with this program; if not write to the University of Chicago
# at info@ci.uchicago.edu or the Fellowship for Interpretation of
# Genomes at veronika@thefig.info or download a copy from
# http://www.theseed.org/LICENSE.TXT.
#

###KGML Event Handler####
#
# This is an Event Handler for the PerlSAX XML Parser to parse KEGG KGML files.
#
# Author: Kevin Formsma , kevin.formsma@hope.edu
# Hope College, Summer 05 REU Research
#########################

package KGML;

use strict;

use XML::Parser::PerlSAX;

##Module Variables

my %recent_data;

#Data Storage for the parsing
	my @element_stack;   # remembers element names
	my $in_intset;	# flag: are we in the internal subset?
	my %pathway_hash; #copy of the pathway element attributes
	my %entry_hash; #array of all the enzyme elements and pathway elements, each element is hash of enzyme properties.

	my %current_entry;
	my %current_relation;
	my %current_reaction;
		
	my %relation_hash;
	my %reaction_hash;
	my @relation_list;
	
	my $count = 0;
	
	
	
#KGML Object Constructor
sub new {

%recent_data = ();
@element_stack = ();
$in_intset = ();
%pathway_hash = ();
%entry_hash = ();
%current_entry = ();
%current_relation = ();
%current_reaction = ();
%relation_hash = ();
%reaction_hash = ();
@relation_list = ();
$count = 0;

my $type = shift;
    return bless {}, $type;
}

#Handle events for readfile for the SAX parser
sub start_element{
	my( $self, $properties ) = @_;
	
	# close internal subset if still open
    output( "]>\n" ) if( $in_intset );
    $in_intset = 0;
    
    #get the attributes
    my %attributes = %{$properties->{'Attributes'}};
    
    #print "\n $properties->{'Name'} is open";
  
    # remember the name by pushing onto the stack
    push( @element_stack, $properties->{'Name'} );
    #add to main element, a pathway to the hash
    if($properties->{'Name'} eq "pathway")
    {
    	%pathway_hash = %attributes;
    }
    #If we have a graphics element, add it to the current entry element.
    elsif($properties->{'Name'} eq "graphics")
    {
    	$current_entry{'graphics'} = \%attributes;    	
    }
    #If we have a componet element, add it to the current entry element.
    elsif($properties->{'Name'} eq "component")
    {
    	$current_entry{'component'} = \%attributes;
    }
    #Set as current entry element.
    elsif($properties->{'Name'} eq "entry")
    {
    	%current_entry = %attributes;
    }
    elsif($properties->{'Name'} eq "relation")
    {
    	%current_relation = %attributes;
    }
    elsif($properties->{'Name'} eq "subtype")
    {
    	$current_relation{'subtype'} = \%attributes;
    }
    elsif($properties->{'Name'} eq "reaction")
    {
    	%current_reaction = %attributes;
    	$current_reaction{'substrate'} = ();
    	$current_reaction{'product'} = ();
    }
    elsif($properties->{'Name'} eq "substrate")
    {
    	my $temp = $current_reaction{'substrate'};
    	push(@$temp, $attributes{'name'});
    	$current_reaction{'substrate'} = $temp;
    }
    elsif($properties->{'Name'} eq "product")
    {
    	my $temp = $current_reaction{'product'};
    	push(@$temp, $attributes{'name'});
    	$current_reaction{'product'} = $temp;
    }
    elsif($properties->{'Name'} eq "alt")
    {
    	$current_reaction{'alt'} = \%attributes;
    }    
}

sub end_element{
	my( $self, $properties) = @_;
	
	# close internal subset if still open
    output( "]>\n" ) if( $in_intset );
    $in_intset = 0;
    
    #print "\n $properties->{'Name'} is closing now";
       
    #get the attributes
    
    if($properties->{'Name'} eq "entry")
    {
    	my %attributes = %current_entry;
    	%current_entry = ();    			
		$entry_hash{$attributes{'id'}} = \%attributes unless defined $attributes{'map'};    	
    }
    elsif($properties->{'Name'} eq "relation")
    {
    	my %attributes = %current_relation;    	   	
    	%current_relation = ();  
    	#print "\nStoring: $attributes{'entry1'} to $attributes{'entry2'}";
    	push(@relation_list, \%attributes);
    	
    	
		#my $relation_list =	$relation_hash{$attributes{'entry1'}};
		#push(@$relation_list,\%attributes);
		#$relation_hash{$attributes{'entry1'}} = $relation_list;
		
		#print "\n\nTEST.";
		#print "\nThis is whats related $attributes{'entry1'} to ...";
		#my $list = $relation_hash{$attributes{'entry1'}};
		#foreach my $element (@$list){
		#	print "\n".$element->{'entry2'};
		#}
    }
    elsif($properties->{'Name'} eq "reaction")
    {
    	my %attributes = %current_reaction;    	 	
    	#clear Current graphic and componet variables    	
    	%current_reaction = ();    	
		
		$reaction_hash{$attributes{'name'}} = \%attributes;
    }
    
    pop( @element_stack );
}

sub end_document{
	#my %recent_data;	
	#setup all data into one hashmap
	%recent_data = ('entry' => \%entry_hash,
				    'pathway' => \%pathway_hash,
				    'relation' => \@relation_list,
				    'reaction' => \%reaction_hash
				   );
}

sub return_data{
	return %recent_data;
	
}

1;

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3