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 +++++++- .../ac/ox/cs/pagoda/query/rollup/QueryGraph.java | 10 ++- .../ox/cs/pagoda/reasoner/ConsistencyManager.java | 2 +- .../ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java | 7 +- .../ox/cs/pagoda/reasoner/full/HermitChecker.java | 55 +++++++------ src/uk/ac/ox/cs/pagoda/rules/Program.java | 4 +- 7 files changed, 120 insertions(+), 80 deletions(-) (limited to 'src/uk/ac/ox/cs/pagoda') 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); } diff --git a/src/uk/ac/ox/cs/pagoda/query/rollup/QueryGraph.java b/src/uk/ac/ox/cs/pagoda/query/rollup/QueryGraph.java index 11b0c75..26b0c1a 100644 --- a/src/uk/ac/ox/cs/pagoda/query/rollup/QueryGraph.java +++ b/src/uk/ac/ox/cs/pagoda/query/rollup/QueryGraph.java @@ -42,6 +42,8 @@ import org.semanticweb.owlapi.model.OWLObjectSomeValuesFrom; import org.semanticweb.owlapi.model.OWLObjectUnionOf; import org.semanticweb.owlapi.model.OWLOntology; +import uk.ac.ox.cs.pagoda.util.Namespace; + public class QueryGraph { Set freeVars = new HashSet(); @@ -63,10 +65,10 @@ public class QueryGraph { for (Atom atom: bodyAtoms) { if (atom.getArity() == 1) { - updateExistentiallyVariables(atom.getArgumentVariable(0)); - IRI iri = IRI.create(((AtomicConcept) atom.getDLPredicate()).getIRI()); - if (ontology.containsClassInSignature(iri)) - concepts.add(atom.getArgument(0), factory.getOWLClass(IRI.create(((AtomicConcept) atom.getDLPredicate()).getIRI()))); + updateExistentiallyVariables(atom.getArgumentVariable(0)); + String id = ((AtomicConcept) atom.getDLPredicate()).getIRI(); + if (!id.equals(Namespace.PAGODA_ORIGINAL)) + concepts.add(atom.getArgument(0), factory.getOWLClass(IRI.create(id))); } else if (atom.getArity() == 2) { updateExistentiallyVariables(atom.getArgumentVariable(0)); diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java b/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java index 7d3e40c..63fe246 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java @@ -108,7 +108,7 @@ public class ConsistencyManager { } catch (OWLOntologyCreationException e) { e.printStackTrace(); } - fullQueryRecord.saveRelevantClause(); +// fullQueryRecord.saveRelevantClause(); boolean satisfiability; diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java index 875dcdd..17838ae 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java @@ -296,13 +296,14 @@ public class MyQueryReasoner extends QueryReasoner { Timer t = new Timer(); Checker summarisedChecker = new HermitSummaryFilter(queryRecord, properties.getToCallHermiT()); - int validNumber = summarisedChecker.check(queryRecord.getGapAnswers()); +// int validNumber = + summarisedChecker.check(queryRecord.getGapAnswers()); summarisedChecker.dispose(); Utility.logDebug("Total time for full reasoner: " + t.duration()); - if (validNumber == 0) { +// if (validNumber == 0) { queryRecord.markAsProcessed(); Utility.logDebug("Difficulty of this query: " + queryRecord.getDifficulty()); - } +// } } @Override diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/full/HermitChecker.java b/src/uk/ac/ox/cs/pagoda/reasoner/full/HermitChecker.java index 97925fc..4dd11d8 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/full/HermitChecker.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/full/HermitChecker.java @@ -77,7 +77,8 @@ public class HermitChecker implements Checker { } private int tag = 0; - AnswerTuple topAnswerTuple = null, botAnswerTuple = null; +// AnswerTuple topAnswerTuple = null; + AnswerTuple botAnswerTuple = null; private void initialiseReasoner() { qGraph = new QueryGraph(queryClause.getBodyAtoms(), answerVariable[1], ontology); @@ -96,8 +97,9 @@ public class HermitChecker implements Checker { manager.removeAxioms(ontology, axioms); hermit = new Reasoner(ontology); } else { - if (topAnswerTuple != null && !check(topAnswerTuple)) tag = -1; - else if (botAnswerTuple != null && check(botAnswerTuple)) tag = 1; +// if (topAnswerTuple != null && !check(topAnswerTuple)) tag = -1; +// else + if (botAnswerTuple != null && check(botAnswerTuple)) tag = 1; } } else @@ -105,19 +107,22 @@ public class HermitChecker implements Checker { } private void addTopAndBotTuple(Set axioms) { - String top_str = Namespace.PAGODA_ANONY + "top", bot_str = Namespace.PAGODA_ANONY + "bot"; - topAnswerTuple = new AnswerTuple(new uk.ac.ox.cs.JRDFox.model.Individual[] { uk.ac.ox.cs.JRDFox.model.Individual.create(top_str) } ); +// String top_str = Namespace.PAGODA_ANONY + "top"; + String bot_str = Namespace.PAGODA_ANONY + "bot"; +// topAnswerTuple = new AnswerTuple(new uk.ac.ox.cs.JRDFox.model.Individual[] { uk.ac.ox.cs.JRDFox.model.Individual.create(top_str) } ); botAnswerTuple = new AnswerTuple(new uk.ac.ox.cs.JRDFox.model.Individual[] { uk.ac.ox.cs.JRDFox.model.Individual.create(bot_str) } ); - OWLIndividual top_ind = factory.getOWLNamedIndividual(IRI.create(top_str)), bot_ind = factory.getOWLNamedIndividual(IRI.create(bot_str)); +// OWLIndividual top_ind = factory.getOWLNamedIndividual(IRI.create(top_str)); + OWLIndividual bot_ind = factory.getOWLNamedIndividual(IRI.create(bot_str)); Map counter = new HashMap(); - Set topAnswers = new HashSet(), botAnswers = new HashSet(); +// Set topAnswers = new HashSet(); + Set botAnswers = new HashSet(); OWLIndividual sub, obj; - if (dGraph.getExits().size() > 1) { - for (Clique answerClique: dGraph.getExits()) - topAnswers.add(((uk.ac.ox.cs.JRDFox.model.Individual) answerClique.getRepresentative().getAnswerTuple().getGroundTerm(0)).getIRI()); - } - else topAnswerTuple = null; +// if (dGraph.getExits().size() > 1) { +// for (Clique answerClique: dGraph.getExits()) +// topAnswers.add(((uk.ac.ox.cs.JRDFox.model.Individual) answerClique.getRepresentative().getAnswerTuple().getGroundTerm(0)).getIRI()); +// } +// else topAnswerTuple = null; if (dGraph.getEntrances().size() > 1) { for (Clique answerClique: dGraph.getEntrances()) @@ -129,23 +134,23 @@ public class HermitChecker implements Checker { if (axiom instanceof OWLClassAssertionAxiom) { OWLClassAssertionAxiom ca = (OWLClassAssertionAxiom) axiom; sub = ca.getIndividual(); - if (topAnswers.contains(sub.toStringID())) - axioms.add(factory.getOWLClassAssertionAxiom(ca.getClassExpression(), top_ind)); +// if (topAnswers.contains(sub.toStringID())) +// axioms.add(factory.getOWLClassAssertionAxiom(ca.getClassExpression(), top_ind)); if (botAnswers.contains(sub.toStringID())) inc(counter, factory.getOWLClassAssertionAxiom(ca.getClassExpression(), bot_ind)); } else if (axiom instanceof OWLObjectPropertyAssertionAxiom) { OWLObjectPropertyAssertionAxiom oa = (OWLObjectPropertyAssertionAxiom) axiom; sub = oa.getSubject(); obj = oa.getObject(); - if (topAnswers.contains(sub.toStringID())) - if (topAnswers.contains(obj.toStringID())) - axioms.add(factory.getOWLObjectPropertyAssertionAxiom(oa.getProperty(), top_ind, top_ind)); - else - axioms.add(factory.getOWLObjectPropertyAssertionAxiom(oa.getProperty(), top_ind, obj)); - else { - if (topAnswers.contains(obj.toStringID())) - axioms.add(factory.getOWLObjectPropertyAssertionAxiom(oa.getProperty(), sub, top_ind)); - } +//// if (topAnswers.contains(sub.toStringID())) +//// if (topAnswers.contains(obj.toStringID())) +//// axioms.add(factory.getOWLObjectPropertyAssertionAxiom(oa.getProperty(), top_ind, top_ind)); +//// else +//// axioms.add(factory.getOWLObjectPropertyAssertionAxiom(oa.getProperty(), top_ind, obj)); +//// else { +//// if (topAnswers.contains(obj.toStringID())) +//// axioms.add(factory.getOWLObjectPropertyAssertionAxiom(oa.getProperty(), sub, top_ind)); +//// } if (botAnswers.contains(sub.toStringID())) if (botAnswers.contains(obj.toStringID())) @@ -161,8 +166,8 @@ public class HermitChecker implements Checker { else if (axiom instanceof OWLDataPropertyAssertionAxiom) { OWLDataPropertyAssertionAxiom da = (OWLDataPropertyAssertionAxiom) axiom; sub = da.getSubject(); - if (topAnswers.contains(sub.toStringID())) - axioms.add(factory.getOWLDataPropertyAssertionAxiom(da.getProperty(), top_ind, da.getObject())); +// if (topAnswers.contains(sub.toStringID())) +// axioms.add(factory.getOWLDataPropertyAssertionAxiom(da.getProperty(), top_ind, da.getObject())); if (botAnswers.contains(sub.toStringID())) inc(counter, factory.getOWLDataPropertyAssertionAxiom(da.getProperty(), bot_ind, da.getObject())); diff --git a/src/uk/ac/ox/cs/pagoda/rules/Program.java b/src/uk/ac/ox/cs/pagoda/rules/Program.java index b533e50..83cd21a 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/Program.java +++ b/src/uk/ac/ox/cs/pagoda/rules/Program.java @@ -138,7 +138,7 @@ public abstract class Program implements KnowledgeBase { transitiveAxioms = new LinkedList(); subPropChainAxioms = new LinkedList(); - OWLEntity date = ontology.getOWLOntologyManager().getOWLDataFactory().getOWLDatatype(IRI.create("http://www.w3.org/2001/XMLSchema#date")); + OWLDatatype date = ontology.getOWLOntologyManager().getOWLDataFactory().getOWLDatatype(IRI.create("http://www.w3.org/2001/XMLSchema#date")); int noOfDataPropertyRangeAxioms = 0, noOfAxioms = 0; for (OWLOntology onto: ontology.getImportsClosure()) for (OWLAxiom axiom: onto.getAxioms()) { @@ -152,7 +152,7 @@ public abstract class Program implements KnowledgeBase { Utility.logInfo("The axiom: " + axiom + " is being ignored."); } else { - if (axiom.containsEntityInSignature(date)) { + if (axiom.getDatatypesInSignature().contains(date)) { Utility.logInfo("The axiom: " + axiom + " is being ignored."); } else manager.addAxiom(filteredOntology, axiom); -- cgit v1.2.3