From be3f77e1785e074aef7961a0e18ef9e62be7d984 Mon Sep 17 00:00:00 2001 From: esikkala <esko.ikkala@aalto.fi> Date: Wed, 22 May 2019 15:29:49 +0300 Subject: [PATCH] Allow multiple facet classes --- src/server/sparql/FacetConfigs.js | 16 +++++++++------- src/server/sparql/FacetResults.js | 4 ++-- src/server/sparql/FacetValues.js | 5 +++-- src/server/sparql/SparqlQueriesGeneral.js | 15 +++++++++------ 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/server/sparql/FacetConfigs.js b/src/server/sparql/FacetConfigs.js index b90da1b5..5e32cf39 100644 --- a/src/server/sparql/FacetConfigs.js +++ b/src/server/sparql/FacetConfigs.js @@ -4,7 +4,7 @@ */ export const facetConfigs = { manuscripts: { - rdfType: 'frbroo:F4_Manifestation_Singleton', + facetClass: 'frbroo:F4_Manifestation_Singleton', label: { id: 'label', type: 'text', @@ -74,7 +74,7 @@ export const facetConfigs = { }, }, works: { - rdfType: 'frbroo:F1_Work', + facetClass: 'frbroo:F1_Work', label: { id: 'label', type: 'text', @@ -101,14 +101,16 @@ export const facetConfigs = { }, }, events: { - rdfType: 'crm:E10_Transfer_of_Custody', + facetClass: 'crm:E10_Transfer_of_Custody crm:E12_Production', label: { id: 'label', type: 'text', textQueryProperty: 'skos:prefLabel' }, - // for sorting type: { + predicate: 'a', + facetValueFilter: '', + type: 'list', labelPath: 'a/(skos:prefLabel|rdfs:label)', }, place: { @@ -125,7 +127,7 @@ export const facetConfigs = { }, }, people: { - rdfType: 'mmm-schema:Person', + facetClass: 'mmm-schema:Person', label: { id: 'label', type: 'text', @@ -153,7 +155,7 @@ export const facetConfigs = { }, }, organizations: { - rdfType: 'mmm-schema:Organization', + facetClass: 'mmm-schema:Organization', label: { id: 'label', type: 'text', @@ -172,7 +174,7 @@ export const facetConfigs = { }, }, places: { - rdfType: 'crm:E53_Place', + facetClass: 'crm:E53_Place', label: { id: 'label', type: 'text', diff --git a/src/server/sparql/FacetResults.js b/src/server/sparql/FacetResults.js index a2413053..4c8290d0 100644 --- a/src/server/sparql/FacetResults.js +++ b/src/server/sparql/FacetResults.js @@ -100,7 +100,7 @@ export const getResultCount = ({ textFilters }) => { let q = countQuery; - q = q.replace('<RDF_TYPE>', facetConfigs[resultClass].rdfType); + q = q.replace('<FACET_CLASS>', facetConfigs[resultClass].facetClass); const hasFilters = uriFilters !== null || spatialFilters !== null || textFilters !== null; @@ -147,7 +147,7 @@ const getPaginatedData = ({ filterTarget: 'id', facetID: null})); } - q = q.replace('<RDF_TYPE>', facetConfig.rdfType); + q = q.replace('<FACET_CLASS>', facetConfig.facetClass); q = q.replace('<ORDER_BY_PREDICATE>', facetConfig[sortBy].labelPath); q = q.replace('<SORT_DIRECTION>', sortDirection); q = q.replace('<PAGE>', `LIMIT ${pagesize} OFFSET ${page * pagesize}`); diff --git a/src/server/sparql/FacetValues.js b/src/server/sparql/FacetValues.js index c06b9574..2d577be4 100644 --- a/src/server/sparql/FacetValues.js +++ b/src/server/sparql/FacetValues.js @@ -93,7 +93,8 @@ export const getFacet = ({ ${parentFilterStr} # these instances should not be counted, so use another variable name ?instance2 ${facetConfig.parentPredicate} ?id . - ?instance2 a <RDF_TYPE> + VALUES ?facetClass { <FACET_CLASS> } + ?instance2 a ?facetClass . BIND(false AS ?selected_) ${ignoreSelectedValues} } @@ -104,7 +105,7 @@ export const getFacet = ({ q = q.replace('<FACET_VALUE_FILTER>', facetConfig.facetValueFilter); q = q.replace('<PARENTS>', parentBlock); q = q.replace('<ORDER_BY>', `ORDER BY ${sortDirection}(?${sortBy})` ); - q = q.replace(/<RDF_TYPE>/g, facetConfigs[facetClass].rdfType); + q = q.replace(/<FACET_CLASS>/g, facetConfigs[facetClass].facetClass); q = q.replace(/<FILTER>/g, filterBlock ); q = q.replace(/<PREDICATE>/g, facetConfig.predicate); // if (facetID == 'place') { diff --git a/src/server/sparql/SparqlQueriesGeneral.js b/src/server/sparql/SparqlQueriesGeneral.js index ed67c87d..23531c15 100644 --- a/src/server/sparql/SparqlQueriesGeneral.js +++ b/src/server/sparql/SparqlQueriesGeneral.js @@ -4,8 +4,8 @@ export const endpoint = 'http://ldf.fi/mmm-cidoc/sparql'; export const countQuery = ` SELECT (COUNT(DISTINCT ?id) as ?count) WHERE { - <FILTER> - ?id a <RDF_TYPE> . + VALUES ?facetClass { <FACET_CLASS> } + ?id a ?facetClass . } `; @@ -35,7 +35,8 @@ export const facetResultSetQuery = ` { SELECT DISTINCT ?id { <FILTER> - ?id a <RDF_TYPE> . + VALUES ?facetClass { <FACET_CLASS> } + ?id a ?facetClass . OPTIONAL { ?id <ORDER_BY_PREDICATE> ?orderBy } } ORDER BY (!BOUND(?orderBy)) <SORT_DIRECTION>(?orderBy) @@ -55,7 +56,8 @@ export const facetValuesQuery = ` { <FILTER> ?instance <PREDICATE> ?id . - ?instance a <RDF_TYPE> . + VALUES ?facetClass { <FACET_CLASS> } + ?instance a ?facetClass . <SELECTED_VALUES> } <SELECTED_VALUES_NO_HITS> @@ -67,7 +69,7 @@ export const facetValuesQuery = ` FILTER(BOUND(?id)) <FACET_VALUE_FILTER> OPTIONAL { ?id gvp:broaderPreferred ?parent_ } - OPTIONAL { ?id skos:prefLabel ?prefLabel_ } + OPTIONAL { ?id skos:prefLabel|rdfs:label ?prefLabel_ } BIND(COALESCE(?parent_, '0') as ?parent) BIND(COALESCE(STR(?prefLabel_), STR(?id)) AS ?prefLabel) } @@ -77,7 +79,8 @@ export const facetValuesQuery = ` { SELECT DISTINCT (count(DISTINCT ?instance) as ?instanceCount) { <FILTER> - ?instance a <RDF_TYPE> . + VALUES ?facetClass { <FACET_CLASS> } + ?instance a ?facetClass . FILTER NOT EXISTS { ?instance <PREDICATE> ?value . } -- GitLab