公共信息模型的本体解析与校验(论文学习)

针对现在电力信息系统中 CIM 版本更新以及私有拓展导致的模型不一致的问题,提出一个基于 Java 基础包的公共信息模型本体的解析算法以及特定要求下的校验方法,其中包括解析 CIM 模型,并重构成 Java 模型,完成电力系统所需要的功能校验。

校验很重要)在CIM的实际应用中,可能遇到以下 2 个问题:

  • (1)信息模型不匹配。公共信息模型(CIM) 版本更新频繁,厂家产品版本不同步,造成模型语义差异;
  • (2)模型语义缺乏一致性。根据内部需求,对 CIM 进行扩展,私有扩展模型可能导致应用间的语义难以辨识。

目前国内外正在使用的重点常见本体解析工具包:

  • (1)Jena 解析工具包:国外公司通过 OWL 解析包Jena 制作的一个用于 CIM 模型解析以及校验的工具,可以完成特定版本 CIM 模型的解析和校验。由于 CIM 模型更新快速,该解析工具具有严重的滞后性,使得其使用具有重大的局限性。
  • (2)Protégé OWL API 工具包:是一种树形式的本体编辑方式,能够允许本体模型操作人员在创建或解析相应视图时维护概念、关系与属性的树状层次结构,通过本体模型的树状层次结构对本体模型所包含的信息进行解析。适用于对于本体模型的结构以及语义具有清晰理解的专业人员。

为了能够更好地切合 CIM 模型,并且在解析以及校验过程中能清晰地跟踪各函数及对象所处理的具体工作,以便于在后期出现解析错误或者问题时能轻松地展开问题追踪,并且做出决定性的精准修改。文中提出一种采用Java 基础工具包对构建完成的 CIM 模型进行解析,并且根据电力系统的需求,针对性地设计 4 个校验函数达成校验目的。在解析及校验过程中出现问题可以追踪到出现错误的步骤,高效调整后直接投入使用,可以方便地实现错误修改。


工具及相关技术

(1)DOM4J

  • 一个 Java 的 XML API,是 JDOM 的升级品;
  • 对于 XML 文件呈现的高超处理能力;
  • 使用它对 OWL 构建的 CIM 模型进行解析处理;

(2)OWL(网络本体语言 Web Ontology Language )

  • 源起于 W3C 的开发设计,可用于对本体进行语义描述;
  • OWL 有 3 种表达能力递增的子语言:OWL-lite、OWL-DL、OWL-full;
  • OWL DL( Description Logic,描述逻辑) 将可判定推理能力和较强表达能力作为首要目标;
  • 通过 OWL DL 定义实现 CIM 模型。

本体模型的解析

(1)分类处理

文中对 CIM 模型构建 2 层 XML 树,通过 DOM4J 遍历 XML 树对根节点下的信息进行提取,将获取的信息通过 Type 属性分为五大类,将分类后的节点分别存储在 Class(类)、Package(包)、Property(属性)、Individual(实例)、Datatype(数据类型) 五个列表中。

(2)实例建模

获取子节点之后再次采用 DOM4J 的 XML 树遍历功能,对子节点下的各条信息进行遍历,分别提取出相应的信息。

由于 OWL 语法和 Java 不同必须对解析得到的信息再以 Java 语法进行重新建模但由于在 Java 中类仅支持单继承OWL 却支持多继承。由于需要对类的存在性以及类中各属性的基数、属性值进行校验,为此采用将多个父类重构一个新类以涵盖多个父类所有的信息,有效实现对多继承到单继承的转换。并且因为此处仅在该类处理过程中对于多父类进行临时重新构建并不会影响原始信息,对于其他类处理时的父类查找以及信息集成也不会产生任何作用效果

