source: main/trunk/model-sites-dev/von-sparql/js/von-sparql-comparison-script.js@ 28914

Last change on this file since 28914 was 28914, checked in by ak19, 10 years ago

Supporting javascript libraries and bespoke code written by Steffan to support the von-sparql user interface

File size: 13.6 KB
Line 
1function generateQuery(side,dataset){
2 var predicate = $('#sel_' + side + 'Predicate').val();
3 var sparqlQuery = "";
4
5 var isRefinedQuery = 0;
6 if($('#cb_' + side + 'RefineSearch').is(':checked'))
7 isRefinedQuery = 1;
8
9 //makes sure {<,>} are not mucking up the query
10 var speechMarks = "\"";
11 if($('#sel_' + side + 'PredicateValue').val().substring(0,1)=="<") speechMarks="";
12
13 var refineDataset = "GRAPH gsdl:" + dataset + " {\n";
14 if(isRefinedQuery == 0)
15 sparqlQuery += "SELECT (?o as ?Objects) (COUNT (?o) as ?Count) WHERE {\n" +
16 " " + refineDataset +
17 " ?s <" + predicate + "> ?o\n } \n}\n";
18 else
19 sparqlQuery += "SELECT (?o as ?Objects) (COUNT (?o) as ?Count) WHERE {\n" +
20 " " + refineDataset +
21 " ?s <"+ predicate + "> "+ speechMarks + $('#sel_' + side + 'PredicateValue').val() + speechMarks +";\n" +
22 " <"+$('#sel_' + side + 'VisualizePredicate').val() +"> ?o\n}\n}\n" ;
23 sparqlQuery += "GROUP BY ?o ORDER BY DESC(?Count)\n";
24
25 if($('#sel_' + side + 'Limit').val()!="None")
26 sparqlQuery += " LIMIT " + $('#sel_' + side + 'Limit').val();
27 else
28 sparqlQuery += " LIMIT " + hardLimit;
29
30 return(sparqlQuery);
31}
32
33function generateComparisonQuery(){
34
35 var query = comparisonQuery;
36 var predOut= $('#sel_comparisonPredicate').val();
37 var comparisonMethod = $('#sel_comparisonMethod').val();
38
39 //Start generating query
40 var sparqlQuery = "";
41 var sparqlQueryHeader = "";
42 ///////INTERSECTION///////
43 if(query.type=="intersection"){
44 sparqlQueryHeader += "SELECT DISTINCT ?common ";
45
46 sparqlQuery += "GRAPH gsdl:" + leftCollection + "{" ;
47 if(query.refine_L!="")
48 sparqlQuery += " ?s <" + query.pred_L + "> \"" + query.predval_L + "\";" +
49 query.refine_L;
50 else
51 sparqlQuery += " ?s <" + query.pred_L + "> "// ?common;";
52
53 sparqlQuery += generateFilter("left", comparisonMethod);
54
55 if(!$('#cb_showOnlyCommonObjects').is(':checked')){
56 if($('#sel_comparisonPredicate').val()!=""){
57 var objName = "?Left_" + $('#sel_comparisonPredicate option:selected').text().replace(/\./g, '_');
58 sparqlQuery += "OPTIONAL{ ?s <" + $('#sel_comparisonPredicate').val() + "> " + objName + "}";
59 sparqlQueryHeader+= objName + " ";
60 }
61 if($('#sel_comparisonPredicate1').val()!=""){
62 var objName = "?Left_" + $('#sel_comparisonPredicate1 option:selected').text().replace(/\./g, '_');
63 sparqlQuery += "OPTIONAL{ ?s <" + $('#sel_comparisonPredicate1').val() + "> " + objName + "}";
64 sparqlQueryHeader+= objName + " ";
65 }
66 if($('#sel_comparisonPredicate2').val()!=""){
67 var objName = "?Left_" + $('#sel_comparisonPredicate2 option:selected').text().replace(/\./g, '_');
68 sparqlQuery += "OPTIONAL{ ?s <" + $('#sel_comparisonPredicate2').val() + "> " + objName + "}";
69 sparqlQueryHeader+= objName + " ";
70 }
71 }
72
73 sparqlQuery += "}" +
74 "GRAPH gsdl:" + rightCollection +"{";
75 if(query.refine_R!="")
76 sparqlQuery += " ?s1 <" + query.pred_R + "> \"" + query.predval_R + "\";" +
77 query.refine_R;
78 else
79 sparqlQuery += " ?s1 <" + query.pred_R + "> "// ?common;" ;
80
81 sparqlQuery += generateFilter("right", comparisonMethod);
82
83 if(!$('#cb_showOnlyCommonObjects').is(':checked')){
84 if($('#sel_comparisonPredicate').val()!=""){
85 var objName = "?Right_" + $('#sel_comparisonPredicate option:selected').text().replace(/\./g, '_');
86 sparqlQuery += "OPTIONAL{ ?s1 <" + $('#sel_comparisonPredicate').val() + "> " + objName + "}";
87 sparqlQueryHeader+= objName + " ";
88 }
89 if($('#sel_comparisonPredicate1').val()!=""){
90 var objName = "?Right_" + $('#sel_comparisonPredicate1 option:selected').text().replace(/\./g, '_');
91 sparqlQuery += "OPTIONAL{ ?s1 <" + $('#sel_comparisonPredicate1').val() + "> " + objName + "}";
92 sparqlQueryHeader+= objName + " ";
93 }
94 if($('#sel_comparisonPredicate2').val()!=""){
95 var objName = "?Right_" + $('#sel_comparisonPredicate2 option:selected').text().replace(/\./g, '_');
96 sparqlQuery += "OPTIONAL{ ?s1 <" + $('#sel_comparisonPredicate2').val() + "> " + objName + "}";
97 sparqlQueryHeader+= objName + " ";
98 }
99 }
100
101 sparqlQuery += "}" +
102 "FILTER (?common!=\"\")" +
103 "}";
104 sparqlQuery += "ORDER BY DESC (?common)"
105 }
106
107
108 //////MINUS/////
109 if(query.type=="minus"){
110 sparqlQueryHeader += "SELECT DISTINCT ?minus " ;
111
112 var subj;
113 if(query.datasetSelection==leftCollection){
114 sparqlQuery += "GRAPH gsdl:" + leftCollection + "{ ?s <" + query.pred_L + "> ?minus;"
115 subj = "?s ";
116 }
117 else{
118 sparqlQuery += "GRAPH gsdl:" + rightCollection +"{ ?s1 <" + query.pred_R + "> ?minus;";
119 subj = "?s1 ";
120 }
121
122 if(!$('#cb_showOnlyCommonObjects').is(':checked')){
123 if($('#sel_comparisonPredicate').val()!=""){
124 var objName = "?" + $('#sel_comparisonPredicate option:selected').text().replace(/\./g, '_');
125 sparqlQuery += "OPTIONAL{ " + subj + " <" + $('#sel_comparisonPredicate').val() + "> " + objName + "}";
126 sparqlQueryHeader+= objName + " ";
127 }
128 if($('#sel_comparisonPredicate1').val()!=""){
129 var objName = "?" + $('#sel_comparisonPredicate1 option:selected').text().replace(/\./g, '_');
130 sparqlQuery += "OPTIONAL{ " + subj + " <" + $('#sel_comparisonPredicate1').val() + "> " + objName + "}";
131 sparqlQueryHeader+= objName + " ";
132 }
133 if($('#sel_comparisonPredicate2').val()!=""){
134 var objName = "?" + $('#sel_comparisonPredicate2 option:selected').text().replace(/\./g, '_');
135 sparqlQuery += "OPTIONAL{ " + subj + " <" + $('#sel_comparisonPredicate2').val() + "> " + objName + "}";
136 sparqlQueryHeader+= objName + " ";
137 }
138 }
139
140 sparqlQuery += "} ";
141 sparqlQuery += "MINUS{"
142 + "GRAPH gsdl:" + leftCollection + "{" ;
143 if(query.refine_L!="")
144 sparqlQuery += " ?s <" + query.pred_L + "> \"" + query.predval_L + "\";"
145 + query.refine_L;
146 else
147 sparqlQuery += " ?s <" + query.pred_L + "> ";
148
149 sparqlQuery += generateFilter("left", comparisonMethod)
150 sparqlQuery += "}"
151 + "GRAPH gsdl:" + rightCollection +"{";
152 if(query.refine_R!="")
153 sparqlQuery += " ?s1 <" + query.pred_R + "> \"" + query.predval_L + "\";"
154 + query.refine_L;
155 else
156 sparqlQuery += " ?s1 <" + query.pred_R + "> " ;
157
158 sparqlQuery += generateFilter("right", comparisonMethod)
159 sparqlQuery += "}"
160 + "}}";
161 }
162 sparqlQuery = sparqlQueryHeader + " WHERE{" + sparqlQuery;
163 sparqlQuery += "LIMIT " + $('#sel_comparisonLimit').val() + " ";
164 sparqlQuery += "OFFSET " + ((query.page-1) * $('#sel_comparisonLimit').val());
165 console.log(sparqlQuery);
166 return sparqlQuery;
167}
168
169function generateFilter(side, comparisonMethod){
170 var query = "";
171 var tempVar;
172 if(side == "left")
173 tempVar = "a";
174 else if(side == "right")
175 tempVar = "b";
176 else if(side == "minus")
177 tempVar = "x";
178 switch(comparisonMethod){
179 case "exact":
180 query += "?common;";
181 break;
182 case "10numeric":
183 query += "?"+tempVar + "; "
184 + "BIND (REPLACE (?o, \"\\\\D\",\"\") as ?" + tempVar + "1) "
185 + "BIND (xsd:integer(SUBSTR (?" + tempVar + "1, 1, 10)) as ?common) ";
186 break;
187 case "numeric":
188 query += "?" + tempVar + "; ";
189 if(side == "minus")
190 query += "BIND (REPLACE (?" + tempVar + ", \"\\\\D\",\"\") as ?minus) ";
191 else
192 query += "BIND (REPLACE (?" + tempVar + ", \"\\\\D\",\"\") as ?common) ";
193 break;
194 case "10char":
195 query += "?" + tempVar + "; ";
196 if(side == "minus")
197 query += "BIND (SUBSTR(?" + tempVar + ", 0,10) as ?minus) ";
198 else
199 query += "BIND (SUBSTR(?" + tempVar + ", 0,10) as ?common) ";
200 break;
201 case "minus":
202 query += "?minus;";
203 break;
204 default:
205 break;
206 }
207 return query;
208}
209
210
211
212function updateValueSelector(predicate, selector, collectionName){
213 var refineDataset = "GRAPH gsdl:" + collectionName + " {\n";
214 var sparqlQuery = "PREFIX gsdl: <http://localhost:3030/greenstone/data/> \n";
215 sparqlQuery += "SELECT ?obj WHERE{"+
216 refineDataset +
217 " ?s <"+predicate+"> ?obj }}"+
218 "GROUP BY ?obj ORDER BY (?obj)"+
219 "LIMIT 1000";
220 var ajaxSparqlQuery = sparqlEndpoint + "?query=" + encodeURIComponent(sparqlQuery);
221 currentQueries++;
222 setCursor("wait");
223
224 $.ajax({
225 url: ajaxSparqlQuery,
226 type:"GET",
227 data:"output=json",
228 })
229 .done(function( json ) {
230 var parsedJSON = ((typeof json) == "string") ? $.parseJSON(json) : json;
231
232 //Clear selector. Add empty option to start.
233 var valueSelector = $('#' + selector);
234 valueSelector.empty();
235 valueSelector
236 .append("<option value=\"None\"> </option>");
237
238 $.each(parsedJSON.results.bindings,function(index,item){
239 var obj;
240 if(item.obj.type == "uri"){
241 obj = "&lt;" + item.obj.value + "&gt;";
242 valueSelector
243 .append("<option value="+ obj + ">" + obj.substring(0,75) + "</option>");
244 }
245 else{
246 obj = item.obj.value;
247 valueSelector
248 .append("<option value=\""+ obj +"\">" + obj.substring(0,75) + "</option>");
249 }
250 });
251 valueSelector.next().find('.custom-combobox-input').val("");
252 if(--currentQueries == 0)
253 setCursor("");
254 });
255}
256
257function updateVisualizePredicateSelector(predicate,value,selector,collection){
258 var sparqlQuery;
259 if(value.substring(0,1) == "<")
260 sparqlQuery = "SELECT ?predicate WHERE{"+
261 " ?s <" + predicate + "> "+ value + ";"+
262 " ?predicate ?o}"+
263 "GROUP BY ?predicate ORDER BY DESC(?predicate)";
264 else
265 sparqlQuery = "SELECT ?predicate WHERE{"+
266 " ?s <" + predicate + "> \""+ value + "\";"+
267 " ?predicate ?o}"+
268 "GROUP BY ?predicate ORDER BY DESC(?predicate)";
269
270 var ajaxSparqlQuery = sparqlEndpoint + "?query=" + encodeURIComponent(sparqlQuery);
271 currentQueries++;
272 setCursor("wait");
273
274 $.ajax({
275 url: ajaxSparqlQuery,
276 type:"GET",
277 data:"output=json",
278 })
279 .done(function( json ) {
280 var parsedJSON = ((typeof json) == "string") ? $.parseJSON(json) : json;
281 var dropdown = $('#' + selector);
282 dropdown.empty();
283 dropdown
284 .append("<option value=\"None\"> </option>");
285 $.each(parsedJSON.results.bindings,function(index,item){
286 var pred = item.predicate.value;
287 var name = tidyPredicate(pred);
288 dropdown
289 .append("<option value=\""+pred+"\">" + name + "</option>");
290 });
291 dropdown.next().find('.custom-combobox-input').val("");
292 if(--currentQueries == 0)
293 setCursor("");
294 });
295}
296
297function drawFilteredDataset(side, collection){
298 var Q = new sgvizler.Query();
299 Q.query(generateQuery(side, collection))
300 .endpointURL(sparqlEndpoint)
301 .endpointOutputFormat("json")
302 .chartFunction($('#sel_' + side + 'ChartType').val())
303 .draw("div_" + side + "FilteredDataset");
304
305}
306
307function drawComparisonTable(){
308 sgvizler.defaultChartWidth("auto");
309 sgvizler.defaultChartHeight(280);
310 var Q = new sgvizler.Query();
311 Q.query(generateComparisonQuery())
312 .endpointURL(sparqlEndpoint)
313 .endpointOutputFormat("json")
314 .chartFunction("google.visualization.Table")
315 .draw("div_combinedResultsVisualization");
316 sgvizler.defaultChartWidth(defaultChartWidth);
317 sgvizler.defaultChartHeight(defaultChartHeight);
318
319/* var ajaxSparqlQuery = sparqlEndpoint + "?query=" + encodeURIComponent(generateComparisonQuery());
320
321 $('#table_combinedResults').jqGrid({
322 url: ajaxSparqlQuery,
323 datatype: "spreadsheet",
324 colNames: ['Common'],
325 colModel: [{name: 'common',
326 index: 'results.bindings.common',
327 width: '300'}],
328 rowNum: 10,
329 rowList: [10,20,30],
330 pager: '#table_combinedResultsPager',
331// sortname: 'common',
332 viewrecords: true,
333 sortorder: 'desc',
334 caption: 'Results table'
335 });
336 $('#table_combinedResults').jqGrid('navGrid','#div_combinedResultsPager',{edit:false, add:false, del:false});
337
338*/
339}
340
341function tidyPredicate(name){
342 name = name.replace("http://purl.org/dc/elements/1.1/","dc.");
343 name = name.replace("http://purl.org/ontology/bibo/","bibo.");
344 name = name.replace("http://greenstone.org/gsembedded#","gsembedded.");
345 name = name.replace("http://greenstone.org/gsextracted#","gsextracted.");
346 return name;
347}
348//Fills the predicate selector with values
349function populatePredicateSelector(collection, selector){
350 $('#' + selector).empty();
351 if(selector=="sel_comparisonPredicate"){
352 $('#' + selector + "1")
353 .empty()
354 .append("<option value=\"\"> </option>");
355 $('#' + selector + "2")
356 .empty()
357 .append("<option value=\"\"> </option>");
358 }
359
360 var ajaxSparqlQuery = sparqlEndpoint + "?query=" + encodeURIComponent(createOverviewQuery(collection));
361 currentQueries++;
362 setCursor("wait");
363 $.ajax({
364 url: ajaxSparqlQuery,
365 type:"GET",
366 data:"output=json",
367 })
368 .done(function( json ) {
369 var parsedJSON = ((typeof json) == "string") ? $.parseJSON(json) : json;
370 $.each(parsedJSON.results.bindings,function(index,item){
371 if(typeof(item.Predicate)!="undefined"){
372 if(selector=="sel_leftPredicate" || selector == "sel_rightPredicate"){
373 var side = selector.substring(0, selector.indexOf("P"));
374 var pred = item.Predicate.value;
375 var name = tidyPredicate(pred);
376 $('#' + selector)
377 .append("<option value=\""+pred+"\">" + name + "</option>");
378 $('#' + side + "VisualizePredicate")
379 .append("<option value=\""+pred+"\">" + name + "</option>");
380
381 }
382 else{
383 var pred = item.Predicate.value;
384 var name = tidyPredicate(pred);
385 $('#' + selector)
386 .append("<option value=\""+pred+"\">" + name + "</option>");
387 $('#' + selector + "1")
388 .append("<option value=\""+pred+"\">" + name + "</option>");
389 $('#' + selector + "2")
390 .append("<option value=\""+pred+"\">" + name + "</option>");
391 }
392 }
393 });
394 if(--currentQueries == 0)
395 setCursor("");
396 });
397}
398
399function setCursor(style){
400 console.log("Cursor: " + style);
401 document.body.style.cursor = style;
402}
Note: See TracBrowser for help on using the repository browser.