这不是一个真正有效的解决方案,但显示了问题所在。我认为这可能是 biopython (Entrez.Parse) 错误,所以我会与他们取得联系,看看他们的想法。
因此,Biopython 的一些黑客行为表明问题在于“构建”标签名称。
如果我们手动执行此操作,XML 请求的前几行pubmed
如下所示
<eInfoResult>
<DbInfo>
<DbName>pubmed</DbName>
<MenuName>PubMed</MenuName>
<Description>PubMed bibliographic record</Description>
<Count>22224084</Count>
<LastUpdate>2012/10/30 03:30</LastUpdate>
....
但是蛋白质请求看起来像这样;
<eInfoResult>
<DbInfo>
<DbName>protein</DbName>
<MenuName>Protein</MenuName>
<Description>Protein sequence record</Description>
<Build>Build121030-0741m.1</Build> <-------- THIS IS BAD
<Count>59244879</Count>
<LastUpdate>2012/10/30 18:39</LastUpdate>
我看了一下 Entrez.Parser 的工作原理,它基本上无法识别build
标签。进一步生根显示标签是在 DTD 文件和 einfo DTD 文件中定义的,在我的系统上是这里;
/usr/local/lib/python2.7/dist-packages/Bio/Entrez/DTDs
如果我们检查相关文件eInfo_020511.dtd
并添加一个构建标记行(下面带有箭头的行以前不存在);
<!--
This is the Current DTD for Entrez eInfo
$Id: eInfo_020511.dtd,v 1.1 2008-05-13 11:17:44 mdehoon Exp $
-->
<!-- ================================================================= -->
<!ELEMENT DbName (#PCDATA)> <!-- \S+ -->
<!ELEMENT Name (#PCDATA)> <!-- .+ -->
<!ELEMENT FullName (#PCDATA)> <!-- .+ -->
<!ELEMENT Description (#PCDATA)> <!-- .+ -->
<!ELEMENT Build (#PCDATA)> <!-- .+ --> <------- I ADDED THIS LINE
<!ELEMENT TermCount (#PCDATA)> <!-- \d+ -->
<!ELEMENT Menu (#PCDATA)> <!-- .+ -->
现在可以了。对该文件的评论表明它自 2008 年以来没有更新(下面的行来自 DTD 标头)。
$Id: eInfo_020511.dtd,v 1.1 2008-05-13 11:17:44 mdehoon Exp $
我的猜测是,从那时起就添加了构建标签,但该文件从未更新以反映这一点。