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 將允許解析器看到它們。