0

私は与えられたオントロジーを持っており、それについて推論したいと思っています。私は .NET 用の ROWLEX API を使用しています。

クラスのすべての owlSubClasses を見つけるにはどうすればよいですか?

4

1 に答える 1

0

ROWLEXは推論者ではありません。推論機能のいくつかの機能が実装されています-C#クラスの生成には非常に必要です-しかし、そのAPIはそのために設計されていません。ただし、最も洗練された解決策ではなく、まだ希望があります。

オントロジーがあり、OwlGrinder.exeを使用してオントロジーから.NETクラスを生成したと仮定します。したがって、デフォルトでは、オントロジーの対応するOWLクラスごとに2つの関連付けられた.NETクラスが生成されます。1つはライトクラスで、もう1つはフルクラスです。ライトクラスのみを使用します。すべての.NETクラスを反復処理し、がサブクラスであるかどうかを除外します。それだ。

string baseClassUri = "http://myontology/2012/10#mybaseclass";
Assembly asm = GetMyAssemblyGeneratedByOwlGrinder();

Type[] subClasses = (from type in asm.GetTypes()
                     where type.IsSubclassOf(typeof(NC3A.SI.Rowlex.OwlThing))
                     // selecting subclasses only
                     let attributes = type.GetCustomAttributes(typeof(NC3A.SI.Rowlex.SubClassOfAttribute), false)
                     from attr in attributes
                     let subClassAttr = attr as NC3A.SI.Rowlex.SubClassOfAttribute
                     where subClassAttr.TypeUri == baseClassUri
                     // selecting light classes only
                     let lightAttributes = type.GetCustomAttributes(typeof(NC3A.SI.Rowlex.LightVersionAttribute), false)
                     from lightAttr in lightAttributes
                     let lightAttr_ = lightAttr as NC3A.SI.Rowlex.LightVersionAttribute
                     where lightAttr_.LightVersion == true
                     select type).ToArray();

私はコードを試しませんでした、それはバグがあるかもしれません。しかし、それはその考えを示しています。生成された各クラスには、一連の属性が追加されています。これらには、SubClassOfAttributeの基本クラスと、LightVersionAttributeを使用するライトクラスまたはフルクラスのどちらであるかが含まれます。これらの属性に基づいて、関心のあるクラスを除外できます。

于 2012-02-28T09:02:34.313 に答える