Some general utilities and algorithms to support developers working with the
general classes in the Jena ontology API. Warning these
utilities are experimental. Extensive testing has not yet
occurred (see org.apache.jena.ontology.impl.TestOntTools
in the
test area for basic unit tests),
and in particular performance testing has not been carried out yet.
Users are advised to exercise caution before relying on these utilities in
production code. Please send any comments or suggestions to the
Jena support email list.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
A simple representation of disjoint setsstatic class
Simple data structure mapping RDF nodes to disjoint sets, and pairs of resources to their LCA.static class
static class
A filter which accepts statements whose predicate matches one of a collection of predicates held by the filter object. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic OntTools.Path
Answer the shortest path from thestart
resource to theend
RDF node, such that every step on the path is accepted by the given filter.static OntClass
Answer the lowest common ancestor of two classes in a given ontology.static OntClass
Answer the lowest common ancestor of two classes, assuming that the given class is the root concept to start searching from.Answer a list of the named hierarchy roots of a givenOntModel
.
-
Constructor Details
-
OntTools
public OntTools()
-
-
Method Details
-
getLCA
Answer the lowest common ancestor of two classes in a given ontology. This is the class that is farthest from the root concept (defaulting to
owl:Thing
which is a super-class of bothu
andv
. The algorithm is based on Tarjan's off-line LCA. The current implementation expects that the given model:- is transitively closed over the
subClassOf
relation - can cheaply determine direct sub-class relations
Both of these conditions are true of the built-in Jena OWL reasoners, such as
OntModelSpec.OWL_MEM_MICRO_RULE_INF
, and external DL reasoners such as Pellet.- Parameters:
m
- The ontology model being queried to find the LCA, which should conform to the reasoner capabilities described aboveu
- An ontology classv
- An ontology class- Returns:
- The LCA of
u
andv
- Throws:
JenaException
- if the language profile of the given model does not define a top concept (e.g.owl:Thing
)
- is transitively closed over the
-
getLCA
Answer the lowest common ancestor of two classes, assuming that the given class is the root concept to start searching from. SeegetLCA(OntModel, OntClass, OntClass)
for details.- Parameters:
m
- The ontology model being queried to find the LCA, which should conform to the reasoner capabilities described aboveroot
- The root concept, which will be the starting point for the algorithmu
- An ontology classv
- An ontology class- Returns:
- The LCA of
u
andv
- Throws:
JenaException
- if the language profile of the given model does not define a top concept (e.g.owl:Thing
)
-
findShortestPath
public static OntTools.Path findShortestPath(Model m, Resource start, RDFNode end, Predicate<Statement> onPath) Answer the shortest path from the
start
resource to theend
RDF node, such that every step on the path is accepted by the given filter. A path is aList
of RDFStatement
s. The subject of the first statement in the list isstart
, and the object of the last statement in the list isend
.The
onPath
argument is aPredicate
, which accepts a statement and returns true if the statement should be considered to be on the path. To search for an unconstrained path, pass()->true
as an argument. To search for a path whose predicates match a fixed restricted set of property names, pass an instance ofOntTools.PredicatesFilter
.If there is more than one path of minimal length from
start
toend
, this method returns an arbitrary one. The algorithm is blind breadth-first search, with loop detection.- Parameters:
m
- The model in which we are seeking a pathstart
- The starting resourceend
- The end, or goal, nodeonPath
- A filter which determines whether a given statement can be considered part of the path- Returns:
- A path, consisting of a list of statements whose first subject is
start
, and whose last object isend
, or null if no such path exists.
-
namedHierarchyRoots
Answer a list of the named hierarchy roots of a givenOntModel
. This will be similar to the results ofOntModel.listHierarchyRootClasses()
, with the added constraint that every member of the returned iterator will be a named class, not an anonymous class expression. The named root classes are calculated from the root classes, by recursively replacing every anonymous class with its direct sub-classes. Thus it can be seen that the values in the list consists of the shallowest fringe of named classes in the hierarchy.- Parameters:
m
- An ontology model- Returns:
- A list of classes whose members are the named root classes of the
class hierarchy in
m
-