UNPKG

data-pipeline-information-system-sparql

Version:

Sparql function to query/update RDF through SPARQL 1.1

46 lines (40 loc) 1.5 kB
import { copy } from './common'; import DefinitionPattern from './DefinitionPattern'; import sparqljs from 'sparqljs'; import attributeGetter from '../SparqlAttribute/getter'; import { prependBound } from './_bound'; export enum ARITHMETIC_SYMBOL { EQUAL = '=', GREATER = '>=', LOWER = '<=', } export function arithmetic_filter(arithmetic_symbol: ARITHMETIC_SYMBOL, reference: string, definition: DefinitionPattern, json_pointer: string, value: string | number) { let incremented_definition = copy(definition); let { attribute, nestedPath } = { ...attributeGetter(reference, json_pointer) }; let pointerToDefinition = incremented_definition; nestedPath.forEach((path) => { pointerToDefinition = pointerToDefinition.subQuery[path]; }); let operation: sparqljs.OperationExpression = <sparqljs.OperationExpression>{ type: 'operation', operator: arithmetic_symbol, args: ['?' + attribute.name, `"${value}"`] }; let arithmetic: sparqljs.FilterPattern;; if (attribute.optional) { arithmetic = { type: 'filter', expression: prependBound(operation, attribute.name) }; } else { arithmetic = { type: 'filter', expression: operation }; } (<sparqljs.Pattern[]>pointerToDefinition.query.where).push(<sparqljs.Pattern>arithmetic); return incremented_definition; } export default arithmetic_filter;