一种文档的存储方法

文档序号:6513087阅读:549来源:国知局
一种文档的存储方法
【专利摘要】本发明公开了一种文档的存储方法,预先配置由至少一种结点类型定义的且具有树型结构文档类型,设置包括结点索引表和结点数据区的文档存储格式,该方法包括:确定文档的文档类型,根据该文档类型,将文档的内容映射为对应树型结构中的各个结点及其数据;根据对应的树型结构中的各个结点及其数据,为文档分配存储空间,在分配的存储空间中为结点索引表和结点数据区分配各自的存储区域;在分配的结点数据区中存储结点的数据,并在分配的结点索引表中记录每个结点与该结点数据存储位置的对应关系。应用本发明的存储方法,能够提高文档的访问性能。
【专利说明】一种文档的存储方法

【技术领域】
[0001] 本发明涉及计算机存储技术,具体涉及一种文档的存储方法。

【背景技术】
[0002] 可扩展标记语言(XML)是一种文档描述语言,利用该语言描述的文档称为XML文 档。
[0003] XML文档有很多优势。XML是一种元标记语言,开发者可以根据自己的需要定义自 己的标记,XML的文档是有明确语义并且是结构化的,抗破坏能力很强,XML表示的信息独 立于平台的,这里的平台即可以理解为不同的应用程序也可以理解为不同的操作系统,对 于大型复杂的文档,XML不仅允许指定文档中的词汇,还允许指定元素之间的关系。XML文 档由文档类型定义(DTD) /模式(Schema)和XML文本组成,DTD/Schema就是一组标记符的 语法规则,表明XML文本是怎么样组织的,这样的组成方式使XML文档实现了内容与形式的 分离,成就了上述众多优点。
[0004] 但是,XML文档的缺点在于,在将文档存储为XML文档后,如果要访问某个对象,需 要首先对整个文档进行解析,将其转换为树型结构的组织方式,再搜索要访问的对象,进行 访问。可以看出,应用上述存储方式存储某文档后,当用户对文档的部分内容进行访问时, 系统需要首先耗费资源对整个文档进行解析,然后才能选择用户感兴趣的内容进行显示, 延长了处理时间,进而降低了访问性能,浪费了系统资源。


【发明内容】

