本发明属于文档处理技术领域,特别涉及一种可扩展标记语言xml文档压缩、解压方法及压缩和解压装置。
背景技术:
xml,可扩展标记语言(extensiblemarkuplanguage,缩写:xml),是国际流行的通用数据描述语言格式。
基于xml的新一代电子病历数据格式具有全结构化和易读易解析的特点,同时又带来了数据结构嵌套复杂,需要保存的内容格式、样式、配置等信息过多,导致xml文件过大的问题。不利于病历数据的传输、共享、解析、数据提取。
因此,有必要发明一种不破坏全结构化病历文档结构、不影响病历文档显示效果的xml文档的压缩、解压方法和装置。
技术实现要素:
本发明的目的在于克服现有技术的不足,提供一种本发明采用解析的前后位置关系利用属性变更状态,只保留与前一个同类型元素不相同属性的方法实现xml文档压缩。xml文档中同类型元素越多,元素属性越多,压缩率越高。实际应用在文档内容领域可以达到30%~75%压缩率,可大大节约文档空间的可扩展标记语言xml文档压缩和解压方法,并提供对应的压缩及解压装置。
本发明的目的是通过以下技术方案来实现的:
一种可扩展标记语言xml文档压缩方法,包括以下步骤:
a、读入未压缩的xml文档数据:
b、设置压缩前置条件:包括范围元素匹配条件和目标元素匹配条件;
c、匹配范围元素:遍历xml文档,找到所有满足范围元素匹配条件的元素,即为范围元素;然后将范围元素下所有元素的类属性缓存器初始化为空;
d、匹配目标元素,并进行目标元素压缩操作;
e、更新元素类属性缓存器。
进一步地,所述范围元素定义为压缩规则作用范围的元素;
范围元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配范围元素的条件;
目标元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配目标元素的条件。
进一步地,所述步骤d具体实现方法为:
d1、遍历满足范围元素匹配条件的元素,取得满足目标元素匹配条件的子元素,将其作为需要压缩的目标元素;
d2、将目标元素按照如下规则进行压缩:
(1)当目标元素没有对应的元素类属性缓存器时,则将当前目标元素所有属性保存到xml压缩文档中;
(2)当目标元素的具体属性值不同于其元素类属性缓存器对应属性的属性值时,将目标元素属性保存到xml压缩文档中,否则目标元素的此属性不需要保存到xml压缩文档中;
(3)将存在于目标元素但不存在于其元素类属性缓存器中的属性,保存到xml压缩文档中。
进一步地,所述步骤e中,压缩状态元素类属性缓存器更新算法规则如下:
(1)如果当前目标元素没有对应的元素类属性缓存器,则使用当前目标元素所有属性新建其元素类属性缓存器;
(2)将当前目标元素与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到元素类属性缓存器;
(3)将存在于目标元素但不存在于其元素类属性缓存器中的属性添加到元素类属性缓存器中。
本发明还提供一种可扩展标记语言xml文档解压方法,包括以下步骤:
f、读入xml压缩文档数据;
g、设置解压前置条件:包括范围元素匹配条件和目标元素匹配条件;
范围元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配范围元素的条件;
目标元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配目标元素的条件;
h、匹配范围元素:遍历xml文档,找到所有满足范围元素匹配条件的元素,即为范围元素;然后将范围元素下所有元素的类属性缓存器被初始化为空;
i、匹配目标元素,并进行目标元素解压操作;
j、更新元素类属性缓存器。
进一步地,所述步骤i包括以下子步骤:
i1、遍历范围元素,取得满足目标元素匹配条件的子元素,即为需要解压的目标元素;
i2、通过如下目标元素解压算法从压缩xml文档中恢复目标元素所有的属性:
当前目标元素没有其元素类属性缓存器时,该目标元素不需要解压操作;
将目标元素已有的所有属性与其元素类属性缓存器比较,将只存在于其元素类属性缓存器中的属性恢复到目标元素中,从而使该目标元素恢复了该类元素所有的属性。
进一步地,所述步骤j中,解压状态元素类属性缓存器更新算法规则如下:
(1)如果当前目标元素没有对应的元素类属性缓存器,则使用当前目标元素所有属性新建其元素类属性缓存器;
(2)将当前目标元素属性与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到其元素类属性缓存器;
(3)将存在于目标元素但不存在于其元素类属性缓存器中的属性更新到其元素类属性缓存器。
本发明的一种可扩展标记语言xml文档的压缩装置,包括以下模块:
接收读取模块:用于接收并读取需要压缩的xml文档;
压缩前置条件设置模块:包括范围元素匹配条件设置子模块和目标元素匹配条件设置子模块;
所述范围元素匹配条件设置子模块,用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入范围元素匹配条件信息;并根据范围元素匹配条件在xml根元素范围内查找到所有的范围元素,提供给压缩装置其它模块使用;
所述目标元素匹配条件设置子模块,用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入目标元素匹配条件信息;并根据目标元素匹配条件在其范围元素内查找到所有的目标元素,提供给压缩装置其它模块使用;
属性差异检测模块,用于将目标元素属性与其元素类属性缓存器进行属性值比较,取得属性值不同的属性;将目标元素属性与其元素类属性缓存器进行属性是否存在判断,取得存在于目标元素但不存在于其元素类属性缓存器中的属性;
元素压缩模块,用于将目标元素中经过属性差异检测模块得到的差异属性保存到压缩后xml文档中,目标元素其余属性将被丢弃,从而实现了元素压缩;
元素属性缓存器管理模块,用于记录指定元素类上一个元素节点具有的所有属性信息;如果当前目标元素不存在其元素类属性缓存器,则使用该目标元素所有属性新建其元素类属性缓存器;当前目标元素与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到元素类属性缓存器;将存在于目标元素但不存在于其元素类属性缓存器中的属性添加到元素类属性缓存器中;
xml压缩文档生成模块,用于组织压缩后的xml文档,并以文件或数据流的形式对外输出压缩后的xml文档。
一种可扩展标记语言xml文档的解压装置,包括以下模块:
接收读取模块,用于接收并读取需要压缩的xml文档;
解压前置条件设置模块,包括范围元素匹配条件设置子模块和目标元素匹配条件设置子模块;
所述范围元素匹配条件设置子模块用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入范围元素匹配条件信息;并根据范围元素匹配条件在xml根元素范围内查找到所有的范围元素,提供给压缩装置其它模块使用;
所述目标元素匹配条件设置子模块用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入目标元素匹配条件信息;并根据目标元素匹配条件在其范围元素内查找到所有的目标元素,提供给压缩装置其它模块使用;
属性是否存在检测模块,用于将目标元素属性与其元素类属性缓存器进行属性是否存在判断,取得存在于其元素类属性缓存器但不存在于目标元素中的属性;
元素解压模块,用于将属性是否存在检测模块得到的属性从元素类属性缓存器添加到目标元素中,使得目标元素恢复了该元素类的所有属性,从而实现了元素解压;
元素属性缓存器管理模块,用于记录指定元素类上一个元素节点具有的所有属性信息;如果当前目标元素不存在其元素类属性缓存器,则使用该目标元素所有属性新建其元素类属性缓存器;当前目标元素与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到元素类属性缓存器;将存在于目标元素但不存在于其元素类属性缓存器中的属性添加到元素类属性缓存器中;
xml解压文档生成模块,用于组织解压后的xml文档,并以文件或数据流的形式对外输出解压后的xml文档。
本发明的有益效果是:本发明区别于对元素名或属性名进行映射替换以压缩xml的方法,而是采用解析的前后位置关系利用属性变更状态,只保留与前一个同类型元素不相同属性的方法实现xml文档压缩。xml文档中同类型元素越多,元素属性越多,压缩率越高。实际应用在文档内容领域可以达到30%~75%压缩率,可大大节约文档空间。尤其是视图文档表示领域,属性大量的被用来修饰文字段落内容的格式、样式、配置等,属性的占比甚至会超过文字内容的占比,使用本发明的压缩方法和装置可大大节约文档空间。本发明提出的可扩展标记语言xml文档的压缩、解压方法和装置,不仅限于对xml文档进行压缩、解压,还可以扩展到所有基于xml、html格式或其它类似的标记语言格式文档。
附图说明
图1为本发明的可扩展标记语言xml文档压缩方法的流程图;
图2为本发明的可扩展标记语言xml文档解压方法的流程图;
图3为本发明的可扩展标记语言xml文档压缩装置的模块图;
图4为本发明的可扩展标记语言xml文档解压装置的模块图。
具体实施方式
本发明使用的术语定义如下:
范围元素:设定的压缩或解压规则作用范围元素,迭代遍历该范围元素内的所有“目标元素”对其实施压缩或解压操作。
目标元素:被压缩或解压的元素。
元素类:相同元素名或标签名的元素认为是同一类元素,称为某元素类;比如所有标签名为paragraph的元素,称为paragraph元素类。
元素类属性缓存器:指定元素类的属性缓存器用于缓存该元素类的当前所有属性及其属性值。
下面结合附图和具体实施例进一步说明本发明的技术方案。
如图1所示,本发明的一种可扩展标记语言xml文档压缩方法,采用的技术方案是:本发明区别于对元素名或属性名进行映射替换以压缩xml的方法,而是采用解析的前后位置关系利用属性变更状态,只保留与前一个同类型元素不相同属性的方法实现压缩xml文档。具体包括以下步骤:
a、读入未压缩的xml文档数据:
本实施例中,一段用于表示全结构化电子病历的未压缩xml文档内容如下:
b、设置压缩前置条件:包括范围元素匹配条件和目标元素匹配条件;
所述范围元素定义为压缩规则作用范围的元素;
范围元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配范围元素的条件;
目标元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配目标元素的条件。
c、匹配范围元素:遍历xml文档,找到元素名为main的所有元素,将其作为范围元素,在main范围元素内为paragraph元素建立paragraph元素类属性缓存器,其初始值为空;为format元素建立format元素类属性缓存器,其初始值为空;进入范围元素时初始化元素类属性缓存器为空,在范围元素内第一个目标元素的属性不会被压缩,而是会作为初始元素类属性值被全部保留。
d、匹配目标元素,并进行目标元素压缩操作;
具体实现方法为:
d1、遍历满足范围元素匹配条件的元素,取得满足目标元素匹配条件的子元素,将其作为需要压缩的目标元素;
d2、将目标元素按照如下规则进行压缩:
(1)当目标元素没有对应的元素类属性缓存器时,则将当前目标元素所有属性保存到xml压缩文档中;
(2)当目标元素的具体属性值不同于其元素类属性缓存器对应属性的属性值时,将目标元素属性保存到xml压缩文档中,否则目标元素的此属性不需要保存到xml压缩文档中;
(3)将存在于目标元素但不存在于其元素类属性缓存器中的属性,保存到xml压缩文档中。
e、更新元素类属性缓存器,压缩状态元素类属性缓存器更新算法规则如下:
(1)如果当前目标元素没有对应的元素类属性缓存器,则使用当前目标元素所有属性新建其元素类属性缓存器;
(2)将当前目标元素与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到元素类属性缓存器;
(3)将存在于目标元素但不存在于其元素类属性缓存器中的属性添加到元素类属性缓存器中。
本实施例文档的具体压缩过程为:
(1)将当前目标元素(第一个paragraph元素)与paragraph元素类属性缓存器比对;应用目标元素压缩算法规则,得到当前目标元素压缩后数据如下:
<paragraphid=""name=""cfg="0"x-cfg="0"left-indent="0.00"right-indent="0.00"space-before="0.00"space-after="0.00"specificindent-value="0.00"linespace-value="0.00"level="0"/>
更新后paragraph元素类属性缓存器中的属性值表示表一所示。
表一
(2)匹配到第一个format目标元素,并进行目标元素压缩操作。将当前目标元素(第一个format元素)与format元素类属性缓存器比对;应用目标元素压缩算法规则,得到当前目标元素压缩后数据如下:
<formatcfg="0"fontname="宋体"size="16"color="00000000"back-color="00000000"/>
更新后format元素类属性缓存器中的属性值表示如表二所示。
表二
(3)匹配到第二个format目标元素,并进行目标元素压缩操作。将当前目标元素(第二个format元素)与format元素类属性缓存器比对,应用目标元素压缩算法规则,得到当前目标元素压缩后数据如下:
<formatcfg="1"/>。
应用压缩状态元素类属性缓存器更新算法规则,更新后format元素类属性缓存器中的属性值表示如表三所示。
表三
(4)匹配到第二个paragraph目标元素,并进行目标元素压缩操作,将当前目标元素(第二个paragraph元素)与paragraph元素类属性缓存器比对;应用目标元素压缩算法规则;得到当前目标元素压缩后数据如下:
<paragraphx-cfg="10"specificindent-value="2.00"/>
应用压缩状态元素类属性缓存器更新算法规则,更新后paragraph元素类属性缓存器中的属性值表示如表四所示。
表四
(5)继续遍历,匹配到第三个format目标元素,并进行目标元素压缩操作。将当前目标元素(第三个format元素)与format元素类属性缓存器比较;应用目标元素压缩算法规则,得到当前目标元素压缩后数据如下:
<formatcfg="0"/>
应用压缩状态元素类属性缓存器更新算法规则,更新后format元素类属性缓存器中的属性值表示如表五所示。
表五
(6)继续遍历,匹配到第三个paragraph目标元素,并进行目标元素压缩操作
将当前目标元素(第三个paragraph元素)与paragraph元素类属性缓存器比对;应用目标元素压缩算法规则;得到当前目标元素压缩后数据如下:
<paragraph/>
应用压缩状态元素类属性缓存器更新算法规则,当前场景paragraph元素类属性缓存器的值不需要更新。
(7)继续遍历,匹配到第四个format目标元素,并进行目标元素压缩操作。将当前目标元素(第四个format元素)与format元素类属性缓存器比较,应用目标元素压缩算法规则,得到当前目标元素压缩后数据如下:<format/>
应用压缩状态元素类属性缓存器更新算法规则,当前场景不需要更新format目标元素属性缓存器。
整个xml文档遍历结束,得到xml压缩文档如下;
压缩的直观过程表示如表六和表七所示。
表六
表七
示例压缩文档达到了48%的压缩率。xml文档元素属性的所占比例越高,压缩率越高,实际可以达到30%~75%压缩率。
如图2所示,本发明的一种可扩展标记语言xml文档解压方法,包括以下步骤:
f、读入xml压缩文档数据;
一段用于表示全结构化电子病历的已压缩xml文档内容如下
g、设置解压前置条件:包括范围元素匹配条件和目标元素匹配条件;
范围元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配范围元素的条件;
目标元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配目标元素的条件;
h、匹配范围元素:遍历xml文档,找到所有满足范围元素匹配条件的元素,即为范围元素;然后将范围元素下所有元素的类属性缓存器被初始化为空;
i、匹配目标元素,并进行目标元素解压操作;包括以下子步骤:
i1、遍历范围元素,取得满足目标元素匹配条件的子元素,即为需要解压的目标元素;i2、通过如下目标元素解压算法从压缩xml文档中恢复目标元素所有的属性:
当前目标元素没有其元素类属性缓存器时,该目标元素不需要解压操作;
将目标元素已有的所有属性与其元素类属性缓存器比较,将只存在于其元素类属性缓存器中的属性恢复到目标元素中,从而使该目标元素恢复了该类元素所有的属性。
j、更新元素类属性缓存器,解压状态元素类属性缓存器更新算法规则如下:
(1)如果当前目标元素没有对应的元素类属性缓存器,则使用当前目标元素所有属性新建其元素类属性缓存器;
(2)将当前目标元素属性与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到其元素类属性缓存器;
(3)将存在于目标元素但不存在于其元素类属性缓存器中的属性更新到其元素类属性缓存器。
本实施例的压缩文档解压具体过程为:
(1)匹配到第一个paragraph目标元素,进行目标元素解压操作。将当前目标元素(第一个paragraph元素)与paragraph元素类属性缓存器比较,应用目标元素解压算法规则,得到当前目标元素解压后数据如下:
<paragraphid=""name=""cfg="0"x-cfg="0"left-indent="0.00"right-indent="0.00"space-before="0.00"space-after="0.00"specificindent-value="0.00"linespace-value="0.00"level="0"/>
应用解压状态元素类属性缓存器更新算法规则,更新后paragraph元素类属性缓存器中的属性值表示如表八所示。
表八
(2)匹配到第一个format目标元素,进行目标元素解压操作。将当前format目标元素(第一个format元素)与format元素类属性缓存器比较,应用目标元素解压算法规则,得到当前目标元素解压后数据如下:
<formatcfg="0"fontname="宋体"size="16"color="00000000"back-color="00000000"/>
应用解压状态元素类属性缓存器更新算法规则,更新后format元素类属性缓存器表示如表九所示。
表九
(3)匹配到第二个format目标元素,进行目标元素解压操作。将当前format目标元素(第二个format元素)与format元素类属性缓存器比较,应用目标元素解压算法规则,得到当前目标元素解压后数据如下:
<formatcfg="1"fontname="宋体"size="16"color="00000000"back-color="00000000"/>
应用解压状态元素类属性缓存器更新算法规则,更新后format元素类属性缓存器表示如表十所示。
表十
(4)匹配到第二个paragraph目标元素,进行目标元素解压操作。将当前paragraph目标元素(第二个paragraph元素)与paragraph元素类属性缓存器比较,应用目标元素解压算法规则,得到当前目标元素解压后数据如下:
<paragraphid=""name=""cfg="0"x-cfg="10"left-indent="0.00"right-indent="0.00"space-before="0.00"space-after="0.00"specificindent-value="2.00"linespace-value="0.00"level="0"/>
应用解压状态元素类属性缓存器更新算法规则,更新后的paragraph元素类属性缓存器状态如表十一所示。
表十一
(5)继续遍历,匹配到第三个format目标元素,进行目标元素解压操作
将当前format目标元素(第三个format元素)与format元素类属性缓存器比较,应用目标元素解压算法规则,得到当前目标元素解压后数据如下:
<formatcfg="0"fontname="宋体"size="16"color="00000000"back-color="00000000"/>
应用解压状态元素类属性缓存器更新算法规则,更新后format元素类属性缓存器表示如表十二所示。
表十二
(6)继续遍历,匹配到第三个paragraph目标元素,进行目标元素解压操作。将当前paragraph目标元素(第三个paragraph元素)与paragraph元素类属性缓存器比较,应用目标元素解压算法规则,得到当前目标元素解压后数据如下:
<paragraphid=""name=""cfg="0"x-cfg="10"left-indent="0.00"right-indent="0.00"space-before="0.00"space-after="0.00"specificindent-value="2.00"linespace-value="0.00"level="0"/>
应用解压状态元素类属性缓存器更新算法规则,当前场景paragraph元素类属性缓存器不需要更新。
(7)继续遍历,匹配到第四个format目标元素,进行目标元素解压操作。将当前format目标元素(第三个format元素)与format元素类属性缓存器比较,应用目标元素解压算法规则,得到当前目标元素解压后数据如下:
<formatcfg="0"fontname="宋体"size="16"color="00000000"back-color="00000000"/>
应用解压状态元素类属性缓存器更新算法规则,当前场景format元素类属性缓存器不需要更新。
整个xml文档遍历结束,得到解压后的xml文档;
如图3所示,本发明的一种可扩展标记语言xml文档的压缩装置,包括以下模块:
接收读取模块:用于接收并读取需要压缩的xml文档;
压缩前置条件设置模块:包括范围元素匹配条件设置子模块和目标元素匹配条件设置子模块;
所述范围元素匹配条件设置子模块,用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入范围元素匹配条件信息;并根据范围元素匹配条件在xml根元素范围内查找到所有的范围元素,提供给压缩装置其它模块使用;
所述目标元素匹配条件设置子模块,用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入目标元素匹配条件信息;并根据目标元素匹配条件在其范围元素内查找到所有的目标元素,提供给压缩装置其它模块使用;
属性差异检测模块,用于将目标元素属性与其元素类属性缓存器进行属性值比较,取得属性值不同的属性;将目标元素属性与其元素类属性缓存器进行属性是否存在判断,取得存在于目标元素但不存在于其元素类属性缓存器中的属性;
元素压缩模块,用于将目标元素中经过属性差异检测模块得到的差异属性保存到压缩后xml文档中,目标元素其余属性将被丢弃,从而实现了元素压缩;
元素属性缓存器管理模块,用于记录指定元素类上一个元素节点具有的所有属性信息;如果当前目标元素不存在其元素类属性缓存器,则使用该目标元素所有属性新建其元素类属性缓存器;当前目标元素与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到元素类属性缓存器;将存在于目标元素但不存在于其元素类属性缓存器中的属性添加到元素类属性缓存器中;
xml压缩文档生成模块,用于组织压缩后的xml文档,并以文件或数据流的形式对外输出压缩后的xml文档。
如图4所示,本发明的一种可扩展标记语言xml文档的解压装置,其特征在于,包括以下模块:
接收读取模块,用于接收并读取需要压缩的xml文档;
解压前置条件设置模块,包括范围元素匹配条件设置子模块和目标元素匹配条件设置子模块;
所述范围元素匹配条件设置子模块用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入范围元素匹配条件信息;并根据范围元素匹配条件在xml根元素范围内查找到所有的范围元素,提供给压缩装置其它模块使用;
所述目标元素匹配条件设置子模块用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入目标元素匹配条件信息;并根据目标元素匹配条件在其范围元素内查找到所有的目标元素,提供给压缩装置其它模块使用;
属性是否存在检测模块,用于将目标元素属性与其元素类属性缓存器进行属性是否存在判断,取得存在于其元素类属性缓存器但不存在于目标元素中的属性;
元素解压模块,用于将属性是否存在检测模块得到的属性从元素类属性缓存器添加到目标元素中,使得目标元素恢复了该元素类的所有属性,从而实现了元素解压;
元素属性缓存器管理模块,用于记录指定元素类上一个元素节点具有的所有属性信息;如果当前目标元素不存在其元素类属性缓存器,则使用该目标元素所有属性新建其元素类属性缓存器;当前目标元素与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到元素类属性缓存器;将存在于目标元素但不存在于其元素类属性缓存器中的属性添加到元素类属性缓存器中;
xml解压文档生成模块,用于组织解压后的xml文档,并以文件或数据流的形式对外输出解压后的xml文档。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
1.一种可扩展标记语言xml文档压缩方法,其特征在于,包括以下步骤:
a、读入未压缩的xml文档数据:
b、设置压缩前置条件:包括范围元素匹配条件和目标元素匹配条件;
c、匹配范围元素:遍历xml文档,找到所有满足范围元素匹配条件的元素,即为范围元素;然后将范围元素下所有元素的类属性缓存器初始化为空;
d、匹配目标元素,并进行目标元素压缩操作;
e、更新元素类属性缓存器。
2.根据权利要求1所述的一种可扩展标记语言xml文档压缩方法,其特征在于,所述范围元素定义为压缩规则作用范围的元素;
范围元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配范围元素的条件;
目标元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配目标元素的条件。
3.根据权利要求1所述的一种可扩展标记语言xml文档压缩方法,其特征在于,所述步骤d具体实现方法为:
d1、遍历满足范围元素匹配条件的元素,取得满足目标元素匹配条件的子元素,将其作为需要压缩的目标元素;
d2、将目标元素按照如下规则进行压缩:
(1)当目标元素没有对应的元素类属性缓存器时,则将当前目标元素所有属性保存到xml压缩文档中;
(2)当目标元素的具体属性值不同于其元素类属性缓存器对应属性的属性值时,将目标元素属性保存到xml压缩文档中,否则目标元素的此属性不需要保存到xml压缩文档中;
(3)将存在于目标元素但不存在于其元素类属性缓存器中的属性,保存到xml压缩文档中。
4.根据权利要求1所述的一种可扩展标记语言xml文档压缩方法,其特征在于,所述步骤e中,压缩状态元素类属性缓存器更新算法规则如下:
(1)如果当前目标元素没有对应的元素类属性缓存器,则使用当前目标元素所有属性新建其元素类属性缓存器;
(2)将当前目标元素与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到元素类属性缓存器;
(3)将存在于目标元素但不存在于其元素类属性缓存器中的属性添加到元素类属性缓存器中。
5.一种可扩展标记语言xml文档解压方法,其特征在于,包括以下步骤:
f、读入xml压缩文档数据;
g、设置解压前置条件:包括范围元素匹配条件和目标元素匹配条件;
范围元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配范围元素的条件;
目标元素匹配条件:根据元素名、属性名或二者的组合条件作为匹配目标元素的条件;
h、匹配范围元素:遍历xml文档,找到所有满足范围元素匹配条件的元素,即为范围元素;然后将范围元素下所有元素的类属性缓存器被初始化为空;
i、匹配目标元素,并进行目标元素解压操作;
j、更新元素类属性缓存器。
6.根据权利要求5所述的一种可扩展标记语言xml文档解压方法,其特征在于,所述步骤i包括以下子步骤:
i1、遍历范围元素,取得满足目标元素匹配条件的子元素,即为需要解压的目标元素;
i2、通过如下目标元素解压算法从压缩xml文档中恢复目标元素所有的属性:
当前目标元素没有其元素类属性缓存器时,该目标元素不需要解压操作;
将目标元素已有的所有属性与其元素类属性缓存器比较,将只存在于其元素类属性缓存器中的属性恢复到目标元素中,从而使该目标元素恢复了该类元素所有的属性。
7.根据权利要求5所述的一种可扩展标记语言xml文档解压方法,其特征在于,所述步骤j中,解压状态元素类属性缓存器更新算法规则如下:
(1)如果当前目标元素没有对应的元素类属性缓存器,则使用当前目标元素所有属性新建其元素类属性缓存器;
(2)将当前目标元素属性与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到其元素类属性缓存器;
(3)将存在于目标元素但不存在于其元素类属性缓存器中的属性更新到其元素类属性缓存器。
8.一种可扩展标记语言xml文档压缩装置,其特征在于,包括以下模块:
接收读取模块:用于接收并读取需要压缩的xml文档;
压缩前置条件设置模块:包括范围元素匹配条件设置子模块和目标元素匹配条件设置子模块;
所述范围元素匹配条件设置子模块,用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入范围元素匹配条件信息;并根据范围元素匹配条件在xml根元素范围内查找到所有的范围元素,提供给压缩装置其它模块使用;
所述目标元素匹配条件设置子模块,用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入目标元素匹配条件信息;并根据目标元素匹配条件在其范围元素内查找到所有的目标元素,提供给压缩装置其它模块使用;
属性差异检测模块,用于将目标元素属性与其元素类属性缓存器进行属性值比较,取得属性值不同的属性;将目标元素属性与其元素类属性缓存器进行属性是否存在判断,取得存在于目标元素但不存在于其元素类属性缓存器中的属性;
元素压缩模块,用于将目标元素中经过属性差异检测模块得到的差异属性保存到压缩后xml文档中,目标元素其余属性将被丢弃,从而实现了元素压缩;
元素属性缓存器管理模块,用于记录指定元素类上一个元素节点具有的所有属性信息;如果当前目标元素不存在其元素类属性缓存器,则使用该目标元素所有属性新建其元素类属性缓存器;当前目标元素与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到元素类属性缓存器;将存在于目标元素但不存在于其元素类属性缓存器中的属性添加到元素类属性缓存器中;
xml压缩文档生成模块,用于组织压缩后的xml文档,并以文件或数据流的形式对外输出压缩后的xml文档。
9.一种可扩展标记语言xml文档解压装置,其特征在于,包括以下模块:
接收读取模块,用于接收并读取需要压缩的xml文档;
解压前置条件设置模块,包括范围元素匹配条件设置子模块和目标元素匹配条件设置子模块;
所述范围元素匹配条件设置子模块用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入范围元素匹配条件信息;并根据范围元素匹配条件在xml根元素范围内查找到所有的范围元素,提供给压缩装置其它模块使用;
所述目标元素匹配条件设置子模块用于从xml文档读取范围元素匹配条件信息或由外部应用通过本模块写入目标元素匹配条件信息;并根据目标元素匹配条件在其范围元素内查找到所有的目标元素,提供给压缩装置其它模块使用;
属性是否存在检测模块,用于将目标元素属性与其元素类属性缓存器进行属性是否存在判断,取得存在于其元素类属性缓存器但不存在于目标元素中的属性;
元素解压模块,用于将属性是否存在检测模块得到的属性从元素类属性缓存器添加到目标元素中,使得目标元素恢复了该元素类的所有属性,从而实现了元素解压;
元素属性缓存器管理模块,用于记录指定元素类上一个元素节点具有的所有属性信息;如果当前目标元素不存在其元素类属性缓存器,则使用该目标元素所有属性新建其元素类属性缓存器;当前目标元素与其元素类属性缓存器比较,将属性值不一样的属性从目标元素更新到元素类属性缓存器;将存在于目标元素但不存在于其元素类属性缓存器中的属性添加到元素类属性缓存器中;
xml解压文档生成模块,用于组织解压后的xml文档,并以文件或数据流的形式对外输出解压后的xml文档。
技术总结