Bio.Entrez.Parser模块

NCBI的Entrez实用程序返回的XML结果的解析器。

该解析器由Bio.Entrez中的read()函数使用,并不打算直接使用。

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

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

然后,解析器遍历XML并为每个元素创建适当的Python对象。在Python端保留了XML中遇到的不同级别。因此,元素的子元素的子元素是存储在列表中的字典中的值,该列表是其他字典中的值(或者列表中的值本身属于作为字典中的值的列表,依此类推)。XML中遇到的属性作为字典存储在每个元素的成员.properties中,标记名保存在成员.tag中。

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

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

基类:object

NCBI Entrez XML元素映射为无。

__init__(tag, attributes, key=None)

创建NoneElement。

__eq__(other)

定义与其他无对象相等。

__ne__(other)

定义不平等。

__repr__()

返回对象的字符串表示形式。

__hash__ = None
class Bio.Entrez.Parser.IntegerElement(value, tag, attributes, key=None)

基类:int

映射到整数的NCBI Entrez XML元素。

static __new__(cls, value, tag, attributes, key=None)

创建一个IntegerElement。

__repr__()

返回对象的字符串表示形式。

class Bio.Entrez.Parser.StringElement(value, tag, attributes, key=None)

基类:str

映射到字符串的NCBI Entrez XML元素。

static __new__(cls, value, tag, attributes, key=None)

创建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)

向字典中添加一个条目,检查标签。

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)

基类:object

用于从Entrez解析NCBI XML的数据处理程序。

global_dtd_dir = '/xpy/lib/python3.9/site-packages/Bio/Entrez/DTDs'
global_xsd_dir = '/xpy/lib/python3.9/site-packages/Bio/Entrez/XSDs'
local_dtd_dir = ''
local_xsd_dir = ''
__init__(validate, escape)

创建一个DataHandler对象。

read(handle)

设置解析器并让它解析XML结果。

parse(handle)

解析给定文件句柄中的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(name)

处理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,我们会尝试下载它。如果新的DTD可从NCBI获得,则将它们放入Bio/Entrez/DTD中将允许解析器看到它们。