CN112230929B - 一种cim模型的数据解析方法、装置及存储介质 - Google Patents
一种cim模型的数据解析方法、装置及存储介质 Download PDFInfo
- Publication number
- CN112230929B CN112230929B CN202011094885.8A CN202011094885A CN112230929B CN 112230929 B CN112230929 B CN 112230929B CN 202011094885 A CN202011094885 A CN 202011094885A CN 112230929 B CN112230929 B CN 112230929B
- Authority
- CN
- China
- Prior art keywords
- class
- hash table
- cim
- instance
- module
- 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
- 238000000034 method Methods 0.000 title claims abstract description 117
- 238000007405 data analysis Methods 0.000 title claims abstract description 23
- 238000004590 computer program Methods 0.000 claims description 21
- 238000010276 construction Methods 0.000 claims description 13
- 230000006399 behavior Effects 0.000 claims description 8
- 230000006870 function Effects 0.000 claims description 8
- 238000005192 partition Methods 0.000 claims description 4
- 238000004804 winding Methods 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
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/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种CIM模型的数据解析方法、装置和存储介质,包括:构建数据元类,数据元类中包括预设的数据属性和方法;逐行读取数据信息,根据正则表达式成对地对逐行读取的数据信息进行正则匹配,得到CIM模块;构建第一哈希表,以字符串为键将数据元类所构建的新类存储在第一哈希表中;构建第二哈希表,以字符串为键将实例哈希表存入第二哈希表中;实例哈希表以CIM模块对应的唯一编码字符串ID作为键将CIM模块对应生成的实例对象进行存储;遍历向量列表,对向量列表中的任一CIM模块,从逐行遍历CIM模块中的记录,生成CIM模块对应的类或对象并存储。本发明在适配电力***模型自身特有的需求的同时能够跟踪CIM模型扩展与调整。
Description
技术领域
本发明涉及电网设计技术领域,尤其涉及一种CIM模型的数据解析方法、装置及存储介质。
背景技术
在高度互联的现代数字化电网设计与运行中,电网各级调度与运行主体之间在面对同一个电力***拓扑模型时,需要统一协作,密切配合。国际电工委员会(InternationalElectrotechnical Commission,IEC)在国际通用标准IEC61970中提出了关于电网模型描述的公共信息模型(Common Information Model,CIM)对电网设备及拓扑建模提供了指导性的原则。在我国关于电网通用模型描述规范的国家标准中,上述原则同样适用。
CIM模型被广泛应用于电力***运行控制与调度***(Operation ControlSystem,OCS)中,通过对电力***中各类设备的远程监控与测量,该***能较为准确地对电力***运行的实时状态进行检测与操控。通过对CIM模型数据的解析与转换,获取到电力***实时准确的运行状态数据,有助于提升对实时电力***运行状态分析的效率和精确性。
现有技术中,对CIM模型数据的解析与转换的方法包括:使用Eclipse建模框架实现基于公共信息模型***的开发,对CIM模型的直接建模法。
本发明人在实施本发明的过程中发现,现有技术中存在以下技术问题:通用框架法能够适配于各种类型XML文件的解析,较好地跟踪未来可能的CIM模型扩展与调整,然而通用框架只能实现对数据的解析,无法较好地实现对类的各部分方法的自定义扩充与打包,难以适配电力***模型自身特有的需求;直接建模法自定义程度高,能较好地把类及所需的方法打包,然而无法较好地跟踪CIM模型扩展与调整,且需要大量逐类地编码以完成数据的解析。
发明内容
本发明实施例提供一种CIM模型的数据解析方法,能够在适配电力***模型自身特有的需求的同时能够跟踪CIM模型扩展与调整。
本发明实施例一提供一种CIM模型的数据解析方法,包括:
构建数据元类,所述数据元类中包括预设的数据属性和方法;
从XML文件中逐行读取数据信息,根据正则表达式成对地对逐行读取的所述数据信息进行正则匹配,得到CIM模块,并将所述CIM模块存入向量列表中;
构建第一哈希表,以字符串为键将所述数据元类所构建的新类存储在所述第一哈希表中,在初始状态时所述第一哈希表为空;
构建第二哈希表,以所述字符串为键将实例哈希表存入第二哈希表中;
所述实例哈希表以所述CIM模块对应的唯一编码字符串ID作为键将所述CIM模块对应生成的实例对象进行存储;
逐行遍历所述向量列表中任一所述CIM模块中的记录,生成并存储所述CIM模块对应的类或对象。
作为上述方案的改进,所述从XML文件中逐行读取数据信息,根据正则表达式成对地对逐行读取的所述数据信息进行正则匹配,得到CIM模块,并将所述CIM模块存入向量列表中,具体包括:
从XML文件中逐行读取所述数据信息,根据XML语法规范,以正则表达式p0="<cim.*rdf:ID.*>",以及p1="</cim.*>"成对地对逐行读取的数据信息进行正则匹配;
设与p0匹配命中的行为ri,与p1匹配命中的行为rj;则ri行至rj内容构成一个完整的CIM模块Mk,并将该模块存入向量列表M中;
其中,M=[M1,M2,…,Mk,…,Mn],Mk=[ri,ri+1,…,rj-1,rj]。
作为上述方案的改进,所述构建第一哈希表,以字符串为键将所述数据元类所构建的新类存储在所述第一哈希表中,在初始状态时所述第一哈希表为空,具体包括:
构建所述第一哈希表Cls_map,以字符串cls_name为键将所述数据元类所构建的新类some_class存储在所述第一哈希表Cls_map中,初始状态时Cls_map为空
其中,Cls_map<string cls_name,class some_class>。
作为上述方案的改进,所述构建第二哈希表,以所述字符串为键将实例哈希表存入第二哈希表中,具体包括:
构建所述第二哈希表Obj_map,以所述字符串cls_name为键将实例哈希表ID_map存入所述第二哈希表Obj_map中;所述第二哈希表Obj_map以所述CIM模块Mk对应的唯一编码字符串ID作为键将所述CIM模块Mk对应生成的实例对象some_object进行储存;
其中,Obj_map<stringcls_name,ID_map<string ID,Cls_map[cls_name]some_object>>。
作为上述方案的改进,所述构建数据元类,所述数据元类中包括预设的数据属性和方法,具体包括:构建数据元类mcs,所述数据元类mcs中预置以下属性与方法:
属性1:cls_name,记录当前生成类的名称;
方法1:instance_init,支持所生成类生成新的实例;
方法2:get_attr,支持所生成类所生成的实例获取本实例的属性;
方法3:attr_setter,支持所生成类所生成的实例对本实例的属性进行赋值;
方法4:attr_init,支持所生成类所生成的实例为本实例初始化新的属性;
方法5:has_attr,支持所生成类所生成的实例查找本实例是否含有某个属性;
方法6:is_single_bus_device,支持所生成类所生成的实例判断本实例是否是一个单一端口元件;
方法7:affiliate_substation_func_assign,支持所生成类所生成的实例返回本实例所从属的变电站信息;
方法8:nomination_voltage_func_assign,支持所生成类所生成的实例返回本实例所对应的电压等级和基准电压信息;
方法9:get_zone_func,支持所生成类所生成的实例返回本实例所属的区域信息;
方法10:get_area_func,支持所生成类所生成的实例返回本实例所属的分区信息。
作为上述方案的改进,所述遍历所述向量列表,对所述向量列表中的任一所述CIM模块,从逐行遍历所述CIM模块中的记录,生成所述CIM模块对应的类或对象并存储,具体包括:
遍历到所述向量列表的ri行时,执行如下步骤:
根据CIM模型描述的规则及p0与ri的匹配关系,从ri的第5个字符开始,至空格字符结束,提取出所述CIM模块Mk在XML中所规定的类别字段,记为module_type;从ri的子字符串"rdf:ID=“"后第1个字符开始,至ri行倒数第3个字符(含换行符"\n")结束,提取出模块Mk在XML中所指定的识别ID,记为module_id;
若module_type不存在于所述第一哈希表Cls_map的键中,则调用数据元类mcs构建module_type对应的类cls,令cls.cls_name=module_type,并以cls.cls_name作为键,将键值对<cls.cls_name,cls>存入所述第一哈希表Cls_map中;
若module_type已经存在于所述第一哈希表Cls_map的键中,则说明当前模块Mk所属类别cls已经由元类mcs建立;
调用类Cls_map[module_type]的初始化函数instance_init(即方法1)将所述CIM模块Mk实例化为Objk;
遍历ri+1至rj-1行时,执行如下步骤:
按照XML的语法规则,根据模块Mk中各行对当前实例的描述内容,调用类Cls_map[module_type]中由mcs构建的实例操作方法2至方法5,对实例Objk的各项属性进行初始化与赋值;
遍历到rj行时,执行如下步骤:
将键值对<module_id,Objk>存入所述实例哈希表ID_map中,同时更新所述第二哈希表Obj_map。
本发明实施例二对应提供了一种CIM模型的数据解析装置,包括:
元类构建单元,用于构建数据元类,所述数据元类中包括预设的数据属性和方法;
数据获取单元,用于从XML文件中逐行读取数据信息,根据正则表达式成对地对逐行读取的所述数据信息进行正则匹配,得到CIM模块,并将所述CIM模块存入向量列表中;
第一哈希表构建单元,用于构建第一哈希表,以字符串为键将所述数据元类所构建的新类存储在所述第一哈希表中,在初始状态时所述第一哈希表为空;
第二哈希表构建单元,用于构建第二哈希表,以所述字符串为键将实例哈希表存入第二哈希表中;
第一解析单元,用于将所述实例哈希表以所述CIM模块对应的唯一编码字符串ID作为键将所述CIM模块对应生成的实例对象进行存储;
第二解析单元,用于逐行遍历所述向量列表中任一所述CIM模块中的记录,生成并存储所述CIM模块对应的类或对象。
本发明实施例三对应提供了一种CIM模型的数据解析装置,包括:处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例一所述的一种CIM模型的数据解析方法。
本发明实施例四对应提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如本发明实施例一所述的一种CIM模型的数据解析方法。
本发明实施例提供的一种CIM模型的数据解析方法,具有如下有益效果:
基于Python元类的方法,在自定义开发与CIM模型解析之间进行了折中;仅有元类mcs及其方法需要预先编码创建,而CIM/XML中的所有类型均由元类动态创建,在CIM模型面临扩展与调整时,能够较好地进行跟踪;通过预先编码在步骤S101中增加新的预设的方法,可以实现对电力***模型特有方法的打包与自定义,扩大了CIM模型解析的适用范围;能够在适配电力***模型自身特有的需求的同时能够跟踪CIM模型扩展与调整。
附图说明
图1是本发明实施例一提供的一种CIM模型的数据解析方法的流程示意图。
图2是本发明实施例二提供的一种CIM模型的数据解析装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,是本发明实施例一提供的一种CIM模型的数据解析方法的流程示意图,包括:
S101、构建数据元类,所述数据元类中包括预设的数据属性和方法;
进一步地,所述构建数据元类,所述数据元类中包括预设的数据属性和方法,具体包括:构建数据元类mcs,所述数据元类mcs中预置以下属性与方法:
属性1:cls_name,记录当前生成类的名称;
方法1:instance_init,支持所生成类生成新的实例;
方法2:get_attr,支持所生成类所生成的实例获取本实例的属性;
方法3:attr_setter,支持所生成类所生成的实例对本实例的属性进行赋值;
方法4:attr_init,支持所生成类所生成的实例为本实例初始化新的属性;
方法5:has_attr,支持所生成类所生成的实例查找本实例是否含有某个属性;
方法6:is_single_bus_device,支持所生成类所生成的实例判断本实例是否是一个单一端口元件;
方法7:affiliate_substation_func_assign,支持所生成类所生成的实例返回本实例所从属的变电站信息;
方法8:nomination_voltage_func_assign,支持所生成类所生成的实例返回本实例所对应的电压等级和基准电压信息;
方法9:get_zone_func,支持所生成类所生成的实例返回本实例所属的区域信息;
方法10:get_area_func,支持所生成类所生成的实例返回本实例所属的分区信息。
具体地,通过方法6-方法10能够完成电力***定制化方法的实现。
S102、从XML文件中逐行读取数据信息,根据正则表达式成对地对逐行读取的所述数据信息进行正则匹配,得到CIM模块,并将所述CIM模块存入向量列表中;
进一步地,所述从XML文件中逐行读取数据信息,根据正则表达式成对地对逐行读取的所述数据信息进行正则匹配,得到CIM模块,并将所述CIM模块存入向量列表中,具体包括:
从XML文件中逐行读取所述数据信息,根据XML语法规范,以正则表达式p0="<cim.*rdf:ID.*>",以及p1="</cim.*>"成对地对逐行读取的数据信息进行正则匹配;
设与p0匹配命中的行为ri,与p1匹配命中的行为rj;则ri行至rj内容构成一个完整的CIM模块Mk,并将该模块存入向量列表M中;
其中,M=[M1,M2,…,Mk,…,Mn],Mk=[ri,ri+1,…,rj-1,rj]。
S103、构建第一哈希表,以字符串为键将所述数据元类所构建的新类存储在所述第一哈希表中,在初始状态时所述第一哈希表为空;
进一步地,所述构建第一哈希表,以字符串为键将所述数据元类所构建的新类存储在所述第一哈希表中,在初始状态时所述第一哈希表为空,具体包括:
构建所述第一哈希表Cls_map,以字符串cls_name为键将所述数据元类所构建的新类some_class存储在所述第一哈希表Cls_map中,初始状态时Cls_map为空
其中,Cls_map<string cls_name,class some_class>。
S104、构建第二哈希表,以所述字符串为键将实例哈希表存入第二哈希表中;
进一步地,所述构建第二哈希表,以所述字符串为键将实例哈希表存入第二哈希表中,具体包括:
构建所述第二哈希表Obj_map,以所述字符串cls_name为键将实例哈希表ID_map存入所述第二哈希表Obj_map中;所述第二哈希表Obj_map以所述CIM模块Mk对应的唯一编码字符串ID作为键将所述CIM模块Mk对应生成的实例对象some_object进行储存;
其中,Obj_map<stringcls_name,ID_map<string ID,Cls_map[cls_name]some_object>>。
S105、将所述实例哈希表以所述CIM模块对应的唯一编码字符串ID作为键将所述CIM模块对应生成的实例对象进行存储;
S106、逐行遍历所述向量列表中任一所述CIM模块中的记录,生成并存储所述CIM模块对应的类或对象
进一步地,逐行遍历所述向量列表中任一所述CIM模块中的记录,生成并存储所述CIM模块对应的类或对象,具体包括:
遍历到第ri行时,执行如下步骤:
根据CIM模型描述的规则及p0与ri的匹配关系,从ri的第5个字符开始,至空格字符结束,提取出所述CIM模块Mk在XML中所规定的类别字段,记为module_type;从ri的子字符串"rdf:ID=“"后第1个字符开始,至ri行倒数第3个字符结束,提取出模块Mk在XML中所指定的识别ID,记为module_id;
若module_type不存在于所述第一哈希表Cls_map的键中,则调用数据元类mcs构建module_type对应的类cls,令cls.cls_name=module_type,并以cls.cls_name作为键,将键值对<cls.cls_name,cls>存入所述第一哈希表Cls_map中;
若module_type已经存在于所述第一哈希表Cls_map的键中,则说明当前模块Mk所属类别cls已经由元类mcs建立;
调用类Cls_map[module_type]的初始化函数instance_init将所述CIM模块Mk实例化为Objk;
遍历到第ri+1至rj-1行时,执行如下步骤:
按照XML的语法规则,根据模块Mk中各行对当前实例的描述内容,调用类Cls_map[module_type]中由mcs构建的实例操作方法2至方法5,对实例Objk的各项属性进行初始化与赋值;
遍历到第rj行时,执行如下步骤:
将键值对<module_id,Objk>存入所述实例哈希表ID_map中,同时更新所述第二哈希表Obj_map。
在一具体的实施方式中,CIM的具体实践形式有两种CIM/XML格式与CIM/E格式,两种格式可以相互转换。XML是可扩展标记语言(eXtensible Markup Language)的简称,是信息技术领域用来传输和存储数据的一种常用格式,CIM/XML遵循普通XML的语法格式;CIM/E格式则是一种针对电力***所特别定制的模型交换格式。CIM采用资源描述框架模式(Resource description framework schema,RDF schema)对电力***各部分的资源与性质进行描述。电力***中的任何设备,比如变压器、断路器、线路等,或拓扑信息,比如基准电压、控制区域等,在RDF schema中存在唯一识别码RDF ID,作为设备/拓扑参数相互关联的依据。
通过采用RDF schema描述的一台变压器及其高压端绕组的14行XML代码,简要介绍RDF schema在CIM/XML中的实现方式以及对电网模型的描述方法。
对变压器的描述从第1行开始至第4行结束:
第1行描述了该变压器在RDF schema中的唯一识别码,即rdf:ID=12345;
第2行描述了变压器的名称;
第3行描述了该变压器包含某实例属性EquipmentContainer,该实例在RDFschema中的唯一识别码为453127;
第4行作为该变压器模块描述结束的标志行。
对该变压器高压端绕组的描述从第5行开始至第14行结束,其描述结构与前述类似:
第5行描述了该绕组在RDF schema中的唯一识别码,即rdf:ID=123447;
第6至10行描述了该绕组的各种物理电气属性和参数,包括名称、电阻、电抗、额定电压、额定容量5项。
第11行描述了该绕组包含某实例属性MemberOf_PowerTransformer,该实例在RDFschema中的唯一识别码为rdf:ID=12345,也即对应于第1至4行对应的变压器模型。该行意为,以rdf:ID=123447识别码所描述的变压器绕组从属于以rdf:ID=12345的变压器;
第12至14行的描述信息与前述说明类似。
代码段中,以XML语法格式书写,任意一实例或属性以“<xxx>”为开始,以“<xxx/>”为结束,限定了实例或属性的作用范围。通过对RDF schema的识别与连接,即可在CIM中实现对于庞大电力***拓扑的建模。
在不使用元类的方法中,需要先编写若干个具体类的类代码,再根据CIM/XML的具体对象描述,对应分类构建上万个对象;而在使用元类的方法中,只需要编写1个元类代码,再根据CIM/XML的具体对象描述,对应先构造相应的类,再构造该类的实例对象;同时在类的构造过程中,元类可以对各个类进行动态的拦截、修改和记录。
本发明实施例提供的一种CIM模型的数据解析方法、装置及存储介质,具有如下有益效果:
基于Python元类的方法,在自定义开发与CIM模型解析之间进行了折中;仅有元类mcs及其方法需要预先编码创建,而CIM/XML中的所有类型均由元类动态创建,在CIM模型面临扩展与调整时,能够较好地进行跟踪;通过预先编码在步骤S101中增加新的预设的方法,可以实现对电力***模型特有方法的打包与自定义,扩大了CIM模型解析的适用范围;能够在适配电力***模型自身特有的需求的同时能够跟踪CIM模型扩展与调整。
参见图2,本发明实施例二对应提供了一种CIM模型的数据解析装置,其特征在于,包括:
元类构建单元201,用于构建数据元类,所述数据元类中包括预设的数据属性和方法;
数据获取单元202,用于从XML文件中逐行读取数据信息,根据正则表达式成对地对逐行读取的所述数据信息进行正则匹配,得到CIM模块,并将所述CIM模块存入向量列表中;
第一哈希表构建单元203,用于构建第一哈希表,以字符串为键将所述数据元类所构建的新类存储在所述第一哈希表中,在初始状态时所述第一哈希表为空;
第二哈希表构建单元204,用于构建第二哈希表,以所述字符串为键将实例哈希表存入第二哈希表中;
第一解析单元205,用于将所述实例哈希表以所述CIM模块对应的唯一编码字符串ID作为键将所述CIM模块对应生成的实例对象进行存储;
第二解析单元206,用于逐行遍历所述向量列表中任一所述CIM模块中的记录,生成并存储所述CIM模块对应的类或对象。
进一步地,所述从XML文件中逐行读取数据信息,根据正则表达式成对地对逐行读取的所述数据信息进行正则匹配,得到CIM模块,并将所述CIM模块存入向量列表中,具体包括:
从XML文件中逐行读取所述数据信息,根据XML语法规范,以正则表达式p0="<cim.*rdf:ID.*>",以及p1="</cim.*>"成对地对逐行读取的数据信息进行正则匹配;
设与p0匹配命中的行为ri,与p1匹配命中的行为rj;则ri行至rj内容构成一个完整的CIM模块Mk,并将该模块存入向量列表M中;
其中,M=[M1,M2,…,Mk,…,Mn],Mk=[ri,ri+1,…,rj-1,rj]。
进一步地,所述构建第一哈希表,以字符串为键将所述数据元类所构建的新类存储在所述第一哈希表中,在初始状态时所述第一哈希表为空,具体包括:
构建所述第一哈希表Cls_map,以字符串cls_name为键将所述数据元类所构建的新类some_class存储在所述第一哈希表Cls_map中,初始状态时Cls_map为空
其中,Cls_map<string cls_name,class some_class>。
进一步地,所述构建第二哈希表,以所述字符串为键将实例哈希表存入第二哈希表中,具体包括:
构建所述第二哈希表Obj_map,以所述字符串cls_name为键将实例哈希表ID_map存入所述第二哈希表Obj_map中;所述第二哈希表Obj_map以所述CIM模块Mk对应的唯一编码字符串ID作为键将所述CIM模块Mk对应生成的实例对象some_object进行储存;
其中,Obj_map<stringcls_name,ID_map<string ID,Cls_map[cls_name]some_object>>。
进一步地,所述构建数据元类,所述数据元类中包括预设的数据属性和方法,具体包括:构建数据元类mcs,所述数据元类mcs中预置以下属性与方法:
属性1:cls_name,记录当前生成类的名称;
方法1:instance_init,支持所生成类生成新的实例;
方法2:get_attr,支持所生成类所生成的实例获取本实例的属性;
方法3:attr_setter,支持所生成类所生成的实例对本实例的属性进行赋值;
方法4:attr_init,支持所生成类所生成的实例为本实例初始化新的属性;
方法5:has_attr,支持所生成类所生成的实例查找本实例是否含有某个属性;
方法6:is_single_bus_device,支持所生成类所生成的实例判断本实例是否是一个单一端口元件;
方法7:affiliate_substation_func_assign,支持所生成类所生成的实例返回本实例所从属的变电站信息;
方法8:nomination_voltage_func_assign,支持所生成类所生成的实例返回本实例所对应的电压等级和基准电压信息;
方法9:get_zone_func,支持所生成类所生成的实例返回本实例所属的区域信息;
方法10:get_area_func,支持所生成类所生成的实例返回本实例所属的分区信息。
进一步地,逐行遍历所述向量列表中任一所述CIM模块中的记录,生成并存储所述CIM模块对应的类或对象,具体包括:
遍历第ri行时,执行如下步骤:
根据CIM模型描述的规则及p0与ri的匹配关系,从ri的第5个字符开始,至空格字符结束,提取出所述CIM模块Mk在XML中所规定的类别字段,记为module_type;从ri的子字符串"rdf:ID=“"后第1个字符开始,至ri行倒数第3个字符结束,提取出模块Mk在XML中所指定的识别ID,记为module_id;
若module_type不存在于所述第一哈希表Cls_map的键中,则调用数据元类mcs构建module_type对应的类cls,令cls.cls_name=module_type,并以cls.cls_name作为键,将键值对<cls.cls_name,cls>存入所述第一哈希表Cls_map中;
若module_type已经存在于所述第一哈希表Cls_map的键中,则说明当前模块Mk所属类别cls已经由元类mcs建立;
调用类Cls_map[module_type]的初始化函数instance_init将所述CIM模块Mk实例化为Objk;
遍历到第ri+1至rj-1行时,执行如下步骤:
按照XML的语法规则,根据模块Mk中各行对当前实例的描述内容,调用类Cls_map[module_type]中由mcs构建的实例操作方法2至方法5,对实例Objk的各项属性进行初始化与赋值;
遍历到第rj行时,执行如下步骤:
将键值对<module_id,Objk>存入所述实例哈希表ID_map中,同时更新所述第二哈希表Obj_map。
本发明实施例三对应提供了一种CIM模型的数据解析装置,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例一所述的CIM模型的数据解析方法。所述CIM模型的数据解析装置可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述CIM模型的数据解析装置可包括,但不仅限于,处理器、存储器。
本发明实施例四对应提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如本发明实施例一所述的CIM模型的数据解析方法。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述CIM模型的数据解析装置的控制中心,利用各种接口和线路连接整个CIM模型的数据解析装置的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述CIM模型的数据解析装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
其中,所述CIM模型的数据解析装置集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
Claims (9)
1.一种CIM模型的数据解析方法,其特征在于,包括:
构建数据元类,所述数据元类中包括预设的数据属性和方法;
从XML文件中逐行读取数据信息,根据正则表达式成对地对逐行读取的所述数据信息进行正则匹配,得到CIM模块,并将所述CIM模块存入向量列表中;
构建第一哈希表,以字符串为键将所述数据元类所构建的新类存储在所述第一哈希表中,在初始状态时所述第一哈希表为空;
构建第二哈希表,以所述字符串为键将实例哈希表存入第二哈希表中;
将所述实例哈希表以所述CIM模块对应的唯一编码字符串ID作为键将所述CIM模块对应生成的实例对象进行存储;
逐行遍历所述向量列表中任一所述CIM模块中的记录,生成并存储所述CIM模块对应的类或对象。
2.如权利要求1所述的一种CIM模型的数据解析方法,其特征在于,所述从XML文件中逐行读取数据信息,根据正则表达式成对地对逐行读取的所述数据信息进行正则匹配,得到CIM模块,并将所述CIM模块存入向量列表中,具体包括:
从XML文件中逐行读取所述数据信息,根据XML语法规范,以正则表达式p0="<cim.*rdf:ID.*>",以及p1="</cim.*>"成对地对逐行读取的数据信息进行正则匹配;
设与p0匹配命中的行为ri,与p1匹配命中的行为rj;则ri行至rj内容构成一个完整的CIM模块Mk,并将该模块存入向量列表M中;
其中,M=[M1,M2,…,Mk,…,Mn],Mk=[ri,ri+1,…,rj-1,rj]。
3.如权利要求2所述的一种CIM模型的数据解析方法,其特征在于,所述构建第一哈希表,以字符串为键将所述数据元类所构建的新类存储在所述第一哈希表中,在初始状态时所述第一哈希表为空,具体包括:
构建所述第一哈希表Cls_map,以字符串cls_name为键将所述数据元类所构建的新类some_class存储在所述第一哈希表Cls_map中,初始状态时Cls_map为空
其中,Cls_map<string cls_name,class some_class>。
4.如权利要求3所述的一种CIM模型的数据解析方法,其特征在于,所述构建第二哈希表,以所述字符串为键将实例哈希表存入第二哈希表中,具体包括:
构建所述第二哈希表Obj_map,以所述字符串cls_name为键将实例哈希表ID_map存入所述第二哈希表Obj_map中;所述第二哈希表Obj_map以所述CIM模块Mk对应的唯一编码字符串ID作为键将所述CIM模块Mk对应生成的实例对象some_object进行储存;
其中,Obj_map<stringcls_name,ID_map<string ID,Cls_map[cls_name] some_object>>。
5.如权利要求4所述的一种CIM模型的数据解析方法,其特征在于,所述构建数据元类,所述数据元类中包括预设的数据属性和方法,具体包括:构建数据元类mcs,所述数据元类mcs中预置以下属性与方法:
属性1:cls_name,记录当前生成类的名称;
方法1:instance_init,支持所生成类生成新的实例;
方法2:get_attr,支持所生成类所生成的实例获取本实例的属性;
方法3:attr_setter,支持所生成类所生成的实例对本实例的属性进行赋值;
方法4:attr_init,支持所生成类所生成的实例为本实例初始化新的属性;
方法5:has_attr,支持所生成类所生成的实例查找本实例是否含有某个属性;
方法6:is_single_bus_device,支持所生成类所生成的实例判断本实例是否是一个单一端口元件;
方法7:affiliate_substation_func_assign,支持所生成类所生成的实例返回本实例所从属的变电站信息;
方法8:nomination_voltage_func_assign,支持所生成类所生成的实例返回本实例所对应的电压等级和基准电压信息;
方法9:get_zone_func,支持所生成类所生成的实例返回本实例所属的区域信息;
方法10:get_area_func,支持所生成类所生成的实例返回本实例所属的分区信息。
6.如权利要求5所述的一种CIM模型的数据解析方法,其特征在于,所述逐行遍历所述向量列表中任一所述CIM模块中的记录,生成并存储所述CIM模块对应的类或对象,具体包括:
遍历到第ri行时,执行如下步骤:
根据CIM模型描述的规则及p0与ri的匹配关系,从ri的第5个字符开始,至空格字符结束,提取出所述CIM模块Mk在XML中所规定的类别字段,记为module_type;从ri的子字符串"rdf:ID=“"后第1个字符开始,至ri行倒数第3个字符结束,提取出模块Mk在XML中所指定的识别ID,记为module_id;
若module_type不存在于所述第一哈希表Cls_map的键中,则调用数据元类mcs构建module_type对应的类cls,令cls.cls_name=module_type,并以cls.cls_name作为键,将键值对<cls.cls_name,cls>存入所述第一哈希表Cls_map中;
若module_type已经存在于所述第一哈希表Cls_map的键中,则说明当前模块Mk所属类别cls已经由元类mcs建立;
调用类Cls_map[module_type]的初始化函数instance_init将所述CIM模块Mk实例化为Objk;
遍历到第ri+1至rj-1行时,执行如下步骤:
按照XML的语法规则,根据模块Mk中各行对当前实例的描述内容,调用类Cls_map[module_type]中由mcs构建的实例操作方法2至方法5,对实例Objk的各项属性进行初始化与赋值;
遍历到第rj行时,执行如下步骤:
将键值对<module_id,Objk>存入所述实例哈希表ID_map中,同时更新所述第二哈希表Obj_map。
7.一种CIM模型的数据解析装置,其特征在于,包括:
元类构建单元,用于构建数据元类,所述数据元类中包括预设的数据属性和方法;
数据获取单元,用于从XML文件中逐行读取数据信息,根据正则表达式成对地对逐行读取的所述数据信息进行正则匹配,得到CIM模块,并将所述CIM模块存入向量列表中;
第一哈希表构建单元,用于构建第一哈希表,以字符串为键将所述数据元类所构建的新类存储在所述第一哈希表中,在初始状态时所述第一哈希表为空;
第二哈希表构建单元,用于构建第二哈希表,以所述字符串为键将实例哈希表存入第二哈希表中;
第一解析单元,用于将所述实例哈希表以所述CIM模块对应的唯一编码字符串ID作为键将所述CIM模块对应生成的实例对象进行存储;
第二解析单元,用于逐行遍历所述向量列表中任一所述CIM模块中的记录,生成并存储所述CIM模块对应的类或对象。
8.一种CIM模型的数据解析装置,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至6中任意一项所述的一种CIM模型的数据解析方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如权利要求1至6中任意一项所述的一种CIM模型的数据解析方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011094885.8A CN112230929B (zh) | 2020-10-14 | 2020-10-14 | 一种cim模型的数据解析方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011094885.8A CN112230929B (zh) | 2020-10-14 | 2020-10-14 | 一种cim模型的数据解析方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112230929A CN112230929A (zh) | 2021-01-15 |
CN112230929B true CN112230929B (zh) | 2023-11-03 |
Family
ID=74111902
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011094885.8A Active CN112230929B (zh) | 2020-10-14 | 2020-10-14 | 一种cim模型的数据解析方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112230929B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113051267B (zh) * | 2021-03-08 | 2024-05-03 | 国网江苏省电力有限公司扬州供电分公司 | 一种电热转换设备的cim模型自动生成方法和*** |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7499992B1 (en) * | 2008-02-27 | 2009-03-03 | International Business Machines Corporation | Association traversal translation for common information model |
CN104166942A (zh) * | 2014-07-02 | 2014-11-26 | 国家电网公司 | 基于cim模型的跨区域供电范围搜索方法及其*** |
CN105630500A (zh) * | 2015-12-25 | 2016-06-01 | 江苏东大金智信息***有限公司 | 一种用于数据处理的cim对象模型及其编程框架 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040025142A1 (en) * | 2002-08-05 | 2004-02-05 | Sun Microsystems, Inc. | Method and apparatus for managing objects in a CIM environment |
-
2020
- 2020-10-14 CN CN202011094885.8A patent/CN112230929B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7499992B1 (en) * | 2008-02-27 | 2009-03-03 | International Business Machines Corporation | Association traversal translation for common information model |
CN104166942A (zh) * | 2014-07-02 | 2014-11-26 | 国家电网公司 | 基于cim模型的跨区域供电范围搜索方法及其*** |
CN105630500A (zh) * | 2015-12-25 | 2016-06-01 | 江苏东大金智信息***有限公司 | 一种用于数据处理的cim对象模型及其编程框架 |
Non-Patent Citations (1)
Title |
---|
包含直流输电***的公用信息模型的扩展;刘崇茹 等;《电力***自动化》;第28卷(第20期);52-56 * |
Also Published As
Publication number | Publication date |
---|---|
CN112230929A (zh) | 2021-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111708539A (zh) | 一种应用程序代码转换方法、装置、电子设备和存储介质 | |
CN111428462A (zh) | 通讯协议模板构建的方法及终端设备 | |
US8782597B2 (en) | Ontology updating apparatus, method and system | |
CN106844380A (zh) | 一种数据库操作方法、信息处理方法和相应装置 | |
CN108334609B (zh) | Oracle中实现JSON格式数据存取的方法、装置、设备及存储介质 | |
CN109447820B (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN109558525A (zh) | 一种测试数据集的生成方法、装置、设备和存储介质 | |
CN103268325A (zh) | 基于scd文件的智能变电站ied模型配置正确性动态校核方法 | |
CN110209585A (zh) | 一种软件测试用例智能训练方法,终端及存储介质 | |
CN104267966A (zh) | 软件的程序代码的生成方法及装置 | |
CN110019111A (zh) | 数据处理方法、装置、存储介质以及处理器 | |
CN112650533A (zh) | 接口文档的生成方法、装置和终端设备 | |
CN112230929B (zh) | 一种cim模型的数据解析方法、装置及存储介质 | |
CN106776779B (zh) | 基于Mac平台的JSON数据生成实体文件的方法 | |
CN116384109A (zh) | 一种面向新型配电网的数字孪生模型自动重构方法及装置 | |
CN114386853A (zh) | 基于通用审核模型的数据审核处理方法、装置及设备 | |
US20090282388A1 (en) | Optimizing the handling of source code requests between a software configuration management (scm) system and a software integrated development environment (ide) using projected ancillary data | |
KR100762712B1 (ko) | 규칙기반의 전자문서 변환방법 및 그 시스템 | |
CN111245633B (zh) | 微电网主设备的配置文件及其运行方法 | |
CN109068286B (zh) | 一种信息解析的方法、介质及设备 | |
CN109671475A (zh) | HL7v3数据持久化方法、存储介质、电子设备及*** | |
CN114519071A (zh) | 规则匹配模型的生成方法、匹配方法、***、设备和介质 | |
CN111881220B (zh) | 列表存储下的数据操作方法、装置、电子设备和存储介质 | |
CN110019177A (zh) | 规则存储的方法和装置 | |
CN111563387B (zh) | 语句相似度确定方法及装置、语句翻译方法及装置 |
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 |