UNPKG

data-pipeline-information-system-sparql

Version:

Sparql function to query/update RDF through SPARQL 1.1

40 lines (36 loc) 1.37 kB
import { copy } from './common'; import DefinitionPattern from './DefinitionPattern'; import sparqljs from 'sparqljs'; import attributeGetter from '../SparqlAttribute/getter'; import {prependBound} from './_bound'; export function look_alike(reference: string, definition: DefinitionPattern, json_pointers: string, value: string) { let incremented_definition = copy(definition); let { attribute, nestedPath } = { ...attributeGetter(reference, json_pointers) }; let pointerToDefinition = incremented_definition; nestedPath.forEach((path) => { pointerToDefinition = pointerToDefinition.subQuery[path]; }); let operation: sparqljs.OperationExpression = <sparqljs.OperationExpression>{ type: 'operation', operator: 'regex', args: [{ type: 'operation', operator: 'str', args: ['?' + attribute.name] }, `"${value}"`, '"i"'] } let look_alike : sparqljs.FilterPattern;; if (attribute.optional) { look_alike = { type: 'filter', expression: prependBound(operation, attribute.name) }; } else { look_alike = { type: 'filter', expression: operation }; } (<sparqljs.Pattern[]>pointerToDefinition.query.where).push(<sparqljs.Pattern>look_alike); return incremented_definition; } export default look_alike;