@Override public void visit(final OWLSubPropertyChainOfAxiom axiom) { final Set<Node> nodes = new HashSet<>(); for (final OWLObjectPropertyExpression p : axiom.getPropertyChain()) nodes.add(_graph.createEntityNode(p.getNamedProperty())); addOutputs(_graph.createAndNode(nodes), axiom); }
public void simplify() { collapseSCC(); removeRedundancies(); }
@Override public void visit(final OWLClass desc) { _node = desc.equals(OWL.Nothing) ? START_NODE : desc.equals(OWL.Thing) ? NULL_NODE : _graph.createEntityNode(desc); }
private class TopEvaluator implements OWLClassExpressionVisitor { private Node _node; public TopEvaluator() { } public Node evaluate(final OWLClassExpression desc) { // reset the result first _node = null; desc.accept(this); // a null value indicates error if (_node == null) throw new IllegalStateException("Evaluation returned null"); return _node; } @Override public void visit(final OWLClass desc) { _node = desc.equals(OWL.Thing) ? NULL_NODE : START_NODE; } @Override
@SuppressWarnings("unchecked") private void createGraph(final int n) { _graph = new ReachabilityGraph<>(); _nodes = new EntityNode[n]; for (int i = 0; i < n; i++) _nodes[i] = _graph.createEntityNode(OWL.Class("entity" + i)); }
protected void processEquivalent(final OWLAxiom axiom, final OWLClassExpression c1, final OWLClassExpression c2) { final Set<Node> nodes1 = new HashSet<>(); nodes1.add(_topEvaluator.evaluate(c1)); nodes1.add(_topEvaluator.evaluate(c2)); final Set<Node> nodes2 = new HashSet<>(); nodes2.add(_bottomEvaluator.evaluate(c1)); nodes2.add(_bottomEvaluator.evaluate(c2)); final Node or1 = _graph.createOrNode(nodes1); final Node or2 = _graph.createOrNode(nodes2); final Node result = _graph.createAndNode(SetUtils.create(or1, or2)); addOutputs(result, axiom); }
public Node createAndNode(final Set<Node> inputs) { if (inputs.isEmpty()) throw new IllegalArgumentException(); if (inputs.contains(getNullNode())) return getNullNode(); inputs.remove(getStartNode()); final int size = inputs.size(); if (size == 0) return getStartNode(); else if (size == 1) return inputs.iterator().next(); final AndNode andNode = new AndNode(_id++); for (final Node input : inputs) input.addOutput(andNode); return andNode; }
public boolean contains(final E entity) { return _graph.getNode(entity) != null; }
@Override public void visit(final OWLObjectIntersectionOf desc) { final Set<Node> inputNodes = desc.operands().map(this::evaluate).collect(Collectors.toSet()); if (!inputNodes.isEmpty()) _node = _graph.createAndNode(inputNodes); }
public ReachabilityGraph<AsOWLNamedIndividual> build() { _graph.simplify(); return _graph; } }
@Override public void visit(final OWLObjectIntersectionOf desc) { final Set<Node> inputNodes = desc.operands().map(this::evaluate).collect(Collectors.toSet()); _node = _graph.createOrNode(inputNodes); }
private void reset() { _activatedEntities = new HashSet<>(); _affectedNodes = new HashSet<>(); _waitingQueue = new LinkedList<>(); _waitingQueue.add(_graph.getStartNode()); }
public List<Set<EntityNode<E>>> computeSCC(final ReachabilityGraph<E> graph) { final Collection<EntityNode<E>> nodes = graph.getEntityNodes(); for (final Node node : nodes) { if (_nodeInfos.containsKey(node)) continue; computeSCC(node); } return _stronglyConnectedComponents; }
@Override public void visit(final OWLClass desc) { _node = desc.equals(OWL.Nothing) ? START_NODE : desc.equals(OWL.Thing) ? NULL_NODE : _graph.createEntityNode(desc); }
private class TopEvaluator implements OWLClassExpressionVisitor { private Node _node; public TopEvaluator() { } public Node evaluate(final OWLClassExpression desc) { // reset the result first _node = null; desc.accept(this); // a null value indicates error if (_node == null) throw new IllegalStateException("Evaluation returned null"); return _node; } @Override public void visit(final OWLClass desc) { _node = desc.equals(OWL.Thing) ? NULL_NODE : START_NODE; } @Override
@SuppressWarnings("unchecked") private void createGraph(final int n) { _graph = new ReachabilityGraph<>(); _entities = new OWLEntity[n]; _nodes = new EntityNode[n]; for (int i = 0; i < n; i++) { _entities[i] = OWL.Class("entity" + i); _nodes[i] = _graph.createEntityNode(_entities[i]); } }
protected void processEquivalent(final OWLAxiom axiom, final OWLClassExpression c1, final OWLClassExpression c2) { final Set<Node> nodes1 = new HashSet<>(); nodes1.add(_topEvaluator.evaluate(c1)); nodes1.add(_topEvaluator.evaluate(c2)); final Set<Node> nodes2 = new HashSet<>(); nodes2.add(_bottomEvaluator.evaluate(c1)); nodes2.add(_bottomEvaluator.evaluate(c2)); final Node or1 = _graph.createOrNode(nodes1); final Node or2 = _graph.createOrNode(nodes2); final Node result = _graph.createAndNode(SetUtils.create(or1, or2)); addOutputs(result, axiom); }
public Node createAndNode(final Set<Node> inputs) { if (inputs.isEmpty()) throw new IllegalArgumentException(); if (inputs.contains(getNullNode())) return getNullNode(); inputs.remove(getStartNode()); final int size = inputs.size(); if (size == 0) return getStartNode(); else if (size == 1) return inputs.iterator().next(); final AndNode andNode = new AndNode(_id++); for (final Node input : inputs) input.addOutput(andNode); return andNode; }
public boolean contains(final E entity) { return _graph.getNode(entity) != null; }