(3)整体模型构建

  • 按照图1方法,得到 Package 的 Java 模型从IsDefinedBy 属性可知上一层包名,纵向迭代可获得以“.”连接的模型包结构。
  • 解析重构生成的模型存放于 List 中,通过迭代列表对比 URI(统一资源标识符Uniform Resource Identifier)的方式查找需要的类。
  • 通过类模型中的 SubclassOf 属性获取对应类的所有父类,所有父类合成一个新类,只用于该类的继承,其余类之间的关系与构成的新类无关。纵向迭代以生成所有类的继承关系。具体合并方式如图 2 所示。
  • 在解析过程中通过 Type 的标注将属性可以分为 5 类,分别为 Property、DatatypeProperty、FunctionalProperty、ObjectProperty 和 InverseFunctionalProperty。其中,DatatypeProperty 为数据属性,约束该属性值的数据类型。
  • OWL 中类的对象属性( ObjectPorperty) 可认定为是该类的父类,因此解析类的对象属性需要该类的所有父类,纵向迭代即可获取所有对象属性约束。在 OWL 中,对象属性分为 2 种,一种被存在量词所约束,另一种被全称量词所约束。OWL API 中,有 2 个不同的类型与之相对应,分别为 OWLObjectSomeValuesFrom 和 OWLObjectAllValuesFrom。
  • 遍历实例列表,获取每个实例的 Type 属性值,实例模型中的 Type 标注的是该实例所属的类名。将获取到的属性值与类列表中的 Name 属性值提供对照比较,找到对应的类,建立起类与实例的关系。


待校验 RDF 文档解析

CIM/XML 是将 CIM 语义信息模型及其扩展映射为包含电力系统模型信息的 CIM/RDF 应用,因此必须遵守 CIM 语义及其自己的约束机制 。CIM 版本的快速更新以及各厂家根据各自的需求对 CIM 模型的私有扩展即使得 CIM/XML 和 OWL 构建的 CIM 模型表现出一定差别,需要对 CIM/XML 文件引入正确性校验环节,使不符合当前 CIM 模型的信息在有效更正后方能正确地进行信息交互。


文件校验

(1)类存在校验

(2)属性存在校验

采用 DOM4J 中设计研发的 XML 树的遍历函数进行遍历解析。根据子节点的父类属性值找到所有相关的父类,得到父类的所有属性。

(3)属性基数校验

基数约束在属性中,一类通过 maxCardinality 或 minCardinality 进行约束另一类通过 FunctionalProperty 及InverseFunctional Property 进行全局属性约束。

具体过程分别对以上 2 类约束研究采用了遍历校验,通过获取 CIM 模型的节点信息对以上 4 个关键字设置了比对查找若存在相应属性条则进行属性基数校验。若对应节点下的相应属性基数不符合 CIM 模型的约束,则生成一则“属性基数错误信息。

(4)属性值类型校验

属性值类型校验:

  • 确保属性的属性值满足信息模型中的约束条件; 
  • CIM/XML 模型中对于属性值类型的约束只有 Integer、String、Float 三类,因此需要区分属性值的类型后再与模型中的约束值配置指定比对,若两者相符则通过校验,否则添加一则“属性值类型错误”信息。
  • 文中选用正则表达式对属性值进行文本转换校验

通过上述符号构造出需要匹配的数据类型的正则表达式: \ \d+( . \ \d+) ?

采用 Java 语言中 String 类的 matches 方法即可将获取到的属性值与上述正则表达式展开设计比对,若符合正则表达式内置规定的结构则返回 1否则返回 0通过返回值即可判断属性值是否为数据类型若返回为 1则为数据类型; 否则即为 String 类型通过 String 类的 indexof 方法获取属性值中小数点的位置若小数点的位置大于 0即为 float 类型,否则可判定为 integer 类型

属性值域校验:

  • 使得属性的值域满足信息模型中的约束。
  • OWL 中对于属性值的约束主要有 3 分别为: owl: AllValuesFrom、owl: SomeValuesFrom、owl: HasValue。
  • 对所获取的 CIM 模型进行信息提取通过上述 3 个关键字比对查看 CIM 模型是否存在属性值域约束,若存在相应约束则对 CIM/XML 中的对应属性进行相应校验; 若属性值域不满足模型中的约束条件则添加一条属性值域错误”信息

测试

 

感觉该论文是具体的系统实现,具体的实现需要结合代码去看,单纯的看论文,我承认,我可能不是很懂他的具体实现。

发布了71 篇原创文章 · 获赞 38 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/u012839256/article/details/105311470
今日推荐