规则匹配的方法和系统与流程

文档序号:12364037阅读:628来源:国知局
规则匹配的方法和系统与流程

本申请涉及计算机技术领域,尤其涉及一种规则匹配的方法和系统。



背景技术:

在传统的涉及业务规则的应用系统开发过程中,业务规则(Business Rules)是在需求分析阶段由用户提供,内嵌在应用系统的程序代码中。应用系统一旦开发完成,业务规则便相对固定不易改动。例如,运行中的资料管理系统,资料在各个环节的流转规则,除非资料管理系统版本升级,否则,各种流转规则不易变动。

然而,为了满足日益提高的业务需求,需要对应用系统进行优化,其中可能需要对业务规则进行添加、删除或参数变更的操作。业务规则分布于应用系统架构的各个层级。应用系统的每一项策略、规则的变化,都需要开发人员对源代码进行修改,限制了应用系统的灵活性和生命力。

引入规则匹配引擎之后,业务规则从程序代码中分离出来。业务规则存在于规则库中。业务规则不再以程序代码的形式存在于应用系统中,取而代之的是处理业务规则的规则匹配引擎。业务规则被加载到规则匹配引擎中供应用系统调用。规则匹配引擎的一个任务是把当前提交给应用系统的数据与加载在规则匹配引擎中的规则的条件部分进行测试和比对,激活那些符合当前数据的规则。业务规则的修改,是利用规则集成开发环境或规则编辑器,通过对规则库修改而实现。

现有技术中,应用系统中的数据结构多种多样,包括但不限于JSON、XML、列表LIST、哈希表HASH MAP等。实现应用系统的数据与加载在规则匹配引擎中的业务规则的条件部分进行测试和比对,现有技术需要考虑应用 系统中数据结构的多样性的问题。通常,规则匹配引擎的复杂度大于应用系统,在具体的实现过程中,应用系统一般支持规则匹配引擎开放的接口对应的数据结构,或者直接使用规则匹配引擎规定的数据结构。利用规则匹配引擎处理数据时,现有技术将应用系统中的数据结构修改为规则匹配引擎允许的数据结构后再进行处理。

在实现现有技术过程中,发明人发现现有技术中至少存在如下问题:

现有技术在调用规则匹配引擎过程中,对应用系统中的数据结构进行修改,这样,修改后的数据结构中的数据进一步被应用系统处理时,由于数据结构的修改,可能会导致应用系统的不稳定的风险。



技术实现要素:

本申请实施例提供一种对应用系统干扰少的规则匹配的方法,该方法具体包括:

获取目标对象;

选定待匹配的规则;

根据目标对象的数据结构,解析目标对象获得目标对象的属性值;

匹配目标对象的属性值与规则条件的属性值;

其中,目标对象可归并入类,并具有类的数据结构。

本申请实施例还提供一种规则匹配系统,包括:

解析插件,用于:

根据目标对象的数据结构,解析目标对象获得目标对象的属性值;

匹配器,用于:

获取目标对象;

选定待匹配的规则;

匹配目标对象的属性值与规则条件的属性值;

其中,目标对象可归并入类,并具有类的数据结构。

本申请实施例提供的规则匹配方法和系统至少具有如下有益效果:

根据目标对象的数据结构,解析目标对象获得目标对象的属性值,从而方便比较目标对象的属性值与规则条件的属性值,对应用系统干扰少。

附图说明

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

图1为本申请实施例提供的规则匹配的方法的流程图。

图2为本申请实施例提供的规则匹配的系统的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

规则,可以包括规则的条件部分和规则的动作部分。规则的条件部分通常用来表征输入的数据满足何种条件时,规则被触发。规则的动作部分通常用来表征规则被触发时,对输入的数据采取何种动作。规则匹配引擎是一种嵌入在应用系统中的组件。规则匹配引擎的任务是把当前提交给应用系统的数据与加载在规则匹配引擎中的规则的条件部分进行测试和比对,激活那些符合当前数据的规则,根据规则中定义的执行逻辑,触发应用系统中对应的动作以处理数据。

规则匹配引擎可以包括四部分:匹配器(Context)、工作存储器(Working Memory)、和规则集容器(Ruleset Container)、解析插件。

