我有一个给定的本体论,我喜欢用它来推理。我使用.NET的ROWLEX API。
如何找到一个类的所有owlSubClasses?
发布于 2012-02-28 17:02:34
ROWLEX不是推理机它有一些推理机实现的功能-这对于C#类的生成是非常必要的-但它的应用程序接口不是为此而设计的。然而,仍然有希望,只是不是最优雅的解决方案。
我假设您有一个本体,并且使用OwlGrinder.exe从本体生成了.NET类。因此,默认情况下,为本体中的每个相应OWL类生成两个关联的.NET类:一个轻类和一个完整类。我们将只使用light类。我们简单地遍历所有.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();我没有试过这个代码,它可能有buggy。但它确实表明了这一想法。每个生成的类都添加了一组属性。这些类包括它们在SubClassOfAttribute中的基类,以及它们是使用LightVersionAttribute的轻类还是全类。您可以根据这些属性筛选出您感兴趣的类。
https://stackoverflow.com/questions/9433576
复制相似问题