基于配置文件对XML数据进行字段提取及结构化方法与流程

文档序号:17926120发布日期:2019-06-15 00:25阅读:285来源:国知局
基于配置文件对XML数据进行字段提取及结构化方法与流程

本发明属于xml文档自动识别技术领域,尤其是涉及一种基于配置文件对xml数据进行字段提取及结构化方法。



背景技术:

可扩展标记语言(extensiblemarkuplanguage,xml)是一种用于标记电子文件使其具有结构性的标记语言。作为目前各种应用程序之间进行数据传输的最常用的工具,xml通过对文档和数据进行结构化处理,从而能够在部门、客户和供应商之间进行交换,实现动态内容生成,企业集成和应用开发。

海量数据的增删改查一直以来都是数据库的强项,完全结构化的数据在数据库中的操作性能远高于半结构化或非结构化数据的同类操作。多数场景下,xml数据的入库成为了各行各业共同面临的问题。尽管xml在一定程度上对数据进行了结构化处理,xml文档本身与结构化数据库仍有着很大的区别。xml文件的访问接口已由w3c及xml_dev邮件列表分别通过dom(documentobjectmodel,文档对象模型)和sax(simpleapiforxml,xml简单编程接口)实现。这些接口为xml数据的提取提供了便利,但并没有解决xml与数据库之间数据组织形式不同的问题。

利用dtd和xmlschema是解决这一问题的方法之一,通过解析xml文档中各标签的定义及其组织关系,可以将其转化为数据库表的定义。然而这种方法存在着几点弊端。首先,通过这种方法解析的xml文件必须包含xml文档中的全部内容,而很多场景下用户需要的可能只是xml文档中某些特定标签中的信息。第二,dtd和xmlschema为了提高xml文档的表达能力,往往会定义大量不同的xml标签,而实际的xml文档中这些标签出现的频率并不高。将全部标签转换为数据库中的字段会导致大量的数据冗余现象,从而影响数据库查询效率。第三,dtd和xmlschema往往包含对外部xml标签定义的引用,如数学公式的xml标签定义等。这些引用的内容往往极其复杂,将这类信息转换为数据库中的表即困难又没有意义。

田振兴等人提出了一种基于模式匹配的xml文件与关系数据库转换的方法,该方法提出了四种xml节点的数据组织格式,并基于这四种格式构建xml节点的数据模式,对数据模式进行匹配后得到结构化的数据。这种方法的局限性在于,xml文档的结构复杂多样,四类数据格式无法适用所有情况。另外,该方法提出了配置文件驱动xml结构,但缺乏对配置文件的设计与解析方法的详细说明。



技术实现要素:

有鉴于此,本发明旨在提出一种基于配置文件对xml数据进行字段提取及结构化方法,以实现xml文档与关系数据库的转换。

为达到上述目的,本发明的技术方案是这样实现的:

基于配置文件对xml数据进行字段提取及结构化方法,包括如下步骤:

步骤1,读取配置文件,在数据库中创建表;

步骤2,读取单个的xml文件,根据对应的配置文件进行xml节点定位;

步骤3,对定位的xml节点进行xml数据提取;

步骤4,对提取的xml数据进行数据后处理;

步骤5,将处理后的数据存入数据库中创建的表。

进一步的,所述配置文件的编写规则包括:数据库表的表示方法、数据字段信息的表示方法、xml节点的定位信息表示方法、xml数据提取的配置信息表示方法、数据后处理的配置信息表示方法;

其编写方法包括:分析xml文件的格式,确定所有待提取的内容,并找到相应的标签路径,根据标签路径编写配置文件,每种数据内容占一行;每个配置文件对应关系数据库中的一张表,配置文件中每行对应数据库表中的一个字段;

并在配置文件中添加待提取数据对应的数据库表中的列名;多个列之间,同名的列进行合并,不同名的列作为多个表字段组成一个关系表。

进一步的,在步骤3中,将对每个定位节点提取的所有数据进行拼接,得到一个数据结果;将数据结果存入数组,作为一列数据;

每个配置文件对应一个数组,配置文件的每一行对应数组中的一列。

进一步的,在步骤4中,对提取的xml数据进行数据后处理,包括如下步骤:

步骤41,对步骤3的结果数组,将表中需要拼接的列进行横向拼接,形成新的列,通过配置文件中指定分隔符来实现;

步骤42,将上步中的全部列做join操作,遍历所有列,每列各取出一个元素,这些元素构成的所有组合即join的结果;

