UNPKG

data-pipeline-information-system-sparql

Version:

Sparql function to query/update RDF through SPARQL 1.1

55 lines (49 loc) 2.12 kB
import sparqljs from 'sparqljs'; import DefinitionPattern from './DefinitionPattern'; let prefixes: {[key: string] : string} = {} export function generateBody(definition: DefinitionPattern) { prefixes = {}; // let out_query = JSON.parse(JSON.stringify(definition.query)) ; let out_query = _generateBody(definition); let generator = new sparqljs.Generator(prefixes); console.log(out_query) return generator.stringify(out_query) // Object.keys(definition.subQuery).forEach((refAttribute) => { // let subDefinition = definition.subQuery[refAttribute]; // _generateBody(subDefinition); // }) } function _generateBody(definition: DefinitionPattern) { let coreQuery = definition.query; prefixes = {...prefixes, ...definition.query.prefixes} definition.query.prefixes = {} Object.keys(definition.subQuery).forEach((refAttribute) => { let subDefinition = definition.subQuery[refAttribute]; let subQuery = subDefinition.query; let parser = new sparqljs.Parser(); let _res = parser.parse(` SELECT (?${subDefinition.primaryKey} AS ?${refAttribute}_pKey) WHERE { ?uri a ?thing }`); // // console.log((<unknown & {variables: any[]}>_res).variables[0]); // // (<sparqljs.SelectQuery>_res).variables[0]; // // <unknown>(subQuery.variables).push((<unknown>{ // // expression: '?uri', // // variable: '?NALTnode' // // })); <unknown>(subQuery.variables).push((<unknown & {variables: any[]}>_res).variables[0]); (<sparqljs.VariableExpression>subQuery.variables[0]).variable = <sparqljs.Term>('?' + refAttribute); _generateBody(subDefinition); let addGroup = { type: 'group', patterns: [ subQuery ] }; (<sparqljs.Pattern[]>coreQuery.where).push(<sparqljs.Pattern>addGroup); // (<sparqljs.Pattern[]>coreQuery.where).push(<sparqljs.Pattern>subQuery) }) return <sparqljs.SelectQuery>coreQuery; } export default generateBody;