发明名称 一种基于XML的流式分页发布方法及系统
摘要 本发明公开了一种基于XML的流式分页发布方法及系统,方法包括以下步骤:1)对满足预先设定的分段条件的XML输入文档进行流化处理,包括分段和重构处理,选择性地进行再一次的流化处理;2)对满足预先设定的分割条件的XML输入文档进行快速分页处理,包括多轮二叉树式分割和重构处理;3)对照终端设备提供的转换样式表,将输入文档转换成其它标准格式的文档输出;4)将具有不同标准格式的文档发送给相应的终端设备。系统的组成包括以下部分:流化处理器,包括分段器和重构器;快速分页器包括分割器和重构器;XSLT转换器;发布服务器。本发明适用于XML文档特别大的场合、提高了转换的可靠性和容错性、灵活性良好、适用面较广。
申请公布号 CN103544262B 申请公布日期 2017.01.11
申请号 CN201310484727.7 申请日期 2013.10.16
申请人 银江股份有限公司 发明人 王冬雪;麻锐;孟利民;王辉;张标标
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 杭州斯可睿专利事务所有限公司 33241 代理人 王利强
主权项 一种基于XML的流式分页发布方法,其特征在于:所述发布方法包括以下步骤:(1)流化处理过程:对于每个大型的XML输入文档,流化处理器先要对其大小进行判断,如果文档大小不超过流化处理器可用的最大内存,即T<sub>s</sub>≤T<sub>m</sub>,那么进入步骤(2)处理;反之,如果文档大小超过流化处理器可用的最大内存,即T<sub>s</sub>&gt;T<sub>m</sub>,那么流化处理器将对该文档进行分段和重构处理,处理后将生成两个形式良好的XML文档,一个大小等于T<sub>m</sub>,另一个大小等于T<sub>s</sub>‑T<sub>m</sub>,前者将被送入步骤(2)处理,而后者将被送往流化处理器进行再一次地判断、分段和重构处理;(2)快速分页处理过程:若XML文档F<sub>s0,1</sub>的大小远远超过终端设备的需求内存T,即T<sub>s0,1</sub>>>T,则对XML文档F<sub>s0,1</sub>进行第一轮的分割和重构处理,生成两个“形式良好”的新XML文档F<sub>s1,1</sub>和F<sub>s1,2</sub>;接下来再对新生成的两个文档F<sub>s1,1</sub>和F<sub>s1,2</sub>进行判断和第二轮的分割和重构处理,即,若两个新生成的文档F<sub>s1,1</sub>和F<sub>s1,2</sub>仍满足分割条件:T<sub>s1,1</sub>>>T且T<sub>s1,2</sub>>>T,则应同时对这两个文档进行分割和重构处理,生成四个“形式良好”文档F<sub>s2,1</sub>、F<sub>s2,2</sub>、F<sub>s2,3</sub>和F<sub>s2,4</sub>,依此类推,反复地判断、分割和重构,直到某一轮分割生成的所有XML文档的大小均不超过终端设备的需求内存,分割和重构处理过程结束;(3)XSLT转换过程:对照终端设备提供的转换样式表,将输入文档转换成其它标准格式的文档输出;(4)发布过程:将具有不同标准格式的文档发送给相应的终端设备;所述步骤(1)中,流化处理过程包括分段处理过程和重构处理过程,所述分段处理过程:假设现在有一个XML文档F<sub>s</sub>,大小为T<sub>s</sub>,流化处理器可用的最大内存为T<sub>m</sub>,如果XML文档非常大,远远大于流化处理器可用的最大内存,即T<sub>s</sub>>>T<sub>m</sub>,或者说,满足条件:T<sub>s</sub>≈pT<sub>m</sub>,p>>1,那么使用流化处理器中的分段器对它进行分段处理,具体包括以下三个步骤:第一、读取XML文档F<sub>s</sub>;第二、设定分段读取阈值T<sub>d</sub>=T<sub>m</sub>;第三、进行分段处理,生成两个非“形式良好的”XML文档:①F<sub>s1</sub>,大小记为T<sub>s1</sub>,T<sub>s1</sub>=T<sub>d</sub>=T<sub>m</sub>;②F<sub>s2</sub>,大小记为T<sub>s2</sub>,T<sub>s2</sub>=T<sub>s</sub>‑T<sub>d</sub>=T<sub>s</sub>‑T<sub>m</sub>;所述重构处理过程包括初步重构和再重构两个步骤,过程如下:1.1)读取第三步骤生成的XML文档F<sub>s1</sub>;1.2)将指针定位到尾部;1.3)向前搜索结束标签的开始标记“&lt;/”,并记录其位置为L<sub>1</sub>;1.4)从L<sub>1</sub>开始向后搜索相应的结束标记“&gt;”,并记录其位置为L<sub>2</sub>,此时会有两种可能:如果能够搜到结束标记“&gt;”,那么L<sub>2</sub>的值就是该标记的位置值;反之,如果未能搜到结束标记“&gt;”,这时应将指针定位到L<sub>1</sub>处,再一次执行步骤1.3),得到新的L<sub>1</sub>值后,再执行步骤1.4),获取新的L<sub>2</sub>值,这个新的L<sub>2</sub>值才是该情况下结束标记的真正位置;1.5)将因分割而导致的不完整数据从F<sub>s1</sub>的尾部移到F<sub>s2</sub>的首部;此后将得到已删除不完整数据的XML文档F<sub>s1</sub>,和已添加不完整数据的XML文档F<sub>s2</sub>;1.6)获取因分割而缺失的所有祖先节点的标签名字:1.6.1)设定读取标志flag=True,当读取的值的长度大小等于0时,flag=False;1.6.2)读取步骤1.5)生成的已删除不完整数据的XML文档F<sub>s1</sub>,将每个节点标签名字,空标签名字除外,添加到列表中;1.6.3)统计列表中的不同元素及其个数,根据形式良好的XML文档的开始标签和结束标签应配套,空标签要关闭的原理,个数为奇数的元素,第一个元素除外,即为因分割而缺失的祖先节点标签名字,将这些标签名字放入另一个列表中,获取这些节点标签名字时,应保持其在列表中的原有顺序不变;1.7)将步骤1.5)生成的两个XML文档F<sub>s1</sub>和F<sub>s2</sub>构造成形式良好的XML文档:1.7.1)把步骤1.6.3)得到的列表中的元素用作结束标签倒序地添加到已删除不完整数据的XML文档F<sub>s1</sub>的尾部;1.7.2)把步骤1.6.3)得到的列表中的元素,第一个元素除外,用作开始标签正序地添加到已添加不完整数据的XML文档F<sub>s2</sub>的首部;1.7.3)把步骤1.6.3)得到的列表中的第一个元素,即声明标签名字,用作开始标签添加到步骤1.7.2)得到的XML文档F<sub>s2</sub>的首部。
地址 310012 浙江省杭州市益乐路223号1幢1层