基于XML的数据生成工具开发方法与流程

文档序号:18642989发布日期:2019-09-11 23:47阅读:210来源:国知局
基于XML的数据生成工具开发方法与流程

本发明涉及配置数据初始化技术领域,确切地说涉及一种基于xml的数据生成工具开发方法。



背景技术:

在国内外铁路和城市轨道交通领域,大多数实时在线控制和/监控系统的正常运行,都需要预先完成配置数据的初始化工作,系统复杂程度越高,配置数据的量就越大,为实现对系统预制数据的初始化配置,在系统运行前,有大量的配置数据生成工作需要离线完成。

为保证数据准确、安全,配置数据的生成工作通常由数据配置工具完成。近年来,轨道交通领域快速发展,要求数据配置工具能够的快速开发,精确的生成安全、可靠的数据,而现有的数据配置工具多采用编码人员选择一门编程语言独立编码完成,配置工具之间存在大量重复编码问题,不能满足工具快速开发的要求,开发效率低。

在现有技术中,如公开号为cn102799709b,公开时间为2015年4月1日,名称为“基于xml的系统仿真试验环境构建与配置系统及方法”的中国发明专利文献,公开了一种基于xml的系统仿真试验环境构建与配置系统及方法,系统包括仿真试验配置器、性能参数编辑器、成员监视服务、数据访问服务、试验配置库、试验资源库和装备性能库。方法中,试验管理人员在总控台使用仿真试验配置器进行席位配置、模拟器工作参数配置、交互关系配置、指挥关系配置等;总控台广播发送初始化命令;各席位上的成员监视服务接收初始化命令,从数据库中下载并启动相应模拟器程序;模拟器启动时,通过数据访问服务,从装备性能数据库中读取自身运行所需要的性能参数,通过数据访问服务,从试验配置库中下载xml格式的配置文件并读取自身的运行参数;系统启动完毕,完成初始化工作,等待仿真试验的开始。

从功能上来说,数据配置工具就是将特定格式的输入数据经过指定规则的逻辑运算得到指定格式的输出数据,所处理和生成的数据的格式是多样的,独立开发数据配置工具的开发方式不能统一的适配不同格式的输入文件和输出文件,工具开发人员的不同可能带来工具质量的差异,不能满足轨道交通领域生产对数据配置工具所生成的数据的安全要求。



技术实现要素:

本发明的目的在于针对现有技术的问题,提出了一种基于xml配置的数据配置工具开发框架,该框架通过构建一个统一的数据配置工具开发平台,平台以xml脚本的形式对外提供编程接口,在xml脚本中,定义了一套可编程脚本语法,帮助开发人员快速精确的开发出安全的数据配置方法。

本发明的目的是通过以下技术方案实现的:

本发明公开了一种基于xml的数据生成工具开发方法,其特征在于,包括以下步骤:

可编程xml配置脚本录入,通过结构化的方式定义可编程xml配置脚本中的语法;

数据输入,通过输入适配器模块中指定的io适配器将输入文件数据读入到系统内部定义的数据结构模块中的输入型数据结构中,读取过程中io适配器对读取数据的合法性进行校验;输入型数据结构是数据结构模块中对输入数据抽象出的一个顶层父类,对于不同的输入格式数据,输入型数据结构对上一操作层提供统一的操作接口;例如,对于par输入文件、xml输入文件,取指定节点数据的接口都是child函数;

数据处理,脚本解析模块对可编程xml配置脚本进行语法解析并生成中间数据;数据结构模块将所述数据输入过程中输入的文件数据以及脚本解析模块产生的中间数据转化为统一的数据结构存储;系统进行扩展并在数据解析器模块中生成任务处理器,任务处理器调用脚本解析模块的解析结果中所包含的函数逻辑对数据结构模块转化后的中间数据和文件数据进行逻辑运算处理;ioc属性自动装配模块将所述中间数据的相应数据节点自动注入到任务处理器中的c#数据类的属性中,并将任务处理器运算完成后产生的数据注入到相应的中间数据节点中;

文件输出,文件输出模块将对可编程xml配置脚本解析过程中生成的中间数据以及所述数据解析模块的解析结果输出到指定格式文件中。

