From b9fc0d08f4f17c76a7d5b94bf6416519eae9958c Mon Sep 17 00:00:00 2001 From: esikkala <esko.ikkala@aalto.fi> Date: Thu, 14 Oct 2021 14:27:40 +0300 Subject: [PATCH] Add test config for speeches --- .../perspectives/sampo/Perspective1.js | 13 +- src/client/reducers/sampo/perspective1.js | 3 +- .../sparql/sampo/BackendSearchConfig.js | 15 ++ .../SemparlSpeechesConfig.js | 84 ++++++++++ .../sparql_queries/SparqlQueriesPrefixes.js | 1 + .../sparql_queries/SparqlQueriesSpeeches.js | 158 ++++++++++++++++++ 6 files changed, 272 insertions(+), 2 deletions(-) create mode 100644 src/server/sparql/sampo/perspective_configs/SemparlSpeechesConfig.js create mode 100644 src/server/sparql/sampo/sparql_queries/SparqlQueriesSpeeches.js diff --git a/src/client/components/perspectives/sampo/Perspective1.js b/src/client/components/perspectives/sampo/Perspective1.js index 487db6da..e57bd8c2 100644 --- a/src/client/components/perspectives/sampo/Perspective1.js +++ b/src/client/components/perspectives/sampo/Perspective1.js @@ -264,7 +264,7 @@ const Perspective1 = props => { />} /> <Route - path={`${rootUrl}/${perspective.id}/faceted-search/bar_chart_race`} + path={`${rootUrl}/${perspective.id}/faceted-search/bar_chart_race_ms_productions`} render={() => <BarChartRace fetchData={props.fetchResults} @@ -274,6 +274,17 @@ const Perspective1 = props => { results={props.perspectiveState.results} />} /> + <Route + path={`${rootUrl}/${perspective.id}/faceted-search/bar_chart_race_speeches`} + render={() => + <BarChartRace + fetchData={props.fetchResults} + resultClass='speechesByYearAndParty' + facetClass='perspective1' + resultUpdateID={props.perspectiveState.resultUpdateID} + results={props.perspectiveState.results} + />} + /> <Route path={`${rootUrl}/${perspective.id}/faceted-search/bar_chart_race2`} render={() => diff --git a/src/client/reducers/sampo/perspective1.js b/src/client/reducers/sampo/perspective1.js index 48b3ca7d..89cc1fae 100644 --- a/src/client/reducers/sampo/perspective1.js +++ b/src/client/reducers/sampo/perspective1.js @@ -290,7 +290,8 @@ const resultClasses = new Set([ 'eventLineChart', 'manuscriptInstancePageNetwork', 'manuscriptFacetResultsNetwork', - 'perspective1KnowledgeGraphMetadata' + 'perspective1KnowledgeGraphMetadata', + 'speechesByYearAndParty' ]) const perspective1 = (state = INITIAL_STATE, action) => { diff --git a/src/server/sparql/sampo/BackendSearchConfig.js b/src/server/sparql/sampo/BackendSearchConfig.js index 26b1266b..b06f3827 100644 --- a/src/server/sparql/sampo/BackendSearchConfig.js +++ b/src/server/sparql/sampo/BackendSearchConfig.js @@ -4,6 +4,7 @@ import { perspective3Config } from './perspective_configs/Perspective3Config' import { findsConfig } from './perspective_configs/FindsConfig' import { actorsConfig } from './perspective_configs/EmloActorsConfig' import { hellerauConfig } from './perspective_configs/HellerauConfig' +import { speechesConfig } from './perspective_configs/SemparlSpeechesConfig' import { productionPlacesQuery, lastKnownLocationsQuery, @@ -53,6 +54,7 @@ import { emloPeopleRelatedTo } from './sparql_queries/SparqlQueriesEmloPlaces' import { hellerauMigrationsQuery } from './sparql_queries/SparqlQueriesHellerau' +import { speechesByYearAndPartyQuery } from './sparql_queries/SparqlQueriesSpeeches' import { federatedSearchDatasets } from './sparql_queries/SparqlQueriesFederatedSearch' import { fullTextSearchProperties } from './sparql_queries/SparqlQueriesFullText' import { sitemapInstancePageQuery } from '../SparqlQueriesGeneral' @@ -72,6 +74,7 @@ export const backendSearchConfig = { finds: findsConfig, emloActors: actorsConfig, hellerau: hellerauConfig, + semparlSpeeches: speechesConfig, manuscripts: { perspectiveID: 'perspective1', // get rest of the config from 'perspective1' instance: { @@ -200,6 +203,18 @@ export const backendSearchConfig = { } } }, + speechesByYearAndParty: { + perspectiveID: 'semparlSpeeches', + q: speechesByYearAndPartyQuery, + filterTarget: 'speech', + resultMapper: makeObjectList, + postprocess: { + func: toBarChartRaceFormat, + config: { + step: 1 + } + } + }, eventLineChart: { perspectiveID: 'perspective1', q: eventsByDecadeQuery, diff --git a/src/server/sparql/sampo/perspective_configs/SemparlSpeechesConfig.js b/src/server/sparql/sampo/perspective_configs/SemparlSpeechesConfig.js new file mode 100644 index 00000000..bb37e1e7 --- /dev/null +++ b/src/server/sparql/sampo/perspective_configs/SemparlSpeechesConfig.js @@ -0,0 +1,84 @@ +// import { +// speechPropertiesFacetResults, +// speechPropertiesInstancePage +// } from '../sparql_queries/SparqlQueriesSpeeches' +import { prefixes } from '../sparql_queries/SparqlQueriesPrefixes' + +export const speechesConfig = { + endpoint: { + url: 'http://ldf.fi/semparl/sparql', + prefixes, + useAuth: true + }, + facetClass: 'semparls:Speech', + langTag: 'fi', + includeInSitemap: true, + // defaultConstraint: ` + // <SUBJECT> dct:source mmm-schema:Bibale . + // `, + // paginatedResults: { + // properties: speechPropertiesFacetResults + // }, + // instance: { + // properties: speechPropertiesInstancePage, + // relatedInstances: '', + // defaultTab: 'table' + // }, + facets: { + contentTextFacet: { + textQueryPredicate: '', // empty for querying the facetClass + textQueryProperty: 'semparls:content', + type: 'text' + }, + prefLabel: { + labelPath: 'skos:prefLabel' + }, + speaker: { + facetValueFilter: '', + labelPath: 'semparls:speaker/skos:prefLabel', + predicate: 'semparls:speaker', + type: 'list' + }, + party: { + facetValueFilter: '', + labelPath: 'semparls:party/skos:prefLabel', + predicate: 'semparls:party', + type: 'list', + facetLabelFilter: 'FILTER(LANG(?prefLabel_) = "<LANG>")' + }, + speechType: { + facetValueFilter: '', + labelPath: 'semparls:speechType/skos:prefLabel', + predicate: 'semparls:speechType', + type: 'list' + }, + language: { + facetValueFilter: '', + labelPath: 'dct:language/skos:prefLabel', + predicate: 'dct:language', + type: 'list', + facetLabelFilter: 'FILTER(LANG(?prefLabel_) = "<LANG>")' + }, + date: { + facetValueFilter: '', + labelPath: 'dct:date', + predicate: 'dct:date', + type: 'dateNoTimespan' + }, + referencedPlace: { + facetValueFilter: '?id a crm:E53_Place', // use only semparl places + labelPath: 'semparl_linguistics:referenceToPlaceName/semparl_linguistics:link/skos:prefLabel', + predicate: 'semparl_linguistics:referenceToPlaceName/semparl_linguistics:link', + type: 'list', + facetLabelFilter: ` + FILTER(LANG(?prefLabel_) = "<LANG>")` + }, + documentType: { + facetValueFilter: '', + // labelPath: 'semparls:item/(semparls:relatedDocument|semparls:legislativeMotion|semparls:account|semparls:debateMotion|semparls:committeeReport|semparls:governmentProposal)/a', + labelPath: 'semparls:item/semparls:governmentProposal/a', + predicate: 'semparls:item/semparls:governmentProposal/a', + type: 'list' + } + } +} diff --git a/src/server/sparql/sampo/sparql_queries/SparqlQueriesPrefixes.js b/src/server/sparql/sampo/sparql_queries/SparqlQueriesPrefixes.js index aca53548..e3692a82 100644 --- a/src/server/sparql/sampo/sparql_queries/SparqlQueriesPrefixes.js +++ b/src/server/sparql/sampo/sparql_queries/SparqlQueriesPrefixes.js @@ -20,4 +20,5 @@ export const prefixes = ` PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX h-schema: <http://ldf.fi/schema/hellerau/> PREFIX gn: <http://www.geonames.org/ontology#> + PREFIX semparls: <http://ldf.fi/schema/semparl/> ` diff --git a/src/server/sparql/sampo/sparql_queries/SparqlQueriesSpeeches.js b/src/server/sparql/sampo/sparql_queries/SparqlQueriesSpeeches.js new file mode 100644 index 00000000..c7013240 --- /dev/null +++ b/src/server/sparql/sampo/sparql_queries/SparqlQueriesSpeeches.js @@ -0,0 +1,158 @@ +const perspectiveID = 'speeches' + +export const speechPropertiesInstancePage = + ` + ?id skos:prefLabel ?prefLabel__id . + BIND(?prefLabel__id as ?prefLabel__prefLabel) + BIND(?id as ?uri__id) + BIND(?id as ?uri__dataProviderUrl) + BIND(?id as ?uri__prefLabel) + { + ?id semparls:speaker ?speaker__id . + ?speaker__id skos:prefLabel ?speaker__prefLabel . + BIND(CONCAT("/people/page/", REPLACE(STR(?speaker__id), "^.*\\\\/(.+)", "$1")) AS ?speaker__dataProviderUrl) + } + UNION + { + ?id semparls:party ?party__id . + ?party__id skos:prefLabel ?party__prefLabel . + FILTER(LANG(?party__prefLabel) = "<LANG>") + BIND(CONCAT("/groups/page/", REPLACE(STR(?party__id), "^.*\\\\/(.+)", "$1")) AS ?party__dataProviderUrl) + } + UNION + { + ?id semparls:speechType ?speechType__id . + # ?speechType__id skos:prefLabel ?speechType__prefLabel . + BIND(?speechType__id as ?speechType__prefLabel) + } + UNION + { + ?id dct:language ?language_ . + BIND(REPLACE(STR(?language_), "http://id.loc.gov/vocabulary/iso639-2/", "") as ?language) + } + UNION + { + ?id dct:date ?date_ . + BIND(CONCAT(STR(DAY(?date_)), + ".", + STR(MONTH(?date_)), + ".", + STR(YEAR(?date_))) as ?date) + } + UNION + { + ?id semparl_linguistics:referenceToPlaceName/semparl_linguistics:link ?referencedPlace__id . + ?referencedPlace__id skos:prefLabel ?referencedPlace__prefLabel . + FILTER(LANG(?referencedPlace__prefLabel) = "<LANG>") + } + UNION + { + ?id semparls:content ?content . + } + UNION + { + ?id semparls:item ?item__id . + ?item__id skos:prefLabel ?item__prefLabel . + } +` + +export const speechPropertiesFacetResults = + ` ?id skos:prefLabel ?prefLabel__id . + BIND(?prefLabel__id as ?prefLabel__prefLabel) + BIND(CONCAT("/${perspectiveID}/page/", REPLACE(STR(?id), "^.*\\\\/(.+)", "$1")) AS ?prefLabel__dataProviderUrl) + BIND(?id as ?uri__id) + BIND(?id as ?uri__dataProviderUrl) + BIND(?id as ?uri__prefLabel) + { + ?id semparls:speaker ?speaker__id . + ?speaker__id skos:prefLabel ?speaker__prefLabel . + BIND(CONCAT("/people/page/", REPLACE(STR(?speaker__id), "^.*\\\\/(.+)", "$1")) AS ?speaker__dataProviderUrl) + } + UNION + { + ?id semparls:party ?party__id . + ?party__id skos:prefLabel ?party__prefLabel . + FILTER(LANG(?party__prefLabel) = "<LANG>") + BIND(CONCAT("/groups/page/", REPLACE(STR(?party__id), "^.*\\\\/(.+)", "$1")) AS ?party__dataProviderUrl) + } + UNION + { + ?id semparls:speechType ?speechType__id . + ?speechType__id skos:prefLabel ?speechType__prefLabel . + # BIND(REPLACE(STR(?speechType__id), "http://ldf.fi/semparl/", "") as ?speechType__prefLabel) + } + UNION + { + ?id dct:language ?language_ . + BIND(REPLACE(STR(?language_), "http://id.loc.gov/vocabulary/iso639-2/", "") as ?language) + } + UNION + { + ?id dct:date ?date_ . + BIND(CONCAT(STR(DAY(?date_)), + ".", + STR(MONTH(?date_)), + ".", + STR(YEAR(?date_))) as ?date) + } + UNION + { + ?id semparl_linguistics:referenceToPlaceName/semparl_linguistics:link ?referencedPlace__id . + ?referencedPlace__id skos:prefLabel ?referencedPlace__prefLabel . + FILTER(LANG(?referencedPlace__prefLabel) = "<LANG>") + } + UNION + { + ?id semparls:item ?item__id . + ?item__id skos:prefLabel ?item__prefLabel . + BIND(CONCAT("/items/page/", REPLACE(STR(?item__id), "^.*\\\\/(.+)", "$1")) AS ?item__dataProviderUrl) . + } +` + +export const itemPropertiesInstancePage = ` + BIND(?id as ?uri__id) + BIND(?id as ?uri__dataProviderUrl) + BIND(?id as ?uri__prefLabel) + + { + ?id skos:prefLabel ?prefLabel__id . + BIND(?prefLabel__id as ?prefLabel__prefLabel) + FILTER(LANG(?prefLabel__prefLabel)='<LANG>') + } + UNION + { + ?id semparls:plenarySession ?plenarySession__id . + ?plenarySession__id skos:prefLabel ?plenarySession__prefLabel . + } + UNION + { + ?id semparls:governmentProposal ?governmentProposal__id . + ?governmentProposal__id skos:prefLabel ?governmentProposal__prefLabel . + } + UNION + { + ?id semparls:diary ?diary__id . + BIND(?diary__id as ?diary__prefLabel) . + BIND(?diary__id as ?diary__dataProviderUrl) + } + UNION + { + ?speech__id semparls:item ?id . + ?speech__id skos:prefLabel ?speech__prefLabel . + BIND(CONCAT("/speeches/page/", REPLACE(STR(?speech__id), "^.*\\\\/(.+)", "$1")) AS ?speech__dataProviderUrl) . + } +` + +export const speechesByYearAndPartyQuery = ` + SELECT ?id ?dataItem__id ?dataItem__prefLabel (count(?speech) as ?dataItem__value) WHERE { + ?speech semparls:party ?dataItem__id ; + semparls:speechType ?speechType ; + dct:date ?date . + ?dataItem__id skos:prefLabel ?dataItem__prefLabel . + BIND(YEAR(?date) as ?id) + FILTER(?speechType NOT IN (<http://ldf.fi/semparl/speechtypes/PuhemiesPuheenvuoro>)) + FILTER(LANG(?dataItem__prefLabel) = "<LANG>") + } + GROUP BY ?id ?dataItem__id ?dataItem__prefLabel + ORDER BY ?id +` -- GitLab