The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Find the intersection of two ontologies</title>
</head>
<body>

<h2>Intersection of ontologies</h2>
	
<ol>
	<li><a href="#1">Find out the intersection of two given ontologies <i>o1</i> and <i>o3</i>.</a></li>

</ol>
	
	<ol>
	<li> <b><a name="1">Find out the intersection of two given ontologies <i>o1</i> and <i>o3</i>:</a></b>
		<pre>
				use OBO::Core::Ontology;
				use OBO::Util::Ontolome;
				use OBO::Core::Term;
				use OBO::Core::Relationship;
				use OBO::Core::RelationshipType;
				use OBO::Parser::OBOParser;
				
				my $ome  = OBO::Util::Ontolome->new();			
				
				my $o1  = OBO::Core::Ontology->new();
				
				# Create some terms
				my $d5   = OBO::Core::Term->new();
				my $d2   = OBO::Core::Term->new();
				my $d6   = OBO::Core::Term->new();
				my $d1   = OBO::Core::Term->new();
				my $d7   = OBO::Core::Term->new();
				my $d8   = OBO::Core::Term->new();
				my $d10  = OBO::Core::Term->new();
				my $d11  = OBO::Core::Term->new();
				my $d20  = OBO::Core::Term->new();
				my $d21  = OBO::Core::Term->new();
				my $d32  = OBO::Core::Term->new();
				my $d23  = OBO::Core::Term->new();
				my $d24  = OBO::Core::Term->new();
				my $d25  = OBO::Core::Term->new();
				my $d26  = OBO::Core::Term->new();
				my $d27  = OBO::Core::Term->new();
				my $d28  = OBO::Core::Term->new();
				my $d29  = OBO::Core::Term->new();
		
				# Set the IDs of the just created terms
				$d5->id("5");
				$d2->id("2");
				$d6->id("6");
				$d1->id("1");
				$d7->id("7");
				$d8->id("8");
				$d10->id("10");
				$d11->id("11");
				$d20->id("20");
				$d21->id("21");
				$d32->id("32");
				$d23->id("23");
				$d24->id("24");
				$d25->id("25");
				$d26->id("26");
				$d27->id("27");
				$d28->id("28");
				$d29->id("29");
		
				# Set the names of the just created terms
				$d5->name("5");
				$d2->name("2");
				$d6->name("6");
				$d1->name("1");
				$d7->name("7");
				$d8->name("8");
				$d10->name("10");
				$d11->name("11");
				$d20->name("20");
				$d21->name("21");
				$d32->name("32");
				$d23->name("23");
				$d24->name("24");
				$d25->name("25");
				$d26->name("26");
				$d27->name("27");
				$d28->name("28");
				$d29->name("29");
		
				# Create a relationship
				my $r = 'is_a';
				$o1->add_relationship_type_as_string($r, $r);
				
				# Connect the terms using the 'create_rel' function
				$o1->create_rel($d5,$r,$d2);
				$o1->create_rel($d2,$r,$d6);
				$o1->create_rel($d2,$r,$d1);
				$o1->create_rel($d2,$r,$d7);
				$o1->create_rel($d7,$r,$d8);
				$o1->create_rel($d7,$r,$d11);
				$o1->create_rel($d1,$r,$d10);
				$o1->create_rel($d1,$r,$d8);
				$o1->create_rel($d5,$r,$d23);
				$o1->create_rel($d11,$r,$d28);
				$o1->create_rel($d28,$r,$d29);
				$o1->create_rel($d8,$r,$d27);
				$o1->create_rel($d27,$r,$d26);
				$o1->create_rel($d10,$r,$d24);
				$o1->create_rel($d24,$r,$d25);
				$o1->create_rel($d25,$r,$d26);
				$o1->create_rel($d6,$r,$d20);
				$o1->create_rel($d20,$r,$d21);
				$o1->create_rel($d20,$r,$d32);
				$o1->create_rel($d21,$r,$d25);
				
				# Create another ontology
				my $o3  = OBO::Core::Ontology->new();
				
				# Create some new terms			
				my $de5   = OBO::Core::Term->new();
				my $de2   = OBO::Core::Term->new();
				my $de6   = OBO::Core::Term->new();
				my $de1   = OBO::Core::Term->new();
				my $de7   = OBO::Core::Term->new();
				my $de8   = OBO::Core::Term->new();
				my $de10  = OBO::Core::Term->new();
				my $de11  = OBO::Core::Term->new();			
				my $de20  = OBO::Core::Term->new();
				my $de21  = OBO::Core::Term->new();
				my $de32  = OBO::Core::Term->new();
				my $de23  = OBO::Core::Term->new();
				my $de24  = OBO::Core::Term->new();
				my $de25  = OBO::Core::Term->new();
				my $de26  = OBO::Core::Term->new();
				my $de27  = OBO::Core::Term->new();
				my $de28  = OBO::Core::Term->new();
				my $de29  = OBO::Core::Term->new();
	
				# Set the IDs of the just created terms			
				$de5->id("5");
				$de2->id("2");
				$de6->id("6");
				$de1->id("1");
				$de7->id("7");
				$de8->id("8");
				$de10->id("10");
				$de11->id("11");
				$de20->id("20");
				$de21->id("21");
				$de32->id("32");
				$de23->id("23");
				$de24->id("24");
				$de25->id("25");
				$de26->id("26");
				$de27->id("27");
				$de28->id("28");
				$de29->id("29");
	
				# Set the names of the just created terms			
				$de5->name("5");
				$de2->name("2");
				$de6->name("6");
				$de1->name("1");
				$de7->name("7");
				$de8->name("8");
				$de10->name("10");
				$de11->name("11");
				$de20->name("20");
				$de21->name("21");
				$de32->name("32");
				$de23->name("23");
				$de24->name("24");
				$de25->name("25");
				$de26->name("26");
				$de27->name("27");
				$de28->name("28");
				$de29->name("29");
	
				# Add another relationships
				my $s = 'part_of';			
				$o3->add_relationship_type_as_string($r, $r);
				$o3->add_relationship_type_as_string($s, $s);
						
				# Connext the terms	
				$o3->create_rel($de5,$r,$de8);
				$o3->create_rel($de8,$r,$de11);
				$o3->create_rel($de11,$r,$de28);
				$o3->create_rel($de28,$r,$de26);
				$o3->create_rel($de28,$s,$de29); # part_of !!!
				$o3->create_rel($de5,$r,$de24);
				$o3->create_rel($de24,$r,$de23);
	
				# Find the intersection of o1 and o3
				my $ontito = $ome->intersection($o1, $o3);
	
				my $n = $ontito->get_number_of_terms();         # $n should be 8			
				my $w = $ontito->get_number_of_relationships(); # $w should be 6
				
				$ontito->has_relationship_id("5_is_a_8");       # TRUE
				$ontito->has_relationship_id("8_is_a_26");      # TRUE
				$ontito->has_relationship_id("5_is_a_26");      # FALSE
				$ontito->has_relationship_id("5_is_a_11");      # TRUE
				$ontito->has_relationship_id("11_is_a_28");     # TRUE
				$ontito->has_relationship_id("5_is_a_28");      # FALSE
				$ontito->has_relationship_id("28_part_of_29");  # FALSE
				$ontito->has_relationship_id("5_is_a_29");      # FALSE
				$ontito->has_relationship_id("11_is_a_29");     # FALSE
				$ontito->has_relationship_id("5_is_a_24");      # TRUE
				$ontito->has_relationship_id("5_is_a_23");      # TRUE
			</pre>
	</li>
	</ol>

Copyright (c) 2006-2015 by Erick Antezana. All rights reserved.

</body>
</html>