function newQuery(containerID, GraphType,hardLimit){ var Q = new sgvizler.Query(); Q.query(generateQuery(hardLimit)) .endpointURL(sparqlEndpoint) .endpointOutputFormat("json") .chartFunction($('#sel_ChartType').val()) .draw(containerID); } //Checks if all query refinements were entered function isRefinedQuery(){ if($('#cb_RefineSearch').is(':checked')) return true; else return false; } function generateQuery(hardLimit){ var predicateURL = $('#sel_Predicate').val(); var sparqlQuery = ""; //Fix to make queries work when object starts with a '<' or '>' var speechMarks = "\""; if($('#sel_RefineObject').val().substring(0,1)=="<") speechMarks=""; //Refine to specific graph if chosen var refineDataset = "GRAPH gsdl:" + collectionName + " {\n"; var select; var extra = ""; var group; //Depending on what type of graph, adjust query if($('#sel_ChartType').val()=="google.visualization.ImageSparkLine"){ select = "SELECT ?a WHERE{"; extra = 'BIND (REPLACE(?o, "\\\\D", "") as ?trim)' + "BIND (xsd:integer(SUBSTR(?trim,1,4)) as ?a)" + "FILTER (bound(?a))" + "FILTER (?a > 300)" + "FILTER (?a < 2015)" ; group = "GROUP BY ?a order by ?a\n"; } else if ($('#sel_ChartType').val()=="google.visualization.LineChart"){ select = "SELECT ?a (COUNT(?a) as ?count) WHERE{"; extra = 'BIND (REPLACE(?o, "\\\\D", "") as ?trim)' + "BIND (xsd:integer(SUBSTR(?trim,1,4)) as ?a)" + "FILTER (bound(?a))"+ "FILTER (?a > 300)" + "FILTER (?a < 2015)" ; group = "GROUP BY ?a order by ?a\n"; } else{ select = "SELECT (?o as ?Objects) (COUNT (?o) as ?Count) WHERE {\n" ; group = "GROUP BY ?o ORDER BY DESC(?Count)\n"; } sparqlQuery = "PREFIX gsdl: \n"; sparqlQuery += "PREFIX xsd: \n"; if(isRefinedQuery()) sparqlQuery += select + " " + refineDataset + " ?s <"+ predicateURL + "> "+ speechMarks + $('#sel_RefineObject').val() + speechMarks +";\n" + " <"+$('#sel_RefinePredicate').val() +"> ?o\n" + extra + "}\n" ; else sparqlQuery += select + " " + refineDataset + " ?s <" + predicateURL + "> ?o\n " + extra + "}\n"; //add extra curly brace for end of GRAPH block sparqlQuery+= "}\n"; sparqlQuery += group; //If a limit was selected, apply it if($('#sel_Limit').val()!="None") sparqlQuery += " LIMIT " + $('#sel_Limit').val(); else sparqlQuery += " LIMIT " + hardLimit; var query = sparqlQuery; query = query.replace(//g, '>'); query = query.replace(/\n/g, '
'); $('#span_sparqlQuery').empty() ; $('#span_sparqlQuery').html(query); return sparqlQuery; } //Updates possiblel values for predicate selector function updatePredicateSelector(){ var ajaxSparqlQuery = sparqlEndpoint + "?query=" + encodeURIComponent(overviewSparqlQuery); $.ajax({ url: ajaxSparqlQuery, type:"GET", data:"output=json", }) .done(function( json ) { var parsedJSON = ((typeof json) == "string") ? $.parseJSON(json) : json; $.each(parsedJSON.results.bindings,function(index,item){ var pred = item.Predicate.value; var name = tidyPredicate(pred); $('#sel_Predicate') .append(""); $('#sel_RefinePredicate') .append(""); }); }); } //Fill in possible values for predicate function updateRefineObjectSelector(predicate){ var refineDataset = "GRAPH gsdl:" + collectionName + " {\n"; var sparqlQuery = "PREFIX gsdl: \n"; sparqlQuery += "SELECT ?obj WHERE{"+ refineDataset + " ?s <"+predicate+"> ?obj }}"+ "GROUP BY ?obj ORDER BY (?obj)"; var ajaxSparqlQuery = sparqlEndpoint + "?query=" + encodeURIComponent(sparqlQuery); $.ajax({ url: ajaxSparqlQuery, type:"GET", data:"output=json", }) .done(function( json ) { var parsedJSON = ((typeof json) == "string") ? $.parseJSON(json) : json; //Clear selector. Add empty option to start. $('#sel_RefineObject').empty(); $('#sel_RefineObject') .append(""); $.each(parsedJSON.results.bindings,function(index,item){ var obj; if(item.obj.type == "uri"){ obj = "<" + item.obj.value + ">"; $('#sel_RefineObject') .append(""); } else{ obj = item.obj.value; $('#sel_RefineObject') .append(""); } }); $('#sel_RefineObject').next().find('.custom-combobox-input').val(""); }); } function updateRefinePredicateSelector(obj){ //Perform ajax query to return possible predicate values, given object and predicate values already chosen var predicate = $('#sel_Predicate').val(); var sparqlQuery; if(obj.substring(0,1) == "<") sparqlQuery = "SELECT ?predicate WHERE{"+ " ?s <" + predicate + "> "+ obj + ";"+ " ?predicate ?o}"+ "GROUP BY ?predicate ORDER BY DESC(?predicate)"; else sparqlQuery = "SELECT ?predicate WHERE{"+ " ?s <" + predicate + "> \""+ obj + "\";"+ " ?predicate ?o}"+ "GROUP BY ?predicate ORDER BY DESC(?predicate)"; var ajaxSparqlQuery = sparqlEndpoint + "?query=" + encodeURIComponent(sparqlQuery); $.ajax({ url: ajaxSparqlQuery, type:"GET", data:"output=json", }) .done(function( json ) { var parsedJSON = ((typeof json) == "string") ? $.parseJSON(json) : json; $('#sel_RefinePredicate').empty(); $('#sel_RefinePredicate') .append(""); $.each(parsedJSON.results.bindings,function(index,item){ var pred = item.predicate.value; var name = tidyPredicate(pred); $('#sel_RefinePredicate') .append(""); }); $('#sel_RefinePredicate').next().find('.custom-combobox-input').val(""); }); } function toggle_RefineSearch(enable){ if(enable) { $('#refineControls').toggle("slide", { direction: "up" }); //$('#sel_RefinePredicate').removeAttr("disabled"); //$('#sel_RefineObject').removeAttr("disabled"); } else { $('#refineControls').toggle("slide", { direction: "up" }); //$('#sel_RefinePredicate').attr("disabled","disabled"); //$('#sel_RefineObject').attr("disabled","disabled"); } } function tidyPredicate(name) { name = name.replace("http://purl.org/dc/elements/1.1/","dc."); name = name.replace("http://greenstone.org/gsembedded#","gsembedded."); name = name.replace("http://greenstone.org/gsextracted#","gsextracted."); return name; }