這不是一個真正有效的解決方案,而是顯示出問題所在。我認爲這可能是一個biopython(Entrez.Parse)錯誤,所以我會與他們聯繫並看看他們的想法。
因此,Biopython的一些黑客攻擊顯示問題是由於'build'標籤名稱。
如果我們手動做到這一點,pubmed
XML請求的前幾行看起來像這樣
<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 $
我的猜測是自那時起已經添加了構建標記,但是這個文件從未被更新以反映這一點。