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