public void visit(SWRLClassAtom atom) { if (!(atom.getArgument() instanceof SWRLIndividualArgument)) throw new IllegalArgumentException("A SWRL rule contains a head atom "+atom+" with a variable that does not occur in the body. "); OWLIndividual ind=((SWRLIndividualArgument)atom.getArgument()).getIndividual(); if (ind.isAnonymous()) throwAnonIndError(atom); if (!isSimple(atom.getPredicate())) { OWLClassExpression definition=getDefinitionFor(atom.getPredicate(),m_alreadyExists); if (!m_alreadyExists[0]) m_newInclusions.add(new OWLClassExpression[] { negative(definition),atom.getPredicate() }); addFact(m_factory.getOWLClassAssertionAxiom(definition,ind.asOWLNamedIndividual())); } else addFact(m_factory.getOWLClassAssertionAxiom(atom.getPredicate(),ind.asOWLNamedIndividual())); }
public void visit(SWRLObjectPropertyAtom atom) { if (!(atom.getFirstArgument() instanceof SWRLIndividualArgument) || !(atom.getSecondArgument() instanceof SWRLIndividualArgument)) throwVarError(atom); OWLObjectPropertyExpression ope=atom.getPredicate().getSimplified(); OWLIndividual first=((SWRLIndividualArgument)atom.getFirstArgument()).getIndividual(); OWLIndividual second=((SWRLIndividualArgument)atom.getSecondArgument()).getIndividual(); if (first.isAnonymous() || second.isAnonymous()) throwAnonIndError(atom); if (ope.isAnonymous()) addFact(m_factory.getOWLObjectPropertyAssertionAxiom(ope.getNamedProperty(),second.asOWLNamedIndividual(),first.asOWLNamedIndividual())); else addFact(m_factory.getOWLObjectPropertyAssertionAxiom(ope.asOWLObjectProperty(),first.asOWLNamedIndividual(),second.asOWLNamedIndividual())); }
public void visit(SWRLDataPropertyAtom atom) { if (!(atom.getSecondArgument() instanceof SWRLLiteralArgument)) throwVarError(atom); if (!(atom.getFirstArgument() instanceof SWRLIndividualArgument)) throwVarError(atom); OWLIndividual ind=((SWRLIndividualArgument)atom.getFirstArgument()).getIndividual(); if (ind.isAnonymous()) throwAnonIndError(atom); OWLLiteral lit=((SWRLLiteralArgument)atom.getSecondArgument()).getLiteral(); addFact(m_factory.getOWLDataPropertyAssertionAxiom(atom.getPredicate().asOWLDataProperty(),ind.asOWLNamedIndividual(),lit)); }
public void visit(SWRLSameIndividualAtom atom) { Set<OWLNamedIndividual> inds=new HashSet<OWLNamedIndividual>(); for (SWRLArgument arg : atom.getAllArguments()) { if (!(arg instanceof SWRLIndividualArgument)) throwVarError(atom); OWLIndividual ind=((SWRLIndividualArgument)arg).getIndividual(); if (ind.isAnonymous()) throwAnonIndError(atom); inds.add(ind.asOWLNamedIndividual()); } addFact(m_factory.getOWLSameIndividualAxiom(inds)); }
public void visit(SWRLDifferentIndividualsAtom atom) { Set<OWLNamedIndividual> inds=new HashSet<OWLNamedIndividual>(); for (SWRLArgument arg : atom.getAllArguments()) { if (!(arg instanceof SWRLIndividualArgument)) throwVarError(atom); OWLIndividual ind=((SWRLIndividualArgument)arg).getIndividual(); if (ind.isAnonymous()) throwAnonIndError(atom); inds.add(ind.asOWLNamedIndividual()); } addFact(m_factory.getOWLDifferentIndividualsAxiom(inds)); }
@Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof SWRLIndividualArgument)) { return false; } SWRLIndividualArgument other = (SWRLIndividualArgument) obj; return other.getIndividual().equals(getIndividual()); }
public void visit(SWRLIndividualArgument argument) { }
public void visit(SWRLRule rule) { // Process head one-by-one and thus break up the conjunction in the head. for (SWRLAtom headAtom : rule.getHead()) { m_individualsToVariables.clear(); m_bodyAtoms.clear(); m_headAtoms.clear(); m_variableRepresentative.clear(); m_normalizedBodyAtoms.clear(); m_normalizedHeadAtoms.clear(); m_bodyDataRangeVariables.clear(); m_headDataRangeVariables.clear(); // Initialize body with all atoms, and initialize head with just the atom we are processing. m_bodyAtoms.addAll(rule.getBody()); m_headAtoms.add(headAtom); // First process sameIndividual in the body to set up variable normalizations. for (SWRLAtom atom : rule.getBody()) { if (atom instanceof SWRLSameIndividualAtom) { m_bodyAtoms.remove(atom); SWRLSameIndividualAtom sameIndividualAtom=(SWRLSameIndividualAtom)atom; SWRLVariable variable1=getVariableFor(sameIndividualAtom.getFirstArgument()); SWRLIArgument argument2=sameIndividualAtom.getSecondArgument(); if (argument2 instanceof SWRLVariable) m_variableRepresentative.put((SWRLVariable)argument2,variable1); else { OWLIndividual individual=((SWRLIndividualArgument)argument2).getIndividual(); if (individual.isAnonymous()) throw new IllegalArgumentException("Internal error: Rules with anonymous individuals are not supported. "); m_individualsToVariables.put(individual.asOWLNamedIndividual(),variable1); m_bodyAtoms.add(m_factory.getSWRLClassAtom(m_factory.getOWLObjectOneOf(individual),variable1)); } } } // Now process head atoms; this might increase the number of body atoms. m_isPositive=true; while (!m_headAtoms.isEmpty()) m_headAtoms.remove(0).accept(this); // Now process body atoms. m_isPositive=false; while (!m_bodyAtoms.isEmpty()) m_bodyAtoms.remove(0).accept(this); // Do some checking and return the rule. if (!m_bodyDataRangeVariables.containsAll(m_headDataRangeVariables)) throw new IllegalArgumentException("A SWRL rule contains data range variables in the head, but not in the body, and this is not supported."); m_rules.add(new OWLAxioms.DisjunctiveRule(m_normalizedBodyAtoms.toArray(new SWRLAtom[m_normalizedBodyAtoms.size()]),m_normalizedHeadAtoms.toArray(new SWRLAtom[m_normalizedHeadAtoms.size()]))); } }
public void visit(SWRLIndividualArgument argument) { // nothing to do }
public Atom visit(SWRLIndividualArgument atom) { throw new IllegalStateException("Internal error: this part of the code is unused."); }
@Override public O visit(SWRLIndividualArgument node) { return doDefault(node); }
@Override public void visit(SWRLIndividualArgument node) { handleDefault(node); }
@Override public void visit(SWRLIndividualArgument node) { type = RULE_OBJECT_TYPE_INDEX_BASE + 7; }
@Override public void visit(SWRLIndividualArgument node) {}
@Override public void visit(SWRLIndividualArgument node) { hashCode = primes[68]; hashCode = hashCode * MULT + node.getIndividual().hashCode(); }
@Override public SWRLIndividualArgument visit(SWRLIndividualArgument node) { return node; }
@Override public void visit(@Nonnull SWRLIndividualArgument node) { node.getIndividual().accept(this); }
@Override protected int compareObjectOfSameType(OWLObject object) { return individual.compareTo(((SWRLIndividualArgument) object) .getIndividual()); }
@Override protected void writeObject(SWRLIndividualArgument object, BinaryOWLOutputStream outputStream) throws IOException { outputStream.writeOWLObject(object.getIndividual()); }
@Override protected SWRLIndividualArgument readObject(BinaryOWLInputStream inputStream) throws IOException, BinaryOWLParseException { OWLIndividual individual = inputStream.readOWLObject(); return inputStream.getDataFactory().getSWRLIndividualArgument(individual); }