exponenta event banner

Доступ к базам данных NCBI Entrez с помощью электронных утилит

В этом примере показано, как программно искать и извлекать данные из баз данных Entrez NCBI с помощью Entrez Utilities (E-Utilities).

Использование электронных утилит NCBI для получения биологических данных

E-Utilities (eUtils) - это серверные программы (например, ESearch, ESummary, EFetch и т.д.), разработанные и поддерживаемые NCBI для поиска и извлечения данных из большинства баз данных Entpwdrez. Доступ к инструментам осуществляется через URL-адреса со строгим синтаксисом определенного базового URL-адреса, вызова сценария eUtil и связанных с ним параметров. Дополнительные сведения об eUtils см. в справке E-Utilities.

Поиск в базе данных нуклеотидов с помощью ESearch

В этом примере мы рассматриваем гены, секвенированные из вируса H5N1, выделенного в 1997 году из курицы в Гонконге, в качестве отправной точки для нашего анализа. Этот вирус перескочил от кур к людям, убив шесть человек до того, как распространение болезни было поставлено под контроль, уничтожив всю птицу в Гонконге [1]. Для поиска данных последовательности, необходимых для анализа, можно использовать ESearch. ESearch требует ввода базы данных (db) и поисковый термин (term). Дополнительно можно запросить ESearch для хранения результатов поиска на сервере истории NCBI через usehistory параметр.

baseURL = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/';
eutil = 'esearch.fcgi?';
dbParam = 'db=nuccore';
termParam = '&term=A/chicken/Hong+Kong/915/97+OR+A/chicken/Hong+Kong/915/1997';
usehistoryParam = '&usehistory=y';
esearchURL = [baseURL, eutil, dbParam, termParam, usehistoryParam]
esearchURL =

  1×145 char array

http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=nuccore&term=A/chicken/Hong+Kong/915/97+OR+A/chicken/Hong+Kong/915/1997&usehistory=y

term может быть любым допустимым запросом Entrez. Обратите внимание, что в URL-адресе не может быть пробелов, поэтому параметры разделяются символом «» & «», и любые пробелы в выражении запроса должны быть заменены на «» + «» (например, «» Hong + Kong «»).

Вы можете использовать webread для отправки URL-адреса и возврата результатов из ESearch в виде символьного массива.

searchReport = webread(esearchURL)
searchReport =

  1×1714 char array

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE eSearchResult PUBLIC "-//NLM//DTD esearch 20060628//EN" "http://eutils.ncbi.nlm.nih.gov/eutils/dtd/20060628/esearch.dtd">
<eSearchResult><Count>8</Count><RetMax>8</RetMax><RetStart>0</RetStart><QueryKey>1</QueryKey><WebEnv>NCID_1_3777459_130.14.22.215_9001_1464976330_1306835914_0MetA0_S_MegaStore_F_1</WebEnv><IdList>
<Id>6048802</Id>
<Id>6048927</Id>
<Id>6048903</Id>
<Id>6048875</Id>
<Id>6048849</Id>
<Id>6048829</Id>
<Id>6048770</Id>
<Id>3421265</Id>
</IdList><TranslationSet/><TranslationStack>   <TermSet>    <Term>A/chicken/Hong[All Fields]</Term>    <Field>All Fields</Field>    <Count>1076</Count>    <Explode>N</Explode>   </TermSet>   <TermSet>    <Term>Kong/915/97[All Fields]</Term>    <Field>All Fields</Field>    <Count>7</Count>    <Explode>N</Explode>   </TermSet>   <OP>AND</OP>   <OP>GROUP</OP>   <TermSet>    <Term>A/chicken/Hong[All Fields]</Term>    <Field>All Fields</Field>    <Count>1076</Count>    <Explode>N</Explode>   </TermSet>   <TermSet>    <Term>Kong[All Fields]</Term>    <Field>All Fields</Field>    <Count>2352376</Count>    <Explode>N</Explode>   </TermSet>   <OP>AND</OP>   <TermSet>    <Term>915[All Fields]</Term>    <Field>All Fields</Field>    <Count>93686</Count>    <Explode>N</Explode>   </TermSet>   <OP>AND</OP>   <TermSet>    <Term>1997[All Fields]</Term>    <Field>All Fields</Field>    <Count>473107</Count>    <Explode>N</Explode>   </TermSet>   <OP>AND</OP>   <OP>GROUP</OP>   <OP>OR</OP>  </TranslationStack><QueryTranslation>(A/chicken/Hong[All Fields] AND Kong/915/97[All Fields]) OR (A/chicken/Hong[All Fields] AND Kong[All Fields] AND 915[All Fields] AND 1997[All Fields])</QueryTranslation></eSearchResult>


