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