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.java191
1 files changed, 0 insertions, 191 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java b/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
deleted file mode 100644
index 1e5fbd4..0000000
--- a/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
+++ /dev/null
@@ -1,191 +0,0 @@
1package uk.ac.ox.cs.pagoda.query;
2
3import com.google.gson.*;
4import org.semanticweb.HermiT.model.Constant;
5import org.semanticweb.HermiT.model.Individual;
6import org.semanticweb.HermiT.model.Term;
7import org.semanticweb.HermiT.model.Variable;
8import uk.ac.ox.cs.JRDFox.JRDFStoreException;
9import uk.ac.ox.cs.JRDFox.model.Datatype;
10import uk.ac.ox.cs.JRDFox.model.GroundTerm;
11import uk.ac.ox.cs.JRDFox.model.Literal;
12import uk.ac.ox.cs.JRDFox.store.TupleIterator;
13import uk.ac.ox.cs.pagoda.util.Namespace;
14
15import java.lang.reflect.Type;
16import java.util.HashMap;
17import java.util.Map;
18import java.util.StringTokenizer;
19
20public class AnswerTuple {
21
22 public static final String SEPARATOR = "\t";
23 String m_str = null;
24 GroundTerm[] m_tuple;
25
26 public AnswerTuple(TupleIterator iter, int arity) {
27 m_tuple = new GroundTerm[arity];
28 try {
29 for (int i = 0; i < arity; ++i)
30 m_tuple[i] = iter.getGroundTerm(i);
31 } catch (JRDFStoreException e) {
32 e.printStackTrace();
33 }
34 }
35
36 public AnswerTuple(GroundTerm[] terms) {
37 m_tuple = terms;
38 }
39
40// private AnswerTuple(String m_str) {
41// this.m_str = m_str;
42// }
43
44 private AnswerTuple(AnswerTuple sup, int arity) {
45 m_tuple = new GroundTerm[arity];
46 for(int i = 0; i < arity; ++i) m_tuple[i] = sup.m_tuple[i];
47 }
48
49 /**
50 * It returns the first argument if its arity equals length, a new AnswerTuple otherwise.
51 */
52 public static AnswerTuple create(AnswerTuple extendedTuple, int length) {
53 if(length == extendedTuple.getArity()) return extendedTuple;
54 else return new AnswerTuple(extendedTuple, length);
55 }
56
57 public int getArity() {
58 return m_tuple.length;
59 }
60
61 public int hashCode() {
62// return toString().hashCode();
63 int code = 0;
64 for (int i = 0; i < m_tuple.length; ++i)
65 code = code * 1997 + m_tuple[i].hashCode();
66 return code;
67 }
68
69 public boolean equals(Object obj) {
70 if (!(obj instanceof AnswerTuple)) return false;
71 AnswerTuple that = (AnswerTuple) obj;
72 if (m_tuple.length != that.m_tuple.length) return false;
73 for (int i = 0; i < m_tuple.length; ++i)
74 if (!m_tuple[i].equals(that.m_tuple[i]))
75 return false;
76 return true;
77// return toString().equals(obj.toString());
78 }
79
80 public String toString() {
81 if(m_str != null) return m_str;
82 StringBuilder sb = new StringBuilder();
83 for (int i = 0; i < m_tuple.length; ++i) {
84 if (sb.length() != 0) sb.append(SEPARATOR);
85 if (m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)
86 sb.append("<").append(((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[i]).getIRI()).append(">");
87 else if (m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.BlankNode) {
88 sb.append(m_tuple[i].toString());
89 }
90 else {
91 Literal l = (Literal) m_tuple[i];
92 sb.append('"').append(l.getLexicalForm()).append("\"");
93 if (!l.getDatatype().equals(Datatype.XSD_STRING) && !l.getDatatype().equals(Datatype.RDF_PLAIN_LITERAL))
94 sb.append("^^<").append(l.getDatatype().getIRI()).append(">");
95 }
96 }
97 return m_str = sb.toString();
98 }
99
100 public GroundTerm getGroundTerm(int i) {
101 return m_tuple[i];
102 }
103
104 public Map<Variable, Term> getAssignment(String[] vars) {
105 Map<Variable, Term> map = new HashMap<Variable, Term>();
106 int index = 0;
107 Term t;
108 for (String var: vars) {
109 if(m_tuple[index] instanceof uk.ac.ox.cs.JRDFox.model.Individual)
110 t = Individual.create((((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[index]).getIRI()));
111 else {
112 uk.ac.ox.cs.JRDFox.model.Literal l = (uk.ac.ox.cs.JRDFox.model.Literal) m_tuple[index];
113 t = Constant.create(l.getLexicalForm(), l.getDatatype().getIRI());
114 }
115 map.put(Variable.create(var), t);
116 ++index;
117 }
118 return map;
119 }
120
121 public boolean hasAuxPredicate() {
122 String iri;
123 for (int i = 0; i < m_tuple.length; ++i)
124 if ((m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)) {
125 iri = ((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[i]).getIRI();
126 if(iri.startsWith(Namespace.PAGODA_AUX) || iri.contains("_AUX") || iri.contains("_neg") || iri.contains("internal:def"))
127 return true;
128 }
129 return false;
130 }
131
132 public boolean hasAnonymousIndividual() {
133 String iri;
134 for(int i = 0; i < m_tuple.length; ++i)
135 if((m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)) {
136 iri = ((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[i]).getIRI();
137 if(iri.startsWith(Namespace.PAGODA_ANONY) || iri.startsWith(Namespace.KARMA_ANONY))
138 return true;
139 }
140 return false;
141 }
142
143 public static class AnswerTupleSerializer implements JsonSerializer<AnswerTuple> {
144
145 public JsonElement serialize(AnswerTuple src, Type typeOfSrc, JsonSerializationContext context) {
146 return new JsonPrimitive(src.toString());
147 }
148
149 }
150
151 public static class AnswerTupleDeserializer implements JsonDeserializer<AnswerTuple> {
152 public AnswerTuple deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
153 throws JsonParseException {
154 String tuplesString = json.getAsJsonPrimitive().getAsString();
155// StringTokenizer tokenizer = new StringTokenizer(tuplesString, SEPARATOR);
156 StringTokenizer tokenizer = new StringTokenizer(tuplesString);
157 int tokensCount = tokenizer.countTokens();
158 GroundTerm[] terms = new GroundTerm[tokensCount];
159
160 // TODO test parsing
161 for(int i = 0; i < tokensCount; i++) {
162 String token = tokenizer.nextToken();
163 if (token.charAt(0) == '<') {
164 terms[i] = uk.ac.ox.cs.JRDFox.model.Individual.create(token.substring(1,token.length()-1));
165 }
166 else if (token.charAt(0) == '"') {
167 Datatype datatype;
168 String lexicalForm;
169 if(token.contains("^^")) {
170 String[] lexicalFormAndType = token.split("^^");
171 lexicalForm = lexicalFormAndType[0];
172 datatype = Datatype.value(lexicalFormAndType[1]);
173 }
174 else {
175 lexicalForm = token.substring(1, token.length() - 1);
176 // TODO check
177// datatype = token.contains("@") ? Datatype.RDF_PLAIN_LITERAL : Datatype.XSD_STRING;
178 datatype = Datatype.XSD_STRING;
179 }
180 terms[i] = uk.ac.ox.cs.JRDFox.model.Literal.create(lexicalForm, datatype);
181 }
182 else {
183 terms[i] = uk.ac.ox.cs.JRDFox.model.BlankNode.create(token);
184 }
185 }
186
187 return new AnswerTuple(terms);
188 }
189 }
190
191}