ESearch возвращает результаты поиска в формате XML. Отчет содержит информацию о выполненном запросе, в какой базе данных выполнялся поиск, и идентификаторы UID (уникальные идентификаторы) для записей, соответствующих запросу. При использовании сервера истории отчет содержит два дополнительных идентификатора, WebEnv и query_key, для доступа к результатам. WebEnv - расположение результатов на сервере, и query_key - это число, индексирующее выполненные запросы. Начиная с WebEnv и query_key зависят от запроса и будут изменяться каждый раз при выполнении поиска. UID или WebEnv и query_key может быть проанализирован из XML-отчета, а затем передан в другие eUtils. Вы можете использовать regexp для выполнения синтаксического анализа и сохранения маркеров в структуре с полевыми именами WebEnv и QueryKey.

ncbi = regexp(searchReport,...
    '<QueryKey>(?<QueryKey>\w+)</QueryKey>\s*<WebEnv>(?<WebEnv>\S+)</WebEnv>',...
    'names')
ncbi = 

  struct with fields:

    QueryKey: '1'
      WebEnv: 'NCID_1_3777459_130.14.22.215_9001_1464976330_1306835914_0Me...'

Получение резюме файлов GenBank ® с помощью ESummary

Для получения быстрого обзора последовательностей, соответствующих запросу, можно использовать ESummary. ESummary извлекает краткую сводку или сводку документов (DocSum) для каждой записи. ESummary требует ввода какой базы данных для доступа и какие записи для извлечения, идентифицированные либо по списку UID, пропущенных через id параметра или по WebEnv и query_key параметры. ESummary возвращает отчет в формате XML, содержащий сводную информацию для каждой записи. Использовать websave с помощью ESummary для выполнения извлечения сводки записей и записи XML-отчета в файл.

tmpDirectory = tempdir;
summaryFname = fullfile(tmpDirectory,'summaryReport.xml');

websave(summaryFname, [baseURL...
    'esummary.fcgi?db=nuccore&WebEnv=',ncbi.WebEnv,...
    '&query_key=',ncbi.QueryKey]);

Можно создать таблицу стилей XSL для просмотра информации из XML-отчета ESummary в веб-браузере. Дополнительные сведения о написании таблиц стилей XSL см. в разделе W3C ® XSL. Таблица стилей XSL была создана для этого примера, чтобы просмотреть сводную информацию о последовательности и предоставить ссылки на их полные файлы GenBank ®.Xslt может использоваться для просмотра XML-отчета в веб-браузере из MATLAB ®.

xslt(summaryFname,'genbankSummary.xsl','-web');

Получение полных файлов GenBank с помощью EFetch

Для выполнения анализа последовательности необходимо получить полную запись GenBank для каждой последовательности. EFetch извлекает полные записи из баз данных Entrez. EFetch требует ввода базы данных и списка UID или WebEnv и query_key. Кроме того, EFetch может возвращать выходные данные в различных форматах. Можно указать формат вывода (например, GenBank (gb), FASTA) и формат файла (например, текст, ASN.1, XML), который требуется через rettype и retmode параметры, соответственно. Rettype равняется gb для формата файла GenBank и retmode равняется text для этого запроса. Genbankread может использоваться непосредственно с URL EFetch для извлечения всех записей GenBank и их считывания в структурный массив. Эта структура может затем использоваться в качестве входных данных для seqviewer для визуализации последовательностей.

ch97struct = genbankread([baseURL...
    'efetch.fcgi?db=nuccore&rettype=gb&retmode=text&WebEnv=',ncbi.WebEnv,...
    '&query_key=',ncbi.QueryKey]);
seqviewer(ch97struct)

Поиск связей между базами данных с помощью ELink

Может быть полезно иметь статьи PubMed, связанные с этими генами. ELink обеспечивает эту функциональность. Он находит связи между записями внутри баз данных или между ними. Вы можете дать ELink идентификаторы query_key и WebEnv сверху и попросить его найти записи в базе данных PubMed (db параметр), связанный с вашими записями из базы данных нуклеотидов (nuccore) (dbfrom параметр). ELink возвращает XML-отчет с UID для записей в PubMed. Эти UID могут быть проанализированы из отчета и переданы в другие eUtils (например, ESummary). Таблица стилей, созданная для просмотра отчетов ESummary, используется для просмотра результатов ELink.

elinkReport = webread([baseURL...
    'elink.fcgi?dbfrom=nuccore&db=pubmed&WebEnv=', ncbi.WebEnv,...
    '&query_key=',ncbi.QueryKey]);

Извлеките UID PubMed из отчета ELink.

