From c7eb1acbd0c35903b40671076bce6b65b4e1056d Mon Sep 17 00:00:00 2001 From: Tiffney Bare Date: Thu, 8 Feb 2024 17:25:54 -0600 Subject: [PATCH] Create a search page using Drupal views (#4060) --- composer.json | 1 + docs/source/developer-guide/dev_search.rst | 5 + docs/source/installation/index.rst | 2 +- .../modules/metastore_facets/README.md | 22 + .../install/facets.facet.categories.yml | 75 +++ .../install/facets.facet.publishers.yml | 73 +++ .../config/install/facets.facet.tags.yml | 75 +++ ...e__dkan_dataset_search__dataset_search.yml | 8 + .../metastore_facets.info.yml | 8 + .../metastore_facets.libraries.yml | 5 + .../config/install/search_api.index.dkan.yml | 22 +- .../views.view.dkan_dataset_search.yml | 527 ++++++++++++++++++ .../metastore_search.info.yml | 7 +- .../src/ComplexData/Dataset.php | 4 +- .../processor/DkanDatasetAddNid.php | 121 ++++ modules/sample_content/css/search.css | 37 ++ modules/sample_content/sample_content.json | 36 +- .../sample_content.libraries.yml | 5 + modules/sample_content/sample_content.module | 12 + .../sample_content.template.json | 36 +- 20 files changed, 1035 insertions(+), 46 deletions(-) create mode 100644 modules/metastore/modules/metastore_facets/README.md create mode 100644 modules/metastore/modules/metastore_facets/config/install/facets.facet.categories.yml create mode 100644 modules/metastore/modules/metastore_facets/config/install/facets.facet.publishers.yml create mode 100644 modules/metastore/modules/metastore_facets/config/install/facets.facet.tags.yml create mode 100644 modules/metastore/modules/metastore_facets/config/install/facets.facet_source.search_api__views_page__dkan_dataset_search__dataset_search.yml create mode 100644 modules/metastore/modules/metastore_facets/metastore_facets.info.yml create mode 100644 modules/metastore/modules/metastore_facets/metastore_facets.libraries.yml create mode 100644 modules/metastore/modules/metastore_search/config/install/views.view.dkan_dataset_search.yml create mode 100644 modules/metastore/modules/metastore_search/src/Plugin/search_api/processor/DkanDatasetAddNid.php create mode 100644 modules/sample_content/css/search.css create mode 100644 modules/sample_content/sample_content.libraries.yml create mode 100644 modules/sample_content/sample_content.module diff --git a/composer.json b/composer.json index 65d4161fcc..82a638e561 100644 --- a/composer.json +++ b/composer.json @@ -5,6 +5,7 @@ "minimum-stability": "dev", "description": "DKAN Open Data Catalog", "require": { + "drupal/facets": "^3.0@beta", "drupal/moderated_content_bulk_publish": "~2.0.20", "drupal/search_api": "^1.15", "drupal/select_or_other": "^4.1.0", diff --git a/docs/source/developer-guide/dev_search.rst b/docs/source/developer-guide/dev_search.rst index 249dc3fdfe..c77914b7ee 100644 --- a/docs/source/developer-guide/dev_search.rst +++ b/docs/source/developer-guide/dev_search.rst @@ -1,2 +1,7 @@ DKAN Search =========== + +If you plan to build your data site with a Drupal theme rather than a decoupled frontend the metastore_search module provides a dataset search view that you can use as a starting point. + +.. include:: ../../../modules/metastore/modules/metastore_facets/README.md + :parser: myst_parser.docutils_ diff --git a/docs/source/installation/index.rst b/docs/source/installation/index.rst index 79565c710a..455664446a 100644 --- a/docs/source/installation/index.rst +++ b/docs/source/installation/index.rst @@ -1,5 +1,5 @@ Installation -=============== +============= .. note:: `DKAN DDEV Add-on `_ is a project diff --git a/modules/metastore/modules/metastore_facets/README.md b/modules/metastore/modules/metastore_facets/README.md new file mode 100644 index 0000000000..5cafd719ae --- /dev/null +++ b/modules/metastore/modules/metastore_facets/README.md @@ -0,0 +1,22 @@ +# Metastore Facets + +This is an optional module for sites that are not using a decoupled frontend. It provides example Categories, Tags, and Publishers facet blocks that you can use with the *dkan_dataset_search* view. + + drush en metastore_facets + +Use the block layout screen at /admin/structure/block, and place the facets into a sidebar region, restrict the display to the /dataset-search page only. + +If you do not see the dataset search view, you will need to run the following to get the view and facets working: + + composer require drupal/facets:3.0.x-dev + + drush en metastore_facets + + drush cim --partial --source=modules/contrib/dkan/modules/metastore/modules/metastore_search/config/install + + + +The search view and facets are for demonstration purposes and provide a starting step for your own implementation. diff --git a/modules/metastore/modules/metastore_facets/config/install/facets.facet.categories.yml b/modules/metastore/modules/metastore_facets/config/install/facets.facet.categories.yml new file mode 100644 index 0000000000..3cebf6be3e --- /dev/null +++ b/modules/metastore/modules/metastore_facets/config/install/facets.facet.categories.yml @@ -0,0 +1,75 @@ +langcode: en +status: true +dependencies: + config: + - search_api.index.dkan + - views.view.dkan_dataset_search + module: + - search_api +_core: + default_config_hash: 24nvP8tTnc1gmRfiaIIsRgxR-oXY1zDc8vSeTnenU0k +id: categories +name: Categories +url_alias: theme +weight: 0 +min_count: 1 +missing: false +missing_label: others +show_only_one_result: false +field_identifier: theme +facet_source_id: 'search_api:views_page__dkan_dataset_search__dataset_search' +widget: + type: checkbox + config: + show_numbers: true + soft_limit: 0 + show_reset_link: true + reset_text: 'Show all' + hide_reset_when_no_selection: true + soft_limit_settings: + show_less_label: 'Show less' + show_more_label: 'Show more' +query_operator: and +use_hierarchy: false +keep_hierarchy_parents_active: false +hierarchy: + type: taxonomy + config: { } +expand_hierarchy: false +enable_parent_when_child_gets_disabled: true +hard_limit: 0 +exclude: false +only_visible_when_facet_source_is_visible: true +processor_configs: + active_widget_order: + processor_id: active_widget_order + weights: + sort: 20 + settings: + sort: DESC + count_widget_order: + processor_id: count_widget_order + weights: + sort: 30 + settings: + sort: DESC + display_value_widget_order: + processor_id: display_value_widget_order + weights: + sort: 40 + settings: + sort: ASC + hierarchy_processor: + processor_id: hierarchy_processor + weights: + build: 100 + settings: { } + url_processor_handler: + processor_id: url_processor_handler + weights: + pre_query: 50 + build: 15 + settings: { } +empty_behavior: + behavior: none +show_title: false diff --git a/modules/metastore/modules/metastore_facets/config/install/facets.facet.publishers.yml b/modules/metastore/modules/metastore_facets/config/install/facets.facet.publishers.yml new file mode 100644 index 0000000000..105e39c997 --- /dev/null +++ b/modules/metastore/modules/metastore_facets/config/install/facets.facet.publishers.yml @@ -0,0 +1,73 @@ +langcode: en +status: true +dependencies: + config: + - search_api.index.dkan + - views.view.dkan_dataset_search + module: + - search_api +id: publishers +name: Publishers +weight: 0 +min_count: 1 +missing: false +missing_label: others +url_alias: publishers +facet_source_id: 'search_api:views_page__dkan_dataset_search__dataset_search' +field_identifier: publisher__name +query_operator: and +hard_limit: 0 +exclude: false +use_hierarchy: false +keep_hierarchy_parents_active: false +hierarchy: + type: taxonomy + config: { } +expand_hierarchy: false +enable_parent_when_child_gets_disabled: true +widget: + type: checkbox + config: + show_numbers: true + soft_limit: 0 + show_reset_link: true + reset_text: 'Show all' + hide_reset_when_no_selection: false + soft_limit_settings: + show_less_label: 'Show less' + show_more_label: 'Show more' +empty_behavior: + behavior: none +only_visible_when_facet_source_is_visible: true +show_only_one_result: false +show_title: false +processor_configs: + active_widget_order: + processor_id: active_widget_order + weights: + sort: 20 + settings: + sort: DESC + count_widget_order: + processor_id: count_widget_order + weights: + sort: 30 + settings: + sort: DESC + display_value_widget_order: + processor_id: display_value_widget_order + weights: + sort: 40 + settings: + sort: ASC + hierarchy_processor: + processor_id: hierarchy_processor + weights: + build: 100 + settings: { } + url_processor_handler: + processor_id: url_processor_handler + weights: + pre_query: 50 + build: 15 + settings: { } diff --git a/modules/metastore/modules/metastore_facets/config/install/facets.facet.tags.yml b/modules/metastore/modules/metastore_facets/config/install/facets.facet.tags.yml new file mode 100644 index 0000000000..5c214ba76c --- /dev/null +++ b/modules/metastore/modules/metastore_facets/config/install/facets.facet.tags.yml @@ -0,0 +1,75 @@ +langcode: en +status: true +dependencies: + config: + - search_api.index.dkan + - views.view.dkan_dataset_search + module: + - search_api +_core: + default_config_hash: 5l9y65p885oRNMqrRRM4GHCPi8QjjR73QdW86S7hNao +id: tags +name: Tags +url_alias: tags +weight: 0 +min_count: 1 +missing: false +missing_label: others +show_only_one_result: false +field_identifier: keyword +facet_source_id: 'search_api:views_page__dkan_dataset_search__dataset_search' +widget: + type: checkbox + config: + show_numbers: true + soft_limit: 0 + show_reset_link: true + reset_text: 'Show all' + hide_reset_when_no_selection: false + soft_limit_settings: + show_less_label: 'Show less' + show_more_label: 'Show more' +query_operator: and +use_hierarchy: false +keep_hierarchy_parents_active: false +hierarchy: + type: taxonomy + config: { } +expand_hierarchy: false +enable_parent_when_child_gets_disabled: true +hard_limit: 0 +exclude: false +only_visible_when_facet_source_is_visible: true +processor_configs: + active_widget_order: + processor_id: active_widget_order + weights: + sort: 20 + settings: + sort: DESC + count_widget_order: + processor_id: count_widget_order + weights: + sort: 30 + settings: + sort: DESC + display_value_widget_order: + processor_id: display_value_widget_order + weights: + sort: 40 + settings: + sort: ASC + hierarchy_processor: + processor_id: hierarchy_processor + weights: + build: 100 + settings: { } + url_processor_handler: + processor_id: url_processor_handler + weights: + pre_query: 50 + build: 15 + settings: { } +empty_behavior: + behavior: none +show_title: false diff --git a/modules/metastore/modules/metastore_facets/config/install/facets.facet_source.search_api__views_page__dkan_dataset_search__dataset_search.yml b/modules/metastore/modules/metastore_facets/config/install/facets.facet_source.search_api__views_page__dkan_dataset_search__dataset_search.yml new file mode 100644 index 0000000000..19d1b08988 --- /dev/null +++ b/modules/metastore/modules/metastore_facets/config/install/facets.facet_source.search_api__views_page__dkan_dataset_search__dataset_search.yml @@ -0,0 +1,8 @@ +langcode: en +status: true +dependencies: { } +id: search_api__views_page__dkan_dataset_search__dataset_search +name: 'search_api:views_page__dkan_dataset_search__dataset_search' +filter_key: null +url_processor: query_string +breadcrumb: { } diff --git a/modules/metastore/modules/metastore_facets/metastore_facets.info.yml b/modules/metastore/modules/metastore_facets/metastore_facets.info.yml new file mode 100644 index 0000000000..06dc3b8321 --- /dev/null +++ b/modules/metastore/modules/metastore_facets/metastore_facets.info.yml @@ -0,0 +1,8 @@ +name: DKAN Metastore Facets +description: Provides facet blocks for DKAN Metastore Search. +type: module +core_version_requirement: ^9.4 || ^10 +dependencies: + - dkan:metastore_search + - drupal:facets +package: DKAN diff --git a/modules/metastore/modules/metastore_facets/metastore_facets.libraries.yml b/modules/metastore/modules/metastore_facets/metastore_facets.libraries.yml new file mode 100644 index 0000000000..54adff696f --- /dev/null +++ b/modules/metastore/modules/metastore_facets/metastore_facets.libraries.yml @@ -0,0 +1,5 @@ +search_facets: + version: 1.0 + css: + theme: + css/metastore_facets.css: {} diff --git a/modules/metastore/modules/metastore_search/config/install/search_api.index.dkan.yml b/modules/metastore/modules/metastore_search/config/install/search_api.index.dkan.yml index fa887572b3..4694fc7e4a 100644 --- a/modules/metastore/modules/metastore_search/config/install/search_api.index.dkan.yml +++ b/modules/metastore/modules/metastore_search/config/install/search_api.index.dkan.yml @@ -26,6 +26,11 @@ field_settings: datasource_id: dkan_dataset property_path: modified type: string + nid: + label: nid + datasource_id: dkan_dataset + property_path: search_api_nid + type: string publisher__name: label: publisher__name datasource_id: dkan_dataset @@ -41,14 +46,25 @@ field_settings: datasource_id: dkan_dataset property_path: title type: text + title_string: + label: title_string + datasource_id: dkan_dataset + property_path: title + type: string datasource_settings: dkan_dataset: { } processor_settings: add_url: { } aggregated_field: { } + custom_value: { } + dkan_dataset_add_nid: { } dkan_dataset_filter_hidden: { } dkan_dataset_filter_unpublished: { } + entity_type: { } ignorecase: + weights: + preprocess_index: -20 + preprocess_query: -20 all_fields: false fields: - description @@ -56,15 +72,13 @@ processor_settings: - publisher__name - theme - title - weights: - preprocess_index: -20 - preprocess_query: -20 language_with_fallback: { } rendered_item: { } tracker_settings: default: indexing_order: fifo options: - index_directly: true cron_limit: 50 + index_directly: true + track_changes_in_references: true server: dkan diff --git a/modules/metastore/modules/metastore_search/config/install/views.view.dkan_dataset_search.yml b/modules/metastore/modules/metastore_search/config/install/views.view.dkan_dataset_search.yml new file mode 100644 index 0000000000..e8ed1e5915 --- /dev/null +++ b/modules/metastore/modules/metastore_search/config/install/views.view.dkan_dataset_search.yml @@ -0,0 +1,527 @@ +langcode: en +status: true +dependencies: + config: + - search_api.index.dkan + module: + - search_api +id: dkan_dataset_search +label: 'DKAN Dataset Search' +module: views +description: '' +tag: '' +base_table: search_api_index_dkan +base_field: search_api_id +display: + default: + id: default + display_title: Default + display_plugin: default + position: 0 + display_options: + title: Datasets + fields: + nid: + id: nid + table: search_api_index_dkan + field: nid + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api_numeric + label: '' + exclude: true + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + set_precision: false + precision: 0 + decimal: . + separator: '' + format_plural: false + format_plural_string: !!binary MQNAY291bnQ= + prefix: '' + suffix: '' + link_to_item: false + use_highlighting: false + multi_type: separator + multi_separator: ', ' + format_plural_values: { } + modified: + id: modified + table: search_api_index_dkan + field: modified + relationship: none + group_type: group + admin_label: Modified + plugin_id: search_api + label: Updated + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: true + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + link_to_item: false + use_highlighting: false + multi_type: separator + multi_separator: ', ' + title: + id: title + table: search_api_index_dkan + field: title + relationship: none + group_type: group + admin_label: Title + plugin_id: search_api + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: true + path: '/node/{{ nid }}' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: h2 + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + link_to_item: false + use_highlighting: false + multi_type: separator + multi_separator: ', ' + theme: + id: theme + table: search_api_index_dkan + field: theme + relationship: none + group_type: group + admin_label: Theme + plugin_id: search_api + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + link_to_item: false + use_highlighting: false + multi_type: ul + multi_separator: ', ' + description: + id: description + table: search_api_index_dkan + field: description + relationship: none + group_type: group + admin_label: Description + entity_type: null + entity_field: null + plugin_id: search_api + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 500 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: true + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + link_to_item: false + use_highlighting: false + multi_type: separator + multi_separator: ', ' + keyword: + id: keyword + table: search_api_index_dkan + field: keyword + relationship: none + group_type: group + admin_label: Keyword + plugin_id: search_api + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + link_to_item: false + use_highlighting: false + multi_type: ul + multi_separator: ', ' + pager: + type: full + options: + offset: 0 + items_per_page: 10 + total_pages: null + id: 0 + tags: + next: ›› + previous: ‹‹ + first: '« First' + last: 'Last »' + expose: + items_per_page: false + items_per_page_label: 'Items per page' + items_per_page_options: '5, 10, 25, 50' + items_per_page_options_all: false + items_per_page_options_all_label: '- All -' + offset: false + offset_label: Offset + quantity: 9 + exposed_form: + type: basic + options: + submit_button: Apply + reset_button: true + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + access: + type: none + options: { } + cache: + type: none + options: { } + empty: { } + sorts: + modified: + id: modified + table: search_api_index_dkan + field: modified + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api + order: DESC + expose: + label: 'Last Updated' + field_identifier: modified + exposed: true + title_string: + id: title_string + table: search_api_index_dkan + field: title_string + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api + order: ASC + expose: + label: Alphabetical + field_identifier: title_string + exposed: true + arguments: { } + filters: + search_api_fulltext: + id: search_api_fulltext + table: search_api_index_dkan + field: search_api_fulltext + relationship: none + group_type: group + admin_label: '' + plugin_id: search_api_fulltext + operator: or + value: '' + group: 1 + exposed: true + expose: + operator_id: search_api_fulltext_op + label: 'Fulltext search' + description: '' + use_operator: false + operator: search_api_fulltext_op + operator_limit_selection: false + operator_list: { } + identifier: search_api_fulltext + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + api_user: '0' + administrator: '0' + expose_fields: false + placeholder: '' + searched_fields_id: search_api_fulltext_searched_fields + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + parse_mode: terms + min_length: null + fields: { } + filter_groups: + operator: AND + groups: + 1: AND + style: + type: default + row: + type: fields + query: + type: search_api_query + options: + bypass_access: false + skip_access: false + preserve_facet_query_args: false + query_tags: { } + relationships: { } + css_class: dkan-dataset-search + header: + result: + id: result + table: views + field: result + relationship: none + group_type: group + admin_label: '' + plugin_id: result + empty: true + content: 'Displaying @start - @end of @total' + footer: { } + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_interface' + - url + - url.query_args + - 'url.query_args:sort_by' + - 'url.query_args:sort_order' + tags: + - 'config:search_api.index.dkan' + - 'search_api_list:dkan' + dataset_search: + id: dataset_search + display_title: Search + display_plugin: page + position: 1 + display_options: + display_description: '' + display_extenders: { } + path: dataset/search + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_interface' + - url + - url.query_args + - 'url.query_args:sort_by' + - 'url.query_args:sort_order' + tags: + - 'config:search_api.index.dkan' + - 'search_api_list:dkan' diff --git a/modules/metastore/modules/metastore_search/metastore_search.info.yml b/modules/metastore/modules/metastore_search/metastore_search.info.yml index 43757a620a..fd4852903c 100644 --- a/modules/metastore/modules/metastore_search/metastore_search.info.yml +++ b/modules/metastore/modules/metastore_search/metastore_search.info.yml @@ -3,7 +3,8 @@ description: Provides an endpoint to perform searches against DKAN's metadata. type: module core_version_requirement: ^9.4 || ^10 dependencies: - - metastore - - search_api - - search_api_db + - dkan:metastore + - drupal:search_api + - drupal:views + - search_api:search_api_db package: DKAN diff --git a/modules/metastore/modules/metastore_search/src/ComplexData/Dataset.php b/modules/metastore/modules/metastore_search/src/ComplexData/Dataset.php index 3b22436a61..7f6de9c78e 100644 --- a/modules/metastore/modules/metastore_search/src/ComplexData/Dataset.php +++ b/modules/metastore/modules/metastore_search/src/ComplexData/Dataset.php @@ -5,7 +5,7 @@ use Drupal\Core\TypedData\DataDefinition; use Drupal\Core\TypedData\ListDataDefinition; use Drupal\Core\TypedData\Plugin\DataType\ItemList; -use Drupal\Core\TypedData\TypedData; +use Drupal\Core\TypedData\Plugin\DataType\StringData; use Drupal\metastore_search\Facade\ComplexDataFacade; /** @@ -124,7 +124,7 @@ public function get($property_name) { $property->setValue($values); } else { - $property = new class ($definition, $property_name) extends TypedData{}; + $property = new StringData($definition, $property_name); $value = $this->getPropertyValue($property_name); $property->setValue($value); } diff --git a/modules/metastore/modules/metastore_search/src/Plugin/search_api/processor/DkanDatasetAddNid.php b/modules/metastore/modules/metastore_search/src/Plugin/search_api/processor/DkanDatasetAddNid.php new file mode 100644 index 0000000000..da4a22bb95 --- /dev/null +++ b/modules/metastore/modules/metastore_search/src/Plugin/search_api/processor/DkanDatasetAddNid.php @@ -0,0 +1,121 @@ +entityRepository = $entityRepository; + } + + /** + * Create. + * + * @param \Symfony\Component\DependencyInjection\ContainerInterface $container + * Container. + * @param array $configuration + * Config. + * @param string $plugin_id + * Plugin. + * @param mixed $plugin_definition + * Plugin definition. + * + * @return static + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('entity.repository') + ); + } + + /** + * {@inheritdoc} + */ + public function isValid(string $dataset_id): bool { + return TRUE; + } + + /** + * {@inheritdoc} + */ + public function getPropertyDefinitions(DatasourceInterface $datasource = NULL) { + $properties = []; + + if ($datasource) { + $definition = [ + 'label' => $this->t('nid'), + 'description' => $this->t('The node id of the dataset.'), + 'type' => 'string', + 'is_list' => FALSE, + 'processor_id' => $this->getPluginId(), + ]; + $properties['search_api_nid'] = new ProcessorProperty($definition); + } + + return $properties; + } + + /** + * {@inheritdoc} + */ + public function addFieldValues(ItemInterface $item) { + $id = $item->getId(); + if ($id) { + $uuid = str_replace("dkan_dataset/", "", $id); + $nid = $this->entityRepository->loadEntityByUuid('node', $uuid)->id(); + + $fields = $item->getFields(FALSE); + $fields = $this->getFieldsHelper()->filterForPropertyPath($fields, $item->getDatasourceId(), 'search_api_nid'); + + foreach ($fields as $field) { + $field->addValue($nid); + } + } + } + +} diff --git a/modules/sample_content/css/search.css b/modules/sample_content/css/search.css new file mode 100644 index 0000000000..a066a767fd --- /dev/null +++ b/modules/sample_content/css/search.css @@ -0,0 +1,37 @@ +.dkan-dataset-search .views-row { + border-top: 1px solid #cccccc; + padding: 8px 0; +} +.dkan-dataset-search .views-field-modified { + text-align: right; +} +.dkan-dataset-search ul { + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; +} +.dkan-dataset-search .views-field-theme li { + display: inline; + font-style: italic; + font-weight: bold; +} +.dkan-dataset-search .views-field-theme li + li:before { + content: ", "; +} +.dkan-dataset-search .views-field-keyword li { + display: inline-block; + text-align: center; + padding: 4px 16px; + text-decoration: none; + background: #eeeeee; + margin: 8px 8px 8px 0; +} +.facets-widget-checkbox ul { + list-style-type: none; + margin: 0; + padding: 0; +} +.facets-widget-checkbox li { + margin: 8px 0; +} diff --git a/modules/sample_content/sample_content.json b/modules/sample_content/sample_content.json index e3f1402586..6841084f57 100644 --- a/modules/sample_content/sample_content.json +++ b/modules/sample_content/sample_content.json @@ -12,7 +12,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description": "Data on bike lanes in Florida.", + "description": "Data on bike lanes in Florida. Florida's bike lanes provide a safe and designated space for riders to pedal along the coastlines, through bustling urban areas, and amidst tranquil suburban neighborhoods. Whether navigating the bustling streets of Miami, cruising alongside the white sandy beaches of the Gulf Coast, or meandering through the picturesque Everglades, cyclists in Florida enjoy a network of bike lanes that cater to both recreational riders and daily commuters. With a combination of dedicated paths, shared roadways, and expansive trails, Florida's bike lanes contribute to a healthier and more sustainable lifestyle, encouraging residents and visitors alike to embrace the joy of two-wheeled travel under the warm Florida sun.", "distribution": [ { "@type": "dcat:Distribution", @@ -90,7 +90,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Source: FBI Uniform Crime Report, 2014", + "description":"In 2014, crime in U.S. cities continued to be a complex and multifaceted issue, shaped by a variety of social, economic, and demographic factors. While overall crime rates had been on a gradual decline for several years, specific cities experienced fluctuations in crime statistics. Major metropolitan areas often grappled with challenges related to violent crimes. Law enforcement agencies, community organizations, and policymakers are working to collect and analyze data to inform policies addressing the root causes of crime. Source: FBI Uniform Crime Report, 2014", "distribution":[ { "@type":"dcat:Distribution", @@ -102,10 +102,10 @@ } ], "identifier":"d460252e-d42c-474a-9ea9-5287b1d595f6", - "issued":"2016-04-20", + "issued":"2014-12-30", "keyword":["crime","city"], "license":"http://opendatacommons.org/licenses/by/1.0/", - "modified":"2016-04-20", + "modified":"2014-12-30", "publisher":{"@type":"org:Organization","name":"State Economic Council"}, "spatial":"POLYGON ((-129.7265625 24.046463999667, -129.7265625 51.835777520452, -65.390625 51.835777520452, -65.390625 24.046463999667))", "temporal":"2014-01-01T05:00:00+00:00\/2014-01-01T05:00:00+00:00", @@ -120,7 +120,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Sample data.", + "description":"Asthma prevalence remains a significant public health concern worldwide, affecting people of all ages and backgrounds. Globally, the World Health Organization estimates that over 339 million individuals grapple with asthma, a chronic respiratory condition characterized by recurrent episodes of wheezing, breathlessness, chest tightness, and coughing. The prevalence of asthma varies across regions and is influenced by factors such as genetics, environmental exposures, and socio-economic conditions. In some developed nations, urbanization and increased exposure to allergens contribute to higher rates of asthma. Moreover, disparities in healthcare access and quality can impact the prevalence and management of asthma, with vulnerable populations often facing greater challenges. Efforts to address asthma prevalence involve public health initiatives, education, and research aimed at understanding the multifaceted factors influencing the condition, ultimately contributing to better prevention and management strategies.", "distribution":[ { "@type":"dcat:Distribution", @@ -152,7 +152,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Statistics on U.S. smoking rates and tobacco taxation rates for all fifty states.\nSource: Centers for Disease Control and Prevention, 2015", + "description":"Statistics on U.S. smoking rates and tobacco taxation rates for all fifty states.\nSource: Centers for Disease Control and Prevention, 2015.\nIn 2019, the Centers for Disease Control and Prevention (CDC) reported that approximately 14% of adults in the U.S. were current cigarette smokers. While this figure represented a significant decline from previous decades, the prevalence of alternative tobacco products, such as e-cigarettes, among youth garnered attention. The use of vaping products increased, contributing to concerns about nicotine addiction and potential health risks, particularly among adolescents.", "distribution":[ { "@type":"dcat:Distribution", @@ -164,10 +164,10 @@ } ], "identifier":"1f2042ad-c513-4fcf-a933-cae6c6fd35e6", - "issued":"2016-04-10", + "issued":"2018-02-10", "keyword":["demographics","health"], "license":"http://opendatacommons.org/licenses/by/1.0/", - "modified":"2016-04-10", + "modified":"2018-02-10", "publisher":{ "@type":"org:Organization", "name":"National Health Council" @@ -184,7 +184,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Example data for reviewing catalog functionality.", + "description":"The varicella vaccine stands as a crucial tool in preventing the highly contagious viral infection known as chickenpox, caused by the varicella-zoster virus. This vaccine has been an integral part of routine childhood immunization schedules in many countries, demonstrating its effectiveness in reducing the incidence and severity of chickenpox. Administered typically in two doses, the varicella vaccine not only provides direct protection against chickenpox but also contributes to the prevention of more severe complications and the potential reactivation of the virus as shingles later in life. By stimulating the immune system to recognize and combat the varicella-zoster virus, the vaccine plays a pivotal role in public health efforts to control the spread of this contagious disease, promoting a healthier and safer community.", "distribution":[ { "@type":"dcat:Distribution", @@ -204,9 +204,9 @@ } ], "identifier":"e1f2ebcd-ee23-454f-87b5-df0306658418", - "issued":"2016-04-06", + "issued":"2008-01-06", "keyword":["health"], - "modified":"2019-06-06", + "modified":"2008-01-06", "license":"http://opendatacommons.org/licenses/by/1.0/", "publisher":{ "@type":"org:Organization", @@ -224,7 +224,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Polling places in the state of Wisconsin.", + "description":"Wisconsin's polling places serve as the cornerstone of the state's democratic process, providing citizens with the essential means to exercise their right to vote. Dotted across the diverse landscapes of cities, towns, and rural areas, these polling locations are meticulously organized to facilitate fair and accessible elections. On election days, voters converge at designated sites equipped with trained poll workers, electronic voting machines, and paper ballots, ensuring a smooth and secure voting experience. Wisconsin's commitment to democratic values is evident in the accessibility measures implemented, such as early voting options and absentee balloting, providing flexibility to accommodate the diverse schedules of its residents. The state's polling places embody the collective voice of its people, playing a pivotal role in shaping the political landscape and fostering civic engagement.", "distribution":[ { "@type":"dcat:Distribution", @@ -255,7 +255,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"US National Foreclosure Statistics - By State - January 2012", + "description":"US National Foreclosure Statistics - By State - January 2012. In January 2012, the United States experienced a lingering aftermath of the housing market collapse that began in 2008, as reflected in the national foreclosure statistics. During this period, foreclosure rates remained elevated, and a considerable number of properties were repossessed by lenders. The statistics painted a sobering picture of the challenges faced by American households, highlighting the continued ripple effects of the subprime mortgage crisis.", "distribution":[ { "@type":"dcat:Distribution", @@ -267,9 +267,9 @@ } ], "identifier":"74c06c81-9fe0-439c-aba9-cd5c980a6df4", - "issued":"2013-02-10", + "issued":"2012-08-10", "keyword":["economy","politics","transparency"], - "modified":"2013-02-10", + "modified":"2012-08-10", "publisher":{"@type":"org:Organization","name":"State Economic Council"}, "spatial":"POLYGON ((-126.9140625 24.046463999667, -126.9140625 50.625073063414, -65.56640625 50.625073063414, -65.56640625 24.046463999667))", "temporal":"2012-01-01T05:00:00+00:00\/2012-01-01T05:00:00+00:00", @@ -283,7 +283,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Monthly gold prices (USD) in London from Bundesbank. General: 1 ounce of fine gold = 31.1034768g.\u003Cp\u003EMethod of calculation:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003ESince 1 April 1968, calculated from the daily morning fixing;\u003C\/li\u003E\n\u003Cli\u003EFrom January 1950 to 21 March 1954, calculated using the Bank of England\u0027s gold purchasing price (1 ounce of fine = pound 12.40) in connection with the average exchange rate for the pound in New York (up to the end of 1952; source: Federal Reserve Bulletin) and, from January 1953, midpoint exchange rates for the US dollar in London (source: Financial Times (FT)).\u003C\/li\u003E\n\u003Cli\u003EFrom 22 March 1954 to December 1959, calculated using the fixing price for gold bars of approx. 12 1\/2 kg and 995\/1000 fineness and over (so-called standard bars) according to data from Metallgesellschaft AG, Frankfurt am Main, in connection with the average midpoint exchange rates for the US dollar in London (source: FT).\u003C\/li\u003E\n\u003Cli\u003EFrom January 1960 to 14 March 1968, average fixing price for standard bars as specified in the Bank of England\u0027s Quarterly Bulletin.\u003C\/li\u003E\n\u003Cli\u003EOn 15 March 1968, fixing price suspended. Gold market split into an official (reserved for central banks) and a free market as a result of the Washington Communique of 17 March 1968. Gold trading suspended from 18 to 29 March 1968.\u003C\/li\u003E\n\u003Cli\u003ESources for daily prices: April 1968 - March 1974: FT; April 1974 - December 1980: Samuel Montagu \u0026amp; Co. Ltd.; January 1981 - December 2005: FT; January 2006 - present: Reuters.\u003C\/li\u003E\n\u003Cli\u003EComment on 1968-03: Average from 1 to 14 March 1968.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003cense: PDDL (Source indicates no restrictions on data).\u003C\/p\u003E\n", + "description":"Monthly gold prices (USD) in London from Bundesbank. General: 1 ounce of fine gold = 31.1034768g. Method of calculation: Since 1 April 1968, calculated from the daily morning fixing; From January 1950 to 21 March 1954, calculated using the Bank of England's gold purchasing price (1 ounce of fine = pound 12.40) in connection with the average exchange rate for the pound in New York (up to the end of 1952; source: Federal Reserve Bulletin) and, from January 1953, midpoint exchange rates for the US dollar in London (source: Financial Times (FT)). From 22 March 1954 to December 1959, calculated using the fixing price for gold bars of approx. 12 1/2 kg and 995/1000 fineness and over (so-called standard bars) according to data from Metallgesellschaft AG, Frankfurt am Main, in connection with the average midpoint exchange rates for the US dollar in London (source: FT). From January 1960 to 14 March 1968, average fixing price for standard bars as specified in the Bank of England's Quarterly Bulletin. On 15 March 1968, fixing price suspended. Gold market split into an official (reserved for central banks) and a free market as a result of the Washington Communique of 17 March 1968. Gold trading suspended from 18 to 29 March 1968. Sources for daily prices: April 1968 - March 1974: FT; April 1974 - December 1980: Samuel Montagu & Co. Ltd.; January 1981 - December 2005: FT; January 2006 - present: Reuters. Comment on 1968-03: Average from 1 to 14 March 1968.", "distribution":[ { "@type":"dcat:Distribution", @@ -294,10 +294,10 @@ } ], "identifier":"5dc1cfcf-8028-476c-a020-f58ec6dd621c", - "issued":"2013-02-10", + "issued":"2010-06-06", "keyword":["economy","price","time-series"], "license":"http:\/\/opendefinition.org\/licenses\/odc-pddl\/", - "modified":"2019-06-06", + "modified":"2010-06-06", "publisher":{ "@type":"org:Organization", "name":"State Economic Council" diff --git a/modules/sample_content/sample_content.libraries.yml b/modules/sample_content/sample_content.libraries.yml new file mode 100644 index 0000000000..ce957bf9e1 --- /dev/null +++ b/modules/sample_content/sample_content.libraries.yml @@ -0,0 +1,5 @@ +dkan: + version: 1.0 + css: + theme: + css/search.css: {} diff --git a/modules/sample_content/sample_content.module b/modules/sample_content/sample_content.module new file mode 100644 index 0000000000..8c191d7215 --- /dev/null +++ b/modules/sample_content/sample_content.module @@ -0,0 +1,12 @@ +id() == 'dkan_dataset_search') { + $view->element['#attached']['library'][] = 'sample_content/dkan'; + } +} diff --git a/modules/sample_content/sample_content.template.json b/modules/sample_content/sample_content.template.json index 72edfc37b4..ecd5d15ec2 100644 --- a/modules/sample_content/sample_content.template.json +++ b/modules/sample_content/sample_content.template.json @@ -12,7 +12,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description": "Data on bike lanes in Florida.", + "description": "Data on bike lanes in Florida. Florida's bike lanes provide a safe and designated space for riders to pedal along the coastlines, through bustling urban areas, and amidst tranquil suburban neighborhoods. Whether navigating the bustling streets of Miami, cruising alongside the white sandy beaches of the Gulf Coast, or meandering through the picturesque Everglades, cyclists in Florida enjoy a network of bike lanes that cater to both recreational riders and daily commuters. With a combination of dedicated paths, shared roadways, and expansive trails, Florida's bike lanes contribute to a healthier and more sustainable lifestyle, encouraging residents and visitors alike to embrace the joy of two-wheeled travel under the warm Florida sun.", "distribution": [ { "@type": "dcat:Distribution", @@ -90,7 +90,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Source: FBI Uniform Crime Report, 2014", + "description":"In 2014, crime in U.S. cities continued to be a complex and multifaceted issue, shaped by a variety of social, economic, and demographic factors. While overall crime rates had been on a gradual decline for several years, specific cities experienced fluctuations in crime statistics. Major metropolitan areas often grappled with challenges related to violent crimes. Law enforcement agencies, community organizations, and policymakers are working to collect and analyze data to inform policies addressing the root causes of crime. Source: FBI Uniform Crime Report, 2014", "distribution":[ { "@type":"dcat:Distribution", @@ -102,10 +102,10 @@ } ], "identifier":"d460252e-d42c-474a-9ea9-5287b1d595f6", - "issued":"2016-04-20", + "issued":"2014-12-30", "keyword":["crime","city"], "license":"http://opendatacommons.org/licenses/by/1.0/", - "modified":"2016-04-20", + "modified":"2014-12-30", "publisher":{"@type":"org:Organization","name":"State Economic Council"}, "spatial":"POLYGON ((-129.7265625 24.046463999667, -129.7265625 51.835777520452, -65.390625 51.835777520452, -65.390625 24.046463999667))", "temporal":"2014-01-01T05:00:00+00:00\/2014-01-01T05:00:00+00:00", @@ -120,7 +120,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Sample data.", + "description":"Asthma prevalence remains a significant public health concern worldwide, affecting people of all ages and backgrounds. Globally, the World Health Organization estimates that over 339 million individuals grapple with asthma, a chronic respiratory condition characterized by recurrent episodes of wheezing, breathlessness, chest tightness, and coughing. The prevalence of asthma varies across regions and is influenced by factors such as genetics, environmental exposures, and socio-economic conditions. In some developed nations, urbanization and increased exposure to allergens contribute to higher rates of asthma. Moreover, disparities in healthcare access and quality can impact the prevalence and management of asthma, with vulnerable populations often facing greater challenges. Efforts to address asthma prevalence involve public health initiatives, education, and research aimed at understanding the multifaceted factors influencing the condition, ultimately contributing to better prevention and management strategies.", "distribution":[ { "@type":"dcat:Distribution", @@ -152,7 +152,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Statistics on U.S. smoking rates and tobacco taxation rates for all fifty states.\nSource: Centers for Disease Control and Prevention, 2015", + "description":"Statistics on U.S. smoking rates and tobacco taxation rates for all fifty states.\nSource: Centers for Disease Control and Prevention, 2015.\nIn 2019, the Centers for Disease Control and Prevention (CDC) reported that approximately 14% of adults in the U.S. were current cigarette smokers. While this figure represented a significant decline from previous decades, the prevalence of alternative tobacco products, such as e-cigarettes, among youth garnered attention. The use of vaping products increased, contributing to concerns about nicotine addiction and potential health risks, particularly among adolescents.", "distribution":[ { "@type":"dcat:Distribution", @@ -164,10 +164,10 @@ } ], "identifier":"1f2042ad-c513-4fcf-a933-cae6c6fd35e6", - "issued":"2016-04-10", + "issued":"2018-02-10", "keyword":["demographics","health"], "license":"http://opendatacommons.org/licenses/by/1.0/", - "modified":"2016-04-10", + "modified":"2018-02-10", "publisher":{ "@type":"org:Organization", "name":"National Health Council" @@ -184,7 +184,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Example data for reviewing catalog functionality.", + "description":"The varicella vaccine stands as a crucial tool in preventing the highly contagious viral infection known as chickenpox, caused by the varicella-zoster virus. This vaccine has been an integral part of routine childhood immunization schedules in many countries, demonstrating its effectiveness in reducing the incidence and severity of chickenpox. Administered typically in two doses, the varicella vaccine not only provides direct protection against chickenpox but also contributes to the prevention of more severe complications and the potential reactivation of the virus as shingles later in life. By stimulating the immune system to recognize and combat the varicella-zoster virus, the vaccine plays a pivotal role in public health efforts to control the spread of this contagious disease, promoting a healthier and safer community.", "distribution":[ { "@type":"dcat:Distribution", @@ -204,9 +204,9 @@ } ], "identifier":"e1f2ebcd-ee23-454f-87b5-df0306658418", - "issued":"2016-04-06", + "issued":"2008-01-06", "keyword":["health"], - "modified":"2019-06-06", + "modified":"2008-01-06", "license":"http://opendatacommons.org/licenses/by/1.0/", "publisher":{ "@type":"org:Organization", @@ -224,7 +224,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Polling places in the state of Wisconsin.", + "description":"Wisconsin's polling places serve as the cornerstone of the state's democratic process, providing citizens with the essential means to exercise their right to vote. Dotted across the diverse landscapes of cities, towns, and rural areas, these polling locations are meticulously organized to facilitate fair and accessible elections. On election days, voters converge at designated sites equipped with trained poll workers, electronic voting machines, and paper ballots, ensuring a smooth and secure voting experience. Wisconsin's commitment to democratic values is evident in the accessibility measures implemented, such as early voting options and absentee balloting, providing flexibility to accommodate the diverse schedules of its residents. The state's polling places embody the collective voice of its people, playing a pivotal role in shaping the political landscape and fostering civic engagement.", "distribution":[ { "@type":"dcat:Distribution", @@ -255,7 +255,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"US National Foreclosure Statistics - By State - January 2012", + "description":"US National Foreclosure Statistics - By State - January 2012. In January 2012, the United States experienced a lingering aftermath of the housing market collapse that began in 2008, as reflected in the national foreclosure statistics. During this period, foreclosure rates remained elevated, and a considerable number of properties were repossessed by lenders. The statistics painted a sobering picture of the challenges faced by American households, highlighting the continued ripple effects of the subprime mortgage crisis.", "distribution":[ { "@type":"dcat:Distribution", @@ -267,9 +267,9 @@ } ], "identifier":"74c06c81-9fe0-439c-aba9-cd5c980a6df4", - "issued":"2013-02-10", + "issued":"2012-08-10", "keyword":["economy","politics","transparency"], - "modified":"2013-02-10", + "modified":"2012-08-10", "publisher":{"@type":"org:Organization","name":"State Economic Council"}, "spatial":"POLYGON ((-126.9140625 24.046463999667, -126.9140625 50.625073063414, -65.56640625 50.625073063414, -65.56640625 24.046463999667))", "temporal":"2012-01-01T05:00:00+00:00\/2012-01-01T05:00:00+00:00", @@ -283,7 +283,7 @@ "fn": "Jane Doe", "hasEmail": "mailto:data.admin@example.com" }, - "description":"Monthly gold prices (USD) in London from Bundesbank. General: 1 ounce of fine gold = 31.1034768g.\u003Cp\u003EMethod of calculation:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003ESince 1 April 1968, calculated from the daily morning fixing;\u003C\/li\u003E\n\u003Cli\u003EFrom January 1950 to 21 March 1954, calculated using the Bank of England\u0027s gold purchasing price (1 ounce of fine = pound 12.40) in connection with the average exchange rate for the pound in New York (up to the end of 1952; source: Federal Reserve Bulletin) and, from January 1953, midpoint exchange rates for the US dollar in London (source: Financial Times (FT)).\u003C\/li\u003E\n\u003Cli\u003EFrom 22 March 1954 to December 1959, calculated using the fixing price for gold bars of approx. 12 1\/2 kg and 995\/1000 fineness and over (so-called standard bars) according to data from Metallgesellschaft AG, Frankfurt am Main, in connection with the average midpoint exchange rates for the US dollar in London (source: FT).\u003C\/li\u003E\n\u003Cli\u003EFrom January 1960 to 14 March 1968, average fixing price for standard bars as specified in the Bank of England\u0027s Quarterly Bulletin.\u003C\/li\u003E\n\u003Cli\u003EOn 15 March 1968, fixing price suspended. Gold market split into an official (reserved for central banks) and a free market as a result of the Washington Communique of 17 March 1968. Gold trading suspended from 18 to 29 March 1968.\u003C\/li\u003E\n\u003Cli\u003ESources for daily prices: April 1968 - March 1974: FT; April 1974 - December 1980: Samuel Montagu \u0026amp; Co. Ltd.; January 1981 - December 2005: FT; January 2006 - present: Reuters.\u003C\/li\u003E\n\u003Cli\u003EComment on 1968-03: Average from 1 to 14 March 1968.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003cense: PDDL (Source indicates no restrictions on data).\u003C\/p\u003E\n", + "description":"Monthly gold prices (USD) in London from Bundesbank. General: 1 ounce of fine gold = 31.1034768g. Method of calculation: Since 1 April 1968, calculated from the daily morning fixing; From January 1950 to 21 March 1954, calculated using the Bank of England's gold purchasing price (1 ounce of fine = pound 12.40) in connection with the average exchange rate for the pound in New York (up to the end of 1952; source: Federal Reserve Bulletin) and, from January 1953, midpoint exchange rates for the US dollar in London (source: Financial Times (FT)). From 22 March 1954 to December 1959, calculated using the fixing price for gold bars of approx. 12 1/2 kg and 995/1000 fineness and over (so-called standard bars) according to data from Metallgesellschaft AG, Frankfurt am Main, in connection with the average midpoint exchange rates for the US dollar in London (source: FT). From January 1960 to 14 March 1968, average fixing price for standard bars as specified in the Bank of England's Quarterly Bulletin. On 15 March 1968, fixing price suspended. Gold market split into an official (reserved for central banks) and a free market as a result of the Washington Communique of 17 March 1968. Gold trading suspended from 18 to 29 March 1968. Sources for daily prices: April 1968 - March 1974: FT; April 1974 - December 1980: Samuel Montagu & Co. Ltd.; January 1981 - December 2005: FT; January 2006 - present: Reuters. Comment on 1968-03: Average from 1 to 14 March 1968.", "distribution":[ { "@type":"dcat:Distribution", @@ -294,10 +294,10 @@ } ], "identifier":"5dc1cfcf-8028-476c-a020-f58ec6dd621c", - "issued":"2013-02-10", + "issued":"2010-06-06", "keyword":["economy","price","time-series"], "license":"http:\/\/opendefinition.org\/licenses\/odc-pddl\/", - "modified":"2019-06-06", + "modified":"2010-06-06", "publisher":{ "@type":"org:Organization", "name":"State Economic Council"