Bio.Entrez.Parser 模組

用於解析 NCBI Entrez Utilities 返回的 XML 結果的解析器。

此解析器由 Bio.Entrez 中的 read() 函數使用,不適合直接使用。

問題是如何將 XML 檔案表示為 Python 物件。NCBI 返回的一些 XML 檔案看起來像列表,另一些看起來像字典,還有一些看起來像是列表和字典的混合體。

我的方法是將 XML 中的每個可能元素分類為純字串、整數、列表、字典或結構。後者是一個字典,其中相同的鍵可以多次出現;在 Python 中,它表示為字典,其中該鍵出現一次,指向在 XML 檔案中找到的值的列表。

然後,解析器會遍歷 XML,並為每個元素建立適當的 Python 物件。在 Python 端保留 XML 中遇到的不同層級。因此,元素的子元素的子元素是字典中的值,該字典儲存在列表中,該列表又是某些其他字典中的值(或列表中的值,而列表本身屬於列表,該列表是字典中的值,依此類推)。在 XML 中遇到的屬性會以字典形式儲存在每個元素的 .attributes 成員中,而標籤名稱會儲存在 .tag 成員中。

為了決定哪種 Python 物件對應於 XML 中的每個元素,解析器會分析 Entrez Utilities 返回的(幾乎)每個 XML 檔案頂部引用的 DTD。這比手動編寫的解決方案更可取,因為 DTD 的數量相當多,而且它們的內容可能會隨著時間而變化。此解析器中約有一半的程式碼用於解析 DTD,另一半則用於 XML 本身。

class Bio.Entrez.Parser.NoneElement(tag, attributes, key)

基底類別:object

NCBI Entrez XML 元素對應至 None。

__init__(tag, attributes, key)

建立 NoneElement。

__eq__(other)

定義與其他 None 物件的相等性。

__ne__(other)

定義不相等性。

__repr__()

傳回物件的字串表示法。

__hash__ = None
class Bio.Entrez.Parser.IntegerElement(value, *args, **kwargs)

基底類別:int

NCBI Entrez XML 元素對應至整數。

static __new__(cls, value, *args, **kwargs)

建立 IntegerElement。

__init__(value, tag, attributes, key)

初始化 IntegerElement。

__repr__()

傳回物件的字串表示法。

class Bio.Entrez.Parser.StringElement(value, *args, **kwargs)

基底類別:str

NCBI Entrez XML 元素對應至字串。

static __new__(cls, value, *args, **kwargs)

建立 StringElement。

__init__(value, tag, attributes, key)

初始化 StringElement。

__repr__()

傳回物件的字串表示法。

class Bio.Entrez.Parser.ListElement(tag, attributes, allowed_tags, key=None)

基底類別:list

NCBI Entrez XML 元素對應至列表。

__init__(tag, attributes, allowed_tags, key=None)

建立 ListElement。

__repr__()

傳回物件的字串表示法。

store(value)

將元素附加到列表,並檢查標籤。

class Bio.Entrez.Parser.DictionaryElement(tag, attrs, allowed_tags, repeated_tags=None, key=None)

基底類別:dict

NCBI Entrez XML 元素對應至字典。

__init__(tag, attrs, allowed_tags, repeated_tags=None, key=None)

建立 DictionaryElement。

__repr__()

傳回物件的字串表示法。

store(value)

將條目新增至字典,並檢查標籤。

class Bio.Entrez.Parser.OrderedListElement(tag, attributes, allowed_tags, first_tag, key=None)

基底類別:list

對應到列表的 NCBI Entrez XML 元素。

OrderedListElement 用於描述重複元素列表,例如 A, B, C, A, B, C, A, B, C ...,其中每組 A, B, C 形成一個群組。然後將其儲存為 [[A, B, C], [A, B, C], [A, B, C], …]

__init__(tag, attributes, allowed_tags, first_tag, key=None)

建立 OrderedListElement。

__repr__()

傳回物件的字串表示法。

store(value)

將元素附加到列表,並檢查標籤。

class Bio.Entrez.Parser.ErrorElement(value, *args, **kwargs)

基底類別:str

包含錯誤訊息的 NCBI Entrez XML 元素。

static __new__(cls, value, *args, **kwargs)

建立 ErrorElement。

__init__(value, tag)

初始化 ErrorElement。

__repr__()

以字串形式傳回錯誤訊息。

exception Bio.Entrez.Parser.NotXMLError(message)

基底:ValueError

無法將檔案剖析為 XML。

