API Docs for:
Show:

File: queries.js

/**
 * Queries used in the ajax requests.
 *
 * @module Queries
 */
 
var url = "http://live.dbpedia.org/sparql";
var rankArray = ["kingdom", "phylum", "class", "order", "family", "genus", "species"];
/**
* Checks if dbpedia or dbpedia live is up and sets url accordingly
*
* @class checkUrl
* @constructor
*/
function checkUrl() {
	/*
    var query = 'select distinct ?Concept where {[] a ?Concept} LIMIT 1';
    var queryUrl = encodeURI(url + "?query=" + query + "&format=json");
    $.ajax({
        dataType: "jsonp",
        url: queryUrl,
        success: function() {
			
            url = 'http://live.dbpedia.org/sparql';
        },
        error: function() {
			
            url = 'http://dbpedia.org/sparql';
        }
    });
	*/
}



/**
* Query that gets members of rank species.
*
* @class getImportantQuery
* @constructor
* @param {string} rank The rank of the node
* @param {string} name The name of the node
*/
function getImportantQuery(rank, name) {
    name = name.replace(' ', "_");
    return 'SELECT DISTINCT ?name,?thumb,COUNT(*) AS ?count WHERE {?name dbo:'+rank+' dbr:'+name+'.?name dbo:genus ?k.?s ?p ?name.OPTIONAL{ ?name dbo:thumbnail ?thumb }.FILTER(?name!=?k)} ORDER BY DESC(COUNT(*)) LIMIT 500';
}
/**
* Query that gets members of next rank/tree branch. 
*
* @class getOpenQuery
* @constructor
* @param {string} name The name of the node
* @param {string} rank The rank of the node
* @param {string} next_rank The rank
*/
function getOpenQuery(name, rank, next_rank) {
    name = name.replace(' ', "_");
	
	
	if (next_rank=="phylum"){
		return "SELECT DISTINCT ?taxon, ?thumb WHERE {{?name  dbo:kingdom dbr:" + name + ";dbo:phylum  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbo:kingdom dbr:" + name + ";dbp:divisio  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbo:kingdom dbr:" + name + ";dbo:division  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbo:kingdom dbr:" + name + ";dbp:phylum  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}FILTER(isURI(?taxon))} order by asc(UCASE(str(?taxon)))";
	}else if(next_rank=="class"){
		return "SELECT DISTINCT ?taxon, ?thumb WHERE {{?name  dbo:phylum dbr:" + name + ";dbo:class  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbo:division dbr:" + name + ";dbp:classis  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbo:phylum dbr:" + name + ";dbp:classis  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbo:division dbr:" + name + ";dbo:class  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbp:phylum dbr:" + name + ";dbo:class  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbp:divisio dbr:" + name + ";dbp:classis  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbp:phylum dbr:" + name + ";dbp:classis  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbp:division dbr:" + name + ";dbo:class  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}FILTER(isURI(?taxon))} order by asc(UCASE(str(?taxon)))";

	}else if(next_rank=="order"){
		return "SELECT DISTINCT ?taxon, ?thumb WHERE {{?name  dbo:class dbr:" + name + ";dbo:order  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbp:classis dbr:" + name + ";dbp:ordo  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbo:class dbr:" + name + ";dbp:ordo  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbp:classis dbr:" + name + ";dbo:order  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}FILTER(isURI(?taxon))} order by asc(UCASE(str(?taxon)))";

	}else if(next_rank=="family"){
		"SELECT DISTINCT ?taxon, ?thumb WHERE {{?name  dbo:order dbr:" + name + ";dbo:family  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbp:ordo dbr:" + name + ";dbp:familia  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbo:order dbr:" + name + ";dbp:familia  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}UNION{?name  dbp:ordo dbr:" + name + ";dbo:family  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}}FILTER(isURI(?taxon))} order by asc(UCASE(str(?taxon)))";
	}
    if (rank == "genus") {
        return 'SELECT ?taxon,?thumb WHERE { ?taxon  dbp:genus \"' + name +
            '\"@en .OPTIONAL{?taxon dbo:thumbnail ?thumb}.FILTER (?taxon!=<http://dbpedia.org/resource/' + name + '>)}';
    } else {
        return "SELECT DISTINCT ?taxon, ?thumb WHERE {?name  dbo:" + rank + " dbr:" + name +
            ";dbo:" + next_rank +
            "  ?taxon.OPTIONAL{?taxon dbo:thumbnail ?thumb}} order by asc(UCASE(str(?taxon)))";
    }
}
/**
* Query that gets rank of search term. 
*
* @class getSearchRankQuery
* @constructor
* @param {string} name The name of the node
*/
function getSearchRankQuery(name){

var query = 'SELECT DISTINCT COUNT(?phylum) AS ?countphylum,COUNT(?classis) AS ?countclass,COUNT(?order) AS ?countorder,COUNT(?family) AS ?countfamily,COUNT(?genus) AS ?countgenus  WHERE {{ ?phylum dbo:phylum dbr:'+name+'}UNION{?classis dbo:class dbr:'+name+'}UNION{ ?order dbo:order dbr:'+name+'}UNION{?family dbo:family dbr:'+name+'}UNION{?genus dbo:genus dbr:'+name+'}}';
return query;
}
/**
* Query that gets summary of node from wikipedia. 
*
* @class getSummaryQuery
* @constructor
* @param {string} name The name of the node
*/
function getSummaryQuery(name) {
    if (sessionStorage.getItem('lang') == 'gr' && (name != sessionStorage.getItem('greekName'))) {
        return 'https://el.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=' +
        sessionStorage.getItem('greekName');
        //return query='SELECT ?sum WHERE {<http://dbpedia.org/resource/'+name+'> dbo:abstract?sum.filter(langMatches(lang(?sum),"EN"))} '
    } else {
        return 'https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=' +
        name;
    }
}
/**
* Query that gets greek names of a list of english names. 
*
* @class returnGreekNameQuery
* @constructor
* @param {string} nameList List of names
*/
function returnGreekNameQuery(nameList) {
    var nameString = '';
    for (var i in nameList) {
        nameString = nameString + nameList[i] + '|';
    }
    nameString = nameString.slice(0, -1); //=nameString(0, nameString.length - 1);
    return 'https://en.wikipedia.org/w/api.php?format=json&action=query&titles=' + nameString +
        '&lllang=el&prop=langlinks';
}
/**
* Query that gets greek name from an english name. 
*
* @class returnGreekNameQuery
* @constructor
* @param {string} name The name of the node
*/
function returnOneGreekNameQuery(name) {
    return 'https://en.wikipedia.org/w/api.php?format=json&action=query&titles=' + name +
        '&lllang=el&prop=langlinks';
}
/**
* Query that gets english name from a greek name. 
*
* @class returnOneEnglishNameQuery
* @constructor
* @param {string} name The name of the node
*/
function returnOneEnglishNameQuery(name){
	
	    return 'https://en.wikipedia.org/w/api.php?format=json&action=query&titles=' + name +
        '&lllang=en&prop=langlinks';
}
/**
* Query that checks if a wikipedia article exists. 
*
* @class articleExistsQuery
* @constructor
* @param {string} title Title of article
*/
function articleExistsQuery(title) {
    return 'https://en.wikipedia.org/w/api.php?action=query&format=json&titles=' + title;
}
/**
* Query for search tree. 
*
* @class getSearchQuery
* @constructor
* @param {string} name Name of search term
* @param {string} rank Rank of search term
*/
function getSearchQuery(name,rank) {
	
	name = name.replace(' ', "_");
	if (rank=="phylum"){
			return 'SELECT DISTINCT  ?kingdom, COUNT(?kingdom) AS ?countkingdom WHERE {?name  dbo:'+rank+' dbr:'+name+';dbo:kingdom  ?kingdom}';
	}else if(rank=="class"){
	return 'SELECT DISTINCT  ?kingdom, COUNT(?kingdom) AS ?countkingdom,?phylum,COUNT(?phylum) AS ?countphylum WHERE {{?name  dbo:'+rank+' dbr:'+name+';dbo:kingdom  ?kingdom}UNION{?name  dbo:'+rank+' dbr:'+name+';dbo:phylum  ?phylum}}';	
	}else if(rank=="order"){
		return 'SELECT DISTINCT  ?kingdom, COUNT(?kingdom) AS ?countkingdom,?phylum,COUNT(?phylum) AS ?countphylum,?classis,COUNT(?classis) AS ?countclassis WHERE {{?name  dbo:'+rank+' dbr:'+name+';dbo:kingdom  ?kingdom}UNION{?name  dbo:'+rank+' dbr:'+name+';dbo:phylum  ?phylum}UNION{?name  dbo:'+rank+' dbr:'+name+';dbo:class  ?classis}}';	
	}else if(rank=="family"){
	return 'SELECT DISTINCT  ?kingdom, COUNT(?kingdom) AS ?countkingdom,?phylum,COUNT(?phylum) AS ?countphylum,?classis,COUNT(?classis) AS ?countclassis,?order,COUNT(?order) AS ?countorder WHERE {{?name  dbo:'+rank+' dbr:'+name+';dbo:kingdom  ?kingdom}UNION{?name  dbo:'+rank+' dbr:'+name+';dbo:phylum  ?phylum}UNION{?name  dbo:'+rank+' dbr:'+name+';dbo:class  ?classis}UNION{?name  dbo:'+rank+' dbr:'+name+';dbo:order  ?order}}';	
	}else if(rank=="genus"){
	return 'SELECT DISTINCT  ?kingdom, COUNT(?kingdom) AS ?countkingdom,?phylum,COUNT(?phylum) AS ?countphylum,?classis,COUNT(?classis) AS ?countclassis,?order,COUNT(?order) AS ?countorder, ?family,COUNT(?family) AS ?countfamily WHERE {{?name  dbo:'+rank+' dbr:'+name+';dbo:kingdom  ?kingdom}UNION{?name  dbo:'+rank+' dbr:'+name+';dbo:phylum  ?phylum}UNION{?name  dbo:'+rank+' dbr:'+name+';dbo:class  ?classis}UNION{?name  dbo:'+rank+' dbr:'+name+';dbo:order  ?order}UNION{?name  dbo:'+rank+' dbr:'+name+';dbo:family  ?family}}';	
	}
	
	else if(rank=="species"){
	return 'SELECT DISTINCT ?kingdom,?phylum,?classis,?order,?family,?genus  WHERE {dbr:' +
    name + ' dbo:kingdom ?kingdom.OPTIONAL{dbr:' + name + ' dbo:class ?classis}.OPTIONAL{dbr:' +
        name + ' dbo:phylum ?phylum}.OPTIONAL{dbr:' + name + ' dbp:ordo ?order}.OPTIONAL{dbr:' +
        name + ' dbp:familia ?family}.OPTIONAL{dbr:' + name + ' dbo:genus ?genus}}';	
	}
	
	    
		
}
/**
* Query that gets name of previous rank member. 
*
* @class getprevRankNameQuery
* @constructor
* @param {string} name Name of search term
* @param {number} rankIndex Index of rank used to find rank from rankArray
*/
function getprevRankNameQuery(name,rankIndex) {
	
	name = name.replace(' ', "_");
	
	if(rankIndex==6){
	return 'SELECT DISTINCT ?genus  WHERE {dbr:' + name + ' dbo:genus ?genus}';	
	}else if (rankIndex>0){
	return 'SELECT DISTINCT ?taxon,COUNT(?taxon) AS ?counttaxon WHERE {?name  dbo:'+rankArray[rankIndex]+' dbr:'+name+';dbo:'+rankArray[rankIndex-1]+'  ?taxon}';		
	}
	
	    
		
}
/**
* Query that gets total number of species in rank. 
*
* @class getTotalQuery
* @constructor
* @param {string} prevRank Previous rank
* @param {string} prevRankName Name of previous rank
* @param {string} rank Rank
*/
function getTotalQuery(prevRank, prevRankName, rank) {
    prevRankName = prevRankName.replace(' ', "_");
    return 'SELECT DISTINCT ?order, COUNT(*) AS ?count WHERE {{?name  dbo:' + prevRank +
        ' dbr:' + prevRankName + ';dbo:' + rank + ' ?order}UNION {dbr:' + prevRankName +
        '  dbo:wikiPageRedirects ?rank.?rank dbo:' + rank + ' ?rank2.?rank2 dbo:' + rank +
        ' ?order}}order by desc(?count)';
}
/**
* Get next rank with help of rankArray.
*
* @class getNextRank
* @constructor
* @param {string} rank Rank
*/
function getNextRank(rank) {
    if (rank != 'species') return rankArray[rankArray.indexOf(rank) + 1];
}
/**
* Get preious rank with help of rankArray.
*
* @class getPrevRank
* @constructor
* @param {string} rank Rank
*/
function getPrevRank(rank) {
    if (rank != 'kingdom') return rankArray[rankArray.indexOf(rank) - 1];
}
/**
* Strip uri to get name.
*
* @class nameFromUrl
* @constructor
* @param {string} src Name
*/
function nameFromUrl(src) {
    var name = src.substring(src.lastIndexOf('/') + 1);
    name = name.replace("_", ' ');
    return name;
}

/**
* Show error if something goes wrong with an ajax request. 
*
* @class ajaxError
* @constructor
*/ 
function ajaxError() {
	$('button').prop('disabled', false);
    if (sessionStorage.getItem('lang') == 'gr') {
        msg = 'Υπήρξε πρόβλημα με την ανάκτηση των δεδομένων.Ανανεώστε τη σελίδα.';
    } else {
        msg = 'There was a problem getting the data. Refresh page.';
    }
    bootbox.alert(msg);
}