文件输出模块根据可编程xml配置脚本中输出文件的输出方式配置将上述生成的中间数据输出到指定格式的文本中。

所述可编程xml配置脚本中的语法,是将通过结构化定义xml配置脚本中的标签、属性、value属性值来定义的开发语法。

所述标签包括member、variable、oper、source、param、result、qualification、func、task、log等一些列标签;所述member、variable和oper用于中间数据生成和中间数据修改;所述func用于在可编程xml配置脚本中自定义函数的输入。

所述属性包括name、value、alias、default、tostyle、tocs、refill、style等;所述name、alias用于指定所述中间数据的变量名;所述default用于设置中间数据的默认值;所述value用于生成name指示的变量的值。

所述value属性值用于定义赋值操作、函数调用、函数指针引用、解析代理引用、中间数据值引用等类型。

所述可编程xml配置脚本录入,是以xml标签为单位、以树形结构录入的。

所述对可编程xml配置脚本进行语法解析,包括解析代理创建过程:以xml标签为单位,生成一个与xml录入的树形结构一致的解析代理,也就是说解析代理也是树形结构,层次关系与其对应的可编程xml配置脚本相同,解析代理时将按照树形结构递归解析。创建过程中将对可编程xml配置脚本进行语法校验,校验其是否满足平台设计的xml脚本语法,若不满足则报错,提示可编程xml配置脚本语法出错位置。

同样文件输出模块根据根据可编程xml配置脚本中输出文件的输出方式配置创建对应的输出代理,代理创建过程中将对输出方式配置进行语法校验,校验不通过将报错提示错误配置原因,然后将中间数据交由输出代理进行解析。以二进制文本输出为例,输出代理根据中间数据的树形结构自顶向下查找中间数据节点,并根据xml配置脚本中数据节点style属性配置将该节点转化style指定的数据类型,按照xml配置脚本中value属性指定的字节长度输出该中间节点数据。

所述数据处理中,还包括上下文运行环境创建的过程:上下文运行环境用于存储系统运行时某一时刻的整体状态,所述状态包括当前时刻输入适配器模块加载进系统的输入型数据、可编程xml配置脚本解析过程生成的中间数据、通过反射机制加载的数据解析模块中操作数据的方法函数类以及系统扩展出的任务处理器。运行时上下文环境由脚本解析模块的工厂方法负责创建,创建完成后将通过反射机制将数据解析模块中操作数据的方法函数类以及系统扩展出的任务处理器加载到运行时上下文环境。

所述数据处理,系统运行时上下文环境、解析代理以及输入适配器模块加载的输入型数据构成了数据处理的全部要素,所述脚本解析模块运行解析数据时,首先将所述输入型数据加载到运行时创建的上下文运行环境中,然后由解析代理负责解析所述上下文运行环境,解析代理是系统定义的xml语法的载体和执行者,解析时,解析代理按照上述语法的标签、属性、value属性值、下级子标签的顺序依次解析可编程xml配置脚本。

运行解析代理过程中若涉及到可编程xml配置脚本的调试,脚本调试模块会追踪用户鼠标位置,当鼠标位置指向了xml配置脚本中的中间数据节点名时,脚本调试模块将所识别出的中间数据节点路径封装成请求发送给运行时上下文环境,运行时上下文环境接收到请求后,解析出请求的中间数据节点路径,并从查询出中间数据节点值,将该值封装成回复消息发送给脚本调试模块,由脚本调试模块在xml配置脚本中显示查询节点的实时值。

所述数据处理,当xml配置脚本的标签为member或者variable时,解析代理将在运行时上下文环境中生成名为name属性值的中间数据节点,节点值按照value属性值规定的方式生成,当value属性值类型为赋值操作时,节点值即为value属性值;当value属性值类型为中间数据值引用类型时,解析代理对象将根据value属性值中指示的路径从运行时上下文环境中查找该路径下的变量,并将该变量值赋值给所述节点;当value属性值类型为函数调用类型时,解析代理对象将从运行时上下文环境中查找出value属性值中指示的方法函数对象,将当前解析代理对象的子标签代理以及运行时上下文环境传递给方法函数对象,由方法函数对象递归的解析出子标签代理的变量值作为方法函数对象的函数入参,然后方法函数对象根据解析出的函数入参解析和函数的设计逻辑计算出方法函数返回值,将返回值返回给当前解析代理对象,由解析代理对象生成名为name值为返回值的中间数据节点,member标签解析生成的中间数据节点将会作为全局变量保存在运行时上下文环境中,而variable标签解析生成的中间数据将作为局部变量保存在运行时上下文环境中,在当前解析代理对象的父代理解析完成时删除。当标签为oper时,value属性值的解析同member和variable,只是返回值将被丢弃,不存入运行时上下文环境中。当标签为task时,解析代理对象将从运行时上下文环境中查找出value属性值指定的任务处理器,并调用该任务处理器完成特定逻辑的中间数据节点生成。

