diff --git a/lib/SparqlGenerator.js b/lib/SparqlGenerator.js index 92d933ed..8d6d8c9c 100644 --- a/lib/SparqlGenerator.js +++ b/lib/SparqlGenerator.js @@ -90,10 +90,12 @@ Generator.prototype.toQuery = function (q) { Generator.prototype.baseAndPrefixes = function (q) { var base = q.base ? ('BASE <' + q.base + '>' + this._newline) : ''; var prefixes = ''; + // when option "allPrefixes" is an object use it as fixedPrefixes + var fixedPrefixes = typeof this._options.allPrefixes === 'object' ? this._options.allPrefixes: {} for (var key in q.prefixes) { - if (this._options.allPrefixes || this._usedPrefixes[key]) + if (this._options.allPrefixes === true || this._usedPrefixes[key] || fixedPrefixes[key]) prefixes += 'PREFIX ' + key + ': <' + q.prefixes[key] + '>' + this._newline; - } +} return base + prefixes; }; @@ -450,7 +452,7 @@ function mapJoin(array, sep, func, self) { /** * @param options { - * allPrefixes: boolean, + * allPrefixes: boolean | prefixList, * indentation: string, * newline: string * } diff --git a/test/SparqlGenerator-test.js b/test/SparqlGenerator-test.js index fde444e5..0bbc56a8 100644 --- a/test/SparqlGenerator-test.js +++ b/test/SparqlGenerator-test.js @@ -13,6 +13,47 @@ var parsedQueriesPath = __dirname + '/../test/parsedQueries/'; var unusedPrefixesPath = __dirname + '/../test/unusedPrefixes/'; describe('A SPARQL generator', function () { + it('should preserve prefixes specified in the allPrefixes', function () { + var parser = new SparqlParser({ + prefixes: { + schema: "https://schema.org/", + owl: "http://www.w3.org/2002/07/owl#" + } + }); + var allPrefixes={ + db_opt: 'https://db.control.param_10' + } + var parsedQuery = parser.parse('PREFIX db_opt: \n SELECT * WHERE {?s a owl:Class}'); + var generator = new SparqlGenerator({allPrefixes}); + var generatedQuery = generator.stringify(parsedQuery); + var expectedQuery = 'PREFIX db_opt: \nPREFIX owl: \nSELECT * WHERE { ?s owl:Class. }'; + expect(generatedQuery).toEqual(expectedQuery); + }); + + it('should preserve prefixes specified the query using allPrefixes option', function () { + var parser = new SparqlParser({ + prefixes: { + schema: "https://schema.org/", + owl: "http://www.w3.org/2002/07/owl#" + } + }); + + var parsedQuery = parser.parse('PREFIX db_opt: \nPREFIX db_optimization: \n SELECT * WHERE {?s a owl:Class}'); + + var allPrefixes={} + var queryPrefixes=Object.keys(parsedQuery.prefixes); + for (var key of queryPrefixes) { + allPrefixes[key]=parsedQuery.prefixes[key]; + } + + var generator = new SparqlGenerator({allPrefixes}); + var generatedQuery = generator.stringify(parsedQuery); + var expectedQuery = 'PREFIX db_opt: \nPREFIX db_optimization: \nPREFIX owl: \nSELECT * WHERE { ?s owl:Class. }'; + expect(generatedQuery).toEqual(expectedQuery); + }); + + + var defaultGenerator = new SparqlGenerator(); describe('in SPARQL mode', () => {