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

Last change on this file since 32505 was 29431, checked in by sjs49, 10 years ago

Made formatting changes to make code minutely easier to read

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