步骤43,对上步的结果,将指定的列拆分为多个列,通过识别特定的分隔符对指定列进行拆分。

相对于现有技术,本发明具有以下优势:

(1)本发明实现了xml文件到关系数据库的自动转换,通过基于配置文件的xml标签格式描述和处理方式的自动识别策略,实现了信息提取的代码无关化和操作的批量化;可以将xml文档转换为关系数据库中的多个表,而不是xml文件与数据库表的一一对应。

(2)本发明提出了一种基于列操作的xml信息提取和结构化的方法,具有强鲁棒性和高泛用性。

附图说明

构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为本发明实施例xml节点定位的算法伪代码;

图2为本发明实施例几种场景下的提取结果示意图;

图3为本发明join操作的一个实例示意图;

图4为本发明方法的程序流程图。

具体实施方式

需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

下面将参考附图并结合实施例来详细说明本发明。

一种基于配置文件对xml数据进行字段提取及结构化方法,也为xml文档与关系数据库的转换方法,如图1所示,包括如下步骤:

步骤1,编写配置文件;

步骤2,读取全部的配置文件,在数据库中创建表;

步骤3,读取单个的xml文件,根据对应的配置文件进行xml节点定位,xml节点定位的算法伪代码如图1所示;

步骤4,对定位的xml节点进行xml数据提取;

步骤5,对提取的xml数据进行数据后处理,即结构化处理;

步骤6,将处理后的数据存入数据库;

重复步骤3至6,读取全部的xml文档,完成数据入库。

具体的,步骤1为根据配置文件的编写规则进行配置文件的编写步骤为:

其中,编写规则包括:数据库表的表示方法、数据字段信息的表示方法、xml节点的定位信息表示方法、xml数据提取的配置信息表示方法、数据后处理的配置信息表示方法;

步骤11,分析xml文件的格式,确定所有待提取内容,并找到相应的标签路径;根据标签路径编写配置文件,每种数据内容占一行;

其中,配置文件的每行表示一种类型的xml节点数据的提取。配置文件每行分为三部分内容,分别为:xml节点定位信息(节点路径),xml节点中内容提取策略,以及提取的内容进入数据库时对应的数据库表的字段;

配置文件的节点路径可以包含节点的属性名称及属性值,在进行xml节点定位时,只会定位到xml文件中属性值与配置文件中属性值相同的节点;该操作定位到的每一个节点通过后续操作,将得到一条数据结果。

步骤12,确定待提取内容的组织形式,即在定位后的xml节点下,其子节点的内容应以何种方式提取,分为如下几种情况:

a.若待提取的内容为当前节点的一种或几种子节点拼接后的结果,例如某人的多项个人信息,根据配置文件中指定的子节点路径找到其中的一种或多种子节点,每种节点最多一个,并将这些子节点的值拼接起来作为一个结果。

其中,若遇到当前节点下某种子节点的数量大于1,考虑定位不准确或xml文档结构不规范,通过修改配置文件中的配置信息及步骤51予以解决。

b.若待提取的内容为当前节点的一种子节点本身的全部拼接,例如一篇文章的多个段落,则根据配置文件中指定的子节点路径找到其中的一种子节点,数量不限,将这些子节点的值拼接起来作为一个结果,拼接时可以从配置文件中指定分隔符。

c.若待提取的内容为当前节点下的全部内容,例如结构复杂的文章,则获取该节点下的全部内容作为一个结果。

在本步骤中,可以通过修改配置文件获取节点下某些属性的值,代替节点的文本内容。

步骤13,在配置文件中添加待提取数据对应的数据库中的字段名,即该数据在数据表中的列名。

步骤14,重复步骤11~13,完成配置文件中全部数据列的编写。

步骤15,如需添加额外列,则在配置文件中添加相应内容,例如添加xml文件路径时添加“path”标识。

具体的,步骤4中对定位的xml节点进行xml数据提取后,将单个xml文档提取xml数据的结果存入数组,作为一列数据;在配置文件中指定列的名称,多个列之间,同名的列进行合并,不同名的列作为多个表字段组成一个关系表;将结果以数组的形式保存在内存中。

配置文件可以有多个,每个配置文件对应一个数组,配置文件的每一行对应数组中的一列;图2所示为几种场景下的提取结果。

具体的,步骤5中对提取的xml数据进行数据后处理,包括如下步骤:

