diff --git a/package.json b/package.json index fd80b969..cbcefe46 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "n3": "^1.16.2", "rdf-string": "^1.6.1", "relative-to-absolute-iri": "^1.0.6", + "sparqljs": "^3.7.3", "string-replace-loader": "^3.1.0", "webpack": "^5.69.0", "webpack-cli": "^4.9.2", diff --git a/src/ldf-client-ui.js b/src/ldf-client-ui.js index f9ac348e..1ed26d50 100644 --- a/src/ldf-client-ui.js +++ b/src/ldf-client-ui.js @@ -1,6 +1,8 @@ /*! @license MIT ©2014–2016 Ruben Verborgh, Ghent University – imec */ // jQuery widget for Triple Pattern Fragments query execution +var SparqlParser = require('sparqljs').Parser; +var SparqlGenerator = require('sparqljs').Generator; // This exports the webpacked jQuery. window.jQuery = require('../deps/jquery-2.1.0.js'); var N3 = require('n3'); @@ -725,12 +727,14 @@ if (typeof global.process === 'undefined') return { type: type, value: datasource }; }), }; - var prefixesString = ''; + + let query = this.$queryTextsIndexed[this.options.queryFormat].val(); if (this.options.queryFormat === 'sparql') { - for (var prefix in this.options.prefixes) - prefixesString += 'PREFIX ' + prefix + ': <' + this.options.prefixes[prefix] + '>\n'; + // Add pre-defined prefixes to query and remove duplicates + const parsedQuery = new SparqlParser({ prefixes:this.options.prefixes, sparqlStar: true }).parse(query); + query = new SparqlGenerator({}).stringify(parsedQuery); } - var query = prefixesString + this.$queryTextsIndexed[this.options.queryFormat].val(); + this._queryWorker.postMessage({ type: 'query', query: query, diff --git a/yarn.lock b/yarn.lock index c1df9ce2..9f1fcce7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8357,7 +8357,7 @@ sparqlalgebrajs@^4.3.7, sparqlalgebrajs@^4.3.8: rdf-terms "^1.10.0" sparqljs "^3.7.1" -sparqljs@^3.0.0: +sparqljs@^3.0.0, sparqljs@^3.7.3: version "3.7.3" resolved "https://registry.yarnpkg.com/sparqljs/-/sparqljs-3.7.3.tgz#075821d51ef4954284e36569503fe5558cfb71b0" integrity sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg==