首页> 中国专利> 模式匹配的XML文件格式与关系数据库转换的处理方法

模式匹配的XML文件格式与关系数据库转换的处理方法

摘要

本发明公开了模式匹配的XML文件格式与关系数据库转换的处理方法,包括:步骤1,通过分析XML文件格式,识别出XML文件中的数据模式,将其编写为数据模式配置文件;步骤2,读取并解析XML文件,将其与数据模式配置文件中的数据模式进行匹配,形成树型的数据结构,识别出数据项;步骤3,利用识别的数据项,将数据项转换为对应的数据库表和数据库字段,组装成SQL语句,完成对数据操作,实现XML文件与关系数据库的转换。

著录项

  • 公开/公告号CN106557568A

    专利类型发明专利

  • 公开/公告日2017-04-05

    原文格式PDF

  • 申请/专利号CN201611029423.1

  • 发明设计人 田振兴;史慕志;法晓宇;滕达;

    申请日2016-11-14

  • 分类号G06F17/30(20060101);

  • 代理机构32237 江苏圣典律师事务所;

  • 代理人胡建华

  • 地址 210007 江苏省南京市苜蓿园东街1号

  • 入库时间 2023-06-19 01:53:56

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-05-21

    授权

    授权

  • 2017-05-03

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20161114

    实质审查的生效

  • 2017-04-05

    公开

    公开

说明书

技术领域

本发明属于计算机数据处理技术领域,本发明是模式匹配的XML文件格式与关系数据库转换的处理方法。

背景技术

可扩展标记语言(eXtensible Markup Language,XML)作为一种计算机技术虽然表面上非常简单,但对计算机软件、数据库管理和B2B通信世界的广泛适用性和深远影响令人惊讶。这种基于标记的可扩展语言提供强大的功能,不但可以为构建数据提供一种高度结构化而且易于处理的方式,而且能够存储、交换关于数据意义的信息,是跨平台的信息交换的主要途径。

要应用XML进行数据交换,首先要解决XML文档的解析问题,对其语义进行明确解读。W3C及XML_DEV邮件列表的成员分别提出了两个标准的应用程序接口:DOM(Document Object Model,文档对象模型)和SAX(Simple API for XML,XML简单编程接口),其主要实现了对XML文件的访问接口,并未提供数据转换机制。要进一步实现数据字段的识别处理需要针对每一数据项编写源代码进行识别处理,对于数据接口的更新操作需要源代码级的修改,缺乏灵活性。

在已有的XML与关系数据库转换实现方法上,基本上都是基于XML文件中的DTD和XML Schema(DTD和XML Schema是用于对XML文档进行约束、确定XML文档的结构、元素及属性的名称和类型)实现数据转换,然而现实中大多数情况下XML接口文件中是没有XML Schema和DTD的。(胡华,邵君,基于XML关系数据库转换策略研究与实现.微计算机信息.2008.24(5-3))

XED(XML-Enabled DBMS)是在原有数据库基础上扩展了XML支持模块,完成XML数据和数据库之间的格式转换和传输,通常使用“基于表单”的映射方法。它将XML文档看作是一个表单或者一套表单。也就是说XML文档的结构必须遵循指定的结构,如果XML文档没有遵循该结构规则时,这种映射不可用。(马明,XML数据库技术初探.电脑与电信.2011.)

发明内容

本发明的目的在于提供模式匹配的XML文件格式与关系数据库转换的处理方法,实现从XML文件到数据库表的映射处理方法,在扩充XML文件接口的时候,仅需通过修改配置即可完成对新接口内容的解析处理。

实现本发明目的技术解决方案为:一种模式匹配的XML格式与关系数据库转换的处理方法,本发明包括以下步骤:

步骤1,通过分析XML文件格式,根据数据组织方式的不同将XML文件中的数据分为四类数据组,根据XML文件的节点名称及数据组织方式,将其描述为四类数据模式,并储存在模式配置文件中;

步骤2,读取并解析XML文件,将其与数据模式配置文件中的数据模式进行匹配,形成与数据模式中数据项一一对应的内存数据;

步骤3,根据内存数据与数据模式中数据项的对应关系,将内存数据与对应数据库字段一一对应,组装成SQL语句,完成对数据库的操作,实现XML文件与关系数据库的转换。

