Bio.Entrez.Parser 模块

用于解析 NCBI Entrez 工具返回的 XML 结果的解析器。

此解析器由 Bio.Entrez 中的 read() 函数使用,不建议直接使用。

问题是如何将 XML 文件表示为 Python 对象。NCBI 返回的一些 XML 文件看起来像列表,另一些看起来像字典,还有一些看起来像列表和字典的混合。

我的方法是将 XML 中的每个可能元素分类为普通字符串、整数、列表、字典或结构。后者是一个字典,其中同一个键可以多次出现;在 Python 中,它表示为一个字典,其中该键只出现一次,指向在 XML 文件中找到的值列表。

解析器然后遍历 XML,为每个元素创建相应的 Python 对象。在 XML 中遇到的不同级别在 Python 侧得以保留。因此,元素的子元素的子元素是在字典中存储的列表中的一个值,该列表是某个其他字典中的一个值(或者是在列表中的一个值,该列表本身属于列表,该列表是字典中的一个值,等等)。在 XML 中遇到的属性作为字典存储在每个元素的 .attributes 成员中,并且标签名称存储在 .tag 成员中。

为了确定哪种 Python 对象对应于 XML 中的每个元素,解析器分析了(几乎)每个由 Entrez 工具返回的 XML 文件顶部引用的 DTD。这比手工解决方案更可取,因为 DTD 的数量相当大,它们的内容可能会随着时间的推移而发生变化。此解析器中大约一半的代码用于解析 DTD,而另一半用于解析 XML 本身。

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

基类:object

映射到 None 的 NCBI Entrez XML 元素。

__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)

Bases: ValueError

无法将文件解析为 XML。

__init__(message)

初始化类。

__str__()

返回异常的字符串摘要。

exception Bio.Entrez.Parser.CorruptedXMLError(message)

Bases: ValueError

损坏的 XML。

__init__(message)

初始化类。

__str__()

返回异常的字符串摘要。

exception Bio.Entrez.Parser.ValidationError(name)

Bases: ValueError

在 DTD 中未定义的 XML 标签。

如果解析器在 XML 中找到 DTD 中未定义的标签,验证解析器将引发此错误。非验证解析器不会引发此错误。Bio.Entrez.read 和 Bio.Entrez.parse 函数默认使用验证解析器(有关更多信息,请参见这些函数)。

__init__(name)

初始化类。

__str__()

返回异常的字符串摘要。

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

Bases: 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)

按原样处理字符数据(原始)。

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 中将允许解析器看到它们。