首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ROWLEX API查找类的owlSubClasses?

使用ROWLEX API查找类的owlSubClasses?
EN

Stack Overflow用户
提问于 2012-02-24 23:44:02
回答 1查看 141关注 0票数 0

我有一个给定的本体论,我喜欢用它来推理。我使用.NET的ROWLEX API。

如何找到一个类的所有owlSubClasses?

EN

回答 1

Stack Overflow用户

发布于 2012-02-28 17:02:34

ROWLEX不是推理机它有一些推理机实现的功能-这对于C#类的生成是非常必要的-但它的应用程序接口不是为此而设计的。然而,仍然有希望,只是不是最优雅的解决方案。

我假设您有一个本体,并且使用OwlGrinder.exe从本体生成了.NET类。因此,默认情况下,为本体中的每个相应OWL类生成两个关联的.NET类:一个轻类和一个完整类。我们将只使用light类。我们简单地遍历所有.NET类,并过滤出它是否是一个子类。就是这样。

代码语言:javascript
复制
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();

我没有试过这个代码,它可能有buggy。但它确实表明了这一想法。每个生成的类都添加了一组属性。这些类包括它们在SubClassOfAttribute中的基类,以及它们是使用LightVersionAttribute的轻类还是全类。您可以根据这些属性筛选出您感兴趣的类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9433576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档