CN103544260A - 一种大型xml文档转换方法 - Google Patents
一种大型xml文档转换方法 Download PDFInfo
- Publication number
- CN103544260A CN103544260A CN201310484662.6A CN201310484662A CN103544260A CN 103544260 A CN103544260 A CN 103544260A CN 201310484662 A CN201310484662 A CN 201310484662A CN 103544260 A CN103544260 A CN 103544260A
- Authority
- CN
- China
- Prior art keywords
- xml document
- document
- xml
- cutting apart
- size
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/84—Mapping; Conversion
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Document Processing Apparatus (AREA)
Abstract
一种大型XML文档转换方法,首先设定一个大型XML文档,然后再对该文档进行分割处理,最后再利用XSLT对分割生成的多个XML目标文档进行转换处理。其中,分割处理采用的是迭代的方式,且每一次分割处理过程都类似相同,具体可表述为包含以下步骤:1)设定分割阈值;2)进行初步分割处理,得到两个非“形式良好”的XML文档;3)进行初步重构处理,得到两个新XML文档,分别是“已删除不完整数据”的XML文档和“已添加不完整数据”的XML文档;4)进行再重构处理,得到两个“形式良好”的XML文档。本发明能够有效处理大型XML文档特别大的情况,该方法准确度和精度较高、数据处理耗费时间较短、计算复杂度较低。
Description
技术领域
本发明涉及一种XML文档转换方法。
背景技术
XML(Extensible Markup Language,可扩展标记语言)是W3C(World Wide WebConsortium,万维网联盟)于1998年2月10日推出的用于数据传输和存储的标准,它是Internet上的不兼容系统之间进行数据交换的最常用的工具。
一个拥有正确语法的XML文档被称为“形式良好的”(well-formed)XML文档,它应该满足以下5个特性:
1)XML文档必须要有关闭标签。在XML中,开始标签和结束标签必须配套,例如:<age>…</age>。空元素标签必须被关闭,例如:<age/>。
2)XML标签对大小写敏感。在XML中,标签<Name>与标签<name>是不同的。
3)XML元素必须被正确的嵌套。在XML中,所有的标签都必须合理嵌套,例如:<patient><name>…</name></patient>。在此例中,正确嵌套的意思是:<name>元素是在<patient>元素内打开的,那么它必须在<patient>元素内关闭。
4)XML文档必须有根元素。XML文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。
5)XML属性必须加引号。所有标签的属性值都必须使用双引号或单引号。
XML文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。图1所示为一个简单的XML文档的树结构。
在此树形结构中,树上的每个元素都可称为节点(node),顶层元素<hospital>称为“根节点”,节点之间的关系具体包括:父节点(parent)、子节点(child)、兄弟节点(sibling)、祖先节点(ancestor)和后代节点(descendant)。
其中,祖先节点是指包含上下文节点的祖先节点。上下文节点的祖先节点由上下文的父节点,以及父节点的父节点,依此类推组成。如果上下文节点不是根节点,那么它的祖先节点总是包含根节点。例如,元素<age>的祖先节点包含其父节点<patient>,父节点的父节点<patients>,以及根节点<hospital>;元素<id>的祖先节点包含其父节点<department>,父节点的父节点<departments>,以及根节点<hospital>。
为了实现异构信息的交换与共享,我们通常需要把一种格式的XML文档转换成另外一种格式的XML文档。目前,典型的XML文档格式转换的方法包括:
1)使用DOM(Document Object Model,文档对象类型);
2)使用SAX(Simple API for XML,简单应用程序编程接口);
3)使用XSLT(XSL Transformations,XSL转换)。
其中,XSLT作为现在最流行的实现XML文档格式转换的技术之一,
是在1999年11月16日被确立为W3C标准的,其功能十分强大。XSLT指XSL转换,它是XSL中最重要的部分,可将一种XML文档转换为另外一种XML文档。
XSLT转换的基本思想是将XML文档视为一种树结构,转换过程就是从源文档树生成结果文档树的过程,具体实现过程如图2所示。XSLT转换通常涉及三个文档:源文档、目标文档和含有模板规则的文档。其中,含有模板规则的XSL文档也被称作是XSLT转换样式表,它的每条模板规则都包含一个模板,并对应一种模式。
在转换过程中,XML源文档先是被解析成DOM树存放在内存中,然后将DOM树中的每一个节点与XSL文档中的一个模式相比较,当二者相匹配时,就会按照模板中定义的规则进行转换;否则,将继续向下匹配。如此循环,直至整个文档处理完毕。
近年来,随着计算机技术和信息化的快速普及,各种信息系统收集了大量数据。这些数据经过不同的计算机系统收集、加工、处理,形成多种异构数据源。当对这些异构数据源进行处理时,首先要解决的问题就是将存储格式不同的数据进行转换,形成统一的数据格式,然后才能对其进行处理。为此,基于XML的文档或数据转换算法就被提出。
但是,传统XML数据转换算法难以适应当前海量数据转换的要求。即,如果需要处理的数据过大,特别是海量数据,那么XML文档也就很大,文档进行转换时就会消耗大量的内存、占用大量的时间,导致系统速度变慢。
例如专利申请号:201210495961.5的中国发明专利申请,公开了一种XML解析中数据块划分方法和XML解析方法,它并没有提到内存不足问题,只是单纯的进行数据分割,也就是说,如果XML文档特别大,它是无法处理的。该方法采用的是传统的一次性分割法,最终将划分成多个数据块,并没有生成“形式良好”的XML文档,这使得各部分数据的解析无法独立进行,也使得接下来可能涉及到的快速拆分和组装等操作更加困难、复杂。该方法仅是为了提高解析效率,它在利用多线程进行并行解析之前并没有经过转换处理,更没有考虑接下来的传输处理过程。
发明内容
为了克服已有XML文档转换方法的无法处理XML文档特别大的情况、准确度和精度较低、数据处理耗费时间较长、计算复杂度较高的不足,本发明提供了一种有效处理XML文档特别大的情况、准确度和精度较高、数据处理耗费时间较短、计算复杂度较低的大型XML文档转换方法。
本发明解决其技术问题所采用的技术方案是:
一种大型XML文档转换方法,所述转换方法包括以下步骤:
1)分割XML源文档,过程如下:
设定一个将要进行转换的XML源文档Fs,其大小为Ts,计算机可用的最大内存为Tm,如果XML文档非常大,远远大于计算机可用的最大内存,即Ts>>Tm,或者说,若满足条件:Ts≈nTm,n>>1,那么在进行转换之前需要对该文档进行分割处理,其具体包括以下步骤:
1.2)进行第一次分割,分割后得到两个形式良好的XML文档:
①Fs1,大小记为Ts1,Ts1≈T;
②Fb1,大小记为Tb1,Tb1=Ts-Ts1≈Ts-T;
1.3)若Tb(k-1)>Tm,进行第k次分割,分割后得到两个形式良好的XML文档:
①Fsk,大小记为Tsk,Tsk≈T;
②Fbk,大小记为Tbk,Tbk=Tb(k-1)-Tsk≈[Ts-(k-1)T]-T=Ts-kT;
1.4)若进行第n次分割,分割后得到两个形式良好的XML文档:
①Fsn,大小记为Tsn,Tsn≈T;
②Fbn,大小记为Tbn,Tbn=Tb(n-1)-Tsn≈[Ts-(n-1)T]-T=Ts-nT;
这时分割生成的XML文档Fbn的大小不超过所设的分割阈值,即Tbn≤T,不再满足分割条件时分割结束;
2)利用XSLT转换分割生成的多个XML目标文档。
进一步,所述步骤1.2)中,第一次分割的处理过程如下:
(2)初步分割XML源文档Fs,生成两个非“形式良好的”XML文档:
①Fs1,大小记为Ts1,Ts1≈T;
②Fb1,大小记为Tb1,Tb1=Ts-Ts1≈Ts-T;
(3)重构上一步生成的两个XML文档Fs1和Fb1,具体实现过程如下:
(3.1)读取初步分割生成的XML文档Fs1;
(3.2)将指针定位到尾部;
(3.3)向前搜索结束标签的开始标记“</”,并记录其位置为L1;
(3.4)从L1开始向后搜索相应的结束标记“>”,并记录其位置为L2,此时会有两种可能:
如果能够搜到结束标记“>”,那么L2的值就是该标记的位置值;
反之,如果未能搜到结束标记“>”,这时应将指针定位到L1处,再一次执行步骤(3.3),得到新的L1值后,再执行步骤(3.4),获取新的L2值,这个新的L2值才是该情况下结束标记的真正位置;
(3.5)将因分割而导致的不完整数据从Fs1的尾部移到Fb1的首部;
(3.6)获取因分割而缺失的所有祖先节点的标签名字,具体步骤如下:
(3.6.1)设定读取标志flag=True,当读取的值的长度大小或等于0时,flag=False;
(3.6.2)读取步骤(3.5)得到的已删除不完整数据的XML文档Fs1,将每个节点标签名字,空标签名字除外,添加到列表中;
(3.6.3)统计列表中的不同元素及其个数,根据形式良好的XML文档的开始标签和结束标签应配套,空标签要关闭的原理,个数为奇数的元素,第一个元素除外,即为因分割而缺失的祖先节点标签名字,将这些标签名字放入另一个列表中,获取这些节点标签名字时,应保持其在列表中的原有顺序不变;
(3.7)将步骤(3.5)得到的两个XML文档Fs1和Fb1构造成形式良好的XML文档:
(3.7.1)把步骤(3.6.3)得到的列表中的元素用作结束标签倒序地添加到已删除不完整数据的XML文档Fs1的尾部;
(3.7.2)把步骤(3.6.3)得到的列表中的元素,第一个元素除外,用作开始标签正序地添加到已添加不完整数据的XML文档Fb1的首部;
(3.7.3)将步骤(3.6.3)得到的列表中的第一个元素,即声明标签名字,用作开始标签添加到上一步得到的XML文档Fb1的首部,此时,第一次分割就已全部处理完毕。
其中,第k次分割和第n次分割的过程与第一次分割过程类似。
本发明的有益效果主要表现在:有效处理XML文档特别大的情况、准确度和精度较高、数据处理耗费时间较短、计算复杂度较低。
附图说明
图1是XML树状结构图。
图2是XSLT转换过程示意图。
图3是分割式转换大型XML文档的总体框架图。
图4是分割XML文档的整体流程图。
图5是第一次分割XML文档的流程图。
图6是分割点在开始标签内的示意图,其中,(a)为分割生成的XML文档Fs1的尾部,(b)为分割生成的XML文档Fb1的首部。
图7是分割点在结束标签内的示意图,其中,(a)为分割生成的XML文档Fs1的尾部,(b)为分割生成的XML文档Fb1的首部。
图8是第一次初步重构处理过程示意图。
图9是第一次再重构处理过程示意图。
具体实施方式
下面结合附图对本发明作进一步描述。
参照图1~图9,一种大型XML文档转换方法,所述转换方法包括以下两个步骤:
1)分割XML源文档,过程如下:
设定一个将要进行转换的XML源文档Fs,其大小为Ts,计算机可用的最大内存为Tm,如果XML文档非常大,远远大于计算机可用的最大内存,即Ts>>Tm,或者说,若满足条件:Ts≈nTm,n>>1,那么在进行转换之前需要对该文档进行分割处理,其具体包括以下步骤:
1.2)进行第一次分割,分割后得到两个形式良好的XML文档:
①Fs1,大小记为Ts1,Ts1≈T;
②Fb1,大小记为Tb1,Tb1=Ts-Ts1≈Ts-T;
1.3)若Tb(k-1)>Tm,进行第k次分割,分割后得到两个形式良好的XML文档:
①Fsk,大小记为Tsk,Tsk≈T;
②Fbk,大小记为Tbk,Tbk=Tb(k-1)-Tsk≈[Ts-(k-1)T]-T=Ts-kT;
①Fsn,大小记为Tsn,Tsn≈T;
②Fbn,大小记为Tbn,Tbn=Tb(n-1)-Tsn≈[Ts-(n-1)T]-T=Ts-nT;
这时分割生成的XML文档Fbn的大小不超过所设的分割阈值,即Tbn≤T,不再满足分割条件时分割结束;
2)利用XSLT转换分割生成的多个XML目标文档。
本实施例采用先分割后转换的方式,即先以迭代的方式,对大型XML文档进行分割,然后将分割生成的多个形式良好的XML目标文档进行转换,其总体框架图如图3所示。
由图3可见,分割式转换大型XML文档的实现包括两个重要环节:
1)分割XML源文档。此过程包括两个步骤:初步分割和重构。
2)利用XSLT转换分割生成的多个XML目标文档。
分割处理过程:假设现在有一个将要进行转换的XML源文档Fs,其大小为Ts,计算机可用的最大内存为Tm。如果XML文档非常大,远远大于计算机可用的最大内存,即Ts>>Tm,或者说,若满足条件:Ts≈nTm,n>>1,那么在进行转换之前需要对该文档进行分割处理,其具体包括以下几个步骤:
2)进行第一次分割,分割后得到两个形式良好的XML文档:
①Fs1,大小记为Ts1,Ts1≈T;
②Fb1,大小记为Tb1,Tb1=Ts-Ts1≈Ts-T。
3)若Tb(k-1)>Tm,进行第k次分割,分割后得到两个形式良好的XML文档:
①Fsk,大小记为Tsk,Tsk≈T;
②Fbk,大小记为Tbk,Tbk=Tb(k-1)-Tsk≈[Ts-(k-1)T]-T=Ts-kT。
①Fsn,大小记为Tsn,Tsn≈T;
②Fbn,大小记为Tbn,Tbn=Tb(n-1)-Tsn≈[Ts-(n-1)T]-T=Ts-nT。
这时分割生成的XML文档Fbn的大小不超过所设的分割阈值,即Tbn≤T,不再满足分割条件,分割结束。
由于上述的分割处理过程十分复杂,为了方便大家的理解与分析,我们将用一个整体流程图来表示整个实现过程,如图4所示。
综上所述,对大型XML文档Fs进行所有的分割处理后将得到n+1个大小约为T的小XML目标文档,它们分别是Fs1,Fs2,…,Fsk,…Fsn和Fbn。分割处理前,源XML文档非常大,远远大于计算机可用的最大内存,即Ts>>Tm。当进行第k次分割处理时,将要被分割的XML文档Fb(k-1)的大小就只是略大于计算机可用最大内存Tm,即Tb(k-1)>Tm。当进行第n次分割处理时,将要被分割的XML文档Fb(n-1)的大小就只是略大于分割阈值T,即Tb(n-1)>T,且此次分割生成的XML文档Fbn不再满足分割条件,分割结束。
第一次分割处理过程:
由于每一次分割方法都是相同的,因此我们将以第一次分割为例,详细地介绍每次分割处理都涉及哪些环节和内容。根据图4,我们可以得到第一次分割XML文档的流程图如图5所示。
假设现在有一个将要进行转换的XML文档Fs,大小为Ts,计算机可用的最大内存为Tm。如果XML文档非常大,远远大于计算机可用的最大内存,即Ts>>Tm,或者说,若满足条件:Ts≈nTm,n>>1,那么在进行转换之前需要对该文档进行分割处理,其具体包括以下3个步骤:
(2)初步分割XML源文档Fs,生成两个非“形式良好的”XML文档:
①Fs1,大小记为Ts1,Ts1≈T;
②Fb1,大小记为Tb1,Tb1=Ts-Ts1≈Ts-T;
(3)重构上一步生成的两个XML文档Fs1和Fb1,具体实现过程如下:
(3.1)读取初步分割生成的XML文档Fs1;
(3.2)将指针定位到尾部;
(3.3)向前搜索结束标签的开始标记“</”,并记录其位置为L1;
(3.4)从L1开始向后搜索相应的结束标记“>”,并记录其位置为L2,此时会有两种可能:
如果能够搜到结束标记“>”,那么L2的值就是该标记的位置值。例如,当分割点在开始标签内时,如图6所示,就满足此种情况;
反之,如果未能搜到结束标记“>”,这时应将指针定位到L1处,再一次执行步骤(3.3),得到新的L1值后,再执行步骤(3.4),获取新的L2值,这个新的L2值才是该情况下结束标记的真正位置。例如,当分割点在结束标签内时,如图7所示,就满足此情况。
(3.5)将因分割而导致的不完整数据从Fs1的尾部移到Fb1的首部。
(3.6)获取因分割而缺失的所有祖先节点的标签名字,具体步骤如下:
(3.6.1)设定读取标志flag=True,当读取的值的长度大小或等于0时,flag=False;
(3.6.2)读取步骤(3.5)得到的已删除不完整数据的XML文档Fs1,将每个节点标签名字,空标签名字除外,添加到列表中;
3.6.3)统计列表中的不同元素及其个数,根据1.1节介绍的形式良好的XML文档的开始标签和结束标签应配套,空标签要关闭的原理,个数为奇数的元素,第一个元素除外,即为因分割而缺失的祖先节点标签名字,将这些标签名字放入另一个列表中。值得注意的是,获取这些节点标签名字时,应保持其在列表中的原有顺序不变。
(3.7)将步骤(3.5)得到的两个XML文档Fs1和Fb1构造成形式良好的XML文档:
(3.7.1)把步骤(3.6.3)得到的列表中的元素用作结束标签倒序地添加到已删除不完整数据的XML文档Fs1的尾部;
(3.7.2)把步骤(3.6.3)得到的列表中的元素,第一个元素除外,用作开始标签正序地添加到已添加不完整数据的XML文档Fb1的首部;
(3.7.3)将步骤(3.6.3)得到的列表中的第一个元素,即声明标签
名字,用作开始标签添加到上一步得到的XML文档Fb1的首部。
此时,第一次分割就已全部处理完毕。其中,步骤(3.1)至(3.5)实现了初步重构处理过程,生成了“已删除不完整数据的XML文档Fs1"和“已添加不完整数据的XML文档Fb1”,该过程的流程图如图8所示。步骤(3.3)和(3.4)完成了由开始标记“</”和结束标记“>”构成的完整标签的查找,从而获得了此完整标签后的所有数据内容,这里将其称作是“不完整数据”。步骤(3.6)和(3.7)被称作是再重构过程,最终生成了两个形式良好的XML文档Fs1和Fb1,具体的实现流程图如图9所示。
本实施例中,分割处理,解决了大XML文档因内存限制而无法转换的问题。
XML作为数据传输和存储的标准,处理的数据量越大,如海量数据,用于存储数据的XML文档越大。由于在转换的过程中,需要先将XML文档解析成DOM树存放在内存中,因此文档过大可能导致内存溢出,转换也就无法进行。
本方案的主要思想是先将一个大XML文档分割成多个形式良好的小XML文档,然后再对这些形式良好的小XML文档进行转换。这样就不会出现因内存不足而无法进行转换的现象。
采用“迭代”的分割方式,处理简单;且相对于当前常用的“随机”的分割方式,不会出现漏分割和多次重复分割的现象。
本方案采用的是“迭代”的分割方式,即先对大型XML源文档Fs进行第一次分割处理,生成两个XML文档Fs1和Fb1,然后再对Fb1进行第二次分割处理,生成两个XML文档Fs2和Fb2,然后再对Fb2进行第三次分割处理,依此类推,直到某一次分割处理后生成的Fbi的大小Tbi不再满足分割条件:
Tbi>T,i=1,2,…n
为止。这样做的好处是:
1)简单、易处理。如果采用“一次性”分割的方式,将会同时生成多个小XML文档,在对其中一个文档,第一个和最后一个文档除外,进行下一步处理的过程中,还需要考虑它的前一个和后一个文档,这样操作起来比较复杂、困难。
2)相对于“随机”分割方式而言,不会发生漏分割和多次重复分割的现象。如果采用随机分割方式,难免会出现对某次分割生成的仍旧很大的XML文档漏分割,和已经很小的XML文档多次分割的现象,也就是说,不仅仍存在大XML文档因内存限制而无法进行转换的问题,还增添了小XML文档因多次进行无用的分割处理而产生的耗时大、系统速度变慢等问题。
分割处理后产生的所有小XML目标文档都是“形式良好的”,使得下一步的解析操作成为可能,且解析具有相对独立性、高效性和高可靠性;分割处理后的这些形式良好的小XML文档仍然可以进行独立、快速的拆分、组装等操作。
本方案中,每一轮分割处理后,都将对所生成的两个XML文档Fsi和Fbi进行重构处理,且处理后得到的XML文档都是“形式良好的”。这样做的好处是:
1)对分割后生成的XML文档可以进行解析操作。传统的XML分割算法中,只是对XML文档进行单纯的分割处理,将生成多个非“形式良好的”XML文档,这样的XML文档是无法进行解析的。
2)解析具有相对独立性。由于分割生成的每一个小XML文档都是“形式良好的”,因此,任意一个小XML文档的解析都不依赖于其它的小XML文档,也就是说,每一个小XML文档都可以独立地完成解析操作。
3)解析具有高效性。由于解析具有相对独立性,因此,我们除了可以采用流式解析方法,还可以采用并行式解析方法,这样就大大地提高了解析的效率。
4)解析具有高可靠性。由于解析具有相对独立性,因此,一个小XML文档的丢失并不会影响其它小XML的解析,也就是说,每一个解析出来的结果都是有效的,接收端只需要通知发送端重新发送已丢失的文档,再对它们进行解析即可,这也就大大地提高了解析的可靠性。
5)分割生成的小XML文档仍然可以执行各种并行操作,如拆分和组装。由于分割生成的每一个小XML文档都是“形式良好的”,我们可以采用并行的方式,对这小XML文档进行快速地拆分和组装等操作。
具有普遍适用性和应用的灵活性。可适用于任意内存大小的设备或任意大小的XML文档,特别适用于一些内存较小的手持设备和嵌入式系统,也特别适用于海量数据的转换处理。具体表现在:
1)可用于任意内存大小的设备或任意大小的XML文档。无论文档的大小Ts有没有超过计算机可用内存Tm的限制,我们都可以合理地设定一个分割阈值T,对文档进行分割处理后,再进行转换处理,这样做不仅可以减小转换过程中所占用的内存空间,还可以提高转换的效率。
2)特别适用于一些内存较小的手持设备或嵌入式系统。目前,常见的嵌入式系统和手持设备的内存大小各异,小的只有几KB,多的有几GB。传统XML数据转换算法无法同时满足这些设备的要求。使用本算法对原始XML文档进行分割,分割生成的小XML文档,一方面“形式良好”,另一方面其大小也适合相应的嵌入式系统或手持设备,就可以使用这些设备进行分步转换和后续处理。
3)特别适用于海量数据的转换处理。虽然有些设备的内存很大,但是对于海量数据的转换处理却是远远不够的。经过本方案的分割处理后,只需要较小的内存空间就可以实现所有小XML文档的转换。
应用广泛,既可以用于转换,也可以用于解析和传输。
1)可应用于转换的过程中,解决了大XML文档因内存限制而无法转换的问题。
2)可应用于解析的过程中,且可以采用两种方式进行解析:流式和并行式。其中,“流式”解析法是指按次序地逐个进行解析,在本算法中就是指按着分割生成的文档次序逐个进行解析;“并行式”解析法是指同时进行解析,在本算法中就是指同时对所有分割生成的文档进行解析,该方法使得解析具有更高的效率。
3)可应用于传输的过程中,提高了传输的效率和容错性。
a)“高效性”:由于解析可以采用流的方式,因此在发送端我们可以采用边解析边传输的方式,而无需等待其全部解析完后再传输,而且,在接收端也可以采用边接收边组装的方式,这样就大大地提高了发送和接收的效率。
b)“容错性”:如果分割生成的小XML文档是非“形式良好的”,那么当接收端接收到的某个文档出现传输错误、与其它文档不匹配时,就需要发送端重新发送全部数据内容。反之,若是“形式良好的”,则只需要重新发送错误的数据内容。有效地提高了传输的可靠性和效率。
Claims (2)
1.一种大型XML文档转换方法,其特征在于:所述转换方法包括以下步骤:
1)分割XML源文档,过程如下:
设定一个将要进行转换的XML源文档FS,其大小为TS,计算机可用的最大内存为Tm,如果XML文档非常大,远远大于计算机可用的最大内存,即Ts>>Tm,或者说,若满足条件:Ts≈nTm,n>>1,在进行转换之前对该文档进行分割处理,包括以下步骤:
1.1)设定分割阈值T,即,文档转换时只使用不超过一半的内存空间;
1.2)进行第一次分割,分割后得到两个形式良好的XML文档:
①Fs1,大小记为Ts1,Ts1≈T;
②Fb1,大小记为Tb1,Tb1=Ts-Ts1≈Ts-T;
1.3)若Tb(k-1)>Tm,进行第k次分割,分割后得到两个形式良好的XML文档:
①Fsk,大小记为Tsk,Tsk≈T;
②Fbk,大小记为Tbk,Tbk=Tb(k-1)-Tsk≈[Ts-(k-1)T]-T=Ts-kT;
①Fsn,大小记为Tsn,Tsn≈T;
②Fbn,大小记为Tbn,Tbn=Tb(n-1)-Tsn≈[Ts-(n-1)T]-T=Ts-nT;
这时分割生成的XML文档Fbn的大小不超过所设的分割阈值,即Tbn≤T,不再满足分割条件时分割结束;
2)利用XSLT转换分割生成的多个XML目标文档。
2.如权利要求1所述的一种大型XML文档转换方法,其特征在于:所述步骤1.2)中,第一次分割的处理过程如下:
(1)设定分割阈值T,
(2)初步分割XML源文档Fs,生成两个非“形式良好的”XML文档:
①Fs1,大小记为Ts1,Ts1≈T;
②Fb1,大小记为Tb1,Tb1=Ts-Ts1≈Ts-T;
(3)重构上一步生成的两个XML文档Fs1和Fb1,具体实现过程如下:
(3.1)读取初步分割生成的XML文档Fs1;
(3.2)将指针定位到尾部;
(3.3)向前搜索结束标签的开始标记“</”,并记录其位置为L1;
(3.4)从L1开始向后搜索相应的结束标记“>”,并记录其位置为L2,此时会有两种可能:
如果能够搜到结束标记“>”,那么L2的值就是该标记的位置值;
反之,如果未能搜到结束标记“>”,这时应将指针定位到L1处,再一次执行步骤(3.3),得到新的L1值后,再执行步骤(3.4),获取新的L2值,这个新的L2值才是该情况下结束标记的真正位置;
(3.5)将因分割而导致的不完整数据从Fs1的尾部移到Fb1的首部;
(3.6)获取因分割而缺失的所有祖先节点的标签名字,具体步骤如下:
(3.6.1)设定读取标志flag=True,当读取的值的长度大小或等于0时,flag=False;
(3.6.2)读取步骤(3.5)得到的已删除不完整数据的XML文档Fs1,将每个节点标签名字,空标签名字除外,添加到列表中;
(3.6.3)统计列表中的不同元素及其个数,根据形式良好的XML文档的开始标签和结束标签应配套,空标签要关闭的原理,个数为奇数的元素,第一个元素除外,即为因分割而缺失的祖先节点标签名字,将这些标签名字放入另一个列表中,获取这些节点标签名字时,应保持其在列表中的原有顺序不变;
(3.7)将步骤(3.5)得到的两个XML文档Fs1和Fb1构造成形式良好的XML文档:
(3.7.1)把步骤(3.6.3)得到的列表中的元素用作结束标签倒序地添加到已删除不完整数据的XML文档Fs1的尾部;
(3.7.2)把步骤(3.6.3)得到的列表中的元素,第一个元素除外,用作开始标签正序地添加到已添加不完整数据的XML文档Fb1的首部;
(3.7.3)将步骤(3.6.3)得到的列表中的第一个元素,即声明标签名字,用作开始标签添加到上一步得到的XML文档Fb1的首部,此时,第一次分割就已全部处理完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310484662.6A CN103544260A (zh) | 2013-10-16 | 2013-10-16 | 一种大型xml文档转换方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310484662.6A CN103544260A (zh) | 2013-10-16 | 2013-10-16 | 一种大型xml文档转换方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103544260A true CN103544260A (zh) | 2014-01-29 |
Family
ID=49967712
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310484662.6A Pending CN103544260A (zh) | 2013-10-16 | 2013-10-16 | 一种大型xml文档转换方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103544260A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108572925A (zh) * | 2018-02-26 | 2018-09-25 | 湖南戈人自动化科技有限公司 | 一种step文件等效的二进制数据存储方法 |
CN109587222A (zh) * | 2018-11-12 | 2019-04-05 | 厦门安胜网络科技有限公司 | 一种文件碎片化传输的方法、装置及存储介质 |
CN109783104A (zh) * | 2018-12-07 | 2019-05-21 | 深圳市海派通讯科技有限公司 | Android设备写入Keybox参数的方法及系统 |
CN111581438A (zh) * | 2019-02-19 | 2020-08-25 | 青岛海信移动通信技术股份有限公司 | 文件解析方法和终端 |
CN117556850A (zh) * | 2023-11-13 | 2024-02-13 | 中国计量科学研究院 | 一种以rfid标签作为数字校准证书的载体的方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070150809A1 (en) * | 2005-12-28 | 2007-06-28 | Fujitsu Limited | Division program, combination program and information processing method |
CN102622334A (zh) * | 2012-04-20 | 2012-08-01 | 北京信息科技大学 | 多线程环境下并行xslt转换方法和装置 |
-
2013
- 2013-10-16 CN CN201310484662.6A patent/CN103544260A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070150809A1 (en) * | 2005-12-28 | 2007-06-28 | Fujitsu Limited | Division program, combination program and information processing method |
CN102622334A (zh) * | 2012-04-20 | 2012-08-01 | 北京信息科技大学 | 多线程环境下并行xslt转换方法和装置 |
Non-Patent Citations (2)
Title |
---|
孙静 等: "大型XML文件的分割和动态加载研究", 《计算机工程与应用》 * |
马永萍: "浅析几种不同的XML文档转换方式", 《中国水运(学术版)》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108572925A (zh) * | 2018-02-26 | 2018-09-25 | 湖南戈人自动化科技有限公司 | 一种step文件等效的二进制数据存储方法 |
CN108572925B (zh) * | 2018-02-26 | 2022-04-12 | 湖南戈人自动化科技有限公司 | 一种step文件等效的二进制数据存储方法 |
CN109587222A (zh) * | 2018-11-12 | 2019-04-05 | 厦门安胜网络科技有限公司 | 一种文件碎片化传输的方法、装置及存储介质 |
CN109783104A (zh) * | 2018-12-07 | 2019-05-21 | 深圳市海派通讯科技有限公司 | Android设备写入Keybox参数的方法及系统 |
CN111581438A (zh) * | 2019-02-19 | 2020-08-25 | 青岛海信移动通信技术股份有限公司 | 文件解析方法和终端 |
CN111581438B (zh) * | 2019-02-19 | 2024-01-23 | 青岛海信移动通信技术有限公司 | 文件解析方法和终端 |
CN117556850A (zh) * | 2023-11-13 | 2024-02-13 | 中国计量科学研究院 | 一种以rfid标签作为数字校准证书的载体的方法及系统 |
CN117556850B (zh) * | 2023-11-13 | 2024-05-03 | 中国计量科学研究院 | 一种以rfid标签作为数字校准证书的载体的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8346737B2 (en) | Encoding of hierarchically organized data for efficient storage and processing | |
KR100836350B1 (ko) | Xml 도큐먼트들의 효율적인 관리를 위한 방법 및 장치 | |
JP4489029B2 (ja) | 構造化文書検索システムおよび構造化文書検索方法 | |
CN103544260A (zh) | 一种大型xml文档转换方法 | |
CN109408783A (zh) | 电子文档在线编辑方法及系统 | |
US20100306273A1 (en) | Apparatus, system, and method for efficient content indexing of streaming xml document content | |
US20060253465A1 (en) | Methods and apparatus for converting a representation of XML and other markup language data to a data structure format | |
US8566343B2 (en) | Searching backward to speed up query | |
WO2011100814A1 (pt) | Método e sistema para extração e gerenciamento de informações contidas em documentos eletrônicos | |
CN110059085B (zh) | 一种面向Web 2.0的JSON数据解析与建模方法 | |
CN102662969A (zh) | 一种基于网页结构语义的互联网信息对象定位方法 | |
CN103399857B (zh) | 一种通用文档结构信息抽取方法 | |
CN107239492A (zh) | Xml文档转换为对象、对象转换为xml文档的方法及装置 | |
US20060167907A1 (en) | System and method for processing XML documents | |
Lee | JXON: an architecture for schema and annotation driven json/xml bidirectional transformations | |
KR101097660B1 (ko) | 무선 방송 스트림에서 xml 질의 처리 방법 | |
CN103544262B (zh) | 一种基于xml的流式分页发布方法及系统 | |
US7805424B2 (en) | Querying nested documents embedded in compound XML documents | |
CN103136378B (zh) | 一种基于结构概要的数据恢复方法 | |
Hoeller et al. | Efficient XML data and query integration in the wireless sensor network engineering process | |
Macho et al. | Context-and Template-Based Compression for Efficient Management of Data Models in Resource-Constrained Systems | |
Šandrih et al. | Towards Efficient and Unified XML/JSON Conversion-A New Conversion | |
Masetti et al. | HUDDL for description and archive of hydrographic binary data | |
Al Hamad | RXML: Path-based and XML DOM approaches for integrating between relational and XML databases | |
Rossi et al. | Common data format for program sharing and integration |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140129 |