diff --git a/src/client/components/facet_results/LeafletMap.js b/src/client/components/facet_results/LeafletMap.js index 7d9ba62264af411344c9421aa2db0c1997eda385..b4269efd97a42bf38e2607512bb1f3c278d2b2e6 100644 --- a/src/client/components/facet_results/LeafletMap.js +++ b/src/client/components/facet_results/LeafletMap.js @@ -402,23 +402,27 @@ class LeafletMap extends React.Component { } if (this.props.variant === 'productionPlaces') { popUpTemplate += `<p>Manuscripts produced here:</p>`; - popUpTemplate += this.createManuscriptListing(result.manuscript); + popUpTemplate += this.createInstanceListing(result.related); + } + if (this.props.variant === 'actorPlaces') { + popUpTemplate += `<p>Actors:</p>`; + popUpTemplate += this.createInstanceListing(result.related); } return popUpTemplate; } - createManuscriptListing = manuscripts => { + createInstanceListing = instances => { let html = ''; - if (Array.isArray(manuscripts)) { - manuscripts = orderBy(manuscripts, 'id'); + if (Array.isArray(instances)) { + instances = orderBy(instances, 'prefLabel'); html += '<ul>'; - manuscripts.forEach(ms => { - html += '<li><a target="_blank" rel="noopener noreferrer" href=' + ms.dataProviderUrl + '>' + ms.dataProviderUrl + '</a></li>'; + instances.forEach(i => { + html += '<li><a target="_blank" rel="noopener noreferrer" href=' + i.dataProviderUrl + '>' + i.prefLabel + '</a></li>'; }); html += '</ul>'; } else { - html += '<p><a target="_blank" rel="noopener noreferrer" href=' + manuscripts.dataProviderUrl + '>' + manuscripts.dataProviderUrl + '</a></p>'; + html += '<p><a target="_blank" rel="noopener noreferrer" href=' + instances.dataProviderUrl + '>' + instances.prefLabel + '</a></p>'; } return html; } diff --git a/src/server/sparql/FacetResults.js b/src/server/sparql/FacetResults.js index 21872e917ef9798bee1d0fb31f81bc663de2c52f..83afce87b5d25c50de800af673ad634bcb582f40 100644 --- a/src/server/sparql/FacetResults.js +++ b/src/server/sparql/FacetResults.js @@ -13,13 +13,17 @@ import { actorProperties, actorPlacesQuery, } from './SparqlQueriesActors'; -import { placeProperties, placeQuery, allPlacesQuery } from './SparqlQueriesPlaces'; +import { + placeProperties, + placeQuery, + manuscriptsProducedAt, + actorsAt, + allPlacesQuery, +} from './SparqlQueriesPlaces'; import { facetConfigs } from './FacetConfigs'; import { mapCount, mapPlaces } from './Mappers'; import { makeObjectList } from './SparqlObjectMapper'; -import { - generateConstraintsBlock, -} from './Filters'; +import { generateConstraintsBlock } from './Filters'; export const getPaginatedResults = async ({ resultClass, @@ -194,7 +198,7 @@ export const getByURI = ({ resultClass, facetClass, constraints, - //variant, + variant, uri, resultFormat }) => { @@ -204,6 +208,14 @@ export const getByURI = ({ q = placeQuery; break; } + switch (variant) { + case 'productionPlaces': + q = q.replace('<RELATED_INSTANCES>', manuscriptsProducedAt); + break; + case 'actorPlaces': + q = q.replace('<RELATED_INSTANCES>', actorsAt); + break; + } if (constraints == null) { q = q.replace('<FILTER>', '# no filters'); } else { @@ -211,12 +223,9 @@ export const getByURI = ({ resultClass: resultClass, facetClass: facetClass, constraints: constraints, - filterTarget: 'manuscript__id', + filterTarget: 'related__id', facetID: null})); } q = q.replace('<ID>', `<${uri}>`); - // if (variant === 'productionPlaces') { - // console.log(prefixes + q) - // } return runSelectQuery(prefixes + q, endpoint, makeObjectList, resultFormat); }; diff --git a/src/server/sparql/SparqlQueriesPlaces.js b/src/server/sparql/SparqlQueriesPlaces.js index b8e5a2fb9dccd45c76d4dad8afd5aa219635ce5e..5fea4c49a2f852d94530c293d767bd2dd24bf2d9 100644 --- a/src/server/sparql/SparqlQueriesPlaces.js +++ b/src/server/sparql/SparqlQueriesPlaces.js @@ -61,7 +61,7 @@ export const allPlacesQuery = ` `; export const placeQuery = ` - SELECT ?id ?prefLabel ?sameAs ?dataProviderUrl ?parent__id ?parent__prefLabel ?manuscript__id ?manuscript__dataProviderUrl + SELECT ?id ?prefLabel ?sameAs ?dataProviderUrl ?parent__id ?parent__prefLabel ?related__id ?related__prefLabel ?related__dataProviderUrl WHERE { BIND (<ID> AS ?id) OPTIONAL { ?id skos:prefLabel ?prefLabel_ } @@ -72,10 +72,27 @@ export const placeQuery = ` } OPTIONAL { ?id mmm-schema:data_provider_url ?dataProviderUrl } OPTIONAL { ?id owl:sameAs ?sameAs } + <RELATED_INSTANCES> + } +`; + +export const manuscriptsProducedAt = ` OPTIONAL { <FILTER> - ?manuscript__id ^crm:P108_has_produced/crm:P7_took_place_at ?id . - BIND(?manuscript__id AS ?manuscript__dataProviderUrl) + ?related__id ^crm:P108_has_produced/crm:P7_took_place_at ?id . + BIND(?related__id AS ?related__dataProviderUrl) + } +`; + +export const actorsAt = ` + OPTIONAL { + <FILTER> + { ?related__id crm:P98i_was_born/crm:P7_took_place_at ?id } + UNION + { ?related__id crm:P100i_died_in/crm:P7_took_place_at ?id } + UNION + { ?related__id mmm-schema:person_place ?id } + ?related__id skos:prefLabel ?related__prefLabel . + BIND(?related__id AS ?related__dataProviderUrl) } - } `;