UNPKG

data-pipeline-information-system-sparql

Version:

Sparql function to query/update RDF through SPARQL 1.1

69 lines (60 loc) 2.74 kB
import SparqlObject from './SparqlObject'; import SparqlAttribute from '../SparqlAttribute/SparqlAttribute' import {ConfigurationElementI, Type, ConfigurationAttribute} from '../Core/types' import formatter from '../common/stringifier' import {binding, isUri, escapeRegExp} from './common' // import {parseRepresentation} from './_representation' import sparqljs from 'sparqljs' function bindingAsRegex(str: string) { return '(?<![a-zA-Z])\\?' + str + '(?=[^a-zA-Z_])' } // function postInit(this: SparqlObject) { // let parsedRepresentation = parseRepresentation.apply(this) // let triples = ((<sparqljs.Query>parsedRepresentation).where as Array<sparqljs.BgpPattern>)[0].triples; // triples.forEach((triple) => { // let tripleAsString = [triple.subject, triple.predicate, triple.object] // .map((str) => { // if (isUri(<string>str)) { // return '<' + str + '>'; // } else { // return str; // } // }).join(' '); // this.attributes.forEach((attribute) => { // if (tripleAsString.search(escapeRegExp(attribute.binding)) !== -1) { // attribute.triples.push(tripleAsString); // } // }); // }) // } export function initialisation(this: SparqlObject, configuration: ConfigurationElementI) { this.reference = configuration.reference; // this.coreDefinition = configuration.definition; this.coreDefinition = computeDefinition(configuration); this.prefixes = configuration.prefixes || {}; this.primaryKey = configuration.primaryKey; let out = 'SELECT * WHERE { ' + this.coreDefinition + ' }' let parser = new sparqljs.Parser( this.prefixes ); this.parsedDefinition = ((<sparqljs.Query>parser.parse(out)).where as Array<sparqljs.Pattern>); console.log(this.parsedDefinition) configuration.attributes.forEach((configurationAttribute) => { let sparqlAttribute = new SparqlAttribute(this, configurationAttribute); this.attributes.push(sparqlAttribute) }); } function computeDefinition(configuration: ConfigurationElementI) { // console.log('there') return configuration.attributes.filter((attribute) => (attribute.reference !== null && attribute.reference !== undefined)) .reduce((accDefinition, referencedAttribute) => { console.log(referencedAttribute.reference) return formatter(accDefinition, {[referencedAttribute.name]: '?' + referencedAttribute.name + '_pKey'}, { asRegExp: false, keyPrefix: '?', keySuffix: '' }) }, configuration.definition) } export default initialisation