掌桥专利:专业的专利平台
掌桥专利
首页

动态脚本生成方法、装置、设备及计算机可读存储介质

文献发布时间:2024-04-18 20:01:55


动态脚本生成方法、装置、设备及计算机可读存储介质

技术领域

本申请实施例涉及数据处理技术领域,具体涉及一种动态脚本生成方法、 装置、设备及计算机可读存储介质。

背景技术

随着时代的发展,不断有新的数据库诞生,为了在软件研发或者大数据分 析的时候快速访问不同数据库的数据,国内现诞生了很多跨数据源查询的API 开放平台,帮助用户在不用搭建数据源查询环境情况下即可查到需要的数据, 同时能够承接高并发的访问,还可以将API给其他人使用,增加数据的流通性。 然而,用户如果想要创建高性能的API(Application Programming Interface, 应用程序编程接口),就需要写出复杂的DSL(Domain Specific Language,领 域特定语言)来对查询进行优化。

为了更好的辅助用户写出合适的DSL语句,目前API开放平台都会提供 一些DSL脚本模板,用户可以在脚本模板中通过参数值替换固定占位符的方 式来动态化的生成DSL语句。然而,这样生成DSL语句的灵活度较差,仅能 对脚本中的固定位置的参数值进行替换,无法生成多样化的DSL语句。

发明内容

本申请实施例提供一种动态脚本生成方法,旨在解决现有的API开放平台 所存在的无法根据用户实际需求灵活生成多样化的DSL语句的问题。

一方面,本申请实施例提供一种动态脚本生成方法,包括:

获取初始脚本,并根据所述初始脚本中的动态标签解析所述初始脚本,得 到动态标签语法树;

提取所述动态标签语法树中各树节点中的参数名称;

在预设的参数配置界面展示所述参数名称,并获取各所述参数名称对应的 输入参数值;

根据所述输入参数值对各所述树节点对应的脚本片段进行拼接,得到目标 脚本。

作为本申请的一种可选实施例,所述根据所述初始脚本中的动态标签解析 所述初始脚本,得到动态标签语法树,包括:

根据所述初始脚本中的动态标签对所述初始脚本进行划分,得到若干代码 片段,并确定各所述代码片段之间的层级关系以及各所述代码片段对应的标签 信息;

根据各所述代码片段之间的层级关系生成初始语法树;

将各所述代码片段及其对应的标签信息,分别与所述初始语法树中的各树 节点关联,得到动态标签语法树。

作为本申请的一种可选实施例,所述提取所述动态标签语法树中各树节点 中的参数名称,包括:

根据各所述树节点对应的标签信息获取与所述动态标签对应的参数提取 规则;

根据所述参数提取规则提取所述动态标签语法树中各树节点中的参数名 称。

作为本申请的一种可选实施例,所述根据所述输入参数值对各所述树节点 对应的脚本片段进行拼接,得到目标脚本,包括:

根据各所述树节点对应的标签信息设定各所述树节点对应的配置规则;

若所述输入参数值满足所述树节点对应的配置规则,则将所述树节点设为 目标树节点;

对所述目标树节点对应的脚本片段进行拼接,得到目标脚本。

作为本申请的一种可选实施例,所述根据权利要求1所述的动态脚本生成 方法,其特征在于,所述获取初始脚本之后,所述方法还包括:

根据所述初始脚本中的编写格式确定所述初始脚本对应的格式化规则;

根据所述格式化规则从候选标识符中确定目标标识符;

将所述初始脚本中的动态标签替换为目标标识符,得到替换后的脚本;

根据所述格式化规则对所述替换后的脚本进行格式化处理,得到格式化后 的脚本;

将所述格式化后的脚本中的目标标识符还原为所述动态标签,得到还原后 的脚本;

所述根据所述初始脚本中的动态标签解析所述初始脚本,得到动态标签语 法树的步骤,包括:

根据所述还原后的脚本中的动态标签解析所述还原后的脚本,得到动态标 签语法树。

作为本申请的一种可选实施例,所述初始脚本由基于XML格式编写的动 态标签以及基于JSON格式编写的静态代码组成。

作为本申请的一种可选实施例,所述获取初始脚本,包括:

响应于用户输入的检索信息,在预设脚本界面上展示与所述检索信息关联 的关联脚本;

响应于所述预设脚本界面上的选中指令,将与所述选中指令对应的关联脚 本设为初始脚本。

另一方面,本申请实施例还提供一种动态脚本生成装置,包括:

