sparnatural
Version:
Visual client-side SPARQL query builder and knowledge graph exploration tool
133 lines • 8.8 kB
JavaScript
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _ClassBuilder_instances, _ClassBuilder_ifDefaultTrpl, _ClassBuilder_ifDefaultTrplInOptional, _ClassBuilder_ifBlocking, _ClassBuilder_buildClsTriple, _ClassBuilder_buildDefaultLblTrpl, _ClassBuilder_putDefaultLblInOptional, _ClassBuilder_createPtrn;
import { DataFactory } from 'rdf-data-factory';
import { getSettings } from "../../settings/defaultSettings";
import SparqlFactory from "./SparqlFactory";
import { RDFS } from '../../../rdf/vocabularies/RDFS';
import { OWL } from '../../../rdf/vocabularies/OWL';
const factory = new DataFactory();
export default class ClassBuilder {
constructor(classGroup, specProvider, widgetIsBlocking, typePredicate = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type") {
_ClassBuilder_instances.add(this);
this.resultPtrn = [];
// can consist of multiple patterns in case there is a FILTER(lang(?var) = "xx") if the property is multilingual
this.defaultLblPatterns = [];
this.classGroup = classGroup;
this.specProvider = specProvider;
this.widgetIsBlocking = widgetIsBlocking;
this.typePredicate = typePredicate;
}
build() {
const blocking = __classPrivateFieldGet(this, _ClassBuilder_instances, "m", _ClassBuilder_ifBlocking).call(this);
// if(blocking) return
__classPrivateFieldGet(this, _ClassBuilder_instances, "m", _ClassBuilder_ifDefaultTrpl).call(this);
__classPrivateFieldGet(this, _ClassBuilder_instances, "m", _ClassBuilder_createPtrn).call(this);
}
getPattern() {
return this.resultPtrn;
}
/**
* @returns the defaultLabel variable, only in the case the variable is selected for inclusion as a column
*/
getDefaultVar() {
const selected = this.classGroup.inputSelector?.selectViewVariableBtn?.selected;
if (selected && this.classGroup.defaultLblVar.variable)
return factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}`);
}
}
_ClassBuilder_instances = new WeakSet(), _ClassBuilder_ifDefaultTrpl = function _ClassBuilder_ifDefaultTrpl() {
const defaultLbl = this.specProvider.getEntity(this.classGroup.getTypeSelected()).getDefaultLabelProperty();
if (!defaultLbl)
return;
__classPrivateFieldGet(this, _ClassBuilder_instances, "m", _ClassBuilder_buildDefaultLblTrpl).call(this);
__classPrivateFieldGet(this, _ClassBuilder_instances, "m", _ClassBuilder_ifDefaultTrplInOptional).call(this, defaultLbl);
}, _ClassBuilder_ifDefaultTrplInOptional = function _ClassBuilder_ifDefaultTrplInOptional(defaultLbl) {
if (this.specProvider.getProperty(defaultLbl).isEnablingOptional()
// don't put in optional if we are already doing an "OPTIONAL {...} OPTIONAL{...} BIND(COALESCE(...))" pattern
&&
!(getSettings().defaultLanguage != getSettings().language))
__classPrivateFieldGet(this, _ClassBuilder_instances, "m", _ClassBuilder_putDefaultLblInOptional).call(this);
}, _ClassBuilder_ifBlocking = function _ClassBuilder_ifBlocking() {
if (this.widgetIsBlocking
||
this.classGroup.getTypeSelected() === null)
return true;
__classPrivateFieldGet(this, _ClassBuilder_instances, "m", _ClassBuilder_buildClsTriple).call(this);
return false;
}, _ClassBuilder_buildClsTriple = function _ClassBuilder_buildClsTriple() {
// don't build the class triple if the entity does not have type
if (this.specProvider.getEntity(this.classGroup.getTypeSelected()).hasTypeCriteria()) {
var typePredicate;
if (getSettings().typePredicate) {
typePredicate = SparqlFactory.parsePropertyPath(getSettings().typePredicate);
}
else {
typePredicate = factory.namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
}
// don't add the type if the range is rdfs:Resource or owl:Thing
if ((this.classGroup.getTypeSelected() != RDFS.RESOURCE.value)
&&
(this.classGroup.getTypeSelected() != OWL.THING.value)) {
this.classTriple = SparqlFactory.buildTypeTriple(factory.variable(this.classGroup.getVarName()?.replace('?', '')), typePredicate, factory.namedNode(this.classGroup.getTypeSelected()));
}
}
}, _ClassBuilder_buildDefaultLblTrpl = function _ClassBuilder_buildDefaultLblTrpl() {
// generate only in the case the defaultVar exists
if (this.getDefaultVar()) {
if (this.specProvider.getProperty(this.classGroup.defaultLblVar.type).isMultilingual()) {
if (getSettings().language == getSettings().defaultLanguage) {
this.defaultLblPatterns.push(SparqlFactory.buildBgpPattern([SparqlFactory.buildTriple(factory.variable(this.classGroup.getVarName()?.replace('?', '')), factory.namedNode(this.classGroup.defaultLblVar.type), factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}`))]));
this.defaultLblPatterns.push(SparqlFactory.buildFilterLangEquals(factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}`), factory.literal(getSettings().language)));
}
else {
this.defaultLblPatterns.push(SparqlFactory.buildOptionalPattern([
SparqlFactory.buildBgpPattern([SparqlFactory.buildTriple(factory.variable(this.classGroup.getVarName()?.replace('?', '')), factory.namedNode(this.classGroup.defaultLblVar.type), factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}_lang`))]),
SparqlFactory.buildFilterLangEquals(factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}_lang`), factory.literal(getSettings().language))
]));
this.defaultLblPatterns.push(SparqlFactory.buildOptionalPattern([
SparqlFactory.buildBgpPattern([SparqlFactory.buildTriple(factory.variable(this.classGroup.getVarName()?.replace('?', '')), factory.namedNode(this.classGroup.defaultLblVar.type), factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}_defaultLang`))]),
SparqlFactory.buildFilterLangEquals(factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}_defaultLang`), factory.literal(getSettings().defaultLanguage))
]));
this.defaultLblPatterns.push(SparqlFactory.buildBindCoalescePattern(factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}_lang`), factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}_defaultLang`), factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}`)));
}
}
else {
this.defaultLblPatterns.push(SparqlFactory.buildBgpPattern([
SparqlFactory.buildTriple(factory.variable(this.classGroup.getVarName()?.replace('?', '')), factory.namedNode(this.classGroup.defaultLblVar.type), factory.variable(`${this.classGroup.defaultLblVar.variable.replace("?", "")}`))
]));
}
}
}, _ClassBuilder_putDefaultLblInOptional = function _ClassBuilder_putDefaultLblInOptional() {
if (this.defaultLblPatterns.length > 0) {
this.defaultInOptional = SparqlFactory.buildOptionalPattern(this.defaultLblPatterns);
}
}, _ClassBuilder_createPtrn = function _ClassBuilder_createPtrn() {
if (this.defaultInOptional) {
// classTriple + the defaultLabel inside OPTIONAL pattern
// Don't put OPTIONAL inside BgpPattern It's not allowed
if (this.classTriple) {
this.resultPtrn.push(SparqlFactory.buildBgpPattern([this.classTriple]));
}
this.resultPtrn.push(this.defaultInOptional);
}
else {
if (this.defaultLblPatterns.length > 0) {
// create classtriple + defaultLabel
if (this.classTriple) {
this.resultPtrn.push(SparqlFactory.buildBgpPattern([this.classTriple]));
}
this.resultPtrn.push(...this.defaultLblPatterns);
}
else {
// no default label got created. only insert start tuple
if (this.classTriple) {
this.resultPtrn.push(SparqlFactory.buildBgpPattern([this.classTriple]));
}
}
}
};
//# sourceMappingURL=ClassBuilder.js.map