1 | function newQuery(containerID, GraphType,hardLimit){
|
---|
2 | var Q = new sgvizler.Query();
|
---|
3 | Q.query(generateQuery(hardLimit))
|
---|
4 | .endpointURL(sparqlEndpoint)
|
---|
5 | .endpointOutputFormat("json")
|
---|
6 | .chartFunction($('#sel_ChartType').val())
|
---|
7 | .draw(containerID);
|
---|
8 | }
|
---|
9 |
|
---|
10 | //Checks if all query refinements were entered
|
---|
11 | function isRefinedQuery(){
|
---|
12 | if($('#cb_RefineSearch').is(':checked'))
|
---|
13 | return true;
|
---|
14 | else
|
---|
15 | return false;
|
---|
16 | }
|
---|
17 |
|
---|
18 | function generateQuery(hardLimit){
|
---|
19 | var predicateURL = $('#sel_Predicate').val();
|
---|
20 | var sparqlQuery = "";
|
---|
21 |
|
---|
22 | //Fix to make queries work when object starts with a '<' or '>'
|
---|
23 | var speechMarks = "\"";
|
---|
24 | if($('#sel_RefineObject').val().substring(0,1)=="<")
|
---|
25 | speechMarks="";
|
---|
26 |
|
---|
27 | //Refine to specific graph if chosen
|
---|
28 | var refineDataset = "GRAPH gsdl:" + collectionName + " {\n";
|
---|
29 | var select;
|
---|
30 | var extra = "";
|
---|
31 | var group;
|
---|
32 |
|
---|
33 | //Depending on what type of graph, adjust query
|
---|
34 | if($('#sel_ChartType').val()=="google.visualization.ImageSparkLine"){
|
---|
35 | select = "SELECT ?a WHERE{";
|
---|
36 | extra = 'BIND (REPLACE(?o, "\\\\D", "") as ?trim)' +
|
---|
37 | "BIND (xsd:integer(SUBSTR(?trim,1,4)) as ?a)" +
|
---|
38 | "FILTER (bound(?a))" +
|
---|
39 | "FILTER (?a > 300)" +
|
---|
40 | "FILTER (?a < 2015)" ;
|
---|
41 |
|
---|
42 | group = "GROUP BY ?a order by ?a\n";
|
---|
43 | }
|
---|
44 | else if ($('#sel_ChartType').val()=="google.visualization.LineChart"){
|
---|
45 | select = "SELECT ?a (COUNT(?a) as ?count) WHERE{";
|
---|
46 | extra = 'BIND (REPLACE(?o, "\\\\D", "") as ?trim)' +
|
---|
47 | "BIND (xsd:integer(SUBSTR(?trim,1,4)) as ?a)" +
|
---|
48 | "FILTER (bound(?a))"+
|
---|
49 | "FILTER (?a > 300)" +
|
---|
50 | "FILTER (?a < 2015)" ;
|
---|
51 | group = "GROUP BY ?a order by ?a\n";
|
---|
52 | }
|
---|
53 | else{
|
---|
54 | select = "SELECT (?o as ?Objects) (COUNT (?o) as ?Count) WHERE {\n" ;
|
---|
55 | group = "GROUP BY ?o ORDER BY DESC(?Count)\n";
|
---|
56 | }
|
---|
57 |
|
---|
58 | sparqlQuery = "PREFIX gsdl: <http://localhost:3030/greenstone/data/> \n";
|
---|
59 | sparqlQuery += "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n";
|
---|
60 |
|
---|
61 | if(isRefinedQuery())
|
---|
62 | sparqlQuery += select +
|
---|
63 | " " + refineDataset +
|
---|
64 | " ?s <"+ predicateURL + "> "+ speechMarks + $('#sel_RefineObject').val() + speechMarks +";\n" +
|
---|
65 | " <"+$('#sel_RefinePredicate').val() +"> ?o\n"
|
---|
66 | + extra +
|
---|
67 | "}\n" ;
|
---|
68 | else
|
---|
69 | sparqlQuery += select +
|
---|
70 | " " + refineDataset +
|
---|
71 | " ?s <" + predicateURL + "> ?o\n "
|
---|
72 | + extra +
|
---|
73 | "}\n";
|
---|
74 |
|
---|
75 | //add extra curly brace for end of GRAPH block
|
---|
76 | sparqlQuery+= "}\n";
|
---|
77 |
|
---|
78 | sparqlQuery += group;
|
---|
79 |
|
---|
80 | //If a limit was selected, apply it
|
---|
81 | if($('#sel_Limit').val()!="None")
|
---|
82 | sparqlQuery += " LIMIT " + $('#sel_Limit').val();
|
---|
83 | else
|
---|
84 | sparqlQuery += " LIMIT " + hardLimit;
|
---|
85 |
|
---|
86 |
|
---|
87 | var query = sparqlQuery;
|
---|
88 | query = query.replace(/</g, '<');
|
---|
89 | query = query.replace(/>/g, '>');
|
---|
90 | query = query.replace(/\n/g, '<br/>');
|
---|
91 |
|
---|
92 | $('#span_sparqlQuery').empty() ;
|
---|
93 | $('#span_sparqlQuery').html(query);
|
---|
94 | return sparqlQuery;
|
---|
95 | }
|
---|
96 |
|
---|
97 | //Updates possiblel values for predicate selector
|
---|
98 | function updatePredicateSelector(){
|
---|
99 | var ajaxSparqlQuery = sparqlEndpoint + "?query=" + encodeURIComponent(overviewSparqlQuery);
|
---|
100 | $.ajax({
|
---|
101 | url: ajaxSparqlQuery,
|
---|
102 | type:"GET",
|
---|
103 | data:"output=json",
|
---|
104 | })
|
---|
105 | .done(function( json ) {
|
---|
106 | var parsedJSON = ((typeof json) == "string") ? $.parseJSON(json) : json;
|
---|
107 | $.each(parsedJSON.results.bindings,function(index,item){
|
---|
108 | var pred = item.Predicate.value;
|
---|
109 | var name = tidyPredicate(pred);
|
---|
110 | $('#sel_Predicate')
|
---|
111 | .append("<option value=\""+pred+"\">" + name + "</option>");
|
---|
112 | $('#sel_RefinePredicate')
|
---|
113 | .append("<option value=\""+pred+"\">" + name + "</option>");
|
---|
114 | });
|
---|
115 | });
|
---|
116 | }
|
---|
117 |
|
---|
118 | //Fill in possible values for predicate
|
---|
119 | function updateRefineObjectSelector(predicate){
|
---|
120 | var refineDataset = "GRAPH gsdl:" + collectionName + " {\n";
|
---|
121 |
|
---|
122 | var sparqlQuery = "PREFIX gsdl: <http://localhost:3030/greenstone/data/> \n";
|
---|
123 | sparqlQuery += "SELECT ?obj WHERE{"+
|
---|
124 | refineDataset +
|
---|
125 | " ?s <"+predicate+"> ?obj }}"+
|
---|
126 | "GROUP BY ?obj ORDER BY (?obj)";
|
---|
127 | var ajaxSparqlQuery = sparqlEndpoint + "?query=" + encodeURIComponent(sparqlQuery);
|
---|
128 |
|
---|
129 | $.ajax({
|
---|
130 | url: ajaxSparqlQuery,
|
---|
131 | type:"GET",
|
---|
132 | data:"output=json",
|
---|
133 | })
|
---|
134 | .done(function( json ) {
|
---|
135 | var parsedJSON = ((typeof json) == "string") ? $.parseJSON(json) : json;
|
---|
136 |
|
---|
137 | //Clear selector. Add empty option to start.
|
---|
138 | $('#sel_RefineObject').empty();
|
---|
139 | $('#sel_RefineObject')
|
---|
140 | .append("<option value=\"None\"> </option>");
|
---|
141 |
|
---|
142 | $.each(parsedJSON.results.bindings,function(index,item){
|
---|
143 | var obj;
|
---|
144 | if(item.obj.type == "uri"){
|
---|
145 | obj = "<" + item.obj.value + ">";
|
---|
146 | $('#sel_RefineObject')
|
---|
147 | .append("<option value="+ obj + ">" + obj.substring(0,75) + "</option>");
|
---|
148 | }
|
---|
149 | else{
|
---|
150 | obj = item.obj.value;
|
---|
151 | $('#sel_RefineObject')
|
---|
152 | .append("<option value=\""+ obj +"\">" + obj.substring(0,75) + "</option>");
|
---|
153 | }
|
---|
154 | });
|
---|
155 | $('#sel_RefineObject').next().find('.custom-combobox-input').val("");
|
---|
156 | });
|
---|
157 | }
|
---|
158 |
|
---|
159 | function updateRefinePredicateSelector(obj){
|
---|
160 | //Perform ajax query to return possible predicate values, given object and predicate values already chosen
|
---|
161 | var predicate = $('#sel_Predicate').val();
|
---|
162 | var sparqlQuery;
|
---|
163 | if(obj.substring(0,1) == "<")
|
---|
164 | sparqlQuery = "SELECT ?predicate WHERE{"+
|
---|
165 | " ?s <" + predicate + "> "+ obj + ";"+
|
---|
166 | " ?predicate ?o}"+
|
---|
167 | "GROUP BY ?predicate ORDER BY DESC(?predicate)";
|
---|
168 | else
|
---|
169 | sparqlQuery = "SELECT ?predicate WHERE{"+
|
---|
170 | " ?s <" + predicate + "> \""+ obj + "\";"+
|
---|
171 | " ?predicate ?o}"+
|
---|
172 | "GROUP BY ?predicate ORDER BY DESC(?predicate)";
|
---|
173 | var ajaxSparqlQuery = sparqlEndpoint + "?query=" + encodeURIComponent(sparqlQuery);
|
---|
174 |
|
---|
175 | $.ajax({
|
---|
176 | url: ajaxSparqlQuery,
|
---|
177 | type:"GET",
|
---|
178 | data:"output=json",
|
---|
179 | })
|
---|
180 | .done(function( json ) {
|
---|
181 | var parsedJSON = ((typeof json) == "string") ? $.parseJSON(json) : json;
|
---|
182 | $('#sel_RefinePredicate').empty();
|
---|
183 | $('#sel_RefinePredicate')
|
---|
184 | .append("<option value=\"None\"> </option>");
|
---|
185 | $.each(parsedJSON.results.bindings,function(index,item){
|
---|
186 | var pred = item.predicate.value;
|
---|
187 | var name = tidyPredicate(pred);
|
---|
188 | $('#sel_RefinePredicate')
|
---|
189 | .append("<option value=\""+pred+"\">" + name + "</option>");
|
---|
190 | });
|
---|
191 | $('#sel_RefinePredicate').next().find('.custom-combobox-input').val("");
|
---|
192 | });
|
---|
193 | }
|
---|
194 | function toggle_RefineSearch(enable){
|
---|
195 | if(enable)
|
---|
196 | {
|
---|
197 |
|
---|
198 | $('#refineControls').toggle("slide", { direction: "up" });
|
---|
199 | //$('#sel_RefinePredicate').removeAttr("disabled");
|
---|
200 | //$('#sel_RefineObject').removeAttr("disabled");
|
---|
201 | }
|
---|
202 | else
|
---|
203 | {
|
---|
204 | $('#refineControls').toggle("slide", { direction: "up" });
|
---|
205 | //$('#sel_RefinePredicate').attr("disabled","disabled");
|
---|
206 | //$('#sel_RefineObject').attr("disabled","disabled");
|
---|
207 | }
|
---|
208 | }
|
---|
209 |
|
---|
210 | function tidyPredicate(name)
|
---|
211 | {
|
---|
212 | name = name.replace("http://purl.org/dc/elements/1.1/","dc.");
|
---|
213 | name = name.replace("http://greenstone.org/gsembedded#","gsembedded.");
|
---|
214 | name = name.replace("http://greenstone.org/gsextracted#","gsextracted.");
|
---|
215 | return name;
|
---|
216 | }
|
---|
217 |
|
---|