基于XSD的代码生成方法、装置、计算机设备及存储介质
技术领域
本发明涉及一种基于XSD的代码生成方法、装置、计算机设备及存储介质,属于软件开发领域。
背景技术
由于XML(Extensible Markup Language,可扩展标记语言)将数据及元数据描述部分集成在一起进行传输,对于用户来说相当友好,无论技术人员还是业务人员都能很好的理解数据的意义及对数据的合理性进行判断,所以目前在互联网上或者在企业局域网内,传输数据为XML是一种很普遍的数据模型。一个完整的业务系统通常包含了数据的输入、数据传输、数据处理等过程。
基于XML开发的系统,一般脱离不了XSD(xml schemas definition)。XSD是XML的结构定义,XSD能定义文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值,还可以定义复杂的数据类型,通过XSD相互间引用能进行代码的复用。基于XSD,能在数据传输之前或入库之前进行数据校验,如果校验不通过则可以进行拦截。一般开发基于XSD数据模型的系统流程如图1所示,关键步骤说明如下:
1)因为XSD本身能定义复杂类型,能通过引入的方式进行代码复用,需要用专业的工具才能比较容易把XSD的文档内容进行分析。
2)根据XSD生成数据实体,有些系统可能只是根据数据库生成实体。一般通过JDK提供的XJC工具通过xjc命令生成Java实体。
3)将XSD对应的字段、属性进行数据模型的设计,生成相应的数据库表,可能一个XSD会涉及好几张表工作量相当的大。
4)根据XSD定义的数据设计录入界面,录入界面包含了数据录入的项及每项对应的数据类型、长度等设定校验规则。在界面录入数据时,会对数据输入进行校验,不符合规则进行提示。
5)录入内容反射成实体,再把实体序列化成XML,再次经过XSD校验,校验通过则进入下一处理流程。
6)通过接口导入数据,则同样需要经过步骤4)的数据校验。
XSD本身是一种标准,包含了大量的关于数据的描述,但是往往开发一个基于XSD数据定义的系统时,往往要做大量的琐碎而重复的工作,耗费大量的人力物力,而这些重复的工作本身并没有相当大的难度。而目前的电子通关领域通常都是基于XML进行数据传输,有些XML可能多达上百项输入,如果进行数据梳理然后再进行各环节的开发,无疑是一项十分艰巨的工作。
发明内容
有鉴于此,本发明提供了一种基于XSD的代码生成方法、装置、计算机设备及存储介质,其可以克服上述现有技术中的不足之处,可以提高数据编码的准确性,生成的代码能够与XSD保持高度的一致性,简化了大量的开发工作,提高了开发人员的开发效率。
本发明的第一个目的在于提供一种基于XSD的代码生成方法。
本发明的第二个目的在于提供一种基于XSD的代码生成装置。
本发明的第三个目的在于提供一种计算机设备。
本发明的第四个目的在于提供一种存储介质。
本发明的第一个目的可以通过采取如下技术方案达到:
一种基于XSD的代码生成方法,所述方法包括:
根据XSD生成第一XML配置文件;其中,所述第一XML配置文件包括XML配置项代码;
响应用户输入的复制指令,将第一XML配置文件进行复制,得到第二XML配置文件;
根据用户输入的修改信息,修改第二XML配置文件中的XML配置项代码,生成第三XML配置文件;
加载第三XML配置文件;
根据用户输入的配置信息,在第三XML配置文件的XML配置项代码中配置表单内容,生成表单的输入项代码。
进一步的,所述根据用户输入的修改信息,修改第二XML配置文件中的XML配置项代码,生成第三XML配置文件之后,还包括:
生成Excel导入模板;其中,所述Excel导入模板的列对应XML的属性;
根据用户输入的数据信息,在Excel导入模板中编辑数据;
响应用户输入的转换指令,将Excel导入模板转换为XML文件;
响应用户输入的导入指令,在第三XML配置文件中导入XML文件的数据;
生成表单转成Java实体对象的代码,以及Excel导入模板转成Java实体的代码。
进一步的,所述根据用户输入的配置信息,在第三XML配置文件的XML配置项代码中配置表单内容,生成表单的输入项代码之后,还包括:
当用户打开开发系统界面时,插入表单的输入项代码,并插入相关HTML元素,生成HTML表单代码。
进一步的,所述根据XSD生成第一XML配置文件,具体包括:
删除XSD嵌套以及XSD定义的复杂类型,并保留XSD校验规则及循环属性,同时进行数据类型映射,生成第一XML配置文件。
本发明的第二个目的可以通过采取如下技术方案达到:
一种基于XSD的代码生成装置,所述装置包括:
第一生成模块,用于根据XSD生成第一XML配置文件;其中,所述第一XML配置文件包括XML配置项代码;
复制模块,用于响应用户输入的复制指令,将第一XML配置文件进行复制,得到第二XML配置文件;
第二生成模块,用于根据用户输入的修改信息,修改第二XML配置文件中的XML配置项代码,生成第三XML配置文件;
加载模块,用于加载第三XML配置文件;
第三生成模块,用于根据用户输入的配置信息,在第三XML配置文件的XML配置项代码中配置表单内容,生成表单的输入项代码。
进一步的,所述第二生成模块之后,还包括:
第四生成模块,用于生成Excel导入模板;其中,所述Excel导入模板的列对应XML的属性;
编辑模块,用于根据用户输入的数据信息,在Excel导入模板中编辑数据;
转换模块,用于响应用户输入的转换指令,将Excel导入模板转换为XML文件;
导入模块,用于响应用户输入的导入指令,在第三XML配置文件中导入XML文件的数据;
第五生成模块,用于生成表单转成Java实体对象的代码,以及Excel导入模板转成Java实体的代码。
进一步的,所述第三生成模块之后,还包括:
第六生成模块,用于当用户打开开发系统界面时,插入表单的输入项代码,并插入相关HTML元素,生成HTML表单代码。
进一步的,所述第一生成模块,具体为:用于删除XSD嵌套以及XSD定义的复杂类型,并保留XSD校验规则及循环属性,同时进行数据类型映射,生成第一XML配置文件。
本发明的第三个目的可以通过采取如下技术方案达到:
一种计算机设备,包括处理器以及用于存储处理器可执行程序的存储器,所述处理器执行存储器存储的程序时,实现上述的代码生成方法。
本发明的第四个目的可以通过采取如下技术方案达到:
一种存储介质,存储有程序,所述程序被处理器执行时,实现上述的代码生成方法。
本发明相对于现有技术具有如下的有益效果:
1、本发明根据XSD生成XML配置文件,并将生成的XML配置文件进行复制,以实现自定义的配置,然后在运行加载配置完成后的XML配置文件,生成表单的输入项代码,可以提高数据编码的准确性,生成的代码能够与XSD保持高度的一致性,不会导致界面属性ID跟实体名称对应不上的情况,如果对应不上,则反序列成实体,对应值丢失。
2、本发明具有可扩展性,由于整个代码的生成是基于配置实现的,这样可以通过强大的配置机制满足不同的客户需要。如在配置里增加统一增加异常时的提示样式等。
3、本发明规范了基于XSD的业务系统的逻辑处理过程,代码更易维护,同样规范了各种输出界面、模板等,像EXCEL模板,通过生成这种比较注重细节的模板,可以让客户觉得更加专业。
4、本发明简化了大量的开发工作,提高开发效率,不需要完全用手工开发前端表单录入界面(含校验逻辑、提示框架等)、不需要完全手工编制Excel导入模板等。
5、本发明提高了灵活性,由于可以生成前端表单、实体、导入模板、导入代码等,当业务需要对某些字段进行增删改时,界面代码不用改就能自动适应。而其它部分也可以通过生成代码的方式而不需要改动。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
图1为现有开发基于XSD数据模型的系统的流程图。
图2为本发明实施例1的基于XSD的代码生成方法的流程图。
图3为本发明实施例1的生成HTML表单代码后的表单界面效果图。
图4为本发明实施例2的基于XSD的代码生成装置的结构框图。
图5为本发明实施例3的计算机设备的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1:
本实施例提供了一种基于XSD的代码生成方法,该方法基于XSD的快速开发工具实现,该快速开发工具安装在计算机中,XSD对要传输的数据模型有很清晰的描述,包含其字段代号、字段名称、字段描述、字段类型、校验规则等,如下:
因此,可以基于XSD的这些详细描述内容,自动完成很多琐碎重复的工作,例如界面表单、表单输入校验、实体转换等,通过该快速开发工具可以一键生成校验配置文件,表单代码,实体代码及与数据库的映射关系等,之后在开发系统运行时根据配置文件动态生成HTML(HyperText Markup Language,超文本标记语言)部分代码。
如图2所示,本实施例的基于XSD的代码生成方法包括以下步骤:
S201、根据XSD生成第一XML配置文件。
XSD虽然强大,但是也特别专业,对于后面如果有些条件需要放宽或者做一些配置更改会比较麻烦,同时也缺少一些程序生成需要关键配置。
本实施例通过删除XSD嵌套以及XSD定义的复杂类型,并保留XSD校验规则及循环属性,同时进行数据类型映射,生成第一XML配置文件,该第一XML配置文件包括XML配置项代码。
在XSD描述的Head节点数据如下:
在第一XML配置文件描述的Head节点数据如下:
从上面的两段代码代码可以看到转换前的XSD及转换后的XML配置项,通过对比,可以看到简化了相当多的XSD代码,同时保留其关键要素,大大提高了代码的可读性。
S202、响应用户输入的复制指令,将第一XML配置文件进行复制,得到第二XML配置文件。
S203、根据用户输入的修改信息,修改第二XML配置文件中的XML配置项代码,生成第三XML配置文件。
在生成第一XML配置文件后,可能需要进行更多的自定义配置项,以满足界面表单生成及校验的需要,可以把第一XML配置文件复制一份出来,修改第二XML配置文件中的XML配置项代码,以实现自定义的配置。
需要修改的部分可能有以下几点:1)生成表单的Label可能需要修改;2)加上Tooltip显示的选项,以明确指导用户输入(默认情况,通过程序解析规则以中文的方式友好提示);3)某些字段不需要在表单显示,只需要在后台处理即可;4)列表输入项时,定义默认显示在列表的列(默认显示全部);5)其它配置项;如下:
上述代码片段中,增加了tooltip配置项,如tooltip=”输入13位的海关备案代码”,isForm=”false”是指不需要在表单(form)进行录入,修改在表单显示时的标题,如label=”航次航班编号”。
S204、生成Excel导入模板。
S205、根据用户输入的数据信息,在Excel导入模板中编辑数据。
S206、响应用户输入的转换指令,将Excel导入模板转换为XML文件。
S207、响应用户输入的导入指令,在第三XML配置文件中导入XML文件的数据。
Excel是一个相当强大的数据处理工具,能为用户带来比较高效的录入,很多用户通过Excel编辑数据后,再进行数据导入,而XSD可能会嵌套较深,这样就会涉及到多个sheet页,这样数据就要做关联,需要定义外键,在生成的Excel导入模板可以增加一些其它定义项,如填写说明及涉及的一些基础数据等;此外,生成的Excel导入模板的列对应的XML的属性本身会生成映射表,可以直接由Excel转成XML文件或逆向由XML文件转成Excel,非常方便。
S208、生成表单转成Java实体对象的代码,以及Excel导入模板转成Java实体的代码。
由XSD可以直接生成Java实体对象,同样通过约定的规则可以生成前端表单转成Java实体对象的代码,以及Excel导入模板转变成Java实体的代码;生成的代码可能是包含了逻辑的代码,也可以只是接口,以规范约束开发;该步骤S208是生成后台代码的过程,通过生成的后台代码,能够用户进行维护。
S209、加载第三XML配置文件。
S210、根据用户输入的配置信息,在第三XML配置文件的XML配置项代码中配置表单内容,生成表单的输入项代码。
S211、当用户打开开发系统界面时,插入表单的输入项代码,并插入相关HTML元素,生成HTML表单代码。
经过步骤S201~S203后,生成了逻辑清晰的、可读性高的第三XML配置文件,这样就很容易根据第三XML配置文件生成表单的输入项代码,本实施例生成的表单的输入项代码采用JS前端代码实现,但本领域技术人员可以理解,也可以采用freemarker模板引擎实现,其效果会更好,逻辑会更清晰,可维护度也高。
未生成表单代码前的HTML代码如下:
上述的HTML代码中:
<div class="cbec-table"id="headDiv"path="Manifest\Declaration"></div>中的path属性指明此块内容要自动生成的内容来自哪里,对应配置XPATH:params\param[name=Manifest]\child\param[name=Declaration],如下所示:
通过JS动态插入表单的输入项代码,并插入相关HTML元素,生成HTML表单代码,如下:
生成HTML表单代码后的表单界面效果如图3所示。
上述步骤S201~S208为编码阶段,步骤S209~S211为运行阶段。至此,基于XSD的快速开发工具实现的代码生成方法已经介绍完毕,当然在实际使用中还要继续做一些增强,如上面界面中要对数据类型进行适配,不同的类型用不同的输入框;下拉列表还需要与基础数据进行绑定等。
本领域技术人员可以理解,实现上述实施例的方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,相应的程序可以存储于计算机可读存储介质中。
应当注意,尽管在附图中以特定顺序描述了上述实施例的方法操作,但是这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
实施例2:
如图4所示,本实施例提供了一种基于XSD的代码生成装置,该装置包括第一生成模块401、复制模块402、第二生成模块403、加载模块404和第三生成模块405,各个模块的具体功能如下:
所述第一生成模块401,用于根据XSD生成第一XML配置文件,具体为:用于删除XSD嵌套以及XSD定义的复杂类型,并保留XSD校验规则及循环属性,同时进行数据类型映射,生成第一XML配置文件;其中,所述第一XML配置文件包括XML配置项代码
所述复制模块402,用于响应用户输入的复制指令,将第一XML配置文件进行复制,得到第二XML配置文件。
所述第二生成模块403,用于根据用户输入的修改信息,修改第二XML配置文件中的XML配置项代码,生成第三XML配置文件。
所述加载模块404,用于加载第三XML配置文件。
所述第三生成模块405,用于根据用户输入的配置信息,在第三XML配置文件的XML配置项代码中配置表单内容,生成表单的输入项代码。
进一步地,所述第二生成模块402之后,还包括:
第四生成模块406,用于生成Excel导入模板;其中,所述Excel导入模板的列对应XML的属性。
编辑模块407,用于根据用户输入的数据信息,在Excel导入模板中编辑数据。
转换模块408,用于响应用户输入的转换指令,将Excel导入模板转换为XML文件。
导入模块409,用于响应用户输入的导入指令,在第三XML配置文件中导入XML文件的数据。
第五生成模块410,用于生成表单转成Java实体对象的代码,以及Excel导入模板转成Java实体的代码。
进一步地,所述第三生成模块405之后,还包括:
第六生成模块411,用于当用户打开开发系统界面时,插入表单的输入项代码,并插入相关HTML元素,生成HTML表单代码。
本实施例中各个模块的具体实现可以参见上述实施例1,在此不再一一赘述;需要说明的是,本实施例提供的装置仅以上述各功能模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
可以理解,上述装置所使用的术语“第一”、“第二”等可用于描述各种模块,但这些模块不受这些术语限制。这些术语仅用于将第一个模块与另一个模块区分。举例来说,在不脱离本发明的范围的情况下,可以将第一生成模块称为第二生成模块,且类似地,可将第二生成模块称为第一生成模块,第一生成模块和第二生成模块两者都是生成模块,但不是同一生成模块。
实施例3:
本实施例提供了一种计算机设备,该计算机设备为计算机,如图5所示,其通过系统总线501连接的处理器502、存储器、输入装置503、显示器504和网络接口505,该处理器用于提供计算和控制能力,该存储器包括非易失性存储介质506和内存储器507,该非易失性存储介质506存储有操作系统、计算机程序和数据库,该内存储器507为非易失性存储介质中的操作系统和计算机程序的运行提供环境,处理器502执行存储器存储的计算机程序时,实现上述实施例1的代码生成方法,如下:
根据XSD生成第一XML配置文件;其中,所述第一XML配置文件包括XML配置项代码;
响应用户输入的复制指令,将第一XML配置文件进行复制,得到第二XML配置文件;
根据用户输入的修改信息,修改第二XML配置文件中的XML配置项代码,生成第三XML配置文件;
加载第三XML配置文件;
根据用户输入的配置信息,在第三XML配置文件的XML配置项代码中配置表单内容,生成表单的输入项代码。
进一步地,所述根据用户输入的修改信息,修改第二XML配置文件中的XML配置项代码,生成第三XML配置文件之后,还包括:
生成Excel导入模板;其中,所述Excel导入模板的列对应XML的属性;
根据用户输入的数据信息,在Excel导入模板中编辑数据;
响应用户输入的转换指令,将Excel导入模板转换为XML文件;
响应用户输入的导入指令,在第三XML配置文件中导入XML文件的数据;
生成表单转成Java实体对象的代码,以及Excel导入模板转成Java实体的代码。
进一步地,所述根据用户输入的配置信息,在第三XML配置文件的XML配置项代码中配置表单内容,生成表单的输入项代码之后,还包括:
当用户打开开发系统界面时,插入表单的输入项代码,并插入相关HTML元素,生成HTML表单代码。
进一步地,所述根据XSD生成第一XML配置文件,具体包括:
删除XSD嵌套以及XSD定义的复杂类型,并保留XSD校验规则及循环属性,同时进行数据类型映射,生成第一XML配置文件。
实施例4:
本实施例提供了一种存储介质,该存储介质为计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行时,实现上述实施例1的代码生成方法,如下:
根据XSD生成第一XML配置文件;其中,所述第一XML配置文件包括XML配置项代码;
响应用户输入的复制指令,将第一XML配置文件进行复制,得到第二XML配置文件;
根据用户输入的修改信息,修改第二XML配置文件中的XML配置项代码,生成第三XML配置文件;
加载第三XML配置文件;
根据用户输入的配置信息,在第三XML配置文件的XML配置项代码中配置表单内容,生成表单的输入项代码。
进一步地,所述根据用户输入的修改信息,修改第二XML配置文件中的XML配置项代码,生成第三XML配置文件之后,还包括:
生成Excel导入模板;其中,所述Excel导入模板的列对应XML的属性;
根据用户输入的数据信息,在Excel导入模板中编辑数据;
响应用户输入的转换指令,将Excel导入模板转换为XML文件;
响应用户输入的导入指令,在第三XML配置文件中导入XML文件的数据;
生成表单转成Java实体对象的代码,以及Excel导入模板转成Java实体的代码。
进一步地,所述根据用户输入的配置信息,在第三XML配置文件的XML配置项代码中配置表单内容,生成表单的输入项代码之后,还包括:
当用户打开开发系统界面时,插入表单的输入项代码,并插入相关HTML元素,生成HTML表单代码。
进一步地,所述根据XSD生成第一XML配置文件,具体包括:
删除XSD嵌套以及XSD定义的复杂类型,并保留XSD校验规则及循环属性,同时进行数据类型映射,生成第一XML配置文件。
本实施例中所述的存储介质可以是磁盘、光盘、计算机存储器、随机存取存储器(RAM,Random Access Memory)、U盘、移动硬盘等介质。
综上所述,本发明根据XSD生成XML配置文件,并将生成的XML配置文件进行复制,以实现自定义的配置,然后在运行加载配置完成后的XML配置文件,生成表单的输入项代码,可以提高数据编码的准确性,生成的代码能够与XSD保持高度的一致性,不会导致界面属性ID跟实体名称对应不上的情况,如果对应不上,则反序列成实体,对应值丢失。
以上所述,仅为本发明专利较佳的实施例,但本发明专利的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明专利所公开的范围内,根据本发明专利的技术方案及其发明构思加以等同替换或改变,都属于本发明专利的保护范围。