Newer
Older
import { has } from 'lodash';
import SparqlSearchEngine from './SparqlSearchEngine';
import { endpoint, facetValuesQuery } from './SparqlQueriesGeneral';
import { prefixes } from './SparqlQueriesPrefixes';
import {
mapFacet,
mapHierarchicalFacet,
} from './Mappers';
const sparqlSearchEngine = new SparqlSearchEngine();
export const getFacet = (facetClass, facetID, sortBy, sortDirection, filters) => {
let q = facetValuesQuery;
const facetConfig = facetConfigs[facetClass][facetID];
let selectedBlock = '# no selections';
let filterBlock = '# no filters';
let parentBlock = '# no parents';
let mapper = mapFacet;
if (filters !== null) {
filterBlock = generateFilter(facetClass, facetClass, filters, 'instance', facetID);
BIND(true AS ?selected_)
}
`;
}
}
if (facetConfig.type === 'hierarchical') {
mapper = mapHierarchicalFacet;
parentBlock = `
UNION
{
${generateFilter(facetClass, facetClass, filters, 'different_instance', facetID)}
?different_instance ${facetConfig.parentPredicate} ?id .
BIND(COALESCE(?selected_, false) as ?selected)
OPTIONAL { ?id skos:prefLabel ?prefLabel_ }
BIND(COALESCE(STR(?prefLabel_), STR(?id)) AS ?prefLabel)
OPTIONAL { ?id dct:source ?source }
BIND(COALESCE(?parent_, '0') as ?parent)
}
`;
}
q = q.replace(/<RDF_TYPE>/g, facetConfigs[facetClass].rdfType);
q = q.replace(/<FILTER>/g, filterBlock );
q = q.replace(/<PREDICATE>/g, facetConfig.predicate);
q = q.replace('<SELECTED_VALUES>', selectedBlock);
q = q.replace('<FACET_VALUE_FILTER>', facetConfig.facetValueFilter);
q = q.replace('<PARENTS>', parentBlock);
q = q.replace('<ORDER_BY>', `ORDER BY ${sortDirection}(?${sortBy})` );
// //console.log(filters)
// console.log(prefixes + q)
// }
return sparqlSearchEngine.doSearch(prefixes + q, endpoint, mapper);