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

Этот пример показывает, как программно искать и получить данные от баз данных Entrez NCBI с помощью Утилит NCBI Entrez (электронные Утилиты).

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

Электронные утилиты (eUtils) являются программами серверной стороны (например, ESearch, ESummary, EFetch, и т.д.) разработанный и сохраняемый NCBI для того, чтобы искать и получить данные от большинства Баз данных Entpwdrez. Вы получаете доступ к инструментам через URL со строгим синтаксисом определенного базового URL, вызова скрипта eUtil и его связанных параметров. Для получения дополнительной информации на eUtils, смотрите электронную Сервисную Справку.

Поиск базы данных нуклеотида с ESearch

В этом примере мы считаем гены упорядоченными от вируса H5N1, изолированного в 1 997 от курицы в Гонконге как отправная точка для нашего анализа. Этот конкретный вирус спрыгнул с цыплят людям, уничтожив шесть человек, прежде чем распространение болезни было подчинено контролю путем уничтожения всей домашней птицы в Гонконге [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. Отчет содержит информацию о выполняемом запросе, какая база данных искалась и UIDs (уникальные идентификаторы) к записям, которые совпадают с запросом. Если вы используете сервер истории, отчет содержит два дополнительных идентификатора, WebEnv и query_key, для доступа к результатам. WebEnv является местоположением результатов на сервере, и query_key является номером, индексирующим выполняемые запросы. Поскольку WebEnv и query_key являются зависимым запроса, которого они изменят каждый раз, когда поиск выполняется. Или UIDs или 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® File с ESummary

Получить быстрое представление о последовательностях, которые совпадали с запросом, можно использовать ESummary. ESummary получает краткий обзор или Сводные данные Документа (DocSum), для каждой записи. ESummary требует входа, который база данных для доступа и который записывает, чтобы получить, идентифицированный или списком UIDs прошел через параметр id или параметрами query_key и WebEnv. 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, чтобы просмотреть информацию из отчета ESummary XML в веб-браузере. Для получения дополнительной информации о записи таблиц стилей XSL смотрите W3C® XSL. Таблица стилей XSL была создана для этого примера, чтобы просмотреть информацию о сводных данных последовательности и обеспечить ссылки на их полные файлы GenBank®. Xslt может использоваться, чтобы просмотреть отчет XML в веб-браузере от MATLAB®.

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

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

Чтобы выполнить анализ последовательности, необходимо получить полную запись GenBank для каждой последовательности. EFetch получает полные отчеты из баз данных Entrez. EFetch требует входа базы данных и списка UIDs или WebEnv и query_key. Кроме того, EFetch может возвратить выходной параметр в различных форматах. Можно задать, какой выходной формат (т.е. GenBank (gb), FASTA) и формат файла (т.е. текст, ASN.1, XML) вы хотите через rettype и параметры retmode, соответственно. Rettype равняется gb для формата файла GenBank, и retmode равняется text для этого запроса. Genbankread может использоваться непосредственно с EFetch URL, чтобы получить все записи 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 с UIDs для записей в PubMed. Эти UIDs могут быть проанализированы из отчета и переданы другому eUtils (например, ESummary). Используйте таблицу стилей, созданную для просмотра ESummary, сообщает, чтобы просмотреть результаты ELink.

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

Извлеките PubMed UIDs из отчета 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

Регистрация UIDs к серверу истории NCBI с EPost

Можно использовать EPost для сообщений UIDs к серверу истории. Это возвращает отчет 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 в 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] Cristianini, N. и Хан, M.W. "Введение в вычислительную геномику: подход тематических исследований", издательство Кембриджского университета, 2007.