En bioinformatique il n'est pas rare que l'on ait besoin d’accéder à des informations disponibles sur des bases de données internationales, nous verrons ici le cas de la banque Gene du NCBI. Avant de s'intéresser à la récupération d'une fiche d'un gène en passant par les Eutils, un peu de théorie et d'explications sur une fiche type s'impose.
Pourquoi choisir d'utiliser les Eutils ?
Bien qu'il soit possible de jouer avec la construction d'une URL afin de récupérer la fiche d'un gène au format texte ou XML directement sur le serveur officiel, le NCBI préconise plutôt l'utilisation du serveur Eutils, qui est un outil dédié à l'exécution massive externe de ce genre de requête. Cet outil paraît d'autant plus intéressant qu'il vous permet d'effectuer de nombreuses requêtes sans avoir à trop vous inquiéter de savoir si l'IP de votre laboratoire risque d'être bloquée ou non. La seule limitation étant de ne pas effectuer plus de trois requêtes par seconde en passant par les Eutils, il est nécessaire de prévoir une temporisation des requêtes si besoin.
Récupérer une fiche par les Eutils : les étapes
Pour récupérer la fiche du gène que vous souhaitez consulter, vous devez passer par deux étapes distinctes. Dans notre exemple, la première étape consiste à effectuer une recherche sur la banque Gene afin de trouver le gène dont l'identifiant est le numéro 5371. Pour cela nous devons construire l'URL suivante :
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=gene&term=5371[uid]&usehistory=y
Voici ce que les Eutils vont comprendre :
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi
indique que le moteur de recherche des Eutils est sollicité pour récupérer des informations dans la banque de données ;db=gene
précise que la base de données "db" à consulter est Gene "gene" ;term=5371[uid]
précise que le terme "term" recherché est un numéro d'identifiant unique "[uid]" auquel on a spécifié le numéro en question ;usehistory=y
est à utiliser pour spécifier que vous souhaitez utiliser l'historique mais pas seulement (voir plus loin).
Pour la prochaine étape vous aurez besoin de récupérer, dans le fichier XML qui vient de s'afficher, les informations suivantes :
- le WebEnv, qui n'apparait pas si vous avez choisi de ne pas utiliser l'historique ;
- le numéro QueryKey, qui lui est exigé pour la seconde étape
La seconde étape va vous permettre de récupérer la fiche de votre gène d'intérêt avec cette nouvelle requête :
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=gene&WebEnv=NCID_1_239264264_130.14.22.101_9001_1330635030_79372563&query_key=1&rettype=xml&retmode=text
Et voici l'explication sur ce que le moteur des Eutils effectuera :
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi
indique que les Eutils doivent afficher des informations à l'utilisateur ;db=gene
précise que la base de données "db" à consulter est Gene "gene" ;WebEnv=NCID_1_239264264_130.14.22.101_9001_1330635030_79372563
indique l'identifiant de WebEnv qui correspond à la requête de recherche précédemment effectuée ;query_key=1
indique le numéro QueryKey "query_key" pour la requête ;rettype=xml
informe que l'affichage devra être de type XML ;retmode=text
précise que l'affichage doit être retourné en mode texte.
Une fois votre requête envoyée au serveur, vous aurez sous vos yeux la fiche au format XML du gène PML dont l'identifiant est 5371.
Explications sur la fiche du gène récupéré
Tout d'abord, merci de tenir compte du fait qu'il est parfaitement possible de trouver la fiche d'un gène en utilisant son seul nom, cependant il peut y avoir une forte redondance et un retour de plusieurs entrées pour un même nom. Dans mon exemple je me focalise sur un identifiant unique afin de n'avoir qu'une seule fiche à récupérer.
La fiche d'un gène du NCBI renferme de nombreuses informations sur le gène, en voici une liste non-exhaustive :
- de nombreuses références croisées avec d'autres banques telles que Ensembl, HPRD, Vega, OMIM, PubMed
- des informations sur la position du gène sur son chromosome
- les protéines qui interagissent avec le gène ainsi que les produits du gène
- la section Gene Ontology permet d'obtenir des renseignements sur la fonction, le processus et le composant cellulaire pour le gène
- un accès direct aux différents profils d'expression du gène en fonction du tissu et/ou de la maladie...
Récupérer la même fiche à l'aide d'un script Perl
Parce qu'il est toujours plus simple d'automatiser ce genre de processus, ce script Perl peut vous être très utile :
#!/usr/bin/perl -w
use strict;
use warnings;
# LWP est une bibliothèque permettant de lire les données en HTTP
use LWP::Simple;
use LWP::UserAgent;
# vérifie si l'utilisateur a précisé le GeneID
if ( !$ARGV[0] ){
print "Argument GeneID not found!\n$!" and die;
}
my $geneid = $ARGV[0];
# vérifie si le répertoire tmp/ existe déjà
if ( ! -d "tmp/" ){
exec(mkdir "tmp/");
}
# nom du fichier XML qui sera créé avec le GeneID comme nom
my $xml_handle = "tmp/".$geneid.".xml";
my $gene = $geneid."[uid]"; # on veut l'identifiant unique du gène
my $db = "gene"; # on cherche dans la banque de données Gene
# construction de la requête de recherche
my $base = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/';
my $url = $base . "esearch.fcgi?db=".$db."&term=".$gene."&usehistory=y";
# récupération du résultat comme si vous l'aviez ouvert dans votre navigateur
my $output = get($url);
my $web = $1 if ($output =~ /<WebEnv>(\S+)<\/WebEnv>/); # récupération du WebEnv
my $key = $1 if ($output =~ /<QueryKey>(\d+)<\/QueryKey>/); # récupération de la query key
my $count = $1 if ($output =~ /<Count>(\d+)<\/Count>/); # récupération du nombre de résultats pour la recherche
if ( !$web or !$key or !$count ){
print "Can't read informations from url: ".$url."\n";
exit;
}
open (XML, ">", $xml_handle) or ( warn "Can't create file $xml_handle\n$!\n" and die );
# on précise le nombre de résultat à retourner par tour de boucle :
# 1 pour un résultat, 50 pour 50 résultats, etc
my $retmax = 1;
for (my $retstart = 0; $retstart < $count; $retstart += $retmax) {
my $efetch_url = $base ."efetch.fcgi?db=".$db."&WebEnv=".$web;
$efetch_url .= "&query_key=".$key."&retstart=".$retstart;
$efetch_url .= "&retmax=".$retmax."&rettype=xml&retmode=text";
my $efetch_out = get($efetch_url);
if ( !$efetch_out ){
print "Can't get file xml from: ".$efetch_url."\n";
exit;
}
print XML $efetch_out;
}
close XML;
Pour appeler ce script depuis un terminal, il vous suffit d'utiliser la ligne de commande suivante :
perl eutils_gene.pl 5371
Ce script étant très largement inspiré du guide officiel, et adapté en fonction de mes besoins, celui-ci est donc libre d'accès. Vous êtes donc parfaitement libre de le récupérer, le disséquer et le modifier à votre convenance.
Sources
Pour une prise en main rapide des Eutils : http://www.ncbi.nlm.nih.gov/books/NBK25500/
Pour aller plus loin avec les Eutils : http://www.ncbi.nlm.nih.gov/books/NBK25501/
Laisser un commentaire