所述任务处理器实现数据处理,通过可编程xml配置脚本的编写可以基于系统数据解析器模块中本地方法函数完成数据处理,当业务逻辑过于复杂时,可以通过扩展任务处理器来生成中间数据节点:

首先,使用tocs、tostyle、refill配置可编程xml配置脚本中任务处理器要使用到的中间数据节点;

然后通过类映射模块将被配置的中间数据节点自动生成对应的c#数据类,在所扩展的任务处理器中引用生成的c#数据类,并通过系统提供的initvalue特性指示运行时对该引用注入中间数据节点的路径,在task运行时,ioc属性自动装配模块将会自动将指定的中间数据节点值注入到该引用中,重写任务处理器的run方法,完成特定的逻辑数据处理逻辑;

最后,通过系统提供的refill特性将run方法处理结果数据注入回运行时上下文环境中指定的中间数据节点,在task运行时,ioc属性自动装配模块将会在run方法执行后自动扫描任务处理器中被refill修饰的字段,将字段值注入回运行时上下文环境中指定的中间数据节点。

这种基于xml的数据生成工具开发系统,包括用于接收输入数据的输入适配器模块、用于解析可编程xml配置脚本语法的脚本解析模块、用于逻辑运算的数据解析模块、用于将对可编程xml配置脚本解析过程中生成的中间数据以及所述数据解析模块的解析结果输出到指定格式文件中的文件输出模块、用于在xml配置脚本键入时进行提示的语法智能提示模块和用于在系统扩展时将上述中间数据自动映射为c#数据类的类映射模块以及用于调试xml脚本的脚本调试模块;所述输入适配器模块和文件输出模块之间还设置有用于以统一的数据结构存储由所述输入适配器模块加载的输入数据以及所述中间数据的数据结构模块,以及在系统扩展时将所述中间数据的相应数据节点自动注入到扩展出的任务处理器中的c#数据类的属性中和将任务处理器运算完成后产生的数据注入到相应的中间数据节点中的ioc属性自动装配模块。

所述输入适配器模块用于在文件输入端对不同格式的输入文件进行识别和读取并加载到数据结构模块中,所述输入文件的输入格式包括xml、par、ini、execl、csv中的一种或多种。

所述数据结构模块用于将输入适配器模块识别和读取的不同格式的输入文件封装成统一的数据结构格式,并针对不同格式的输入文件向上一操作层提供统一的操作接口。

所述数据结构模块将所述输入文件的数据划分为元数据和操作数据,所述元数据对c#数据类中的基础数据类型进行封装,使得不同类型的元数据之间可以合法的相互转化,并且在可编程xml配置脚本中呈现弱类型语言特征;元数据还将输入适配器模块加载的输入数据封装成为输入型数据结构,方便系统对输入数据的统一操作;所述操作数据是在对可编程xml配置脚本解析时产生中间数据的载体,操作数据采用树形结构存储中间数据。

所述可编程xml配置脚本是写入的,用于以自定义的语法编写具体数据生成工具的业务逻辑,该业务逻辑定义加载到数据结构模块的输入数据具体处理并得到中间数据的过程,并将中间数据输出到输出文件的输出方式;当数据生成工具的逻辑难以在xml配置脚本中实现时,本开发系统提供任务处理器的方式支持系统扩展,将该逻辑转移到后台继承自系统扩展接口commontask的c#代码中实现,xml脚本提供专有的挂载钩子标签将后台任务处理器c#代码衔接起来整体运行。

