From ed1f441ef345d1033f31252d54f18b6eca80566a Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20Abi=C3=A1n?= Date: Mon, 28 May 2018 12:29:29 +0200 Subject: [PATCH 1/1] Concept URIs for Wikidata entities Wikidata entities should be linked using concept URIs, which are permanent. This is the right way of linking web resources according to the Linked Data principles. Closes #1884 --- app/helpers/browse_helper.rb | 4 ++-- test/helpers/browse_helper_test.rb | 28 ++++++++++++++-------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/helpers/browse_helper.rb b/app/helpers/browse_helper.rb index b99ba9338..eebe1af8f 100644 --- a/app/helpers/browse_helper.rb +++ b/app/helpers/browse_helper.rb @@ -163,7 +163,7 @@ module BrowseHelper # The simple wikidata-tag (this is limited to only one value) if key == "wikidata" && value =~ /^[Qq][1-9][0-9]*$/ return [{ - :url => "//www.wikidata.org/wiki/#{value}?uselang=#{I18n.locale}", + :url => "//www.wikidata.org/entity/#{value}?uselang=#{I18n.locale}", :title => value }] # Key has to be one of the accepted wikidata-tags @@ -172,7 +172,7 @@ module BrowseHelper value =~ /^[Qq][1-9][0-9]*(\s*;\s*[Qq][1-9][0-9]*)*$/ # Splitting at every semicolon to get a separate hash for each wikidata-ID return value.split(";").map do |id| - { :title => id, :url => "//www.wikidata.org/wiki/#{id.strip}?uselang=#{I18n.locale}" } + { :title => id, :url => "//www.wikidata.org/entity/#{id.strip}?uselang=#{I18n.locale}" } end end nil diff --git a/test/helpers/browse_helper_test.rb b/test/helpers/browse_helper_test.rb index bc362fc3f..8890a0de6 100644 --- a/test/helpers/browse_helper_test.rb +++ b/test/helpers/browse_helper_test.rb @@ -127,13 +127,13 @@ class BrowseHelperTest < ActionView::TestCase assert_dom_equal "Test", html html = format_value("wikidata", "Q42") - assert_dom_equal "Q42", html + assert_dom_equal "Q42", html html = format_value("operator:wikidata", "Q12;Q98") - assert_dom_equal "Q12;Q98", html + assert_dom_equal "Q12;Q98", html html = format_value("name:etymology:wikidata", "Q123") - assert_dom_equal "Q123", html + assert_dom_equal "Q123", html end def test_icon_tags @@ -198,7 +198,7 @@ class BrowseHelperTest < ActionView::TestCase assert_nil links # No URLs allowed - links = wikidata_links("wikidata", "http://www.wikidata.org/wiki/Q1") + links = wikidata_links("wikidata", "http://www.wikidata.org/entity/Q1") assert_nil links # No language-prefixes (as wikidata is multilanguage) @@ -216,14 +216,14 @@ class BrowseHelperTest < ActionView::TestCase # A valid value links = wikidata_links("wikidata", "Q42") assert_equal 1, links.length - assert_equal "//www.wikidata.org/wiki/Q42?uselang=en", links[0][:url] + assert_equal "//www.wikidata.org/entity/Q42?uselang=en", links[0][:url] assert_equal "Q42", links[0][:title] # the language of the wikidata-page should match the current locale I18n.locale = "zh-CN" links = wikidata_links("wikidata", "Q1234") assert_equal 1, links.length - assert_equal "//www.wikidata.org/wiki/Q1234?uselang=zh-CN", links[0][:url] + assert_equal "//www.wikidata.org/entity/Q1234?uselang=zh-CN", links[0][:url] assert_equal "Q1234", links[0][:title] I18n.locale = "en" @@ -235,31 +235,31 @@ class BrowseHelperTest < ActionView::TestCase # This for example is an allowed key links = wikidata_links("operator:wikidata", "Q24") - assert_equal "//www.wikidata.org/wiki/Q24?uselang=en", links[0][:url] + assert_equal "//www.wikidata.org/entity/Q24?uselang=en", links[0][:url] assert_equal "Q24", links[0][:title] # Another allowed key, this time with multiple values and I18n I18n.locale = "dsb" links = wikidata_links("brand:wikidata", "Q936;Q2013;Q1568346") assert_equal 3, links.length - assert_equal "//www.wikidata.org/wiki/Q936?uselang=dsb", links[0][:url] + assert_equal "//www.wikidata.org/entity/Q936?uselang=dsb", links[0][:url] assert_equal "Q936", links[0][:title] - assert_equal "//www.wikidata.org/wiki/Q2013?uselang=dsb", links[1][:url] + assert_equal "//www.wikidata.org/entity/Q2013?uselang=dsb", links[1][:url] assert_equal "Q2013", links[1][:title] - assert_equal "//www.wikidata.org/wiki/Q1568346?uselang=dsb", links[2][:url] + assert_equal "//www.wikidata.org/entity/Q1568346?uselang=dsb", links[2][:url] assert_equal "Q1568346", links[2][:title] I18n.locale = "en" # and now with whitespaces... links = wikidata_links("subject:wikidata", "Q6542248 ;\tQ180\n ;\rQ364\t\n\r ;\nQ4006") assert_equal 4, links.length - assert_equal "//www.wikidata.org/wiki/Q6542248?uselang=en", links[0][:url] + assert_equal "//www.wikidata.org/entity/Q6542248?uselang=en", links[0][:url] assert_equal "Q6542248 ", links[0][:title] - assert_equal "//www.wikidata.org/wiki/Q180?uselang=en", links[1][:url] + assert_equal "//www.wikidata.org/entity/Q180?uselang=en", links[1][:url] assert_equal "\tQ180\n ", links[1][:title] - assert_equal "//www.wikidata.org/wiki/Q364?uselang=en", links[2][:url] + assert_equal "//www.wikidata.org/entity/Q364?uselang=en", links[2][:url] assert_equal "\rQ364\t\n\r ", links[2][:title] - assert_equal "//www.wikidata.org/wiki/Q4006?uselang=en", links[3][:url] + assert_equal "//www.wikidata.org/entity/Q4006?uselang=en", links[3][:url] assert_equal "\nQ4006", links[3][:title] end -- 2.43.2