__init__(message)

初始化類別。

__str__()

傳回例外狀況的字串摘要。

exception Bio.Entrez.Parser.CorruptedXMLError(message)

基底:ValueError

XML 已損毀。

__init__(message)

初始化類別。

__str__()

傳回例外狀況的字串摘要。

exception Bio.Entrez.Parser.ValidationError(name)

基底:ValueError

找到未在 DTD 中定義的 XML 標籤。

如果剖析器在 XML 中找到未在 DTD 中定義的標籤,驗證剖析器會引發此錯誤。非驗證剖析器不會引發此錯誤。預設情況下,Bio.Entrez.read 和 Bio.Entrez.parse 函式會使用驗證剖析器(請參閱這些函式以取得更多資訊)。

__init__(name)

初始化類別。

__str__()

傳回例外狀況的字串摘要。

class Bio.Entrez.Parser.DataHandlerMeta(*args, **kwargs)

基底:type

在 Python 支援 @classproperty 之前,需要中繼類別。

__init__(*args, **kwargs)

初始化類別。

property directory

快取 XSD 和 DTD 檔案的目錄。

class Bio.Entrez.Parser.DataHandler(validate, escape, ignore_errors)

基底類別:object

用於剖析來自 Entrez 的 NCBI XML 的資料處理常式。

global_dtd_dir = '/home/circleci/.pyenv/versions/3.9.19/lib/python3.9/site-packages/Bio/Entrez/DTDs'
global_xsd_dir = '/home/circleci/.pyenv/versions/3.9.19/lib/python3.9/site-packages/Bio/Entrez/XSDs'
local_dtd_dir = '/home/circleci/.config/biopython/Bio/Entrez/DTDs'
local_xsd_dir = '/home/circleci/.config/biopython/Bio/Entrez/XSDs'
__init__(validate, escape, ignore_errors)

建立 DataHandler 物件。

read(source)

設定剖析器並讓它讀取 XML 結果。

parse(source)

設定剖析器並讓它讀取 XML 結果。

xmlDeclHandler(version, encoding, standalone)

當找到 XML 宣告時,設定 XML 處理常式。

handleMissingDocumentDefinition(tag, attrs)

如果沒有找到 DTD 或 XML 綱要,則引發例外狀況。

startNamespaceDeclHandler(prefix, uri)

處理 XML 命名空間宣告的開始。

endNamespaceDeclHandler(prefix)

處理 XML 命名空間宣告的結束。

schemaHandler(name, attrs)

處理 XML 綱要(在處理元素之前)。

startElementHandler(tag, attrs)

處理 XML 元素的開始。

startRawElementHandler(name, attrs)

處理 XML 原始元素的開始。

startSkipElementHandler(name, attrs)

處理 XML 跳過元素的開始。

endStringElementHandler(tag)

處理 XML 字串元素的結束。

endRawElementHandler(name)

處理 XML 原始元素的結束。

endSkipElementHandler(name)

處理 XML 跳過元素的結束。

endErrorElementHandler(tag)

處理 XML 錯誤元素的結束。

endElementHandler(name)

處理 XML 元素的結束。

endIntegerElementHandler(tag)

處理 XML 整數元素的結束。

characterDataHandlerRaw(content)

將字元資料原封不動地 (raw) 處理。

characterDataHandlerEscape(content)

透過編碼處理字元資料。

skipCharacterDataHandler(content)

透過跳過處理字元資料。

parse_xsd(root)

解析 XSD 檔案。

elementDecl(name, model)

為 DTD 中的每個元素宣告呼叫回呼函式。

這用於 DTD 中像這樣的每個元素宣告

<!ELEMENT       name          (...)>

此函式的目的是判斷此元素是否應被視為字串、整數、列表、字典、結構或錯誤。

open_dtd_file(filename)

開啟指定的 DTD 檔案。

open_xsd_file(filename)

開啟指定的 XSD 檔案。

save_dtd_file(filename, text)

將 DTD 檔案儲存至快取。

save_xsd_file(filename, text)

將 XSD 檔案儲存至快取。

externalEntityRefHandler(context, base, systemId, publicId)

處理外部實體參考,以便在本機快取 DTD。

此函式的目的是在本機載入 DTD,而不是從 XML 中指定的 URL 下載。使用本機 DTD 可以加快解析速度。如果在本機找不到 DTD,我們會嘗試下載。如果 NCBI 提供了新的 DTD,將它們放入 Bio/Entrez/DTDs 將允許解析器看到它們。