aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java')
-rw-r--r--src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java b/src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java
new file mode 100644
index 0000000..de2f87e
--- /dev/null
+++ b/src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java
@@ -0,0 +1,94 @@
1package org.semanticweb.karma2.model;
2
3import java.util.LinkedHashSet;
4import java.util.LinkedList;
5import java.util.List;
6import java.util.Set;
7
8import org.semanticweb.HermiT.model.Atom;
9import org.semanticweb.HermiT.model.Term;
10import org.semanticweb.HermiT.model.Variable;
11
12import uk.ac.ox.cs.JRDFox.Prefixes;
13
14
15public class ExtendedConjunctiveQuery extends ConjunctiveQuery {
16
17 private Term[] ansTerms;
18 private Term[] terms;
19
20 public ExtendedConjunctiveQuery(
21 Atom[] queryAtoms, Term[] answerTerms, Prefixes pref) {
22 super(queryAtoms, getExtendedHead(queryAtoms, answerTerms), pref);
23 this.ansTerms = answerTerms.clone();
24 terms = getQueryTerms(queryAtoms);
25 }
26
27 public int getNumberOfRealAnswerTerms() {
28 return ansTerms.length;
29 }
30
31 public Term getRealAnswerTerm(int termIndex) {
32 return ansTerms[termIndex];
33 }
34
35 public int getNumberOfTerms() {
36 return terms.length;
37 }
38
39 public Term[] getTerms() {
40 return terms;
41 }
42
43
44 public Atom[] getAtoms() {
45 return m_queryAtoms;
46 }
47
48 public Term[] getRealAnswerTerms() {
49 return ansTerms;
50 }
51
52 private static Term[] getExtendedHead(Atom[] queryAtoms, Term[] answerTerms) {
53 List<Term> terms = new LinkedList<Term>();
54 for (Term t :answerTerms) {
55 terms.add(t);
56 }
57 for (Atom a : queryAtoms) {
58 if (a.getArgument(0) instanceof Variable && !terms.contains(a.getArgument(0)))
59 terms.add(a.getArgument(0));
60 if (a.getArity()> 1 && a.getArgument(1) instanceof Variable && !terms.contains(a.getArgument(1)))
61 terms.add(a.getArgument(1));
62 }
63 return terms.toArray(new Term[terms.size()]);
64
65 }
66
67 private static Term[] getQueryTerms(Atom[] queryAtoms) {
68 Set<Term> terms = new LinkedHashSet<Term>();
69 for (Atom a : queryAtoms) {
70 terms.add(a.getArgument(0));
71 if (a.getArity()> 1)
72 terms.add(a.getArgument(1));
73 }
74 return terms.toArray(new Term[terms.size()]);
75 }
76
77
78 public static ExtendedConjunctiveQuery computeExtension(ConjunctiveQuery q) {
79 Term[] answerTerms = new Term[q.getNumberOfAnswerTerms()];
80 for (int i = 0; i < q.getNumberOfAnswerTerms(); i++)
81 answerTerms[i] = q.getAnswerTerm(i);
82 Atom[] atoms = new Atom[q.getNumberOfQueryAtoms()];
83 for (int i = 0; i < q.getNumberOfQueryAtoms(); i++)
84 atoms[i] = q.getQueryAtom(i);
85 return new ExtendedConjunctiveQuery(atoms, answerTerms,q.prefixes);
86
87 }
88
89 public Term getTerm(int i) {
90 return terms[i];
91 }
92
93
94}