解析模块,用于获取初始脚本,并根据所述初始脚本中的动态标签解析所 述初始脚本,得到动态标签语法树;

提取模块,用于提取所述动态标签语法树中各树节点中的参数名称;

获取模块,用于在预设的参数配置界面展示所述参数名称,并获取各所述 参数名称对应的输入参数值;

生成模块,用于根据所述输入参数值对各所述树节点对应的脚本片段进行 拼接,得到目标脚本。

另一方面,本申请实施例还提供一种动态脚本生成设备,所述动态脚本生 成设备包括处理器、存储器以及存储于所述存储器中并可在所述处理器上运行 的动态脚本生成程序,所述处理器执行所述动态脚本生成程序以实现上述的动 态脚本生成方法中的步骤。

另一方面,本申请实施例还提供一种计算机可读存储介质,所述计算机可 读存储介质上存储有动态脚本生成程序,所述动态脚本生成程序被处理器执行 以实现上述的动态脚本生成方法中的步骤。

本申请实施例提供的动态脚本生成方法,通过利用脚本中的动态标签解析 脚本得到动态标签语法树,并提取得到各树节点的参数名称,后续就可以根据 用户在参数配置界面上给此参数名称配置的参数值来完成对各树节点对应的 脚本片段的拼接,从而能够灵活多样的生成复杂的DSL脚本,提高了用户编写 复杂DSL脚本的效率。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所 需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明 的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还 可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种动态脚本生成方法的实现场景示意图;

图2为本申请实施例提供的一种动态脚本生成方法的步骤流程示意图;

图3为本申请实施例提供的一种解析得到动态标签语法树的步骤流程示意 图;

图4为本申请实施例提供的一种提取参数名称的步骤流程示意图;

图5为本申请实施例提供的一种拼接得到目标脚本的步骤流程示意图;

图6为本申请实施例提供的一种对初始脚本进行格式化的步骤流程示意图;

图7为本申请实施例提供的一种获取初始脚本的步骤流程示意图;

组图8为本申请实施例提供的对初始脚本进行处理过程中的不同阶段 的示意图;其中,图8(a)为本申请实施例提供的一种初始脚本的示意图;图 8(b)为本申请实施例提供的一种格式化后的初始脚本的示意图;图8(c)示 出了解析所得到的动态标签语法树的示意图;

图9为本申请实施例提供的一种动态脚本生成装置的结构示意图;

图10为本申请实施例提供的一种动态脚本生成设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清 楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是 全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳 动前提下所获得的所有其他实施例,都属于本发明包含的范围。

在本申请实施例中,“示例性”一词用来表示“用作例子、例证或说明”。本 申请实施例中被描述为“示例性”的任何实施例不一定被解释为比其它实施例 更优选或更具优势。为了使本领域任何技术人员能够实现和使用本发明,给出 了以下描述。在以下描述中,为了解释的目的而列出了细节。应当明白的是, 本领域普通技术人员可以认识到,在不使用这些特定细节的情况下也可以实现 本发明。在其它实例中,不会对公知的结构和过程进行详细阐述,以避免不必 要的细节使本发明的描述变得晦涩。因此,本发明并非旨在限于所示的实施例, 而是与符合本申请实施例所公开的原理和特征的最广范围相一致。

本申请实施例中提供一种动态脚本生成方法、装置、设备及计算机可读存 储介质,以下分别进行详细说明。

本申请实施例中动态脚本生成方法是以程序的形式部署在动态脚本生成 装置上,动态脚本生成装置是以处理器的形式安装在动态脚本生成设备中,动 态脚本生成设备中的动态脚本生成装置通过运行动态脚本生成方法对应的程 序,以执行如下步骤:获取初始脚本,并根据所述初始脚本中的动态标签解析 所述初始脚本,得到动态标签语法树;提取所述动态标签语法树中各树节点中 的参数名称;在预设的参数配置界面展示所述参数名称,并获取各所述参数名 称对应的输入参数值;根据所述输入参数值对各所述树节点对应的脚本片段进 行拼接,得到目标脚本。

如图1所示,图1为本申请实施例提供的一种动态脚本生成方法的实现场景 示意图,本申请实施例提供的实现场景示意中包括客户端100、动态脚本生成 装置200以及ES(ElasticSearch)数据库300。其中,动态脚本生成装置200与客 户端100进行通讯,通过接收客户端100输入的指令,并执行本申请实施例提供 的动态脚本生成方法,以动态生成DSL脚本,并发送至ES数据库300,从而完 成对数据的查询,并返回给客户端,

