UNPKG

data-pipeline-information-system-sparql

Version:

Sparql function to query/update RDF through SPARQL 1.1

45 lines (40 loc) 1.71 kB
import { copy } from './common'; import DefinitionPattern from './DefinitionPattern'; import sparqljs from 'sparqljs'; import attributeGetter from '../SparqlAttribute/getter'; // We pass json pointers as references function values(rootReference: string, definition: DefinitionPattern, json_pointers: string[], values: Array<string | number>[]) { // We assume that every n-uplet of the values array match the size of bindings if (values.some((n_uplet) => { return n_uplet.length !== json_pointers.length; })) { throw 'At least one N-uplet doesn\'t match the bindings[] length' } let incremented_definition = copy(definition); let variableBindings = json_pointers.map((pointer) => { let attribute = attributeGetter(rootReference, pointer).attribute; return '?' + attribute.name }) let dictArray: {[key: string]: string}[] = []; values.forEach((tupleValues) => { let element: { [key: string]: string } = {} tupleValues.forEach((value, index) => { element[variableBindings[index]] = <string>value; }) dictArray.push(element); }) let _values = { type: 'values', values: dictArray } // Find the relevant definition in case of nesting let nestedPath = attributeGetter(rootReference, json_pointers[0]).nestedPath; let pointerToDefinition = incremented_definition; nestedPath.forEach((path) => { pointerToDefinition = pointerToDefinition.subQuery[path]; }); // console.log(_values); (<sparqljs.Pattern[]>pointerToDefinition.query.where).push(<sparqljs.ValuesPattern>_values); return incremented_definition; } export default values;