[0005] 有鉴于此,本发明提供一种文档的存储方法,能够提高访问性能。
[0006] 为实现上述目的,本发明采用如下的方案:
[0007] -种文档的存储方法,其特征在于,预先配置由至少一种结点类型定义的且具有 树型结构文档类型,设置包括结点索引表和结点数据区的文档存储格式,该方法包括:
[0008] 确定文档的文档类型,,根据该文档类型,将文档的内容映射为对应树型结构中的 各个结点及其数据;
[0009] 根据对应的树型结构中的各个结点及其数据,为文档分配存储空间,在分配的存 储空间中为结点索引表和结点数据区分配各自的存储区域;
[0010] 在分配的结点数据区中存储结点的数据,并在分配的结点索引表中记录每个结点 与该结点数据存储位置的对应关系。
[0011] 较佳地,所述为文档分配的存储空间可以包括超级块、i结点inode表和数据块; 所述超级块包括空闲块表和空闲inode表,用于所述存储空间中空闲空间的管理。
[0012] 较佳地,所述为结点索引表分配存储区域可以为:为结点索引表设置一个inode, 利用inode/空闲表freelist机制在所述数据块部分为所述结点索引表分配存储区域;
[0013] 所述为结点数据区分配存储区域可以为:为结点数据区设置一个inode,利用 inode/freelist机制在所述数据块部分为所述结点数据区分配存储区域。
[0014] 较佳地,在所述超级块中可以进一步包括inodeO,用于记录inode表所占用的数 据块号。
[0015] 较佳地,所述在结点数据区中存储结点的数据可以为:为结点设置一个inode,利 用inode/freelist机制在所述数据块部分为所述结点分配存储区域,将该结点数据存储 到分配的存储区域内,并将结点对应的inode标识存储到所述结点数据区中;
[0016] 所述结点数据存储位置可以为:该结点对应的inode标识在结点数据区中的存储 位置。
[0017] 较佳地,所述将各个结点的数据存储到所述结点数据区可以为:在结点数据区中 顺序存储每个结点的结点类型标记、结点长度、结点的属性的名称/标记和值;
[0018] 所述结点数据存储位置可以为:结点数据在结点数据区中的起始偏移量。
[0019] 较佳地,可以在所述结点数据区末尾处记录结点数据区中空闲区域在所述结点数 据区中的起始偏移量。
[0020] 较佳地,所述将各个结点的数据存储到所述结点数据区可以为:将结点数据区分 成若干页面,将每个结点的数据存储到特定的页面上,并在页内存储偏移量数组,用于表示 该页内各个结点在页内的起始偏移量;
[0021] 所述结点数据存储位置可以为:结点数据所在的页面地址和在所述偏移量数组中 与该结点数据对应的元素索引。
[0022] 较佳地,该方法可以进一步包括:在所述存储空间中为结点数据区的空闲页索引 分配存储区域,在所述空闲页索引中记录结点数据区的各个页面与该页面中空闲空间大小 的对应关系。
[0023] 较佳地,所述为空闲页索引分配存储区域可以为:为空闲页索引设置一个inode, 利用inode/freelist机制在所述数据块部分为所述空闲页索引分配存储区域。
[0024] 较佳地,所述访问文档的入口信息可以包括:结点索引表和结点数据区的存储位 置及长度、文档根结点的ID。
[0025] 较佳地,当结点索引表和结点数据区的存储区域是采用inode/freelist机制分 配时,所述结点索引表的存储位置可以为结点索引表对应的inode标识;所述结点数据区 的存储位置为结点数据区对应的inode标识。
[0026] 由上述技术方案可见,在本发明中,预先配置代表不同树型结构的文档类型,定义 文档存储格式包括结点索引表和结点数据区。利用上述带结点索引的文档存储格式,可以 实现结点的快速搜索。在存储某文档时,首先根据该文档的文档类型,将文档内容映射为对 应树型结构中的各个结点及其数据。通过此种方式,使文档由结点构成,各个结点间通过树 型结构组织起来。然后,根据文档长度,在存储介质中为文档分配一定的存储空间,在该存 储空间中进一步为结点索引表和结点数据区分别分配各自的存储区域。最后,将文档对应 的各个结点数据存储到结点数据区,并在结点索引表中记录每个结点与该结点数据存储位 置的对应关系,在文件头中存储访问文档的入口信息。通过上述方式,就可以将一个文档 按照树型结构在存储介质中进行存储,同时采用带结点索引的存储格式。对于此类采用树 型结构和结点索引方式存储后的文档,当用户对文档的部分内容进行访问时,可以直接对 该内容对应的结点进行访问,而不需要预先对整个文档进行处理,节省了系统资源,提高了 访问性能;另外,本发明的方法依然保留文档类型的配置,继承了 XML文档的优势。利用本 发明的文档存储方法可以支持复杂树形结构数据的存储、存储空间小、扩展性好、可增量修 改、易于提高存储安全性。
[0027] 更进一步地,本发明对结点索引表和结点数据区分配存储区域时,将结点索引表 和结点数据区分别当作两个文件看待,采用与UNIX的inode/freelist近似的机制进行这 两个存储区域的分配、组织和回收,使这两个存储区域易于收缩和扩张,从而简化了增加结 点及增长结点数据时的操作。

【专利附图】

【附图说明】
[0028] 图1为本发明的文档存储方法总体流程图。
[0029] 图2为本发明实施例中文档存储方法具体流程图。
[0030] 图3为收缩文档存储空间的流程图。

