65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 的简单本体支持

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.17/5 (10投票s)

2007年7月11日

3分钟阅读

viewsIcon

69736

downloadIcon

1689

用语义信息扩展类层次结构

引言

面向对象编程语言的类层次结构表示静态本体。它定义了实体、它们的属性和关系的术语。当应用程序需要在运行时进行不同的分类时,就会出现问题。这可能会由于多重继承或实现此功能所需的技巧而导致歧义。

本文介绍了一种通过附加本体扩展现有类信息的方法,以提供丰富和动态的语义信息。 提出了一个案例研究,展示了该概念的灵活性和附加值,以及如何使用它。 此外,此方法与面向对象的设计过程很好地集成。

背景

Gruber (1993) 将本体定义为“概念化的显式规范”,即,通过标准化的术语和实体之间的关系来描述对系统的看法。 在许多情况下,没有单一的本体,而是许多不同的和并发的本体(比较 Hesse (2002))。

面向对象编程语言(例如 C#)的类层次结构定义了静态本体; 它根据对象、属性和关系描述对系统的看法。 下图显示了一个例子

A sample class hierarchy.

该示例取自键合图的实现。 键合图由不同类型的节点和它们之间的键组成。 这里的问题是,不同的算法需要对节点进行特殊的视图,例如,有时节点按“类型”分类,有时按它们的“端口”数量分类。 例如,SE 和 SF 节点可以按类型分类为源,按端口分类为单端口。

由于 C# 中缺少对多重继承的支持,因此无法实现这种并发分类。 接口是一种解决方案,但这会丢失许多有价值的信息。

这个想法是通过本体扩展类层次结构并交叉引用实体

Ontology and Class Hierarchy.

根据使用的本体,SE 节点可以是源或 SinglePort。 优点是父子关系的模糊性不会导致冲突,并且维护单个(干净的)类层次结构。

使用代码

本体通过 E56.Ontology 库实现,该库为现有 C# 类的语义注释提供类。 SemanticTypeSystem.Type 的对应物,也是扩展的基础。 如果不存在具有相同名称的 C# 类,则语义类型是虚拟的,否则将交叉引用此类。 SemanticObject 扩展了 System.Object。 要在本体中使用一个类,它必须派生自 SemanticObject

一个示例

  class Element : SemanticObject { ... }
  class Node : Element { ... }
  class SE : Node { ... }

可以通过以下方式加载不同的本体

  SemanticObject.Parse("by-port.xml");
  SemanticObject.Parse("by-type.xml");

现在,我们可以使用附加信息

  // Create an instance of a class
  SF sf = new SF();
  // Zugriff auf dessen semantischen Typs
  SemanticType root = sf.SemanticType;
  // Using the schema 'by-port' sf is a...
  SemanticType st1 = sf.IsA("by-port");
  Console.WriteLine("'by-port': {0} is a {1}", root, st1);
  // Using the schema 'by-typet' sf is a...
  SemanticType st2 = sf.IsA("by-type");
  Console.WriteLine("'by-type': {0} is a {1}", root, st2);

通过 SemanticType 属性,可以访问语义类型信息。 这是作为本体内 C# 类型的查找来实现的。 方法 IsA(string schema) 遍历层次结构并返回父对象。 结果是

  'by-port': [SF/BondGraphs.Core.SF] is a [SinglePort/virtual]
  'by-type': [SF/BondGraphs.Core.SF] is a [Source/virtual]

技术信息

该实现基于 System.Reflection API,该 API 允许在运行时访问类、方法甚至变量。 本体本身是用简单的 XML 格式描述的,它将被 OWL 替换。 Web 本体语言 (OWL) 是一种 W3C 标准,用于以机器可读的方式指定语义信息。

按类型模式如下所示

<?xml version="1.0" ?>
<schema namespace="example">
  <object name="Element" />
  <object name="Node" isA="Element" />
  <object name="Source" isA="Node" />
  <object name="SF" isA="Source" />
  <object name="SE" isA="Source" />
</schema>

参考文献

  • Gruber, T. R. (1993). A Translation Approach to Portable Ontology Specifications. Knowledge Acquisition, 5(2):199–220.
  • Hesse, W. (2002). Ontologie(n). Informatik Spektrum, 25(6):477–480.
  • W3C (2004). Web Ontology Language. http://www.w3.org/2004/OWL/, accessed 11 July 2007.

历史

  • 2007 年 7 月 11 日 - 初始版本
© . All rights reserved.