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.java94
1 files changed, 46 insertions, 48 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java b/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
index cd86282..7220533 100644
--- a/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
+++ b/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
@@ -22,10 +22,11 @@ import java.util.regex.Pattern;
22public class AnswerTuple { 22public class AnswerTuple {
23 23
24 public static final String SEPARATOR = "\t"; 24 public static final String SEPARATOR = "\t";
25 static final Pattern owlLiteralRegex =
26 Pattern.compile("^\"(?<lexicalForm>[^@]+(@(?<langTag>.+))?)\"(^^<(?<dataType>.+)>)?$");
27 String m_str = null;
28 GroundTerm[] m_tuple;
25 29
26 String m_str = null;
27 GroundTerm[] m_tuple;
28
29 public AnswerTuple(TupleIterator iter, int arity) { 30 public AnswerTuple(TupleIterator iter, int arity) {
30 m_tuple = new GroundTerm[arity]; 31 m_tuple = new GroundTerm[arity];
31 try { 32 try {
@@ -33,24 +34,29 @@ public class AnswerTuple {
33 m_tuple[i] = iter.getGroundTerm(i); 34 m_tuple[i] = iter.getGroundTerm(i);
34 } catch (JRDFStoreException e) { 35 } catch (JRDFStoreException e) {
35 e.printStackTrace(); 36 e.printStackTrace();
36 } 37 }
37 } 38 }
38 39
39 public AnswerTuple(GroundTerm[] terms) { 40 public AnswerTuple(GroundTerm[] terms) {
40 m_tuple = terms; 41 m_tuple = terms;
41 }
42
43 private AnswerTuple(AnswerTuple sup, int arity) {
44 m_tuple = new GroundTerm[arity];
45 for (int i = 0; i < arity; ++i) m_tuple[i] = sup.m_tuple[i];
46 } 42 }
47 43
48// private AnswerTuple(String m_str) { 44// private AnswerTuple(String m_str) {
49// this.m_str = m_str; 45// this.m_str = m_str;
50// } 46// }
47
48 private AnswerTuple(AnswerTuple sup, int arity) {
49 m_tuple = new GroundTerm[arity];
50 for(int i = 0; i < arity; ++i) m_tuple[i] = sup.m_tuple[i];
51 }
52
53 public static AnswerTuple create(AnswerTuple extendedTuple, int length) {
54 if(length == extendedTuple.getArity()) return extendedTuple;
55 else return new AnswerTuple(extendedTuple, length);
56 }
51 57
52 public int getArity() { 58 public int getArity() {
53 return m_tuple.length; 59 return m_tuple.length;
54 } 60 }
55 61
56 public int hashCode() { 62 public int hashCode() {
@@ -60,7 +66,7 @@ public class AnswerTuple {
60 code = code * 1997 + m_tuple[i].hashCode(); 66 code = code * 1997 + m_tuple[i].hashCode();
61 return code; 67 return code;
62 } 68 }
63 69
64 public boolean equals(Object obj) { 70 public boolean equals(Object obj) {
65 if (!(obj instanceof AnswerTuple)) return false; 71 if (!(obj instanceof AnswerTuple)) return false;
66 AnswerTuple that = (AnswerTuple) obj; 72 AnswerTuple that = (AnswerTuple) obj;
@@ -73,8 +79,8 @@ public class AnswerTuple {
73 } 79 }
74 80
75 public String toString() { 81 public String toString() {
76 if (m_str != null) return m_str; 82 if(m_str != null) return m_str;
77 StringBuilder sb = new StringBuilder(); 83 StringBuilder sb = new StringBuilder();
78 for (int i = 0; i < m_tuple.length; ++i) { 84 for (int i = 0; i < m_tuple.length; ++i) {
79 if (sb.length() != 0) sb.append(SEPARATOR); 85 if (sb.length() != 0) sb.append(SEPARATOR);
80 if (m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual) 86 if (m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)
@@ -83,64 +89,58 @@ public class AnswerTuple {
83 sb.append(m_tuple[i].toString()); 89 sb.append(m_tuple[i].toString());
84 } 90 }
85 else { 91 else {
86 Literal l = (Literal) m_tuple[i]; 92 Literal l = (Literal) m_tuple[i];
87 sb.append('"').append(l.getLexicalForm()).append("\""); 93 sb.append('"').append(l.getLexicalForm()).append("\"");
88 if (!l.getDatatype().equals(Datatype.XSD_STRING) && !l.getDatatype().equals(Datatype.RDF_PLAIN_LITERAL)) 94 if (!l.getDatatype().equals(Datatype.XSD_STRING) && !l.getDatatype().equals(Datatype.RDF_PLAIN_LITERAL))
89 sb.append("^^<").append(l.getDatatype().getIRI()).append(">"); 95 sb.append("^^<").append(l.getDatatype().getIRI()).append(">");
90 } 96 }
91 } 97 }
92 return m_str = sb.toString(); 98 return m_str = sb.toString();
93 } 99 }
94 100
95 public GroundTerm getGroundTerm(int i) { 101 public GroundTerm getGroundTerm(int i) {
96 return m_tuple[i]; 102 return m_tuple[i];
97 } 103 }
98 104
99 public Map<Variable, Term> getAssignment(String[] vars) { 105 public Map<Variable, Term> getAssignment(String[] vars) {
100 Map<Variable, Term> map = new HashMap<Variable, Term>(); 106 Map<Variable, Term> map = new HashMap<Variable, Term>();
101 int index = 0; 107 int index = 0;
102 Term t; 108 Term t;
103 for (String var: vars) { 109 for (String var: vars) {
104 if (m_tuple[index] instanceof uk.ac.ox.cs.JRDFox.model.Individual) 110 if(m_tuple[index] instanceof uk.ac.ox.cs.JRDFox.model.Individual)
105 t = Individual.create((((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[index]).getIRI())); 111 t = Individual.create((((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[index]).getIRI()));
106 else { 112 else {
107 uk.ac.ox.cs.JRDFox.model.Literal l = (uk.ac.ox.cs.JRDFox.model.Literal) m_tuple[index]; 113 uk.ac.ox.cs.JRDFox.model.Literal l = (uk.ac.ox.cs.JRDFox.model.Literal) m_tuple[index];
108 t = Constant.create(l.getLexicalForm(), l.getDatatype().getIRI()); 114 t = Constant.create(l.getLexicalForm(), l.getDatatype().getIRI());
109 } 115 }
110 map.put(Variable.create(var), t); 116 map.put(Variable.create(var), t);
111 ++index; 117 ++index;
112 } 118 }
113 return map; 119 return map;
114 } 120 }
115 121
116 public boolean hasAuxPredicate() { 122 public boolean hasAuxPredicate() {
117 String iri; 123 String iri;
118 for (int i = 0; i < m_tuple.length; ++i) 124 for (int i = 0; i < m_tuple.length; ++i)
119 if ((m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)) { 125 if ((m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)) {
120 iri = ((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[i]).getIRI(); 126 iri = ((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[i]).getIRI();
121 if ( iri.startsWith(Namespace.PAGODA_AUX) || iri.contains("_AUX") || iri.contains("_neg") || iri.contains("internal:def")) 127 if(iri.startsWith(Namespace.PAGODA_AUX) || iri.contains("_AUX") || iri.contains("_neg") || iri.contains("internal:def"))
122 return true; 128 return true;
123 } 129 }
124 return false; 130 return false;
125 } 131 }
126 132
127 public boolean hasAnonyIndividual() { 133 public boolean hasAnonymousIndividual() {
128 String iri; 134 String iri;
129 for (int i = 0; i < m_tuple.length; ++i) 135 for(int i = 0; i < m_tuple.length; ++i)
130 if ((m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)) { 136 if((m_tuple[i] instanceof uk.ac.ox.cs.JRDFox.model.Individual)) {
131 iri = ((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[i]).getIRI(); 137 iri = ((uk.ac.ox.cs.JRDFox.model.Individual) m_tuple[i]).getIRI();
132 if (iri.startsWith(Namespace.PAGODA_ANONY) || iri.startsWith(Namespace.KARMA_ANONY)) 138 if(iri.startsWith(Namespace.PAGODA_ANONY) || iri.startsWith(Namespace.KARMA_ANONY))
133 return true; 139 return true;
134 } 140 }
135 return false; 141 return false;
136 } 142 }
137 143
138 public static AnswerTuple create(AnswerTuple extendedTuple, int length) {
139 if (length == extendedTuple.getArity()) return extendedTuple;
140 else return new AnswerTuple(extendedTuple, length);
141 }
142
143
144 public static class AnswerTupleSerializer implements JsonSerializer<AnswerTuple> { 144 public static class AnswerTupleSerializer implements JsonSerializer<AnswerTuple> {
145 145
146 public JsonElement serialize(AnswerTuple src, Type typeOfSrc, JsonSerializationContext context) { 146 public JsonElement serialize(AnswerTuple src, Type typeOfSrc, JsonSerializationContext context) {
@@ -149,8 +149,6 @@ public class AnswerTuple {
149 149
150 } 150 }
151 151
152 static final Pattern owlLiteralRegex = Pattern.compile("^\"(?<lexicalForm>[^@]+(@(?<langTag>.+))?)\"(^^<(?<dataType>.+)>)?$");
153
154 public static class AnswerTupleDeserializer implements JsonDeserializer<AnswerTuple> { 152 public static class AnswerTupleDeserializer implements JsonDeserializer<AnswerTuple> {
155 public AnswerTuple deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 153 public AnswerTuple deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
156 throws JsonParseException { 154 throws JsonParseException {