Let's say I'm trying to model a type/field system like this: Type1 hasField field11 // and field12, field13, etc. field11 isType Type2 // and field12, field13, etc. are also some Type# Type2 hasField field21 // and field22, field23, etc. etc. And with a rule I could convert this to a simpler case of just a single hasChild link (?a isType ?b) (?a hasField ?c) -> (?a hasChild ?c)
So, now if I choose a root: root isType Type1 now I have a tree (possibly recursive as that is allowed) with root as the root. So, let me use a concise notation of a/b/c means a hasChild b and b hasChild c (as above), I need to be able to query a path for things associated with it which should both return everything that is attached to c (c ? ?), plus everything that would apply to the a/b/c path. And I need make such statements not just one path at a time, but path expressions such as apply things to a/b/** (all descendants of a/b). Or a/b/**/d (d if it's a descendant of a/b). And maybe more complex. There might be many 10,000's of types and fields. And there might be 1,000's of statements about path expressions. And there might be 100,000's of paths that would be queried for. And multiply that by about 10 for all the other information that would be about each node besides hasField. Is this something that is reasonable to do in Jena/RDF/OWL? If so, I would appreciate some help both in how to declare such statements about path expressions (I assume it would use rules somehow which I did read about reasoners in the doc) and how to query them. Thank you!
