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