C# 的简单本体支持






4.17/5 (10投票s)
2007年7月11日
3分钟阅读

69736

1689
用语义信息扩展类层次结构
引言
面向对象编程语言的类层次结构表示静态本体。它定义了实体、它们的属性和关系的术语。当应用程序需要在运行时进行不同的分类时,就会出现问题。这可能会由于多重继承或实现此功能所需的技巧而导致歧义。
本文介绍了一种通过附加本体扩展现有类信息的方法,以提供丰富和动态的语义信息。 提出了一个案例研究,展示了该概念的灵活性和附加值,以及如何使用它。 此外,此方法与面向对象的设计过程很好地集成。
背景
Gruber (1993) 将本体定义为“概念化的显式规范”,即,通过标准化的术语和实体之间的关系来描述对系统的看法。 在许多情况下,没有单一的本体,而是许多不同的和并发的本体(比较 Hesse (2002))。
面向对象编程语言(例如 C#)的类层次结构定义了静态本体; 它根据对象、属性和关系描述对系统的看法。 下图显示了一个例子
该示例取自键合图的实现。 键合图由不同类型的节点和它们之间的键组成。 这里的问题是,不同的算法需要对节点进行特殊的视图,例如,有时节点按“类型”分类,有时按它们的“端口”数量分类。 例如,SE 和 SF 节点可以按类型分类为源,按端口分类为单端口。
由于 C# 中缺少对多重继承的支持,因此无法实现这种并发分类。 接口是一种解决方案,但这会丢失许多有价值的信息。
这个想法是通过本体扩展类层次结构并交叉引用实体
根据使用的本体,SE 节点可以是源或 SinglePort。 优点是父子关系的模糊性不会导致冲突,并且维护单个(干净的)类层次结构。
使用代码
本体通过 E56.Ontology
库实现,该库为现有 C# 类的语义注释提供类。 SemanticType
是 System.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 日 - 初始版本