图1为本申请实施例提供的规则匹配的方法的流程图,具体包括以下步骤:

S100:获取目标对象。

在计算机程序中,对象可以是一组变量和一组相关方法的集合。其中,变量表明对象具有的状态。方法表明对象可以完成的行为。现实生活中的实体可以经过抽象,映射为计算机程序中的对象。对象在计算机程序中,通过一种抽象数据类型来描述。这种抽象数据类型成为类(Class)。计算机程序中的对象是类的一个实例。

在本申请实施例中,可以由应用系统提供目标对象。目标对象的变量和方法的参数可以来源于应用系统的数据库内存储的数据,也可以来源于外部环境的即时输入的数据,从而通过参数可以定义出具体的目标对象。

在本申请提供的又一实施例中,获取目标对象,具体包括:

调用应用系统的接口函数获取目标对象,或者按照应用系统的数据存储结构复制目标对象。

规则匹配引擎的匹配器20通过应用系统的接口函数,间接对目标对象进行调用,不改变接口函数引用的目标对象的数据结构,因而可以保证应用系统的数据结构的一致性。或者,规则匹配引擎的工作存储器按照应用系统的数据存储结构复制目标对象,同样不改变应用系统的数据结构,因而可以保证应用系统的数据结构的一致性。匹配器20可以从工作存储器中调用目标对象,该目标对象复制于应用系统。

S200:选定待匹配的规则。

规则匹配引擎按照预设的筛选机制选定待匹配的规则。

在本申请提供的一种实施例中,规则匹配引擎的匹配器20可以按照规则匹配引擎的规则集容器内规则的排列顺序依次选定待匹配的规则。

当然,根据具体业务的要求,选定规则集容器内规则的方式还可以是其他 方式,例如,根据规则的优先级从高到低选择规则。应当指出的是,具体的规则选定方式不应当理解为对本申请保护范围的实质性限制,只要能从规则集容器内选定待匹配的规则都是可以的。

S300:根据目标对象的数据结构,解析目标对象获得目标对象的属性值。

在本申请提供的一种实施例中,根据目标对象的数据结构,解析目标对象获得目标对象的属性值,具体包括:

根据目标对象的数据结构,选择解析插件模块;

使用解析插件模块解析目标对象,获得目标对象的属性值。

进一步的,根据目标对象的数据结构,选择解析插件模块,具体包括:

当有针对目标对象的数据结构的提示信息时,根据提示信息选择特定的解析插件模块。

在本申请提供的一种实施例中,当有针对目标对象的数据结构的提示信息时,根据提示信息选择特定的解析插件模块,具体包括:

当目标对象的数据结构的提示信息为JSON时,选择JSON解析插件模块;

所述JSON解析插件模块用于按照JSON格式提取目标对象的属性值。

具体的,为了方便解析目标对象,在程序开发过程中,可以对特殊的目标对象的数据结构加以标识。例如,当目标对象的数据结构为JSON格式时,给出提示信息为JSON。形如:[PersonJsonParser]{"age">"25"}&&{"info.job"="farmer"},其中,“[PersonJsonParser]”给出了利用JSON解析插件解析Person类的目标对象的提示。解析插接10根据提示信息选择JSON解析插件模块。JSON解析插件模块用于按照JSON格式提取目标对象的属性值。

假设,应用系统中涉及一个名称为“PERSON”的类。该“PERSON”类包括NAME名称、AGE年龄、INFO信息三个变量。其中,变量INFO信息又包括JOB职业和LEVEL级别两个变量。变量JOB职业又可以赋予FARMER农民、WORKER工人等具体的变量参数来定义具体的目标对象。

再假设,根据“PERSON”的类定义出的一个目标对象。目标对象以JSON 格式存储,例如,目标对象的一个变量——INFO信息以JSON格式表示,形如:{"job":"farmer","level":"null"}。该变量INFO信息表示,目标对象的职业为FARMER农民,级别为无级别。

