diff options
| author | RncLsn <rnc.lsn@gmail.com> | 2015-06-02 15:40:29 +0100 |
|---|---|---|
| committer | RncLsn <rnc.lsn@gmail.com> | 2015-06-02 15:40:29 +0100 |
| commit | 691964863246bbf6ef9f72cc5e82c83df34f135a (patch) | |
| tree | 98c9834f788ff320cabcfb29733890c5b40e024f /src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java | |
| parent | 4b7253559c290b6fdd1c4122830f153fda85dd62 (diff) | |
| download | ACQuA-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.java | 30 |
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; | |||
| 16 | import java.util.HashMap; | 16 | import java.util.HashMap; |
| 17 | import java.util.Map; | 17 | import java.util.Map; |
| 18 | import java.util.StringTokenizer; | 18 | import java.util.StringTokenizer; |
| 19 | import java.util.regex.Matcher; | ||
| 20 | import java.util.regex.Pattern; | ||
| 21 | 19 | ||
| 22 | public class AnswerTuple { | 20 | public 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 | } |