pubmedIDs = regexp(elinkReport,'<Link>\s+<Id>(\w*)</Id>\s+</Link>','tokens');
NumberOfArticles = numel(pubmedIDs)

% Put PubMed UIDs into a string that can be read by EPost URL.

pubmed_str = [];
for ii = 1:NumberOfArticles
    pubmed_str = sprintf([pubmed_str '%s,'],char(pubmedIDs{ii}));
end
NumberOfArticles =

     2

Проводка UID на сервер истории NCBI с EPost

EPost можно использовать для разноски UID на сервер истории. Он возвращает XML-отчет с query_key и WebEnv Идентификаторы, указывающие на расположение сервера истории. Опять же, они могут быть проанализированы из отчета и использованы с другими вызовами eUtils.

epostReport = webread([baseURL 'epost.fcgi?db=pubmed&id=',pubmed_str(1:end-1)]);
epostKeys = regexp(epostReport,...
    '<QueryKey>(?<QueryKey>\w+)</QueryKey>\s*<WebEnv>(?<WebEnv>\S+)</WebEnv>','names')
epostKeys = 

  struct with fields:

    QueryKey: '1'
      WebEnv: 'NCID_1_3778415_130.14.22.215_9001_1464976335_906725031_0Met...'

Использование ELink для поиска связанных файлов в одной базе данных

ELink может выполнять поиск в базе данных. Например, можно запросить нуклеотидную последовательность в базе данных нуклеотидов (nuccore), чтобы найти аналогичные последовательности, по существу выполняя BLAST-поиск. Для поиска в базе данных «внутри» ELink возвращает XML-отчет, содержащий связанные записи, а также ранжирование оценки его связи с записью запроса. Из вышеприведенного поиска PubMed вам может быть интересно найти все статьи, связанные с этими статьями в PubMed. Это легко сделать с ELink. Чтобы выполнить поиск в базе данных «внутри», установите db и dbfrom в PubMed. Вы можете использовать query_key и WebEnv из вызова EPost.

pm2pmReport = webread([baseURL...
    'elink.fcgi?dbfrom=pubmed&db=pubmed&query_key=',epostKeys.QueryKey,...
    '&WebEnv=',epostKeys.WebEnv]);
pubmedIDs = regexp(pm2pmReport,'(?<=<Id>)\w*(?=</Id>)','match');
NumberOfArticles = numel(unique(pubmedIDs))

pubmed_str = [];
for ii = 1:NumberOfArticles
    pubmed_str = sprintf([pubmed_str '%s,'],char(pubmedIDs{ii}));
end
NumberOfArticles =

   526

Использовать websave с помощью EFetch для извлечения полных рефератов для статей и записи возвращенного XML-отчета в файл. В этом примере приводится таблица стилей XSL для просмотра результатов запроса EFetch. XML-отчет может быть преобразован с помощью таблицы стилей и открыт в веб-браузере из MATLAB с помощью xslt.

fullFname = fullfile(tmpDirectory,'H5N1_relatedArticles.xml');
websave(fullFname, [baseURL 'efetch.fcgi?db=pubmed&retmode=xml&id=',...
    pubmed_str(1:end-1)]);
xslt(fullFname,'pubmedFullReport.xsl','-web');

Используя EGQuery, чтобы получить Глобальную Точку зрения H5N1 Related-Records в Entrez

Чтобы узнать, какие другие базы данных Entrez содержат информацию о H5N1 вирусе, используйте EGQuery. EGQuery выполняет текстовый поиск по всем доступным базам данных Entrez и возвращает количество попаданий в каждой базе данных. EGQuery принимает любой допустимый текстовый запрос Entrez в качестве ввода через term параметр.

entrezSearch = webread([baseURL,'egquery.fcgi?term=H5N1+AND+virus']);
entrezResults = regexp(entrezSearch,...
    '<DbName>(?<DB>\w+\s*\w*)</DbName>.*?(<Count>)(?<Count>\d+)</Count>',...
    'names');

entrezDBs = {entrezResults(:).DB};
dbCounts = str2double({entrezResults(:).Count});
entrezDBs = entrezDBs(logical(dbCounts)); % remove databases with no records
[dbCounts,sortInd] = sort(dbCounts(logical(dbCounts)));
entrezDBs = entrezDBs(sortInd);
numDBs = numel(entrezDBs);

barh(log10(dbCounts));
ylim([.5 numDBs+.5])
ax = gca;
ax.YTick = 1:numDBs;
ax.YTickLabel = entrezDBs;
xlabel('Log(Number of Records)');
title('Number of H5N1 Related-Records Per Entrez Database');

Ссылки

[1] Криштианини, Н. и Хан, М.В. «Введение в вычислительную геномику: подход к тематическим исследованиям», Cambridge University Press, 2007.