所述脚本解析模块用于解析可编程xml配置脚本的语法,并运行脚本、执行脚本语法操作,调用下一层操作的数据解析器模块对加载到数据结构模块的输入数据进行具体的数据协议运算、转换处理生成中间数据。

所述c#数据类的属性包括member、alias以及initvalue修饰的类属性;所述ioc属性自动装配模块对注入任务处理器中的特性member、alias以及initvalue修饰的类属性进行实例化,然后将指定的中间数据值自动的装配到该类的属性上,并在该类中的扩展任务处理完成后,ioc属性自动装配模块再将被注入特性refill修饰的类属性值自动装配到指定的中间数据节点上。

所述文件输出模块根据所述可编程xml配置脚本中定义的中间数据输出方式,将由所述脚本解析模块产生的中间数据输出到指定格式的文件中,所述指定格式包括二进制、txt文本、ini、par以及xml中的一种或者多种。

所述类映射模块用于依据上述xml脚本语法中定义的数据映射方式将可编程xml配置脚本中指定的中间数据节点在系统运行前自动转化为对应的c#数据类供系统扩展时生成的任务处理器使用。

所述语法智能提示模块用于编辑键入可编程xml配置脚本时对系统定义的xml语法进行关键词智能提示、用户输入追踪和数据解析器模块内置函数签名智能提示。

所述调试模块用于在系统运行时通过追踪指向的中间数据节点路径、申请访问内存中该数据节点的值、并将该数据节点的值显示在可编程xml配置脚本的输入前端来对可编程xml配置脚本进行调试。

还包括通用工具模块,所述通用工具模块包括系统的启动调用接口、通用数据操作方法模型、通用输入输出流操作类模型和系统异常追踪工具类模型。

还包括用于输出运行日志的运行日志输出模块。

与现有技术相比,本发明具有以下优点:

开发快速,在该方案中,通过统一的开发平台提供的可编程的配置脚本语法调用平台内部丰富的数据操作类库,可减少独立编码带来的代码重复,开发者可以快速的构建自己的应用,对于xml脚本难以实现的业务逻辑,平台也提供灵活且方便的c#扩展任务处理器扩展方式来进行处理,同时该处理方式屏蔽掉了对metafly底层数据结构的处理,开发者无学习底层数据结构的成本,降低了开发的难度。

数据精确处理,在该方案中,由于我们提供了已测试的数据操作库类供开发者调用,同时,统一的数据结构封装以及格式化的输出数据操作,屏蔽掉了独立开发中独立编码带来的数据计算误差。

安全输出,在该方案中,采用平台化的开发方式,有效地避免了独立编码中,编码人员的素质差异带来的编码质量问题;配置化的数据输出方式,也避免了独立编码带来的风险,提高了工具开发的质量安全。

附图说明

本发明的前述和下文具体描述在结合以下附图阅读时变得更清楚,其中:

图1为本发明开发方法一种优选方案的逻辑示意图;

图2为本发明开发方法对应系统一种优选方案的结构示意图。

具体实施方式

下面通过几个具体的实施例来进一步说明实现本发明目的技术方案,需要说明的是,本发明要求保护的技术方案包括但不限于以下实施例。

实施例1

作为本发明一种最基本的实施方案,本实施例公开了一种基于xml的数据生成工具开发方法,包括以下步骤:

可编程xml配置脚本录入,通过结构化的方式定义可编程xml配置脚本中的语法;

数据输入,通过输入适配器模块中指定的io适配器将输入文件数据读入到系统内部定义的数据结构模块中的输入型数据结构中,读取过程中io适配器对读取数据的合法性进行校验;输入型数据结构是数据结构模块中对输入数据抽象出的一个顶层父类,对于不同的输入格式数据,输入型数据结构对上一操作层提供统一的操作接口;例如,对于par输入文件、xml输入文件,取指定节点数据的接口都是child函数;

数据处理,脚本解析模块对可编程xml配置脚本进行语法解析并生成中间数据;数据结构模块将所述数据输入过程中输入的文件数据以及脚本解析模块产生的中间数据转化为统一的数据结构存储;系统进行扩展并在数据解析器模块中生成任务处理器,任务处理器调用脚本解析模块的解析结果中所包含的函数逻辑对数据结构模块转化后的中间数据和文件数据进行逻辑运算处理;ioc属性自动装配模块将所述中间数据的相应数据节点自动注入到任务处理器中的c#数据类的属性中,并将任务处理器运算完成后产生的数据注入到相应的中间数据节点中;

