From c3480bb733b8bca976718a3dc2f09a21cb4b1b45 Mon Sep 17 00:00:00 2001 From: RncLsn Date: Tue, 4 Aug 2015 18:30:46 +0100 Subject: Rules parsing. --- src/resources/pagoda.properties | 4 +- src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java | 83 +++++- .../pagoda/multistage/MultiStageUpperProgram.java | 1 + .../treatement/Pick4NegativeConcept.java | 1 + .../ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java | 2 +- .../ac/ox/cs/pagoda/reasoner/HermiTReasoner.java | 2 +- .../ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java | 8 +- src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java | 51 ++-- src/uk/ac/ox/cs/pagoda/rules/GeneralProgram.java | 2 +- .../ac/ox/cs/pagoda/rules/LowerDatalogProgram.java | 3 +- src/uk/ac/ox/cs/pagoda/rules/Program.java | 37 ++- .../LimitedSkolemisationApproximator.java | 2 +- .../ac/ox/cs/pagoda/rules/clauses/Conjunction.java | 4 - src/uk/ac/ox/cs/pagoda/rules/clauses/DLClause.java | 12 - test/resources/MiscellaneousTests.xml | 12 + test/uk/ac/ox/cs/pagoda/hermit/TestRuleHelper.java | 319 +++++++++++++++++++++ 16 files changed, 484 insertions(+), 59 deletions(-) delete mode 100644 src/uk/ac/ox/cs/pagoda/rules/clauses/Conjunction.java delete mode 100644 src/uk/ac/ox/cs/pagoda/rules/clauses/DLClause.java create mode 100644 test/resources/MiscellaneousTests.xml create mode 100644 test/uk/ac/ox/cs/pagoda/hermit/TestRuleHelper.java diff --git a/src/resources/pagoda.properties b/src/resources/pagoda.properties index e6aa503..dab8388 100644 --- a/src/resources/pagoda.properties +++ b/src/resources/pagoda.properties @@ -1,8 +1,8 @@ debug=true useAlwaysSimpleUpperBound=false -skolemUpperBound=DISABLED +#skolemUpperBound=DISABLED #skolemUpperBound=BEFORE_SUMMARISATION -#skolemUpperBound=AFTER_SUMMARISATION +skolemUpperBound=AFTER_SUMMARISATION skolemDepth=1 toCallHermit=true diff --git a/src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java b/src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java index 81c99a4..43c5849 100644 --- a/src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java +++ b/src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java @@ -2,9 +2,16 @@ package uk.ac.ox.cs.pagoda.hermit; import org.semanticweb.HermiT.model.*; import uk.ac.ox.cs.pagoda.MyPrefixes; +import uk.ac.ox.cs.pagoda.owl.OWLHelper; import uk.ac.ox.cs.pagoda.util.Namespace; +import java.security.InvalidParameterException; +import java.util.ArrayList; + public class RuleHelper { + private static final String OR = "|"; + private static final String IF = ":-"; + private static final String AND = ","; // public static String abbreviateIRI(String text) { // String prefixName, prefixIRI; @@ -37,16 +44,16 @@ public class RuleHelper { boolean lastSpace = true; for (Atom headAtom: clause.getHeadAtoms()) { if ((atomText = getText(headAtom)) == null) continue; - if (!lastSpace) buf.append(" v "); + if (!lastSpace) buf.append(" ").append(OR).append(" "); buf.append(atomText); lastSpace = false; } - buf.append(" :- "); + buf.append(" ").append(IF).append(" "); lastSpace = true; for (Atom bodyAtom: clause.getBodyAtoms()) { // for (String str: strs[1].split(", ")) { if ((atomText = getText(bodyAtom)) == null) continue; - if (!lastSpace) buf.append(", "); + if (!lastSpace) buf.append(AND).append(" "); buf.append(atomText); lastSpace = false; } @@ -74,7 +81,7 @@ public class RuleHelper { else builder.append(getText(p)); builder.append("("); builder.append(getText(atom.getArgument(0))); - builder.append(","); + builder.append(","); builder.append(getText(atom.getArgument(1))); builder.append(")"); } @@ -95,4 +102,72 @@ public class RuleHelper { return MyPrefixes.PAGOdAPrefixes.abbreviateIRI(t.toString()); } + public static Term parseTerm(String s) { + s = s.trim(); + if(s.startsWith("?")) return Variable.create(s.substring(1)); + return Individual.create(MyPrefixes.PAGOdAPrefixes.expandIRI(s)); + } + + public static Atom parseAtom(String s) { + s = s.trim(); + + String[] split = s.split("\\("); + String predicateIri = OWLHelper.removeAngles(MyPrefixes.PAGOdAPrefixes.expandText(split[0])); + String[] predicateArgs = split[1].substring(0, split[1].length() - 1).split(","); + int numOfargs = predicateArgs.length; + Term terms[] = new Term[predicateArgs.length]; + for (int i = 0; i < terms.length; i++) + terms[i] = parseTerm(predicateArgs[i]); + if(numOfargs == 1) { + AtomicConcept atomicConcept = AtomicConcept.create(predicateIri); + return Atom.create(atomicConcept, terms); + } + else if(numOfargs == 2) { + AtomicRole atomicRole = AtomicRole.create(predicateIri); + return Atom.create(atomicRole, terms); + } + else + throw new InvalidParameterException(); + // TODO? add equality (owl:sameAs)? + } + + public static DLClause parseClause(String s) { + s = s.trim(); + if(s.endsWith(".")) s = s.substring(0, s.length()-1).trim(); + + String[] headAndBody = s.split(IF); + String[] headAtomsStr = splitAtoms(headAndBody[0], OR); + String[] bodyAtomsStr = splitAtoms(headAndBody[1], AND); + + Atom[] headAtoms = new Atom[headAtomsStr.length]; + Atom[] bodyAtoms = new Atom[bodyAtomsStr.length]; + for (int i = 0; i < headAtoms.length; i++) + headAtoms[i] = parseAtom(headAtomsStr[i]); + for (int i = 0; i < bodyAtoms.length; i++) + bodyAtoms[i] = parseAtom(bodyAtomsStr[i]); + + return DLClause.create(headAtoms, bodyAtoms); + } + + private static String[] splitAtoms(String s, String operator) { + char op = operator.charAt(0); + ArrayList result = new ArrayList<>(); + + int b = 0; + boolean betweenParenthesis = false; + for (int i = 0; i < s.length(); i++) { + if(s.charAt(i) == '(') + betweenParenthesis = true; + else if(s.charAt(i) == ')') + betweenParenthesis = false; + else if(s.charAt(i) == op && !betweenParenthesis) { + result.add(s.substring(b, i)); + b = i + 1; + } + } + if(b < s.length()) result.add(s.substring(b)); + + return result.toArray(new String[0]); + } + } diff --git a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java index 1664c99..e64c5e6 100644 --- a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java +++ b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java @@ -193,6 +193,7 @@ public abstract class MultiStageUpperProgram { public abstract Collection isIntegrated(MultiStageQueryEngine engine, boolean incrementally); + // TODO -RULE- protected Violation violate(MultiStageQueryEngine engine, DLClause clause, boolean incrementally) { Utility.logTrace("checking constraint: " + clause); diff --git a/src/uk/ac/ox/cs/pagoda/multistage/treatement/Pick4NegativeConcept.java b/src/uk/ac/ox/cs/pagoda/multistage/treatement/Pick4NegativeConcept.java index 687fa4a..3528788 100644 --- a/src/uk/ac/ox/cs/pagoda/multistage/treatement/Pick4NegativeConcept.java +++ b/src/uk/ac/ox/cs/pagoda/multistage/treatement/Pick4NegativeConcept.java @@ -49,6 +49,7 @@ public abstract class Pick4NegativeConcept extends Treatment { tripleManager.addTripleByID(tripleManager.getInstance(gapAtom, assignment)); } + // TODO -RULE- protected boolean makeSatisfied(Violation violation, Comparator comp) { LinkedList tuples = violation.getTuples(); DLClause constraint = violation.getConstraint(); diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java index a56a793..15dfa03 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java @@ -117,7 +117,7 @@ class ELHOUQueryReasoner extends QueryReasoner { } OWLOntology ontology = o; - program = new DatalogProgram(ontology, properties.getToClassify()); + program = new DatalogProgram(ontology); importData(program.getAdditionalDataFile()); diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java index 15eb9e8..ac62488 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java @@ -52,7 +52,7 @@ class HermiTReasoner extends QueryReasoner { e.printStackTrace(); } - DatalogProgram datalogProgram = new DatalogProgram(tbox, false); + DatalogProgram datalogProgram = new DatalogProgram(tbox); importData(datalogProgram.getAdditionalDataFile()); upperStore = new MultiStageQueryEngine("rl-upper", false); upperStore.importRDFData("data", getImportedData()); diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java index 8e28142..71d5752 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java @@ -68,7 +68,7 @@ class MyQueryReasoner extends QueryReasoner { } ontology = o; - program = new DatalogProgram(ontology, properties.getToClassify()); + program = new DatalogProgram(ontology); // program.getLower().save(); // program.getUpper().save(); // program.getGeneral().save(); @@ -154,7 +154,7 @@ class MyQueryReasoner extends QueryReasoner { // encoder = new TrackingRuleEncoderDisjVar2(program.getUpper(), trackingStore); // encoder = new TrackingRuleEncoderDisj2(program.getUpper(), trackingStore); - // TODO add consistency check by Skolem-upper-bound + // TODO? add consistency check by Skolem-upper-bound if(!isConsistent()) return false; @@ -225,7 +225,7 @@ class MyQueryReasoner extends QueryReasoner { @Override public void evaluateUpper(QueryRecord queryRecord) { if(isDisposed()) throw new DisposedException(); - // TODO add new upper store + // TODO? add new upper store AnswerTuples rlAnswer = null; boolean useFull = queryRecord.isBottom() || lazyUpperStore == null; try { @@ -388,7 +388,7 @@ class MyQueryReasoner extends QueryReasoner { Utility.logInfo(">> Semi-Skolemisation <<"); t.reset(); - DatalogProgram relevantProgram = new DatalogProgram(relevantSubset, false); // toClassify is false + DatalogProgram relevantProgram = new DatalogProgram(relevantSubset); MultiStageQueryEngine relevantStore = new MultiStageQueryEngine("Relevant-store", true); // checkValidity is true diff --git a/src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java b/src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java index 29e74c2..e2a171d 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java +++ b/src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java @@ -2,11 +2,12 @@ package uk.ac.ox.cs.pagoda.rules; import org.semanticweb.owlapi.model.OWLOntology; import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; -import uk.ac.ox.cs.pagoda.constraints.PredicateDependency; import uk.ac.ox.cs.pagoda.constraints.UpperUnaryBottom; import uk.ac.ox.cs.pagoda.util.disposable.Disposable; import uk.ac.ox.cs.pagoda.util.disposable.DisposedException; +import java.io.InputStream; + public class DatalogProgram extends Disposable { UpperDatalogProgram upperProgram = new UpperDatalogProgram(); @@ -15,14 +16,36 @@ public class DatalogProgram extends Disposable { BottomStrategy upperBottom; - public DatalogProgram(OWLOntology o) { + public DatalogProgram(InputStream inputStream) { lowerProgram = new LowerDatalogProgram(); - init(o, false); + + upperProgram.load(inputStream, upperBottom = new UpperUnaryBottom()); + lowerProgram.clone(upperProgram); + program.clone(upperProgram); + + upperProgram.transform(); + lowerProgram.transform(); + program.transform(); + + program.buildDependencyGraph(); + lowerProgram.dependencyGraph = upperProgram.buildDependencyGraph(); } - public DatalogProgram(OWLOntology o, boolean toClassify) { - lowerProgram = new LowerDatalogProgram(toClassify); - init(o, toClassify); + public DatalogProgram(OWLOntology o) { + lowerProgram = new LowerDatalogProgram(); + + upperProgram.load(o, upperBottom = new UpperUnaryBottom()); +// upperProgram.load(o, upperBottom = new UnaryBottom()); + lowerProgram.clone(upperProgram); + program.clone(upperProgram); +// program.botStrategy = new UnaryBottom(); + + upperProgram.transform(); + lowerProgram.transform(); + program.transform(); + + program.buildDependencyGraph(); + lowerProgram.dependencyGraph = upperProgram.buildDependencyGraph(); } public LowerDatalogProgram getLower() { @@ -55,20 +78,4 @@ public class DatalogProgram extends Disposable { super.dispose(); if(upperProgram != null) upperProgram.deleteABoxTurtleFile(); } - - private void init(OWLOntology o, boolean forSemFacet) { - upperProgram.load(o, upperBottom = new UpperUnaryBottom()); -// upperProgram.load(o, upperBottom = new UnaryBottom()); - lowerProgram.clone(upperProgram); - program.clone(upperProgram); -// program.botStrategy = new UnaryBottom(); - - upperProgram.transform(); - lowerProgram.transform(); - program.transform(); - - program.buildDependencyGraph(); - PredicateDependency graph = upperProgram.buildDependencyGraph(); - lowerProgram.dependencyGraph = graph; - } } diff --git a/src/uk/ac/ox/cs/pagoda/rules/GeneralProgram.java b/src/uk/ac/ox/cs/pagoda/rules/GeneralProgram.java index 01ab427..e390a29 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/GeneralProgram.java +++ b/src/uk/ac/ox/cs/pagoda/rules/GeneralProgram.java @@ -15,7 +15,7 @@ public class GeneralProgram extends Program { ontology = relevantOntology; ontologyDirectory = null; - dlOntology = null; +// dlOntology = null; botStrategy = new UnaryBottom(); clauses = botStrategy.process(relevantClauses); diff --git a/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java b/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java index 9930009..a2676e8 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java +++ b/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java @@ -39,6 +39,7 @@ public class LowerDatalogProgram extends ApproxProgram implements IncrementalPro } + // TODO -RULE- filter out unsafe rules @Override public void transform() { if (m_toClassify) { @@ -56,7 +57,7 @@ public class LowerDatalogProgram extends ApproxProgram implements IncrementalPro else super.transform(); - Normalisation norm = new Normalisation(dlOntology.getDLClauses(), ontology, new NullaryBottom()); + Normalisation norm = new Normalisation(dlClauses, ontology, new NullaryBottom()); BottomStrategy tBottom = new NullaryBottom(); norm.process(); for (DLClause nClause: norm.getNormlisedClauses()) { diff --git a/src/uk/ac/ox/cs/pagoda/rules/Program.java b/src/uk/ac/ox/cs/pagoda/rules/Program.java index a0edf85..de06f52 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/Program.java +++ b/src/uk/ac/ox/cs/pagoda/rules/Program.java @@ -4,6 +4,7 @@ import org.apache.commons.io.FilenameUtils; import org.semanticweb.HermiT.Configuration; import org.semanticweb.HermiT.model.*; import org.semanticweb.HermiT.structural.OWLClausification; +import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.model.*; import org.semanticweb.simpleETL.SimpleETL; import uk.ac.ox.cs.pagoda.MyPrefixes; @@ -13,6 +14,7 @@ import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; import uk.ac.ox.cs.pagoda.constraints.NullaryBottom; import uk.ac.ox.cs.pagoda.constraints.PredicateDependency; import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; +import uk.ac.ox.cs.pagoda.hermit.RuleHelper; import uk.ac.ox.cs.pagoda.owl.OWLHelper; import uk.ac.ox.cs.pagoda.util.Utility; @@ -23,7 +25,9 @@ public abstract class Program implements KnowledgeBase { protected String ontologyDirectory = null; protected OWLOntology ontology; - protected DLOntology dlOntology; +// protected DLOntology dlOntology; + protected Set dlClauses = new HashSet<>(); + protected Set positiveFacts = new HashSet<>(); protected BottomStrategy botStrategy; protected Collection clauses = new HashSet(); // protected Set used = new HashSet(); @@ -40,6 +44,24 @@ protected PredicateDependency dependencyGraph; return sb.toString(); } + public void load(InputStream rules, BottomStrategy botStrategy) { +// this.botStrategy = botStrategy; +// // fake instantiation + try { + load(OWLManager.createOWLOntologyManager().createOntology(), botStrategy); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } + + try(BufferedReader br = new BufferedReader(new InputStreamReader(rules))) { + String line; + while((line = br.readLine()) != null) + dlClauses.add(RuleHelper.parseClause(line)); + } catch (IOException e) { + e.printStackTrace(); + } + } + public void load(OWLOntology o, BottomStrategy botStrategy) { this.botStrategy = botStrategy; RLPlusOntology owlOntology = new RLPlusOntology(); @@ -57,7 +79,7 @@ protected PredicateDependency dependencyGraph; OWLOntology abox = OWLHelper.loadOntology(aboxOWLFile); OWLOntologyManager manager = abox.getOWLOntologyManager(); OWLAxiom axiom; - for (Atom atom: dlOntology.getPositiveFacts()) { + for (Atom atom: positiveFacts) { if ((axiom = OWLHelper.getABoxAssertion(manager.getOWLDataFactory(), atom)) != null) manager.addAxiom(abox, axiom); } @@ -90,7 +112,7 @@ protected PredicateDependency dependencyGraph; @Override public void transform() { - for(DLClause dlClause : dlOntology.getDLClauses()) { + for(DLClause dlClause : dlClauses) { DLClause simplifiedDLClause = DLClauseHelper.removeNominalConcept(dlClause); simplifiedDLClause = removeAuxiliaryBodyAtoms(simplifiedDLClause); simplifiedDLClause = DLClauseHelper.replaceWithDataValue(simplifiedDLClause); @@ -190,7 +212,9 @@ protected PredicateDependency dependencyGraph; void clone(Program program) { this.ontologyDirectory = program.ontologyDirectory; this.ontology = program.ontology; - this.dlOntology = program.dlOntology; +// this.dlOntology = program.dlOntology; + this.dlClauses = program.dlClauses; + this.positiveFacts = program.positiveFacts; this.botStrategy = program.botStrategy; this.additionalDataFile = program.additionalDataFile; this.transitiveAxioms = program.transitiveAxioms; @@ -248,8 +272,9 @@ protected PredicateDependency dependencyGraph; } Utility.logInfo("The number of data property range axioms that are ignored: " + noOfDataPropertyRangeAxioms + "(" + noOfAxioms + ")"); - dlOntology = (DLOntology) clausifier.preprocessAndClausify(filteredOntology, null)[1]; - clausifier = null; + DLOntology dlOntology = (DLOntology) clausifier.preprocessAndClausify(filteredOntology, null)[1]; + dlClauses = dlOntology.getDLClauses(); + positiveFacts = dlOntology.getPositiveFacts(); } private DLClause removeAuxiliaryBodyAtoms(DLClause dlClause) { diff --git a/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java b/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java index 7d29c74..a140225 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java +++ b/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -/** +/*** * Approximates existential rules through a limited form of Skolemisation. *