步骤1包括如下步骤:

步骤1-1,分析XML文件的数据格式,根据数据组织方式的不同(节点名称不同、节点之间的逻辑关系不同)将XML文件中的数据分为四类数据组,包括:

第一类数据组,是整个XML文件的一组说明性元素,该数据组中各叶节点的上级节点为根节点,且其节点下没有子节点,并在整个XML文件中仅出现一次;

第二类数据组,在XML文件中最多仅出现一次,在该数据组中枝节点为A的情况下,枝节点A的上级节点为根节点,则枝节点A仅出现一次或不出现,其子节点全部为叶节点;

第三类数据组,是在XML文件中具有相同结构,并出现两次以上的数据组,在该数据组中枝节点为B1的情况下,枝节点B1的上级节点为根节点,枝节点B1仅出现一次或不出现,其子节点为可出现两次以上的枝节点B2,则枝节点B2的子节点全部为叶节点;

第四类数据组,是在XML文件中具有相同结构,并出现两次以上的数据组,在该数据组中枝节点为C的情况下,枝节点C的上级节点为根节点,枝节点C中不包含枝节点和叶节点,枝节点C允许出现两次以上或不出现,枝节点C包含两个以上的属性;

上述四类数据模式中各节点的根节点和各枝节点名称不重复。除第一类外,其他三类通过变更改变节点名称,可在同一个数据文件中包含多组数据且不影响程序识别,因此可以用此方法扩充数据交互接口。

步骤1-2,将四类数据组定义为四类数据模式,并通过配置文件具体描述每类数据模式,每一数据模式包含节点路径名,对应的数据库用户名、密码、表名、数据库主键、数据库唯一键、数据库操作策略以及每一数据项对应的数据库字段名、字段类型和字段长度,用来支持对XML文件内容的识别。

本发明步骤2包括如下步骤:

步骤2-1,以每一字段的最大长度作为元素长度(一般设为4000字节,因ORACLE支持最大字段为4000字节),以数据模式配置文件中的数据模式可包含的数据项最大数为元素个数(一般指定为64),定义二维数组;

步骤2-2,读取步骤1-2生成的数据模式配置文件,在内存中形成数据模式结构树;

步骤2-3,读取XML文件,在内存中形成XML结构树;

步骤2-4,将步骤2-3生成的XML结构树中每一节点名称和到根节点的完整路径与按照步骤2-2生成的数据模式结构树中的所有数据模式进行匹配,找出与模式匹配的XML结构树中的数据组。如果有匹配的数据模式,执行步骤2-5;如果没有匹配的数据模式则结束解析。

步骤2-5,利用步骤2-1定义的二维数组动态申请内存,并用0初始化内存,用来存储从XML文件中解析的数据结果。如果已存在相同数据模式的解析数据则将申请的内存附在上一组数据后面,形成数据链表;如果不存在,则作为链表的头节点。

步骤2-6,将步骤2-4中找出的XML结构树中的数据组中每一叶节点名称与相匹配的数据模式中的每一数据项名称进行对比,如果名称匹配,将字符串数据值按照数据模式中数据项顺序存储在步骤2-5生成的二维数组中;如果找不到匹配项则丢弃该数据值。循环比对直至XML结构树中的数据组无数据项,跳转到步骤2-4。

步骤3包括如下步骤:

步骤3-1,循环检查步骤2-6生成的解析结果数据与对应的数据模式,判断数据模式是否需要删除已有数据。如果需要删除已有数据,从步骤2-6生成的数据链表中找出删除操作对应的数据值,剔除重复项,作为SQL删除(DELETE)语句的条件语句;如果不需要删除已有数据,直接执行步骤3-2;

步骤3-2,判断对应的数据模式是否配置了唯一键。如果配置了唯一键,从步骤2-6生成的解析结果数据中找出唯一键对应的数据值并转换为SQL查询语句,查询是否存在唯一键冲突数据,如果唯一键冲突,按照唯一键作为条件语句生成SQL的更新(UPDATE)语句,执行数据更新操作,如果唯一键不冲突,执行步骤3-3;如果未配置唯一键,直接执行步骤3-3;

