diff options
Diffstat (limited to 'src/main/java/org/semanticweb/karma2/model/ConjunctiveQuery.java')
| -rw-r--r-- | src/main/java/org/semanticweb/karma2/model/ConjunctiveQuery.java | 80 |
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 @@ | |||
| 1 | package org.semanticweb.karma2.model; | ||
| 2 | |||
| 3 | import java.io.FileNotFoundException; | ||
| 4 | import java.io.IOException; | ||
| 5 | import java.util.Map; | ||
| 6 | |||
| 7 | import org.semanticweb.HermiT.model.Atom; | ||
| 8 | import org.semanticweb.HermiT.model.Term; | ||
| 9 | import org.semanticweb.karma2.exception.IllegalInputQueryException; | ||
| 10 | import org.semanticweb.karma2.model.cqparser.ConjunctiveQueryParser; | ||
| 11 | |||
| 12 | import uk.ac.ox.cs.JRDFox.Prefixes; | ||
| 13 | |||
| 14 | |||
| 15 | public 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 | ||
