脚本文件的图形化方法及装置
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及将计算机脚本文件进行图形化的方法和装置。
背景技术
在程序开发过程中,为了便利,可能需要用到一些脚本语言来完成某些属性的配置或者数据的序列化。例如,在java程序开发中,利用json脚本、xml脚本、YAML脚本等脚本语言表示数组、hash、对象等常用类型的数据。其中,一些脚本语言(如YAML脚本)在某些方面的表示更加直观、简洁,然而,却由于其编辑器局限于文本编辑器等原因,使得使用这样的脚本语言编写脚本的学习成本和开发成本提高,影响脚本语言应用的有效性。
发明内容
本说明书一个或多个实施例描述了一种方法和装置,可以将脚本文件以图形方式进行展示,实现可视化编辑,从而提高脚本语言应用的有效性。
根据第一方面,提供了一种脚本文件的图形化方法,包括:获取所述脚本文件的文本信息;根据所述脚本文件对应的语法规则,识别所述文本信息中的脚本语句对应的数据单元和数据单元对应的数据类型,并按照所识别的数据单元和数据类型将所述脚本文件转换成内存对象;按照预定的映射规则将所述内存对象渲染成树状表格结构,其中,所述映射规则包括所述数据类型与树状表格元素类型的对应关系。
在一些实施例中,所述根据所述脚本文件对应的脚本语言的语法规则,识别所述文本信息中的脚本语句中对应的数据单元和数据单元对应数据类型包括:获取所述文本信息中的第一脚本语句;检测所述第一脚本语句对应的第一语法;根据所述第一语法,确定所述第一脚本语句对应的第一数据单元,以及所述第一数据单元对应的第一数据类型。
在一些实施例中,所述根据所述第一语法,确定所述第一脚本语句对应的第一数据单元,以及所述第一数据单元对应的第一数据类型进一步包括:在第一脚本语句存在下级语句的情况下,识别所述下级语句对应的第二语法;按照所述第二语法,确定所述下级语句对应的第二数据单元及所述第二数据单元对应的第二数据类型,其中,所述第二数据单元为所述第一数据单元的子数据单元。
在一些实施例中,所述按照预定的映射规则将所述内存对象渲染成树状表格结构包括:从所述内存对象中获取所述第一数据单元及对应的第一数据类型;按照所述映射规则确定与所述第一数据类型对应的第一树状表格元素类型;创建具有所述第一树状表格元素类型的第一树状表格元素;用所述第一数据单元中的数据项填充所述第一树状表格元素。
在一些实施例中,所述按照预定的映射规则将所述内存对象渲染成树状表格结构还包括:在所述第一数据单元包含子数据单元的情况下,将所述第一树状表格元素的属性确定为,具有伸展-收缩属性。
在一些实施例中,所述按照预定的映射规则将所述内存对象渲染成树状表格结构还包括:在所述第一数据单元包含子数据单元的情况下,根据所述第一数据单元包含的子数据单元创建所述第一树状表格元素的子树状表格元素;用所述第一数据单元包含的子数据单元中的数据项填充所述子树状表格元素。
根据第二方面,提供一种脚本文件的图形化装置,所述装置包括:获取模块,配置为获取所述脚本文件的文本信息;生成模块,配置为根据所述脚本文件对应的语法规则,识别所述文本信息中的脚本语句对应的数据单元和所述数据单元对应的数据类型,并按照所识别的数据单元和数据类型将所述脚本文件转换成内存对象;渲染模块,配置为按照预定的映射规则将所述内存对象渲染成树状表格结构,其中,所述映射规则包括所述数据类型与树状表格元素类型的对应关系。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
通过本说明书实施例提供的方法和装置,通过获取脚本文件的文本信息,根据脚本语言的语法规则识别脚本语句中各种数据单元及各个数据单元对应的数据类型,将脚本文件转换成内存对象,进而按照预定的映射规则将这个内存对象渲染成树状表格结构。如此,可以将文本编辑的脚本文件的图形化,降低编写脚本的学习成本和开发成本,提高脚本语言应用的有效性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出本说明书披露的一个实施例的实施场景示意图;
图2示出根据一个实施例的脚本文件的图形化方法的流程图;
图3示出脚本文件在文本编辑器中的屏幕截图的一个具体例子;
图4示出图3的脚本文件从文本编辑器图形化后的屏幕截图的一个具体例子;
图5示出根据一个实施例的脚本文件的图形化装置的示意性框图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
图1为本说明书披露的一个实施例的实施场景示意图。如图所示,计算平台可以是具有数据处理能力的各种设备,例如台式计算机、笔记本电脑、平板电脑、智能手机等等。用户可以通过计算平台进行程序开发。程序开发过程中,可以使用只有文本编辑器的脚本语言(如YAML等)来完成某些属性的配置或数据的序列化。通过脚本语言生成的脚本文件可以存储在计算平台。根据本说明书实施例提供的脚本文件的图形化方法及装置,可以将计算平台存储的脚本文件图形化,并通过图形展示界面呈现给用户。用户可以通过图形展示界面对脚本文件进行编辑、检查、修改等操作。计算平台可以将用户通过图形展示界面编辑的脚本文件转化为,脚本语言(如YAML等)形式的脚本文件,进行存储。
值得说明的是,在一次程序开发过程中,可以使用一种脚本语言,也可以使用多种脚本语言。针对每种脚本语言,可以对应有一个脚本文件,也可以对应有多个脚本文件,本说明书不作限定。
如此,可以扩展脚本语言的展现形式,避免使用脚本语言编写脚本时,较高的学习成本和开发成本,从而可以提高脚本语言应用的有效性。
下面描述上述场景中将脚本文件图形化的具体执行过程。
图2示出根据一个实施例的脚本文件的图形化方法流程图。该方法的执行主体可以是具有一定计算、数据处理能力的系统、设备、装置、平台或服务器,例如图1所示的计算平台。
如图2所示,该方法包括以下步骤:步骤21,获取脚本文件的文本信息;步骤22,根据脚本文件对应的脚本语言的语法规则,识别文本信息中的脚本语句对应的数据单元和数据单元对应的数据类型,并按照所识别的数据单元和数据类型将脚本文件转换为内存对象;步骤23,按照预定的映射规则将上述内存对象渲染成树状表格结构,其中,映射规则包括数据类型与树状表格元素类型的对应关系。
首先,在步骤21,获取脚本文件的文本信息。脚本Script通常是由应用程序提供的编程语言编写的程序。用于编写脚本的语言可以称之为脚本语言,例如YAML、Scala、JavaScript、VBScript、SQL等等,脚本语言还可以包括应用程序的宏和操作系统的批处理语言之类的语言。脚本文件可以是将不同的命令组合起来的文本文件,用户可使用任意文本编辑器创建脚本文件,以及编辑脚本文件中的文本内容。
脚本文件的文本信息至少可以包括脚本文件的文本内容,还可以包括:文件名、文件类型、所用脚本语言、语法规则等中的至少一项。可以理解,脚本文件的文本内容,可以包括不同的命令,即脚本语句。例如:赋值语句“age:16”,等等。每条语句都有自己的语法规则,对于脚本语言而言,不同的语句之间还可能有语句间的语法规则。例如,对于YAML脚本而言,每行为一个语句,下级语句比上级语句的句首多两个空格,换句话说,如果一行语句的开头比前一行语句的开头位置向后推移两个空格时,该行语句是前一行语句的下级语句。
可以理解,脚本文件可以储存在计算设备(如图1中的计算平台等)中。脚本文件可以存储在本地,也可以存储在远程计算设备中。相应地,该步骤21中,可以从本地获取脚本文件的文本信息,也可以远程获取脚本文件的文本信息。
接着,在步骤22,根据脚本文件对应的脚本语言的语法规则,识别文本信息中的脚本语句对应的数据单元和各个数据单元对应的数据类型,并按照所识别的数据单元和数据类型将脚本文件转换成内存对象。其中,内存对象可以用来表示内存上的一段区域。在这里,内存对象可以用来对应于从脚本文件识别出的各数据单元(例如可以是Java、C++等等中的一种)在内存中所占的区域。
对于编程语言而言,可以对应有多种数据类型。以Java语言为例,可以包括Json、数组/序列、对象模型等等数据类型。其中,对象可以是类在内存中装载的实例,类可以描述一类对象的行为和状态,例如,树是一个类,梧桐树可以是该类的一个实例,即一个对象。对象模型可以用于描述多个对象之间的关系。
由于脚本语句具有特定的语法规则,因此,可以根据脚本语句的语法特征或语法标识,识别出相应的数据单元及数据单元对应的数据类型。对于不同的脚本语句,包含不同的语法特征或语法标识,可以对应不同的语法。在该步骤22中,可以逐行检测脚本文件的文本信息,针对检测到的包含某种语法的脚本语句,确定与该语法相对应的数据类型及脚本语句对应的数据单元。这里,数据单元可以对应一个完整的脚本语句的功能单元(如实现赋值、记录、计算等功能)等等,例如,记录用户基本信息(可以包括姓名、年龄、职业等等)的数据单元。利用不同的语法特征或语法标识,还可以进一步确定各个数据单元对应的数据类型。例如,Json类型、数组类型等。容易理解,不同的数据单元可以对应同一数据类型。
对于不可分割的数据单元,可以称之为最小数据单元,或者一个数据项。例如,年龄:16。而实际中,一个数据单元可以包括一个或多个数据项/最小数据单元。如记录用户基本信息的数据单元可以包括,记录姓名的数据项/最小数据单元“姓名:张三”,以及,记录年龄的数据项/最小数据单元“年龄:16”,等等。因此,本步骤识别的每个数据单元,可以包括至少一个数据项,或者至少一个最小数据单元。
请参考图3,以YAML脚本作为一个示例,语句301的语法特征是,字符串后面有冒号,冒号后面是空白,下一行的语句是以两个空格开头的字符串;语句302的语法特征是,字符串后面有冒号,冒号后面是空白,下一行的语句空两格开头之后是“-”;语句303的语法特征是,字符串后面包括有冒号,冒号后面包括标识“!!com……”;等等。每种语法可以包括一种或多种语法特征。例如,一种语法可以是包含语法特征“字符串后面有冒号,冒号后面是空白,下一行的语句是以两个空格开头的字符串”的语法。
对于包含不同的语法特征(格式)或语法标识的语句,可以确定其对应的数据单元以及数据类型。以对应Java语言中的数据类型为例,如:语句301的语法可以对应Java语言中的Json类型。数据单元可以通过语句级别来确定,例如语句301下面两行语句都以两个空格开头,而语句302和语句301对齐,则表明语句302是和语句301同一个级别的语句,重新开始的一个数据单元。类似地,可以确定语句302对应Java语言中的数组/序列类型,对应的数据单元至语句303的上一句。语句303可以对应Java语言中的对象模型类型,对应的数据单元至少达到图3示例的文本结尾。
在一些例子中,一个数据项/最小数据单元对应键值对数据类型,也可以对应数组或序列数据类型。例如,对于“字符串:字符串”类型的脚本语句,可以确定为键值对(key-value)类型数据,对应一个数据项/最小数据单元。如图3中语句301的下一行语句“name:zhangsan”,对应key=name,value=zhangsan的一条数据项/一个最小数据单元。
在一些例子中,当一个数据单元对应的脚本语句只包括一个语句时,该数据单元可以只包括一条数据项/一个最小数据单元。换句话说,一个数据单元还可以仅包括一条数据项/一个最小数据单元,例如只记录一个值。
在一些可选的实施方式中,当一个语句存在下级语句时,还可以按照语法规则识别下级语句的语法,确定下级语句对应的数据单元及数据类型。其中,语句的下级语句可以按照语法规则进行确定,例如在C语言中,下级语句通过大括号{}标识,在YAML中,下级语句通过开头空格(缩进)的形式标识。可以理解,由于该下级语句是其上级语句的下级语句,由该下级语句确定的数据单元,可以称为其上级语句对应的数据单元的子数据单元。仍然参考图3,例如,语句302的下级语句包括“-SUCESS”。该语句包括不同于语句302的另一种语法,其代表着记录一个数组或列表。此时,可以根据下一行语句开头位置相对于该语句多两个空格,以及语法标识“-”确定对应的数据类型为数组类型。该下级语句“-SUCESS”对应的数据单元可以是语句302对应的数据单元的子数据单元。
再如,由于语句“order:”相对于语句303存在两个空格的缩进,那么语句“order:”是语句303的下级语句。根据YAML的语法规则,“order:”的上级语句303包含标识“!!com……”,则下级语句可以省略标识“!!com……”,由此,语句“order:”应为“order:!!com……”,与语句303具有相同的语法标识,对应与语句303一致的数据类型,且对应的数据单元从“order”起,至与“order”同一级别的语句(即:“productCode:……”)的上一行语句,“userID:234567”。语句303的下级语句“order:”对应的数据单元可以是语句303对应的数据单元的子数据单元。如图3所示,该子数据单元又可以包括多个子数据单元,每个子数据单元又可以包括至少一条数据项/一个最小数据单元,和/或下一级子数据单元(最终包括若干数据项/最小数据单元),在此不再赘述。
值得说明的是,由于每个数据单元自身或通过子数据单元,必然最终落到不可分割的数据单元,所以每个数据单元或其子数据单元至少包括一条数据项/一个最小数据单元。可以理解,数据单元包括的子数据单元或数据项/最小数据单元的数据类型可以和该数据单元一致,也可以不一致。
如此,逐行读取脚本语言的文本信息中的脚本语句,并根据对应脚本语言的语法规则,可以识别出各个脚本语句对应的数据单元和数据类型,以及各数据单元之间的逻辑层级关系。
进一步地,按照所识别的数据单元和数据类型,可以将脚本文件转换成内存对象。可选地,上述内存对象可以是不同于脚本文件中的脚本语言(如YAML)的另一种语言的内存对象,该另一种语言是便于进行图形化的语言,例如Java的内存对象。
然后,在步骤23,按照预定的映射规则将上述内存对象渲染成树状表格结构。值得说明的是,上述映射规则可以包括用于表示上述数据类型与树状表格元素类型的对应关系。该预定规则可以人为设定,也可以根据语法特征自动生成,本说明书实施例对此不作限定。以上述内存对象为Java的内存对象为例,Java中的Json数据类型可以与树状表格元素类型Map相对应、Java中的数组/序列数据类型可以与树状表格元素类型List相对应、Java中的对象模型可以与树状表格元素类型Object等等。
为了便于说明,针对任意一个数据单元,可以用第一数据单元表示。在一个可能的实施方式中,可以获取第一数据单元及该第一数据单元对应的第一数据类型,按照映射规则确定与第一数据类型对应的树状表格元素类型,为了对应说明,这里称为第一树状表格元素类型。然后,可以基于所确定的第一树状表格元素类型创建对应的树状表格元素,这里称为第一树状表格元素,该第一树状表格元素具有第一树状表格元素类型。接着,可以用第一数据单元中的至少一个数据项/最小数据单元填充该第一树状表格元素。如此,可以完成第一数据单元对应到该第一树状表格元素的渲染。
作为示例,假设图3中的语句301可以对应Json数据类型,Json数据类型可以对应树状表格中的Map类型。语句301及其下级语句“default:”、“name:zhangsan”、“age:16”对应一个数据单元,该数据单元包含的两个子数据单元都是一条数据项/一个最小数据单元,分别对应语句“name:zhangsan”和“age:16”。这两个数据项/最小数据单元都可以对应key-value数据类型。将这两个数据项/最小数据单元填充进所创建的Map类型的树状表格元素401“default”后,渲染后的展示效果如图4所示。在树状表格元素401中,name(Key值)和age(Key值)展示在Property区域,zhangsan(value值)和16(value值)展示在Value区域,Value区域的字符可以直接编辑。
类似地,语句302可以对应数组/序列数据类型,数组/序列数据类型可以对应树状表格中的List类型。语句302及其下级语句“result:”、“-SUCCESS”、“-FAIL”对应一个数据单元,该数据单元包含的两个子数据单元也都是一条数据项/一个最小数据单元,分别是语句“-SUCCESS”和“-FAIL”对应的数据单元。这两个数据项/最小数据单元都可以对应key-value数据类型。将这两个数据项/最小数据单元填充进所创建的List类型的树状表格元素402“request”后,渲染后的展示效果如图4所示。在树状表格元素402中,SUCCESS(Key值)和FAIL(Key值)展示在Property区域,对应展示的Value区域没有内容。Value区域可以直接编辑字符,从而可以填写SUCCESS、FAIL对应的数组/序列的具体内容。
在一些实施例中,第一数据单元包含子数据单元,且该子数据单元包括多个最小数据单元/多条数据项,则可以根据第一数据单元包含的子数据单元创建第一树状表格元素的子树状表格元素。该子树状表格元素的类型与该子数据单元的类型相对应。然后,用该子数据单元中的至少一个数据项/最小数据单元填充该子树状表格元素。
例如,对于语句303对应的数据单元,对应的数据类型可以为对象模型数据类型。语句303确定的数据单元又包含了语句“order:……”、“productCode:……”、“mcc:ABC123”等语句对应的子数据单元。从图3可以看出,语句“order:……”对应的子数据单元直接包括了下一级的子数据单元以及多个数据项/最小数据单元。对于语句“order:……”对应的子数据单元的数据类型,与语句303对应的数据单元的数据类型一致。假设在上述映射规则中,对象模型数据类型和树状表格中的Object类型相对应,则可以创建Object类型的子树状表格元素,并用语句“order:……”对应的子数据单元中的至少一个数据项/最小数据单元填充该子树状表格元素。以此类推,在语句“order:……”对应的子数据单元还包括再下一级的子数据单元时,创建对应类型的再下一级子树状表格元素,直至所创建的树状表格元素可以通过单个数据项/最小数据单元填充。展示效果如图4中的树状表格元素403所示,在此不再赘述。
在一些实施例中,在第一数据单元包含子数据单元的情况下,可以将上述第一树状表格元素的属性确定为,具有伸展-收缩属性。如图4中,在Property区域,可以将树状表格元素401“default”、树状表格元素402“result”、树状表格元素403“request”等的属性设置为,具有伸展-收缩属性。如图4所示,树状表格元素401“default”、树状表格元素402“result”、树状表格元素403“request”的当前属性状态均为展开状态,当点击default、result或request左侧的倒三角符号时,对应的树状表格元素可以展示为收起状态。
回顾以上过程,通过获取脚本文件的文本信息,根据脚本语言的语法规则识别脚本语句中各种数据单元及对应的数据类型,从而将脚本文件转化成一个内存对象,进而按照预定的映射规则将该内存对象渲染成树状表格结构。如此,可以将文本编辑的脚本文件转化成图形界面进行编辑,降低编写脚本的学习成本和开发成本,提高脚本语言应用的有效性。
根据另一方面的实施例,还提供一种脚本文件的图形化装置。图5示出根据一个实施例的用于脚本文件的图形化装置的示意性框图。如图5所示,用于脚本文件的图形化的装置500包括:获取模块51,配置为获取脚本文件的文本信息;生成模块52,配置为根据脚本文件对应的语法规则,识别文本信息中的脚本语句对应的数据单元和数据单元对应的数据类型,并按照所识别的数据单元和数据类型将脚本文件转化成内存对象;渲染模块53,配置为按照预定的映射规则将该内存对象渲染成树状表格结构,其中,映射规则包括上述数据类型与树状表格元素类型的对应关系。
在本实施例的一些可选实现方式中,生成模块52可以包括识别子模块(未示出),配置为:获取文本信息中的第一脚本语句,检测第一脚本语句对应的第一语法,根据第一语法,确定第一脚本语句对应的第一数据单元,以及第一数据单元对应的第一数据类型。其中,第一数据单元可以包括至少一个数据项/最小数据单元。可以理解,这里的“第一”表示“某一个”以及对应关系,而不是对顺序等的限定。
在一些实现中,上述识别子模块进一步可以配置为:在第一脚本语句存在下级语句的情况下,识别该下级语句对应的第二语法,按照该第二语法,确定该下级语句对应的第二数据单元及第二数据单元对应的第二数据类型,其中,该第二数据单元为上述第一数据单元的子数据单元。同样,该第二数据单元可以包括至少一个数据项/最小数据单元。值得说明的是,这里的第二语法、第二数据单元是为了描述的方便,与第一语法、第一数据单元进行区分,而不是对语法或数据单元的限定。例如,在一些情况下,第一语法和第二语法可以是脚本语言中的同一种语法。
在本实施例的一些可选实现方式中,渲染模块53可以配置为:从上述内存对象中获取第一数据单元及其对应的第一数据类型,按照映射规则确定与第一数据类型对应的第一树状表格元素类型,创建具有第一树状表格元素类型的第一树状表格元素,用第一数据单元中的至少一个数据项/最小数据单元填充第一树状表格元素。
在一个实施例中,渲染模块53还可以配置为:在第一数据单元包含子数据单元的情况下,将第一树状表格元素的属性确定为,具有伸展-收缩属性。
在一个实施例中,渲染模块53还可以配置为:在第一数据单元包含子数据单元的情况下,根据第一数据单元包含的子数据单元创建第一树状表格元素的子树状表格元素;用第一数据单元包含的子数据单元中的至少一个数据项/最小数据单元填充该子树状表格元素。以此类推,在子数据单元还包括再下一级的子数据单元时,创建对应类型的再下一级子树状表格元素,直至所创建的树状表格元素可以通过数据项/最小数据单元填充。
通过以上装置,可以将文本编辑的脚本文件的图形化,降低编写脚本的学习成本和开发成本,提高脚本语言应用的有效性。
值得说明的是,图5所示的装置500与图2所示的方法相对应,因此,针对图2中的相关描述同样适用于装置500,在此不再赘述。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。