On 16/11/12 17:15, Zé Gildo Araújo wrote:
Hi guys,

I would like to know :

1 - In a OntModel class the listHierarchyRootClasses method enables a
Top-Down navegation. But how can I obtain the leaves of my structure ? How
can I build a bottom-up strategy ?

The term "leaf" suggest that your ontology is tree shaped in which case you could list all the classes and choose the ones that don't have sub-classes. Though beware that the sub-class graph need not be tree shaped, for example you can have a loop of sub-class relations that the simple find-a-leaf strategy will not identify.

2 - If I have in my model transitive properties for example:  "IsA,
MemberOf, PartOf" the listSubClasses method is not enough to get this
conections. How can I use the inferece machine to summarize a Model
containing transitive properties ? I build a model automatically. In this
process many redundant statements are added.

Example:

dog IsA mammal
mammal IsA animal
dog IsA animal (This is a redundant statement and do not necessary)

listHierarchyRootClasses will return "animal" - OK, but "mammal" will not
be returned by the listSubClasses method, the "IsA" transitive propertie
not be recognized in the navegation :(.

listHierarchyRootClasses and listSubClasses are looking at rdfs:subClassOf relationships. Your "IsA" has nothing to do that.

If you have declared IsA as transitive then include an OWL reasoner to get the transitive closure. But you can't traverse with listSubClasses that's only for sub-class relationships. Just query for your IsA relations:

   infModel.listStatements(null, isa, (RDFNode)null) etc

How Can I generate a minimum graph from my example ?

If by "minimum" graph you want the transitive reduction (where redundant links have been omitted) then there is no convenient support.

There is some level machinery for that, but it is a bit hidden.

You can create a TransitiveGraphCache, giving it a term to use for the base relation (e.g. your IsA) and a term to use for the direct (reduced) version of the relation. Then you could add all the data from your model in the TGC instance and use TGC.find with the direct relation to find all the direct links.

The trouble with this is that it is intended for internal use in the reasoners and so works at the Graph level (Nodes and Triples) instead of the Model level (RDFNodes and Statements).

Dave


Reply via email to