需要说明的是,图1所示的动态脚本生成的场景示意图仅仅是一个示例, 本申请实施例描述的动态脚本生成的场景是为了更加清楚的说明本申请实施 例的技术方案,并不构成对于本申请实施例提供的技术方案的限定。例如,图 中所示的ES数据库300还可以是其他数据库。

基于上述动态脚本生成方法的实现场景示意图,提出了动态脚本生成方法 的具体实施例。

如图2所示,图2为本申请实施例提供的一种动态脚本生成方法的步骤流 程示意图,本申请实施例中动态脚本生成方法包括步骤201~204:

201,获取初始脚本,并根据所述初始脚本中的动态标签解析所述初始脚 本,得到动态标签语法树。

本申请实施例中,初始脚本是预先存储于与动态脚本生成装置关联的脚本 数据库中,该脚本数据库中包含了多种不同的DSL脚本模板,这些DSL脚本模 板可以是由动态脚本生成装置的开发人员所预先存储在脚本数据库,也可以是 使用过程中由用户上传的脚本模板。具体的,动态脚本生成装置可以通过客户 端用户展示DSL脚本模板,并根据用户的选择指令获取得到初始脚本。

需要说明的是,与常规的脚本模板不同的是,本申请实施例提供的初始脚 本中包含有按照特定格式所编写的动态标签。例如,作为本申请的一种可选实 施例,初始脚本中包含了由XML格式编写的动态标签以及由JSON格式编写的 其他代码部分。当然,初始脚本中的动态标签以及其他代码部分也可以是采用 其他格式进行编写得到,本申请实施例在此不再赘述。为了更清楚理解本申请 实施例提供的初始脚本,后续图8(a)示出了一种初始脚本的示意图。

进一步的,动态脚本生成装置在获取到初始脚本后,会根据初始脚本中所 包含的动态标签来对初始脚本进行解析,以得到动态标签语法树。具体的,动 态标签语法树可以理解为由若干具有层次关系的树节点构成,其中,每一树节 点都对应着初始脚本中与动态标签相关的一部分内容,也就是说,对初始脚本 进行解析可以得到初始脚本中各动态标签之间的语法逻辑。为了更清楚理解本 申请实施例中提供的动态标签语法树,后续图(c)示出了一种生成的动态标 签语法树的示意图。而具体根据初始脚本中的动态标签解析初始脚本,得到动 态标签语法树的实现方案可以参阅后续图3及其解释说明的内容。

进一步的,作为本申请的一种可选实施例,在得到初始脚本后,为提高动 态标签DSL脚本的可读性,便于用户排查脚本错误,动态脚本生成装置还会对 获取的初始脚本进行格式化处理,当然,考虑到初始脚本一般包含有不同格式 所编写的动态标签,因此,在对初始脚本进行格式化处理的过程中,还会基于 特定的格式化方流程来对初始脚本进行格式化处理,具体的格式化过程可以参 阅后续图6及其解释说明的内容。

202,提取所述动态标签语法树中各树节点中的参数名称。

本申请实施例中,在通过对初始脚本进行解析得到动态标签语法树后,动 态脚本生成装置还会进一步提取得到动态标签语法树中各树节点中的参数名 称。由于动态标签语法树中的各树节点分别对应着初始脚本中与动态标签相关 的一部分内容,因此,所提取出的参数名称也是与动态标签相关联。

进一步的,作为本申请的可选实施例,对于不同的动态标签,动态脚本生 成装置还会根据动态标签来采用对应的参数提取规则来实现对树节点中的参 数名称的提取,具体的实现方案可以参阅后续图4及其解释说明的内容。

203,在预设的参数配置界面展示所述参数名称,并获取各所述参数名称 对应的输入参数值。

本申请实施例中,动态脚本生成装置在提取得到各树节点中的参数名称后, 还会通过客户端在预设的参数配置界面向用户展示参数名称,此时,用户就可 以在此参数配置界面上为各参数名称输入配置对应的参数值,该输入参数值会 回传给动态脚本生成装置以完成后续对初始脚本中各动态标签对应的内容的 筛选。

此外,需要说明的是,动态脚本生成装置还会进一步对参数名称进行去重 处理,也就是对于不同树节点中所包含同样的参数名称,动态脚本生成装置也 只会展示一次以获取该参数名称对应的输入参数值。

204,根据所述输入参数值对各所述树节点对应的脚本片段进行拼接,得 到目标脚本。

