diff --git a/src/server/sparql/FacetConfigs.js b/src/server/sparql/FacetConfigs.js index b90da1b56de33a116591755b3793fc0131a651b0..5e32cf39243e1c105638c0c2f5634f6b5a5ace56 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 a2413053eb89795afc68a07808485958b0a0cac6..4c8290d0eb7c859620647384f187d2fd7346b12f 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 c06b957444dad550836c7d580071a69debf97283..2d577be4bf56fe8159e4e29847a01fe4c3593cfe 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 ed67c87d0e3d8388b00bac86d45cbd1852b8844d..23531c15dcf464d1350397f931be89d722ed8969 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 . }