aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
diff options
context:
space:
mode:
authorRncLsn <rnc.lsn@gmail.com>2015-06-02 15:40:29 +0100
committerRncLsn <rnc.lsn@gmail.com>2015-06-02 15:40:29 +0100
commit691964863246bbf6ef9f72cc5e82c83df34f135a (patch)
tree98c9834f788ff320cabcfb29733890c5b40e024f /src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
parent4b7253559c290b6fdd1c4122830f153fda85dd62 (diff)
downloadACQuA-691964863246bbf6ef9f72cc5e82c83df34f135a.tar.gz
ACQuA-691964863246bbf6ef9f72cc5e82c83df34f135a.zip
Working query-dependent semi-skolemised upper bound (tested on UOBM1 and LUBM1).
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java b/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
index 78aced1..9a9d0de 100644
--- a/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
+++ b/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
@@ -16,14 +16,10 @@ import java.lang.reflect.Type;
16import java.util.HashMap; 16import java.util.HashMap;
17import java.util.Map; 17import java.util.Map;
18import java.util.StringTokenizer; 18import java.util.StringTokenizer;
19import java.util.regex.Matcher;
20import java.util.regex.Pattern;
21 19
22public class AnswerTuple { 20public class AnswerTuple {
23 21
24 public static final String SEPARATOR = "\t"; 22 public static final String SEPARATOR = "\t";
25 static final Pattern owlLiteralRegex =
26 Pattern.compile("^\"(?<lexicalForm>[^@]+(@(?<langTag>.+))?)\"(^^<(?<dataType>.+)>)?$");
27 String m_str = null; 23 String m_str = null;
28 GroundTerm[] m_tuple; 24 GroundTerm[] m_tuple;
29 25
@@ -158,32 +154,36 @@ public class AnswerTuple {
158 String tuplesString = json.getAsJsonPrimitive().getAsString(); 154 String tuplesString = json.getAsJsonPrimitive().getAsString();
159// StringTokenizer tokenizer = new StringTokenizer(tuplesString, SEPARATOR); 155// StringTokenizer tokenizer = new StringTokenizer(tuplesString, SEPARATOR);
160 StringTokenizer tokenizer = new StringTokenizer(tuplesString); 156 StringTokenizer tokenizer = new StringTokenizer(tuplesString);
161 GroundTerm[] terms = new GroundTerm[tokenizer.countTokens()]; 157 int tokensCount = tokenizer.countTokens();
158 GroundTerm[] terms = new GroundTerm[tokensCount];
162 159
163 // TODO test parsing 160 // TODO test parsing
164 for (int i = 0; i < tokenizer.countTokens(); i++) { 161 for(int i = 0; i < tokensCount; i++) {
165 String token = tokenizer.nextToken(); 162 String token = tokenizer.nextToken();
166 if (token.charAt(0) == '<') { 163 if (token.charAt(0) == '<') {
167 terms[i] = uk.ac.ox.cs.JRDFox.model.Individual.create(token.substring(1,token.length()-1)); 164 terms[i] = uk.ac.ox.cs.JRDFox.model.Individual.create(token.substring(1,token.length()-1));
168 } 165 }
169 else if (token.charAt(0) == '"') { 166 else if (token.charAt(0) == '"') {
170 Matcher matcher = owlLiteralRegex.matcher(token); 167 Datatype datatype;
171 if(matcher.matches()) { 168 String lexicalForm;
172 String lexicalForm = matcher.group("lexicalForm"); 169 if(token.contains("^^")) {
173 String dataTypeIRI = matcher.group("dataType"); 170 String[] lexicalFormAndType = token.split("^^");
174 Datatype dataType; 171 lexicalForm = lexicalFormAndType[0];
175 if(dataTypeIRI == null || dataTypeIRI.isEmpty()) dataType = Datatype.RDF_PLAIN_LITERAL; 172 datatype = Datatype.value(lexicalFormAndType[1]);
176 else dataType = uk.ac.ox.cs.JRDFox.model.Datatype.value(dataTypeIRI);
177 terms[i] = uk.ac.ox.cs.JRDFox.model.Literal.create(lexicalForm, dataType);
178 } 173 }
179 else { 174 else {
180 throw new IllegalArgumentException("The given json does not represent a valid AnswerTuple"); 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;
181 } 179 }
180 terms[i] = uk.ac.ox.cs.JRDFox.model.Literal.create(lexicalForm, datatype);
182 } 181 }
183 else { 182 else {
184 terms[i] = uk.ac.ox.cs.JRDFox.model.BlankNode.create(token); 183 terms[i] = uk.ac.ox.cs.JRDFox.model.BlankNode.create(token);
185 } 184 }
186 } 185 }
186
187 return new AnswerTuple(terms); 187 return new AnswerTuple(terms);
188 } 188 }
189 } 189 }