步骤3-3,判断解析结果数据对应的数据模式是否配置了主键,如果配置了主键,从步骤2-6生成的解析结果数据中找出对应的数据值并转换为SQL查询语句,查询是否存在主键冲突数据,如果存在主键冲突,按照主键作为条件语句生成SQL的更新(UPDATE)语句,执行数据更新操作;如果主键不冲突,生成SQL的插入(INSERT)语句插入数据;如果未配置主键,生成SQL的插入(INSERT)语句插入数据。

步骤3-4,如果存在没有处理的解析结果数据,跳转到步骤3-1;否则结束处理。

有益效果:

本发明方法可以将XML格式文件内容直接转换为数据库SQL语句,实现数据库数据的写入操作。本发明利用模式匹配的原理,将常见的XML格式数据组织形式抽象为四类数据模式,构建该数据模式与数据项的对照关系,将数据项直接转换为对应的数据库字段,并生成数据库SQL语句,可直接操作数据库。数据模式储存在数据文件中,可随时修改、扩充。本发明解决了XML文件接口发生变化时数据解析软件需要适应性修改的问题,在修改、扩充XML接口时,仅需修改模式文件即可支持新数据接口的解析处理。

附图说明

下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。

图1是本发明处理的XML格式数据样例。

图2是本发明XML数据分组模式示意图。

图3是本发明XML数据分组模式描述文件。

图4是本发明对照数据模式将XML解析后再内存中形成的树形数据结构示意图。

图5是本发明的XML解析的处理流程。

图6是本发明的数据入库处理流程。

具体实施方式

下面结合附图对本发明作具体说明。应该指出,所描述的实施例仅是为了说明的目的,而不是对本发明范围的限制。

本发明包括以下步骤:

步骤1,通过分析XML文件格式,根据数据组织方式的不同将XML文件中的数据分为四类数据组,根据XML文件的节点名称及数据组织方式,将其编写为数据模式配置文件;

步骤2,读取并解析XML文件,将其与数据模式配置文件中的数据模式进行匹配,形成与数据模式中数据项一一对应的内存数据;

步骤3,根据内存数据与数据模式中数据项的对应关系,将内存数据与对应数据库字段一一对应,组装成SQL语句,完成对数据库的操作,实现XML文件与关系数据库的转换。

步骤1包括如下步骤:

步骤1-1,分析XML文件的数据格式,根据数据组织方式的不同(节点名称不同、节点之间的逻辑关系不同)将XML文件中的数据分为四类数据组,包括:

第一类数据组,是整个XML文件的一组说明性元素,该数据组中各叶节点的上级节点为根节点,且其节点下没有子节点,在整个XML文件中仅出现一次(如图1所示的第一类);

第二类数据组,在XML文件中最多仅出现一次,在该数据组中枝节点为A的情况下,枝节点A的上级节点为根节点,则枝节点A仅出现一次或不出现,其子节点全部为叶节点(如图1所示的第二类);

第三类数据组,是在XML文件中具有相同结构,并出现两次以上的数据组,在该数据组中枝节点为B1的情况下,枝节点B1的上级节点为根节点,枝节点B1仅出现一次或不出现,其子节点为可出现两次以上的枝节点B2,则枝节点B2的子节点全部为叶节点(如图1所示的第三类);

第四类数据组,是在XML文件中具有相同结构,并出现两次以上的数据组,在该数据组中枝节点为C的情况下,枝节点C的上级节点为根节点,枝节点C中不包含枝节点和叶节点,枝节点C允许出现两次以上或不出现,枝节点C包含两个以上的属性(如图1所示的第四类);

上述四类数据模式中各节点的根节点和各枝节点名称不重复。除第一类外,其他三类通过变更改变节点名称,可在同一个数据文件中包含多组数据且不影响程序识别,因此可以用此方法扩充数据交互接口。

步骤1-2,

将四类数据组定义为四类数据模式,并通过配置文件具体描述每类数据模式,每一数据模式包含节点路径名,对应的数据库用户名、密码、表名、数据库主键、数据库唯一键、数据库操作策略(是否删除已有数据、按照哪些字段删除已有数据)以及每一数据项对应的数据库字段名、字段类型和字段长度,用来支持对XML文件内容的识别。

步骤2包括如下步骤:

步骤2-1,以每一字段的最大长度作为元素长度(可设为4000字节,因ORACLE支持最大字段为4000字节),以数据模式可包含的数据项最大数为元素个数(可指定为64),定义二维数组;

