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