0

I have a given ontology, on which I like to reason. I use the ROWLEX API for .NET.

How can I find all owlSubClasses of a class?

p.campbell
  • 98,673
  • 67
  • 256
  • 322
robert
  • 3
  • 1

1 Answers1

0

ROWLEX is not a reasoner. It has some functionality of a reasoner implemented - it is very necessary for the C# class generation - but its API is not designed for that. However, there is still hope, just not the most elegant solution.

I assume, that you have an ontology and you generated .NET classes from that using OwlGrinder.exe. Therefore by default, you have two associated .NET classes generated for each corresponding OWL class in the ontology: one light class and one full class. We are going to use the light classes only. We simply iterate through ALL .NET classes and filter out if is a subclass. That is it.

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();

I did not try the code, it may be buggy. But it does show the idea. Each generated class have a bunch of attributes added. These include their base classes in the SubClassOfAttribute and whether they are light classes or full classes using the LightVersionAttribute. You can filter out the classes you are interested in based on these attributes.

ROWLEX Admin
  • 1,200
  • 1
  • 8
  • 10