文件输出,文件输出模块将对可编程xml配置脚本解析过程中生成的中间数据以及所述数据解析模块的解析结果输出到指定格式文件中。

在该方案中,通过统一的开发平台提供的可编程的配置脚本语法调用平台内部丰富的数据操作类库,可减少独立编码带来的代码重复,开发者可以快速的构建自己的应用,对于xml脚本难以实现的业务逻辑,平台也提供灵活且方便的c#扩展任务处理器扩展方式来进行处理,同时该处理方式屏蔽掉了对metafly底层数据结构的处理,开发者无学习底层数据结构的成本,降低了开发的难度。

在该方案中,由于我们提供了已测试的数据操作库类供开发者调用,同时,统一的数据结构封装以及格式化的输出数据操作,屏蔽掉了独立开发中独立编码带来的数据计算误差。

在该方案中,采用平台化的开发方式,有效地避免了独立编码中,编码人员的素质差异带来的编码质量问题;配置化的数据输出方式,也避免了独立编码带来的风险,提高了工具开发的质量安全。

实施例2

作为本发明一种优选地实施方案,在实施例1的基础上,本实施例公开了一种基于xml的数据生成工具开发方法,

如图2,可编程xml配置脚本中的语法定义,将通过结构化的定义xml脚本中的标签、属性、value属性值来定义数据生成工具的开发语法。方法定义的标签有:member、variable、oper、source、param、result、qualification、func、task、log等一些列标签,member、variable和oper用于中间数据生成和中间数据修改,func用于在可编程xml配置脚本中自定义函数。方法定义的属性有:name、value、alias、default、tostyle、tocs、refill、style等,name、alias用于指定中间数据的变量名,default用于设置中间数据的默认值,value用于生成name指示的变量的值。value属性值定义为:赋值操作、函数调用、函数指针引用、解析代理引用、中间数据值引用等类型。

数据输入,通过输入适配器模块中指定的io适配器将输入文件数据读入到系统内部定义的数据结构模块中的输入型数据结构中,读取过程中io适配器对读取数据的合法性进行校验。输入型数据结构是数据结构模块中对输入数据抽象出的一个顶层父类,对于不同的输入格式数据,输入型数据结构对上层提供统一的操作接口;例如,对于par输入文件、xml输入文件,取指定节点数据的接口都是child函数;

创建平台运行时上下文环境,运行时上下文环境用于存储系统运行时某一时刻的整体状态,所述状态包括:当前时刻输入适配器模块加载进系统的输入型数据、xml脚本解析生成的中间数据、通过反射机制加载的数据解析模块中操作数据的方法函数类以及系统扩展出的任务处理器。运行时上下文环境由xml规则脚本解析模块的工厂方法负责创建,创建完成后将通过反射机制将数据解析模块中操作数据的方法函数类以及系统扩展出的任务处理器加载到运行时上下文环境。

创建可编程xml配置脚本的解析代理对象,可编程xml配置脚本本身存储的只是文本信息,解析代理对象将文本信息对应映射为具有具体含义并且能够被运行的xml语法载体。解析代理对象由xml规则脚本解析模块负责创建,创建方式为:以xml标签为单位,生成一个与xml树形结构一致的解析代理对象,也就是说解析代理对象也是树形结构,层次关系同与其对应的可编程xml配置脚本,解析代理对象时将按照树形结构递归解析。创建过程中将对可编程xml配置脚本进行语法校验,校验其是否满足平台设计的xml脚本语法,若不满足则报错,提示可编程xml配置脚本语法出错位置。

运行解析代理对象,运行时上下文环境、解析代理对象以及输入适配器模块加载的输入型数据构成了数据处理的全部要素。xml规则脚本解析模块运行解析数据时,首先将输入型数据加载到运行时上下文环境中,然后由解析代理对象负责解析运行时上下文环境,解析代理对象是系统定义的xml语法的载体和执行者,解析时,解析代理对象按照上述语法的标签、属性、value属性值、下级子标签的顺序依次解析可编程xml配置脚本。