本申请实施例中,由于各树节点对应着初始脚本中与动态标签相关的一部 分内容,此时动态脚本生成装置会根据客户端回传的输入参数值来对树节点对 应的脚本片段进行拼接。具体的,作为本申请的一种可行实施例,动态标签通 常还可以包含与参数名称的参数值相关的配置规则,基于此配置规则以及输入 的参数值可以判断是否保留该脚本片段,具体的实现方案参阅后续图5及其解 释说明的内容。

进一步的,结合前述图1提供的实现场景示意图可知,在对初始脚本进行 修改得到目标脚本后,也就是目标DSL语句后,动态脚本生成装置还会进一步 将该目标DSL语句输入至ES数据库中进行查询,从而得到准确的查询结果返回 给客户端。当然,作为本申请的可选实施例,在将目标DSL语句输入至ES数据 库中进行查询之前,目标DSL语句也会回传给客户端,以判断生成的DSL语句 是否为客户实际需求的,客户也可以进一步对生成的DSL语句进行修改,从而 利用修改后的DSL语句完成对ES数据库中数据的查询。

本申请实施例提供的动态脚本生成方法,通过利用脚本中的动态标签解析 脚本得到动态标签语法树,并提取得到各树节点的参数名称,后续就可以根据 用户在参数配置界面上给此参数名称配置的参数值来完成对各树节点对应的 脚本片段的拼接,从而能够灵活多样的生成复杂的DSL脚本,提高了用户编写 复杂DSL脚本的效率。

如图3所示,图3为本申请实施例提供的一种解析得到动态标签语法树的步 骤流程示意图,详述如下。

本申请实施例中,提供了一种基于动态标签解析脚本得到动态标签语法树 的具体实现方案,具体的,包括步骤301~303:

301,根据所述初始脚本中的动态标签对所述初始脚本进行划分,得到若 干代码片段,并确定各所述代码片段之间的层级关系以及各所述代码片段对应 的标签信息。

本申请实施例中,根据初始脚本中的动态标签对初始脚本进行划分,就可 以得到若干代码片段,此外,由于动态标签可能存在包含、并列等关系,因此 最终所划分得到的各代码片段之间也存在对应的层级关系。此外,代码片段是 以初始脚本进行划分得到,因此可以基于动态标签设定各代码片段对应的标签 信息。

具体的,为便于理解,以图8(a)中所示出的初始脚本为例,可以看出, 图8(a)中示出的XML格式的动态标签包括等等,因 此,利用动态标签对图8(a)中的初始脚本进行划分,可以将初始脚本划分为 如下几个层级:

第一层级:初始脚本由三个部分组成,包括标签之前的静态文本StaticTextDSLNode(即第1行~第6行之间的代码内容),标签所对应的TrimDslNode(即第7行~第22行之间的代码内容)以及标签之前的静态 文本StaticTextDSLNode(即第23行~第27行之间的代码内容);

第二层级:标签中的代码内容又包含了两个标签,因此, 标签所对应的TrimDslNode又可以进一步细分为5个部分,包括第一个标签 之前的静态文本StaticTextDSLNode(即第7行的代码内容)、第一个标签所 对应的IfDslNode(即第8行~第14行之间的代码内容),第一个标签与第二 个标签之间的静态文本StaticTextDSLNode(本示例中该节点为空),第二 个标签所对应的IfDslNode(即第15行~第21行之间的代码内容),第二个 标签之后的静态文本StaticTextDSLNode(即第22行的代码内容);

第三层级:第一个标签中不包含有其他动态标签,因此,在第三层级 中,从第一个标签可以进一步提取出静态文本StaticTextDSLNode,第二个 标签包含有标签,因此,第二个标签可以进一步细分为三个 部位,包括标签之前的静态文本StaticTextDSLNode(即第15行~第17 行之间的代码内容),标签对应的ForEachDSLNode(即第18行~第19 行之间的代码内容,标签之后的静态文本StaticTextDSLNode(即第 20行~第21行之间的代码内容);

第四层级:标签中不包含其他动态标签,因此,在第四层级中, 从标签可以进一步提取出静态文本StaticTextDSLNode。

其中,上述实施例清楚的示出了各代码片段之间的层级关系,同时,StaticTextDSLNode、IfDslNode、TrimDslNode、ForEachDSLNode即为各代码 片段对应的标签信息,可以看出,此标签信息分别与初始代码中的静态文本、 标签、标签以及标签关联。当然,除了上述提供的动态标 签外,还可以采用其他动态标签,但对于每一动态标签都需要设定其对应的配 置规则。例如,以第一个标签为例,该标签“test="keyword!=null”限定了 若参数keyword取值为空值,则执行后续的代码部分。

基于上述实施例提供的说明,本领域技术人员可以清楚知晓本步骤的实现 过程,本申请实施例在此不再赘述。

302,根据各所述代码片段之间的层级关系生成初始语法树。

本申请实施例中,在确定各代码片段之间的层级关系后,就可以生成初始 的语法树,其中初始语法树仅仅通过树节点描述了初始代码的逻辑结构,以前 述为例,初始语法树中第一层级包括3个树节点,第二层级包括5个树节点,第 三层级包括4个树节点,第四层级包括1个树节点。

303,将各所述代码片段及其对应的标签信息,分别与所述初始语法树中 的各树节点关联,得到动态标签语法树。

本申请实施例中,将各所述代码片段以及设定好的标签信息分别与初始语 法树中的各树节点关联,就可以得到动态标签语法树,也就是动态标签语法树 中的每一树节点都关联了初始脚本中的部分代码片段,以及该代码片段对应的 标签信息。

此外,需要说明的是,前述提供的方案还可以是基于XML格式解析以及 抽象语法树的功能实现。具体的,可以先按照XML文件格式将初始脚本转换 为文档对象模型(Document Object Model,DOM),然后基于开源组件Mybatis 的思路,采用深度优先遍历解析的方式将得到的文档对象模型转化成动态标签 语法树,所转化得到的动态标签语法树即为本申请实施例所得到的动态标签语 法树。

如图4所示,图4为本申请实施例提供的一种提取参数名称的步骤流程示意 图,详述如下。

本申请实施例中,提供了一种根据树节点对应的标签信息来提取树节点的 参数名称的实现方案,具体的,包括步骤401~402:

401,根据各所述树节点对应的标签信息获取与所述动态标签对应的参数 提取规则。

本申请实施例中,对于不同标签信息的树节点,动态脚本生成装置还会基 于不同参数提取方式来进行参数名称的提取。具体的,以前述提供的示例为例, 此时,对于静态文本StaticTextDSLNode,动态脚本生成装置会提取得到该树节 点中固定参数名称,也就是占位符,例如#{AAAAA}会提取AAAAA,而对于 标签对应的IfDslNode,动态脚本生成装置则会提取test属性中的变量名称, 例如test="keyword!=null",动态脚本生成装置则会提取keyword作为一个参数 名称,对于标签对应的ForEachDslNode,动态脚本生成装置则会提取 集合名称,同时排除集合中item属性对应的参数名称,来作为参数名称。

402,根据所述参数提取规则提取所述动态标签语法树中各树节点中的参 数名称。

本申请实施例,在根据各树节点对应的标签信息,动态脚本生成装置会根 据对应的参数提取规则来完成对动态标签语法树中各树节点中的参数名称的 提取,同时进行去重处理。

本申请实施例提供的技术方案,在解析初始脚本并提取了参数名称之后, 通过在预设界面上展示,能够有效方便用户配置输入参数,同时避免用户输入 错误的参数名称。

如图5所示,图5为本申请实施例提供的一种拼接得到目标脚本的步骤流程 示意图,详述如下。

本申请实施例中,提供了一种基于输入的参数值对各树节点对应的脚本片 段进行拼接以达到动态化生成目标脚本的实现方案,具体的,包括步骤501~503:

501,根据各所述树节点对应的标签信息设定各所述树节点对应的配置规 则。

本申请实施例中,结合前述相关的描述可知,对应于不同的标签信息,需 要对应设定树节点对应的配置规则。具体的,对于标签对应的IfDslNode 而言,其对应的配置规则通常是判断输入的参数值是否满足该节点对应的 标签中的逻辑规则,例如,以前述提供的示例中的第一个为例,其对应的 配置规则“test="keyword!=null”,即为判断keyword这一参数名称对应的参数 值是否为空值,如果不为空值,则需要执行此标签对应的代码片段。

502,若所述输入参数值满足所述树节点对应的配置规则,则将所述树节 点设为目标树节点。

本申请实施例中,结合前述相关描述可知,当输入参数值满足树节点对应 的配置规则,则表明此树节点对应的脚本片段为用户需求的片段,因此,可以 将树节点设为目标树节点,以便于后续的片段的拼接。

503,对所述目标树节点对应的脚本片段进行拼接,得到目标脚本。

本申请实施例中,将当输入参数值满足对应的配置规则的目标树节点对应 的脚本片段进行拼接,所得到的目标脚本即为动态生成的DSL脚本,且此脚本 中的代码部分可以基于用户传入的输入参数值调整,大大简化了用户对复杂 DSL语句的编写难度。

当然,除了前述提供的标签外,对于标签对应的TrimDslNode 而言,其对应的配置规则通常为代码片段的相应部分插入或者删除给定值,而 对于静态文本StaticTextDSLNode而言,其配置规则通常是将输入参数值替换此 标签对应的代码片段中的固定占位符。也就是,对于不同标签,动态脚本生成 装置会基于不同的配置规则以及输入参数值来实现对初始脚本中脚本片段的 修改,即动态脚本生成装置通常是按照深度优先遍历的顺序依次调用动态标签 语法树中各个树节点,并根据输入参数来实现DSL的拼接,从而生成最终的 DSL脚本以用于查询。

如图6所示,图6为本申请实施例提供的一种对初始脚本进行格式化的步骤 流程示意图,详述如下。

考虑到初始脚本通常是基于不同格式的语言编写得到,例如比较常见的有 基于XML格式和JSON格式编写得到,因此,采用单独的XML格式化方式和 JSON格式化方式均无法实现较好的格式化效果。基于此,本申请实施例提供 了一种对初始脚本按照特定的格式化方式进行格式化的实现方案,具体的,包 括步骤601~605:

601,根据所述初始脚本中的编写格式确定所述初始脚本对应的格式化规 则。

本申请实施例中,动态脚本生成装置会基于初始脚本中的编写格式来确定 初始脚本对应的格式化规则。例如,以初始脚本是以XML格式和JSON格式编 写得到为例,则动态脚本生成装置会确定一种与JSON格式对应的格式化规则, 例如,如下提供了一种可行的格式化规则:

(1)如果当前字符是'{'、'[',首先输出当前字符,每出现一次'{'、'['则缩 进次数增加一次。如果'{'、'['的后面不是']'、'}'、'<',则输出换行符、按次数 缩进后再进行下一个字符的遍历。

(2)如果当前字符是']'、'}',首先若下一个字符为'['、'{'、'>',则当前 字符的前面必须输出换行符。每出现一次']'、'}',缩进次数减少一次后按次 数缩进再输出当前字符。如果当前字符后面还有字符,并且字符不为','、']'、 '}',则输出换行符后再进行下一个字符的遍历。

(3)如果当前字符是','且','后面不为'<',','后面换行并按次数缩进, 不改变缩进次数,然后遍历下一个字符。

(4)如果当前字符是'<'同时前一个字符不为''、'>'、'{'、'}',则在该 字符前换行加按次数缩进,然后遍历下一个字符。

(5)如果当前字符是'>'同时前一个字符不为''符,则在该字符后换行,同 时如果后一个字符不是'}'、']',则要按次数缩进,然后遍历下一个字符。

(6)最后,如果不是特殊字符,则输出当前字符。

602,根据所述格式化规则从候选标识符中确定目标标识符。

本申请实施例中,为了避免初始脚本中的动态标签的相关字符对在前述提 供的格式化规则下进行处理时,会对后续格式化产生影响,动态脚本生成装置 会根据格式化规则从候选标识符中确定目标标识符,其中,目标标识符与格式 化规则所涉及到的任一标识符均不同。例如,以前述提供的格式化规则为例, 作为本申请的可选实施例,目标标识符可以选为<#>、或者'$$',本申请实施例 在此不再赘述。

603,将所述初始脚本中的动态标签替换为目标标识符,得到替换后的脚 本。

本申请实施例中,在确定目标标识符后,动态脚本生成装置会将动态标签 替换为目标标识符,得到替换后的脚本,同时还会按顺序保存原动态标签,以 便于后续的还原。替换后的脚本相较于初始脚本中不再携带有动态标签。

604,根据所述格式化规则对替换后的脚本进行格式化处理,得到格式化 后的脚本。

本申请实施例中,在将动态标签替换为目标标识符后,所得到替换后的初 始脚本中动态标签不会对格式化产生影响,因此,基于前述所确定的格式化规 则对替换后的脚本进行格式化处理,就可以得到格式化后的脚本。格式化后的 脚本相较于初始脚本,除了不携带有动态标签外,还实现了对初始脚本中静态 代码部分的格式化。

605,将所述格式化后的脚本中的目标标识符还原为所述动态标签,得到 还原后的脚本。

本申请实施例中,基于前述顺序保存的动态标签依次替换格式化后的初始 脚本中的目标标识符,就可以实现对格式化后的脚本的还原,从而得到还原后 的脚本。还原后的脚本可以理解成是由初始脚本中的动态标签以及初始脚本中 格式化后的静态代码组成。

本申请实施例中,进一步的,在完成对初始脚本的处理,得到还原后的脚 本后,动态脚本生成装置会根据还原后的脚本中的动态标签解析还原后的脚本, 得到动态标签语法树,其具体的解析规则可以是如前述图3所示出的方案,本 申请实施例在此不再赘述。

本申请实施例提供的格式化方式,通过将初始脚本中的动态标签替换为目 标标识符,能够在避免格式化过程中动态标签中的内容对格式化的影响,提高 了对初始脚本的格式化效果。

如图7所示,图7为本申请实施例中提供的一种获取初始脚本的步骤流程示 意图,详述如下。

本申请实施例中,提供了一种基于用户输入的检索信息向客户展示关联的 脚本模板以供用户选择的技术方案,具体的,包括步骤701~702:

701,响应于用户输入的检索信息,在预设脚本界面上展示与所述检索信 息关联的关联脚本。

本申请实施例中,用户可以通过在客户端上输入需求的DSL语句的相关检 索信息,例如某个DSL语句的片段等等,此时动态脚本生成装置会响应于用户 输入的检索信息,从脚本数据库中筛选出与检索信息关联的关联脚本,并在客 户端的脚本界面上展示与检索信息关联的关联脚本。具体的,关联脚本的筛选 可以是预先通过属性标签、或是相似度计算的方式来得到。

702,响应于所述预设脚本界面上的选中指令,将与所述选中指令对应的 关联脚本设为初始脚本。

本申请实施例中,用户可以进一步在预设脚本界面上进行选择,从而使动 态脚本生成装置将选中指令对应的关联脚本设为初始脚本,以用于后续的解析、 参数提取、参数配置与最终DSL脚本的生成。

为了更清楚理解本申请实施例提供的动态脚本生成方式,如组图8所示, 组图(8)分别示出了对初始脚本进行处理过程中的不同阶段的示意图,详述 如下。

具体的,图8(a)为本申请实施例提供的一种初始脚本的示意图。图8(b) 为本申请实施例提供的一种格式化后的初始脚本的示意图。图8(c)示出了解 析所得到的动态标签语法树的示意图。

其中,关于图8(a)提供的初始脚本与图8(c)中示出的解析初始脚本所 得到的动态标签语法树之间的映射关系,已在前述步骤301中说明,本申请实 施例在此不再赘述。其中,MixedDSLNode表明该树节点有多个部分组成,可 以进一步细分得到下一层级。

为了更好实施本申请实施例提供的动态脚本生成方法,在动态脚本生成方 法基础之上,本申请实施例中还提供一种动态脚本生成装置。如图9所示,图 9为本申请实施例提供的一种动态脚本生成装置的结构示意图。具体的,动态 脚本生成装置包括:

解析模块901,用于获取初始脚本,并根据所述初始脚本中的动态标签解 析所述初始脚本,得到动态标签语法树;

提取模块902,用于提取所述动态标签语法树中各树节点中的参数名称;

获取模块903,用于在预设的参数配置界面展示所述参数名称,并获取各 所述参数名称对应的输入参数值;

生成模块904,用于根据所述输入参数值对各所述树节点对应的脚本片段 进行拼接,得到目标脚本。

作为本申请的一种可选实施例,所述解析模块包括:

划分次模块,用于根据所述初始脚本中的动态标签对所述初始脚本进行划 分,得到若干代码片段,并确定各所述代码片段之间的层级关系以及各所述代 码片段对应的标签信息;

语法树生成次模块,用于根据各所述代码片段之间的层级关系生成初始语 法树;

关联次模块,用于将各所述代码片段及其对应的标签信息,分别与所述初 始语法树中的各树节点关联,得到动态标签语法树。

在本申请一些实施例中,所述提取模块包括:

规则获取次模块,用于根据各所述树节点对应的标签信息获取与所述动态 标签对应的参数提取规则;

参数提取次模块,用于根据所述参数提取规则提取所述动态标签语法树中 各树节点中的参数名称。

在本申请一些实施例中,所述生成模块包括:

设定次模块,用于根据各所述树节点对应的标签信息设定各所述树节点对 应的配置规则;

对比次模块,用于若所述输入参数值满足所述树节点对应的配置规则,则 将所述树节点设为目标树节点;

拼接次模块,用于对所述目标树节点对应的脚本片段进行拼接,得到目标 脚本。

在本申请一些实施例中,所述动态脚本生成装置还包括格式化模块,所述 格式化模块包括:

格式化规则确定次模块,用于根据所述初始脚本中的编写格式确定所述初 始脚本对应的格式化规则;

标识符确定次模块,用于根据所述格式化规则从候选标识符中确定目标标 识符;

替换次模块,用于将所述初始脚本中的动态标签替换为目标标识符,得到 替换后的脚本;

格式化次模块,用于根据所述格式化规则对所述替换后的脚本进行格式化 处理,得到格式化后的脚本;

还原次模块,用于将所述格式化后的脚本中的目标标识符还原为所述动态 标签,得到还原后的脚本;

所述解析模块,用于根据所述还原后的脚本中的动态标签解析所述还原后 的脚本,得到动态标签语法树。

在本申请一些实施例中,所述初始脚本由基于XML格式编写的动态标签 以及基于JSON格式编写的静态代码组成。

在本申请一些实施例中,所述解析模块包括:

第一响应次模块,用于响应于用户输入的检索信息,在预设脚本界面上展 示与所述检索信息关联的关联脚本;

第二响应次模块,用于响应于所述预设脚本界面上的选中指令,将与所述 选中指令对应的关联脚本设为初始脚本。

本申请实施例还提供一种动态脚本生成设备,如图10所示,图10为本申请 实施例提供的一种动态脚本生成设备的结构示意图。

动态脚本生成设备包括存储器、处理器以及存储于存储器中,并可在处理 器上运行的动态脚本生成程序,处理器执行动态脚本生成程序时实现本申请任 一实施例提供的动态脚本生成方法中的步骤。

具体来讲:动态脚本生成设备可以包括一个或者一个以上处理核心的处理 器1001、一个或一个以上存储介质的存储器1002、电源1003和输入单元1004 等部件。本领域技术人员可以理解,图10中示出的动态脚本生成设备结构并不 构成对动态脚本生成设备的限定,可以包括比图示更多或更少的部件,或者组 合某些部件,或者不同的部件布置。其中:

处理器1001是该动态脚本生成设备的控制中心,利用各种接口和线路连接 整个动态脚本生成设备的各个部分,通过运行或执行存储在存储器1002内的软 件程序和/或模块,以及调用存储在存储器1002内的数据,执行动态脚本生成 设备的各种功能和处理数据,从而对动态脚本生成设备进行整体监控。可选的, 处理器1001可包括一个或多个处理核心;优选的,处理器1001可集成应用处理 器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用 程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处 理器也可以不集成到处理器1001中。

存储器1002可用于存储软件程序以及模块,处理器1001通过运行存储在存 储器1002的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器 1002可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、 至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存 储数据区可存储根据动态脚本生成设备的使用所创建的数据等。此外,存储器 1002可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一 个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器1002 还可以包括存储器控制器,以提供处理器1001对存储器1002的访问。

动态脚本生成设备还包括给各个部件供电的电源1003,优选的,电源1003 可以通过电源管理系统与处理器1001逻辑相连,从而通过电源管理系统实现管 理充电、放电、以及功耗管理等功能。电源1003还可以包括一个或一个以上的 直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、 电源状态指示器等任意组件。

该动态脚本生成设备还可包括输入单元1004,该输入单元1004可用于接收 输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、 操作杆、光学或者轨迹球信号输入。

尽管未示出,动态脚本生成设备还可以包括显示单元等,在此不再赘述。 具体在本实施例中,动态脚本生成设备中的处理器1001会按照如下的指令,将 一个或一个以上的应用程序的进程对应的可执行文件加载到存储器1002中,并 由处理器1001来运行存储在存储器1002中的应用程序,从而实现本申请任一实 施例所提供的动态脚本生成方法中的步骤。

为此,本申请实施例提供一种计算机可读存储介质,该计算机可读存储介 质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM, Random AccessMemory)、磁盘或光盘等。计算机可读存储介质上存储有动态 脚本生成程序,动态脚本生成程序被处理器执行时实现本申请任一实施例所提 供的动态脚本生成方法中的步骤。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详 述的部分,可以参见上文针对其他实施例的详细描述,此处不再赘述。

具体实施时,以上各个单元或结构可以作为独立的实体来实现,也可以进 行任意组合,作为同一或若干个实体来实现,以上各个单元或结构的具体实施 可参见前面的方法实施例,在此不再赘述。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

以上对本申请实施例所提供的一种动态脚本生成方法进行了详细介绍,本 文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说 明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人 员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上 所述,本说明书内容不应理解为对本发明的限制。

技术分类

06120116570972