* Given a rule and a ground substitution, diff --git a/src/uk/ac/ox/cs/pagoda/rules/clauses/Conjunction.java b/src/uk/ac/ox/cs/pagoda/rules/clauses/Conjunction.java deleted file mode 100644 index 91bb3e7..0000000 --- a/src/uk/ac/ox/cs/pagoda/rules/clauses/Conjunction.java +++ /dev/null @@ -1,4 +0,0 @@ -package uk.ac.ox.cs.pagoda.rules.clauses; - -public class Conjunction { -} diff --git a/src/uk/ac/ox/cs/pagoda/rules/clauses/DLClause.java b/src/uk/ac/ox/cs/pagoda/rules/clauses/DLClause.java deleted file mode 100644 index 7394be0..0000000 --- a/src/uk/ac/ox/cs/pagoda/rules/clauses/DLClause.java +++ /dev/null @@ -1,12 +0,0 @@ -package uk.ac.ox.cs.pagoda.rules.clauses; - -public class DLClause extends Clause { - -// private DLClause(Atom[] headAtoms, Atom[] bodyAtoms) { -// super(headAtoms, bodyAtoms); -// } -// -// public static DLClause create(Atom[] headAtoms, Atom[] bodyAtoms) { -// return s_interningManager.intern(new DLClause(headAtoms, bodyAtoms)); -// } -} diff --git a/test/resources/MiscellaneousTests.xml b/test/resources/MiscellaneousTests.xml new file mode 100644 index 0000000..21b64f7 --- /dev/null +++ b/test/resources/MiscellaneousTests.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/test/uk/ac/ox/cs/pagoda/hermit/TestRuleHelper.java b/test/uk/ac/ox/cs/pagoda/hermit/TestRuleHelper.java new file mode 100644 index 0000000..3a2cad8 --- /dev/null +++ b/test/uk/ac/ox/cs/pagoda/hermit/TestRuleHelper.java @@ -0,0 +1,319 @@ +package uk.ac.ox.cs.pagoda.hermit; + +import org.testng.annotations.Test; +import uk.ac.ox.cs.pagoda.MyPrefixes; +import uk.ac.ox.cs.pagoda.owl.OWLHelper; +import uk.ac.ox.cs.pagoda.rules.DatalogProgram; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.Charset; + +public class TestRuleHelper { + + @Test + public static void someTest() { + String prefixes = "PREFIX anony: \n" + + "PREFIX aux: \n" + + "PREFIX owl: \n" + + "PREFIX prefix0: \n" + + "PREFIX rdf: \n" + + "PREFIX rdfs: \n" + + "PREFIX ruleml: \n" + + "PREFIX swrl: \n" + + "PREFIX swrlb: \n" + + "PREFIX swrlx: \n" + + "PREFIX xsd: \n"; + String rule = "owl:Nothing(?X) :- owl:Nothing2(?X).\n" + + "prefix0:WomanCollege(?X) :- prefix0:College(?X).\n" + + "owl:Nothing5(?X) :- prefix0:WomanCollege(?X), prefix0:hasStudent(?X,?Y), prefix0:Man(?Y).\n" + + "prefix0:SportsFan(?X) :- prefix0:Person(?X), prefix0:isCrazyAbout(?X,?Y), prefix0:Sports(?Y).\n" + + "prefix0:Organization(?X) :- prefix0:isAffiliateOf(?X,?Y).\n" + + "prefix0:Person(?X) :- prefix0:lastName(?X,?Y).\n" + + "owl:sameAs(?Y1,?Y2) :- prefix0:isHeadOf(?Y1,?X), prefix0:isHeadOf(?Y2,?X).\n" + + "prefix0:isMemberOf(?Y,?X) :- prefix0:hasMember(?X,?Y).\n" + + "prefix0:Person(?X) :- prefix0:hasMasterDegreeFrom(?X,?Y).\n" + + "prefix0:Person(?X) :- prefix0:TeachingAssistant(?X).\n" + + "prefix0:Employee(?X) :- prefix0:Person(?X), prefix0:worksFor(?X,?Y), prefix0:Organization(?Y).\n" + + "prefix0:FineArts(?X) :- prefix0:Media_Arts_And_ciencesClass(?X).\n" + + "prefix0:FineArts(?X) :- prefix0:Medieval_ArtsClass(?X).\n" + + "prefix0:Professor(?X) :- prefix0:Chair(?X).\n" + + "prefix0:Faculty(?Y) :- prefix0:isTaughtBy(?X,?Y).\n" + + "prefix0:worksFor(?X,anony:individual25) :- prefix0:Employee(?X).\n" + + "prefix0:Engineering(?X) :- prefix0:Chemical_EngineeringClass(?X).\n" + + "prefix0:BaseballClass(anony:individual1) :- prefix0:BaseballLover(?X).\n" + + "prefix0:Course(?Y) :- prefix0:listedCourse(?X,?Y).\n" + + "prefix0:worksFor(?X,?Y) :- prefix0:isHeadOf(?X,?Y).\n" + + "prefix0:Faculty(?X) :- prefix0:teacherOf(?X,?Y).\n" + + "prefix0:Course(?Y) :- prefix0:teachingAssistantOf(?X,?Y).\n" + + "owl:Nothing(?X) :- owl:Nothing1(?X).\n" + + "prefix0:Person(?X) :- prefix0:Student(?X).\n" + + "prefix0:isFriendOf(?Y,?X) :- prefix0:isFriendOf(?X,?Y).\n" + + "prefix0:Student(?X) :- prefix0:UndergraduateStudent(?X).\n" + + "prefix0:Person(?X) :- prefix0:BasketBallLover(?X).\n" + + "prefix0:Person(?Y) :- prefix0:hasSameHomeTownWith(?X,?Y).\n" + + "prefix0:Employee(?X) :- prefix0:Faculty(?X).\n" + + "prefix0:Insterest(?X) :- prefix0:Music(?X).\n" + + "owl:Nothing1(?X) :- prefix0:NonScienceStudent(?X), prefix0:hasMajor(?X,?Y), prefix0:Science(?Y).\n" + + "owl:sameAs(?Y1,?Y2) :- prefix0:isTaughtBy(?X,?Y1), prefix0:isTaughtBy(?X,?Y2).\n" + + "prefix0:hasStudent(?Y,?X) :- prefix0:isStudentOf(?X,?Y).\n" + + "prefix0:Student(?X) :- prefix0:ScienceStudent(?X).\n" + + "prefix0:like(?X,anony:individual7) :- prefix0:PeopleWithHobby(?X).\n" + + "prefix0:Publication(?X) :- prefix0:Article(?X).\n" + + "prefix0:isTaughtBy(?Y,?X) :- prefix0:teacherOf(?X,?Y).\n" + + "prefix0:isCrazyAbout(?X,anony:individual19) :- prefix0:TennisFan(?X).\n" + + "prefix0:Science(?X) :- prefix0:Marine_ScienceClass(?X).\n" + + "prefix0:SupportingStaff(?X) :- prefix0:SystemsStaff(?X).\n" + + "prefix0:hasStudent(?X,anony:individual10) :- prefix0:College(?X).\n" + + "prefix0:FineArts(?X) :- prefix0:Theatre_and_DanceClass(?X).\n" + + "prefix0:Organization(?Y) :- prefix0:subOrganizationOf(?X,?Y).\n" + + "prefix0:Engineering(?X) :- prefix0:Materical_Science_EngineeringClass(?X).\n" + + "prefix0:hasMember(?Y,?X) :- prefix0:isMemberOf(?X,?Y).\n" + + "prefix0:Student(?Y) :- prefix0:hasStudent(?X,?Y).\n" + + "owl:Nothing(?X) :- owl:Nothing5(?X).\n" + + "prefix0:isCrazyAbout(?X,anony:individual18) :- prefix0:SwimmingFan(?X).\n" + + "prefix0:Publication(?Y) :- prefix0:orgPublication(?X,?Y).\n" + + "prefix0:Chair(?X) :- prefix0:Person(?X), prefix0:isHeadOf(?X,?Y), prefix0:Department(?Y).\n" + + "prefix0:isStudentOf(?Y,?X) :- prefix0:hasStudent(?X,?Y).\n" + + "prefix0:Person(?X) :- prefix0:isAdvisedBy(?X,?Y).\n" + + "prefix0:hasMajor(?X,anony:individual2) :- prefix0:Student(?X).\n" + + "prefix0:Publication(?X) :- prefix0:publicationDate(?X,?Y).\n" + + "owl:Nothing(?X) :- owl:Nothing6(?X).\n" + + "prefix0:Director(?X) :- prefix0:Person(?X), prefix0:isHeadOf(?X,?Y), prefix0:Program(?Y).\n" + + "prefix0:Professor(?X) :- prefix0:AssociateProfessor(?X).\n" + + "prefix0:TeachingAssistant(?X) :- prefix0:Person(?X), prefix0:teachingAssistantOf(?X,?Y), prefix0:Course(?Y).\n" + + "prefix0:Research(?Y) :- prefix0:researchProject(?X,?Y).\n" + + "prefix0:TeachingAssistant(?X) :- prefix0:teachingAssistantOf(?X,?Y).\n" + + "prefix0:University(?X) :- prefix0:hasAlumnus(?X,?Y).\n" + + "prefix0:Faculty(?X) :- prefix0:Lecturer(?X).\n" + + "prefix0:isHeadOf(?X,anony:individual21) :- prefix0:Dean(?X).\n" + + "prefix0:like(?X,?Y) :- prefix0:isCrazyAbout(?X,?Y).\n" + + "prefix0:Person(?X) :- prefix0:hasSameHomeTownWith(?X,?Y).\n" + + "prefix0:Organization(?X) :- prefix0:orgPublication(?X,?Y).\n" + + "prefix0:Person(?Y) :- prefix0:hasMember(?X,?Y).\n" + + "prefix0:HumanitiesAndSocial(?X) :- prefix0:LinguisticsClass(?X).\n" + + "prefix0:Engineering(?X) :- prefix0:Aeronautical_EngineeringClass(?X).\n" + + "owl:Nothing(?X) :- owl:Nothing3(?X).\n" + + "prefix0:isHeadOf(?X,anony:individual12) :- prefix0:Director(?X).\n" + + "prefix0:Publication(?X) :- prefix0:publicationAuthor(?X,?Y).\n" + + "prefix0:Organization(?X) :- prefix0:College(?X).\n" + + "prefix0:isCrazyAbout(?X,anony:individual24) :- prefix0:BaseballFan(?X).\n" + + "prefix0:FineArts(?X) :- prefix0:Performing_ArtsClass(?X).\n" + + "prefix0:Sports(?X) :- prefix0:BasketBallClass(?X).\n" + + "prefix0:HumanitiesAndSocial(?X) :- prefix0:PsychologyClass(?X).\n" + + "prefix0:Person(?X) :- prefix0:Employee(?X).\n" + + "prefix0:FineArts(?X) :- prefix0:DramaClass(?X).\n" + + "prefix0:Faculty(?X) :- prefix0:PostDoc(?X).\n" + + "prefix0:University(?Y) :- prefix0:hasDoctoralDegreeFrom(?X,?Y).\n" + + "prefix0:Sports(anony:individual0) :- prefix0:SportsLover(?X).\n" + + "prefix0:Person(?Y) :- prefix0:hasAlumnus(?X,?Y).\n" + + "prefix0:FineArts(?X) :- prefix0:Modern_ArtsClass(?X).\n" + + "prefix0:hasMember(?X,?Y) :- prefix0:hasStudent(?X,?Y).\n" + + "prefix0:Course(?X) :- prefix0:isTaughtBy(?X,?Y).\n" + + "prefix0:NonScienceStudent(?X) :- prefix0:Student(?X).\n" + + "prefix0:BasketBallLover(?X) :- prefix0:Person(?X), prefix0:like(?X,?Y), prefix0:BasketBallClass(?Y).\n" + + "prefix0:Professor(?X) :- prefix0:VisitingProfessor(?X).\n" + + "prefix0:GraduateCourse(?Y) :- prefix0:GraduateStudent(?X), prefix0:takesCourse(?X,?Y).\n" + + "prefix0:TennisClass(anony:individual19) :- prefix0:TennisFan(?X).\n" + + "prefix0:Work(?X) :- prefix0:Research(?X).\n" + + "prefix0:TennisFan(?X) :- prefix0:Person(?X), prefix0:isCrazyAbout(?X,?Y), prefix0:TennisClass(?Y).\n" + + "prefix0:ScienceStudent(?X) :- prefix0:Student(?X), prefix0:hasMajor(?X,?Y), prefix0:Science(?Y).\n" + + "prefix0:Person(?X) :- prefix0:Woman(?X).\n" + + "prefix0:Man(?X) :- prefix0:Person(?X).\n" + + "prefix0:Person(?X) :- prefix0:hasUndergraduateDegreeFrom(?X,?Y).\n" + + "prefix0:ResearchGroup(?X) :- prefix0:researchProject(?X,?Y).\n" + + "prefix0:hasSameHomeTownWith(?X,?Z) :- prefix0:hasSameHomeTownWith(?X,?Y), prefix0:hasSameHomeTownWith(?Y,?Z).\n" + + "prefix0:Person(?X) :- prefix0:isFriendOf(?X,?Y).\n" + + "prefix0:Person(?Y) :- prefix0:publicationAuthor(?X,?Y).\n" + + "prefix0:Person(?X) :- prefix0:Chair(?X).\n" + + "prefix0:Publication(?X) :- prefix0:Manual(?X).\n" + + "prefix0:Publication(?X) :- prefix0:UnofficialPublication(?X).\n" + + "prefix0:Engineering(?X) :- prefix0:Industry_EngineeringClass(?X).\n" + + "prefix0:Science(?X) :- prefix0:StatisticsClass(?X).\n" + + "prefix0:Organization(?Y) :- prefix0:isStudentOf(?X,?Y).\n" + + "prefix0:SwimmingFan(?X) :- prefix0:Person(?X), prefix0:isCrazyAbout(?X,?Y), prefix0:SwimmingClass(?Y).\n" + + "prefix0:Person(?X) :- prefix0:emailAddress(?X,?Y).\n" + + "prefix0:FineArts(?X) :- prefix0:Latin_ArtsClass(?X).\n" + + "prefix0:Organization(?X) :- prefix0:ResearchGroup(?X).\n" + + "prefix0:AcademicSubject(?X) :- prefix0:HumanitiesAndSocial(?X).\n" + + "prefix0:Professor(?X) :- prefix0:Dean(?X).\n" + + "prefix0:SwimmingClass(anony:individual8) :- prefix0:SwimmingLover(?X).\n" + + "prefix0:University(?Y) :- prefix0:hasMasterDegreeFrom(?X,?Y).\n" + + "prefix0:Article(?X) :- prefix0:ConferencePaper(?X).\n" + + "prefix0:Person(?X) :- prefix0:BasketBallFan(?X).\n" + + "prefix0:HumanitiesAndSocial(?X) :- prefix0:ReligionsClass(?X).\n" + + "prefix0:Science(?X) :- prefix0:PhysicsClass(?X).\n" + + "prefix0:Dean(?X) :- prefix0:isHeadOf(?X,?Y), prefix0:College(?Y).\n" + + "prefix0:University(?Y) :- prefix0:hasDegreeFrom(?X,?Y).\n" + + "prefix0:Organization(?X) :- prefix0:hasMember(?X,?Y).\n" + + "prefix0:Engineering(?X) :- prefix0:Computer_EngineeringClass(?X).\n" + + "prefix0:Publication(?X) :- prefix0:Software(?X).\n" + + "prefix0:Science(?X) :- prefix0:GeosciencesClass(?X).\n" + + "prefix0:hasMajor(?X,anony:individual9) :- prefix0:ScienceStudent(?X).\n" + + "prefix0:hasDegreeFrom(?Y,?X) :- prefix0:hasAlumnus(?X,?Y).\n" + + "prefix0:Software(?X) :- prefix0:softwareDocumentation(?X,?Y).\n" + + "prefix0:isMemberOf(?X,?Y) :- prefix0:isStudentOf(?X,?Y).\n" + + "prefix0:Organization(?X) :- prefix0:hasStudent(?X,?Y).\n" + + "owl:Nothing2(?X) :- prefix0:GraduateCourse(?X), prefix0:GraduateCourse_neg(?X).\n" + + "prefix0:BaseballFan(?X) :- prefix0:Person(?X), prefix0:isCrazyAbout(?X,?Y), prefix0:BaseballClass(?Y).\n" + + "prefix0:Publication(?X) :- prefix0:publicationResearch(?X,?Y).\n" + + "prefix0:like(?X,anony:individual14) :- prefix0:PeopleWithManyHobbies(?X).\n" + + "prefix0:SportsLover(?X) :- prefix0:Person(?X), prefix0:like(?X,?Y), prefix0:Sports(?Y).\n" + + "prefix0:Organization(?X) :- prefix0:University(?X).\n" + + "prefix0:hasAlumnus(?Y,?X) :- prefix0:hasDegreeFrom(?X,?Y).\n" + + "prefix0:Science(?X) :- prefix0:Materials_ScienceClass(?X).\n" + + "prefix0:Professor(?X) :- prefix0:tenured(?X,?Y).\n" + + "prefix0:Faculty(?X) :- prefix0:Professor(?X).\n" + + "prefix0:Student(?X) :- prefix0:NonScienceStudent(?X).\n" + + "prefix0:Person(?X) :- prefix0:telephone(?X,?Y).\n" + + "prefix0:FineArts(?X) :- prefix0:ArchitectureClass(?X).\n" + + "prefix0:University(?Y) :- prefix0:hasUndergraduateDegreeFrom(?X,?Y).\n" + + "prefix0:Man(anony:individual10) :- prefix0:College(?X).\n" + + "prefix0:Person(?X) :- prefix0:Man(?X).\n" + + "prefix0:Person(?X) :- prefix0:title(?X,?Y).\n" + + "prefix0:subOrganizationOf(?X,?Z) :- prefix0:subOrganizationOf(?X,?Y), prefix0:subOrganizationOf(?Y,?Z).\n" + + "owl:sameAs(?Y1,?Y2) :- prefix0:like(?X,?Y1), prefix0:like(?X,?Y2).\n" + + "prefix0:takesCourse(?X,anony:individual4) :- prefix0:GraduateStudent(?X).\n" + + "prefix0:Sports(?X) :- prefix0:TennisClass(?X).\n" + + "prefix0:Engineering(?X) :- prefix0:Petroleuml_EngineeringClass(?X).\n" + + "prefix0:Organization(?X) :- prefix0:Institute(?X).\n" + + "prefix0:isCrazyAbout(?X,anony:individual16) :- prefix0:BasketBallFan(?X).\n" + + "prefix0:Science(?X) :- prefix0:BiologyClass(?X).\n" + + "prefix0:Person(?X) :- prefix0:SportsFan(?X).\n" + + "prefix0:Course(?X) :- prefix0:GraduateCourse(?X).\n" + + "prefix0:Person(?X) :- prefix0:Director(?X).\n" + + "prefix0:HumanitiesAndSocial(?X) :- prefix0:EconomicsClass(?X).\n" + + "prefix0:Person(?X) :- prefix0:BaseballLover(?X).\n" + + "prefix0:HumanitiesAndSocial(?X) :- prefix0:HistoryClass(?X).\n" + + "prefix0:FineArts(?X) :- prefix0:Asian_ArtsClass(?X).\n" + + "prefix0:isStudentOf(?X,?Y) :- prefix0:enrollIn(?X,?Y).\n" + + "prefix0:isHeadOf(?X,anony:individual20) :- prefix0:Chair(?X).\n" + + "prefix0:Person(?X) :- prefix0:PeopleWithHobby(?X).\n" + + "prefix0:Sports(anony:individual5) :- prefix0:SportsFan(?X).\n" + + "prefix0:Science(anony:individual9) :- prefix0:ScienceStudent(?X).\n" + + "prefix0:Engineering(?X) :- prefix0:Biomedical_EngineeringClass(?X).\n" + + "prefix0:HumanitiesAndSocial(?X) :- prefix0:Modern_LanguagesClass(?X).\n" + + "prefix0:like(?X,?Y) :- prefix0:love(?X,?Y).\n" + + "prefix0:hasStudent(?X,anony:individual11) :- prefix0:College(?X).\n" + + "prefix0:Science(?X) :- prefix0:ChemistryClass(?X).\n" + + "prefix0:Student(?X) :- prefix0:takesCourse(?X,?Y).\n" + + "prefix0:teacherOf(?Y,?X) :- prefix0:isTaughtBy(?X,?Y).\n" + + "prefix0:HumanitiesAndSocial(?X) :- prefix0:AnthropologyClass(?X).\n" + + "prefix0:Person(?X) :- prefix0:hasDegreeFrom(?X,?Y).\n" + + "prefix0:Person(?X) :- prefix0:hasDoctoralDegreeFrom(?X,?Y).\n" + + "prefix0:Engineering(?X) :- prefix0:Electrical_EngineeringClass(?X).\n" + + "owl:differentFrom(anony:individual13,anony:individual14) :- prefix0:PeopleWithManyHobbies(?X).\n" + + "prefix0:Person(?X) :- prefix0:SportsLover(?X).\n" + + "prefix0:Organization(?X) :- prefix0:subOrganizationOf(?X,?Y).\n" + + "prefix0:SwimmingLover(?X) :- prefix0:Person(?X), prefix0:like(?X,?Y), prefix0:SwimmingClass(?Y).\n" + + "prefix0:BaseballLover(?X) :- prefix0:Person(?X), prefix0:like(?X,?Y), prefix0:BaseballClass(?Y).\n" + + "prefix0:Science(?X) :- prefix0:Computer_ScienceClass(?X).\n" + + "prefix0:Sports(?X) :- prefix0:SwimmingClass(?X).\n" + + "prefix0:Science(?X) :- prefix0:AstronomyClass(?X).\n" + + "prefix0:Work(?X) :- prefix0:Course(?X).\n" + + "prefix0:Science(?X) :- prefix0:MathematicsClass(?X).\n" + + "prefix0:AcademicSubject(?X) :- prefix0:Engineering(?X).\n" + + "prefix0:hasDegreeFrom(?X,?Y) :- prefix0:hasUndergraduateDegreeFrom(?X,?Y).\n" + + "prefix0:like(?X,anony:individual15) :- prefix0:PeopleWithManyHobbies(?X).\n" + + "prefix0:Sports(?X) :- prefix0:BaseballClass(?X).\n" + + "prefix0:Student(?X) :- prefix0:isStudentOf(?X,?Y).\n" + + "prefix0:Professor(?Y) :- prefix0:isAdvisedBy(?X,?Y).\n" + + "prefix0:SwimmingClass(anony:individual18) :- prefix0:SwimmingFan(?X).\n" + + "prefix0:like(?X,anony:individual22) :- prefix0:BasketBallLover(?X).\n" + + "prefix0:like(?X,anony:individual1) :- prefix0:BaseballLover(?X).\n" + + "prefix0:Schedule(?X) :- prefix0:listedCourse(?X,?Y).\n" + + "owl:Nothing6(?X) :- owl:differentFrom(?X,?X).\n" + + "prefix0:PeopleWithManyHobbies(?X) :- prefix0:like(?X,?Y3).\n" + + "prefix0:Course(anony:individual23) :- prefix0:TeachingAssistant(?X).\n" + + "prefix0:takesCourse(?X,anony:individual3) :- prefix0:takesCourse(?X,?Y).\n" + + "prefix0:love(?X,?Y) :- prefix0:like(?X,?Y).\n" + + "prefix0:AcademicSubject(?X) :- prefix0:Science(?X).\n" + + "prefix0:Person(?X) :- prefix0:ResearchAssistant(?X).\n" + + "prefix0:Insterest(?X) :- prefix0:Sports(?X).\n" + + "prefix0:Article(?X) :- prefix0:TechnicalReport(?X).\n" + + "prefix0:UndergraduateStudent(?Y) :- prefix0:WomanCollege(?X), prefix0:hasStudent(?X,?Y).\n" + + "prefix0:Department(anony:individual20) :- prefix0:Chair(?X).\n" + + "prefix0:Woman(?X) :- prefix0:Person(?X).\n" + + "owl:Nothing4(?X) :- prefix0:UndergraduateStudent(?X), prefix0:UndergraduateStudent_neg(?X).\n" + + "prefix0:HumanitiesAndSocial(?X) :- prefix0:HumanitiesClass(?X).\n" + + "prefix0:GraduateCourse_neg(anony:individual3) :- prefix0:takesCourse(?X,?Y).\n" + + "prefix0:Organization(?Y) :- prefix0:isAffiliatedOrganizationOf(?X,?Y).\n" + + "owl:Nothing(?X) :- owl:Nothing4(?X).\n" + + "prefix0:like(?X,anony:individual0) :- prefix0:SportsLover(?X).\n" + + "prefix0:Research(?Y) :- prefix0:publicationResearch(?X,?Y).\n" + + "prefix0:Professor(?X) :- prefix0:AssistantProfessor(?X).\n" + + "prefix0:Program(anony:individual12) :- prefix0:Director(?X).\n" + + "prefix0:isMemberOf(?X,?Y) :- prefix0:worksFor(?X,?Y).\n" + + "prefix0:Organization(anony:individual25) :- prefix0:Employee(?X).\n" + + "prefix0:hasDegreeFrom(?X,?Y) :- prefix0:hasDoctoralDegreeFrom(?X,?Y).\n" + + "prefix0:Person(?Y) :- prefix0:isAffiliateOf(?X,?Y).\n" + + "prefix0:Student(?X) :- prefix0:Person(?X), prefix0:isStudentOf(?X,?Y), prefix0:Organization(?Y).\n" + + "prefix0:PeopleWithHobby(?X) :- prefix0:Person(?X), prefix0:like(?X,?Y).\n" + + "prefix0:Organization(anony:individual17) :- prefix0:Student(?X).\n" + + "prefix0:Engineering(?X) :- prefix0:Mechanical_EngineeringClass(?X).\n" + + "prefix0:Employee(?X) :- prefix0:SupportingStaff(?X).\n" + + "prefix0:Organization(?X) :- prefix0:Department(?X).\n" + + "prefix0:HumanitiesAndSocial(?X) :- prefix0:PhilosophyClass(?X).\n" + + "prefix0:College(anony:individual21) :- prefix0:Dean(?X).\n" + + "prefix0:UndergraduateStudent_neg(anony:individual11) :- prefix0:College(?X).\n" + + "owl:Nothing3(?X) :- prefix0:Man(?X), prefix0:Woman(?X).\n" + + "owl:sameAs(?Y1,?Y2) :- prefix0:takesCourse(?X,?Y1), prefix0:LeisureStudent(?X), prefix0:takesCourse(?X,?Y2).\n" + + "prefix0:Organization(?X) :- prefix0:isAffiliatedOrganizationOf(?X,?Y).\n" + + "prefix0:isCrazyAbout(?X,anony:individual5) :- prefix0:SportsFan(?X).\n" + + "prefix0:Software(?X) :- prefix0:softwareVersion(?X,?Y).\n" + + "prefix0:Science(anony:individual2) :- prefix0:Student(?X).\n" + + "prefix0:SupportingStaff(?X) :- prefix0:ClericalStaff(?X).\n" + + "prefix0:Person(?X) :- prefix0:SwimmingLover(?X).\n" + + "prefix0:Person(?X) :- prefix0:age(?X,?Y).\n" + + "prefix0:BasketBallClass(anony:individual22) :- prefix0:BasketBallLover(?X).\n" + + "prefix0:like(?X,anony:individual8) :- prefix0:SwimmingLover(?X).\n" + + "prefix0:Person(?X) :- prefix0:firstName(?X,?Y).\n" + + "prefix0:Department(?Y) :- prefix0:enrollIn(?X,?Y).\n" + + "prefix0:Publication(?Y) :- prefix0:softwareDocumentation(?X,?Y).\n" + + "prefix0:hasDegreeFrom(?X,?Y) :- prefix0:hasMasterDegreeFrom(?X,?Y).\n" + + "prefix0:AcademicSubject(?Y) :- prefix0:hasMajor(?X,?Y).\n" + + "prefix0:Article(?X) :- prefix0:JournalArticle(?X).\n" + + "prefix0:Organization(?X) :- prefix0:Program(?X).\n" + + "prefix0:Course(?Y) :- prefix0:teacherOf(?X,?Y).\n" + + "prefix0:AcademicSubject(?X) :- prefix0:FineArts(?X).\n" + + "prefix0:Person(?X) :- prefix0:TennisFan(?X).\n" + + "prefix0:GraduateStudent(?X) :- prefix0:takesCourse(?X,?Y).\n" + + "prefix0:BasketBallFan(?X) :- prefix0:Person(?X), prefix0:isCrazyAbout(?X,?Y), prefix0:BasketBallClass(?Y).\n" + + "prefix0:Publication(?X) :- prefix0:Specification(?X).\n" + + "prefix0:worksFor(?X,anony:individual6) :- prefix0:ResearchAssistant(?X).\n" + + "prefix0:Person(?X) :- prefix0:SwimmingFan(?X).\n" + + "prefix0:BasketBallClass(anony:individual16) :- prefix0:BasketBallFan(?X).\n" + + "prefix0:Person(?X) :- prefix0:BaseballFan(?X).\n" + + "prefix0:Person(?Y) :- prefix0:isFriendOf(?X,?Y).\n" + + "prefix0:like(?X,anony:individual13) :- prefix0:PeopleWithManyHobbies(?X).\n" + + "owl:differentFrom(anony:individual14,anony:individual15) :- prefix0:PeopleWithManyHobbies(?X).\n" + + "prefix0:hasSameHomeTownWith(?Y,?X) :- prefix0:hasSameHomeTownWith(?X,?Y).\n" + + "prefix0:ResearchGroup(anony:individual6) :- prefix0:ResearchAssistant(?X).\n" + + "prefix0:College(?X) :- prefix0:WomanCollege(?X).\n" + + "prefix0:BaseballClass(anony:individual24) :- prefix0:BaseballFan(?X).\n" + + "owl:differentFrom(anony:individual13,anony:individual15) :- prefix0:PeopleWithManyHobbies(?X).\n" + + "prefix0:Publication(?X) :- prefix0:Book(?X).\n" + + "prefix0:Professor(?X) :- prefix0:FullProfessor(?X).\n" + + "prefix0:Engineering(?X) :- prefix0:Civil_EngineeringClass(?X).\n" + + "prefix0:isStudentOf(?X,anony:individual17) :- prefix0:Student(?X).\n" + + "prefix0:HumanitiesAndSocial(?X) :- prefix0:EnglishClass(?X).\n" + + "prefix0:teachingAssistantOf(?X,anony:individual23) :- prefix0:TeachingAssistant(?X).\n" + + "prefix0:woman(?X) | prefix0:man(?X) :- prefix0:human(?X).\n" + + "prefix0:FineArts(?X) :- prefix0:MusicsClass(?X).\n"; + + for(String line: prefixes.split("\n")) { + String[] split = line.split(" "); + MyPrefixes.PAGOdAPrefixes.declarePrefix(split[1], OWLHelper.removeAngles(split[2])); + } + + InputStream is = new ByteArrayInputStream(rule.getBytes(Charset.defaultCharset())); + DatalogProgram datalogProgram = new DatalogProgram(is); + System.out.println(">> General <<"); + System.out.println(datalogProgram.getGeneral().toString()); + System.out.println(">> Lower <<"); + System.out.println(datalogProgram.getLower().toString()); + System.out.println(">> Upper <<"); + System.out.println(datalogProgram.getUpper().toString()); + System.out.flush(); + } +} -- cgit v1.2.3