[28914] | 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 |
|
---|