步骤51,对步骤4的结果数组,将表中指定列中对应位置的内容进行连接,形成新的列,拼接时可以从配置文件中指定分隔符。

本操作中的连接指将多个列中的内容横向拼接,列的长度不变;而步骤15中“同名的列进行合并”中的合并指纵向合并,内容不变,列的长度增加。被拼接列的指定位于配置文件中,以此方式实现的拼接将在后面的步骤重新拆分成多列。

步骤52,将上步中的全部列做join操作,其定义为,遍历所有列,每列各取出一个元素,这些元素构成的所有组合即join的结果。图3给出了join操作的一个实例,该结果仍为一个表,其列数等于原表的列数,且每列的行数均相等。

需要注意的是,为了避免数据冗余,在设计数据库表和配置文件时应避免将长度超过1的两列放在同一个表中。例如,我们从一篇xml文档中提取了某论文的3个作者姓名和4个关键词,那么作者姓名和关键词就应该分别放在不同的数据库表中,即分别编写配置文件;而论文的标题可以被提取出来作为两个表的主键,即通过唯一的论文标题与作者姓名和关键词分别join。

步骤53,对步骤52的结果,将指定的列拆分为多个列,通过识别特定的分隔符对指定列进行拆分。

本操作中的指定的列是步骤12.a或步骤51中拼接的列。该操作的主要用途为,将不需要join的列拼接起来,join操作后再拆分,即可防止多列相互join造成的数据冗余。被拆分列的识别规则在配置文件和程序中分别设置,具体方法为:

步骤531.在程序中设置特殊分隔符。

步骤532.需要拆分的列,在进行拼接操作时,将特殊分隔符写在配置文件中对应的位置上,此外,合并列的列名也要以相应的分隔符分隔并合并。

步骤533.遍历步骤52的结果数组的每一列,找到特殊分隔符即进行拆分,同时拆分合并的的列名。

步骤534.将拆分后的列存入数组。

这里指出,xml数据提取的结果不仅限于导入关系数据库,还可以以文本文件或json等格式保存。

另外,本发明的配置文件的规则说明,还包括以下内容:

1.对于一个xml文档,可以将其转换为多个关系数据库表,每个数据库表对应一个配置文件,配置文件的文件名与数据库表的表名相对应。配置文件中,每行对应数据库表中的一个字段,即一列。

2.“|”操作符,用于分隔配置文件中每行内容包含的“定位”,“提取”和“命名”三部分信息,如a|b|c表示提取所有满足条件“a”的节点中的信息“b”,插入数据库的“c”字段中。

3.“.”操作符,用于节点定位和标签提取时从当前节点进入其某个子节点,如a.b表示从包含信息a的节点进入其包含信息b的子节点。

4.“”操作符,用于分隔一个节点信息中节点名和各节点属性,如ab表示节点名为a,且属性为b。

5.“:”操作符,在“定位”部分用于连接一个属性名称和属性值,如a:b表示筛选节点中属性a的值等于b的节点;在“提取”部分用于连接“提取属性”标识符和被提取的节点属性名,如a>attribute:b表示提取节点a中属性名为b的属性的值。

6.“>”操作符,用于在“提取”部分连接被提取节点的名称与提取方式标识符,提取方式标识符包括:

6.1“value”提取首个出现的符合条件的节点的文本

6.2“attribute”提取该节点的某个属性

6.3“childs”提取全部符合条件的节点的文本并拼接成文本

6.4“alltext”提取符合条件的节点下的全部内容并拼接成文本

7.“;”操作符,用于连接“提取”部分的多个提取内容,如a;b表示提取a和b后按顺序拼接成文本。

8.“_”操作符,在“提取”部分出现在“;”之后,表示插入特定的分隔符,如a;_#;b表示在a和b拼接时插入分隔符“#”;在“命名”部分作为一个数据库字段名的开头,表示该字段中的值将被拼接到前一字段对应位置之后,而不是在数据库中新建一个字段,如:“a1|a2|a3”“b1|b2|_”表示“b2”中的值将被拼接到“a2”对应位置之后。

9.“##”特殊连接符,在“提取”和“命名”部分成对出现,表示提取的内容在拼接和join操作后需要拆分成多个字段,如a|b1;_##;b2|c1##c2表示b1和b2的内容最终被拆分为两个字段,名称分别为c1和c2。

10.“path”标识符,用于为数据库表添加xml文件路径信息,该内容在配置文件中独占一行。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1