Найти owlSubClasses класса, используя ROWLEX API? - PullRequest
0 голосов
/ 24 февраля 2012

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

Как мне найти все owlSubClasses класса?

1 Ответ

0 голосов
/ 28 февраля 2012

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. На основе этих атрибутов вы можете отфильтровать интересующие вас классы.

...