步骤2-2,读取步骤1-2生成的数据模式配置文件,在内存中形成数据模式结构树;

步骤2-3,读取XML文件,在内存中形成XML结构树;

步骤2-4,将步骤2-3生成的XML结构树中每一节点名称和到根节点的完整路径与按照步骤2-2生成的数据模式结构树中的所有数据模式进行匹配,找出与模式匹配的XML结构树中的数据组。如果有匹配的数据模式,执行步骤2-5;如果没有匹配的数据模式则结束解析。

步骤2-5,利用步骤2-1定义的二维数组动态申请内存,并用0初始化内存,用来存储从XML文件中解析的数据结果。如果已存在相同数据模式的解析数据则将申请的内存附在上一组数据后面,形成数据链表。形成类似图4所示的内存数据树;

步骤2-6,将步骤2-4中找出的XML结构树中的数据组中每一叶节点名称与相匹配的数据模式中的每一数据项名称进行对比,如果名称匹配,将字符串数据值按照数据模式中数据项顺序(如图2所示)存储在步骤2-5生成的二维数组中;如果找不到匹配项则丢弃该数据值。循环比对直至XML结构树中的数据组无数据项。跳转到步骤2-4。

步骤3包括如下步骤:

步骤3-1,判断识别的数据项是否配置了删除键,如果配置了,从步骤2-3生成的数据链表中找出所有删除键对应的数据值,剔除重复项,作为SQL删除语句的条件语句。例如结合图1和图3,根据[信息系统交互接口.设备状态]中配置的删除键形成的SQL删除语句为:

DELETE FROM DB_TABLE4WHERE

ZBRQ=TO_DATE('2015-10-01','yyyy-mm-dd')AND SBDW='XX单位';

执行后,删除当天该单位相同日期的已有数据。

步骤3-2,判断识别的数据项是否配置了唯一键,如果配置了,从步骤2-6生成的数据链表中找出对应的每组条数据转换分别转换为SQL查询语句,查询是否存在唯一键冲突数据,如果冲突,按照唯一键作为条件语句生成SQL的UPDATE语句。例如结合图1和图3,根据[信息系统交互接口.设备状态]中配置的唯一键,第一条数据形成的SQL查询语句为:

SELECT COUNT(*)FROM DB_TABLE4WHERE ID=’DDDD0001’;

如果反回值>0,则执行

UPDATE DB_TABLE4SET MC=’路由器’,ZT=’正常’,SL=10,

ZBRQ=TO_DATE('2015-10-01','yyyy-mm-dd'),SBDW='XX单位'WHERE

ID=’DDDD0001’;

步骤3-3,判断识别的数据项是否配置了主键,如果配置了,从步骤2-6生成的数据链表中找出对应的每组条数据转换分别转换为SQL查询语句,查询是否存在主键冲突数据,如果冲突,按照主键作为条件语句生成SQL的UPDATE语句。例如结合图1和图3,根据[信息系统交互接口.设备状态]中配置的主键,第一条数据形成的SQL查询语句为:

SELECT COUNT(*)FROM DB_TABLE4WHERE ID=’DDDD0001’;

如果反回值>0,则执行

UPDATE DB_TABLE4SET SL=10,ID=’DDDD0001’WHERE MC=’路由器’

AND ZT=’正常’AND ZBRQ=TO_DATE('2015-10-01','yyyy-mm-dd')AND

SBDW='XX单位';

否则生成数据插入语句:

INSERT INTO DB_TABLE4(MC,ZT,SL,ID,RQ,SBDW)VALUES(’路由器’,’正常’,10,’DDDD0001’,TO_DATE('2015-10-01','yyyy-mm-dd'),'XX单位');

实施例

参见图1所示,该示例展示了信息系统交互中常用的XML格式数据样例,可从中抽象出四类常见的数据分组模式如下:

第一类,是整个XML文件一组说明性元素,其特征是各叶节点的上级节点为根节点,且其节点下没有子节点,在整个XML文件中仅出现一次(如图1所示的第一类);

第二类,是XML文件中一组最多仅出现一次的数据组,其特征是枝节点(假设为A)的上级节点为根节点,枝节点A仅出现一次或不出现,其子节点全部为叶节点(如图1所示的第二类);

