diff options
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java')
| -rw-r--r-- | src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java | 94 |
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; | |||
| 22 | public class AnswerTuple { | 22 | public 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 { |
