data-pipeline-information-system-sparql
Version:
Sparql function to query/update RDF through SPARQL 1.1
46 lines (40 loc) • 1.5 kB
text/typescript
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;