UNPKG

data-pipeline-information-system-sparql

Version:

Sparql function to query/update RDF through SPARQL 1.1

41 lines (38 loc) 1.44 kB
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;