数据处理,当标签为member或者variable时,解析当前解析代理将在运行时上下文环境中生成名为name属性值的中间数据节点,节点值按照value属性值规定的方式生成,当value属性值类型为赋值操作时,节点值即为value属性值;当value属性值类型为中间数据值引用类型时,解析代理对象将根据value属性值中指示的路径从运行时上下文环境中查找该路径下的变量,并将该变量值赋值给所述节点;当value属性值类型为函数调用类型时,解析代理对象将从运行时上下文环境中查找出value属性值中指示的方法函数对象,将当前解析代理对象的子标签代理以及运行时上下文环境传递给方法函数对象,由方法函数对象递归的解析出子标签代理的变量值作为方法函数对象的函数入参,然后方法函数对象根据解析出的函数入参解析和函数的设计逻辑计算出方法函数返回值,将返回值返回给当前解析代理对象,由解析代理对象生成名为name值为返回值的中间数据节点,member标签解析生成的中间数据节点将会作为全局变量保存在运行时上下文环境中,而variable标签解析生成的中间数据将作为局部变量保存在运行时上下文环境中,在当前解析代理对象的父代理解析完成时删除。当标签为oper时,value属性值的解析同member和variable,只是返回值将被丢弃,不存入运行时上下文环境中。当标签为task时,解析代理对象将从运行时上下文环境中查找出value属性值指定的任务处理器,并调用该任务处理器完成特定逻辑的中间数据节点生成。

任务处理器实现数据处理,通过可编程xml配置脚本的编写可以基于系统数据解析器模块中本地方法函数完成数据处理,当业务逻辑过于复杂时,可以通过扩展任务处理器来生成中间数据节点。首先,使用tocs、tostyle、refill配置可编程xml配置脚本中任务处理器要使用到的中间数据节点,然后通过c#类映射模块将被配置的中间数据节点自动生成对应的c#数据类,在所扩展的任务处理器中引用生成的c#数据类,并通过系统提供的initvalue特性指示运行时对该引用注入中间数据节点的路径,在task运行时,ioc属性自动装配模块将会自动将指定的中间数据节点值注入到该引用中,重写任务处理器的run方法,完成特定的逻辑数据处理逻辑,最后,通过系统提供的refill特性将run方法处理结果数据注入回运行时上下文环境中指定的中间数据节点,在task运行时,ioc属性自动装配模块将会在run方法执行后自动扫描任务处理器中被refill修饰的字段,将字段值注入回运行时上下文环境中指定的中间数据节点。

运行解析代理对象过程中若涉及到可编程xml配置脚本的调试,xml脚本调试模块会追踪用户鼠标位置,当鼠标位置指向了xml配置脚本中的中间数据节点名时,xml脚本调试模块将所识别出的中间数据节点路径封装成请求发送给运行时上下文环境,运行时上下文环境接收到请求后,解析出请求的中间数据节点路径,并从查询出中间数据节点值,将该值封装成回复消息发送给xml脚本调试模块,由xml脚本调试模块在xml配置脚本中显示查询节点的实时值。

数据的文本化输出,文件输出模块根据可编程xml配置脚本中输出文件的输出方式配置将上述生成的中间数据输出到指定格式的文本中。同样文件输出模块根据根据可编程xml配置脚本中输出文件的输出方式配置创建对应的输出代理,代理创建过程中将对输出方式配置进行语法校验,校验不通过将报错提示错误配置原因,然后将中间数据交由输出代理进行解析。以二进制文本输出为例,输出代理根据中间数据的树形结构自顶向下查找中间数据节点,并根据xml配置脚本中数据节点style属性配置将该节点转化style指定的数据类型,按照xml配置脚本中value属性指定的字节长度输出该中间节点数据。

对应的,如图2所示,这种方法对应的系统包括可编程xml配置脚本、输入适配器模块、数据结构模块、通用工具模块、数据解析模块、ioc属性自动装配模块、脚本解析模块、文件输出模块、类映射模块、语法智能提示模块、脚本调试模块和运行日志输出模块。

