data-pipeline-information-system-sparql
Version:
Sparql function to query/update RDF through SPARQL 1.1
41 lines (38 loc) • 1.44 kB
text/typescript
import SparqlTask from '../Core/SparqlTask'
import generateBody from './generateBody'
import sparqljs from 'sparqljs';
import {UnaryOperationType, UnaryOperation, unaryFunction, operationUnroller} from './unaryFunctions';
export interface UnaryOperation {
operation: UnaryOperationType;
json_pointers: string | string[];
arguments?: any
}
export interface QueryModel {
model: string,
set: Array<UnaryOperation>
}
export function generateQueryRequest(queryRequest: QueryModel) {
let body: string = '';
if (Array.isArray(queryRequest.set)) {
// There is only unary operation
let _body = operationUnroller(queryRequest.model, queryRequest.set)
body = <string>generateBody(_body)
} else {
// There is binary operation, likely UNION
// body = 'SELECT DISTINCT ' + '?' + queryRequest.model + ' WHERE {'
// body += queryRequest.set.subsets.map((subDefinition) => {
// let subBody = operationUnroller(queryRequest.model, subDefinition);
// return '{' + generateBody(subBody, '') + '}'
// }).join('\nUNION\n');
// body += '}';
// return bodyRequest;
}
return body;
let parser = new sparqljs.Parser(
SparqlTask.prefixes
);
let parsedQuery = parser.parse(body);
let generator = new sparqljs.Generator()
return generator.stringify(parsedQuery)
}
export default generateQueryRequest;