aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java b/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
new file mode 100644
index 0000000..8d7e0b1
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
@@ -0,0 +1,135 @@
1package uk.ac.ox.cs.pagoda.query;
2
3import java.util.HashMap;
4import java.util.Map;
5
6import org.semanticweb.HermiT.model.Constant;
7import org.semanticweb.HermiT.model.Individual;
8import org.semanticweb.HermiT.model.Term;
9import org.semanticweb.HermiT.model.Variable;
10
11import uk.ac.ox.cs.JRDFox.JRDFStoreException;
12import uk.ac.ox.cs.JRDFox.model.Datatype;
13import uk.ac.ox.cs.JRDFox.model.GroundTerm;
14import uk.ac.ox.cs.JRDFox.model.Literal;
15import uk.ac.ox.cs.JRDFox.store.TupleIterator;
16import uk.ac.ox.cs.pagoda.util.Namespace;
17
18public class AnswerTuple {
19
20 public static final String SEPARATOR = "\t";
21
22 String m_str = null;
23 GroundTerm[] m_tuple;
24
25 public AnswerTuple(TupleIterator iter, int arity) {
26 m_tuple = new GroundTerm[arity];
27 try {
28 for (int i = 0; i < arity; ++i)
29 m_tuple[i] = iter.getGroundTerm(i);
30 } catch (JRDFStoreException e) {
31 e.printStackTrace();
32 }
33 }
34
35 public AnswerTuple(GroundTerm[] terms) {
36 m_tuple = terms;
37 }
38
39 private AnswerTuple(AnswerTuple sup, int arity) {
40 m_tuple = new GroundTerm[arity];
41 for (int i = 0; i < arity; ++i) m_tuple[i] = sup.m_tuple[i];
42 }
43
44 public int getArity() {
45 return m_tuple.length;
46 }
47
48 public int hashCode() {
49// return toString().hashCode();
50 int code = 0;
51 for (int i = 0; i < m_tuple.length; ++i)
52 code = code * 1997 + m_tuple[i].hashCode();
53 return code;
54 }
55
56 public boolean equals(Object obj) {
57 if (!(obj instanceof AnswerTuple)) return false;
58 AnswerTuple that = (AnswerTuple) obj;
59 if (m_tuple.length != that.m_tuple.length) return false;
60 for (int i = 0; i < m_tuple.length; ++i)
61 if (!m_tuple[i].equals(that.m_tuple[i]))
62 return false;
63 return true;
64// return toString().equals(obj.toString());
65 }
66
67 public String toString() {
68 if (m_str != null) return m_str;
69 StringBuilder sb = new StringBuilder();
70 for (int i = 0; i < m_tuple.length; ++i) {
71 if (sb.length() != 0) sb.append(SEPARATOR);
72 if (m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)
73 sb.append("<").append(((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[i]).getIRI()).append(">");
74 else if (m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.BlankNode) {
75 sb.append(((uk.ac.ox.cs.JRDFox.model.BlankNode) m_tuple[i]).toString());
76 }
77 else {
78 Literal l = (Literal) m_tuple[i];
79 sb.append('"').append(l.getLexicalForm()).append("\"");
80 if (!l.getDatatype().equals(Datatype.XSD_STRING) && !l.getDatatype().equals(Datatype.RDF_PLAIN_LITERAL))
81 sb.append("^^<").append(l.getDatatype().getIRI()).append(">");
82 }
83 }
84 return m_str = sb.toString();
85 }
86
87 public GroundTerm getGroundTerm(int i) {
88 return m_tuple[i];
89 }
90
91 public Map<Variable, Term> getAssignment(String[] vars) {
92 Map<Variable, Term> map = new HashMap<Variable, Term>();
93 int index = 0;
94 Term t;
95 for (String var: vars) {
96 if (m_tuple[index] instanceof uk.ac.ox.cs.JRDFox.model.Individual)
97 t = Individual.create((((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[index]).getIRI()));
98 else {
99 uk.ac.ox.cs.JRDFox.model.Literal l = (uk.ac.ox.cs.JRDFox.model.Literal) m_tuple[index];
100 t = Constant.create(l.getLexicalForm(), l.getDatatype().getIRI());
101 }
102 map.put(Variable.create(var), t);
103 ++index;
104 }
105 return map;
106 }
107
108 public boolean hasAuxPredicate() {
109 String iri;
110 for (int i = 0; i < m_tuple.length; ++i)
111 if ((m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)) {
112 iri = ((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[i]).getIRI();
113 if ( iri.startsWith(Namespace.PAGODA_AUX) || iri.contains("_AUX") || iri.contains("_neg") || iri.contains("internal:def"))
114 return true;
115 }
116 return false;
117 }
118
119 public boolean hasAnonyIndividual() {
120 String iri;
121 for (int i = 0; i < m_tuple.length; ++i)
122 if ((m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)) {
123 iri = ((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[i]).getIRI();
124 if (iri.startsWith(Namespace.PAGODA_ANONY) || iri.startsWith(Namespace.KARMA_ANONY))
125 return true;
126 }
127 return false;
128 }
129
130 public static AnswerTuple create(AnswerTuple extendedTuple, int length) {
131 if (length == extendedTuple.getArity()) return extendedTuple;
132 else return new AnswerTuple(extendedTuple, length);
133 }
134
135}