aboutsummaryrefslogtreecommitdiff
path: root/src/org/semanticweb/karma2/model/ConjunctiveQuery.java
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();
    }
}