私は与えられたオントロジーを持っており、それについて推論したいと思っています。私は .NET 用の ROWLEX API を使用しています。
クラスのすべての owlSubClasses を見つけるにはどうすればよいですか?
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を使用するライトクラスまたはフルクラスのどちらであるかが含まれます。これらの属性に基づいて、関心のあるクラスを除外できます。