可编程xml配置脚本被定义为平台开放给开发者的调用接口,用于配置工具具体的业务逻辑。该语法定义了利用xml的树形结构,定义了脚本的递归解析方式,同时,利用对xml不同标签和属性的定义,模拟了局部变量、全局变量、数据引用、自定义函数和变量作用域等概念,平台负责按照其所模拟的概念解析标签和属性。

输入适配器模块主要负责不同格式的输入文件io读取,目前输入适配器模块适配了xml、par、ini、execl、csv等主要格式输入数据。

数据结构模块用于统一的数据格式,不同格式的输入文件封装成统一的数据格式,并针对不同格式的输入数据向上层提供统一的操作接口。

通用工具模块,即工具类等,负责对分层架构下各层模块处理异常的统一追踪以及一些通用的工具类等。

数据解析模块,即数据操作类库,负责处理具体业务逻辑运算。

ioc属性自动装配模块负责扩展任务处理器时,属性的自动注入和任务处理器属性自动回填到xml数据节点。

脚本解析模块负责解析xml语法编写的业务逻辑脚本的解释。

文件输出模块负责将xml脚本解析生成的中间数据输出到指定格式的文件中,目前export适配了二进制、文本、ini、par以及xml等主要输出格式。

运行日志输出模块用于输出运行日志。

类映射模块负责将xml数据节点自动映射到c#数据类上;语法智能提示模块负责xml编写时的自动补全和语法提示;脚本调试模块负责xml脚本的调试。

可编程xml脚本语法,被定义为平台开放给开发者的调用接口,用于配置工具具体的业务逻辑。该语法定义了利用xml的树形结构,定义了脚本的递归解析方式,同时,利用对xml不同标签和属性的定义,模拟了局部变量、全局变量、数据引用、自定义函数和变量作用域等概念,平台负责按照其所模拟的概念解析标签和属性。

不同格式的输入数据统一适配。平台使用输入数据适配器模块将轨道交通领域中数据配置用到的主要输入文件格式加载到统一的数据结构中,针对不同格式的输入数据对上一操作层提供统一的操作接口。

任务处理器扩展方法。平台提供插件类映射模块将前端中间数据节点翻译成等价的c#数据类,然后由平台的自动装配模块实现对任务扩展器属性运行时的自动注入,开发者可以通过该c#数据类方便的索引到前端数据节点数据,该过程无需开发者手动对系统内置数据结构进行拆箱,降低了开发难度。对于任务处理器处理完成的数据,系统可通过[refill]注解的方式,自动装填到前端xml数据节点中去。系统提供的注解有[initvalue(path)]、[member(path)]、[alias(path)]用来实现对任务处理器的属性注入,他们的区别在于initvalue必须有xml脚本节点模板,所注入的属性是经过拆箱的,member和alias可以没有模板,注入的属性支持系统原生的数据结构,未经拆箱处理。例如,优选地,系统提供一个[exportfunc(funcname)]注解,方便的将用户开发的任务处理器集成到平台,在xml脚本前端,通过<taskvalue=”funcname”/>标签调用.

可编程配置的数据统一输出。系统中输出适配模块提供轨道交通领域中主流输出数据格式的适配,通过xml配置输出部分逻辑,即所输出的数据节点格式,和输出所用的适配器,即可完成对数据的精准输出。

xml脚本的调试方式。xml脚本本身只是工具运行业务逻辑的载体,ide编译器不提供对自定义脚本的调试功能。系统提供调试的断点函数和vs调试插件,插件实现对鼠标定位节点的识别和路径重组,并发送数据请求到当前上下文,上下文的状态由断点函数控制,上下文返回申请节点数据值,再交由插件,插件负责前端实时显示。

开发系统如本技术方案所提供的开发方法,按照以下方式实现开发:

1.通过输入适配器模块中的指定io适配器将输入文件读入到平台内部定义的输入数据结构中,输入数据结构是输入数据抽象出的一个顶层父类,对于不同的输入格式数据,输入数据结构对上层提供统一的操作接口。例如,对于par输入文件、xml输入文件,取指定节点数据的接口都是child函数。

2.创建平台上下文运行环境实例,该过程通过反射机制将数据解析器模块中的数据操作函数库类,以及当前工具项目中c#扩展的任务管理器以延迟实例化加载技术加载到到上下文环境中,供运行时调用。延迟实例化加载的库类对象仅在运行时调用到对应的处理库类时才创建库类对象。

