Source: sparql.js

/**
 * SPARQL query manager
 *
 * @class
 * @author Fabio Pavesi (fabio@adamassoft.it)
 *
 */
var SPARQL = (function(url, endpointType) {
    var virtuosoUrl = "http://sp7.irea.cnr.it:8890/sparql";
    if ( typeof endpointType === "undefined" ) {
        endpointType = "virtuoso";
    }

    if ( typeof url !== "undefined") {
        virtuosoUrl = url;
    }
    function getSparqlQuery(uri, currentMetadataLanguage) {
        var sparql;
        sparql =    "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> " +
                    "PREFIX dct:<http://purl.org/dc/terms/> " +
                    "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> " +
                    "PREFIX skos:<http://www.w3.org/2004/02/skos/core#> " +
                    
                    "SELECT DISTINCT <" + uri + "> AS ?uri ?c ?l ?a ?z " +
                    "WHERE { " +
                    "	{ " +
                    "	  ?c rdf:type skos:Concept. " +
                    "	  ?c skos:inScheme <" + uri + ">. " +
                    "	  OPTIONAL { " +
                    "	      ?c skos:prefLabel ?l. " +
                    '	      FILTER ( LANG(?l) = "en" ) ' +
                    "	  } " +
                    "	} " +
                            
                    "	OPTIONAL { " +
                    "	    ?c skos:prefLabel ?z. " + 
                    '	    FILTER ( LANG(?z) = "zxx" ) ' +
                    "	} " +
                    "	OPTIONAL { " +
                    "	    ?c skos:prefLabel ?a. " + 
                    '	    FILTER ( LANG(?a) = "' + currentMetadataLanguage + '" ) ' +
                    "	} " +
                    "	" +
                    "} " +
                                    "ORDER BY ASC(?a) ASC(?l)";
                                    // doDebug(sparql);
        return sparql;
    };

    function specificQuery(query, callback, errorCallback, language) {
        if ( typeof language === "undefined" ) {
            language = "it";
        }
        var newQuery = query.toString().replace(/\$lang\$/g, language);
        console.log(endpointType);
        $.ajax({
            url: virtuosoUrl,
            type: endpointType.parameters.method,
            accepts: endpointType.parameters.contentType.json,
            dataType: "jsonp",
            crossDomain: true,
            /*
            data: {
                query: newQuery,
                format: "application/sparql-results+json",
                save:"display",
                fname : undefined
            },
            */
            data: endpointType.getQueryStringData(newQuery),
            success: function(data) {
                if ( typeof callback === "function") {
                    callback(data);
                }
            },
            error: function() {
                console.log(arguments);
                if ( typeof errorCallback === "function") {
                    errorCallback(arguments);
                }
            }
        });

    }

    function query(uri, callback, errorCallback, language) {
        if ( typeof language === "undefined" ) {
            language = "it";
        }
        var sparqlQuery = getSparqlQuery(uri, language);
        $.ajax({
            url: virtuosoUrl,
            type: endpointType.parameters.method,
            contentType: endpointType.parameters.contentType.json,
            dataType: "jsonp",
            /*
            data: {
                query: sparqlQuery,
                format: "application/sparql-results+json",
                save:"display",
                fname : undefined
            },
            */
            data: endpointType.getQueryStringData(sparqlQuery),
            success: function(data) {
                if ( typeof callback === "function") {
                    callback(data);
                }
            },
            error: function() {
                console.log(arguments);
                if ( typeof errorCallback === "function") {
                    errorCallback(data);
                }
            }
        });
    }
    return {
        /**
         * Returns a SPARQL query for a codelist's URI
         *
         * @memberOf SPARQL
         * @param uri
         * @param currentMetadataLanguage
         * @returns {string}
         */
        getSparqlQuery: getSparqlQuery,
        /**
         * Performs a URI based SPARQL query
         *
         * @memberOf SPARQL
         * @param uri
         * @param callback
         * @param errorCallback
         * @param language
         */
        query: query,
        /**
         * Runs a specific SPARQL query
         *
         * @memberOf SPARQL
         * @param query
         * @param callback
         * @param errorCallback
         * @param language
         */
        specificQuery: specificQuery
    };
});