У меня есть данная онтология, по которой мне нравится рассуждать. Я использую ROWLEX API для .NET.Найти классы owlSub класса, используя API ROWLEX?
Как найти все классы owlSub класса?
У меня есть данная онтология, по которой мне нравится рассуждать. Я использую ROWLEX API для .NET.Найти классы owlSub класса, используя API ROWLEX?
Как найти все классы owlSub класса?
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. Вы можете отфильтровать интересующие вас классы на основе этих атрибутов.