Difference between revisions of "NeXML and RDF API for BioRuby"

From Phyloinformatics
Jump to: navigation, search
(Parsing)
Line 12: Line 12:
 
==Otus and Otu==
 
==Otus and Otu==
 
Taxa blocks are stored internally as a Ruby hash for faster 'id' based lookup.
 
Taxa blocks are stored internally as a Ruby hash for faster 'id' based lookup.
 
+
<ruby>
 
   nexml.otus_set #a hash of otus objects indexed with 'id'
 
   nexml.otus_set #a hash of otus objects indexed with 'id'
 
   nexml.otus #an array of otus objects
 
   nexml.otus #an array of otus objects
 
+
 
 
   #iterate over each otus object
 
   #iterate over each otus object
 
   nexml.each_otus do |taxa|
 
   nexml.each_otus do |taxa|
Line 25: Line 25:
 
   taxa1 = nexml.get_otus_by_id "taxa1"
 
   taxa1 = nexml.get_otus_by_id "taxa1"
 
   taxa1.class #Bio::NeXML::Otus
 
   taxa1.class #Bio::NeXML::Otus
 
+
</ruby>
 
Similarly taxons are stored internally as a Ruby hash indexed with 'id'. To work with <code>otu</code> :
 
Similarly taxons are stored internally as a Ruby hash indexed with 'id'. To work with <code>otu</code> :
 
+
<ruby>
 
   taxa1.otu_set #a hash of otu objects indexed with 'id
 
   taxa1.otu_set #a hash of otu objects indexed with 'id
 
   taxa1.otus #an array of otu objects
 
   taxa1.otus #an array of otu objects
Line 39: Line 39:
 
     puts taxon.label
 
     puts taxon.label
 
   end
 
   end
 
+
</ruby>
 
Each <code>otus</code> object is an enumerable:
 
Each <code>otus</code> object is an enumerable:
 +
<ruby>
 
   taxa1.map &:id
 
   taxa1.map &:id
 
+
</ruby>
 
== Trees and Tree ==
 
== Trees and Tree ==
 
Get a <code>trees</code> object:
 
Get a <code>trees</code> object:
 
+
<ruby>
 
   nexml.trees #return an array of trees objects.
 
   nexml.trees #return an array of trees objects.
 
   trees1 = nexml.trees[0]
 
   trees1 = nexml.trees[0]
 
   trees1.class #Bio::NeXML::Trees
 
   trees1.class #Bio::NeXML::Trees
+
 
 
   #get the taxa to which the trees is linked to
 
   #get the taxa to which the trees is linked to
 
   trees1.otus
 
   trees1.otus
 
+
</ruby>
 
Currently a <code>tree</code> can have only one root node. To work with an individual <code>tree</code> :
 
Currently a <code>tree</code> can have only one root node. To work with an individual <code>tree</code> :
 
+
<ruby>
 
   #get a tree object with its 'id'
 
   #get a tree object with its 'id'
 
   tree1 = trees1[ 'tree1' ]
 
   tree1 = trees1[ 'tree1' ]
 
   tree1.class #Bio::NeXML::IntTree or Bio::NeXML::FloatTree
 
   tree1.class #Bio::NeXML::IntTree or Bio::NeXML::FloatTree
 
+
 
 
   #or iterate over each tree object
 
   #or iterate over each tree object
 
   trees1.each do |tree|
 
   trees1.each do |tree|
Line 64: Line 65:
 
     puts tree.label
 
     puts tree.label
 
   end
 
   end
 
+
</ruby>
 
All the available methods from <code>[http://bioruby.org/rdoc/classes/Bio/Tree.html#M001688 Bio::Tree]</code> class can be called on a <code>tree</code> object.
 
All the available methods from <code>[http://bioruby.org/rdoc/classes/Bio/Tree.html#M001688 Bio::Tree]</code> class can be called on a <code>tree</code> object.
 
+
<ruby>
 
   node1 = tree.get_node_by_name "n3" #note name is same as id
 
   node1 = tree.get_node_by_name "n3" #note name is same as id
 
   tree1.parents node1
 
   tree1.parents node1
 
+
</ruby>
 
A <code>trees</code> object is an enumerable:
 
A <code>trees</code> object is an enumerable:
 +
<ruby>
 
   trees1.map &:id
 
   trees1.map &:id
 +
</ruby>
  
 
[[Category:NeXML and RDF API for BioRuby]]
 
[[Category:NeXML and RDF API for BioRuby]]

Revision as of 12:19, 9 June 2010

Preface

The following document discusses the implementation of an NeXML parser and serializer and an RDF API for BioRuby. Note that this document is not final yet.

Parsing

Currently all the parsing is done at the start( i.e. no streaming ). This is likely to change later. Parse an NeXML file:

 doc = Bio::NeXML::Parser.new( "trees.xml" )
 nexml = doc.parse
 nexml.class #Bio::NeXML::Nexml

Otus and Otu

Taxa blocks are stored internally as a Ruby hash for faster 'id' based lookup.

 nexml.otus_set #a hash of otus objects indexed with 'id'
 nexml.otus #an array of otus objects
 #iterate over each otus object
 nexml.each_otus do |taxa|
   puts taxa.id
   puts taxa.label
 end
 #find an otus by id
 taxa1 = nexml.get_otus_by_id "taxa1"
 taxa1.class #Bio::NeXML::Otus

Similarly taxons are stored internally as a Ruby hash indexed with 'id'. To work with otu :

 taxa1.otu_set #a hash of otu objects indexed with 'id
 taxa1.otus #an array of otu objects
 #get an individual otu object given its id
 taxon1 = taxa1[ 'taxon1' ]
 #or iterate over each otu object
 taxa1.each do |taxon|
   puts taxon.id
   puts taxon.label
 end

Each otus object is an enumerable:

 taxa1.map &:id

Trees and Tree

Get a trees object:

 nexml.trees #return an array of trees objects.
 trees1 = nexml.trees[0]
 trees1.class #Bio::NeXML::Trees
 #get the taxa to which the trees is linked to
 trees1.otus

Currently a tree can have only one root node. To work with an individual tree :

 #get a tree object with its 'id'
 tree1 = trees1[ 'tree1' ]
 tree1.class #Bio::NeXML::IntTree or Bio::NeXML::FloatTree
 #or iterate over each tree object
 trees1.each do |tree|
   puts tree.id
   puts tree.label
 end

All the available methods from Bio::Tree class can be called on a tree object.

 node1 = tree.get_node_by_name "n3" #note name is same as id
 tree1.parents node1

A trees object is an enumerable:

 trees1.map &:id