【具体实施方式】
[0031] 为使本发明的目的、技术手段和优点更加清楚明白,以下结合附图对本发明作进 一步详细说明。
[0032] 本发明的基本思想是:预先配置由至少一种结点类型定义的具有树型结构的文档 类型,定义包括结点索引表和结点数据区的文档存储格式。在存储某文档时,首先根据该文 档的文档类型,将文档内容映射为对应树型结构中的各个结点及其数据。然后,根据文档长 度,在存储介质中为文档分配一定的存储空间,在该存储空间中进一步为结点索引表和结 点数据区分别分配各自的存储区域。最后,将文档对应的各个结点数据存储到结点数据区, 并在结点索引表中记录每个结点与该结点数据存储位置的对应关系。
[0033] 在本发明的实施例中,为了叙述的方便,可以将依照上述存储方式存储的文档统 称为SurXml文档(由Sursen公司定义的XML文档)。
[0034] 图1为本发明的文档存储方法总体流程图。如图1所示,该方法包括:
[0035] 步骤101,预先配置至少一个结点类型定义的具有树型结构的文档类型;定义包 括结点索引表和结点数据区的文档存储格式。
[0036] 本发明的核心是将文档以树型结构直接存储到存储介质中,本步骤中配置的文档 类型即代表了树型结构的具体组织方式。
[0037] 步骤102,参照步骤101中配置的文档类型,确定并存储文档的文档类型,并根据 该文档类型,将文档的内容映射为对应树型结构中的各个结点及其数据。
[0038] 步骤103,根据对应树型结构中的各个结点及其数据的长度,为文档分配存储空 间,在分配的存储空间中为结点索引表和结点数据区分配各自的存储区域。
[0039] 步骤104,在结点数据区中存储结点的数据,并在结点索引表中记录每个结点与该 结点数据存储位置的对应关系。
[0040] 至此,本发明的存储方法流程结束。在上述流程中,步骤102和步骤103是顺序执 行的,事实上,也可以先执行步骤103再执行步骤102,或者两个步骤同时执行。
[0041] 上述为本发明的文档在存储介质中存储方法的总体概述,下面通过具体实施例说 明该存储方法的【具体实施方式】。
[0042] 实施例:
[0043] 图2为本发明实施例中文档存储方法具体流程图。如图2所示,该方法包括:
[0044] 步骤201,预先配置由至少一个结点类型定义的且具有树型结构的文档类型,定义 包括文件头、结点索引表和结点数据区的文档存储格式。
[0045] 本实施例中,配置的文档类型包括下列信息:a、文档中包含哪些类型的结点(结点 类型);b、文档中包含的各种类型的结点的名称、结点中包含的各个属性的名称/类型;c、 各种结点之间可能的父子关系。通过上述信息,文档类型即可以描述一种特定的树型结构。 举一个简单的文档类型的例子,在该文档类型中,根结点下有若干页面(page)子结点,每个 page子结点下有若干文本(text)和图像(image)子结点。具体来说,每个节点类型都定义 有一个结点类型标记,唯一标示一个结点类型。本步骤中还定义了带结点索引的文档存储 格式,具体为文件头、结点索引表和结点数据区。其中,文件头用于提供访问文件的入口信 息,并不能理解为访问文件的入口信息一定存储在文件的头部,实际上,可以约定将入口信 息存储在文件的任何部分,如文件的尾部;结点索引表用于记录各结点数据的具体存储位 置,以方便检索各结点数据;结点数据区用于存储各结点数据。
[0046] 当要存储某文档时,执行以下操作。步骤202,参照步骤201中配置的文档类型,确 定要存储文档的文档类型,并存储该文档类型信息。
[0047] 本步骤中,确定文档类型后,将该文档类型信息进行存储。这里涉及到文档类型的 表示和文档类型信息的存储两方面的内容。
[0048] 文档类型可以通过两种格式来表示:类型表,如自定义的类型表,以及XML Schema/DTD/Relax NG,其中,Relax NG是由OASIS提出的一种文档类型定义方式。
[0049] (一)类型表格式:
[0050] 类型表是一种数据结构,任何能够描述文档类型信息的数据结构,都可以认为是 类型表。这里给出一种示例实现,但实际可能的实现并不限于该示例:
[0051] 属性的定义,包括名称和类型。这里,可以为每一个属性定义唯一标记,利用属性 标记作为属性的名称;属性的类型可以是属性的数据类型,也可以为每个属性类型定义唯 一标记。
[0052] 这是一种非常简单的定义方法,对迭代、选择、序列、重复等结构都没有加入,但大 部分文档的类型信息也都能够使用上述结构进行描述。
[0053] (二)XML DTD/Schema/Relax NG 格式
[0054] XML文档虽然在物理存储上是线性的,但逻辑上也是由结点构成的树型结构。因 此,用于描述XML文档类型的DTD/Schema/Relax NG等格式也可以用于描述本发明的文档 类型。
[0055] 此外,无论是DTD、Schema或Relax NG,都支持为结点定义名称、属性、子结点;与 类型表格式给出的简单方法相比,这种方法对子结点的迭代、选择、序列、重复有很好的支 持,能够描述更复杂的文档类型。
[0056] 这里给出一个使用Schema描述的文档类型定义,DTD和Relax NG的形式虽然不 同,但三者在实质上是比较类似的。另外,实际文档类型并不受限于该示例:
[0057] 通过上述两种方式的任意一种都可以表示文档类型。下面介绍文档类型信息的存 储方式。
[0058] 存储文档类型信息时采用线性字符序列进行存储。具体地,对于利用类型表格 式表示的文档类型,可以根据所用的自定义类型表,规定一组序列化函数,将类型表的数 据转换为线性字符序列;对于利用DTD/Schema/Relax NG格式表示的文档类型,因为DTD/ Schema/Relax NG文件本身就已经是线性字符序列,所以可以直接存储DTD/Schema/Relax NG文件本身。当然,在存储该文档类型信息前,也可以根据需要,预先对要存储的文档类型 信息进行加密、压缩和变换等处理,然后将处理结果作为文档类型信息存储。
[0059] 存储文档类型信息时,可以将文档类型信息进行远程存储、本地存储或存储在程 序逻辑中。下面分别介绍三种存储位置下,存储文档类型信息的不同实现方式。
[0060] (一)文档类型信息可以在本地存储,所谓本地存储是指在存储文档的具体文件中 存储文档类型信息。这里给出一种示例方法:
[0061] 在文件中,增加一个自定义的存储区域,用于存储文档类型信息,指定该区域的方 法,包括但不限于下述方法:自文件中某个指定位置开始的一段指定长度的区域;在文档 类型的树型结构中增加一个特定的结点或属性,作为文档类型信息的存储。
[0062] 文档类型信息存储在本地后,访问该文档的程序则默认使用文档内部的文档类型 信息。
[0063](二)文档类型信息可以在远程存储,所谓远程存储是指在存储文档外部的其它文 件系统中存储文档类型信息。文档类型信息在远程存储时,包括但不限于下述方法:远程或 分布式文件系统,如网络文件系统(NFS)、WIN2000分布式文件系统(DFS)、安德鲁文件系统 (AFS);本地文件系统;网页(WEB)服务器;文件传输协议(FTP)服务器。将文档类型信息存 储在远程后,还要将远程的文档类型信息的URL或路径信息,存储到SurXml文档内部,选择 存储位置的方法,与本地存储方法选择文档类型信息存储位置的方法相同。访问SurXml文 档的程序根据文档中保存的URL或路径信息查找文档类型信息。
[0064](三)除上述两种对文档类型信息进行显式(即存储在文档内部或外部)的存储外, 还可以将文档类型信息存储到访问SurXml文档的程序逻辑中。具体地,可以通过一组应用 程序接口(API)函数进行硬编码,在访问SurXml文档内容之前,应用程序需要调用该API函 数,在内存中建立文档类型信息数据;或者,直接将文档类型信息存储到访问SurXml文档 的应用程序的源代码或二进制映像中,访问SurXml文档的程序可以直接将文档类型信息 复制到内存中使用。这种非显式的存储方法,只能支持数量有限的文档类型,而且程序中需 要为每一种文档类型分配ID,在SurXml文档中需要存储所使用的文档类型的ID。
[0065] 存储文档类型信息时,还可以是采取上述三种存储方式中任意组合。如将部分文 档类型信息进行远程存储、将部分文档类型信息进行本地存储,或将部分文档类型信息存 储在程序逻辑中。
[0066] 步骤203,根据文档类型,将文档的内容映射为对应树型结构中的各个结点及其数 据。
[0067] 本实施例中,定义结点的数据包括结点的内容信息和位置信息。具体地,结点的 内容信息用来描述本结点对应的文档内容,包括结点类型标记、结点长度、结点的属性的名 称/标记和值;结点的位置信息用来描述本结点在整个文档对应的树型结构中的位置,有 可称为相关结点索引信息。该相关结点索引信息包括结点的父结点ID、结点左右兄弟结点 ID、结点最左侧子结点ID、结点的子结点数目、结点的所有子结点ID。其中,结点左右兄弟 结点ID和结点的所有子结点ID是可选项,没有这两项内容,也能够将本结点在树型结构中 的位置表述清楚,增加这两项内容的目的是提高检索速度。
[0068] 本步骤中,根据文档类型将文档内容映射为不同的结点及其数据。例如,映射HF 文档时,将每个页面映射为一个page结点,将该页面内的文字信息部分和图像信息部分分 别映射为该page结点的两个子结点,结点ID分别为A和B。Page结点的内容信息包括:结 点类型标记为page结点,结点长度值,结点属性的名称/标记和值包括页眉、页脚和页码等 信息。Page结点的相关结点索引信息包括:父结点为PDF文档的根节点,左右兄弟结点为 其它page结点,最左侧子结点ID为A,子节点数目为2,所有子节点ID为A、B。
[0069] 步骤204,根据各个结点及其数据的长度,为文档分配存储空间,在存储空间中为 文件头、结点索引表和结点数据区分别分配各自的存储区域。
[0070] -般来说,文件头的长度或者是固定的,或者比较短,不需要复杂的存储分配机制 支持,可以直接对其分配固定的存储区域;而对于结点索引表和结点数据区来说,其长度则 随着结点数目的增加而增加,因此,在本实施例中,采用可收缩的存储分配、回收机制来对 结点索引表和结点数据区的存储区域进行分配和组织。另外,该机制还用于大对象的存储 分配。
[0071] 本实施例中采用的可收缩的存储分配、回收机制为类似于UNIX文件系统中 inode/freelist的机制。具体地,将结点索引表和结点数据区分别看做一个文件,各自对应 一个 inode。
[0072] 在inode/freelist机制中,整个存储空间分为三大部分:超级块、Inode表和数据 块,如表1所示。
[0073]
[0074] 表 1

