CN112052012B - 基于xslt和xsd的代码自动生成方法和设备 - Google Patents
基于xslt和xsd的代码自动生成方法和设备 Download PDFInfo
- Publication number
- CN112052012B CN112052012B CN202010906969.0A CN202010906969A CN112052012B CN 112052012 B CN112052012 B CN 112052012B CN 202010906969 A CN202010906969 A CN 202010906969A CN 112052012 B CN112052012 B CN 112052012B
- Authority
- CN
- China
- Prior art keywords
- xsd
- model
- script
- code
- xslt
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于XSLT和XSD的代码自动生成方法和设备,所述方法通过在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本;根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码;根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码;能够提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期,节省了软件开发时间,提高了代码编写的质量,并且兼容性高,适合各种软件开发场景。
Description
技术领域
本发明涉及软件系统开发领域,尤其涉及一种基于XSLT和XSD的代码自动生成方法和设备。
背景技术
在电信传输网管中,为了开发用户需要的功能,程序员往往需要编写大量代码来实现这些功能;在编写程序实现某功能时,首先需要明确的就是数据模型,数据模型有如下几种:远程过程调用RPC传输的数据模型、存储的数据模型及内存数据模型;程序员编写的代码就会涉及到各种数据模型的定义,以及某些数据模型之间的数据的转换;而每个数据模型一般对应到一个类class,代码需要实现默认构造函数,析构函数及拷贝构造函数等,还要实现数据模型之间转换的代码;当数据模型包含的字段很多,并且数据模型增多时,上面这种类似的代码非常之多;另外一方面,数据模型定义的class中还会存在众多重复或者类似的代码。
编写这种代码非常繁琐,比较耗时也特别容易出错,如数据模型转换的代码少赋值了某个字段,特别是随着功能的增多,这种代码会越来越多,容易造成代码编写过程中的错误,导致软件开发周期较长,且代码错误率较高的问题。
发明内容
本发明的主要目的在于提供一种基于XSLT和XSD的代码自动生成方法和设备,旨在解决现有技术中容易造成代码编写过程中的错误,导致软件开发周期较长,且代码错误率较高的技术问题。
第一方面,本发明提供一种基于XSLT和XSD的代码自动生成方法,所述基于XSLT和XSD的代码自动生成方法包括以下步骤:
在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本;
根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码;
根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码。
可选地,所述在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本,包括:
在XSD文件中定义模型名称、模型类型和模型成员信息;
根据所述模型名称、所述模型类型和所述模型成员信息生成数据模型XSD脚本;
在所述XSD文件中定义模型转换关系,根据所述模型转换关系生成数据模型转换XSD脚本。
可选地,所述在XSD文件中定义模型名称、模型类型和模型成员信息,包括:
在XSD文件中定义模型名称中的数据模型名称、功能名称、通信层模型名称、内存模型名称和所述持久化模型名称;
在XSD文件中定义模型类型中的公共模型、通信层模型和持久化模型;
在XSD文件中定义模型成员信息中的成员名称、界面多语言名称、成员类型名称和界面设置信息。
可选地,所述在所述XSD文件中定义模型转换关系,根据所述模型转换关系生成数据模型转换XSD脚本,包括:
在XSD文件的类型地图中根据当前模型的成员名称和待转换模型的成员名称确定模型类型名称;
获取所述模型类型名称对应的转换代码函数;
根据所述转换代码函数定义各成员的内存模型、远程过程调用RPC模型和持久化模型之间的模型转换关系;
根据所述模型转换关系生成数据模型转换XSD脚本。
可选地,所述根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码,包括:
获取所述数据模型XSD脚本和数据模型转换XSD脚本中的复合型元素、类型元素和要素元素;
将复合型元素节点与预设持续功能进行匹配,若匹配成功则生成持久化模型;
对所述持久化模型进行持久化,生成代码环境;
根据所述持久化模型对应的类型元素和要素元素生成代码环境元素;
根据所述代码环境和所述代码环境元素生成XSLT脚本代码。
可选地,所述对所述持久化模型进行持久化,生成代码环境,包括:
根据所述复合型元素节点的名称生成持久化模型名称;
根据预设协议缓冲区将所述持久化模型和所述持久化模型名称进行持久化,生成代码环境。
可选地,所述根据所述持久化模型对应的类型元素和要素元素生成代码环境元素,包括:
遍历每个要素元素和类型元素获取与所述持久化模型对应的目标要素和目标类型;
根据所述目标要素和所述目标类型生成代码环境元素。
可选地,所述根据所述代码环境和所述代码环境元素生成XSLT脚本代码,包括:
在预设指定目录中定义XSL函数和XSL模板;
根据所述XSL函数、所述XSL模板和预设伪脚本代码结合所述代码环境和所述代码环境元素生成XSLT脚本代码。
可选地,其特征在于,所述根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码,包括:
根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析,并根据预设功能添加功能性代码,生成处理后的XSD脚本;
根据预设执行工具执行所述处理后的XSD脚本,生成对应的语言代码。
第二方面,本发明还提出一种基于XSLT和XSD的代码自动生成设备,所述基于XSLT和XSD的代码自动生成设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于XSLT和XSD的代码自动生成程序,所述基于XSLT和XSD的代码自动生成程序配置为实现如上文所述的基于XSLT和XSD的代码自动生成方法的步骤。
本发明提出的基于XSLT和XSD的代码自动生成方法,通过在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本;根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码;根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码;能够提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期,节省了软件开发时间,提高了代码编写的质量,并且兼容性高,适合各种软件开发场景。
附图说明
图1为本发明实施例方案涉及的硬件运行环境的设备结构示意图;
图2为本发明基于XSLT和XSD的代码自动生成方法第一实施例的流程示意图;
图3为本发明基于XSLT和XSD的代码自动生成方法第二实施例的流程示意图;
图4为本发明基于XSLT和XSD的代码自动生成方法第三实施例的流程示意图;
图5为本发明基于XSLT和XSD的代码自动生成方法第四实施例的流程示意图;
图6为本发明基于XSLT和XSD的代码自动生成方法第五实施例的流程示意图;
图7为本发明基于XSLT和XSD的代码自动生成方法第六实施例的流程示意图;
图8为本发明基于XSLT和XSD的代码自动生成方法第七实施例的流程示意图;
图9为本发明基于XSLT和XSD的代码自动生成方法第八实施例的流程示意图;
图10为本发明基于XSLT和XSD的代码自动生成方法第九实施例的流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例的解决方案主要是:通过在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本;根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码;根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码;能够提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期,节省了软件开发时间,提高了代码编写的质量,并且兼容性高,适合各种软件开发场景,解决了现有技术中容易造成代码编写过程中的错误,导致软件开发周期较长,且代码错误率较高的技术问题。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的设备结构示意图。
如图1所示,该设备可以包括:处理器1001,例如CPU,通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如Wi-Fi接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(Non-Volatile Memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的设备结构并不构成对该设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及基于XSLT和XSD的代码自动生成程序。
本发明设备通过处理器1001调用存储器1005中存储的基于XSLT和XSD的代码自动生成程序,并执行以下操作:
在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本;
根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码;
根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码。
进一步地,处理器1001可以调用存储器1005中存储的基于XSLT和XSD的代码自动生成程序,还执行以下操作:
在XSD文件中定义模型名称、模型类型和模型成员信息;
根据所述模型名称、所述模型类型和所述模型成员信息生成数据模型XSD脚本;
在所述XSD文件中定义模型转换关系,根据所述模型转换关系生成数据模型转换XSD脚本。
进一步地,处理器1001可以调用存储器1005中存储的基于XSLT和XSD的代码自动生成程序,还执行以下操作:
在XSD文件中定义模型名称中的数据模型名称、功能名称、通信层模型名称、内存模型名称和所述持久化模型名称;
在XSD文件中定义模型类型中的公共模型、通信层模型和持久化模型;
在XSD文件中定义模型成员信息中的成员名称、界面多语言名称、成员类型名称和界面设置信息。
进一步地,处理器1001可以调用存储器1005中存储的基于XSLT和XSD的代码自动生成程序,还执行以下操作:
在XSD文件的类型地图中根据当前模型的成员名称和待转换模型的成员名称确定模型类型名称;
获取所述模型类型名称对应的转换代码函数;
根据所述转换代码函数定义各成员的内存模型、远程过程调用RPC模型和持久化模型之间的模型转换关系;
根据所述模型转换关系生成数据模型转换XSD脚本。
进一步地,处理器1001可以调用存储器1005中存储的基于XSLT和XSD的代码自动生成程序,还执行以下操作:
获取所述数据模型XSD脚本和数据模型转换XSD脚本中的复合型元素、类型元素和要素元素;
将复合型元素节点与预设持续功能进行匹配,若匹配成功则生成持久化模型;
对所述持久化模型进行持久化,生成代码环境;
根据所述持久化模型对应的类型元素和要素元素生成代码环境元素;
根据所述代码环境和所述代码环境元素生成XSLT脚本代码。
进一步地,处理器1001可以调用存储器1005中存储的基于XSLT和XSD的代码自动生成程序,还执行以下操作:
根据所述复合型元素节点的名称生成持久化模型名称;
根据预设协议缓冲区将所述持久化模型和所述持久化模型名称进行持久化,生成代码环境。
进一步地,处理器1001可以调用存储器1005中存储的基于XSLT和XSD的代码自动生成程序,还执行以下操作:
遍历每个要素元素和类型元素获取与所述持久化模型对应的目标要素和目标类型;
根据所述目标要素和所述目标类型生成代码环境元素。
进一步地,处理器1001可以调用存储器1005中存储的基于XSLT和XSD的代码自动生成程序,还执行以下操作:
在预设指定目录中定义XSL函数和XSL模板;
根据所述XSL函数、所述XSL模板和预设伪脚本代码结合所述代码环境和所述代码环境元素生成XSLT脚本代码。
进一步地,处理器1001可以调用存储器1005中存储的基于XSLT和XSD的代码自动生成程序,还执行以下操作:
根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析,并根据预设功能添加功能性代码,生成处理后的XSD脚本;
根据预设执行工具执行所述处理后的XSD脚本,生成对应的语言代码。
本实施例通过上述方案,通过在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本;根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码;根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码;能够提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期,节省了软件开发时间,提高了代码编写的质量,并且兼容性高,适合各种软件开发场景。
基于上述硬件结构,提出本发明基于XSLT和XSD的代码自动生成方法实施例。
参照图2,图2为本发明基于XSLT和XSD的代码自动生成方法第一实施例的流程示意图。
在第一实施例中,所述基于XSLT和XSD的代码自动生成方法包括以下步骤:
步骤S10、在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本。
需要说明的是,可扩展标记语言架构(XML Schema Definition,XSD)是以可扩展标记语言为基础的,它用于定义一份可扩展标记语言(Extensible Markup Language,XML)文档的合法组件群,所述数据模型XSD脚本为不同数据模型对应的XSD脚本,所述数据模型转换XSD脚本为各数据模型之间的转换关系的XSD脚本。
可以理解的是,在XSD文件中定义数据模型XSD脚本,即在XSD文件中定义某个统一的数据模型,描述某个具体的功能;例如,为了实现电信传输网管中的环境配置及状态的功能,相应的数据模型XSD脚本就定义环境配置及状态功能对应的一些结果显示信息,包含条目状态、单盘、风扇运行模式、告警电压回差、机电电源过欠压自动关断、主槽位状态、备槽位状态及EMU上电时间等。
在具体实现中,数据模型一般分为内存模型、存储模型和通信模型等,内存模型一般是和语言相关,如c++和Java等,存储模型一般是根据持久化的方式进行选择,例如采用Google Protocol Buffer;通信模型一般根据通信方式进行选择,例如采用InternetCommunication Environment;在XSD文件中根据功能需要,一般需要定义内存模型与远程过程调用(Remote Procedure Call,RPC)通信模型和持久化模型之间的转换关系。
步骤S20、根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码。
需要说明的是,在定义了所述数据模型XSD脚本和所述数据模型转换XSD脚本后,可以通过所述数据模型XSD脚本和所述数据模型转换XSD脚本中的各个元素来实现XSLT脚本,即生成XSLT脚本代码。
步骤S30、根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码。
应当理解的是,在确定了XSLT脚本后,可以根据XSLT脚本对XSD文件中的信息进行解析处理,即对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,在解析完成后,可以根据解析处理后的XSD脚本,生成对应的语言代码,例如,C++代码和Java代码等。
本实施例通过上述方案,通过在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本;根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码;根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码;能够提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期,节省了软件开发时间,提高了代码编写的质量,并且兼容性高,适合各种软件开发场景。
进一步地,图3为本发明基于XSLT和XSD的代码自动生成方法第二实施例的流程示意图,如图3所示,基于第一实施例提出本发明基于XSLT和XSD的代码自动生成方法第二实施例,在本实施例中,所述步骤S10具体包括以下步骤:
步骤S11、在XSD文件中定义模型名称、模型类型和模型成员信息。
需要说明的是,在需要实现某个具体功能时需要定义数据模型,后续会依赖这个XSD模型自动生成对应的代码,而在定义数据模型时会定义数据模型的模型名称、模型类型和模型成员信息。
步骤S12、根据所述模型名称、所述模型类型和所述模型成员信息生成数据模型XSD脚本。
可以理解的是,根据所述模型名称、所述模型类型和所述模型成员信息能够构建数据模型,即通过所述模型名称、所述模型类型和所述模型成员信息能够生成数据模型XSD脚本。
步骤S13、在所述XSD文件中定义模型转换关系,根据所述模型转换关系生成数据模型转换XSD脚本。
应当理解的是,在所述XSD文件中可以数据模型转换进行定义,即定义模型转换关系,一般可以通过特殊标记标示数据模型,接着定义每个模型之间的转换关系,根据所述模型转换关系可以生成数据模型转换XSD脚本。
本实施例通过上述方案,通过在XSD文件中定义模型名称、模型类型和模型成员信息;根据所述模型名称、所述模型类型和所述模型成员信息生成数据模型XSD脚本;在所述XSD文件中定义模型转换关系,根据所述模型转换关系生成数据模型转换XSD脚本,能够提高XSD文件定义模型的速度,进一步提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期。
进一步地,图4为本发明基于XSLT和XSD的代码自动生成方法第三实施例的流程示意图,如图4所示,基于第二实施例提出本发明基于XSLT和XSD的代码自动生成方法第三实施例,在本实施例中,所述步骤S11具体包括以下步骤:
步骤S111、在XSD文件中定义模型名称中的数据模型名称、功能名称、通信层模型名称、内存模型名称和所述持久化模型名称。
需要说明的是,所述模型名称中包含数据模型名称、功能名称、通信层模型名称、内存模型名称和所述持久化模型名称,数据模型名称为不同数据模型对应的名称,功能名称为具体功能对应的名称,内存模型名称为对应内存模型的名称,通信层名称为如果有通信层模型对应的名称,持久化模型名称为对应的持久化模型的名称,当然也可以包含其他类型的名称,本实施例对此不加以限制。
步骤S112、在XSD文件中定义模型类型中的公共模型、通信层模型和持久化模型。
可以理解的是,所述模型类型包括公共模型、通信层模型和持久化模型,所述公共模型即为通用的公共模型,如果所述数据模型为公共模型,则该公共模型一般会放到一个公用的文件夹中,所述通信层模型为通信层对应的数据模型,所述持久化模型为持久化的数据模型,当然也可以包含其他类型的模型类型,本实施例对此不加以限制。
步骤S113、在XSD文件中定义模型成员信息中的成员名称、界面多语言名称、成员类型名称和界面设置信息。
应当理解的是,所述模型成员信息包括成员名称、界面多语言名称、成员类型名称和界面设置信息,所述成员名称为各数据模型的成员对应的名称,所述界面多语言名称包括界面中文显示名称和界面外文显示名称,外文可以是英语,也可以是其他语言例如德语、法语及韩语等,本实施例对此不加以限制;所述成员类型名称为各数据模型成员对应的类型名称,所述成员类型名称可以是enum、int、string及struct,当然还可以是其他已经定义了XSD模型的成员类型名称,本实施例对此不加以限制,所述界面设置信息包括界面是否隐藏,界面显示设置,模型界面是否只读,是否为数组或默认值等,当然也可以包括其他设置信息,本实施例对此不加以限制。
本实施例通过上述方案,通过在XSD文件中定义模型名称中的数据模型名称、功能名称、通信层模型名称、内存模型名称和所述持久化模型名称;在XSD文件中定义模型类型中的公共模型、通信层模型和持久化模型;在XSD文件中定义模型成员信息中的成员名称、界面多语言名称、成员类型名称和界面设置信息,能够提高XSD文件定义模型的速度,进一步提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期。
进一步地,图5为本发明基于XSLT和XSD的代码自动生成方法第四实施例的流程示意图,如图5所示,基于第二实施例提出本发明基于XSLT和XSD的代码自动生成方法第四实施例,在本实施例中,所述步骤S13具体包括以下步骤:
步骤S131、在XSD文件的类型地图中根据当前模型的成员名称和待转换模型的成员名称确定模型类型名称。
需要说明的是,所述类型地图为XSD文件中各模型类型对应的分布示意图,从所述类型地图中可以获得当前模型的成员名称,通过当前模型的成员名称和待转换模型的成员名称能够确定模型类型名称。
步骤S132、获取所述模型类型名称对应的转换代码函数。
应当理解的是,不同的模型类型名称会对应有不同语言的转换代码函数,即通过所述模型类型名称确定数据模型的类,从而更加确定的类找到对应的语言的转换代码函数。
步骤S133、根据所述转换代码函数定义各成员的内存模型、远程过程调用RPC模型和持久化模型之间的模型转换关系。
可以理解的是,在确定了所述转换代码函数之后,可以根据所述转换代码函数定义各成员中各模型的模型转换关系,即各成员的内存模型、远程过程调用RPC模型和持久化模型之间的模型转换关系,所述内存模型为内存数据对应的模型,所述RPC模型为进行远程过程调用传输的数据模型。
步骤S134、根据所述模型转换关系生成数据模型转换XSD脚本。
应当理解的是,根据所述模型转换关系对应的数据可以生成数据模型转换XSD脚本。
本实施例通过上述方案,通过在XSD文件的类型地图中根据当前模型的成员名称和待转换模型的成员名称确定模型类型名称;获取所述模型类型名称对应的转换代码函数;根据所述转换代码函数定义各成员的内存模型、远程过程调用RPC模型和持久化模型之间的模型转换关系;根据所述模型转换关系生成数据模型转换XSD脚本,能够提高XSD文件定义模型的速度,进一步提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期。
进一步地,图6为本发明基于XSLT和XSD的代码自动生成方法第五实施例的流程示意图,如图6所示,基于第一实施例提出本发明基于XSLT和XSD的代码自动生成方法第五实施例,在本实施例中,所述步骤S20具体包括以下步骤:
步骤S21、获取所述数据模型XSD脚本和数据模型转换XSD脚本中的复合型元素、类型元素和要素元素。
需要说明的是,所述数据模型XSD脚本和数据模型转换XSD脚本中一般定义有complextype、maptype、element等元素,即复合型元素、类型元素和要素元素。
步骤S22、将复合型元素节点与预设持续功能进行匹配,若匹配成功则生成持久化模型。
可以理解的是,将复合型元素节点与预设持续功能进行匹配,若匹配成功则说明需要生成持久化模型,在实际操作中可以根据complextype节点和w:pout进行匹配,如果满足条件,那么就需要生成持久化模型。
步骤S23、对所述持久化模型进行持久化,生成代码环境。
应当理解的是,对所述持久化模型进行持久化,能够生成对应的代码环境,在实际操作中可以根据complextype的name生成持久化模型的名称,假设采用Google ProtocolBuffer方式持久化,生成message neenvironment。
步骤S24、根据所述持久化模型对应的类型元素和要素元素生成代码环境元素。
需要说明的是,所述持久化模型有对应的类型元素和要素元素,通过所述类型元素和要素元素能够生成代码环境元素。
步骤S25、根据所述代码环境和所述代码环境元素生成XSLT脚本代码。
可以理解的是,通过所述代码环境和所述代码环境元素能够搭建XSLT脚本,即能生成XSLT脚本代码。
本实施例通过上述方案,通过获取所述数据模型XSD脚本和数据模型转换XSD脚本中的复合型元素、类型元素和要素元素;将复合型元素节点与预设持续功能进行匹配,若匹配成功则生成持久化模型;对所述持久化模型进行持久化,生成代码环境;根据所述持久化模型对应的类型元素和要素元素生成代码环境元素;根据所述代码环境和所述代码环境元素生成XSLT脚本代码,能够提高XSD文件定义模型的速度,进一步提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期。
进一步地,图7为本发明基于XSLT和XSD的代码自动生成方法第六实施例的流程示意图,如图7所示,基于第五实施例提出本发明基于XSLT和XSD的代码自动生成方法第六实施例,在本实施例中,所述步骤S23具体包括以下步骤:
步骤S231、根据所述复合型元素节点的名称生成持久化模型名称。
需要说明的是,根据所述复合型元素节点的名称生成持久化模型名称,即根据complextype的name生成持久化模型的名称。
步骤S232、根据预设协议缓冲区将所述持久化模型和所述持久化模型名称进行持久化,生成代码环境。
可以理解的是,所述预设协议缓冲区为预先设置的协议缓冲区,通过所述预设协议缓冲区将所述持久化模型和所述持久化模型名称进行持久化,生成代码环境,当然持久化方式除了可以是通过Google Protocol Buffer之外,还可以是通过其他持久化工具进行模型持久化,本实施例对此不加以限制。
本实施例通过上述方案,通过根据所述复合型元素节点的名称生成持久化模型名称;根据预设协议缓冲区将所述持久化模型和所述持久化模型名称进行持久化,生成代码环境,能够提高XSD文件定义模型的速度,进一步提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期。
进一步地,图8为本发明基于XSLT和XSD的代码自动生成方法第七实施例的流程示意图,如图8所示,基于第五实施例提出本发明基于XSLT和XSD的代码自动生成方法第七实施例,在本实施例中,所述步骤S24具体包括以下步骤:
步骤S241、遍历每个要素元素和类型元素获取与所述持久化模型对应的目标要素和目标类型。
需要说明的是,遍历每个要素元素和类型元素可以确定所述持久化模型对应的目标要素和目标类型。
步骤S242、根据所述目标要素和所述目标类型生成代码环境元素。
可以理解的是,通过所述目标要素和目标类型可以生成代码环境元素,即遍历每个element,根据所述目标要素element和所述目标类型maptype,可以生成messageneenvironment的元素即代码环境元素。
本实施例通过上述方案,通过遍历每个要素元素和类型元素获取与所述持久化模型对应的目标要素和目标类型;根据所述目标要素和所述目标类型生成代码环境元素;能够提高XSD文件定义模型的速度,进一步提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期。
进一步地,图9为本发明基于XSLT和XSD的代码自动生成方法第八实施例的流程示意图,如图9所示,基于第五实施例提出本发明基于XSLT和XSD的代码自动生成方法第八实施例,在本实施例中,所述步骤S25具体包括以下步骤:
步骤S251、在预设指定目录中定义XSL函数和XSL模板。
可以理解的是,所述预设指定目录为预先设置的指定目录,在所述指定目录中定义XSL函数和XSL模板能够为后续XSLT脚本代码的生成做准备,即搭建代码生成环境。
步骤S252、根据所述XSL函数、所述XSL模板和预设伪脚本代码结合所述代码环境和所述代码环境元素生成XSLT脚本代码。
需要说明的是,所述预设伪脚本代码为预先设置的代码框架,通过所述XSL函数、所述XSL模板和预设伪脚本代码结合所述代码环境和所述代码环境元素可以生成XSLT脚本代码。
在具体实现中,以生成存储模型为例,在XSLT中通过类似如下的伪脚本代码生成代码到指定的文件,如下所示:
<xsl:result-document href="指定目录\\*.proto">
import"*_common.proto";
package yournamespace;
<xsl:for-each select="XSD文件根节点/complextype[@w:pout]">
<xsl:value-of select="w:persistent(处理complextype节点)"/>
</xsl:for-each>
</xsl:result-document>
最终生成的文件名为neenvironment.proto。
本实施例通过上述方案,通过在预设指定目录中定义XSL函数和XSL模板;根据所述XSL函数、所述XSL模板和预设伪脚本代码结合所述代码环境和所述代码环境元素生成XSLT脚本代码,能够提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期,节省了软件开发时间,提高了代码编写的质量,并且兼容性高,适合各种软件开发场景。
进一步地,图10为本发明基于XSLT和XSD的代码自动生成方法第九实施例的流程示意图,如图10所示,基于第一实施例提出本发明基于XSLT和XSD的代码自动生成方法第九实施例,在本实施例中,所述步骤S30具体包括以下步骤:
步骤S31、根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析,并根据预设功能添加功能性代码,生成处理后的XSD脚本。
可以理解的是,所述预设功能为预先设置的需要进行添加的功能,其对应有对应的功能性代码,数据模型和转换关系都通过XSD描述清楚后,需要通过XSLT来解析XSD中定义的complextype、maptype、element等元素,一般会定义xsl:function,xsl:template。
在具体实现中,以存储模型为例,为了生成存储模型,定义了w:persistentfunction,w:persistent的实现逻辑如下:根据complextype节点和w:pout进行匹配,如果满足条件,那么就需要生成持久化模型;根据complextype的name生成持久化模型的名称,假设采用Google Protocol Buffer方式持久化,那么就生成message neenvironment;遍历每个element,根据maptype、element生成message neenvironment的元素;生成通信模型和内存模型的XSLT脚本非常类似,假设需要生成C++内存模型,那么将上面的message替换成class,名字替换成XSD文件中定义的CBasicCfgEnvironment,每个元素采用C++语言中的int,bool,string等来替代即可,编写XSLT脚本生成数据模型后,还需要编写XSLT脚本实现模型转换。这个时候就需要解析和处理XSD文件中的节点maptype。XSLT的处理和生成模型比较类似,加上生成C++转换代码函数。
步骤S32、根据预设执行工具执行所述处理后的XSD脚本,生成对应的语言代码。
可以理解的是,XSLT脚本变成完成后,需要执行XSLT,一般采用专用工具如XMLSpy即可运行XSLT脚本,当然也可以为其他预设执行工具,本实施例对此不加以限制。
本实施例通过上述方案,通过根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析,并根据预设功能添加功能性代码,生成处理后的XSD脚本;根据预设执行工具执行所述处理后的XSD脚本,生成对应的语言代码,能够提高软件开发的速度和效率,避免了开发人员的重复性工作,减少了代码编写过程中的错误,缩短了软件开发的周期,节省了软件开发时间,提高了代码编写的质量,并且兼容性高,适合各种软件开发场景。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (9)
1.一种基于XSLT和XSD的代码自动生成方法,其特征在于,所述基于XSLT和XSD的代码自动生成方法,包括:
在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本;
根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码;
根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码;
其中,所述根据所述数据模型XSD脚本和所述数据模型转换XSD脚本生成XSLT脚本代码,包括:
获取所述数据模型XSD脚本和数据模型转换XSD脚本中的复合型元素、类型元素和要素元素;
将复合型元素节点与预设持续功能进行匹配,若匹配成功则生成持久化模型;
对所述持久化模型进行持久化,生成代码环境;
根据所述持久化模型对应的类型元素和要素元素生成代码环境元素;
根据所述代码环境和所述代码环境元素生成XSLT脚本代码。
2.如权利要求1所述的基于XSLT和XSD的代码自动生成方法,其特征在于,所述在XSD文件中定义数据模型XSD脚本和数据模型转换XSD脚本,包括:
在XSD文件中定义模型名称、模型类型和模型成员信息;
根据所述模型名称、所述模型类型和所述模型成员信息生成数据模型XSD脚本;
在所述XSD文件中定义模型转换关系,根据所述模型转换关系生成数据模型转换XSD脚本。
3.如权利要求2所述的基于XSLT和XSD的代码自动生成方法,其特征在于,所述在XSD文件中定义模型名称、模型类型和模型成员信息,包括:
在XSD文件中定义模型名称中的数据模型名称、功能名称、通信层模型名称、内存模型名称和所述持久化模型名称;
在XSD文件中定义模型类型中的公共模型、通信层模型和持久化模型;
在XSD文件中定义模型成员信息中的成员名称、界面多语言名称、成员类型名称和界面设置信息。
4.如权利要求2所述的基于XSLT和XSD的代码自动生成方法,其特征在于,所述在所述XSD文件中定义模型转换关系,根据所述模型转换关系生成数据模型转换XSD脚本,包括:
在XSD文件的类型地图中根据当前模型的成员名称和待转换模型的成员名称确定模型类型名称;
获取所述模型类型名称对应的转换代码函数;
根据所述转换代码函数定义各成员的内存模型、远程过程调用RPC模型和持久化模型之间的模型转换关系;
根据所述模型转换关系生成数据模型转换XSD脚本。
5.如权利要求1所述的基于XSLT和XSD的代码自动生成方法,其特征在于,所述对所述持久化模型进行持久化,生成代码环境,包括:
根据所述复合型元素节点的名称生成持久化模型名称;
根据预设协议缓冲区将所述持久化模型和所述持久化模型名称进行持久化,生成代码环境。
6.如权利要求1所述的基于XSLT和XSD的代码自动生成方法,其特征在于,所述根据所述持久化模型对应的类型元素和要素元素生成代码环境元素,包括:
遍历每个要素元素和类型元素获取与所述持久化模型对应的目标要素和目标类型;
根据所述目标要素和所述目标类型生成代码环境元素。
7.如权利要求1所述的基于XSLT和XSD的代码自动生成方法,其特征在于,所述根据所述代码环境和所述代码环境元素生成XSLT脚本代码,包括:
在预设指定目录中定义XSL函数和XSL模板;
根据所述XSL函数、所述XSL模板和预设伪脚本代码结合所述代码环境和所述代码环境元素生成XSLT脚本代码。
8.如权利要求1-7中任一项所述的基于XSLT和XSD的代码自动生成方法,其特征在于,所述根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析处理,并执行解析处理后的XSD脚本,生成对应的语言代码,包括:
根据所述XSLT脚本代码对所述数据模型XSD脚本和所述数据模型转换XSD脚本进行解析,并根据预设功能添加功能性代码,生成处理后的XSD脚本;
根据预设执行工具执行所述处理后的XSD脚本,生成对应的语言代码。
9.一种基于XSLT和XSD的代码自动生成设备,其特征在于,所述基于XSLT和XSD的代码自动生成设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于XSLT和XSD的代码自动生成程序,所述基于XSLT和XSD的代码自动生成程序配置为实现如权利要求1至8中任一项所述的基于XSLT和XSD的代码自动生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010906969.0A CN112052012B (zh) | 2020-08-31 | 2020-08-31 | 基于xslt和xsd的代码自动生成方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010906969.0A CN112052012B (zh) | 2020-08-31 | 2020-08-31 | 基于xslt和xsd的代码自动生成方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112052012A CN112052012A (zh) | 2020-12-08 |
CN112052012B true CN112052012B (zh) | 2022-11-11 |
Family
ID=73606627
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010906969.0A Active CN112052012B (zh) | 2020-08-31 | 2020-08-31 | 基于xslt和xsd的代码自动生成方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112052012B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101004800A (zh) * | 2006-01-20 | 2007-07-25 | 中国科学院计算技术研究所 | 支持业务级多流程协同运行的模型转换方法 |
CN101169713A (zh) * | 2006-10-25 | 2008-04-30 | 中兴通讯股份有限公司 | 支持转换引擎与映射规则相分离的模型转换框架及其方法 |
CN101295246A (zh) * | 2008-05-28 | 2008-10-29 | 浙江大学 | 一种从UML模型转换至SmartC模型的转换方法 |
CN103383645A (zh) * | 2013-07-29 | 2013-11-06 | 北京邮电大学 | 代码生成方法及系统 |
CN104932905A (zh) * | 2015-07-14 | 2015-09-23 | 北京神舟航天软件技术有限公司 | 一种aadl到c语言的代码自动生成方法 |
CN108153522A (zh) * | 2017-12-25 | 2018-06-12 | 南京大学 | 基于模型转换由midcore生成Spark和Hadoop程序代码的方法 |
CN111258564A (zh) * | 2020-01-17 | 2020-06-09 | 通号万全信号设备有限公司 | 一种基于qt自动生成代码的方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7707569B2 (en) * | 2005-06-29 | 2010-04-27 | International Business Machines Corporation | Method and apparatus for customizing model to code transformations |
US20180121172A1 (en) * | 2014-12-19 | 2018-05-03 | Hewlett Packard Enterprise Development Lp | Specifying models of an architectural type |
JP7113765B2 (ja) * | 2019-01-30 | 2022-08-05 | 株式会社日立製作所 | コード管理システムおよびコード管理方法 |
-
2020
- 2020-08-31 CN CN202010906969.0A patent/CN112052012B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101004800A (zh) * | 2006-01-20 | 2007-07-25 | 中国科学院计算技术研究所 | 支持业务级多流程协同运行的模型转换方法 |
CN101169713A (zh) * | 2006-10-25 | 2008-04-30 | 中兴通讯股份有限公司 | 支持转换引擎与映射规则相分离的模型转换框架及其方法 |
CN101295246A (zh) * | 2008-05-28 | 2008-10-29 | 浙江大学 | 一种从UML模型转换至SmartC模型的转换方法 |
CN103383645A (zh) * | 2013-07-29 | 2013-11-06 | 北京邮电大学 | 代码生成方法及系统 |
CN104932905A (zh) * | 2015-07-14 | 2015-09-23 | 北京神舟航天软件技术有限公司 | 一种aadl到c语言的代码自动生成方法 |
CN108153522A (zh) * | 2017-12-25 | 2018-06-12 | 南京大学 | 基于模型转换由midcore生成Spark和Hadoop程序代码的方法 |
CN111258564A (zh) * | 2020-01-17 | 2020-06-09 | 通号万全信号设备有限公司 | 一种基于qt自动生成代码的方法及装置 |
Non-Patent Citations (2)
Title |
---|
Hibernat学习笔记之基础知识;FXBStudy;《https://blog.csdn.net/fanxiaobin577328725/article/details/64128427》;20130323;全文 * |
一种基于XSLT的系统配置设计方法;齐晓斌;《空军工程大学学报(自然科学版)》;20150630;第16卷(第3期);第92-95页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112052012A (zh) | 2020-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111241454B (zh) | 一种生成网页代码的方法、系统和装置 | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
US20040158820A1 (en) | System for generating an application framework and components | |
US20080046868A1 (en) | Method and system for template-based code generation | |
CN110955410B (zh) | 一种代码自动生成方法、装置、设备及介质 | |
CN111897553B (zh) | 一种项目系统搭建方法、装置、设备及可读存储介质 | |
CN111124379B (zh) | 页面生成方法、装置、电子设备及存储介质 | |
CN110727429B (zh) | 一种前端页面的生成方法、装置及设备 | |
CN111427583A (zh) | 组件的编译方法、装置和电子设备及计算机可读存储介质 | |
CN110674083A (zh) | 工作流迁移方法、装置、设备及计算机可读存储介质 | |
CN111736813A (zh) | Jpa代码的生成方法、装置、终端设备及存储介质 | |
CN112667287A (zh) | 规则文件的创建方法、装置、设备及计算机可读存储介质 | |
CN113901083A (zh) | 基于多解析器的异构数据源操作资源解析定位方法和设备 | |
CN110109671B (zh) | 一种webpack标签尺寸样式转换方法及装置 | |
CN110187886A (zh) | 一种文档网站生成方法及终端 | |
CN112052012B (zh) | 基于xslt和xsd的代码自动生成方法和设备 | |
US11604774B2 (en) | Method and apparatus of converting schema in deep learning framework, and computer storage medium | |
US20070050706A1 (en) | Method of xml transformation and presentation utilizing an application-specific parser | |
CN111151008B (zh) | 游戏运营数据的校验方法、装置、配置后台及介质 | |
CN113050935A (zh) | 生成混入对象的方法、装置、计算设备及计算机可读存储介质 | |
JPH07182179A (ja) | オブジェクト指向データベース管理装置 | |
JP2551935B2 (ja) | 図的言語処理方式 | |
CN112988164A (zh) | 文本转换方法、文本转换装置、文本转换设备及存储介质 | |
CN107070964B (zh) | 基于异构环境的远程通信打包方法及系统 | |
JPH09179738A (ja) | オブジェクト指向言語処理方法及び処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |