sparnatural
Version:
Visual client-side SPARQL query builder and knowledge graph exploration tool
75 lines • 3.89 kB
JavaScript
import { getSettings } from "../../../sparnatural/settings/defaultSettings";
import { SparnaturalJsonGenerator } from "../../generators/json/SparnaturalJsonGenerator";
import { SparnaturalJsonGeneratorV13 } from "../../generators/json/SparnaturalJson-v13Generator";
import { Generator } from "sparqljs";
import { SparnaturalElement } from "../../../SparnaturalElement";
import { JsonSparqlTranslator } from "../../generators/sparql/fromjson/JsonSparqlTranslator";
import { JsonV13SparqlTranslator } from "../../generators/sparql/fromjsonv13/JsonV13SparqlTranslator";
export class QueryGenerator {
constructor(actionStore) {
this.actionStore = actionStore;
}
generateQuery() {
// if we are quiet, don't do anything
if (this.actionStore.quiet) {
return;
}
// if the query editor is empty, don't do anything
if (this.actionStore.sparnatural.isEmpty()) {
return;
}
// triggered when Sparnatural is submitted : generates output SPARQL query
let settings = getSettings();
let qryGen = new SparnaturalJsonGenerator(this.actionStore.sparnatural);
var jsonQueryOld = qryGen.generateQuery(this.actionStore.sparnatural.variableSection.listVariables(), this.actionStore.sparnatural.variableSection.getOrder(), settings.addDistinct, settings.limit);
// --------------------------------------------------------------
// Generate v13 query
let qryGenV13 = new SparnaturalJsonGeneratorV13(this.actionStore.sparnatural);
var jsonQuery = qryGenV13.generateQuery(settings.addDistinct, settings.limit);
//console.log("Generated JSON v13 Query:", jsonQueryV13);
// --------------------------------------------------------------
if (settings.debug) {
console.log("*** Sparnatural JSON Query ***");
console.dir(jsonQuery);
}
var sparqlFromJsonGenerator = new JsonSparqlTranslator(this.actionStore.specProvider, settings);
let selectQueryFromJson = sparqlFromJsonGenerator.generateQuery(jsonQueryOld);
var generator = new Generator();
var queryStringOld = generator.stringify(selectQueryFromJson);
if (settings.debug) {
console.log("*** Sparnatural SPARQL Query from JSON ***");
console.dir(queryStringOld);
}
// --------------------------------------------------------------
// Translate the v13 JSON to SPARQL
var sparqlFromJsonV13Generator = new JsonV13SparqlTranslator(this.actionStore.specProvider, settings);
let selectQueryFromJsonV13 = sparqlFromJsonV13Generator.generateQuery(jsonQuery);
var generatorV13 = new Generator();
var queryString = generatorV13.stringify(selectQueryFromJsonV13);
//console.log("Generated SPARQL v13 Query:", queryStringV13);
// --------------------------------------------------------------
// fire the event
let payload = {
queryString: queryStringOld,
queryJson: jsonQueryOld,
// when switching to v13, replace with those 2 lines
queryJsonNew: jsonQuery,
queryStringNew: queryString,
querySparqlJs: selectQueryFromJson,
};
this.fireQueryUpdatedEvent(payload);
// re-enable submit button if it was disabled
// note that the submitSection may not be present in case submitButton = false in the attributes
this.actionStore.sparnatural.submitSection?.enableSubmit();
}
fireQueryUpdatedEvent(payload) {
// fire the event
this.actionStore.sparnatural.html[0].dispatchEvent(new CustomEvent(SparnaturalElement.EVENT_QUERY_UPDATED, {
bubbles: true,
detail: payload,
}));
}
}
export class QueryUpdatedPayload {
}
//# sourceMappingURL=GenerateQuery.js.map