This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Biopython - The new RefSeq release from NCBI and Bio.Entrez.Parser compatibility?

Hello, I'm new with python and especially with Biopython. I'm trying to take some information from an XML file with Entrez.efetch and then read it. Last week this script worked well:

handle = Entrez.efetch(db="Protein", id="YP_008872780.1", retmode="xml")
records = Entrez.read(handle)

But now I'm getting an Error:

Bio.Entrez.Parser.ValidationError: Failed to find tag 'GBSeq_xrefs' in the DTD. To skip all tags that are not represented in the DTD, please call Bio.Entrez.read or Bio.Entrez.parse with validate=False.

So I run this:

records = Entrez.read(handle, validate=False)

But I'm still getting an Error:

TypeError: 'str' object does not support item assignment

After some research I realized that NCBI made new changes concerning the RefSeq which creates new tags in the xml file (of GenPept): http://www.ncbi.nlm.nih.gov/mailman/pipermail/refseq-announce/2014q2/000117.html

Do I need to change something in the DTD to support these new tags?

Thank you very much for your support.

biopython ncbi entrez xml refseq

1 answer

The DTD used by Bio.Entrez is out of date.

Download the DTD from here

Put it in the Bio.Entrez DTDs folder.

To find the location of the folder:

>>> from Bio import Entrez
>>> Entrez.__file__

The folder is xxxxxxxxxxxxxxxxxxxx/Bio/Entrez/DTDs

It works. I didn't know where to find a new version of the DTD file.

Thank you very much! :)

Log in to answer this question.