3.根据xml脚本创建节点解析代理的实例,解析代理是对xml脚本中标签节点的一一映射。该过程首先对xml脚本进行语法校验,只有语法校验通过以后,才将对脚本节点映射到解析代理树上,否则报错,提示开发人员,语法错误的类型以及出错的节点内容。

4.解析xml脚本代理。输入数据、上下文环境和规则代理构成了规则解析的全部要素。运行解析时,首先将输入数据压入上下文环境,然后根据上下文环境信息委托给当前代理中持有的解释参数定义信息(对应xml标签级)的具体实例解析,解释参数定义信息再将上下文环境委托给其持有的value属性映射生成的参数值信息实体解析。参数值信息实体根据style的不同可划分为:参数引用、函数处理、函数委托、xml脚本引用、值解析、和lambda表达式等具体的解析行为。如以函数处理为例:当value属性值为func风格时,当前参数值信息实体首先会从上下文中查找出func指定的库类函数实体,并将当前代理对象和上下文环境委托给函数实体处理。虽然不同的函数定义了不同的数据处理方式,但是可整体抽象认为,函数即是对传入函数的参数的具体运算处理过程,而函数参数又是当前代理的代理子节点递归解析结果的返回值,经过这样的递归解析,当前代理的调用函数解析的返回值又会根据代理对应的xml标签类型决定是否将返回值压入上下文环境,或者以全局变量的形式,还是以局部变量的形式将返回值压入。当前value所在标签若为member,则将value返回值压入上下文数据池持久区;所在标签若为variable,则将返回值压入上下文数据池瞬时区;若为oper,则丢弃返回值。xml脚本中数据采用弱类型设计,当调用具体函数处理数据时,才将解析出的参数统一的转化为高精度的数据类型参与具体运算。

5.为应对极为复杂的业务场景,平台提供任务处理器的扩展方式,轻松地支持使用c#编写复杂地业务逻辑。系统的类生成器插件可以xml脚本中定义并生成的数据节点为模板自动生成对应c#数据类,该数据类的叶子节点属性是经过拆箱的,并可以通过索引器和属性的组合方便索引到。解析过程中若涉及到c#编写的任务处理器的处理,系统将按照如下方式解析:首先,由自动装配模块将系统[initvalue(path)]中path指定数据指定注入到initvalue指定的已拆箱属性节点中,然后运行当前任务处理器中重写的run方法,计算业务逻辑。最后,再将处理器中[refill(path)]修饰的属性值回填到上下文数据池中path指定的节点上。

6.解析过程中若涉及到xml脚本的调试,脚本调试模块会将所识别出的鼠标指向的xml节点路径封装成请求发送给系统,系统接收到请求后,解包,并从上下文数据池中查询出节点值发送给插件显示到xml配置脚本中。

7.解析xml脚本输出部分配置。系统将输出xml配置脚本标签节点一一映射到文件输出模块的对象实例上,这个过程中,会对该部分脚本配置语法进行校验,仅当校验成功,才会生成文件输出模块实例,否则报错,提示开发人员配置错误位置。文件输出模块实例是输出部分的代理,它负责将中间数据翻译到指定格式的输出文件中。对于规则部分解析生成的中间数据节点,系统可以快速准确的通过配置的方式将数据结构化的输出到指定格式的输出文件中。xml输出部分配置和中间数据结构存在树结构的对应映射关系且xml前端为弱类型语法设计,因此,开发者需要指明当前输出节点的节点名,当前节点的输出风格,以及当前节点的字节长度等即可由输出适配模块精确地将中间数据转化为指定数据类型、格式、占用字节长度格式化输出,系统的输出格式(style)分为复合型和简单型,复合型为简单型的组合,简单型是不可再分的原子类型。解析文件输出模块实例时,根据当前代理的name从上下文中取出指定数据节点,然后,将该数据转化为输出格式(style)指定的类型数据,若输出格式(style)是复合类型,则递归解析下一级节点,直到解析到最底层的简单类型;若输出格式(style)为简单型,例如二进制输出long类型,则将节点数据拆箱成long类型,并以value指定的字节长度输出到二进制文件中。

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