if (equivalenceSet.size() <= 1) { representative = equivalenceSet.iterator().next(); DataRangeExpression first = equivalenceSet.iterator().next(); assert (first instanceof DataPropertyRangeExpression); DataPropertyRangeExpression firstp = (DataPropertyRangeExpression)first; throw new IllegalStateException("Unknown data property: " + prop); DataPropertyExpression propRep = vertex.getRepresentative(); representative = propRep.getRange(); equivalenceSet.setRepresentative(representative); if (representative instanceof OClass) equivalenceSet.setIndexed();
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 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 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 T getCanonicalForm(T v) { Equivalences<T> vs = fullVertexIndex.get(v); if (vs == null) return null; return vs.getRepresentative(); }
ObjectPropertyExpression rep = node.getRepresentative(); ObjectPropertyExpression repInv = rep.getInverse(); if (!node.contains(repInv)) reducedNode = new Equivalences<>(ImmutableSet.of(rep), rep, node.isIndexed()); else reducedNode = new Equivalences<>(ImmutableSet.of(rep, repInv), rep, node.isIndexed()); DataPropertyExpression rep = node.getRepresentative(); Equivalences<DataPropertyExpression> reducedNode = new Equivalences<>(ImmutableSet.of(rep), rep, node.isIndexed()); dataProperties.addVertex(reducedNode); ClassExpression rep = node.getRepresentative(); Equivalences<ClassExpression> reducedNode = new Equivalences<>(reduced.build(), rep, node.isIndexed()); classes.addVertex(reducedNode);
/** * 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; }
boolean couldBeGenerating = set.size() > 1 || subClasses.size() > 1; for (ClassExpression concept : set) { if (concept instanceof ObjectSomeValuesFrom && couldBeGenerating) {
r.setNumber(c); stronglyConnectedSets.add(new Equivalences<V>(L.build()));
@Override public T getCanonicalForm(T v) { Equivalences<T> vs = fullVertexIndex.get(v); if (vs == null) return null; return vs.getRepresentative(); }
ObjectPropertyExpression rep = node.getRepresentative(); ObjectPropertyExpression repInv = rep.getInverse(); if (!node.contains(repInv)) reducedNode = new Equivalences<>(ImmutableSet.of(rep), rep, node.isIndexed()); else reducedNode = new Equivalences<>(ImmutableSet.of(rep, repInv), rep, node.isIndexed()); DataPropertyExpression rep = node.getRepresentative(); Equivalences<DataPropertyExpression> reducedNode = new Equivalences<>(ImmutableSet.of(rep), rep, node.isIndexed()); dataProperties.addVertex(reducedNode); ClassExpression rep = node.getRepresentative(); Equivalences<ClassExpression> reducedNode = new Equivalences<>(reduced.build(), rep, node.isIndexed()); classes.addVertex(reducedNode);
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); }
r.setNumber(c); stronglyConnectedSets.add(new Equivalences<V>(L.build()));
if (equivalenceSet.size() <= 1) { representative = equivalenceSet.iterator().next(); DataRangeExpression first = equivalenceSet.iterator().next(); assert (first instanceof DataPropertyRangeExpression); DataPropertyRangeExpression firstp = (DataPropertyRangeExpression)first; throw new IllegalStateException("Unknown data property: " + prop); DataPropertyExpression propRep = vertex.getRepresentative(); representative = propRep.getRange(); equivalenceSet.setRepresentative(representative); if (representative instanceof OClass) equivalenceSet.setIndexed();
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 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(); }
if (equivalenceSet.size() <= 1) { representative = equivalenceSet.iterator().next(); ClassExpression first = equivalenceSet.iterator().next(); if (first instanceof ObjectSomeValuesFrom) { 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); equivalenceSet.setRepresentative(representative); if (representative instanceof OClass) equivalenceSet.setIndexed();
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(); }
if (equivalenceSet.size() <= 1) { representative = equivalenceSet.iterator().next(); ClassExpression first = equivalenceSet.iterator().next(); if (first instanceof ObjectSomeValuesFrom) { 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); equivalenceSet.setRepresentative(representative); if (representative instanceof OClass) equivalenceSet.setIndexed();
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); } } }