第三类,是在XML文件中具有相同结构,可多次出现的数据组,其特征是枝节点(假设为B1)的上级节点为根节点,枝节点B1仅出现一次或不出现,其子节点为可出现多次的枝节点(假设为B2),B2的子节点全部为叶节点(如图1所示的第三类);

第四类,是在XML文件中具有相同结构,可多次出现的数据组,其特征是枝节点(假设为C)的上级节点为根节点,枝节点C中不包含枝节点和叶节点,枝节点C允许出现两次以上或不出现,枝节点C包含多个属性(如图1所示的第四类);

其中各节点的根节点、各枝节点名称不能重复。

参见图2所示,根据上述分类,利用图1所示的示例文件,形成XML数据分组模式。图中的(0)、(1)、(2)、(3)分别代表四种模式。其中模式(0)因为其直接属于根节点,因而每类接口文件中只能有一组数据,可以增加元素项;模式(1)、(2)、(3)均可任意扩充,增加多个数据组,方便软件接口扩充。

参见图3所示为XML数据模式描述文件。该文件将四类分组模式的特征进行具体描述,将一个数据组与数据库表对应,将每一数据项与数据库字段名、字段类型、数据长度相对应,并描述数据库表的主键、唯一键等信息。

在图3中XML数据分组模式描述文件中,根据与数据库表的对关系,分别描述每一数据项对应的数据库字段、字段长度、数据类型以及每一数据分类对应的数据库表、用户名、密码、主键、唯一键。

其中,[信息系统交互接口数据模式]下是对应支持的XML文件根节点名称,可顺序增加需要支持的XML文件根节点名称;

[信息系统交互接口]下是支持的第一类根节点中包含的数据分组,指定了分组的类型和分组名称,可任意增加模式(1)、(2)、(3)类的数据分组;

[信息系统交互接口.XXXX]下是每一数据分组对应的参数信息,包括数据分组对应数据库的用户名、密码、表明、主键、唯一键,数据项对应的数据字段名、数据类型、数据长度。

参见图5所示,是本发明对照数据模式将XML解析后在内存中形成的树形数据结构。由于XML文件内容是树形的层次结构,在逻辑上存在递归关系,递归遍历整个树结构,利用每个节点的完整路径与模式分组文件进行匹配,在内存中生成整个XML的树形结构,各数据项的顺序与图3的数据分组模式描述文件中是一致的。

为解决数据项类型不一致、长度不一致问题,将内存中所有字段长度定义为足够大相同长度的字符串数组(ORACLE中定义每一字段长度为4000字节,因此定义该长度为4000字节),所有数据都表示为字符类型,只有在拼接SQL语句的时候根据不同的数据项配置的数据类型转换成不同的实际数据类型。

参见图5所示,是本发明XML解析的处理流程。

参见图6所示,是本发明将XML解析后如何完成数据入库操作的处理流程。

对于解析为树形的内存数据结构,首先根据配置的唯一键以及数据库用户名、密码、表名生成查询语句,找出数据库是否存在相同数据,判断本次操作是否为对旧数据的更新操作,如果数据库已经存在相同唯一键的数据,则更新其他数据字段;如果不存在相同唯一键的数据,则再按照主键查找是否存在相同数据,如果存在则更新其他数据字段,如果不存在则生成插入操作的SQL语句,并执行。

上述处理仅解决了数据的增、改操作,对于数据删除操作,存在两种情况1)删除前一次上报的数据;2)本次上报数据比上一次上报数据少若干条记录。

对于第一种情况,需要专门定义删除处理接口,且实际使用中很少涉及,在此忽略;

对于第二种情况,可在XML数据分组模式描述文件增加“删除键”配置项,数据入库前,从接收到的该类数据中找出“删除键”数据项数据值不相同的数据内容作为删除条件,生成删除数据的SQL语句,然后再重新重复前述数据入库过程,实现数据更新操作。例如在图3中[信息系统交互接口.设备状态]下的“删除键”配置为5,则按照“日期”删除。假设第一次上报数据名称包含4条记录,第二次上报数据仅包含3条记录,首先从当前数据中找出“日期”不同的数据项,执行删除操作,然后将当日上报数据全部入库。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号