link-rdflib
Version:
an RDF library for node.js, patched for speed.
88 lines (67 loc) • 1.7 kB
JavaScript
var log = require('./log');
function queryToSPARQL(query) {
var indent = 0;
function getSelect(query) {
var str = addIndent() + 'SELECT ';
for (var i = 0; i < query.vars.length; i++) {
str += query.vars[i] + ' ';
}
str += '\n';
return str;
}
function getPattern(pat) {
var str = '';
var st = pat.statements;
for (var x in st) {
log.debug('Found statement: ' + st);
str += addIndent() + st[x] + '\n';
}
return str;
}
function getConstraints(pat) {
var str = '';
for (var v in pat.constraints) {
var foo = pat.constraints[v];
str += addIndent() + 'FILTER ( ' + foo.describe(v) + ' ) ' + '\n';
}
return str;
}
function getOptionals(pat) {
var str = '';
for (var x = 0; x < pat.optional.length; x++) {
// alert(pat.optional.termType)
log.debug('Found optional query');
str += addIndent() + 'OPTIONAL { ' + '\n';
indent++;
str += getPattern(pat.optional[x]);
str += getConstraints(pat.optional[x]);
str += getOptionals(pat.optional[x]);
indent--;
str += addIndent() + '}' + '\n';
}
return str;
}
function getWhere(pat) {
var str = addIndent() + 'WHERE \n' + '{ \n';
indent++;
str += getPattern(pat);
str += getConstraints(pat);
str += getOptionals(pat);
indent--;
str += '}';
return str;
}
function addIndent() {
var str = '';
for (var i = 0; i < indent; i++) {
str += ' ';
}
return str;
}
function getSPARQL(query) {
return getSelect(query) + getWhere(query.pat);
}
return getSPARQL(query);
}
module.exports = queryToSPARQL;
;