解析插件10利用JSON解析插件模块去解析{"job":"farmer","level":"null"}。根据JSON格式规范,“:”两侧分别表示属性名称和属性值;“,”用以连接并列的多个属性名称和属性值的键值对;一对“""”中间的内容为具体的属性名称或属性值。JSON解析插件可以根据对应的JSON格式规范,具体地解读出属性名称和对应的属性值。从而,匹配器可以获得目标对象的变量INFO信息下的变量JOB职业的属性值为FARMER农民,目标对象的变量INFO信息下的变量LEVEL级别的属性值为NULL。

在本申请提供的又一种实施例中,当有针对目标对象的数据结构的提示信息时,根据提示信息选择特定的解析插件模块,具体包括:

当目标对象的数据结构的提示信息为LIST时,选择LIST解析插件模块;

所述LIST解析插件模块用于按照LIST格式提取目标对象的属性值。

具体的,为了方便解析目标对象,在程序开发过程中,可以对特殊的目标对象的数据结构加以标识。例如,当目标对象的数据结构为LIST格式时,给出提示信息为LIST。形如:[PersonListParser]{"age">"25"}&&{"info.job"="farmer"},其中,“[PersonListParser]”给出了利用LIST解析插件解析Person类的目标对象的提示。解析插件10根据提示信息选择LIST解析插件模块。LIST解析插件模块用于按照LIST格式提取目标对象的属性值。

假设,应用系统中涉及一个名称为“PERSON”的类。该“PERSON”类包括NAME名称、AGE年龄、INFO信息三个变量。其中,变量INFO信息又包括JOB职业和LEVEL级别两个变量。变量JOB职业又可以赋予FARMER农民、WORKER工人等具体的变量参数来定义具体的目标对象。

再假设,根据“PERSON”的类定义出的一个目标对象。目标对象以LIST格式存储,形如:

其中,目标对象其中之一为姓名是Peter的人,年龄30岁,职业为农民,级别为无级别。

解析插件10利用LIST解析插件模块去解析上面所列的LIST格式数据。根据一种可能的LIST格式规范,列标签表示属性名称,该列标签下为具体的属性值。列标签还可以具有一级子列标签表示属性名称,如列标签变量Info信息下的一级子列标签变量Job职业。该一级子列标签变量Job职业为具体的属性名称。属性名称Job职业对应的属性值farmer农民。LIST解析插件模块可以以行的顺序,依次获取列标签作为属性名称,并获取属性名称下的属性值。从而,匹配器可以获得目标对象的各个属性值。

具体的,为了方便解析目标对象,在程序开发过程中,可以对特殊的目标对象的数据结构加以标识。例如,当目标对象的数据结构为XML格式时,给出提示信息为XML。形如:[PersonXmlParser]{"age">"25"}&&{"info.job"="farmer"},其中,“[PersonXmlParser]”给出了利用XML解析插件解析Person类的目标对象的提示。解析插件10根据提示信息选择XML解析插件模块。XML解析插件模块用于按照XML格式提取目标对象的属性值。

再假设,根据“PERSON”的类定义出的一个目标对象。目标对象以XML格式存储,例如,目标对象的一个变量——INFO信息以XML格式表示,形如:

<info>

<job>farmer</job>

<level>null</level>

</info>。

该变量INFO信息表示,目标对象的职业为FARMER农民,级别为无级别。

解析插件10利用XML解析插件模块去解析

<info>

<job>farmer</job>

<level>null</level>

</info>。

根据XML格式规范,“<>”中的内容为属性名称的开始。“</>”中的内容为属性名称的结束。“<>”和“</>”之间为属性值。XML解析插件模块可以根据对应的XML格式规范,具体地解读出属性名称和对应的属性值。从而,匹配器可以获得目标对象的变量INFO信息下的变量JOB职业的属性值为FARMER农民,目标对象的变量INFO信息下的变量LEVEL级别的属性值为NULL。

在本申请提供的又一种实施例中,根据目标对象的数据结构,选择解析插件,具体包括:

当没有针对目标对象的数据结构的提示信息时,选择默认解析插件模块;

所述默认解析插件模块用于直接提取目标对象的属性值或依据哈希表键值对的方式提取目标对象的属性值。

