基于泛型编程和反射机制的IEC61968标准文档生成系统及方法与流程

文档序号:13215800阅读:147来源:国知局
技术领域本发明涉及一种电力系统及其自动化的生成系统及方法,具体涉及一种基于泛型编程和反射机制的IEC61968标准文档生成系统及方法。

背景技术:
对于IEC61968标准的CIM模型及XMLSchema:目前,大部分配电网企业使用IEC61968所定义的配电网通用信息模型(DistributionCommonInformationModel,以下简称CIM模型),描述配电网的主要对象,尤其是和电网运行有关的数据。IEC61968所制定的CIM模型,是用面向对象技术定义的类(Class)的集合。每一个配电网中的设备、行为,事件,原则上都可以用CIM模型中的一个或若干个类的实例来表述。而配电网中的业务,可以通过多个类的实例的顺序组合表达。虽然IEC61968尚在制定和完善过程中,此标准已成为配电企业信息集成公认的规范。IEC61968所关注的是配电网业务应用间的集成,希望通过此标准规范各个应用间交换数据的方式,方法。由于配电网在信息化过程中,缺乏统一的规划和管理,各个业务部门开发的应用系统采用不同的专有数据格式及数据接口,阻碍了各个应用系统的互联互通。IEC61968标准为促进各个配电应用系统的集成,在IEC61970标准的CIM模型的基础上,定义了配电业务数据的统一模型,并推荐使用XMLSchema标准(http://www.w3.org/2001/XMLSchema)作为规范数据交换格式的标准。因此,符合IEC61968标准的交换数据文档应该是以某个XMLSchema文档为约束的XML文档,其中的语义内容是由IEC61968标准所定义的CIM模型,即面向对象的类的实例来表达。配电业务系统之间交换的数据要以基于IEC61968的XMLSchema为格式约束,才能符合IEC61968标准的要求。XMLSchema一般用后缀为“.xsd”的文件进行存储,因此XMLSchema通常也被称为Xsd,在本文中,XMLSchema和Xsd两个术语将不加区别的等同使用。依此标准,配电网的原有业务系统须将原有的数据接口改造为可输出或接受以XMLSchema文档为约束的XML文档。在本案中,将讨论将配电网数据转换为以某个XMLSchema文档为约束的XML文档的通用方法。此问题可总结为:依据现有的业务数据生成遵从某个IEC61968标准子集的XMLSchema(Xsd)的XML。具体到IT技术上,即是由Xsd(XMLschema)文件生成具体的XML的问题,可也定义为:由一个Xsd(其中可包含对其他Xsd文件的引用),及原有业务数据(可包括关系型数据库中关系数据,xml文件,xml数据库中记录及其他类型数据),生成一个符合Xsd约束的合法xml文件。Xsd文件实际上是一种规则的集合,而符合这种规则的XML实例文件可以有无穷多个,根据Xsd文件生成XML相当于实现的映射关系。显然要实现这种映射,必须辅以实际的数据和具体的生成算法。形象的说,IEC61968标准定义的CIM模型中的类可看作工业生产的标准部件,如轴承,曲轴等;而符合IEC61968规范的某个Xsd,可看作一件产品的装配图;而生成XML的过程,就是产品组装的过程。目前在业界中使用Xsd生成XML的方法,在Java编程技术中有XMLbeans和jaxb技术,这两项技术的基本思想都是将Xsd转换为Java的类,并使用此代码生成XML文件,这种方法的局限性在于对每一个Xsd都要生成Java源代码,这种方式形成了Java源代码与Xsd的绑定,一旦Xsd发生变化,Java代码就要发生相应改变,并重新编译才能工作;程序被绑定在某几个固定的Java类中,难以适应需处理较多Xsd及Xsd经常发生变化的情况。C#及其他编程语言的情况与Java类似。而在配电业务系统可能使用的基于IEC61968的Xsd会相当多,如配电自动化系统所使用的Xsd可达上百个,而且会因为业务安排的变化而变化,显然使用此类方法难以处理配电业务中的XML生成问题。对于泛型编程:Java,C++,C#是最广泛使用的编程语言,这些语言对数据类型的严格检查,导致同一算法需针对不同数据类型开发不同的函数(如排序算法,需针对整形,浮点型,字符型等数据类型开发不同函数),增加了编程的复杂性。泛型编程技术则允许数据类型作为一种参数传递到函数中,这使得使用同一函数处理多个数据类型的相同算法成为可能。泛型编程以迭代器(Iterators)和容器(Containers)为基础,是一种泛型算法(GenericAlgorithms)技术,容器可容纳类型参数指定的数据类型的集合,使这些泛型算法有东西可以操作。其中的泛型算法(algorithms)、泛型迭代器(iterators)、泛型容器(containers)以及函数对象(functionobjects)等技术不仅使多个数据类型可共享通用函数,而且使程序结构更加简洁,合理,直观易懂。IEC61968CIM模型中的类(Class)数以千计,大多数类派生自一个基本类(IdentifiedObject),而且都有相似的结构和属性,在业务逻辑中的地位和作用相似度很高,因此很适合用泛型编程方式通用化处理。对于JAVA反射机制:Java反射机制(Reflection)是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或调用其methods。反射机制的动态加载,探知、使用编译期间完全未知的Class本专利有重要作用,程序在处理Xsd时,可无须在编译时了解Xsd的具体结构和组成,就能在运行时动态生成Xsd中的元素所对应的CIM模型类,并设置模型类的属性,调用模型类的函数,使XML生成程序的编写摆脱了对Xsd结构,组成的依赖。目前,符合IEC61968标准的XML文档是配电业务系统之间规范数据交换的必要条件。而传统的生成XML的方法不具有通用性,需单独为各个配电业务系统开发相应的生成程序,而且难以应对业务流程改变带来的Xsd的变化。

技术实现要素:
为解决上述现有技术中的不足,本发明的目的是提供一种基于泛型编程和反射机制的IEC61968标准文档生成系统及方法,本发明通用且适应多个Xsd及Xsd变化的XML生成程序将促进配电业务系统之间的集成,降低配电业务整合的成本,提高配电业务的工作效率。本发明的目的是采用下述技术方案实现的:本发明提供一种基于泛型编程和反射机制的IEC61968标准文档生成系统,其改进之处在于,所述IEC61968标准文档生成系统包括Xsd处理模块、配置文件处理模块、XML生成模块、数据查询模块和XML文档输出模块;所述Xsd处理模块分别与配置文件处理模块和XML文档输出模块传递数据;所述XML生成模块与配置文件处理模块、数据查询模块和XML文档输出模块传递数据。进一步地,所述Xsd处理模块用于解析Xsd文件结构,获得Xsd命名空间,简单数据类型,用于XML根元素的复杂数据类型,以及此xsd文件所引用的其他Xsd文件;所述配置文件处理模块用于读取、解析配置文件,获得要生成的XML文件的根元素名称,CIM类与数据类型的映射关系,对复杂数据类型生成元素的条件限定(包括此数据类型的子元素生成的数目限制,复杂数据类型元素的嵌套层数限制);所述XML生成模块的功能是根据Xsd处理模块获得的命名空间,数据类型,及配置文件处理模块的获得的配置信息,首先生成根元素,随后递归生成根元素的多个子元素,直至生成符合Xsd所规范的顺序结构的XML结构体;所述数据查询模块根据当前的数据类型以及对应的CIM类,获得当前处理元素的实际数据记录(特定元素可从配置文件中获得,如根元素);所述XML文档输出模块负责将XML生成模块生成的数据结构体中数据依此写入XML文档对象,并输出为文件。一种基于泛型编程和反射机制的IEC61968标准文档通用生成系统的生成方法,其改进之处在于,所述方法包括下述步骤:(1)根据Xsd文件集合,配置XML生成参数;(2)读取配置,获得要生成的XML文件的根元素名称,并从Xsd文件集合中获得根元素的定义;(3)针对当前处理的根元素名称,获得相应的IEC61968CIM模型类的名称,使用JAVA语言的反射机制生成CIM模型类的实例;(4)通过数据查询接口获得当前处理元素的实际数据记录,并依据实际数据记录的数据设置步骤(3)生成的CIM模型类的实例属性;(5)如果当前生成元素是由其他更基本的元素派生出来,即面向对象技术中的继承关系,则将此基本元素设定为当前生成元素,并执行(3)-(4)步骤;(6)如果当前元素有sequence子元素,生成sequence子元素中的CIM模型元素对应的模型类实例;(7)使用泛型编程容器容纳实例,并遍历每一个上一步骤形成的模型类实例,对每个实例执行步骤(4)-(6);(8)直到所有元素被遍历,并没有新元素生成时,在内存中形成以CIM类实例为基础部件的且以Xsd所规范的顺序结构的数据结构体;(9)生成XML文档对象,依据上一步骤所生成的数据结构体,将数据结构体中数据依此写入XML文档对象,并输出为文件。进一步地,所述步骤(1)中,依据业务需求及实际情况(如现场数据完备情况或数据质量等)生成配置文件,对Xsd文件存储位置、业务数据库的访问方式、业务文件的存储位置、数据匹配方式以及Xsd元素映射参数进行配置,配置文件处理模块读取配置文件,并在内存中生成配置参数表。进一步地,所述步骤(2)中,Xsd处理模块对Xsd文件进行解析,依据Xsd元素映射参数生成Xsd元素映射表,所述Xsd元素映射表中定义了Xsd元素与相应的CIM类的一一映射关系;XML生成模块读取配置参数表,找到要生成的XML的根元素,并设定为当前生成元素。进一步地,所述步骤(3)中,XML生成模块从Xsd元素映射表中查找当前生成元素所对应的CIM类,使用映射机制生成CIM类实例。进一步地,所述步骤(4)中,通过数据查询模块的数据查询接口查询CIM类实例对应的业务数据,并根据填写当前CIM类实例的实例属性,包括CIM类的通用属性,包括名称属性(name)和标识符属性(mrid),以及CIM类的特有属性,如线路类的长度属性和开关类的容量属性。进一步地,所述步骤(9)中,调用XML文档输出模块,依据所有CIM类所形成的数据结构体,生成XML文档,并输出为XML文件。与最接近的现有技术相比,本发明提供的技术方案具有的优异效果是:本发明是在配电网IEC61968标准基础上,使用泛型编程和反射机制技术,生成符合IEC61968标准的XML文档通用方法。使用此方法可根据某个给定的基于IEC61968标准某一子集的XMLSchema文档,生成符合IEC61968标准的XML文档,以便配电网各个应用间使用此XML进行数据交换和互操作。使用此方法可避免为配电个应用系统重复开发文档转换程序,统一数据交换文档格式,降低配电各个应用集成的实施难度及实施成本,推进配电信息化的建设,提高配电信息化工作效率和正确性,从而提高配电网运行水平。附图说明图1是本发明提供的XML生成程序模块图。具体实施方式下面结合附图对本发明的具体实施方式作进一步的详细说明。以下描述和附图充分地示出本发明的具体实施方案,以使本领域的技术人员能够实践它们。其他实施方案可以包括结构的、逻辑的、电气的、过程的以及其他的改变。实施例仅代表可能的变化。除非明确要求,否则单独的组件和功能是可选的,并且操作的顺序可以变化。一些实施方案的部分和特征可以被包括在或替换其他实施方案的部分和特征。本发明的实施方案的范围包括权利要求书的整个范围,以及权利要求书的所有可获得的等同物。在本文中,本发明的这些实施方案可以被单独地或总地用术语“发明”来表示,这仅仅是为了方便,并且如果事实上公开了超过一个的发明,不是要自动地限制该应用的范围为任何单个发明或发明构思。本发明提供的基于泛型编程和反射机制的IEC61968标准文档通用生成系统结构示意图如图1所示,包括Xsd处理模块、配置文件处理模块、XML生成模块、数据查询模块和XML文档输出模块;所述Xsd处理模块分别与配置文件处理模块和XML文档输出模块传递数据;所述XML生成模块与配置文件处理模块、数据查询模块和XML文档输出模块传递数据。所述Xsd处理模块用于解析Xsd文件结构,获得Xsd命名空间,简单数据类型,用于XML根元素的复杂数据类型,以及此xsd文件所引用的其他Xsd文件;所述配置文件处理模块用于读取、解析配置文件,获得要生成的XML文件的根元素名称,CIM类与数据类型的映射关系,对复杂数据类型生成元素的条件限定,包括此数据类型的子元素生成的数目限制,复杂数据类型元素的嵌套层数限制;所述XML生成模块的功能是根据Xsd处理模块获得的命名空间,数据类型,及配置文件处理模块的获得的配置信息,首先生成根元素,随后递归生成根元素的多个子元素,直至生成符合Xsd所规范的顺序结构的XML结构体;所述数据查询模块根据当前的数据类型以及对应的CIM类,获得当前处理元素的实际数据记录;所述XML文档输出模块负责将XML生成模块生成的数据结构体中数据依此写入XML文档对象,并输出为文件。本发明的应用场景是,所应用的配电网业务系统需要将数据转换为符合IEC61968标准某一子集的XMLSchema的XML文档,以便与其他业务系统进行数据交换。本发明提供的基于泛型编程和反射机制的IEC61968标准文档通用生成方法,在配电网IEC61968标准基础上,使用泛型编程和反射机制技术,生成符合IEC61968标准的XML文档通用方法。使用此方法可根据某个给定的基于IEC61968标准某一子集的XMLSchema文档,生成符合IEC61968标准的XML文档,以便配电网各个应用间使用此XML进行数据交换和互操作。具体步骤如下:(1)根据Xsd文件集合,配置XML生成参数;依据业务需求及实际情况(如现场数据完备情况或数据质量等)生成配置文件,对Xsd文件存储位置,业务数据库的访问方式,业务文件的存储位置,数据匹配方式以及Xsd元素映射等参数进行配置,配置文件处理模块读取此配置文件,并在内存中生成配置参数表。(2)读取配置,获得要生成的XML文件的根元素名称,并从Xsd文件集合中获得此元素的定义;Xsd处理模块对Xsd文件进行解析,依据Xsd元素映射参数生成Xsd元素映射表,此表中定义了Xsd元素与相应的CIM类的一一映射关系;XML生成模块读取配置参数表,找到要生成的XML的根元素,并设定为当前生成元素。(3)针对当前处理的元素的名称,获得相应的IEC61968的CIM模型类的名称,使用JAVA语言的反射机制生成此CIM模型类的实例;(4)通过数据查询模块查询此实例对应的业务数据,并据此填写当前CIM类实例的各个属性。(5)如果当前生成元素是由其他更基本的元素派生(即面向对象技术中的继承关系)出来,则将此基本元素设定为当前生成元素,并执行4-5步骤。(6)如果此元素有sequence子元素,生成sequence子元素中的CIM模型元素对应的模型类实例;(7)使用泛型编程容器容纳这些sequence子元素,并使用4-6步骤遍历此容器内所有元素。使用泛型编程容器容纳这些实例,并遍历每一个实例,对每个实例执行4-6步骤;(8)直到Xsd内所有元素被遍历,并没有新元素生成时,在内存中形成了以CIM类实例为基础部件的,以Xsd所规范的顺序结构的数据结构体。(9)调用XML文档输出模块,依据所有CIM类所形成的数据结构体,生成XML文档,并输出为XML文件。本发明可避免为配电个应用系统重复开发文档转换程序,统一数据交换文档格式,降低配电各个应用集成的实施难度及实施成本,推进配电信息化的建设,提高配电信息化工作效率和正确性,从而提高配电网运行水平。以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员依然可以对本发明的具体实施方式进行修改或者等同替换,这些未脱离本发明精神和范围的任何修改或者等同替换,均在申请待批的本发明的权利要求保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1