diff options
| author | RncLsn <rnc.lsn@gmail.com> | 2015-08-04 18:30:46 +0100 |
|---|---|---|
| committer | RncLsn <rnc.lsn@gmail.com> | 2015-08-04 18:30:46 +0100 |
| commit | c3480bb733b8bca976718a3dc2f09a21cb4b1b45 (patch) | |
| tree | 648b2dacb4b162205d26856c4be4bb7389f99141 | |
| parent | 0c39145b3b76b3db73db0a38d5324caa7ff3c434 (diff) | |
| download | ACQuA-c3480bb733b8bca976718a3dc2f09a21cb4b1b45.tar.gz ACQuA-c3480bb733b8bca976718a3dc2f09a21cb4b1b45.zip | |
Rules parsing.
16 files changed, 484 insertions, 59 deletions
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 @@ | |||
| 1 | debug=true | 1 | debug=true |
| 2 | useAlwaysSimpleUpperBound=false | 2 | useAlwaysSimpleUpperBound=false |
| 3 | skolemUpperBound=DISABLED | 3 | #skolemUpperBound=DISABLED |
| 4 | #skolemUpperBound=BEFORE_SUMMARISATION | 4 | #skolemUpperBound=BEFORE_SUMMARISATION |
| 5 | #skolemUpperBound=AFTER_SUMMARISATION | 5 | skolemUpperBound=AFTER_SUMMARISATION |
| 6 | skolemDepth=1 | 6 | skolemDepth=1 |
| 7 | toCallHermit=true | 7 | toCallHermit=true |
| 8 | 8 | ||
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; | |||
| 2 | 2 | ||
| 3 | import org.semanticweb.HermiT.model.*; | 3 | import org.semanticweb.HermiT.model.*; |
| 4 | import uk.ac.ox.cs.pagoda.MyPrefixes; | 4 | import uk.ac.ox.cs.pagoda.MyPrefixes; |
| 5 | import uk.ac.ox.cs.pagoda.owl.OWLHelper; | ||
| 5 | import uk.ac.ox.cs.pagoda.util.Namespace; | 6 | import uk.ac.ox.cs.pagoda.util.Namespace; |
| 6 | 7 | ||
| 8 | import java.security.InvalidParameterException; | ||
| 9 | import java.util.ArrayList; | ||
| 10 | |||
| 7 | public class RuleHelper { | 11 | public class RuleHelper { |
| 12 | private static final String OR = "|"; | ||
| 13 | private static final String IF = ":-"; | ||
| 14 | private static final String AND = ","; | ||
| 8 | 15 | ||
| 9 | // public static String abbreviateIRI(String text) { | 16 | // public static String abbreviateIRI(String text) { |
| 10 | // String prefixName, prefixIRI; | 17 | // String prefixName, prefixIRI; |
| @@ -37,16 +44,16 @@ public class RuleHelper { | |||
| 37 | boolean lastSpace = true; | 44 | boolean lastSpace = true; |
| 38 | for (Atom headAtom: clause.getHeadAtoms()) { | 45 | for (Atom headAtom: clause.getHeadAtoms()) { |
| 39 | if ((atomText = getText(headAtom)) == null) continue; | 46 | if ((atomText = getText(headAtom)) == null) continue; |
| 40 | if (!lastSpace) buf.append(" v "); | 47 | if (!lastSpace) buf.append(" ").append(OR).append(" "); |
| 41 | buf.append(atomText); | 48 | buf.append(atomText); |
| 42 | lastSpace = false; | 49 | lastSpace = false; |
| 43 | } | 50 | } |
| 44 | buf.append(" :- "); | 51 | buf.append(" ").append(IF).append(" "); |
| 45 | lastSpace = true; | 52 | lastSpace = true; |
| 46 | for (Atom bodyAtom: clause.getBodyAtoms()) { | 53 | for (Atom bodyAtom: clause.getBodyAtoms()) { |
| 47 | // for (String str: strs[1].split(", ")) { | 54 | // for (String str: strs[1].split(", ")) { |
| 48 | if ((atomText = getText(bodyAtom)) == null) continue; | 55 | if ((atomText = getText(bodyAtom)) == null) continue; |
| 49 | if (!lastSpace) buf.append(", "); | 56 | if (!lastSpace) buf.append(AND).append(" "); |
| 50 | buf.append(atomText); | 57 | buf.append(atomText); |
| 51 | lastSpace = false; | 58 | lastSpace = false; |
| 52 | } | 59 | } |
| @@ -74,7 +81,7 @@ public class RuleHelper { | |||
| 74 | else builder.append(getText(p)); | 81 | else builder.append(getText(p)); |
| 75 | builder.append("("); | 82 | builder.append("("); |
| 76 | builder.append(getText(atom.getArgument(0))); | 83 | builder.append(getText(atom.getArgument(0))); |
| 77 | builder.append(","); | 84 | builder.append(","); |
| 78 | builder.append(getText(atom.getArgument(1))); | 85 | builder.append(getText(atom.getArgument(1))); |
| 79 | builder.append(")"); | 86 | builder.append(")"); |
| 80 | } | 87 | } |
| @@ -95,4 +102,72 @@ public class RuleHelper { | |||
| 95 | return MyPrefixes.PAGOdAPrefixes.abbreviateIRI(t.toString()); | 102 | return MyPrefixes.PAGOdAPrefixes.abbreviateIRI(t.toString()); |
| 96 | } | 103 | } |
| 97 | 104 | ||
| 105 | public static Term parseTerm(String s) { | ||
| 106 | s = s.trim(); | ||
| 107 | if(s.startsWith("?")) return Variable.create(s.substring(1)); | ||
| 108 | return Individual.create(MyPrefixes.PAGOdAPrefixes.expandIRI(s)); | ||
| 109 | } | ||
| 110 | |||
| 111 | public static Atom parseAtom(String s) { | ||
| 112 | s = s.trim(); | ||
| 113 | |||
| 114 | String[] split = s.split("\\("); | ||
| 115 | String predicateIri = OWLHelper.removeAngles(MyPrefixes.PAGOdAPrefixes.expandText(split[0])); | ||
| 116 | String[] predicateArgs = split[1].substring(0, split[1].length() - 1).split(","); | ||
| 117 | int numOfargs = predicateArgs.length; | ||
| 118 | Term terms[] = new Term[predicateArgs.length]; | ||
| 119 | for (int i = 0; i < terms.length; i++) | ||
| 120 | terms[i] = parseTerm(predicateArgs[i]); | ||
| 121 | if(numOfargs == 1) { | ||
| 122 | AtomicConcept atomicConcept = AtomicConcept.create(predicateIri); | ||
| 123 | return Atom.create(atomicConcept, terms); | ||
| 124 | } | ||
| 125 | else if(numOfargs == 2) { | ||
| 126 | AtomicRole atomicRole = AtomicRole.create(predicateIri); | ||
| 127 | return Atom.create(atomicRole, terms); | ||
| 128 | } | ||
| 129 | else | ||
| 130 | throw new InvalidParameterException(); | ||
| 131 | // TODO? add equality (owl:sameAs)? | ||
| 132 | } | ||
| 133 | |||
| 134 | public static DLClause parseClause(String s) { | ||
| 135 | s = s.trim(); | ||
| 136 | if(s.endsWith(".")) s = s.substring(0, s.length()-1).trim(); | ||
| 137 | |||
| 138 | String[] headAndBody = s.split(IF); | ||
| 139 | String[] headAtomsStr = splitAtoms(headAndBody[0], OR); | ||
| 140 | String[] bodyAtomsStr = splitAtoms(headAndBody[1], AND); | ||
| 141 | |||
| 142 | Atom[] headAtoms = new Atom[headAtomsStr.length]; | ||
| 143 | Atom[] bodyAtoms = new Atom[bodyAtomsStr.length]; | ||
| 144 | for (int i = 0; i < headAtoms.length; i++) | ||
| 145 | headAtoms[i] = parseAtom(headAtomsStr[i]); | ||
| 146 | for (int i = 0; i < bodyAtoms.length; i++) | ||
| 147 | bodyAtoms[i] = parseAtom(bodyAtomsStr[i]); | ||
| 148 | |||
| 149 | return DLClause.create(headAtoms, bodyAtoms); | ||
| 150 | } | ||
| 151 | |||
| 152 | private static String[] splitAtoms(String s, String operator) { | ||
| 153 | char op = operator.charAt(0); | ||
| 154 | ArrayList<String> result = new ArrayList<>(); | ||
| 155 | |||
| 156 | int b = 0; | ||
| 157 | boolean betweenParenthesis = false; | ||
| 158 | for (int i = 0; i < s.length(); i++) { | ||
| 159 | if(s.charAt(i) == '(') | ||
| 160 | betweenParenthesis = true; | ||
| 161 | else if(s.charAt(i) == ')') | ||
| 162 | betweenParenthesis = false; | ||
| 163 | else if(s.charAt(i) == op && !betweenParenthesis) { | ||
| 164 | result.add(s.substring(b, i)); | ||
| 165 | b = i + 1; | ||
| 166 | } | ||
| 167 | } | ||
| 168 | if(b < s.length()) result.add(s.substring(b)); | ||
| 169 | |||
| 170 | return result.toArray(new String[0]); | ||
| 171 | } | ||
| 172 | |||
| 98 | } | 173 | } |
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 { | |||
| 193 | 193 | ||
| 194 | public abstract Collection<Violation> isIntegrated(MultiStageQueryEngine engine, boolean incrementally); | 194 | public abstract Collection<Violation> isIntegrated(MultiStageQueryEngine engine, boolean incrementally); |
| 195 | 195 | ||
| 196 | // TODO -RULE- | ||
| 196 | protected Violation violate(MultiStageQueryEngine engine, DLClause clause, boolean incrementally) { | 197 | protected Violation violate(MultiStageQueryEngine engine, DLClause clause, boolean incrementally) { |
| 197 | Utility.logTrace("checking constraint: " + clause); | 198 | Utility.logTrace("checking constraint: " + clause); |
| 198 | 199 | ||
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 { | |||
| 49 | tripleManager.addTripleByID(tripleManager.getInstance(gapAtom, assignment)); | 49 | tripleManager.addTripleByID(tripleManager.getInstance(gapAtom, assignment)); |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | // TODO -RULE- | ||
| 52 | protected boolean makeSatisfied(Violation violation, Comparator<Atom> comp) { | 53 | protected boolean makeSatisfied(Violation violation, Comparator<Atom> comp) { |
| 53 | LinkedList<AnswerTupleID> tuples = violation.getTuples(); | 54 | LinkedList<AnswerTupleID> tuples = violation.getTuples(); |
| 54 | DLClause constraint = violation.getConstraint(); | 55 | 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 { | |||
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | OWLOntology ontology = o; | 119 | OWLOntology ontology = o; |
| 120 | program = new DatalogProgram(ontology, properties.getToClassify()); | 120 | program = new DatalogProgram(ontology); |
| 121 | 121 | ||
| 122 | importData(program.getAdditionalDataFile()); | 122 | importData(program.getAdditionalDataFile()); |
| 123 | 123 | ||
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 { | |||
| 52 | e.printStackTrace(); | 52 | e.printStackTrace(); |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | DatalogProgram datalogProgram = new DatalogProgram(tbox, false); | 55 | DatalogProgram datalogProgram = new DatalogProgram(tbox); |
| 56 | importData(datalogProgram.getAdditionalDataFile()); | 56 | importData(datalogProgram.getAdditionalDataFile()); |
| 57 | upperStore = new MultiStageQueryEngine("rl-upper", false); | 57 | upperStore = new MultiStageQueryEngine("rl-upper", false); |
| 58 | upperStore.importRDFData("data", getImportedData()); | 58 | 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 { | |||
| 68 | } | 68 | } |
| 69 | 69 | ||
| 70 | ontology = o; | 70 | ontology = o; |
| 71 | program = new DatalogProgram(ontology, properties.getToClassify()); | 71 | program = new DatalogProgram(ontology); |
| 72 | // program.getLower().save(); | 72 | // program.getLower().save(); |
| 73 | // program.getUpper().save(); | 73 | // program.getUpper().save(); |
| 74 | // program.getGeneral().save(); | 74 | // program.getGeneral().save(); |
| @@ -154,7 +154,7 @@ class MyQueryReasoner extends QueryReasoner { | |||
| 154 | // encoder = new TrackingRuleEncoderDisjVar2(program.getUpper(), trackingStore); | 154 | // encoder = new TrackingRuleEncoderDisjVar2(program.getUpper(), trackingStore); |
| 155 | // encoder = new TrackingRuleEncoderDisj2(program.getUpper(), trackingStore); | 155 | // encoder = new TrackingRuleEncoderDisj2(program.getUpper(), trackingStore); |
| 156 | 156 | ||
| 157 | // TODO add consistency check by Skolem-upper-bound | 157 | // TODO? add consistency check by Skolem-upper-bound |
| 158 | 158 | ||
| 159 | if(!isConsistent()) | 159 | if(!isConsistent()) |
| 160 | return false; | 160 | return false; |
| @@ -225,7 +225,7 @@ class MyQueryReasoner extends QueryReasoner { | |||
| 225 | @Override | 225 | @Override |
| 226 | public void evaluateUpper(QueryRecord queryRecord) { | 226 | public void evaluateUpper(QueryRecord queryRecord) { |
| 227 | if(isDisposed()) throw new DisposedException(); | 227 | if(isDisposed()) throw new DisposedException(); |
| 228 | // TODO add new upper store | 228 | // TODO? add new upper store |
| 229 | AnswerTuples rlAnswer = null; | 229 | AnswerTuples rlAnswer = null; |
| 230 | boolean useFull = queryRecord.isBottom() || lazyUpperStore == null; | 230 | boolean useFull = queryRecord.isBottom() || lazyUpperStore == null; |
| 231 | try { | 231 | try { |
| @@ -388,7 +388,7 @@ class MyQueryReasoner extends QueryReasoner { | |||
| 388 | Utility.logInfo(">> Semi-Skolemisation <<"); | 388 | Utility.logInfo(">> Semi-Skolemisation <<"); |
| 389 | t.reset(); | 389 | t.reset(); |
| 390 | 390 | ||
| 391 | DatalogProgram relevantProgram = new DatalogProgram(relevantSubset, false); // toClassify is false | 391 | DatalogProgram relevantProgram = new DatalogProgram(relevantSubset); |
| 392 | 392 | ||
| 393 | MultiStageQueryEngine relevantStore = | 393 | MultiStageQueryEngine relevantStore = |
| 394 | new MultiStageQueryEngine("Relevant-store", true); // checkValidity is true | 394 | 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; | |||
| 2 | 2 | ||
| 3 | import org.semanticweb.owlapi.model.OWLOntology; | 3 | import org.semanticweb.owlapi.model.OWLOntology; |
| 4 | import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; | 4 | import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; |
| 5 | import uk.ac.ox.cs.pagoda.constraints.PredicateDependency; | ||
| 6 | import uk.ac.ox.cs.pagoda.constraints.UpperUnaryBottom; | 5 | import uk.ac.ox.cs.pagoda.constraints.UpperUnaryBottom; |
| 7 | import uk.ac.ox.cs.pagoda.util.disposable.Disposable; | 6 | import uk.ac.ox.cs.pagoda.util.disposable.Disposable; |
| 8 | import uk.ac.ox.cs.pagoda.util.disposable.DisposedException; | 7 | import uk.ac.ox.cs.pagoda.util.disposable.DisposedException; |
| 9 | 8 | ||
| 9 | import java.io.InputStream; | ||
| 10 | |||
| 10 | public class DatalogProgram extends Disposable { | 11 | public class DatalogProgram extends Disposable { |
| 11 | 12 | ||
| 12 | UpperDatalogProgram upperProgram = new UpperDatalogProgram(); | 13 | UpperDatalogProgram upperProgram = new UpperDatalogProgram(); |
| @@ -15,14 +16,36 @@ public class DatalogProgram extends Disposable { | |||
| 15 | 16 | ||
| 16 | BottomStrategy upperBottom; | 17 | BottomStrategy upperBottom; |
| 17 | 18 | ||
| 18 | public DatalogProgram(OWLOntology o) { | 19 | public DatalogProgram(InputStream inputStream) { |
| 19 | lowerProgram = new LowerDatalogProgram(); | 20 | lowerProgram = new LowerDatalogProgram(); |
| 20 | init(o, false); | 21 | |
| 22 | upperProgram.load(inputStream, upperBottom = new UpperUnaryBottom()); | ||
| 23 | lowerProgram.clone(upperProgram); | ||
| 24 | program.clone(upperProgram); | ||
| 25 | |||
| 26 | upperProgram.transform(); | ||
| 27 | lowerProgram.transform(); | ||
| 28 | program.transform(); | ||
| 29 | |||
| 30 | program.buildDependencyGraph(); | ||
| 31 | lowerProgram.dependencyGraph = upperProgram.buildDependencyGraph(); | ||
| 21 | } | 32 | } |
| 22 | 33 | ||
| 23 | public DatalogProgram(OWLOntology o, boolean toClassify) { | 34 | public DatalogProgram(OWLOntology o) { |
| 24 | lowerProgram = new LowerDatalogProgram(toClassify); | 35 | lowerProgram = new LowerDatalogProgram(); |
| 25 | init(o, toClassify); | 36 | |
| 37 | upperProgram.load(o, upperBottom = new UpperUnaryBottom()); | ||
| 38 | // upperProgram.load(o, upperBottom = new UnaryBottom()); | ||
| 39 | lowerProgram.clone(upperProgram); | ||
| 40 | program.clone(upperProgram); | ||
| 41 | // program.botStrategy = new UnaryBottom(); | ||
| 42 | |||
| 43 | upperProgram.transform(); | ||
| 44 | lowerProgram.transform(); | ||
| 45 | program.transform(); | ||
| 46 | |||
| 47 | program.buildDependencyGraph(); | ||
| 48 | lowerProgram.dependencyGraph = upperProgram.buildDependencyGraph(); | ||
| 26 | } | 49 | } |
| 27 | 50 | ||
| 28 | public LowerDatalogProgram getLower() { | 51 | public LowerDatalogProgram getLower() { |
| @@ -55,20 +78,4 @@ public class DatalogProgram extends Disposable { | |||
| 55 | super.dispose(); | 78 | super.dispose(); |
| 56 | if(upperProgram != null) upperProgram.deleteABoxTurtleFile(); | 79 | if(upperProgram != null) upperProgram.deleteABoxTurtleFile(); |
| 57 | } | 80 | } |
| 58 | |||
| 59 | private void init(OWLOntology o, boolean forSemFacet) { | ||
| 60 | upperProgram.load(o, upperBottom = new UpperUnaryBottom()); | ||
| 61 | // upperProgram.load(o, upperBottom = new UnaryBottom()); | ||
| 62 | lowerProgram.clone(upperProgram); | ||
| 63 | program.clone(upperProgram); | ||
| 64 | // program.botStrategy = new UnaryBottom(); | ||
| 65 | |||
| 66 | upperProgram.transform(); | ||
| 67 | lowerProgram.transform(); | ||
| 68 | program.transform(); | ||
| 69 | |||
| 70 | program.buildDependencyGraph(); | ||
| 71 | PredicateDependency graph = upperProgram.buildDependencyGraph(); | ||
| 72 | lowerProgram.dependencyGraph = graph; | ||
| 73 | } | ||
| 74 | } | 81 | } |
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 { | |||
| 15 | ontology = relevantOntology; | 15 | ontology = relevantOntology; |
| 16 | 16 | ||
| 17 | ontologyDirectory = null; | 17 | ontologyDirectory = null; |
| 18 | dlOntology = null; | 18 | // dlOntology = null; |
| 19 | botStrategy = new UnaryBottom(); | 19 | botStrategy = new UnaryBottom(); |
| 20 | 20 | ||
| 21 | clauses = botStrategy.process(relevantClauses); | 21 | 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 | |||
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | 41 | ||
| 42 | // TODO -RULE- filter out unsafe rules | ||
| 42 | @Override | 43 | @Override |
| 43 | public void transform() { | 44 | public void transform() { |
| 44 | if (m_toClassify) { | 45 | if (m_toClassify) { |
| @@ -56,7 +57,7 @@ public class LowerDatalogProgram extends ApproxProgram implements IncrementalPro | |||
| 56 | else | 57 | else |
| 57 | super.transform(); | 58 | super.transform(); |
| 58 | 59 | ||
| 59 | Normalisation norm = new Normalisation(dlOntology.getDLClauses(), ontology, new NullaryBottom()); | 60 | Normalisation norm = new Normalisation(dlClauses, ontology, new NullaryBottom()); |
| 60 | BottomStrategy tBottom = new NullaryBottom(); | 61 | BottomStrategy tBottom = new NullaryBottom(); |
| 61 | norm.process(); | 62 | norm.process(); |
| 62 | for (DLClause nClause: norm.getNormlisedClauses()) { | 63 | 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; | |||
| 4 | import org.semanticweb.HermiT.Configuration; | 4 | import org.semanticweb.HermiT.Configuration; |
| 5 | import org.semanticweb.HermiT.model.*; | 5 | import org.semanticweb.HermiT.model.*; |
| 6 | import org.semanticweb.HermiT.structural.OWLClausification; | 6 | import org.semanticweb.HermiT.structural.OWLClausification; |
| 7 | import org.semanticweb.owlapi.apibinding.OWLManager; | ||
| 7 | import org.semanticweb.owlapi.model.*; | 8 | import org.semanticweb.owlapi.model.*; |
| 8 | import org.semanticweb.simpleETL.SimpleETL; | 9 | import org.semanticweb.simpleETL.SimpleETL; |
| 9 | import uk.ac.ox.cs.pagoda.MyPrefixes; | 10 | import uk.ac.ox.cs.pagoda.MyPrefixes; |
| @@ -13,6 +14,7 @@ import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; | |||
| 13 | import uk.ac.ox.cs.pagoda.constraints.NullaryBottom; | 14 | import uk.ac.ox.cs.pagoda.constraints.NullaryBottom; |
| 14 | import uk.ac.ox.cs.pagoda.constraints.PredicateDependency; | 15 | import uk.ac.ox.cs.pagoda.constraints.PredicateDependency; |
| 15 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; | 16 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; |
| 17 | import uk.ac.ox.cs.pagoda.hermit.RuleHelper; | ||
| 16 | import uk.ac.ox.cs.pagoda.owl.OWLHelper; | 18 | import uk.ac.ox.cs.pagoda.owl.OWLHelper; |
| 17 | import uk.ac.ox.cs.pagoda.util.Utility; | 19 | import uk.ac.ox.cs.pagoda.util.Utility; |
| 18 | 20 | ||
| @@ -23,7 +25,9 @@ public abstract class Program implements KnowledgeBase { | |||
| 23 | 25 | ||
| 24 | protected String ontologyDirectory = null; | 26 | protected String ontologyDirectory = null; |
| 25 | protected OWLOntology ontology; | 27 | protected OWLOntology ontology; |
| 26 | protected DLOntology dlOntology; | 28 | // protected DLOntology dlOntology; |
| 29 | protected Set<DLClause> dlClauses = new HashSet<>(); | ||
| 30 | protected Set<Atom> positiveFacts = new HashSet<>(); | ||
| 27 | protected BottomStrategy botStrategy; | 31 | protected BottomStrategy botStrategy; |
| 28 | protected Collection<DLClause> clauses = new HashSet<DLClause>(); | 32 | protected Collection<DLClause> clauses = new HashSet<DLClause>(); |
| 29 | // protected Set<DLClause> used = new HashSet<DLClause>(); | 33 | // protected Set<DLClause> used = new HashSet<DLClause>(); |
| @@ -40,6 +44,24 @@ protected PredicateDependency dependencyGraph; | |||
| 40 | return sb.toString(); | 44 | return sb.toString(); |
| 41 | } | 45 | } |
| 42 | 46 | ||
| 47 | public void load(InputStream rules, BottomStrategy botStrategy) { | ||
| 48 | // this.botStrategy = botStrategy; | ||
| 49 | // // fake instantiation | ||
| 50 | try { | ||
| 51 | load(OWLManager.createOWLOntologyManager().createOntology(), botStrategy); | ||
| 52 | } catch (OWLOntologyCreationException e) { | ||
| 53 | e.printStackTrace(); | ||
| 54 | } | ||
| 55 | |||
| 56 | try(BufferedReader br = new BufferedReader(new InputStreamReader(rules))) { | ||
| 57 | String line; | ||
| 58 | while((line = br.readLine()) != null) | ||
| 59 | dlClauses.add(RuleHelper.parseClause(line)); | ||
| 60 | } catch (IOException e) { | ||
| 61 | e.printStackTrace(); | ||
| 62 | } | ||
| 63 | } | ||
| 64 | |||
| 43 | public void load(OWLOntology o, BottomStrategy botStrategy) { | 65 | public void load(OWLOntology o, BottomStrategy botStrategy) { |
| 44 | this.botStrategy = botStrategy; | 66 | this.botStrategy = botStrategy; |
| 45 | RLPlusOntology owlOntology = new RLPlusOntology(); | 67 | RLPlusOntology owlOntology = new RLPlusOntology(); |
| @@ -57,7 +79,7 @@ protected PredicateDependency dependencyGraph; | |||
| 57 | OWLOntology abox = OWLHelper.loadOntology(aboxOWLFile); | 79 | OWLOntology abox = OWLHelper.loadOntology(aboxOWLFile); |
| 58 | OWLOntologyManager manager = abox.getOWLOntologyManager(); | 80 | OWLOntologyManager manager = abox.getOWLOntologyManager(); |
| 59 | OWLAxiom axiom; | 81 | OWLAxiom axiom; |
| 60 | for (Atom atom: dlOntology.getPositiveFacts()) { | 82 | for (Atom atom: positiveFacts) { |
| 61 | if ((axiom = OWLHelper.getABoxAssertion(manager.getOWLDataFactory(), atom)) != null) | 83 | if ((axiom = OWLHelper.getABoxAssertion(manager.getOWLDataFactory(), atom)) != null) |
| 62 | manager.addAxiom(abox, axiom); | 84 | manager.addAxiom(abox, axiom); |
| 63 | } | 85 | } |
| @@ -90,7 +112,7 @@ protected PredicateDependency dependencyGraph; | |||
| 90 | 112 | ||
| 91 | @Override | 113 | @Override |
| 92 | public void transform() { | 114 | public void transform() { |
| 93 | for(DLClause dlClause : dlOntology.getDLClauses()) { | 115 | for(DLClause dlClause : dlClauses) { |
| 94 | DLClause simplifiedDLClause = DLClauseHelper.removeNominalConcept(dlClause); | 116 | DLClause simplifiedDLClause = DLClauseHelper.removeNominalConcept(dlClause); |
| 95 | simplifiedDLClause = removeAuxiliaryBodyAtoms(simplifiedDLClause); | 117 | simplifiedDLClause = removeAuxiliaryBodyAtoms(simplifiedDLClause); |
| 96 | simplifiedDLClause = DLClauseHelper.replaceWithDataValue(simplifiedDLClause); | 118 | simplifiedDLClause = DLClauseHelper.replaceWithDataValue(simplifiedDLClause); |
| @@ -190,7 +212,9 @@ protected PredicateDependency dependencyGraph; | |||
| 190 | void clone(Program program) { | 212 | void clone(Program program) { |
| 191 | this.ontologyDirectory = program.ontologyDirectory; | 213 | this.ontologyDirectory = program.ontologyDirectory; |
| 192 | this.ontology = program.ontology; | 214 | this.ontology = program.ontology; |
| 193 | this.dlOntology = program.dlOntology; | 215 | // this.dlOntology = program.dlOntology; |
| 216 | this.dlClauses = program.dlClauses; | ||
| 217 | this.positiveFacts = program.positiveFacts; | ||
| 194 | this.botStrategy = program.botStrategy; | 218 | this.botStrategy = program.botStrategy; |
| 195 | this.additionalDataFile = program.additionalDataFile; | 219 | this.additionalDataFile = program.additionalDataFile; |
| 196 | this.transitiveAxioms = program.transitiveAxioms; | 220 | this.transitiveAxioms = program.transitiveAxioms; |
| @@ -248,8 +272,9 @@ protected PredicateDependency dependencyGraph; | |||
| 248 | } | 272 | } |
| 249 | Utility.logInfo("The number of data property range axioms that are ignored: " + noOfDataPropertyRangeAxioms + "(" + noOfAxioms + ")"); | 273 | Utility.logInfo("The number of data property range axioms that are ignored: " + noOfDataPropertyRangeAxioms + "(" + noOfAxioms + ")"); |
| 250 | 274 | ||
| 251 | dlOntology = (DLOntology) clausifier.preprocessAndClausify(filteredOntology, null)[1]; | 275 | DLOntology dlOntology = (DLOntology) clausifier.preprocessAndClausify(filteredOntology, null)[1]; |
| 252 | clausifier = null; | 276 | dlClauses = dlOntology.getDLClauses(); |
| 277 | positiveFacts = dlOntology.getPositiveFacts(); | ||
| 253 | } | 278 | } |
| 254 | 279 | ||
| 255 | private DLClause removeAuxiliaryBodyAtoms(DLClause dlClause) { | 280 | 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; | |||
| 9 | import java.util.Collection; | 9 | import java.util.Collection; |
| 10 | import java.util.Collections; | 10 | import java.util.Collections; |
| 11 | 11 | ||
| 12 | /** | 12 | /*** |
| 13 | * Approximates existential rules through a limited form of Skolemisation. | 13 | * Approximates existential rules through a limited form of Skolemisation. |
| 14 | * <p> | 14 | * <p> |
| 15 | * Given a rule and a ground substitution, | 15 | * 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.rules.clauses; | ||
| 2 | |||
| 3 | public class Conjunction { | ||
| 4 | } | ||
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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.rules.clauses; | ||
| 2 | |||
| 3 | public class DLClause extends Clause { | ||
| 4 | |||
| 5 | // private DLClause(Atom[] headAtoms, Atom[] bodyAtoms) { | ||
| 6 | // super(headAtoms, bodyAtoms); | ||
| 7 | // } | ||
| 8 | // | ||
| 9 | // public static DLClause create(Atom[] headAtoms, Atom[] bodyAtoms) { | ||
| 10 | // return s_interningManager.intern(new DLClause(headAtoms, bodyAtoms)); | ||
| 11 | // } | ||
| 12 | } | ||
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 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > | ||
| 3 | |||
| 4 | <suite name="MiscellaneousTests"> | ||
| 5 | |||
| 6 | <test name="RuleHelper"> | ||
| 7 | <classes> | ||
| 8 | <class name="uk.ac.ox.cs.pagoda.hermit.TestRuleHelper" /> | ||
| 9 | </classes> | ||
| 10 | </test> | ||
| 11 | |||
| 12 | </suite> \ 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.hermit; | ||
| 2 | |||
| 3 | import org.testng.annotations.Test; | ||
| 4 | import uk.ac.ox.cs.pagoda.MyPrefixes; | ||
| 5 | import uk.ac.ox.cs.pagoda.owl.OWLHelper; | ||
| 6 | import uk.ac.ox.cs.pagoda.rules.DatalogProgram; | ||
| 7 | |||
| 8 | import java.io.ByteArrayInputStream; | ||
| 9 | import java.io.InputStream; | ||
| 10 | import java.nio.charset.Charset; | ||
| 11 | |||
| 12 | public class TestRuleHelper { | ||
| 13 | |||
| 14 | @Test | ||
| 15 | public static void someTest() { | ||
| 16 | String prefixes = "PREFIX anony: <http://www.cs.ox.ac.uk/PAGOdA/skolemised#>\n" + | ||
| 17 | "PREFIX aux: <http://www.cs.ox.ac.uk/PAGOdA/auxiliary#>\n" + | ||
| 18 | "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n" + | ||
| 19 | "PREFIX prefix0: <http://semantics.crl.ibm.com/univ-bench-dl.owl#>\n" + | ||
| 20 | "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" + | ||
| 21 | "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" + | ||
| 22 | "PREFIX ruleml: <http://www.w3.org/2003/11/ruleml#>\n" + | ||
| 23 | "PREFIX swrl: <http://www.w3.org/2003/11/swrl#>\n" + | ||
| 24 | "PREFIX swrlb: <http://www.w3.org/2003/11/swrlb#>\n" + | ||
| 25 | "PREFIX swrlx: <http://www.w3.org/2003/11/swrlx#>\n" + | ||
| 26 | "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n"; | ||
| 27 | String rule = "owl:Nothing(?X) :- owl:Nothing2(?X).\n" + | ||
| 28 | "prefix0:WomanCollege(?X) :- prefix0:College(?X).\n" + | ||
| 29 | "owl:Nothing5(?X) :- prefix0:WomanCollege(?X), prefix0:hasStudent(?X,?Y), prefix0:Man(?Y).\n" + | ||
| 30 | "prefix0:SportsFan(?X) :- prefix0:Person(?X), prefix0:isCrazyAbout(?X,?Y), prefix0:Sports(?Y).\n" + | ||
| 31 | "prefix0:Organization(?X) :- prefix0:isAffiliateOf(?X,?Y).\n" + | ||
| 32 | "prefix0:Person(?X) :- prefix0:lastName(?X,?Y).\n" + | ||
| 33 | "owl:sameAs(?Y1,?Y2) :- prefix0:isHeadOf(?Y1,?X), prefix0:isHeadOf(?Y2,?X).\n" + | ||
| 34 | "prefix0:isMemberOf(?Y,?X) :- prefix0:hasMember(?X,?Y).\n" + | ||
| 35 | "prefix0:Person(?X) :- prefix0:hasMasterDegreeFrom(?X,?Y).\n" + | ||
| 36 | "prefix0:Person(?X) :- prefix0:TeachingAssistant(?X).\n" + | ||
| 37 | "prefix0:Employee(?X) :- prefix0:Person(?X), prefix0:worksFor(?X,?Y), prefix0:Organization(?Y).\n" + | ||
| 38 | "prefix0:FineArts(?X) :- prefix0:Media_Arts_And_ciencesClass(?X).\n" + | ||
| 39 | "prefix0:FineArts(?X) :- prefix0:Medieval_ArtsClass(?X).\n" + | ||
| 40 | "prefix0:Professor(?X) :- prefix0:Chair(?X).\n" + | ||
| 41 | "prefix0:Faculty(?Y) :- prefix0:isTaughtBy(?X,?Y).\n" + | ||
| 42 | "prefix0:worksFor(?X,anony:individual25) :- prefix0:Employee(?X).\n" + | ||
| 43 | "prefix0:Engineering(?X) :- prefix0:Chemical_EngineeringClass(?X).\n" + | ||
| 44 | "prefix0:BaseballClass(anony:individual1) :- prefix0:BaseballLover(?X).\n" + | ||
| 45 | "prefix0:Course(?Y) :- prefix0:listedCourse(?X,?Y).\n" + | ||
| 46 | "prefix0:worksFor(?X,?Y) :- prefix0:isHeadOf(?X,?Y).\n" + | ||
| 47 | "prefix0:Faculty(?X) :- prefix0:teacherOf(?X,?Y).\n" + | ||
| 48 | "prefix0:Course(?Y) :- prefix0:teachingAssistantOf(?X,?Y).\n" + | ||
| 49 | "owl:Nothing(?X) :- owl:Nothing1(?X).\n" + | ||
| 50 | "prefix0:Person(?X) :- prefix0:Student(?X).\n" + | ||
| 51 | "prefix0:isFriendOf(?Y,?X) :- prefix0:isFriendOf(?X,?Y).\n" + | ||
| 52 | "prefix0:Student(?X) :- prefix0:UndergraduateStudent(?X).\n" + | ||
| 53 | "prefix0:Person(?X) :- prefix0:BasketBallLover(?X).\n" + | ||
| 54 | "prefix0:Person(?Y) :- prefix0:hasSameHomeTownWith(?X,?Y).\n" + | ||
| 55 | "prefix0:Employee(?X) :- prefix0:Faculty(?X).\n" + | ||
| 56 | "prefix0:Insterest(?X) :- prefix0:Music(?X).\n" + | ||
| 57 | "owl:Nothing1(?X) :- prefix0:NonScienceStudent(?X), prefix0:hasMajor(?X,?Y), prefix0:Science(?Y).\n" + | ||
| 58 | "owl:sameAs(?Y1,?Y2) :- prefix0:isTaughtBy(?X,?Y1), prefix0:isTaughtBy(?X,?Y2).\n" + | ||
| 59 | "prefix0:hasStudent(?Y,?X) :- prefix0:isStudentOf(?X,?Y).\n" + | ||
| 60 | "prefix0:Student(?X) :- prefix0:ScienceStudent(?X).\n" + | ||
| 61 | "prefix0:like(?X,anony:individual7) :- prefix0:PeopleWithHobby(?X).\n" + | ||
| 62 | "prefix0:Publication(?X) :- prefix0:Article(?X).\n" + | ||
| 63 | "prefix0:isTaughtBy(?Y,?X) :- prefix0:teacherOf(?X,?Y).\n" + | ||
| 64 | "prefix0:isCrazyAbout(?X,anony:individual19) :- prefix0:TennisFan(?X).\n" + | ||
| 65 | "prefix0:Science(?X) :- prefix0:Marine_ScienceClass(?X).\n" + | ||
| 66 | "prefix0:SupportingStaff(?X) :- prefix0:SystemsStaff(?X).\n" + | ||
| 67 | "prefix0:hasStudent(?X,anony:individual10) :- prefix0:College(?X).\n" + | ||
| 68 | "prefix0:FineArts(?X) :- prefix0:Theatre_and_DanceClass(?X).\n" + | ||
| 69 | "prefix0:Organization(?Y) :- prefix0:subOrganizationOf(?X,?Y).\n" + | ||
| 70 | "prefix0:Engineering(?X) :- prefix0:Materical_Science_EngineeringClass(?X).\n" + | ||
| 71 | "prefix0:hasMember(?Y,?X) :- prefix0:isMemberOf(?X,?Y).\n" + | ||
| 72 | "prefix0:Student(?Y) :- prefix0:hasStudent(?X,?Y).\n" + | ||
| 73 | "owl:Nothing(?X) :- owl:Nothing5(?X).\n" + | ||
| 74 | "prefix0:isCrazyAbout(?X,anony:individual18) :- prefix0:SwimmingFan(?X).\n" + | ||
| 75 | "prefix0:Publication(?Y) :- prefix0:orgPublication(?X,?Y).\n" + | ||
| 76 | "prefix0:Chair(?X) :- prefix0:Person(?X), prefix0:isHeadOf(?X,?Y), prefix0:Department(?Y).\n" + | ||
| 77 | "prefix0:isStudentOf(?Y,?X) :- prefix0:hasStudent(?X,?Y).\n" + | ||
| 78 | "prefix0:Person(?X) :- prefix0:isAdvisedBy(?X,?Y).\n" + | ||
| 79 | "prefix0:hasMajor(?X,anony:individual2) :- prefix0:Student(?X).\n" + | ||
| 80 | "prefix0:Publication(?X) :- prefix0:publicationDate(?X,?Y).\n" + | ||
| 81 | "owl:Nothing(?X) :- owl:Nothing6(?X).\n" + | ||
| 82 | "prefix0:Director(?X) :- prefix0:Person(?X), prefix0:isHeadOf(?X,?Y), prefix0:Program(?Y).\n" + | ||
| 83 | "prefix0:Professor(?X) :- prefix0:AssociateProfessor(?X).\n" + | ||
| 84 | "prefix0:TeachingAssistant(?X) :- prefix0:Person(?X), prefix0:teachingAssistantOf(?X,?Y), prefix0:Course(?Y).\n" + | ||
| 85 | "prefix0:Research(?Y) :- prefix0:researchProject(?X,?Y).\n" + | ||
| 86 | "prefix0:TeachingAssistant(?X) :- prefix0:teachingAssistantOf(?X,?Y).\n" + | ||
| 87 | "prefix0:University(?X) :- prefix0:hasAlumnus(?X,?Y).\n" + | ||
| 88 | "prefix0:Faculty(?X) :- prefix0:Lecturer(?X).\n" + | ||
| 89 | "prefix0:isHeadOf(?X,anony:individual21) :- prefix0:Dean(?X).\n" + | ||
| 90 | "prefix0:like(?X,?Y) :- prefix0:isCrazyAbout(?X,?Y).\n" + | ||
| 91 | "prefix0:Person(?X) :- prefix0:hasSameHomeTownWith(?X,?Y).\n" + | ||
| 92 | "prefix0:Organization(?X) :- prefix0:orgPublication(?X,?Y).\n" + | ||
| 93 | "prefix0:Person(?Y) :- prefix0:hasMember(?X,?Y).\n" + | ||
| 94 | "prefix0:HumanitiesAndSocial(?X) :- prefix0:LinguisticsClass(?X).\n" + | ||
| 95 | "prefix0:Engineering(?X) :- prefix0:Aeronautical_EngineeringClass(?X).\n" + | ||
| 96 | "owl:Nothing(?X) :- owl:Nothing3(?X).\n" + | ||
| 97 | "prefix0:isHeadOf(?X,anony:individual12) :- prefix0:Director(?X).\n" + | ||
| 98 | "prefix0:Publication(?X) :- prefix0:publicationAuthor(?X,?Y).\n" + | ||
| 99 | "prefix0:Organization(?X) :- prefix0:College(?X).\n" + | ||
| 100 | "prefix0:isCrazyAbout(?X,anony:individual24) :- prefix0:BaseballFan(?X).\n" + | ||
| 101 | "prefix0:FineArts(?X) :- prefix0:Performing_ArtsClass(?X).\n" + | ||
| 102 | "prefix0:Sports(?X) :- prefix0:BasketBallClass(?X).\n" + | ||
| 103 | "prefix0:HumanitiesAndSocial(?X) :- prefix0:PsychologyClass(?X).\n" + | ||
| 104 | "prefix0:Person(?X) :- prefix0:Employee(?X).\n" + | ||
| 105 | "prefix0:FineArts(?X) :- prefix0:DramaClass(?X).\n" + | ||
| 106 | "prefix0:Faculty(?X) :- prefix0:PostDoc(?X).\n" + | ||
| 107 | "prefix0:University(?Y) :- prefix0:hasDoctoralDegreeFrom(?X,?Y).\n" + | ||
| 108 | "prefix0:Sports(anony:individual0) :- prefix0:SportsLover(?X).\n" + | ||
| 109 | "prefix0:Person(?Y) :- prefix0:hasAlumnus(?X,?Y).\n" + | ||
| 110 | "prefix0:FineArts(?X) :- prefix0:Modern_ArtsClass(?X).\n" + | ||
| 111 | "prefix0:hasMember(?X,?Y) :- prefix0:hasStudent(?X,?Y).\n" + | ||
| 112 | "prefix0:Course(?X) :- prefix0:isTaughtBy(?X,?Y).\n" + | ||
| 113 | "prefix0:NonScienceStudent(?X) :- prefix0:Student(?X).\n" + | ||
| 114 | "prefix0:BasketBallLover(?X) :- prefix0:Person(?X), prefix0:like(?X,?Y), prefix0:BasketBallClass(?Y).\n" + | ||
| 115 | "prefix0:Professor(?X) :- prefix0:VisitingProfessor(?X).\n" + | ||
| 116 | "prefix0:GraduateCourse(?Y) :- prefix0:GraduateStudent(?X), prefix0:takesCourse(?X,?Y).\n" + | ||
| 117 | "prefix0:TennisClass(anony:individual19) :- prefix0:TennisFan(?X).\n" + | ||
| 118 | "prefix0:Work(?X) :- prefix0:Research(?X).\n" + | ||
| 119 | "prefix0:TennisFan(?X) :- prefix0:Person(?X), prefix0:isCrazyAbout(?X,?Y), prefix0:TennisClass(?Y).\n" + | ||
| 120 | "prefix0:ScienceStudent(?X) :- prefix0:Student(?X), prefix0:hasMajor(?X,?Y), prefix0:Science(?Y).\n" + | ||
| 121 | "prefix0:Person(?X) :- prefix0:Woman(?X).\n" + | ||
| 122 | "prefix0:Man(?X) :- prefix0:Person(?X).\n" + | ||
| 123 | "prefix0:Person(?X) :- prefix0:hasUndergraduateDegreeFrom(?X,?Y).\n" + | ||
| 124 | "prefix0:ResearchGroup(?X) :- prefix0:researchProject(?X,?Y).\n" + | ||
| 125 | "prefix0:hasSameHomeTownWith(?X,?Z) :- prefix0:hasSameHomeTownWith(?X,?Y), prefix0:hasSameHomeTownWith(?Y,?Z).\n" + | ||
| 126 | "prefix0:Person(?X) :- prefix0:isFriendOf(?X,?Y).\n" + | ||
| 127 | "prefix0:Person(?Y) :- prefix0:publicationAuthor(?X,?Y).\n" + | ||
| 128 | "prefix0:Person(?X) :- prefix0:Chair(?X).\n" + | ||
| 129 | "prefix0:Publication(?X) :- prefix0:Manual(?X).\n" + | ||
| 130 | "prefix0:Publication(?X) :- prefix0:UnofficialPublication(?X).\n" + | ||
| 131 | "prefix0:Engineering(?X) :- prefix0:Industry_EngineeringClass(?X).\n" + | ||
| 132 | "prefix0:Science(?X) :- prefix0:StatisticsClass(?X).\n" + | ||
| 133 | "prefix0:Organization(?Y) :- prefix0:isStudentOf(?X,?Y).\n" + | ||
| 134 | "prefix0:SwimmingFan(?X) :- prefix0:Person(?X), prefix0:isCrazyAbout(?X,?Y), prefix0:SwimmingClass(?Y).\n" + | ||
| 135 | "prefix0:Person(?X) :- prefix0:emailAddress(?X,?Y).\n" + | ||
| 136 | "prefix0:FineArts(?X) :- prefix0:Latin_ArtsClass(?X).\n" + | ||
| 137 | "prefix0:Organization(?X) :- prefix0:ResearchGroup(?X).\n" + | ||
| 138 | "prefix0:AcademicSubject(?X) :- prefix0:HumanitiesAndSocial(?X).\n" + | ||
| 139 | "prefix0:Professor(?X) :- prefix0:Dean(?X).\n" + | ||
| 140 | "prefix0:SwimmingClass(anony:individual8) :- prefix0:SwimmingLover(?X).\n" + | ||
| 141 | "prefix0:University(?Y) :- prefix0:hasMasterDegreeFrom(?X,?Y).\n" + | ||
| 142 | "prefix0:Article(?X) :- prefix0:ConferencePaper(?X).\n" + | ||
| 143 | "prefix0:Person(?X) :- prefix0:BasketBallFan(?X).\n" + | ||
| 144 | "prefix0:HumanitiesAndSocial(?X) :- prefix0:ReligionsClass(?X).\n" + | ||
| 145 | "prefix0:Science(?X) :- prefix0:PhysicsClass(?X).\n" + | ||
| 146 | "prefix0:Dean(?X) :- prefix0:isHeadOf(?X,?Y), prefix0:College(?Y).\n" + | ||
| 147 | "prefix0:University(?Y) :- prefix0:hasDegreeFrom(?X,?Y).\n" + | ||
| 148 | "prefix0:Organization(?X) :- prefix0:hasMember(?X,?Y).\n" + | ||
| 149 | "prefix0:Engineering(?X) :- prefix0:Computer_EngineeringClass(?X).\n" + | ||
| 150 | "prefix0:Publication(?X) :- prefix0:Software(?X).\n" + | ||
| 151 | "prefix0:Science(?X) :- prefix0:GeosciencesClass(?X).\n" + | ||
| 152 | "prefix0:hasMajor(?X,anony:individual9) :- prefix0:ScienceStudent(?X).\n" + | ||
| 153 | "prefix0:hasDegreeFrom(?Y,?X) :- prefix0:hasAlumnus(?X,?Y).\n" + | ||
| 154 | "prefix0:Software(?X) :- prefix0:softwareDocumentation(?X,?Y).\n" + | ||
| 155 | "prefix0:isMemberOf(?X,?Y) :- prefix0:isStudentOf(?X,?Y).\n" + | ||
| 156 | "prefix0:Organization(?X) :- prefix0:hasStudent(?X,?Y).\n" + | ||
| 157 | "owl:Nothing2(?X) :- prefix0:GraduateCourse(?X), prefix0:GraduateCourse_neg(?X).\n" + | ||
| 158 | "prefix0:BaseballFan(?X) :- prefix0:Person(?X), prefix0:isCrazyAbout(?X,?Y), prefix0:BaseballClass(?Y).\n" + | ||
| 159 | "prefix0:Publication(?X) :- prefix0:publicationResearch(?X,?Y).\n" + | ||
| 160 | "prefix0:like(?X,anony:individual14) :- prefix0:PeopleWithManyHobbies(?X).\n" + | ||
| 161 | "prefix0:SportsLover(?X) :- prefix0:Person(?X), prefix0:like(?X,?Y), prefix0:Sports(?Y).\n" + | ||
| 162 | "prefix0:Organization(?X) :- prefix0:University(?X).\n" + | ||
| 163 | "prefix0:hasAlumnus(?Y,?X) :- prefix0:hasDegreeFrom(?X,?Y).\n" + | ||
| 164 | "prefix0:Science(?X) :- prefix0:Materials_ScienceClass(?X).\n" + | ||
| 165 | "prefix0:Professor(?X) :- prefix0:tenured(?X,?Y).\n" + | ||
| 166 | "prefix0:Faculty(?X) :- prefix0:Professor(?X).\n" + | ||
| 167 | "prefix0:Student(?X) :- prefix0:NonScienceStudent(?X).\n" + | ||
| 168 | "prefix0:Person(?X) :- prefix0:telephone(?X,?Y).\n" + | ||
| 169 | "prefix0:FineArts(?X) :- prefix0:ArchitectureClass(?X).\n" + | ||
| 170 | "prefix0:University(?Y) :- prefix0:hasUndergraduateDegreeFrom(?X,?Y).\n" + | ||
| 171 | "prefix0:Man(anony:individual10) :- prefix0:College(?X).\n" + | ||
| 172 | "prefix0:Person(?X) :- prefix0:Man(?X).\n" + | ||
| 173 | "prefix0:Person(?X) :- prefix0:title(?X,?Y).\n" + | ||
| 174 | "prefix0:subOrganizationOf(?X,?Z) :- prefix0:subOrganizationOf(?X,?Y), prefix0:subOrganizationOf(?Y,?Z).\n" + | ||
| 175 | "owl:sameAs(?Y1,?Y2) :- prefix0:like(?X,?Y1), prefix0:like(?X,?Y2).\n" + | ||
| 176 | "prefix0:takesCourse(?X,anony:individual4) :- prefix0:GraduateStudent(?X).\n" + | ||
| 177 | "prefix0:Sports(?X) :- prefix0:TennisClass(?X).\n" + | ||
| 178 | "prefix0:Engineering(?X) :- prefix0:Petroleuml_EngineeringClass(?X).\n" + | ||
| 179 | "prefix0:Organization(?X) :- prefix0:Institute(?X).\n" + | ||
| 180 | "prefix0:isCrazyAbout(?X,anony:individual16) :- prefix0:BasketBallFan(?X).\n" + | ||
| 181 | "prefix0:Science(?X) :- prefix0:BiologyClass(?X).\n" + | ||
| 182 | "prefix0:Person(?X) :- prefix0:SportsFan(?X).\n" + | ||
| 183 | "prefix0:Course(?X) :- prefix0:GraduateCourse(?X).\n" + | ||
| 184 | "prefix0:Person(?X) :- prefix0:Director(?X).\n" + | ||
| 185 | "prefix0:HumanitiesAndSocial(?X) :- prefix0:EconomicsClass(?X).\n" + | ||
| 186 | "prefix0:Person(?X) :- prefix0:BaseballLover(?X).\n" + | ||
| 187 | "prefix0:HumanitiesAndSocial(?X) :- prefix0:HistoryClass(?X).\n" + | ||
| 188 | "prefix0:FineArts(?X) :- prefix0:Asian_ArtsClass(?X).\n" + | ||
| 189 | "prefix0:isStudentOf(?X,?Y) :- prefix0:enrollIn(?X,?Y).\n" + | ||
| 190 | "prefix0:isHeadOf(?X,anony:individual20) :- prefix0:Chair(?X).\n" + | ||
| 191 | "prefix0:Person(?X) :- prefix0:PeopleWithHobby(?X).\n" + | ||
| 192 | "prefix0:Sports(anony:individual5) :- prefix0:SportsFan(?X).\n" + | ||
| 193 | "prefix0:Science(anony:individual9) :- prefix0:ScienceStudent(?X).\n" + | ||
| 194 | "prefix0:Engineering(?X) :- prefix0:Biomedical_EngineeringClass(?X).\n" + | ||
| 195 | "prefix0:HumanitiesAndSocial(?X) :- prefix0:Modern_LanguagesClass(?X).\n" + | ||
| 196 | "prefix0:like(?X,?Y) :- prefix0:love(?X,?Y).\n" + | ||
| 197 | "prefix0:hasStudent(?X,anony:individual11) :- prefix0:College(?X).\n" + | ||
| 198 | "prefix0:Science(?X) :- prefix0:ChemistryClass(?X).\n" + | ||
| 199 | "prefix0:Student(?X) :- prefix0:takesCourse(?X,?Y).\n" + | ||
| 200 | "prefix0:teacherOf(?Y,?X) :- prefix0:isTaughtBy(?X,?Y).\n" + | ||
| 201 | "prefix0:HumanitiesAndSocial(?X) :- prefix0:AnthropologyClass(?X).\n" + | ||
| 202 | "prefix0:Person(?X) :- prefix0:hasDegreeFrom(?X,?Y).\n" + | ||
| 203 | "prefix0:Person(?X) :- prefix0:hasDoctoralDegreeFrom(?X,?Y).\n" + | ||
| 204 | "prefix0:Engineering(?X) :- prefix0:Electrical_EngineeringClass(?X).\n" + | ||
| 205 | "owl:differentFrom(anony:individual13,anony:individual14) :- prefix0:PeopleWithManyHobbies(?X).\n" + | ||
| 206 | "prefix0:Person(?X) :- prefix0:SportsLover(?X).\n" + | ||
| 207 | "prefix0:Organization(?X) :- prefix0:subOrganizationOf(?X,?Y).\n" + | ||
| 208 | "prefix0:SwimmingLover(?X) :- prefix0:Person(?X), prefix0:like(?X,?Y), prefix0:SwimmingClass(?Y).\n" + | ||
| 209 | "prefix0:BaseballLover(?X) :- prefix0:Person(?X), prefix0:like(?X,?Y), prefix0:BaseballClass(?Y).\n" + | ||
| 210 | "prefix0:Science(?X) :- prefix0:Computer_ScienceClass(?X).\n" + | ||
| 211 | "prefix0:Sports(?X) :- prefix0:SwimmingClass(?X).\n" + | ||
| 212 | "prefix0:Science(?X) :- prefix0:AstronomyClass(?X).\n" + | ||
| 213 | "prefix0:Work(?X) :- prefix0:Course(?X).\n" + | ||
| 214 | "prefix0:Science(?X) :- prefix0:MathematicsClass(?X).\n" + | ||
| 215 | "prefix0:AcademicSubject(?X) :- prefix0:Engineering(?X).\n" + | ||
| 216 | "prefix0:hasDegreeFrom(?X,?Y) :- prefix0:hasUndergraduateDegreeFrom(?X,?Y).\n" + | ||
| 217 | "prefix0:like(?X,anony:individual15) :- prefix0:PeopleWithManyHobbies(?X).\n" + | ||
| 218 | "prefix0:Sports(?X) :- prefix0:BaseballClass(?X).\n" + | ||
| 219 | "prefix0:Student(?X) :- prefix0:isStudentOf(?X,?Y).\n" + | ||
| 220 | "prefix0:Professor(?Y) :- prefix0:isAdvisedBy(?X,?Y).\n" + | ||
| 221 | "prefix0:SwimmingClass(anony:individual18) :- prefix0:SwimmingFan(?X).\n" + | ||
| 222 | "prefix0:like(?X,anony:individual22) :- prefix0:BasketBallLover(?X).\n" + | ||
| 223 | "prefix0:like(?X,anony:individual1) :- prefix0:BaseballLover(?X).\n" + | ||
| 224 | "prefix0:Schedule(?X) :- prefix0:listedCourse(?X,?Y).\n" + | ||
| 225 | "owl:Nothing6(?X) :- owl:differentFrom(?X,?X).\n" + | ||
| 226 | "prefix0:PeopleWithManyHobbies(?X) :- prefix0:like(?X,?Y3).\n" + | ||
| 227 | "prefix0:Course(anony:individual23) :- prefix0:TeachingAssistant(?X).\n" + | ||
| 228 | "prefix0:takesCourse(?X,anony:individual3) :- prefix0:takesCourse(?X,?Y).\n" + | ||
| 229 | "prefix0:love(?X,?Y) :- prefix0:like(?X,?Y).\n" + | ||
| 230 | "prefix0:AcademicSubject(?X) :- prefix0:Science(?X).\n" + | ||
| 231 | "prefix0:Person(?X) :- prefix0:ResearchAssistant(?X).\n" + | ||
| 232 | "prefix0:Insterest(?X) :- prefix0:Sports(?X).\n" + | ||
| 233 | "prefix0:Article(?X) :- prefix0:TechnicalReport(?X).\n" + | ||
| 234 | "prefix0:UndergraduateStudent(?Y) :- prefix0:WomanCollege(?X), prefix0:hasStudent(?X,?Y).\n" + | ||
| 235 | "prefix0:Department(anony:individual20) :- prefix0:Chair(?X).\n" + | ||
| 236 | "prefix0:Woman(?X) :- prefix0:Person(?X).\n" + | ||
| 237 | "owl:Nothing4(?X) :- prefix0:UndergraduateStudent(?X), prefix0:UndergraduateStudent_neg(?X).\n" + | ||
| 238 | "prefix0:HumanitiesAndSocial(?X) :- prefix0:HumanitiesClass(?X).\n" + | ||
| 239 | "prefix0:GraduateCourse_neg(anony:individual3) :- prefix0:takesCourse(?X,?Y).\n" + | ||
| 240 | "prefix0:Organization(?Y) :- prefix0:isAffiliatedOrganizationOf(?X,?Y).\n" + | ||
| 241 | "owl:Nothing(?X) :- owl:Nothing4(?X).\n" + | ||
| 242 | "prefix0:like(?X,anony:individual0) :- prefix0:SportsLover(?X).\n" + | ||
| 243 | "prefix0:Research(?Y) :- prefix0:publicationResearch(?X,?Y).\n" + | ||
| 244 | "prefix0:Professor(?X) :- prefix0:AssistantProfessor(?X).\n" + | ||
| 245 | "prefix0:Program(anony:individual12) :- prefix0:Director(?X).\n" + | ||
| 246 | "prefix0:isMemberOf(?X,?Y) :- prefix0:worksFor(?X,?Y).\n" + | ||
| 247 | "prefix0:Organization(anony:individual25) :- prefix0:Employee(?X).\n" + | ||
| 248 | "prefix0:hasDegreeFrom(?X,?Y) :- prefix0:hasDoctoralDegreeFrom(?X,?Y).\n" + | ||
| 249 | "prefix0:Person(?Y) :- prefix0:isAffiliateOf(?X,?Y).\n" + | ||
| 250 | "prefix0:Student(?X) :- prefix0:Person(?X), prefix0:isStudentOf(?X,?Y), prefix0:Organization(?Y).\n" + | ||
| 251 | "prefix0:PeopleWithHobby(?X) :- prefix0:Person(?X), prefix0:like(?X,?Y).\n" + | ||
| 252 | "prefix0:Organization(anony:individual17) :- prefix0:Student(?X).\n" + | ||
| 253 | "prefix0:Engineering(?X) :- prefix0:Mechanical_EngineeringClass(?X).\n" + | ||
| 254 | "prefix0:Employee(?X) :- prefix0:SupportingStaff(?X).\n" + | ||
| 255 | "prefix0:Organization(?X) :- prefix0:Department(?X).\n" + | ||
| 256 | "prefix0:HumanitiesAndSocial(?X) :- prefix0:PhilosophyClass(?X).\n" + | ||
| 257 | "prefix0:College(anony:individual21) :- prefix0:Dean(?X).\n" + | ||
| 258 | "prefix0:UndergraduateStudent_neg(anony:individual11) :- prefix0:College(?X).\n" + | ||
| 259 | "owl:Nothing3(?X) :- prefix0:Man(?X), prefix0:Woman(?X).\n" + | ||
| 260 | "owl:sameAs(?Y1,?Y2) :- prefix0:takesCourse(?X,?Y1), prefix0:LeisureStudent(?X), prefix0:takesCourse(?X,?Y2).\n" + | ||
| 261 | "prefix0:Organization(?X) :- prefix0:isAffiliatedOrganizationOf(?X,?Y).\n" + | ||
| 262 | "prefix0:isCrazyAbout(?X,anony:individual5) :- prefix0:SportsFan(?X).\n" + | ||
| 263 | "prefix0:Software(?X) :- prefix0:softwareVersion(?X,?Y).\n" + | ||
| 264 | "prefix0:Science(anony:individual2) :- prefix0:Student(?X).\n" + | ||
| 265 | "prefix0:SupportingStaff(?X) :- prefix0:ClericalStaff(?X).\n" + | ||
| 266 | "prefix0:Person(?X) :- prefix0:SwimmingLover(?X).\n" + | ||
| 267 | "prefix0:Person(?X) :- prefix0:age(?X,?Y).\n" + | ||
| 268 | "prefix0:BasketBallClass(anony:individual22) :- prefix0:BasketBallLover(?X).\n" + | ||
| 269 | "prefix0:like(?X,anony:individual8) :- prefix0:SwimmingLover(?X).\n" + | ||
| 270 | "prefix0:Person(?X) :- prefix0:firstName(?X,?Y).\n" + | ||
| 271 | "prefix0:Department(?Y) :- prefix0:enrollIn(?X,?Y).\n" + | ||
| 272 | "prefix0:Publication(?Y) :- prefix0:softwareDocumentation(?X,?Y).\n" + | ||
| 273 | "prefix0:hasDegreeFrom(?X,?Y) :- prefix0:hasMasterDegreeFrom(?X,?Y).\n" + | ||
| 274 | "prefix0:AcademicSubject(?Y) :- prefix0:hasMajor(?X,?Y).\n" + | ||
| 275 | "prefix0:Article(?X) :- prefix0:JournalArticle(?X).\n" + | ||
| 276 | "prefix0:Organization(?X) :- prefix0:Program(?X).\n" + | ||
| 277 | "prefix0:Course(?Y) :- prefix0:teacherOf(?X,?Y).\n" + | ||
| 278 | "prefix0:AcademicSubject(?X) :- prefix0:FineArts(?X).\n" + | ||
| 279 | "prefix0:Person(?X) :- prefix0:TennisFan(?X).\n" + | ||
| 280 | "prefix0:GraduateStudent(?X) :- prefix0:takesCourse(?X,?Y).\n" + | ||
| 281 | "prefix0:BasketBallFan(?X) :- prefix0:Person(?X), prefix0:isCrazyAbout(?X,?Y), prefix0:BasketBallClass(?Y).\n" + | ||
| 282 | "prefix0:Publication(?X) :- prefix0:Specification(?X).\n" + | ||
| 283 | "prefix0:worksFor(?X,anony:individual6) :- prefix0:ResearchAssistant(?X).\n" + | ||
| 284 | "prefix0:Person(?X) :- prefix0:SwimmingFan(?X).\n" + | ||
| 285 | "prefix0:BasketBallClass(anony:individual16) :- prefix0:BasketBallFan(?X).\n" + | ||
| 286 | "prefix0:Person(?X) :- prefix0:BaseballFan(?X).\n" + | ||
| 287 | "prefix0:Person(?Y) :- prefix0:isFriendOf(?X,?Y).\n" + | ||
| 288 | "prefix0:like(?X,anony:individual13) :- prefix0:PeopleWithManyHobbies(?X).\n" + | ||
| 289 | "owl:differentFrom(anony:individual14,anony:individual15) :- prefix0:PeopleWithManyHobbies(?X).\n" + | ||
| 290 | "prefix0:hasSameHomeTownWith(?Y,?X) :- prefix0:hasSameHomeTownWith(?X,?Y).\n" + | ||
| 291 | "prefix0:ResearchGroup(anony:individual6) :- prefix0:ResearchAssistant(?X).\n" + | ||
| 292 | "prefix0:College(?X) :- prefix0:WomanCollege(?X).\n" + | ||
| 293 | "prefix0:BaseballClass(anony:individual24) :- prefix0:BaseballFan(?X).\n" + | ||
| 294 | "owl:differentFrom(anony:individual13,anony:individual15) :- prefix0:PeopleWithManyHobbies(?X).\n" + | ||
| 295 | "prefix0:Publication(?X) :- prefix0:Book(?X).\n" + | ||
| 296 | "prefix0:Professor(?X) :- prefix0:FullProfessor(?X).\n" + | ||
| 297 | "prefix0:Engineering(?X) :- prefix0:Civil_EngineeringClass(?X).\n" + | ||
| 298 | "prefix0:isStudentOf(?X,anony:individual17) :- prefix0:Student(?X).\n" + | ||
| 299 | "prefix0:HumanitiesAndSocial(?X) :- prefix0:EnglishClass(?X).\n" + | ||
| 300 | "prefix0:teachingAssistantOf(?X,anony:individual23) :- prefix0:TeachingAssistant(?X).\n" + | ||
| 301 | "prefix0:woman(?X) | prefix0:man(?X) :- prefix0:human(?X).\n" + | ||
| 302 | "prefix0:FineArts(?X) :- prefix0:MusicsClass(?X).\n"; | ||
| 303 | |||
| 304 | for(String line: prefixes.split("\n")) { | ||
| 305 | String[] split = line.split(" "); | ||
| 306 | MyPrefixes.PAGOdAPrefixes.declarePrefix(split[1], OWLHelper.removeAngles(split[2])); | ||
| 307 | } | ||
| 308 | |||
| 309 | InputStream is = new ByteArrayInputStream(rule.getBytes(Charset.defaultCharset())); | ||
| 310 | DatalogProgram datalogProgram = new DatalogProgram(is); | ||
| 311 | System.out.println(">> General <<"); | ||
| 312 | System.out.println(datalogProgram.getGeneral().toString()); | ||
| 313 | System.out.println(">> Lower <<"); | ||
| 314 | System.out.println(datalogProgram.getLower().toString()); | ||
| 315 | System.out.println(">> Upper <<"); | ||
| 316 | System.out.println(datalogProgram.getUpper().toString()); | ||
| 317 | System.out.flush(); | ||
| 318 | } | ||
| 319 | } | ||
