changeset 0:1b4ac594d02a draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/ncbi_entrez_eutils commit 780c9984a9c44d046aadf1e316a668d1e53aa1f0
author iuc
date Sat, 31 Oct 2015 12:44:54 -0400
parents
children a42fa980bbd5
files README.md ecitmatch.py efetch.py efetch.xml egquery.py einfo.py elink.py epost.py esearch.py esummary.py eutils.py macros.xml requirements.txt test-data/ecitmatch.results.tsv test-data/ecitmatch.tsv test-data/egquery.1.xml test-data/esearch.pubmed.2014-01-pnas.xml test-data/esearch.pubmed.xml test-data/esummary.tax.xml test-data/example.history.json test-data/pm-tax-neighbor.xml test-data/pubmed.metadata.xml test-data/viruses.tax.xml tool_dependencies.xml
diffstat 24 files changed, 2412 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,34 @@
+# Galaxy NCBI Entrez Tools
+
+This repo requires a readme as administrators should very aware of some
+restrictions NCBI places on the use of the Entrez service.
+
+NCBI requests that you please limit large jobs to either weekends or between
+9:00 PM and 5:00 AM Eastern time during weekdays. This is not a request that
+the Galaxy tool can easily service, so we've included it in the disclaimer on
+every tool quite prominently.
+
+Failure to comply with NCBI's policies may result in an block until you/the
+user contacts NCBI and registers the tool ID and their email.
+
+Note that these are *IP* level blocks so the Galaxy tools uses a concatenation
+of the administrator's emails, and the user email, in hopes that NCBI will
+contact all relevant parties should their system be abused.
+
+Additionally, since these are IP level blocks, the Galaxy tool author (@erasche) recommends
+using the following `jobs_conf.xml` snippet in order to place a system-wide
+restriction of 1 concurrent Entrez job amongst all users.
+
+```xml
+<destination id="entrez" runner="local">
+</destination>
+<limit type="concurrent_jobs" id="entrez">1</limit>
+<tools>
+  <tool id="ncbi.eutils.efetch" destination="entrez" />
+  <tool id="ncbi.eutils.esearch" destination="entrez" />
+  <tool id="ncbi.eutils.epost" destination="entrez" />
+  <tool id="ncbi.eutils.elink" destination="entrez" />
+  <tool id="ncbi.eutils.einfo" destination="entrez" />
+  <tool id="ncbi.eutils.esummary" destination="entrez" />
+</tools>
+```
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ecitmatch.py	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+import argparse
+import eutils
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description='ECitMatch', epilog='')
+    parser.add_argument('--file', help='Tabular file containing citations to search')
+
+    parser.add_argument('--key', nargs='*', help='Citation Key')
+    parser.add_argument('--journal_title', nargs='*', help='Journal Title')
+    parser.add_argument('--year', nargs='*', help='Year')
+    parser.add_argument('--volume', nargs='*', help='Volume')
+    parser.add_argument('--first_page', nargs='*', help='First Page')
+    parser.add_argument('--author_name', nargs='*', help='Author name')
+
+    # Emails
+    parser.add_argument('--user_email', help="User email")
+    parser.add_argument('--admin_email', help="Admin email")
+    args = parser.parse_args()
+
+    c = eutils.Client(user_email=args.user_email, admin_email=args.admin_email)
+
+    citations = []
+    if args.file is None:
+        for key, journal, year, volume, first_page, author_name in \
+                zip(args.key, args.journal_title, args.year, args.volume, args.first_page, args.author_name):
+            citations.append({
+                'key': key,
+                'journal': journal,
+                'year': year,
+                'volume': volume,
+                'first_page': first_page,
+                'author_name': author_name,
+            })
+    else:
+        for line in args.file:
+            if not line.startswith('#'):
+                tmp = line.split('\t')
+                try:
+                    citations.append({
+                        'journal': tmp[0],
+                        'year': tmp[1],
+                        'volume': tmp[2],
+                        'first_page': tmp[3],
+                        'author_name': tmp[4],
+                        'key': tmp[5],
+                    })
+                except KeyError:
+                    print "Could not parse line: %s" % line
+
+    payload = {
+        'db': 'pubmed',
+        'bdata': citations
+    }
+
+    results = c.citmatch(**payload)
+    # We get data back as pipe separated, so just replace those with tabs
+    print results.replace('|', '\t')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/efetch.py	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,37 @@
+#!/usr/bin/env python
+import argparse
+import eutils
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description='EFetch', epilog='')
+    parser.add_argument('db', help='Database to use')
+    parser.add_argument('--user_email', help="User email")
+    parser.add_argument('--admin_email', help="Admin email")
+
+    # ID source
+    parser.add_argument('--id_list', help='list of ids')
+    parser.add_argument('--id', help='Comma separated individual IDs')
+    parser.add_argument('--history_file', help='Fetch results from previous query')
+
+    # Output
+    parser.add_argument('--retmode', help='Retmode')
+    parser.add_argument('--rettype', help='Rettype')
+    parser.add_argument('--whole', action='store_true',
+                        help='Download all records associated with query')
+    args = parser.parse_args()
+
+    c = eutils.Client(history_file=args.history_file, user_email=args.user_email, admin_email=args.admin_email)
+    merged_ids = c.parse_ids(args.id_list, args.id, args.history_file)
+
+    payload = {}
+    if args.history_file is not None:
+        payload.update(c.get_history())
+    else:
+        payload['id'] = ','.join(merged_ids)
+
+    for attr in ('retmode', 'rettype'):
+        if getattr(args, attr, None) is not None:
+            payload[attr] = getattr(args, attr)
+
+    c.fetch(args.db, whole=args.whole, **payload)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/efetch.xml	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,123 @@
+<?xml version="1.0"?>
+<tool id="ncbi_eutils_efetch" name="NCBI EFetch" version="@WRAPPER_VERSION@">
+  <description>fetch records from NCBI</description>
+  <macros>
+    <import>macros.xml</import>
+  </macros>
+  <expand macro="requirements"/>
+  <expand macro="stdio"/>
+  <version_command>python efetch.py --version</version_command>
+  <command interpreter="python"><![CDATA[efetch.py
+$db.db_select
+
+@LIST_OR_HIST@
+
+#set retmode, rettype = str($db.output_format).split('-')
+## Otherwise, defaults to a None/empty which implies 'default' to NCBI
+#if retmode != "null":
+--retmode $retmode
+#end if
+--rettype $rettype
+
+@EMAIL_ARGUMENTS@
+$whole
+> $default]]></command>
+  <inputs>
+    <expand macro="db"/>
+    <expand macro="list_or_hist"/>
+    <param checked="false" label="Download all records associated with query" name="whole" type="boolean" truevalue="--whole" falsevalue=""/>
+  </inputs>
+  <outputs>
+    <data format="txt" name="default" label="NCBI EFetch Results">
+      <discover_datasets pattern="__designation__.out" ext="txt"/>
+      <change_format>
+        <when input="output_format" value="abstract-text" format="txt"/>
+        <when input="output_format" value="acc-text" format="txt"/>
+        <when input="output_format" value="alignmentscores-text" format="txt"/>
+        <when input="output_format" value="chr-text" format="txt"/>
+        <when input="output_format" value="docset-text" format="txt"/>
+        <when input="output_format" value="docsum-xml" format="xml"/>
+        <when input="output_format" value="est-text" format="txt"/>
+        <when input="output_format" value="fasta_cds_aa-text" format="fasta"/>
+        <when input="output_format" value="fasta-text" format="fasta"/>
+        <when input="output_format" value="fasta-xml" format="xml"/>
+        <when input="output_format" value="flt-text" format="txt"/>
+        <when input="output_format" value="ft-text" format="txt"/>
+        <when input="output_format" value="full-text" format="txt"/>
+        <when input="output_format" value="full-xml" format="xml"/>
+        <when input="output_format" value="gbc-xml" format="xml"/>
+        <when input="output_format" value="gbwithparts-text" format="genbank"/>
+        <when input="output_format" value="gb-text" format="genbank"/>
+        <when input="output_format" value="gb-xml" format="xml"/>
+        <when input="output_format" value="gene_table-text" format="txt"/>
+        <when input="output_format" value="gpc-xml" format="xml"/>
+        <when input="output_format" value="gp-text" format="txt"/>
+        <when input="output_format" value="gp-xml" format="xml"/>
+        <when input="output_format" value="gss-text" format="txt"/>
+        <when input="output_format" value="homologene-text" format="txt"/>
+        <when input="output_format" value="ipg-xml" format="xml"/>
+        <when input="output_format" value="medline-text" format="txt"/>
+        <when input="output_format" value="native-xml" format="xml"/>
+        <when input="output_format" value="null-asn.1" format="asn1"/>
+        <when input="output_format" value="null-text" format="txt"/>
+        <when input="output_format" value="null-xml" format="xml"/>
+        <when input="output_format" value="rsr-text" format="txt"/>
+        <when input="output_format" value="seqid-text" format="txt"/>
+        <when input="output_format" value="ssexemplar-text" format="txt"/>
+        <when input="output_format" value="summary-text" format="txt"/>
+        <when input="output_format" value="uilist-xml" format="xml"/>
+        <when input="output_format" value="xml-xml" format="xml"/>
+      </change_format>
+    </data>
+  </outputs>
+  <tests>
+    <test>
+      <param name="db_select" value="taxonomy"/>
+      <param name="output_format" value="docsum-xml"/>
+      <param name="qss" value="id_list"/>
+      <param name="id_list" value="10239"/>
+      <output name="default" file="viruses.tax.xml">
+        <!--<discovered_datasets designation="0" ftytpe="xml" file="viruses.tax.xml" />-->
+      </output>
+    </test>
+  </tests>
+  <help><![CDATA[
+NCBI Entrez EFetch
+==================
+
+Responds to a list of UIDs in a given database with the corresponding data
+records in a specified format.
+
+Example Queries
+---------------
+
+Fetch PMIDs 17284678 and 9997 as text abstracts:
+
++----------------------+--------------------------------------+
+| Parameter            | Value                                |
++======================+======================================+
+| NCBI Database to Use | PubMed                               |
++----------------------+--------------------------------------+
+| ID List              | 17284678 9997                        |
++----------------------+--------------------------------------+
+| Output Format        | Abstract                             |
++----------------------+--------------------------------------+
+
+Fetch FASTA for a transcript and its protein product (GIs 312836839 and 34577063)
+
++----------------------+--------------------------------------+
+| Parameter            | Value                                |
++======================+======================================+
+| NCBI Database to Use | Protein                              |
++----------------------+--------------------------------------+
+| ID List              | 312836839 34577063                   |
++----------------------+--------------------------------------+
+| Output Format        | Fasta                                |
++----------------------+--------------------------------------+
+
+@REFERENCES@
+
+@DISCLAIMER@
+      ]]></help>
+  <expand macro="citations"/>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/egquery.py	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+import argparse
+import eutils
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description='EGQuery', epilog='')
+    parser.add_argument('term', help='Query')
+    #
+    parser.add_argument('--user_email', help="User email")
+    parser.add_argument('--admin_email', help="Admin email")
+    args = parser.parse_args()
+
+    c = eutils.Client(user_email=args.user_email, admin_email=args.admin_email)
+
+    payload = {
+        'term': args.term,
+    }
+    results = c.gquery(**payload)
+    print results
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/einfo.py	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+import argparse
+import eutils
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description='EInfo', epilog='')
+    parser.add_argument('--db', help='Database to use')
+    parser.add_argument('--user_email', help="User email")
+    parser.add_argument('--admin_email', help="Admin email")
+    args = parser.parse_args()
+
+    c = eutils.Client(user_email=args.user_email, admin_email=args.admin_email)
+    payload = {}
+    if args.db is not None:
+        payload['db'] = args.db
+        payload['version'] = '2.0'
+    print c.info(**payload)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/elink.py	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+import argparse
+import eutils
+import json
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description='EFetch', epilog='')
+    parser.add_argument('db', help='Database to use, sometimes "none" (e.g. *check)')
+    parser.add_argument('dbfrom', help='Database containing input UIDs')
+    parser.add_argument('cmd', choices=['neighbor', 'neighbor_score',
+                        'neighbor_history', 'acheck', 'ncheck', 'lcheck',
+                        'llinks', 'llinkslib', 'prlinks'],
+                        help='ELink command mode')
+    # Only used in case of neighbor_history
+    parser.add_argument('--history_out', type=argparse.FileType('w'),
+                        help='Output history file', default='-')
+
+    parser.add_argument('--user_email', help="User email")
+    parser.add_argument('--admin_email', help="Admin email")
+    # ID Sources
+    parser.add_argument('--id_list', help='list of ids')
+    parser.add_argument('--id', help='Comma separated individual IDs')
+    parser.add_argument('--history_file', help='Fetch results from previous query')
+
+    # TODO: dates, linkname, term, holding
+    # neighbor or neighbor_history and dbfrom is pubmed
+    # parser.add_argument('--datetype', help='Date type')
+    # parser.add_argument('--reldate', help='In past N days')
+    # parser.add_argument('--mindate', help='Minimum date')
+    # parser.add_argument('--maxdate', help='maximum date')
+
+    # Output
+    args = parser.parse_args()
+
+    c = eutils.Client(history_file=args.history_file, user_email=args.user_email, admin_email=args.admin_email)
+    merged_ids = c.parse_ids(args.id_list, args.id, args.history_file)
+
+    payload = {
+        'dbfrom': args.dbfrom,
+        'cmd': args.cmd,
+    }
+    if args.history_file is not None:
+        payload.update(c.get_history())
+    else:
+        payload['id'] = ','.join(merged_ids)
+
+    # DB can be 'none' in a few cases.
+    if args.db != "none":
+        payload['db'] = args.db
+
+    results = c.link(**payload)
+
+    if args.cmd == "neighbor_history":
+        history = c.extract_history(results)
+        args.history_out.write(json.dumps(history, indent=4))
+
+    print results
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/epost.py	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+import argparse
+import eutils
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description='EPost', epilog='')
+    parser.add_argument('db', help='Database to use')
+    parser.add_argument('--id_list', help='list of ids')
+    parser.add_argument('--id', help='Comma separated individual IDs')
+    parser.add_argument('--history_file', help='Post to new QueryKey in an existing WebEnv')
+    parser.add_argument('--user_email', help="User email")
+    parser.add_argument('--admin_email', help="Admin email")
+
+    args = parser.parse_args()
+
+    c = eutils.Client(history_file=args.history_file, user_email=args.user_email, admin_email=args.admin_email)
+    merged_ids = c.parse_ids(args.id_list, args.id, args.history_file)
+
+    payload = {}
+    if args.history_file is not None:
+        payload.update(c.get_history())
+    else:
+        payload['id'] = ','.join(merged_ids)
+        payload['WebEnv'] = ''
+
+    print c.post(args.db, **payload)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esearch.py	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+import json
+import argparse
+import eutils
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description='ESearch', epilog='')
+    parser.add_argument('db', help='Database to use')
+    parser.add_argument('term', help='Query')
+    parser.add_argument('--history_file', help='Filter existing history')
+    parser.add_argument('--datetype', help='Date type')
+    parser.add_argument('--reldate', help='In past N days')
+    parser.add_argument('--mindate', help='Minimum date')
+    parser.add_argument('--maxdate', help='maximum date')
+    # History
+    parser.add_argument('--history_out', type=argparse.FileType('w'),
+                        help='Output history file')
+    parser.add_argument('--user_email', help="User email")
+    parser.add_argument('--admin_email', help="Admin email")
+    args = parser.parse_args()
+
+    c = eutils.Client(history_file=args.history_file, user_email=args.user_email, admin_email=args.admin_email)
+
+    payload = {
+        'db': args.db,
+        'term': args.term,
+        'retstart': 0,
+        'retmax': 20,
+        # hmmm @ retmax
+    }
+    if args.history_file is not None:
+        payload.update(c.get_history())
+    if args.history_out is not None:
+        payload['usehistory'] = 'y'
+
+    for attr in ('datetype', 'reldate', 'mindate', 'maxdate'):
+        if getattr(args, attr, None) is not None:
+            payload[attr] = getattr(args, attr)
+
+    results = c.search(**payload)
+
+    if args.history_out is not None:
+        history = c.extract_history(results)
+        args.history_out.write(json.dumps(history, indent=4))
+
+    print results
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esummary.py	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+import argparse
+import eutils
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description='ESummary', epilog='')
+    parser.add_argument('db', help='Database to use')
+    parser.add_argument('--id_list', help='list of ids')
+    parser.add_argument('--id', help='Comma separated individual IDs')
+    parser.add_argument('--history_file', help='Filter existing history')
+    parser.add_argument('--user_email', help="User email")
+    parser.add_argument('--admin_email', help="Admin email")
+    args = parser.parse_args()
+
+    c = eutils.Client(history_file=args.history_file, user_email=args.user_email, admin_email=args.admin_email)
+
+    merged_ids = c.parse_ids(args.id_list, args.id, args.history_file)
+
+    payload = {
+        'db': args.db,
+    }
+
+    if args.history_file is not None:
+        payload.update(c.get_history())
+    else:
+        payload['id'] = ','.join(merged_ids)
+
+    print c.summary(**payload)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eutils.py	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,131 @@
+import os
+import json
+import StringIO
+from Bio import Entrez
+Entrez.tool = "GalaxyEutils_1_0"
+BATCH_SIZE = 200
+
+
+class Client(object):
+
+    def __init__(self, history_file=None, user_email=None, admin_email=None):
+        self.using_history = False
+
+        if user_email is not None and admin_email is not None:
+            Entrez.email = ';'.join((admin_email, user_email))
+        elif user_email is not None:
+            Entrez.email = user_email
+        elif admin_email is not None:
+            Entrez.email = admin_email
+        else:
+            Entrez.email = os.environ.get('NCBI_EUTILS_CONTACT', None)
+
+        if Entrez.email is None:
+            raise Exception("Cannot continue without an email; please set "
+                            "administrator email in NCBI_EUTILS_CONTACT")
+
+        if history_file is not None:
+            with open(history_file, 'r') as handle:
+                data = json.loads(handle.read())
+                self.query_key = data['QueryKey']
+                self.webenv = data['WebEnv']
+                self.using_history = True
+
+    def get_history(self):
+        if not self.using_history:
+            return {}
+        else:
+            return {
+                'query_key': self.query_key,
+                'WebEnv': self.webenv,
+            }
+
+    def post(self, database, **payload):
+        return json.dumps(Entrez.read(Entrez.epost(database, **payload)), indent=4)
+
+    def fetch(self, db, whole=False, **payload):
+        if whole:
+            if 'id' in payload:
+                summary = self.id_summary(db, payload['id'])
+            else:
+                summary = self.history_summary(db)
+
+            count = len(summary)
+
+            payload['retmax'] = BATCH_SIZE
+
+            # Print the first one
+            print Entrez.efetch(db, **payload).read()
+            # Then write subsequent to files for <discover datasets>
+            for i in range(BATCH_SIZE, count, BATCH_SIZE):
+                payload['retstart'] = i
+                # TODO: output multiple files??? Collection?
+                with open('%s.out' % i, 'w') as handle:
+                    handle.write(Entrez.efetch(db, **payload).read())
+        else:
+            print Entrez.efetch(db, **payload).read()
+
+    def id_summary(self, db, id_list):
+        payload = {
+            'db': db,
+            'id': id_list,
+        }
+        return Entrez.read(Entrez.esummary(**payload))
+
+    def history_summary(self, db):
+        if not self.using_history:
+            raise Exception("History must be available for this method")
+
+        payload = {
+            'db': db,
+            'query_key': self.query_key,
+            'WebEnv': self.webenv,
+        }
+        return Entrez.read(Entrez.esummary(**payload))
+
+    def summary(self, **payload):
+        return Entrez.esummary(**payload).read()
+
+    def link(self, **payload):
+        return Entrez.elink(**payload).read()
+
+    def extract_history(self, xml_data):
+        parsed_data = Entrez.read(StringIO.StringIO(xml_data))
+        history = {}
+        for key in ('QueryKey', 'WebEnv'):
+            if key in parsed_data:
+                history[key] = parsed_data[key]
+
+        return history
+
+    def search(self, **payload):
+        return Entrez.esearch(**payload).read()
+
+    def info(self, **kwargs):
+        return Entrez.einfo(**kwargs).read()
+
+    def gquery(self, **kwargs):
+        return Entrez.egquery(**kwargs).read()
+
+    def citmatch(self, **kwargs):
+        return Entrez.ECitMatch(**kwargs).read()
+
+    @classmethod
+    def parse_ids(cls, id_list, id, history_file):
+        """Parse IDs passed on --cli or in a file passed to the cli
+        """
+        merged_ids = []
+        if id is not None:
+            for pid in id.replace('__cn__', ',').replace('\n', ',').split(','):
+                if pid is not None and len(pid) > 0:
+                    merged_ids.append(pid)
+
+        if id_list is not None:
+            with open(id_list, 'r') as handle:
+                merged_ids += [x.strip() for x in handle.readlines()]
+
+        # Exception hanlded here for uniformity
+        if len(merged_ids) == 0 and history_file is None:
+            raise Exception("Must provide history file or IDs")
+
+        return merged_ids
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/macros.xml	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,687 @@
+<?xml version="1.0"?>
+<macros>
+  <token name="@WRAPPER_VERSION@">1.0</token>
+  <token name="@EMAIL_ARGUMENTS@">
+--user_email $__user_email__
+#set admin_emails = ';'.join(str($__admin_users__).split(','))
+--admin_email $admin_emails
+  </token>
+  <token name="@REFERENCES@"><![CDATA[
+References
+==========
+
+If you use this Galaxy tool in work leading to a scientific
+publication, please cite the following papers:
+
+        ]]></token>
+  <token name="@DISCLAIMER@"><![CDATA[
+Usage Guidelines and Requirements
+=================================
+
+Frequency, Timing, and Registration of E-utility URL Requests
+-------------------------------------------------------------
+
+In order not to overload the E-utility servers, NCBI recommends that users
+limit large jobs to either weekends or between 9:00 PM and 5:00 AM Eastern time
+during weekdays. Failure to comply with this policy may result in an IP address
+being blocked from accessing NCBI.
+
+Minimizing the Number of Requests
+---------------------------------
+
+If a task requires searching for and/or downloading a large number of
+records, it is much more efficient to use the Entrez History to upload
+and/or retrieve these records in batches rather than using separate
+requests for each record. Please refer to Application 3 in Chapter 3
+for an example. Many thousands of IDs can be uploaded using a single
+EPost request, and several hundred records can be downloaded using one
+EFetch request.
+
+
+Disclaimer and Copyright Issues
+-------------------------------
+
+In accordance with requirements of NCBI's E-Utilities, we must provide
+the following disclaimer:
+
+Please note that abstracts in PubMed may incorporate material that may
+be protected by U.S. and foreign copyright laws. All persons
+reproducing, redistributing, or making commercial use of this
+information are expected to adhere to the terms and conditions asserted
+by the copyright holder. Transmission or reproduction of protected
+items beyond that allowed by fair use (PDF) as defined in the copyright
+laws requires the written permission of the copyright owners. NLM
+provides no legal advice concerning distribution of copyrighted
+materials. Please consult your legal counsel. If you wish to do a large
+data mining project on PubMed data, you can enter into a licensing
+agreement and lease the data for free from NLM. For more information on
+this please see `http://www.nlm.nih.gov/databases/leased.html <http://www.nlm.nih.gov/databases/leased.html>`__
+
+The `full disclaimer <http://www.ncbi.nlm.nih.gov/About/disclaimer.html>`__ is available on
+their website
+
+Liability
+~~~~~~~~~
+
+For documents and software available from this server, the
+U.S. Government does not warrant or assume any legal liability or
+responsibility for the accuracy, completeness, or usefulness of any
+information, apparatus, product, or process disclosed.
+
+Endorsement
+~~~~~~~~~~~
+
+NCBI does not endorse or recommend any commercial
+products, processes, or services. The views and opinions of authors
+expressed on NCBI's Web sites do not necessarily state or reflect those
+of the U.S. Government, and they may not be used for advertising or
+product endorsement purposes.
+
+External Links
+~~~~~~~~~~~~~~
+
+Some NCBI Web pages may provide links to other Internet
+sites for the convenience of users. NCBI is not responsible for the
+availability or content of these external sites, nor does NCBI endorse,
+warrant, or guarantee the products, services, or information described
+or offered at these other Internet sites. Users cannot assume that the
+external sites will abide by the same Privacy Policy to which NCBI
+adheres. It is the responsibility of the user to examine the copyright
+and licensing restrictions of linked pages and to secure all necessary
+permissions.
+        ]]></token>
+  <xml name="stdio">
+    <stdio>
+      <!-- Anything other than zero is an error -->
+      <exit_code range="1:"/>
+      <exit_code range=":-1"/>
+      <!-- In case the return code has not been set propery check stderr too -->
+      <regex match="Error:"/>
+      <regex match="Exception:"/>
+    </stdio>
+  </xml>
+  <xml name="dbselect">
+    <param name="db_select" type="select" label="NCBI Database to Use">
+      <option value="assembly">Assembly</option>
+      <option value="bioproject">BioProject</option>
+      <option value="biosample">BioSample</option>
+      <option value="biosystems">Biosystems</option>
+      <option value="blastdbinfo">Blast Database Information</option>
+      <option value="books">Books</option>
+      <option value="cdd">Conserved Domains</option>
+      <option value="clinvar">Clinical Variants</option>
+      <option value="clone">CLone</option>
+      <option value="dbvar">dbVar</option>
+      <option value="epigenomics">Epigenomics</option>
+      <option value="gap">dbGaP</option>
+      <option value="gds">GEO Datasets</option>
+      <option value="gene">Gene</option>
+      <option value="genome">Genome</option>
+      <option value="geoprofiles">GEO Profiles</option>
+      <option value="gtr">Genetic Testing Registry</option>
+      <option value="homologene">HomoloGene</option>
+      <option value="journals">Journals</option>
+      <option value="medgen">MedGen</option>
+      <option value="mesh">MeSH</option>
+      <option value="ncbisearch">NCBI Web Site</option>
+      <option value="nlmcatalog">NLM Catalog</option>
+      <option value="nuccore">Nucleotide</option>
+      <option value="nucest">EST</option>
+      <option value="nucgss">GSS</option>
+      <option value="omim">OMIM</option>
+      <option value="pcassay">PubChem BioAssay</option>
+      <option value="pccompound">PubChem Compound</option>
+      <option value="pcsubstance">PubChem Substance</option>
+      <option value="pmc">PubMed Central</option>
+      <option value="popset">PopSet</option>
+      <option value="probe">Probe</option>
+      <option value="protein">Protein</option>
+      <option value="proteinclusters">Protein Clusters</option>
+      <option value="pubmed">PubMed</option>
+      <option value="pubmedhealth">PubMed Health</option>
+      <option value="snp">SNP</option>
+      <option value="sra">SRA</option>
+      <option value="structure">Structure</option>
+      <option value="taxonomy">Taxonomy</option>
+      <option value="toolkit">NCBI C++ Toolkit</option>
+      <option value="toolkitall">NCBI C++ Toolkit All</option>
+      <option value="toolkitbook">NCBI C++ Toolkit Book</option>
+      <option value="unigene">UniGene</option>
+    </param>
+  </xml>
+  <xml name="db">
+    <conditional name="db">
+      <param name="db_select" type="select" label="NCBI Database to Use">
+        <option value="assembly">Assembly</option>
+        <option value="bioproject">BioProject</option>
+        <option value="biosample">BioSample</option>
+        <option value="biosystems">Biosystems</option>
+        <option value="blastdbinfo">Blast Database Information</option>
+        <option value="books">Books</option>
+        <option value="cdd">Conserved Domains</option>
+        <option value="clinvar">Clinical Variants</option>
+        <option value="clone">CLone</option>
+        <option value="dbvar">dbVar</option>
+        <option value="epigenomics">Epigenomics</option>
+        <option value="gap">dbGaP</option>
+        <option value="gds">GEO Datasets</option>
+        <option value="gene">Gene</option>
+        <option value="genome">Genome</option>
+        <option value="geoprofiles">GEO Profiles</option>
+        <option value="gtr">Genetic Testing Registry</option>
+        <option value="homologene">HomoloGene</option>
+        <option value="journals">Journals</option>
+        <option value="medgen">MedGen</option>
+        <option value="mesh">MeSH</option>
+        <option value="ncbisearch">NCBI Web Site</option>
+        <option value="nlmcatalog">NLM Catalog</option>
+        <option value="nuccore">Nucleotide</option>
+        <option value="nucest">EST</option>
+        <option value="nucgss">GSS</option>
+        <option value="omim">OMIM</option>
+        <option value="pcassay">PubChem BioAssay</option>
+        <option value="pccompound">PubChem Compound</option>
+        <option value="pcsubstance">PubChem Substance</option>
+        <option value="pmc">PubMed Central</option>
+        <option value="popset">PopSet</option>
+        <option value="probe">Probe</option>
+        <option value="protein">Protein</option>
+        <option value="proteinclusters">Protein Clusters</option>
+        <option value="pubmed">PubMed</option>
+        <option value="pubmedhealth">PubMed Health</option>
+        <option value="snp">SNP</option>
+        <option value="sra">SRA</option>
+        <option value="structure">Structure</option>
+        <option value="taxonomy">Taxonomy</option>
+        <option value="toolkit">NCBI C++ Toolkit</option>
+        <option value="toolkitall">NCBI C++ Toolkit All</option>
+        <option value="toolkitbook">NCBI C++ Toolkit Book</option>
+        <option value="unigene">UniGene</option>
+      </param>
+      <when value="assembly">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="bioproject">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="xml-xml">Full record</option>
+        </param>
+      </when>
+      <when value="biosample">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="full-xml">Full record (XML)</option>
+          <option value="full-text">Full record (plain text)</option>
+        </param>
+      </when>
+      <when value="biosystems">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="xml-xml">Full record</option>
+        </param>
+      </when>
+      <when value="blastdbinfo">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="books">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="cdd">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="clinvar">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="clone">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="dbvar">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="epigenomics">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="gap">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="gds">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="summary-text">Summary</option>
+        </param>
+      </when>
+      <when value="gene">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-asn.1">text (ASN.1)</option>
+          <option value="null-xml">XML</option>
+          <option value="gene_table-text">Gene table</option>
+        </param>
+      </when>
+      <when value="genome">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="geoprofiles">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="gtr">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="homologene">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-asn.1">text ASN.1</option>
+          <option value="null-xml">XML</option>
+          <option value="alignmentscores-text">Alignment scores</option>
+          <option value="fasta-text">FASTA</option>
+          <option value="homologene-text">HomoloGene</option>
+        </param>
+      </when>
+      <when value="journals">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="medgen">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="mesh">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="full-text">Full record</option>
+        </param>
+      </when>
+      <when value="ncbisearch">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="nlmcatalog">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-text">Full record</option>
+          <option value="null-xml">XML</option>
+        </param>
+      </when>
+      <when value="nuccore">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-text">text ASN.1</option>
+          <option value="null-asn.1">binary ASN.1</option>
+          <option value="native-xml">Full record in XML</option>
+          <option value="acc-text">Accession number(s)</option>
+          <option value="fasta-text">FASTA</option>
+          <option value="fasta-xml">TinySeq XML</option>
+          <option value="seqid-text">SeqID string</option>
+          <option value="gb-text">GenBank flat file</option>
+          <option value="gb-xml">GBSeq XML</option>
+          <option value="gbc-xml">INSDSeq XML</option>
+          <option value="ft-text">Feature table</option>
+          <option value="gbwithparts-text">GenBank flat file with full sequence (contigs)</option>
+          <option value="fasta_cds_na-text">CDS nucleotide FASTA</option>
+          <option value="fasta_cds_aa-text">CDS protein FASTA</option>
+        </param>
+      </when>
+      <when value="nucest">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-text">text ASN.1</option>
+          <option value="null-asn.1">binary ASN.1</option>
+          <option value="native-xml">Full record in XML</option>
+          <option value="acc-text">Accession number(s)</option>
+          <option value="fasta-text">FASTA</option>
+          <option value="fasta-xml">TinySeq XML</option>
+          <option value="seqid-text">SeqID string</option>
+          <option value="gb-text">GenBank flat file</option>
+          <option value="gb-xml">GBSeq XML</option>
+          <option value="gbc-xml">INSDSeq XML</option>
+          <option value="est-text">EST report</option>
+        </param>
+      </when>
+      <when value="nucgss">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-text">text ASN.1</option>
+          <option value="null-asn.1">binary ASN.1</option>
+          <option value="native-xml">Full record in XML</option>
+          <option value="acc-text">Accession number(s)</option>
+          <option value="fasta-text">FASTA</option>
+          <option value="fasta-xml">TinySeq XML</option>
+          <option value="seqid-text">SeqID string</option>
+          <option value="gb-text">GenBank flat file</option>
+          <option value="gb-xml">GBSeq XML</option>
+          <option value="gbc-xml">INSDSeq XML</option>
+          <option value="gss-text">GSS report</option>
+        </param>
+      </when>
+      <when value="omim">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="pcassay">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="pccompound">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="pcsubstance">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="pmc">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-xml">XML</option>
+          <option value="medline-text">MEDLINE</option>
+        </param>
+      </when>
+      <when value="popset">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-text">text ASN.1</option>
+          <option value="null-asn.1">binary ASN.1</option>
+          <option value="native-xml">Full record in XML</option>
+          <option value="acc-text">Accession number(s)</option>
+          <option value="fasta-text">FASTA</option>
+          <option value="fasta-xml">TinySeq XML</option>
+          <option value="seqid-text">SeqID string</option>
+          <option value="gb-text">GenBank flat file</option>
+          <option value="gb-xml">GBSeq XML</option>
+          <option value="gbc-xml">INSDSeq XML</option>
+        </param>
+      </when>
+      <when value="probe">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="protein">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-text">text ASN.1</option>
+          <option value="null-asn.1">binary ASN.1</option>
+          <option value="native-xml">Full record in XML</option>
+          <option value="acc-text">Accession number(s)</option>
+          <option value="fasta-text">FASTA</option>
+          <option value="fasta-xml">TinySeq XML</option>
+          <option value="seqid-text">SeqID string</option>
+          <option value="ft-text">Feature table</option>
+          <option value="gp-text">GenPept flat file</option>
+          <option value="gp-xml">GBSeq XML</option>
+          <option value="gpc-xml">INSDSeq XML</option>
+          <option value="ipg-xml">Identical Protein XML</option>
+        </param>
+      </when>
+      <when value="proteinclusters">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="pubmed">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-asn.1">text ASN.1</option>
+          <option value="null-xml">XML</option>
+          <option value="medline-text">MEDLINE</option>
+          <option value="uilist-text">PMID list</option>
+          <option value="abstract-text">Abstract</option>
+        </param>
+      </when>
+      <when value="pubmedhealth">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="snp">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-asn.1">text ASN.1</option>
+          <option value="null-xml">XML</option>
+          <option value="flt-text">Flat file</option>
+          <option value="fasta-text">FASTA</option>
+          <option value="rsr-text">RS Cluster report</option>
+          <option value="ssexemplar-text">SS Exemplar list</option>
+          <option value="chr-text">Chromosome report</option>
+          <option value="docset-text">Summary</option>
+          <option value="uilist-xml">UID list (XML)</option>
+          <option value="uilist-text">UID list (text)</option>
+        </param>
+      </when>
+      <when value="sra">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="full-xml">XML</option>
+        </param>
+      </when>
+      <when value="structure">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+        </param>
+      </when>
+      <when value="taxonomy">
+        <param name="output_format" type="select" label="Output Format">
+          <option value="docsum-xml">Document summary</option>
+          <option value="uilist-xml">List of UIDs (XML)</option>
+          <option value="uilist-text">List of UIDs (plain text)</option>
+          <option value="null-xml">XML</option>
+          <option value="uilist-xml">TaxID list (XML)</option>
+          <option value="uilist-text">TaxID list (text)</option>
+        </param>
+      </when>
+    </conditional>
+  </xml>
+  <token name="@LIST_OR_HIST@">
+#if $query_source.qss == "history":
+    --history_file $query_source.history_file
+#else if $query_source.qss == "id_file":
+    --id_list $query_source.id_file
+#else if $query_source.qss == "id_list":
+    --id $query_source.id_list
+#end if
+    </token>
+  <xml name="list_or_hist">
+    <conditional name="query_source">
+      <param name="qss" type="select" label="Select source for IDs">
+        <option value="history">NCBI WebEnv History</option>
+        <option value="id_file">File containing IDs (one per line)</option>
+        <option value="id_list">Direct Entry</option>
+      </param>
+      <when value="history">
+        <param label="History File" name="history_file" type="data" format="ncbi_history"/>
+      </when>
+      <when value="id_file">
+        <param label="ID List" name="id_file" type="data" format="text,tabular"/>
+      </when>
+      <when value="id_list">
+        <param label="ID List" name="id_list" type="text" area="true" help="Newline/Comma separated list of IDs"/>
+      </when>
+    </conditional>
+  </xml>
+  <xml name="history_out">
+    <data format="ncbi_history" name="history" label="NCBI Entrez WebEnv History">
+      <yield/>
+    </data>
+  </xml>
+  <xml name="citations">
+    <citations>
+      <citation type="bibtex">@Book{ncbiEutils,
+          author = {Eric Sayers},
+          title = {Entrez Programming Utilities Help},
+          year = {2010},
+          publisher = {National Center for Biotechnology Information, Bethesda, Maryland},
+          note = {http://ww.ncbi.nlm.nih.gov/books/NBK25500/}
+      }</citation>
+    </citations>
+  </xml>
+  <xml name="db_select_to">
+    <param name="db_select_to" type="select" label="To NCBI Database">
+      <option value="assembly">Assembly</option>
+      <option value="bioproject">BioProject</option>
+      <option value="biosample">BioSample</option>
+      <option value="biosystems">Biosystems</option>
+      <option value="blastdbinfo">Blast Database Information</option>
+      <option value="books">Books</option>
+      <option value="cdd">Conserved Domains</option>
+      <option value="clinvar">Clinical Variants</option>
+      <option value="clone">CLone</option>
+      <option value="dbvar">dbVar</option>
+      <option value="epigenomics">Epigenomics</option>
+      <option value="gap">dbGaP</option>
+      <option value="gds">GEO Datasets</option>
+      <option value="gene">Gene</option>
+      <option value="genome">Genome</option>
+      <option value="geoprofiles">GEO Profiles</option>
+      <option value="gtr">Genetic Testing Registry</option>
+      <option value="homologene">HomoloGene</option>
+      <option value="journals">Journals</option>
+      <option value="medgen">MedGen</option>
+      <option value="mesh">MeSH</option>
+      <option value="ncbisearch">NCBI Web Site</option>
+      <option value="nlmcatalog">NLM Catalog</option>
+      <option value="nuccore">Nucleotide</option>
+      <option value="nucest">EST</option>
+      <option value="nucgss">GSS</option>
+      <option value="omim">OMIM</option>
+      <option value="pcassay">PubChem BioAssay</option>
+      <option value="pccompound">PubChem Compound</option>
+      <option value="pcsubstance">PubChem Substance</option>
+      <option value="pmc">PubMed Central</option>
+      <option value="popset">PopSet</option>
+      <option value="probe">Probe</option>
+      <option value="protein">Protein</option>
+      <option value="proteinclusters">Protein Clusters</option>
+      <option value="pubmed">PubMed</option>
+      <option value="pubmedhealth">PubMed Health</option>
+      <option value="snp">SNP</option>
+      <option value="sra">SRA</option>
+      <option value="structure">Structure</option>
+      <option value="taxonomy">Taxonomy</option>
+      <option value="toolkit">NCBI C++ Toolkit</option>
+      <option value="toolkitall">NCBI C++ Toolkit All</option>
+      <option value="toolkitbook">NCBI C++ Toolkit Book</option>
+      <option value="unigene">UniGene</option>
+    </param>
+  </xml>
+  <xml name="requirements">
+    <requirements>
+      <requirement type="package" version="1.66">biopython</requirement>
+    </requirements>
+  </xml>
+  <xml name="linkname">
+    <param name="linkname" type="select" label="To NCBI Database">
+        <!-- TODO: http://eutils.ncbi.nlm.nih.gov/entrez/query/static/entrezlinks.html -->
+    </param>
+</xml>
+</macros>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/requirements.txt	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,1 @@
+biopython
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/ecitmatch.results.tsv	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,1 @@
+proc natl acad sci u s a	1991	88	3248	mann bj	citation_1	2014248
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/ecitmatch.tsv	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,2 @@
+#journal	year	volume	first page	author	key
+proc natl acad sci u s a	1991	88	3248	mann bj	citation_1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/egquery.1.xml	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Result PUBLIC "-//NLM//DTD eSearchResult, January 2004//EN" "http://www.ncbi.nlm.nih.gov/entrez/query/DTD/egquery.dtd">
+<Result>
+   
+    <Term>bacteriophage</Term>
+    
+    <eGQueryResult>
+        <ResultItem><DbName>pubmed</DbName><MenuName>PubMed</MenuName><Count>62489</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>pmc</DbName><MenuName>PubMed Central</MenuName><Count>90071</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>mesh</DbName><MenuName>MeSH</MenuName><Count>271</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>books</DbName><MenuName>Books</MenuName><Count>786</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>pubmedhealth</DbName><MenuName>PubMed Health</MenuName><Count>7</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>omim</DbName><MenuName>OMIM</MenuName><Count>17</Count><Status>Ok</Status></ResultItem>
+        
+        <ResultItem><DbName>ncbisearch</DbName><MenuName>Site Search</MenuName><Count>27</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>nuccore</DbName><MenuName>Nucleotide</MenuName><Count>446855</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>nucgss</DbName><MenuName>GSS</MenuName><Count>723</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>nucest</DbName><MenuName>EST</MenuName><Count>1018</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>protein</DbName><MenuName>Protein</MenuName><Count>655232</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>genome</DbName><MenuName>Genome</MenuName><Count>15</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>structure</DbName><MenuName>Structure</MenuName><Count>3145</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>taxonomy</DbName><MenuName>Taxonomy</MenuName><Count>1</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>snp</DbName><MenuName>SNP</MenuName><Count>0</Count><Status>Term or Database is not found</Status></ResultItem>
+        <ResultItem><DbName>dbvar</DbName><MenuName>dbVar</MenuName><Count>0</Count><Status>Term or Database is not found</Status></ResultItem>
+        <ResultItem><DbName>epigenomics</DbName><MenuName>Epigenomics</MenuName><Count>1</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>gene</DbName><MenuName>Gene</MenuName><Count>51399</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>sra</DbName><MenuName>SRA</MenuName><Count>209</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>biosystems</DbName><MenuName>BioSystems</MenuName><Count>255</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>unigene</DbName><MenuName>UniGene</MenuName><Count>7</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>cdd</DbName><MenuName>Conserved Domains</MenuName><Count>321</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>clone</DbName><MenuName>Clone</MenuName><Count>0</Count><Status>Term or Database is not found</Status></ResultItem>
+        
+        <ResultItem><DbName>popset</DbName><MenuName>PopSet</MenuName><Count>159</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>geoprofiles</DbName><MenuName>GEO Profiles</MenuName><Count>1083</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>gds</DbName><MenuName>GEO DataSets</MenuName><Count>1289</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>homologene</DbName><MenuName>HomoloGene</MenuName><Count>21</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>pccompound</DbName><MenuName>PubChem Compound</MenuName><Count>4</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>pcsubstance</DbName><MenuName>PubChem Substance</MenuName><Count>586</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>pcassay</DbName><MenuName>PubChem BioAssay</MenuName><Count>287</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>nlmcatalog</DbName><MenuName>NLM Catalog</MenuName><Count>450</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>probe</DbName><MenuName>Probe</MenuName><Count>641</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>gap</DbName><MenuName>dbGaP</MenuName><Count>0</Count><Status>Term or Database is not found</Status></ResultItem>
+        <ResultItem><DbName>proteinclusters</DbName><MenuName>Protein Clusters</MenuName><Count>714</Count><Status>Ok</Status></ResultItem>
+        
+        <ResultItem><DbName>bioproject</DbName><MenuName>BioProject</MenuName><Count>127</Count><Status>Ok</Status></ResultItem>
+        <ResultItem><DbName>biosample</DbName><MenuName>BioSample</MenuName><Count>150</Count><Status>Ok</Status></ResultItem>
+    </eGQueryResult>
+    
+</Result>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/esearch.pubmed.2014-01-pnas.xml	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,25 @@
+<?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>524</Count><RetMax>20</RetMax><RetStart>0</RetStart><IdList>
+<Id>24620368</Id>
+<Id>24613929</Id>
+<Id>24596955</Id>
+<Id>24596954</Id>
+<Id>24571024</Id>
+<Id>24555201</Id>
+<Id>24555200</Id>
+<Id>24550301</Id>
+<Id>24520173</Id>
+<Id>24520172</Id>
+<Id>24497494</Id>
+<Id>24497493</Id>
+<Id>24488973</Id>
+<Id>24488972</Id>
+<Id>24488971</Id>
+<Id>24481254</Id>
+<Id>24481253</Id>
+<Id>24481252</Id>
+<Id>24477693</Id>
+<Id>24477692</Id>
+</IdList><TranslationSet><Translation>     <From>PNAS[ta]</From>     <To>"Proc Natl Acad Sci U S A"[Journal]</To>    </Translation></TranslationSet><TranslationStack>   <TermSet>    <Term>"Proc Natl Acad Sci U S A"[Journal]</Term>    <Field>Journal</Field>    <Count>120385</Count>    <Explode>N</Explode>   </TermSet>   <TermSet>    <Term>2014/01/01[PDAT]</Term>    <Field>PDAT</Field>    <Count>0</Count>    <Explode>N</Explode>   </TermSet>   <TermSet>    <Term>2014/02/01[PDAT]</Term>    <Field>PDAT</Field>    <Count>0</Count>    <Explode>N</Explode>   </TermSet>   <OP>RANGE</OP>   <OP>AND</OP>  </TranslationStack><QueryTranslation>"Proc Natl Acad Sci U S A"[Journal] AND 2014/01/01[PDAT] : 2014/02/01[PDAT]</QueryTranslation></eSearchResult>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/esearch.pubmed.xml	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,25 @@
+<?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>2651</Count><RetMax>20</RetMax><RetStart>0</RetStart><IdList>
+<Id>16578858</Id>
+<Id>11186225</Id>
+<Id>11121081</Id>
+<Id>11121080</Id>
+<Id>11121079</Id>
+<Id>11121078</Id>
+<Id>11121077</Id>
+<Id>11121076</Id>
+<Id>11121075</Id>
+<Id>11121074</Id>
+<Id>11121073</Id>
+<Id>11121072</Id>
+<Id>11121071</Id>
+<Id>11121070</Id>
+<Id>11121069</Id>
+<Id>11121068</Id>
+<Id>11121067</Id>
+<Id>11121066</Id>
+<Id>11121065</Id>
+<Id>11121064</Id>
+</IdList><TranslationSet><Translation>     <From>PNAS[ta]</From>     <To>"Proc Natl Acad Sci U S A"[Journal]</To>    </Translation></TranslationSet><TranslationStack>   <TermSet>    <Term>"Proc Natl Acad Sci U S A"[Journal]</Term>    <Field>Journal</Field>    <Count>120385</Count>    <Explode>N</Explode>   </TermSet>   <TermSet>    <Term>97[vi]</Term>    <Field>vi</Field>    <Count>74742</Count>    <Explode>N</Explode>   </TermSet>   <OP>AND</OP>   <OP>GROUP</OP>  </TranslationStack><QueryTranslation>"Proc Natl Acad Sci U S A"[Journal] AND 97[vi]</QueryTranslation></eSearchResult>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/esummary.tax.xml	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE eSummaryResult PUBLIC "-//NLM//DTD esummary v1 20060131//EN" "http://eutils.ncbi.nlm.nih.gov/eutils/dtd/20060131/esummary-v1.dtd">
+<eSummaryResult>
+<DocSum>
+	<Id>10239</Id>
+	<Item Name="Status" Type="String">active</Item>
+	<Item Name="Rank" Type="String">superkingdom</Item>
+	<Item Name="Division" Type="String">viruses</Item>
+	<Item Name="ScientificName" Type="String">Viruses</Item>
+	<Item Name="CommonName" Type="String"></Item>
+	<Item Name="TaxId" Type="Integer">10239</Item>
+	<Item Name="AkaTaxId" Type="Integer">0</Item>
+	<Item Name="Genus" Type="String"></Item>
+	<Item Name="Species" Type="String"></Item>
+	<Item Name="Subsp" Type="String"></Item>
+	<Item Name="ModificationDate" Type="Date">2010/11/23 00:00</Item>
+</DocSum>
+
+</eSummaryResult>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/example.history.json	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,4 @@
+{
+    "QueryKey": "1", 
+    "WebEnv": "NCID_1_9485527_130.14.22.215_9001_1430928295_33285243_0MetA0_S_MegaStore_F_1"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pm-tax-neighbor.xml	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE eLinkResult PUBLIC "-//NLM//DTD eLinkResult, 23 November 2010//EN" "http://www.ncbi.nlm.nih.gov/entrez/query/DTD/eLink_101123.dtd">
+<eLinkResult>
+
+	<LinkSet>
+		<DbFrom>taxonomy</DbFrom>
+		<IdList>
+			<Id>510899</Id>
+		</IdList>
+		
+		<LinkSetDb>
+			<DbTo>pubmed</DbTo>
+			<LinkName>taxonomy_pubmed_entrez</LinkName>
+			
+				<Link>
+				<Id>22241621</Id>
+			</Link>
+			
+		</LinkSetDb>
+		
+		
+	</LinkSet>
+</eLinkResult>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pubmed.metadata.xml	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,952 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE eInfoResult PUBLIC "-//NLM//DTD einfo 20130322//EN" "http://eutils.ncbi.nlm.nih.gov/eutils/dtd/20130322/einfo.dtd">
+<eInfoResult>
+	<DbInfo>
+	<DbName>pubmed</DbName>
+	<MenuName>PubMed</MenuName>
+	<Description>PubMed bibliographic record</Description>
+	<DbBuild>Build150413-2207m.6</DbBuild>
+	<Count>24802558</Count>
+	<LastUpdate>2015/04/14 12:42</LastUpdate>
+	<FieldList>
+		<Field>
+			<Name>ALL</Name>
+			<FullName>All Fields</FullName>
+			<Description>All terms from all searchable fields</Description>
+			<TermCount>154691781</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>N</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>UID</Name>
+			<FullName>UID</FullName>
+			<Description>Unique number assigned to publication</Description>
+			<TermCount>0</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>Y</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>Y</IsHidden>
+		</Field>
+		<Field>
+			<Name>FILT</Name>
+			<FullName>Filter</FullName>
+			<Description>Limits the records</Description>
+			<TermCount>8601</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>TITL</Name>
+			<FullName>Title</FullName>
+			<Description>Words in title of publication</Description>
+			<TermCount>15268356</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>N</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>WORD</Name>
+			<FullName>Text Word</FullName>
+			<Description>Free text associated with publication</Description>
+			<TermCount>52358108</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>N</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>MESH</Name>
+			<FullName>MeSH Terms</FullName>
+			<Description>Medical Subject Headings assigned to publication</Description>
+			<TermCount>600878</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>Y</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>MAJR</Name>
+			<FullName>MeSH Major Topic</FullName>
+			<Description>MeSH terms of major importance to publication</Description>
+			<TermCount>536728</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>Y</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>AUTH</Name>
+			<FullName>Author</FullName>
+			<Description>Author(s) of publication</Description>
+			<TermCount>13401867</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>JOUR</Name>
+			<FullName>Journal</FullName>
+			<Description>Journal abbreviation of publication</Description>
+			<TermCount>171935</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>AFFL</Name>
+			<FullName>Affiliation</FullName>
+			<Description>Author&apos;s institutional affiliation and address</Description>
+			<TermCount>29621384</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>N</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>ECNO</Name>
+			<FullName>EC/RN Number</FullName>
+			<Description>EC number for enzyme or CAS registry number</Description>
+			<TermCount>93885</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>SUBS</Name>
+			<FullName>Supplementary Concept</FullName>
+			<Description>CAS chemical name or MEDLINE Substance Name</Description>
+			<TermCount>237211</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>PDAT</Name>
+			<FullName>Date - Publication</FullName>
+			<Description>Date of publication</Description>
+			<TermCount>37386</TermCount>
+			<IsDate>Y</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>EDAT</Name>
+			<FullName>Date - Entrez</FullName>
+			<Description>Date publication first accessible through Entrez</Description>
+			<TermCount>36028</TermCount>
+			<IsDate>Y</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>VOL</Name>
+			<FullName>Volume</FullName>
+			<Description>Volume number of publication</Description>
+			<TermCount>13557</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>PAGE</Name>
+			<FullName>Pagination</FullName>
+			<Description>Page number(s) of publication</Description>
+			<TermCount>2353410</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>PTYP</Name>
+			<FullName>Publication Type</FullName>
+			<Description>Type of publication (e.g., review)</Description>
+			<TermCount>79</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>Y</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>LANG</Name>
+			<FullName>Language</FullName>
+			<Description>Language of publication</Description>
+			<TermCount>58</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>ISS</Name>
+			<FullName>Issue</FullName>
+			<Description>Issue number of publication</Description>
+			<TermCount>17711</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>SUBH</Name>
+			<FullName>MeSH Subheading</FullName>
+			<Description>Additional specificity for MeSH term</Description>
+			<TermCount>83</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>Y</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>SI</Name>
+			<FullName>Secondary Source ID</FullName>
+			<Description>Cross-reference from publication to other databases</Description>
+			<TermCount>6779854</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>MHDA</Name>
+			<FullName>Date - MeSH</FullName>
+			<Description>Date publication was indexed with MeSH terms</Description>
+			<TermCount>35878</TermCount>
+			<IsDate>Y</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>TIAB</Name>
+			<FullName>Title/Abstract</FullName>
+			<Description>Free text associated with Abstract/Title</Description>
+			<TermCount>44372743</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>N</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>OTRM</Name>
+			<FullName>Other Term</FullName>
+			<Description>Other terms associated with publication</Description>
+			<TermCount>1835400</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>N</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>INVR</Name>
+			<FullName>Investigator</FullName>
+			<Description>Investigator</Description>
+			<TermCount>1086629</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>COLN</Name>
+			<FullName>Author - Corporate</FullName>
+			<Description>Corporate Author of publication</Description>
+			<TermCount>194419</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>N</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>CNTY</Name>
+			<FullName>Place of Publication</FullName>
+			<Description>Country of publication</Description>
+			<TermCount>282</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>N</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>Y</IsHidden>
+		</Field>
+		<Field>
+			<Name>PAPX</Name>
+			<FullName>Pharmacological Action</FullName>
+			<Description>MeSH pharmacological action pre-explosions</Description>
+			<TermCount>528</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>GRNT</Name>
+			<FullName>Grant Number</FullName>
+			<Description>NIH Grant Numbers</Description>
+			<TermCount>3276710</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>MDAT</Name>
+			<FullName>Date - Modification</FullName>
+			<Description>Date of last modification</Description>
+			<TermCount>4279</TermCount>
+			<IsDate>Y</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>CDAT</Name>
+			<FullName>Date - Completion</FullName>
+			<Description>Date of completion</Description>
+			<TermCount>10579</TermCount>
+			<IsDate>Y</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>PID</Name>
+			<FullName>Publisher ID</FullName>
+			<Description>Publisher ID</Description>
+			<TermCount>15533205</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>Y</IsHidden>
+		</Field>
+		<Field>
+			<Name>FAUT</Name>
+			<FullName>Author - First</FullName>
+			<Description>First Author of publication</Description>
+			<TermCount>7233744</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>FULL</Name>
+			<FullName>Author - Full</FullName>
+			<Description>Full Author Name(s) of publication</Description>
+			<TermCount>9846664</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>FINV</Name>
+			<FullName>Investigator - Full</FullName>
+			<Description>Full name of investigator</Description>
+			<TermCount>629187</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>TT</Name>
+			<FullName>Transliterated Title</FullName>
+			<Description>Words in transliterated title of publication</Description>
+			<TermCount>2262379</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>N</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>LAUT</Name>
+			<FullName>Author - Last</FullName>
+			<Description>Last Author of publication</Description>
+			<TermCount>6397507</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>PPDT</Name>
+			<FullName>Print Publication Date</FullName>
+			<Description>Date of print publication</Description>
+			<TermCount>37379</TermCount>
+			<IsDate>Y</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>Y</IsHidden>
+		</Field>
+		<Field>
+			<Name>EPDT</Name>
+			<FullName>Electronic Publication Date</FullName>
+			<Description>Date of Electronic publication</Description>
+			<TermCount>5953</TermCount>
+			<IsDate>Y</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>Y</IsHidden>
+		</Field>
+		<Field>
+			<Name>LID</Name>
+			<FullName>Location ID</FullName>
+			<Description>ELocation ID</Description>
+			<TermCount>6006625</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>CRDT</Name>
+			<FullName>Date - Create</FullName>
+			<Description>Date publication first accessible through Entrez</Description>
+			<TermCount>28887</TermCount>
+			<IsDate>Y</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>BOOK</Name>
+			<FullName>Book</FullName>
+			<Description>ID of the book that contains the document</Description>
+			<TermCount>3159</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>ED</Name>
+			<FullName>Editor</FullName>
+			<Description>Section&apos;s Editor</Description>
+			<TermCount>2696</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>ISBN</Name>
+			<FullName>ISBN</FullName>
+			<Description>ISBN</Description>
+			<TermCount>2291</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>PUBN</Name>
+			<FullName>Publisher</FullName>
+			<Description>Publisher&apos;s name</Description>
+			<TermCount>365</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>AUCL</Name>
+			<FullName>Author Cluster ID</FullName>
+			<Description>Author Cluster ID</Description>
+			<TermCount>0</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>Y</IsHidden>
+		</Field>
+		<Field>
+			<Name>EID</Name>
+			<FullName>Extended PMID</FullName>
+			<Description>Extended PMID</Description>
+			<TermCount>24794877</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>Y</IsHidden>
+		</Field>
+		<Field>
+			<Name>DSO</Name>
+			<FullName>DSO</FullName>
+			<Description>Additional text from the summary</Description>
+			<TermCount>220545</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>N</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>Y</IsHidden>
+		</Field>
+		<Field>
+			<Name>AUID</Name>
+			<FullName>Author - Identifier</FullName>
+			<Description>Author Identifier</Description>
+			<TermCount>118063</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+		<Field>
+			<Name>PS</Name>
+			<FullName>Subject - Personal Name</FullName>
+			<Description>Personal Name as Subject</Description>
+			<TermCount>433855</TermCount>
+			<IsDate>N</IsDate>
+			<IsNumerical>N</IsNumerical>
+			<SingleToken>Y</SingleToken>
+			<Hierarchy>N</Hierarchy>
+			<IsHidden>N</IsHidden>
+		</Field>
+	</FieldList>
+		<LinkList>
+			<Link>
+				<Name>pubmed_assembly</Name>
+				<Menu>Assembly</Menu>
+				<Description>Assembly</Description>
+				<DbTo>assembly</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_bioproject</Name>
+				<Menu>Project Links</Menu>
+				<Description>Related Projects</Description>
+				<DbTo>bioproject</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_biosample</Name>
+				<Menu>BioSample Links</Menu>
+				<Description>BioSample links</Description>
+				<DbTo>biosample</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_biosystems</Name>
+				<Menu>BioSystem Links</Menu>
+				<Description>Pathways and biological systems (BioSystems) that cite the current articles. Citations are from the BioSystems source databases (KEGG and BioCyc).</Description>
+				<DbTo>biosystems</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_books_refs</Name>
+				<Menu>Cited in Books</Menu>
+				<Description>NCBI Bookshelf books that cite the current articles.</Description>
+				<DbTo>books</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_cdd</Name>
+				<Menu>Domain Links</Menu>
+				<Description>Conserved Domain Database (CDD) records that cite the current articles. Citations are from the CDD source database records (PFAM, SMART).</Description>
+				<DbTo>cdd</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_clinvar</Name>
+				<Menu>ClinVar</Menu>
+				<Description>Clinical variations associated with publication</Description>
+				<DbTo>clinvar</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_clinvar_calculated</Name>
+				<Menu>ClinVar (calculated)</Menu>
+				<Description>Clinical variations calculated to be associated with publication</Description>
+				<DbTo>clinvar</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_dbvar</Name>
+				<Menu>dbVar</Menu>
+				<Description>Link from PubMed to dbVar</Description>
+				<DbTo>dbvar</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_epigenomics_experiment</Name>
+				<Menu>Epigenomics (experiments)</Menu>
+				<Description>Links to experimental data from epigenomic studies</Description>
+				<DbTo>epigenomics</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_epigenomics_sample</Name>
+				<Menu>Epigenomics (samples)</Menu>
+				<Description>Links to descriptions of biological samples used in epigenomic studies</Description>
+				<DbTo>epigenomics</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_epigenomics_study</Name>
+				<Menu>Epigenomics (study)</Menu>
+				<Description>Links to overviews of epigenomic studies</Description>
+				<DbTo>epigenomics</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_gap</Name>
+				<Menu>dbGaP Links</Menu>
+				<Description>Genotypes and Phenotypes (dbGaP) studies that cite the current articles.</Description>
+				<DbTo>gap</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_gds</Name>
+				<Menu>GEO DataSet Links</Menu>
+				<Description>Gene expression and molecular abundance data reported in the current articles that are also included in the curated Gene Expression Omnibus (GEO) DataSets.</Description>
+				<DbTo>gds</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_gene</Name>
+				<Menu>Gene Links</Menu>
+				<Description>Gene records that cite the current articles. Citations in Gene are added manually by NCBI or imported from outside public resources.</Description>
+				<DbTo>gene</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_gene_bookrecords</Name>
+				<Menu>Gene (from Bookshelf)</Menu>
+				<Description>Gene records in this citation</Description>
+				<DbTo>gene</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_gene_citedinomim</Name>
+				<Menu>Gene (OMIM) Links</Menu>
+				<Description>Gene records associated with Online Mendelian Inheritance in Man (OMIM) records that cite the current articles in their reference lists.</Description>
+				<DbTo>gene</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_gene_pmc_nucleotide</Name>
+				<Menu>Gene (nucleotide/PMC)</Menu>
+				<Description>Records in Gene identified from shared sequence and PMC links.</Description>
+				<DbTo>gene</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_gene_rif</Name>
+				<Menu>Gene (GeneRIF) Links</Menu>
+				<Description>Gene records that have the current articles as Reference into Function citations (GeneRIFs). NLM staff reviewing the literature while indexing MEDLINE add GeneRIFs manually.</Description>
+				<DbTo>gene</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_genome</Name>
+				<Menu>Genome Links</Menu>
+				<Description>Genome records that include the current articles as references. These are typically the articles that report the sequencing and analysis of the genome.</Description>
+				<DbTo>genome</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_geoprofiles</Name>
+				<Menu>GEO Profile Links</Menu>
+				<Description>Gene Expression Omnibus (GEO) Profiles of molecular abundance data. The current articles are references on the Gene record associated with the GEO profile.</Description>
+				<DbTo>geoprofiles</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_homologene</Name>
+				<Menu>HomoloGene Links</Menu>
+				<Description>HomoloGene clusters of homologous genes and sequences that cite the current articles. These are references on the Gene and sequence records in the HomoloGene entry.</Description>
+				<DbTo>homologene</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_medgen</Name>
+				<Menu>MedGen</Menu>
+				<Description>Related information in MedGen</Description>
+				<DbTo>medgen</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_medgen_bookshelf_cited</Name>
+				<Menu>MedGen (Bookshelf cited)</Menu>
+				<Description>Related records in MedGen based on citations in GeneReviews and Medical Genetics Summaries</Description>
+				<DbTo>medgen</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_medgen_genereviews</Name>
+				<Menu>MedGen (GeneReviews)</Menu>
+				<Description>Related MedGen records</Description>
+				<DbTo>medgen</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_medgen_omim</Name>
+				<Menu>MedGen (OMIM)</Menu>
+				<Description>Related information in MedGen (OMIM)</Description>
+				<DbTo>medgen</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_nuccore</Name>
+				<Menu>Nucleotide Links</Menu>
+				<Description>Primary database (GenBank) nucleotide records reported in the current articles as well as Reference Sequences (RefSeqs) that include the articles as references.</Description>
+				<DbTo>nuccore</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_nuccore_refseq</Name>
+				<Menu>Nucleotide (RefSeq) Links</Menu>
+				<Description>NCBI nucleotide Reference Sequences (RefSeqs) that are cited in the current articles, included in the corresponding Gene Reference into Function, or that include the PubMed articles as references.</Description>
+				<DbTo>nuccore</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_nuccore_weighted</Name>
+				<Menu>Nucleotide (Weighted) Links</Menu>
+				<Description>Nucleotide records associated with the current articles through the Gene database. These are the related sequences on the Gene record that are added manually by NCBI.</Description>
+				<DbTo>nuccore</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_nucest</Name>
+				<Menu>EST Links</Menu>
+				<Description>Expressed Sequence Tag (EST) nucleotide sequence records reported in the current articles.</Description>
+				<DbTo>nucest</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_nucgss</Name>
+				<Menu>GSS Links</Menu>
+				<Description>Genome Survey Sequence (GSS) nucleotide records reported in the current articles.</Description>
+				<DbTo>nucgss</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_omim_bookrecords</Name>
+				<Menu>OMIM (from Bookshelf)</Menu>
+				<Description>OMIM records in this citation</Description>
+				<DbTo>omim</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_omim_calculated</Name>
+				<Menu>OMIM (calculated) Links</Menu>
+				<Description>Online Mendelian Inheritance in Man (OMIM) records that include the current articles as references in the light bulb links within or in the citations at the end of the OMIM record. The references available through the light bulb link are collected using the PubMed related articles algorithm to identify records with similar terminology to the OMIM record.</Description>
+				<DbTo>omim</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_omim_cited</Name>
+				<Menu>OMIM (cited) Links</Menu>
+				<Description>Online Mendelian Inheritance in Man (OMIM) records that include the current articles as reference cited at the end of the OMIM record.</Description>
+				<DbTo>omim</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pcassay</Name>
+				<Menu>PubChem BioAssay</Menu>
+				<Description>PubChem BioAssay experiments on the biological activities of small molecules that cite the current articles. The depositors of BioAssay data provide these references.</Description>
+				<DbTo>pcassay</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pccompound</Name>
+				<Menu>PubChem Compound</Menu>
+				<Description>PubChem chemical compound records that cite the current articles. These references are taken from those provided on submitted PubChem chemical substance records. Multiple substance records may contribute to the PubChem compound record.</Description>
+				<DbTo>pccompound</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pccompound_mesh</Name>
+				<Menu>PubChem Compound (MeSH Keyword)</Menu>
+				<Description>PubChem chemical compound records that are classified under the same Medical Subject Headings (MeSH) controlled vocabulary as the current articles.</Description>
+				<DbTo>pccompound</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pccompound_publisher</Name>
+				<Menu>PubChem Compound (Publisher)</Menu>
+				<Description>Link to publisher deposited structures in the PubChem Compound database.</Description>
+				<DbTo>pccompound</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pcsubstance</Name>
+				<Menu>PubChem Substance Links</Menu>
+				<Description>PubChem chemical substance records that cite the current articles. These references are taken from those provided on submitted PubChem chemical substance records.</Description>
+				<DbTo>pcsubstance</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pcsubstance_bookrecords</Name>
+				<Menu>PubChem Substance (from Bookshelf)</Menu>
+				<Description>Structures in the PubChem Substance database in this citation</Description>
+				<DbTo>pcsubstance</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pcsubstance_mesh</Name>
+				<Menu>PubChem Substance (MeSH Keyword)</Menu>
+				<Description>PubChem chemical substance (submitted) records that are classified under the same Medical Subject Headings (MeSH) controlled vocabulary as the current articles.</Description>
+				<DbTo>pcsubstance</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pcsubstance_publisher</Name>
+				<Menu>PubChem Substance (Publisher)</Menu>
+				<Description>Publisher deposited structures in the PubChem Compound database that are reported in the current articles.</Description>
+				<DbTo>pcsubstance</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pmc</Name>
+				<Menu>PMC Links</Menu>
+				<Description>Free full-text versions of the current articles in the PubMed Central database.</Description>
+				<DbTo>pmc</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pmc_bookrecords</Name>
+				<Menu>References in PMC for this Bookshelf citation</Menu>
+				<Description>Full text of articles in PubMed Central cited in this record</Description>
+				<DbTo>pmc</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pmc_embargo</Name>
+				<Menu></Menu>
+				<Description>Embargoed PMC article associated with PubMed</Description>
+				<DbTo>pmc</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pmc_local</Name>
+				<Menu></Menu>
+				<Description>Free full text articles in PMC</Description>
+				<DbTo>pmc</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pmc_refs</Name>
+				<Menu>Cited in PMC</Menu>
+				<Description>Full-text articles in the PubMed Central Database that cite the current articles.</Description>
+				<DbTo>pmc</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_popset</Name>
+				<Menu>PopSet Links</Menu>
+				<Description>Sets of sequences from population and evolutionary genetic studies in the PopSet database reported in the current articles.</Description>
+				<DbTo>popset</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_probe</Name>
+				<Menu>Probe Links</Menu>
+				<Description>Molecular reagents in the Probe database that cite the current articles. References in Probe are provided by submitters of the data.</Description>
+				<DbTo>probe</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_protein</Name>
+				<Menu>Protein Links</Menu>
+				<Description>Protein translation features of primary database (GenBank) nucleotide records reported in the current articles as well as Reference Sequences (RefSeqs) that include the articles as references.</Description>
+				<DbTo>protein</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_protein_refseq</Name>
+				<Menu>Protein (RefSeq) Links</Menu>
+				<Description>NCBI protein Reference Sequences (RefSeqs) that are cited in the current articles, included in the corresponding Gene Reference into Function, or that include the PubMed articles as references.</Description>
+				<DbTo>protein</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_protein_weighted</Name>
+				<Menu>Protein (Weighted) Links</Menu>
+				<Description>Protein records associated with the current articles through related Gene database records. These are the related sequences on the Gene record that are added manually by NCBI.</Description>
+				<DbTo>protein</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_proteinclusters</Name>
+				<Menu>Protein Cluster Links</Menu>
+				<Description>Clusters of related proteins from the Protein Clusters database that cite the current articles. Sources of references in Protein Clusters include the associated Gene and Conserved Domain records as well as NCBI added citations.</Description>
+				<DbTo>proteinclusters</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pubmed</Name>
+				<Menu>Related Citations</Menu>
+				<Description>Calculated set of PubMed citations closely related to the selected article(s) retrieved using a word weight algorithm. Related articles are displayed in ranked order from most to least relevant, with the “linked from” citation displayed first.</Description>
+				<DbTo>pubmed</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pubmed_alsoviewed</Name>
+				<Menu>Articles frequently viewed together</Menu>
+				<Description>&lt;p&gt;Links to additional articles that others frequently viewed together with your selection.&lt;/p&gt;&lt;p&gt;&lt;i&gt;An experimental new feature from PubMed Labs&lt;/i&gt;.&lt;/p&gt;</Description>
+				<DbTo>pubmed</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pubmed_bookrecords</Name>
+				<Menu>References for this Bookshelf citation</Menu>
+				<Description>PubMed abstracts for articles cited in this record</Description>
+				<DbTo>pubmed</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pubmed_pmh_cited</Name>
+				<Menu>Clinical Trial Review</Menu>
+				<Description>PubMed records cited in PubMed Health systematic reviews</Description>
+				<DbTo>pubmed</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_pubmed_refs</Name>
+				<Menu>References for PMC Articles</Menu>
+				<Description>Citation referenced in PubMed article. Only valid for PubMed citations that are also in PMC.</Description>
+				<DbTo>pubmed</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_snp</Name>
+				<Menu>SNP Links</Menu>
+				<Description>Nucleotide polymorphism records from dbSNP that have current articles as submitter-provided references.</Description>
+				<DbTo>snp</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_snp_cited</Name>
+				<Menu>SNP (Cited)</Menu>
+				<Description>Nucleotide polymorphism records from dbSNP that have NCBI dbSNP identifiers reported in the PubMed abstract of the current articles.</Description>
+				<DbTo>snp</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_sra</Name>
+				<Menu>SRA Links</Menu>
+				<Description>Massively-parallel sequencing project data in the Short Read Archive (SRA) that are reported in the current articles.</Description>
+				<DbTo>sra</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_structure</Name>
+				<Menu>Structure Links</Menu>
+				<Description>Three-dimensional structure records in the NCBI Structure database for data reported in the current articles.</Description>
+				<DbTo>structure</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_taxonomy_entrez</Name>
+				<Menu>Taxonomy via GenBank</Menu>
+				<Description>Taxonomy records associated with the current articles through taxonomic information on related molecular database records (Nucleotide, Protein, Gene, SNP, Structure).</Description>
+				<DbTo>taxonomy</DbTo>
+			</Link>
+			<Link>
+				<Name>pubmed_unigene</Name>
+				<Menu>UniGene Links</Menu>
+				<Description>UniGene clusters of expressed sequences that are associated with the current articles through references on the clustered sequence records and related Gene records.</Description>
+				<DbTo>unigene</DbTo>
+			</Link>
+		</LinkList>
+	</DbInfo>
+
+</eInfoResult>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/viruses.tax.xml	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!DOCTYPE TaxaSet PUBLIC "-//NLM//DTD Taxon, 14th January 2002//EN" "http://www.ncbi.nlm.nih.gov/entrez/query/DTD/taxon.dtd">
+<TaxaSet><Taxon>
+    <TaxId>10239</TaxId>
+    <ScientificName>Viruses</ScientificName>
+    <OtherNames>
+        <BlastName>viruses</BlastName>
+        <Synonym>Vira</Synonym>
+        <Synonym>Viridae</Synonym>
+    </OtherNames>
+    <ParentTaxId>1</ParentTaxId>
+    <Rank>superkingdom</Rank>
+    <Division>Viruses</Division>
+    <GeneticCode>
+        <GCId>1</GCId>
+        <GCName>Standard</GCName>
+    </GeneticCode>
+    <MitoGeneticCode>
+        <MGCId>0</MGCId>
+        <MGCName>Unspecified</MGCName>
+    </MitoGeneticCode>
+    <Lineage/>
+    <CreateDate>1995/02/27 09:24:00</CreateDate>
+    <UpdateDate>2010/11/23 11:40:11</UpdateDate>
+    <PubDate>1993/04/20 01:00:00</PubDate>
+</Taxon>
+
+</TaxaSet>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_dependencies.xml	Sat Oct 31 12:44:54 2015 -0400
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<tool_dependency>
+  <set_environment version="1.0">
+    <environment_variable action="set_to" name="NCBI_EUTILS_CONTACT">/please set the administrator's contact email in the corresponding env.sh file/</environment_variable>
+  </set_environment>
+  <package name="biopython" version="1.66">
+    <repository changeset_revision="ef89610ae47c" name="package_biopython_1_66" owner="biopython" prior_installation_required="True" toolshed="https://testtoolshed.g2.bx.psu.edu" />
+  </package>
+</tool_dependency>