diff --git a/src/server/sparql/FacetResults.js b/src/server/sparql/FacetResults.js index a7d1d2ca120f3f5fd9099664c4da057f1c41f4ad..2ae997585154bcd31b6fd7105673ae3918e751c0 100644 --- a/src/server/sparql/FacetResults.js +++ b/src/server/sparql/FacetResults.js @@ -114,7 +114,12 @@ export const getAllResults = ({ })); } // console.log(prefixes + q) - return runSelectQuery(prefixes + q, endpoint, mapper, resultFormat); + return runSelectQuery({ + query: prefixes + q, + endpoint, + resultMapper: mapper, + resultFormat + }); }; export const getResultCount = async ({ @@ -135,7 +140,12 @@ export const getResultCount = async ({ facetID: null })); } - const response = await runSelectQuery(prefixes + q, endpoint, mapCount, resultFormat); + const response = await runSelectQuery({ + query: prefixes + q, + endpoint, + resultMapper: mapCount, + resultFormat + }); return({ resultClass: resultClass, data: response.data, @@ -205,7 +215,12 @@ const getPaginatedData = ({ } q = q.replace('<RESULT_SET_PROPERTIES>', resultSetProperties); // console.log(prefixes + q); - return runSelectQuery(prefixes + q, endpoint, makeObjectList, resultFormat); + return runSelectQuery({ + query: prefixes + q, + endpoint, + resultMapper: makeObjectList, + resultFormat + }); }; export const getByURI = ({ @@ -280,5 +295,10 @@ export const getByURI = ({ } q = q.replace('<ID>', `<${uri}>`); // console.log(prefixes + q) - return runSelectQuery(prefixes + q, endpoint, makeObjectList, resultFormat); + return runSelectQuery({ + query: prefixes + q, + endpoint, + resultMapper: makeObjectList, + resultFormat + }); }; diff --git a/src/server/sparql/FacetValues.js b/src/server/sparql/FacetValues.js index 2a4310ab0d02700068bc314f201c1ab60ab3a679..a9d3d138d63a7131697a03dd083efa82621ddba9 100644 --- a/src/server/sparql/FacetValues.js +++ b/src/server/sparql/FacetValues.js @@ -33,6 +33,7 @@ export const getFacet = async ({ // choose query template and result mapper: let q = ''; let mapper = null; + let previousSelections = null; switch(facetConfig.type) { case 'list': q = facetValuesQuery; @@ -67,6 +68,7 @@ export const getFacet = async ({ facetID: facetID, inverse: false, }); + previousSelections = new Set(getUriFilters(constraints, facetID)); // if this facet has previous selections, include them in the query if (hasPreviousSelections(constraints, facetID)) { selectedBlock = generateSelectedBlock({ @@ -120,7 +122,13 @@ export const getFacet = async ({ q = q.replace('<END_PROPERTY>', facetConfig.endProperty); } // console.log(prefixes + q) - const response = await runSelectQuery(prefixes + q, endpoint, mapper, resultFormat); + const response = await runSelectQuery({ + query: prefixes + q, + endpoint, + resultMapper: mapper, + previousSelections, + resultFormat + }); if (facetConfig.type === 'hierarchical') { return({ facetClass: facetClass, diff --git a/src/server/sparql/JenaQuery.js b/src/server/sparql/JenaQuery.js index cb6b8d311f115d9026bb5f30125ddff194e2f7f3..991d748db4b3dd72f5e7ea8e52e1107dfdb167bd 100644 --- a/src/server/sparql/JenaQuery.js +++ b/src/server/sparql/JenaQuery.js @@ -11,6 +11,11 @@ export const queryJenaIndex = async ({ q = q.replace('<QUERY>', ` ?id text:query ('${queryTerm.toLowerCase()}' 2000) . `); - const results = await runSelectQuery(prefixes + q, endpoint, makeObjectList, resultFormat); + const results = await runSelectQuery({ + query: prefixes + q, + endpoint, + resultMapper: makeObjectList, + resultFormat + }); return results; }; diff --git a/src/server/sparql/Mappers.js b/src/server/sparql/Mappers.js index 0d07fda45f1ac3563d7ec72df4ed0faab5ff5c11..710936ec75d15dc6668b1e422adcf5cac25989c6 100644 --- a/src/server/sparql/Mappers.js +++ b/src/server/sparql/Mappers.js @@ -19,7 +19,8 @@ export const mapCount = sparqlBindings => { return sparqlBindings[0].count.value; }; -export const mapFacet = sparqlBindings => { +export const mapFacet = (sparqlBindings, previousSelections) => { + console.log(previousSelections) let results = []; if (sparqlBindings.length > 0) { results = mapFacetValues(sparqlBindings); @@ -27,7 +28,8 @@ export const mapFacet = sparqlBindings => { return results; }; -export const mapHierarchicalFacet = sparqlBindings => { +export const mapHierarchicalFacet = (sparqlBindings, previousSelections) => { + console.log(previousSelections) const results = mapFacetValues(sparqlBindings); let treeData = getTreeFromFlatData({ flatData: results, diff --git a/src/server/sparql/SparqlApi.js b/src/server/sparql/SparqlApi.js index e40b945f1828df12282d14066c9590f2b4ee2b45..30eb68e44faa1fa218e62b5e550b7687e1f5adf3 100644 --- a/src/server/sparql/SparqlApi.js +++ b/src/server/sparql/SparqlApi.js @@ -5,7 +5,13 @@ import querystring from 'querystring'; // 'Accept': 'text/turtle' // }; -export const runSelectQuery = async (query, endpoint, resultMapper, resultFormat) => { +export const runSelectQuery = async ({ + query, + endpoint, + resultMapper, + previousSelections = null, + resultFormat +}) => { let MIMEtype = resultFormat === 'json' ? 'application/sparql-results+json; charset=utf-8' : 'text/csv; charset=utf-8'; @@ -22,7 +28,7 @@ export const runSelectQuery = async (query, endpoint, resultMapper, resultFormat data: q, }); if (resultFormat === 'json') { - const mappedResults = resultMapper(response.data.results.bindings); + const mappedResults = resultMapper(response.data.results.bindings, previousSelections); return { data: mappedResults, sparqlQuery: query diff --git a/src/server/sparql/SparqlQueriesGeneral.js b/src/server/sparql/SparqlQueriesGeneral.js index 79bdb6d147bcfcf09c09c148d55462cd29e722f5..a5b060646c836df056553dcd53eef59a37e0bb90 100644 --- a/src/server/sparql/SparqlQueriesGeneral.js +++ b/src/server/sparql/SparqlQueriesGeneral.js @@ -69,9 +69,7 @@ export const facetValuesQuery = ` ?instance <PREDICATE> ?id . VALUES ?facetClass { <FACET_CLASS> } ?instance a ?facetClass . - <SELECTED_VALUES> } - <SELECTED_VALUES_NO_HITS> <PARENTS> BIND(COALESCE(?selected_, false) as ?selected) }