【权利要求】
1. 一种文档的存储方法,其特征在于,预先配置由至少一种结点类型定义的且具有树 型结构文档类型,设置包括结点索引表和结点数据区的文档存储格式,该方法包括: 确定文档的文档类型,,根据该文档类型,将文档的内容映射为对应树型结构中的各个 结点及其数据; 根据对应的树型结构中的各个结点及其数据,为文档分配存储空间,在分配的存储空 间中为结点索引表和结点数据区分配各自的存储区域; 在分配的结点数据区中存储结点的数据,并在分配的结点索引表中记录每个结点与该 结点数据存储位置的对应关系。
2. 根据权利要求1所述的方法,其特征在于,所述文档存储格式中进一步设置有文件 头,在分配的存储空间中进一步为文件头分配存储区域,在文件头中存储文件的标识信息 和访问文档的入口信息。
3. 根据权利要求1所述的方法,其特征在于,所述存储文档类型的方法为;将所述文档 类型的部分或全部信息存储在为所述文档分配的存储空间中;或者, 将所述文档类型的部分或全部信息存储在文档的外部,并将存储该文档类型的部分或 全部信息的统一资源定位U化或路径信息存储在为所述文档分配的存储空间中;或者, 将所述文档类型的部分或全部信息存储在访问文档的程序逻辑中,为所述文档类型的 部分或全部信息分配标识ID,将该ID信息存储在为所述文档分配的存储空间中。
4. 根据权利要求1所述的方法,其特征在于,所述文档类型的信息包括;文档中包含的 结点类型、结点名称、结点属性的名称和类型、结点间的父子关系。
5. 根据权利要求1所述的方法,其特征在于,所述结点的数据包括结点类型标记、结点 长度、结点的属性的名称/标记和值、相关结点索引信息。
6. 根据权利要求5所述的方法,其特征在于,所述相关结点索引信息包括;结点最左侧 子结点ID和结点的子结点数目。
7. 根据权利要求6所述的方法,其特征在于,所述相关结点索引信息进一步包括;结点 的父结点标识ID,和/或,结点左右兄弟结点ID,和/或,结点的所有子结点ID。
8. 根据权利要求1所述的方法,其特征在于, 所述为文档分配的存储空间包括超级块、i结点inode表和数据块; 所述超级块包括空闲块表和空闲inode表,用于所述存储空间中空闲空间的管理。
9. 根据权利要求8所述的方法,其特征在于, 所述为结点索引表分配存储区域为:为结点索引表设置一个inode,利用inode/空闲 表化eelist机制在所述数据块部分为所述结点索引表分配存储区域; 所述为结点数据区分配存储区域为:为结点数据区设置一个inode,利用inode/ 化eelist机制在所述数据块部分为所述结点数据区分配存储区域。
10. 根据权利要求8所述的方法,其特征在于,在所述超级块中进一步包括inodeO,用 于记录inode表所占用的数据块号。
【文档编号】G06F17/30GK104462147SQ201310441740
【公开日】2015年3月25日 申请日期:2013年9月25日 优先权日:2013年9月25日
【发明者】王东临 申请人:天津书生投资有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1