@Override public T getCanonicalForm(T v) { Equivalences<T> vs = fullVertexIndex.get(v); if (vs == null) return null; return vs.getRepresentative(); }
@Override public T getCanonicalForm(T v) { Equivalences<T> vs = fullVertexIndex.get(v); if (vs == null) return null; return vs.getRepresentative(); }
private ImmutableMap<IRI, Datatype> getPartialPredicateToDatatypeMap(Equivalences<DataRangeExpression> nodeSet, ClassifiedTBox reasoner) { DataRangeExpression node = nodeSet.getRepresentative(); return ImmutableMap.<IRI, Datatype>builder() .putAll(getDescendentNodesPartialMap(reasoner, node, nodeSet)) .putAll(getEquivalentNodesPartialMap(node, nodeSet)) .build(); }
private ImmutableMap<Predicate, Datatype> getPartialPredicateToDatatypeMap(Equivalences<DataRangeExpression> nodeSet, ClassifiedTBox reasoner) { DataRangeExpression node = nodeSet.getRepresentative(); return ImmutableMap.<Predicate, Datatype>builder() .putAll(getDescendentNodesPartialMap(reasoner, node, nodeSet)) .putAll(getEquivalentNodesPartialMap(node, nodeSet)) .build(); }
/** * */ @Override public Set<T> getSubRepresentatives(T v) { Equivalences<T> eq = vertexIndex.get(v); if (eq == null) return Collections.singleton(v); Set<T> result = cacheSubRep.get(eq.getRepresentative()); if (result == null) { result = new LinkedHashSet<T>(); BreadthFirstIterator<Equivalences<T>, DefaultEdge> iterator = new BreadthFirstIterator<Equivalences<T>, DefaultEdge>( new EdgeReversedGraph<>(dag), eq); while (iterator.hasNext()) { Equivalences<T> child = iterator.next(); result.add(child.getRepresentative()); } result = Collections.unmodifiableSet(result); cacheSubRep.put(eq.getRepresentative(), result); } return result; }
public static <T> EquivalencesDAGImpl<T> reduce(EquivalencesDAGImpl<T> source, SimpleDirectedGraph <Equivalences<T>,DefaultEdge> target) { ImmutableMap.Builder<T, Equivalences<T>> vertexIndexBuilder = new ImmutableMap.Builder<>(); for (Equivalences<T> tSet : target.vertexSet()) { for (T s : source.getVertex(tSet.getRepresentative())) if (tSet.contains(s)) vertexIndexBuilder.put(s, tSet); } ImmutableMap<T, Equivalences<T>> vertexIndex = vertexIndexBuilder.build(); // create induced edges in the target graph for (Equivalences<T> sSet : source) { Equivalences<T> tSet = vertexIndex.get(sSet.getRepresentative()); for (Equivalences<T> sSetSub : source.getDirectSub(sSet)) { Equivalences<T> tSetSub = vertexIndex.get(sSetSub.getRepresentative()); target.addEdge(tSetSub, tSet); } } return new EquivalencesDAGImpl<>(null, target, vertexIndex, source.vertexIndex); }
/** * */ @Override public Set<T> getSubRepresentatives(T v) { Equivalences<T> eq = vertexIndex.get(v); if (eq == null) return Collections.singleton(v); Set<T> result = cacheSubRep.get(eq.getRepresentative()); if (result == null) { result = new LinkedHashSet<T>(); BreadthFirstIterator<Equivalences<T>, DefaultEdge> iterator = new BreadthFirstIterator<Equivalences<T>, DefaultEdge>( new EdgeReversedGraph<>(dag), eq); while (iterator.hasNext()) { Equivalences<T> child = iterator.next(); result.add(child.getRepresentative()); } result = Collections.unmodifiableSet(result); cacheSubRep.put(eq.getRepresentative(), result); } return result; }
public static <T> EquivalencesDAGImpl<T> reduce(EquivalencesDAGImpl<T> source, SimpleDirectedGraph <Equivalences<T>,DefaultEdge> target) { ImmutableMap.Builder<T, Equivalences<T>> vertexIndexBuilder = new ImmutableMap.Builder<>(); for (Equivalences<T> tSet : target.vertexSet()) { for (T s : source.getVertex(tSet.getRepresentative())) if (tSet.contains(s)) vertexIndexBuilder.put(s, tSet); } ImmutableMap<T, Equivalences<T>> vertexIndex = vertexIndexBuilder.build(); // create induced edges in the target graph for (Equivalences<T> sSet : source) { Equivalences<T> tSet = vertexIndex.get(sSet.getRepresentative()); for (Equivalences<T> sSetSub : source.getDirectSub(sSet)) { Equivalences<T> tSetSub = vertexIndex.get(sSetSub.getRepresentative()); target.addEdge(tSetSub, tSet); } } return new EquivalencesDAGImpl<>(null, target, vertexIndex, source.vertexIndex); }
private static void chooseDataPropertyRepresentatives(EquivalencesDAGImpl<DataPropertyExpression> dag) { for (Equivalences<DataPropertyExpression> set : dag) { // skip if has already been done if (set.getRepresentative() != null) continue; DataPropertyExpression rep = Collections.min(set.getMembers(), dataPropertyComparator); set.setIndexed(); set.setRepresentative(rep); } }
private static void chooseDataPropertyRepresentatives(EquivalencesDAGImpl<DataPropertyExpression> dag) { for (Equivalences<DataPropertyExpression> set : dag) { // skip if has already been done if (set.getRepresentative() != null) continue; DataPropertyExpression rep = Collections.min(set.getMembers(), dataPropertyComparator); set.setIndexed(); set.setRepresentative(rep); } }
public DefaultDirectedGraph<T,DefaultEdge> getGraph() { if (graph == null) { graph = new DefaultDirectedGraph<>(DefaultEdge.class); for (Equivalences<T> node : dag.vertexSet()) { for (T v : node) graph.addVertex(v); for (T v : node) { graph.addEdge(v, node.getRepresentative()); graph.addEdge(node.getRepresentative(), v); } } for (DefaultEdge edge : dag.edgeSet()) graph.addEdge(dag.getEdgeSource(edge).getRepresentative(), dag.getEdgeTarget(edge).getRepresentative()); } return graph; }
public DefaultDirectedGraph<T,DefaultEdge> getGraph() { if (graph == null) { graph = new DefaultDirectedGraph<>(DefaultEdge.class); for (Equivalences<T> node : dag.vertexSet()) { for (T v : node) graph.addVertex(v); for (T v : node) { graph.addEdge(v, node.getRepresentative()); graph.addEdge(node.getRepresentative(), v); } } for (DefaultEdge edge : dag.edgeSet()) graph.addEdge(dag.getEdgeSource(edge).getRepresentative(), dag.getEdgeTarget(edge).getRepresentative()); } return graph; }
/** * Constructor for the NamedDAG * @param dag the DAG from which we want to keep only the named descriptions */ public static <T> SimpleDirectedGraph <T,DefaultEdge> getNamedDAG(EquivalencesDAG<T> dag) { SimpleDirectedGraph<T,DefaultEdge> namedDAG = new SimpleDirectedGraph<>(DefaultEdge.class); for (Equivalences<T> v : dag) namedDAG.addVertex(v.getRepresentative()); for (Equivalences<T> s : dag) for (Equivalences<T> t : dag.getDirectSuper(s)) namedDAG.addEdge(s.getRepresentative(), t.getRepresentative()); for (Equivalences<T> v : dag) if (!v.isIndexed()) { // eliminate node for (DefaultEdge incEdge : namedDAG.incomingEdgesOf(v.getRepresentative())) { T source = namedDAG.getEdgeSource(incEdge); for (DefaultEdge outEdge : namedDAG.outgoingEdgesOf(v.getRepresentative())) { T target = namedDAG.getEdgeTarget(outEdge); namedDAG.addEdge(source, target); } } namedDAG.removeVertex(v.getRepresentative()); // removes all adjacent edges as well } return namedDAG; }
throw new IllegalStateException("Unknown data property: " + prop); DataPropertyExpression propRep = vertex.getRepresentative(); representative = propRep.getRange();
throw new IllegalStateException("Unknown data property: " + prop); DataPropertyExpression propRep = vertex.getRepresentative(); representative = propRep.getRange();
ObjectSomeValuesFrom firstp = (ObjectSomeValuesFrom)first; ObjectPropertyExpression prop = firstp.getProperty(); ObjectPropertyExpression propRep = objectPropertyDAG.getVertex(prop).getRepresentative(); representative = propRep.getDomain(); DataSomeValuesFrom firstp = (DataSomeValuesFrom)first; DataPropertyExpression prop = firstp.getProperty(); DataPropertyExpression propRep = dataPropertyDAG.getVertex(prop).getRepresentative(); representative = propRep.getDomainRestriction(DatatypeImpl.rdfsLiteral);
ObjectSomeValuesFrom firstp = (ObjectSomeValuesFrom)first; ObjectPropertyExpression prop = firstp.getProperty(); ObjectPropertyExpression propRep = objectPropertyDAG.getVertex(prop).getRepresentative(); representative = propRep.getDomain(); DataSomeValuesFrom firstp = (DataSomeValuesFrom)first; DataPropertyExpression prop = firstp.getProperty(); DataPropertyExpression propRep = dataPropertyDAG.getVertex(prop).getRepresentative(); representative = propRep.getDomainRestriction(DatatypeImpl.rdfsLiteral);
DataPropertyExpression representative = propertySet.getRepresentative();
private static void chooseObjectPropertyRepresentatives(EquivalencesDAGImpl<ObjectPropertyExpression> dag) { for (Equivalences<ObjectPropertyExpression> set : dag) { // skip if has already been done if (set.getRepresentative() != null) continue; ObjectPropertyExpression rep = Collections.min(set.getMembers(), objectPropertyComparator); ObjectPropertyExpression repInv = rep.getInverse(); Equivalences<ObjectPropertyExpression> setInv = dag.getVertex(repInv); if (rep.isInverse()) { repInv = Collections.min(setInv.getMembers(), objectPropertyComparator); rep = repInv.getInverse(); setInv.setIndexed(); } else set.setIndexed(); set.setRepresentative(rep); if (!set.contains(repInv)) { // if not symmetric // (each set either consists of symmetric properties // or none of the properties in the set is symmetric) setInv.setRepresentative(repInv); } } }
private static void chooseObjectPropertyRepresentatives(EquivalencesDAGImpl<ObjectPropertyExpression> dag) { for (Equivalences<ObjectPropertyExpression> set : dag) { // skip if has already been done if (set.getRepresentative() != null) continue; ObjectPropertyExpression rep = Collections.min(set.getMembers(), objectPropertyComparator); ObjectPropertyExpression repInv = rep.getInverse(); Equivalences<ObjectPropertyExpression> setInv = dag.getVertex(repInv); if (rep.isInverse()) { repInv = Collections.min(setInv.getMembers(), objectPropertyComparator); rep = repInv.getInverse(); setInv.setIndexed(); } else set.setIndexed(); set.setRepresentative(rep); if (!set.contains(repInv)) { // if not symmetric // (each set either consists of symmetric properties // or none of the properties in the set is symmetric) setInv.setRepresentative(repInv); } } }