/** * @deprecated As of release 1.3, replaced by {@link #precomputeInferences(InferenceType... inferenceTypes)} with inference type CLASS_HIERARCHY */ @Deprecated public void classify() { classifyClasses(); } public void classifyClasses() {
public Node<OWLClass> getUnsatisfiableClasses() { classifyClasses(); HierarchyNode<AtomicConcept> node=m_atomicConceptHierarchy.getBottomNode(); return atomicConceptHierarchyNodeToNode(node); } public NodeSet<OWLClass> getDisjointClasses(OWLClassExpression classExpression) {
@Override public Node<OWLClass> getBottomClassNode() { classifyClasses(); return atomicConceptHierarchyNodeToNode(m_atomicConceptHierarchy.getBottomNode()); } @Override
public Node<OWLClass> getTopClassNode() { classifyClasses(); return atomicConceptHierarchyNodeToNode(m_atomicConceptHierarchy.getTopNode()); } public Node<OWLClass> getBottomClassNode() {
@Override public Node<OWLClass> getUnsatisfiableClasses() { classifyClasses(); HierarchyNode<AtomicConcept> node=m_atomicConceptHierarchy.getBottomNode(); return atomicConceptHierarchyNodeToNode(node); } @Override
@Override public Node<OWLClass> getTopClassNode() { classifyClasses(); return atomicConceptHierarchyNodeToNode(m_atomicConceptHierarchy.getTopNode()); } @Override
public Node<OWLClass> getBottomClassNode() { classifyClasses(); return atomicConceptHierarchyNodeToNode(m_atomicConceptHierarchy.getBottomNode()); } public boolean isSatisfiable(OWLClassExpression classExpression) {
protected void realise() { checkPreConditions(); if (m_dlOntology.getAllIndividuals().size()>0) { classifyClasses(); initialiseClassInstanceManager(); m_instanceManager.realize(m_configuration.reasonerProgressMonitor); } } public void realiseObjectProperties() {
protected void realise() { checkPreConditions(); if (!m_dlOntology.getAllIndividuals().isEmpty()) { classifyClasses(); initialiseClassInstanceManager(); m_instanceManager.realize(m_configuration.reasonerProgressMonitor); } } /**
public void precomputeDisjointClasses() { checkPreConditions(); if (!m_isConsistent) return; if (m_atomicConceptHierarchy==null || m_directDisjointClasses.keySet().size()<m_atomicConceptHierarchy.getAllNodesSet().size()-2) { classifyClasses(); Set<HierarchyNode<AtomicConcept>> nodes=new HashSet<HierarchyNode<AtomicConcept>>(m_atomicConceptHierarchy.getAllNodes()); nodes.remove(m_atomicConceptHierarchy.getTopNode()); nodes.remove(m_atomicConceptHierarchy.getBottomNode()); nodes.removeAll(m_directDisjointClasses.keySet()); int steps=nodes.size(); int step=0; if (m_configuration.reasonerProgressMonitor!=null) m_configuration.reasonerProgressMonitor.reasonerTaskStarted("Compute disjoint classes"); for (HierarchyNode<AtomicConcept> node : nodes) { getDisjointConceptNodes(node); if (m_configuration.reasonerProgressMonitor!=null) m_configuration.reasonerProgressMonitor.reasonerTaskProgressChanged(++step,steps); } if (m_configuration.reasonerProgressMonitor!=null) m_configuration.reasonerProgressMonitor.reasonerTaskStopped(); } } protected HierarchyNode<AtomicConcept> getHierarchyNode(OWLClassExpression classExpression) {
/** * Precompute disjoint classes. */ public void precomputeDisjointClasses() { checkPreConditions(); if (!m_isConsistent.booleanValue()) return; if (m_atomicConceptHierarchy==null || m_directDisjointClasses.size()<m_atomicConceptHierarchy.getAllNodesSet().size()-2) { classifyClasses(); Set<HierarchyNode<AtomicConcept>> nodes=new HashSet<>(m_atomicConceptHierarchy.getAllNodes()); nodes.remove(m_atomicConceptHierarchy.getTopNode()); nodes.remove(m_atomicConceptHierarchy.getBottomNode()); nodes.removeAll(m_directDisjointClasses.keySet()); int steps=nodes.size(); int step=0; if (m_configuration.reasonerProgressMonitor!=null) m_configuration.reasonerProgressMonitor.reasonerTaskStarted("Compute disjoint classes"); for (HierarchyNode<AtomicConcept> node : nodes) { getDisjointConceptNodes(node); if (m_configuration.reasonerProgressMonitor!=null) m_configuration.reasonerProgressMonitor.reasonerTaskProgressChanged(++step,steps); } if (m_configuration.reasonerProgressMonitor!=null) m_configuration.reasonerProgressMonitor.reasonerTaskStopped(); } } protected HierarchyNode<AtomicConcept> getHierarchyNode(OWLClassExpression classExpression) {
public NodeSet<OWLClass> getTypes(OWLNamedIndividual namedIndividual,boolean direct) { checkPreConditions(namedIndividual); Set<HierarchyNode<AtomicConcept>> result; if (!isDefined(namedIndividual)) { classifyClasses(); result=new HashSet<HierarchyNode<AtomicConcept>>(); result.add(m_atomicConceptHierarchy.getTopNode()); } else { if (direct) classifyClasses(); initialiseClassInstanceManager(); if (direct) m_instanceManager.setToClassifiedConceptHierarchy(m_atomicConceptHierarchy); result=m_instanceManager.getTypes(H(namedIndividual),direct); } return atomicConceptHierarchyNodesToNodeSet(result); } public boolean hasType(OWLNamedIndividual namedIndividual,OWLClassExpression type,boolean direct) {
@Override public NodeSet<OWLClass> getTypes(OWLNamedIndividual namedIndividual,boolean direct) { checkPreConditions(namedIndividual); Set<HierarchyNode<AtomicConcept>> result; if (!isDefined(namedIndividual)) { classifyClasses(); result=new HashSet<>(); result.add(m_atomicConceptHierarchy.getTopNode()); } else { if (direct) classifyClasses(); initialiseClassInstanceManager(); if (direct) m_instanceManager.setToClassifiedConceptHierarchy(m_atomicConceptHierarchy); result=m_instanceManager.getTypes(H(namedIndividual),direct); } return atomicConceptHierarchyNodesToNodeSet(result); } /**
public NodeSet<OWLClass> getObjectPropertyRanges(OWLObjectPropertyExpression propertyExpression,boolean direct) { checkPreConditions(propertyExpression); classifyClasses(); if (!isConsistent()) return new OWLClassNodeSet(getBottomClassNode());
/** * Writes out the hierarchies quickly * * @param out * - the printwriter that is used to output the hierarchies * @param classes * - if true, the class hierarchy is printed * @param objectProperties * - if true, the object property hierarchy is printed * @param dataProperties * - if true, the data property hierarchy is printed */ public void dumpHierarchies(PrintWriter out,boolean classes,boolean objectProperties,boolean dataProperties) { HierarchyDumperFSS printer=new HierarchyDumperFSS(out); if (classes) { classifyClasses(); printer.printAtomicConceptHierarchy(m_atomicConceptHierarchy); } if (objectProperties) { classifyObjectProperties(); printer.printObjectPropertyHierarchy(m_objectRoleHierarchy); } if (dataProperties) { classifyDataProperties(); printer.printDataPropertyHierarchy(m_dataRoleHierarchy); } }
/** * Writes out the hierarchies quickly * * @param out * - the printwriter that is used to output the hierarchies * @param classes * - if true, the class hierarchy is printed * @param objectProperties * - if true, the object property hierarchy is printed * @param dataProperties * - if true, the data property hierarchy is printed */ public void dumpHierarchies(PrintWriter out,boolean classes,boolean objectProperties,boolean dataProperties) { HierarchyDumperFSS printer=new HierarchyDumperFSS(out); if (classes) { classifyClasses(); printer.printAtomicConceptHierarchy(m_atomicConceptHierarchy); } if (objectProperties) { classifyObjectProperties(); printer.printObjectPropertyHierarchy(m_objectRoleHierarchy); } if (dataProperties) { classifyDataProperties(); printer.printDataPropertyHierarchy(m_dataRoleHierarchy); } }
protected HierarchyNode<AtomicConcept> getHierarchyNode(OWLClassExpression classExpression) { checkPreConditions(classExpression); classifyClasses(); if (!isConsistent()) return m_atomicConceptHierarchy.getBottomNode(); else if (classExpression instanceof OWLClass) { AtomicConcept atomicConcept=H((OWLClass)classExpression); HierarchyNode<AtomicConcept> node=m_atomicConceptHierarchy.getNodeForElement(atomicConcept); if (node==null) node=new HierarchyNode<>(atomicConcept,Collections.singleton(atomicConcept),Collections.singleton(m_atomicConceptHierarchy.getTopNode()),Collections.singleton(m_atomicConceptHierarchy.getBottomNode())); return node; } else { OWLDataFactory factory=getDataFactory(); OWLClass queryConcept=factory.getOWLClass(IRI.create("internal:query-concept")); OWLAxiom classDefinitionAxiom=factory.getOWLEquivalentClassesAxiom(queryConcept,classExpression); final Tableau tableau=getTableau(classDefinitionAxiom); HierarchySearch.Relation<AtomicConcept> hierarchyRelation=(parent, child) ->{ Individual freshIndividual=Individual.createAnonymous("fresh-individual"); return !tableau.isSatisfiable(true,Collections.singleton(Atom.create(child,freshIndividual)),null,null,Collections.singleton(Atom.create(parent,freshIndividual)),null,ReasoningTaskDescription.isConceptSubsumedBy(child,parent)); }; HierarchyNode<AtomicConcept> extendedHierarchy=HierarchySearch.findPosition(hierarchyRelation,AtomicConcept.create("internal:query-concept"),m_atomicConceptHierarchy.getTopNode(),m_atomicConceptHierarchy.getBottomNode()); tableau.clearAdditionalDLOntology(); return extendedHierarchy; } }
protected HierarchyNode<AtomicConcept> getHierarchyNode(OWLClassExpression classExpression) { checkPreConditions(classExpression); classifyClasses(); if (!isConsistent()) return m_atomicConceptHierarchy.getBottomNode(); else if (classExpression instanceof OWLClass) { AtomicConcept atomicConcept=H((OWLClass)classExpression); HierarchyNode<AtomicConcept> node=m_atomicConceptHierarchy.getNodeForElement(atomicConcept); if (node==null) node=new HierarchyNode<AtomicConcept>(atomicConcept,Collections.singleton(atomicConcept),Collections.singleton(m_atomicConceptHierarchy.getTopNode()),Collections.singleton(m_atomicConceptHierarchy.getBottomNode())); return node; } else { OWLDataFactory factory=getDataFactory(); OWLClass queryConcept=factory.getOWLClass(IRI.create("internal:query-concept")); OWLAxiom classDefinitionAxiom=factory.getOWLEquivalentClassesAxiom(queryConcept,classExpression); final Tableau tableau=getTableau(classDefinitionAxiom); HierarchySearch.Relation<AtomicConcept> hierarchyRelation=new HierarchySearch.Relation<AtomicConcept>() { public boolean doesSubsume(AtomicConcept parent,AtomicConcept child) { Individual freshIndividual=Individual.createAnonymous("fresh-individual"); return !tableau.isSatisfiable(true,Collections.singleton(Atom.create(child,freshIndividual)),null,null,Collections.singleton(Atom.create(parent,freshIndividual)),null,ReasoningTaskDescription.isConceptSubsumedBy(child,parent)); } }; HierarchyNode<AtomicConcept> extendedHierarchy=HierarchySearch.findPosition(hierarchyRelation,AtomicConcept.create("internal:query-concept"),m_atomicConceptHierarchy.getTopNode(),m_atomicConceptHierarchy.getBottomNode()); tableau.clearAdditionalDLOntology(); return extendedHierarchy; } }
if (type instanceof OWLClass) { if (direct) classifyClasses(); initialiseClassInstanceManager(); if (direct)
public boolean hasType(OWLNamedIndividual namedIndividual,OWLClassExpression type,boolean direct) { checkPreConditions(namedIndividual,type); if (!m_isConsistent) return true; if (!isDefined(namedIndividual)) return getEquivalentClasses(type).contains(m_rootOntology.getOWLOntologyManager().getOWLDataFactory().getOWLThing()); else { if (type instanceof OWLClass) { if (direct) classifyClasses(); initialiseClassInstanceManager(); if (direct) m_instanceManager.setToClassifiedConceptHierarchy(m_atomicConceptHierarchy); return m_instanceManager.hasType(H(namedIndividual),H((OWLClass)type),direct); } else { OWLDataFactory factory=getDataFactory(); OWLAxiom negatedAssertionAxiom=factory.getOWLClassAssertionAxiom(type.getObjectComplementOf(),namedIndividual); Tableau tableau=getTableau(negatedAssertionAxiom); boolean result=tableau.isSatisfiable(true,true,null,null,null,null,null,ReasoningTaskDescription.isInstanceOf(namedIndividual,type)); tableau.clearAdditionalDLOntology(); return !result; } } } public NodeSet<OWLNamedIndividual> getInstances(OWLClassExpression classExpression,boolean direct) {