From 4013a9d33d0f1a06b87d12dd0543912c53bba137 Mon Sep 17 00:00:00 2001 From: yzhou Date: Tue, 28 Apr 2015 17:13:55 +0100 Subject: pass the wine realisation --- src/uk/ac/ox/cs/pagoda/approx/Clause.java | 91 ++++++++++++----------- src/uk/ac/ox/cs/pagoda/approx/RLPlusOntology.java | 31 +++++++- 2 files changed, 77 insertions(+), 45 deletions(-) (limited to 'src/uk/ac/ox/cs/pagoda/approx') diff --git a/src/uk/ac/ox/cs/pagoda/approx/Clause.java b/src/uk/ac/ox/cs/pagoda/approx/Clause.java index 9c3f5d0..29bc74e 100644 --- a/src/uk/ac/ox/cs/pagoda/approx/Clause.java +++ b/src/uk/ac/ox/cs/pagoda/approx/Clause.java @@ -68,7 +68,7 @@ public class Clause { getVariableOccurrence(var2atom, bodyAtoms); DLPredicate predicate; - Variable W = null; + Term W = null; Map nom2iri = new HashMap(); Map nom2datatype = new HashMap(); @@ -97,8 +97,7 @@ public class Clause { AtomicConcept concept = (AtomicConcept) predicate; Variable v = atom.getArgumentVariable(0); if (v == X) - subClasses.add(factory.getOWLClass(IRI.create(concept - .getIRI()))); + subClasses.add(factory.getOWLClass(IRI.create(concept.getIRI()))); else if (predicate.toString().startsWith(" set = varCliques.get(W); - if (set != null) - number = set.size(); - - if (var2atom.containsKey(W)) { - Atom tAtom = var2atom.get(W); - DLPredicate tPredicate = tAtom.getDLPredicate(); - if (tPredicate instanceof AtomicConcept) { - concept = (AtomicConcept) tPredicate; - clsExp = factory.getOWLClass(IRI.create(concept - .getIRI())); - if (headAtoms.contains(tAtom)) { - superClasses.add(factory.getOWLObjectAllValuesFrom( - roleExp, clsExp)); - subClasses.add(factory.getOWLObjectSomeValuesFrom( - roleExp, factory.getOWLThing())); - headAtoms.remove(tAtom); + else if (W instanceof Individual) + subClasses.add(factory.getOWLObjectHasValue(roleExp, factory.getOWLNamedIndividual(IRI.create(((Individual) W).getIRI())))); + else { + AtomicConcept concept; + OWLClassExpression clsExp = null; + int number = 1; + Set set = varCliques.get(W); + if (set != null) + number = set.size(); + + if (var2atom.containsKey(W)) { + Atom tAtom = var2atom.get(W); + DLPredicate tPredicate = tAtom.getDLPredicate(); + if (tPredicate instanceof AtomicConcept) { + concept = (AtomicConcept) tPredicate; + clsExp = factory.getOWLClass(IRI.create(concept + .getIRI())); + if (headAtoms.contains(tAtom)) { + superClasses.add(factory.getOWLObjectAllValuesFrom( + roleExp, clsExp)); + subClasses.add(factory.getOWLObjectSomeValuesFrom( + roleExp, factory.getOWLThing())); + headAtoms.remove(tAtom); + } else { + if (number == 1) + subClasses.add(factory + .getOWLObjectSomeValuesFrom(roleExp, + clsExp)); + else + subClasses.add(factory + .getOWLObjectMinCardinality(number, + roleExp, clsExp)); + } } else { - if (number == 1) - subClasses.add(factory - .getOWLObjectSomeValuesFrom(roleExp, - clsExp)); - else - subClasses.add(factory - .getOWLObjectMinCardinality(number, - roleExp, clsExp)); + Utility.logDebug(tAtom, "strange ... -___-|||"); } - } else { - Utility.logDebug(tAtom, "strange ... -___-|||"); } - } else { - if (number == 1) - subClasses.add(factory.getOWLObjectSomeValuesFrom( - roleExp, factory.getOWLThing())); - else - subClasses.add(factory.getOWLObjectMinCardinality( - number, roleExp)); + else { + if (number == 1) + subClasses.add(factory.getOWLObjectSomeValuesFrom( + roleExp, factory.getOWLThing())); + else + subClasses.add(factory.getOWLObjectMinCardinality( + number, roleExp)); + } } } } diff --git a/src/uk/ac/ox/cs/pagoda/approx/RLPlusOntology.java b/src/uk/ac/ox/cs/pagoda/approx/RLPlusOntology.java index a43d9af..a60b664 100644 --- a/src/uk/ac/ox/cs/pagoda/approx/RLPlusOntology.java +++ b/src/uk/ac/ox/cs/pagoda/approx/RLPlusOntology.java @@ -31,6 +31,8 @@ import org.semanticweb.owlapi.model.OWLDataMinCardinality; import org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom; import org.semanticweb.owlapi.model.OWLDataSomeValuesFrom; import org.semanticweb.owlapi.model.OWLDatatype; +import org.semanticweb.owlapi.model.OWLDifferentIndividualsAxiom; +import org.semanticweb.owlapi.model.OWLIndividual; import org.semanticweb.owlapi.model.OWLNamedIndividual; import org.semanticweb.owlapi.model.OWLObjectAllValuesFrom; import org.semanticweb.owlapi.model.OWLObjectComplementOf; @@ -46,6 +48,7 @@ import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; import org.semanticweb.owlapi.model.OWLOntologyStorageException; +import org.semanticweb.owlapi.model.OWLSameIndividualAxiom; import org.semanticweb.owlapi.profiles.OWL2RLProfile; import org.semanticweb.owlapi.profiles.OWLProfileReport; import org.semanticweb.owlapi.profiles.OWLProfileViolation; @@ -360,6 +363,9 @@ public class RLPlusOntology implements KnowledgeBase { Map complex2atomic= new HashMap(); OWLDatatype anyURI = factory.getOWLDatatype(IRI.create(Namespace.XSD_NS + "anyURI")); + OWLObjectProperty sameAs = factory.getOWLObjectProperty(IRI.create(Namespace.EQUALITY)); + OWLObjectProperty differentFrom = factory.getOWLObjectProperty(IRI.create(Namespace.INEQUALITY)); + for (OWLOntology imported: inputOntology.getImportsClosure()) for (OWLAxiom axiom: imported.getAxioms()) { if (axiom instanceof OWLClassAssertionAxiom) { @@ -381,10 +387,33 @@ public class RLPlusOntology implements KnowledgeBase { } } else if (axiom instanceof OWLObjectPropertyAssertionAxiom || axiom instanceof OWLDataPropertyAssertionAxiom || axiom instanceof OWLAnnotationAssertionAxiom) { - if (axiom.containsEntityInSignature(anyURI)) continue; + if (axiom.getDataPropertiesInSignature().contains(anyURI)) continue; flag = true; manager.addAxiom(aBox, axiom); } + else if (axiom instanceof OWLSameIndividualAxiom) { + OWLIndividual firstIndividual = null, previousIndividual = null, lastIndividual = null; + for (OWLIndividual next: ((OWLSameIndividualAxiom) axiom).getIndividuals()) { + if (firstIndividual == null) firstIndividual = previousIndividual = next; + else + manager.addAxiom(aBox, factory.getOWLObjectPropertyAssertionAxiom(sameAs, previousIndividual, next)); + previousIndividual = lastIndividual = next; + } + manager.addAxiom(aBox, factory.getOWLObjectPropertyAssertionAxiom(sameAs, lastIndividual, firstIndividual)); + } + else if (axiom instanceof OWLDifferentIndividualsAxiom) { + int index1 = 0, index2; + for (OWLIndividual individual1: ((OWLDifferentIndividualsAxiom) axiom).getIndividuals()) { + ++index1; + index2 = 0; + for (OWLIndividual individual2: ((OWLDifferentIndividualsAxiom) axiom).getIndividuals()) { + if (index2++ < index1) { + manager.addAxiom(aBox, factory.getOWLObjectPropertyAssertionAxiom(differentFrom, individual1, individual2)); + } + else break; + } + } + } else manager.addAxiom(tBox, axiom); } -- cgit v1.2.3