Найти owlSubClasses класса с помощью ROWLEX API?

У меня есть заданная онтология, о которой я люблю рассуждать. Я использую ROWLEX API для .NET.

Как я могу найти все owlSubClasses класса?


person robert    schedule 24.02.2012    source источник


Ответы (1)


ROWLEX не рассуждает. В нем реализована некоторая функциональность ризонера — это очень нужно для генерации классов C# — но его API не предназначен для этого. Впрочем, надежда все же есть, просто не самое элегантное решение.

Я предполагаю, что у вас есть онтология, и вы создали классы .NET из нее с помощью OwlGrinder.exe. Поэтому по умолчанию у вас есть два связанных класса .NET, сгенерированных для каждого соответствующего класса OWL в онтологии: один легкий класс и один полный класс. Мы собираемся использовать только легкие классы. Мы просто перебираем ВСЕ классы .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. Вы можете отфильтровать интересующие вас классы на основе этих атрибутов.

person ROWLEX Admin    schedule 28.02.2012