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;
}