stream.println(" -> " + node.getMergedTo() + " " + node.getMergeDependency(false)); return;
stream.println(" -> " + node.getMergedTo() + " " + node.getMergeDependency(false)); return;
@Override public void addType(final ATermAppl x, final ATermAppl cParam, final DependencySet dsParam) { ATermAppl c = cParam; DependencySet ds = dsParam; c = ATermUtils.normalize(c); // when a type is being added to // an ABox that has already been completed, the _branch // of the dependency set will automatically be set to // the _current _branch. We need to set it to the initial // _branch number to make sure that this type assertion // will not be removed during backtracking final int remember = _branchIndex; setBranchIndex(DependencySet.NO_BRANCH); Individual node = getIndividual(x); node.addType(c, ds, false); while (node.isMerged()) { ds = ds.union(node.getMergeDependency(false), _doExplanation); node = (Individual) node.getMergedTo(); node.addType(c, ds, !node.isMerged()); } setBranchIndex(remember); }
@Override public void addType(final ATermAppl x, final ATermAppl cParam, final DependencySet dsParam) { ATermAppl c = cParam; DependencySet ds = dsParam; c = ATermUtils.normalize(c); // when a type is being added to // an ABox that has already been completed, the _branch // of the dependency set will automatically be set to // the _current _branch. We need to set it to the initial // _branch number to make sure that this type assertion // will not be removed during backtracking final int remember = _branchIndex; setBranchIndex(DependencySet.NO_BRANCH); Individual node = getIndividual(x); node.addType(c, ds, false); while (node.isMerged()) { ds = ds.union(node.getMergeDependency(false), _doExplanation); node = (Individual) node.getMergedTo(); node.addType(c, ds, !node.isMerged()); } setBranchIndex(remember); }
@Test public void instanceCheckForMergedNode() { classes(_D, _E); individuals(_a, _b, _c, _d, _e); _kb.addType(_a, oneOf(_b, _c)); _kb.addSubClass(_E, not(_D)); _kb.addType(_a, _D); assertTrue(_kb.isConsistent()); final ATermAppl mergedTo = _kb.getABox().getIndividual(_a).getMergedTo().getName(); _kb.addType(mergedTo, oneOf(_d, _e)); assertTrue(_kb.isConsistent()); assertTrue(_kb.isType(_a, not(_E))); }
@Test public void addClashingTypeToMergedNode() { classes(_A, _B, _C, _D); individuals(_a, _b, _c); // a is either b or c _kb.addType(_a, oneOf(_b, _c)); _kb.addType(_a, _A); _kb.addType(_b, _B); _kb.addType(_c, _C); assertTrue(_kb.isConsistent()); // we don't know which equality holds assertTrue(_kb.isType(_a, _A)); assertFalse(_kb.isType(_a, _B)); assertFalse(_kb.isType(_a, _C)); // get which merge was chosen final ATermAppl mergedTo = _kb.getABox().getIndividual(_a).getMergedTo().getName(); // add something to undo the merge if (mergedTo.equals(_b)) _kb.addType(_a, not(_B)); else _kb.addType(_a, not(_C)); assertTrue(_kb.isConsistent()); assertTrue(_kb.isType(_a, _A)); // there is now a single possibility for the merge if (mergedTo.equals(_b)) assertTrue(_kb.isType(_a, _C)); else assertTrue(_kb.isType(_a, _B)); }
@Test public void addEdgeToMergedSubjectWithExistingEdge() { objectProperties(_p); individuals(_a, _b, _c, _d, _e); // a is either b or c _kb.addType(_a, oneOf(_b, _c)); _kb.addType(_b, some(_p, oneOf(_d, _e))); _kb.addType(_c, some(_p, oneOf(_d, _e))); assertTrue(_kb.isConsistent()); // no edges to d assertFalse(_kb.hasPropertyValue(_a, _p, _d)); assertFalse(_kb.hasPropertyValue(_b, _p, _d)); assertFalse(_kb.hasPropertyValue(_c, _p, _d)); assertFalse(_kb.hasPropertyValue(_a, _p, _e)); assertFalse(_kb.hasPropertyValue(_b, _p, _e)); assertFalse(_kb.hasPropertyValue(_c, _p, _e)); final ATermAppl aMergedTo = _kb.getABox().getIndividual(_a).getMergedTo().getName(); final ATermAppl aMergedToSucc = _kb.getABox().getIndividual(aMergedTo).getOutEdges().edgeAt(0).getToName(); final ATermAppl aMergedToNotSucc = aMergedToSucc.equals(_d) ? _e : _d; _kb.addPropertyValue(_p, _a, aMergedToSucc); assertTrue(_kb.isConsistent()); // there is only an edge from a to aMergedToSucc assertTrue(_kb.hasPropertyValue(_a, _p, aMergedToSucc)); assertFalse(_kb.hasPropertyValue(_a, _p, aMergedToNotSucc)); assertFalse(_kb.hasPropertyValue(_b, _p, _d)); assertFalse(_kb.hasPropertyValue(_c, _p, _d)); assertFalse(_kb.hasPropertyValue(_b, _p, _e)); assertFalse(_kb.hasPropertyValue(_c, _p, _e)); }