source: main/trunk/model-sites-dev/von-sparql/js/von-sparql-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: 7.3 KB
RevLine 
[28914]1function 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
11function isRefinedQuery(){
12 if($('#cb_RefineSearch').is(':checked'))
13 return true;
14 else
15 return false;
16}
17
18function 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, '&lt;');
89 query = query.replace(/>/g, '&gt;');
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
98function 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
119function 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 = "&lt;" + item.obj.value + "&gt;";
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
159function 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}
194function 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
210function 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
Note: See TracBrowser for help on using the repository browser.