解析插件10利用默认解析插件模块去解析目标对象。解析插件10可以缺省支持普通格式的数据和HASH MAP格式的数据。例如job=farmer,level=null或job:farmer,level:null。默认解析插件模块可以获取“=”左边的属性名称job职业和“=”右边的属性值farmer农民;“=”左边的属性名称level级别和“=”右边的属性值null无级别。或者,HASH MAP格式下“:”左边的属性名称job职业和“:”右边的属性值farmer农民;“:”左边的属性名称level级别和“:”右边的属性值null无级别。

S400:匹配目标对象的属性值与规则条件的属性值。

匹配器比较目标对象的属性值与规则条件的属性值。规则的条件部分可以用二叉树的方式表示。例如,对于规则的条件部分为(A=0&&B>5)||C!=10,其中,布尔运算符“&&”和“||”两侧连接的每一个属性名称及其对应的属性值可以看作是二叉树的一个分枝。匹配器遍历二叉树的每一个分枝,这样可以获得规则的条件部分的每一个属性值。例如,有这样一条规则,规则的规则条件为{"age">"25"}&&{"info.job"="farmer"}。规则的条件部分表示匹配目标对象中变量AGE年龄的属性值大于25,并且变量INFO下的变量JOB职业的属性值是farmer农民时,该规则被触发。

例如上面的举例中,根据“PERSON”的类定义出的一个目标对象Peter。目标对象的变量INFO信息是以LIST格式存储的,形如:

规则对于目标对象Peter生效。

在本申请提供的实施例中,根据目标对象的数据结构,解析目标对象获得目标对象的属性值,从而方便比较目标对象的属性值与规则条件的属性值。

进一步的,在本申请提供的又一实施例中,规则同样可以根据类的数据结构存储,形成规则对象。例如,规则对象与目标对象采用相同的JSON格式存储的数据结构。解析插件10可以利用相同的JSON解析插件模块从目标对象中获得属性值和从规则对象中获得属性值,从而可以比较两者是否匹配。

可以理解的是,这里的解析插件,可以仅有一个,也可以包含多个,还可以是根据应用系统中目标对象的数据结构,自行设计的插件。利用解析插件可 以便利地获得目标对象的属性值,从而,方便比较目标对象的属性值和规则条件的属性值,并且不需要更改应用系统中目标对象的数据结构,对应用系统的干扰小。

以上是本申请实施例提供的规则匹配的方法,基于同样的思路,请参照图2,本申请还提供一种规则匹配的系统1,包括:

解析插件10,用于:

根据目标对象的数据结构,解析目标对象获得目标对象的属性值;

匹配器20,用于:

获取目标对象;

选定待匹配的规则;

匹配目标对象的属性值与规则条件的属性值;

其中,目标对象可归并入类,并具有类的数据结构。

在本申请实施例提供的规则匹配的系统1中,根据目标对象的数据结构,解析目标对象获得目标对象的属性值,从而方便比较目标对象的属性值与规则条件的属性值,对应用系统干扰少。

在本申请又一实施例中,解析插件10具体用于:

根据目标对象的数据结构,选择解析插件模块;

使用解析插件模块解析目标对象,获得目标对象的属性值。

在本申请提供的又一实施例中,解析插件10具体用于:

当有针对目标对象的数据结构的提示信息时,根据提示信息选择特定的解析插件模块。

在本申请提供的又一实施例中,解析插件10具体用于:

当目标对象的数据结构的提示信息为JSON时,选择JSON解析插件模块;

所述JSON解析插件模块用于按照JSON格式提取目标对象的属性值。

在本申请提供的又一实施例中,解析插件10具体用于:

当目标对象的数据结构的提示信息为LIST时,选择LIST解析插件模块;

所述LIST解析插件模块用于按照LIST格式提取目标对象的属性值。

在本申请提供的又一实施例中,解析插件10具体用于:

当目标对象的数据结构的提示信息为XML时,选择XML解析插件模块;

所述XML解析插件模块用于按照XML格式提取目标对象的属性值。

在本申请提供的又一实施例中,解析插件10具体用于:

当没有针对目标对象的数据结构的提示信息时,选择默认解析插件模块;

所述默认解析插件模块用于直接提取目标对象的属性值或依据哈希表键值对的方式提取目标对象的属性值。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数值处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数值处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数值处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数值处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处 理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数值结构、程序的模块或其他数值。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数值信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算 机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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