This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Is There A Web Api To Find The Go Term From A Given Locus Name?

For example, if i have this locus name, LOC_Os01g20940, I want the associated GO data:

GO accession Type Name Code Reference With

GO:0016787 molecular_function hydrolase activity IEA Osa1r6:autoGO TAIR6:AT5G23720.1

This website( http://rice.plantbiology.msu.edu/analyses_search_locus.shtml ) does what I want but I would like the results in a structured format like JSON or XML and not an HTML page.

Is there an alternative service like this?

gene identifiers mapping

3 answers

You can get this information from the Gramene BioMart service.

  1. Start at Gramene BioMart
  2. Choose database = Ensembl Genes; dataset = Oryza sativa genes (MSU6)
  3. Click "Filters" (left menu); expand "Gene"
  4. Check "ID list limit"; use selection "Ensembl Gene ID(s)" and either paste your query into the box (e.g. LOC_Os01g20940) or upload a file of query IDs, one per line.
  5. Click "Attributes" (left menu); expand "External"
  6. Check the GO term that you require e.g. GO Molecular Function -> GO Term Accession (mf)
  7. Click "Results" (menu, top-left)

You should see a table mapping the gene and a single transcript to 5 GO accessions, including GO:0016787.

To get the results in something other than HTML you can: (1) download as tab- or comma-delimited text or (2) click the "URL", "XML" or "Perl" buttons (top of page), which will indicate how to interact with the API.

Using the Ensembl API:

#!/usr/bin/perl

use strict;
use warnings;

use Bio::EnsEMBL::DBSQL::DBAdaptor;
use Bio::EnsEMBL::DBSQL::OntologyDBAdaptor;

my $dbCore = Bio::EnsEMBL::DBSQL::DBAdaptor->new
(-host => 'mysql.ebi.ac.uk',
 -port => '4157',
 -dbname => 'oryza_sativa_core_8_61_6',
 -species => 'rice',
 -group => 'core',
 -user => 'anonymous'
);

my $dbOntology = Bio::EnsEMBL::DBSQL::OntologyDBAdaptor->new
(-host => 'mysql.ebi.ac.uk',
 -port => '4157',
 -dbname => 'ensemblgenomes_ontology_61',
 -species => 'multi',
 -group => 'ontology',
 -user => 'anonymous'
);

my $gene_adaptor = $dbCore->get_GeneAdaptor;
my $ontologyterm_adaptor = $dbOntology->get_OntologyTermAdaptor;

my @genes = @{$gene_adaptor->fetch_all_by_external_name('LOC_Os01g20940')};

while (my $gene = shift @genes){
  my @dblinks = @{$gene->get_all_DBLinks('GO')};
  while (my $dblink = shift @dblinks){
    my $ontologyterm = $ontologyterm_adaptor->fetch_by_accession($dblink->display_id);
    print
      $ontologyterm->accession, "\t",
      join(' ', @{$dblink->get_all_linkage_types}), "\t",
      $ontologyterm->namespace, "\t",
      $ontologyterm->name, "\n";
  }
}

This gives:

GO:0003677      IEA     molecular_function      DNA binding
GO:0004725      IEA     molecular_function      protein tyrosine phosphatase activity
GO:0006470      IEA     biological_process      protein dephosphorylation
GO:0008138      IEA     molecular_function      protein tyrosine/serine/threonine phosphatase activity
GO:0016311      IEA     biological_process      dephosphorylation
GO:0016787      IEA     molecular_function      hydrolase activity
GO:0016791      IEA     molecular_function      phosphatase activity

you can tried ensembl plant database, they did have good API to query their data.

Log in to answer this question.