aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/semanticweb/karma2/model/ConjunctiveQuery.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/semanticweb/karma2/model/ConjunctiveQuery.java')
-rw-r--r--src/main/java/org/semanticweb/karma2/model/ConjunctiveQuery.java80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/main/java/org/semanticweb/karma2/model/ConjunctiveQuery.java b/src/main/java/org/semanticweb/karma2/model/ConjunctiveQuery.java
new file mode 100644
index 0000000..17f3169
--- /dev/null
+++ b/src/main/java/org/semanticweb/karma2/model/ConjunctiveQuery.java
@@ -0,0 +1,80 @@
1package org.semanticweb.karma2.model;
2
3import java.io.FileNotFoundException;
4import java.io.IOException;
5import java.util.Map;
6
7import org.semanticweb.HermiT.model.Atom;
8import org.semanticweb.HermiT.model.Term;
9import org.semanticweb.karma2.exception.IllegalInputQueryException;
10import org.semanticweb.karma2.model.cqparser.ConjunctiveQueryParser;
11
12import uk.ac.ox.cs.JRDFox.Prefixes;
13
14
15public class ConjunctiveQuery {
16
17
18 protected final Atom[] m_queryAtoms;
19 protected final Term[] m_answerTerms;
20 protected final Term[] m_resultBuffer;
21 protected Prefixes prefixes;
22
23 public ConjunctiveQuery(Atom[] queryAtoms,Term[] answerTerms) {
24 m_queryAtoms=queryAtoms;
25 m_answerTerms=answerTerms;
26 m_resultBuffer=answerTerms.clone();
27 prefixes = new Prefixes();
28 }
29
30
31 public Prefixes getPrefixes() {
32 return this.prefixes;
33 }
34
35 public ConjunctiveQuery(Atom[] queryAtoms,Term[] answerTerms, Prefixes prefixes) {
36 m_queryAtoms=queryAtoms;
37 m_answerTerms=answerTerms;
38 m_resultBuffer=answerTerms.clone();
39 this.prefixes = prefixes;
40 }
41
42 public int getNumberOfQueryAtoms() {
43 return m_queryAtoms.length;
44 }
45 public Atom getQueryAtom(int atomIndex) {
46 return m_queryAtoms[atomIndex];
47 }
48 public int getNumberOfAnswerTerms() {
49 return m_answerTerms.length;
50 }
51 public Term getAnswerTerm(int termIndex) {
52 return m_answerTerms[termIndex];
53 }
54
55
56 public String toString() {
57 String res = "";
58 Map<String, String> iriMap = prefixes.getPrefixIRIsByPrefixName();
59 for (String shortIri: iriMap.keySet())
60 res += "prefix " + shortIri + " <" + iriMap.get(shortIri) + ">\n";
61 res += "prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n";
62 res += "select ";
63 for (Term t: m_answerTerms)
64 res+= " " + t + " ";
65 res += " WHERE { ";
66 for (Atom a : m_queryAtoms){
67 if (a.getArity() == 1)
68 res+= a.getArgument(0) + " rdf:type " + a.getDLPredicate().toString().replace('<', ' ').replace('>', ' ') + " . ";
69 if (a.getArity() == 2)
70 res+= a.getArgument(0) + " " + a.getDLPredicate().toString().replace('<', ' ').replace('>', ' ') + " " + a.getArgument(1) + " . ";
71 }
72 return res + "}";
73
74 }
75
76
77 public static ConjunctiveQuery parse(String query) throws FileNotFoundException, IllegalInputQueryException, IOException {
78 return (new ConjunctiveQueryParser(query)).parse();
79 }
80} \ No newline at end of file