qa 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/controllers/qa/linked_data_terms_controller.rb +30 -9
  4. data/app/controllers/qa/terms_controller.rb +3 -2
  5. data/app/models/qa/linked_data/config/context_property_map.rb +6 -25
  6. data/app/services/qa/iri_template_service.rb +32 -24
  7. data/app/services/qa/linked_data/authority_service.rb +8 -0
  8. data/app/services/qa/linked_data/authority_url_service.rb +27 -8
  9. data/app/services/qa/linked_data/deep_sort_service.rb +3 -2
  10. data/app/services/qa/linked_data/graph_service.rb +13 -0
  11. data/app/services/qa/linked_data/language_service.rb +12 -0
  12. data/app/services/qa/linked_data/language_sort_service.rb +7 -2
  13. data/app/services/qa/linked_data/ldpath_service.rb +40 -0
  14. data/app/services/qa/linked_data/mapper/graph_ldpath_mapper_service.rb +49 -0
  15. data/app/services/qa/linked_data/mapper/graph_mapper_service.rb +3 -11
  16. data/app/services/qa/linked_data/mapper/graph_predicate_mapper_service.rb +40 -0
  17. data/app/services/qa/linked_data/mapper/search_results_mapper_service.rb +58 -11
  18. data/app/services/qa/linked_data/mapper/term_results_mapper_service.rb +80 -0
  19. data/config/authorities/linked_data/loc.json +13 -7
  20. data/config/authorities/linked_data/oclc_fast.json +13 -8
  21. data/lib/generators/qa/discogs/USAGE +10 -0
  22. data/lib/generators/qa/discogs/discogs_generator.rb +12 -0
  23. data/lib/generators/qa/discogs/templates/config/discogs-formats.yml +346 -0
  24. data/lib/generators/qa/discogs/templates/config/discogs-genres.yml +627 -0
  25. data/lib/generators/qa/install/templates/config/initializers/qa.rb +4 -0
  26. data/lib/qa.rb +6 -0
  27. data/lib/qa/authorities.rb +2 -0
  28. data/lib/qa/authorities/discogs.rb +28 -0
  29. data/lib/qa/authorities/discogs/discogs_instance_builder.rb +145 -0
  30. data/lib/qa/authorities/discogs/discogs_translation.rb +126 -0
  31. data/lib/qa/authorities/discogs/discogs_utils.rb +89 -0
  32. data/lib/qa/authorities/discogs/discogs_works_builder.rb +153 -0
  33. data/lib/qa/authorities/discogs/generic_authority.rb +151 -0
  34. data/lib/qa/authorities/discogs_subauthority.rb +9 -0
  35. data/lib/qa/authorities/linked_data/config.rb +7 -3
  36. data/lib/qa/authorities/linked_data/config/search_config.rb +99 -11
  37. data/lib/qa/authorities/linked_data/config/term_config.rb +112 -8
  38. data/lib/qa/authorities/linked_data/find_term.rb +154 -84
  39. data/lib/qa/authorities/linked_data/search_query.rb +76 -13
  40. data/lib/qa/configuration.rb +8 -0
  41. data/lib/qa/version.rb +1 -1
  42. data/spec/controllers/linked_data_terms_controller_spec.rb +151 -30
  43. data/spec/controllers/terms_controller_spec.rb +4 -0
  44. data/spec/features/linked_data/language_spec.rb +298 -0
  45. data/spec/fixtures/authorities/linked_data/lod_full_config.json +21 -5
  46. data/spec/fixtures/authorities/linked_data/lod_lang_defaults.json +4 -4
  47. data/spec/fixtures/authorities/linked_data/lod_lang_multi_defaults.json +4 -4
  48. data/spec/fixtures/authorities/linked_data/lod_lang_no_defaults.json +4 -5
  49. data/spec/fixtures/authorities/linked_data/lod_lang_param.json +4 -4
  50. data/spec/fixtures/authorities/linked_data/lod_term_uri_param_config.json +1 -1
  51. data/spec/fixtures/discogs-find-response-json.json +1 -0
  52. data/spec/fixtures/discogs-find-response-jsonld-master.json +1 -0
  53. data/spec/fixtures/discogs-find-response-jsonld-release.json +1 -0
  54. data/spec/fixtures/discogs-id-matches-master.json +1 -0
  55. data/spec/fixtures/discogs-id-matches-release.json +1 -0
  56. data/spec/fixtures/discogs-id-not-found-master.json +1 -0
  57. data/spec/fixtures/discogs-id-not-found-release.json +1 -0
  58. data/spec/fixtures/discogs-search-response-no-auth.json +1 -0
  59. data/spec/fixtures/discogs-search-response-no-subauth.json +1 -0
  60. data/spec/fixtures/discogs-search-response-subauth.json +1 -0
  61. data/spec/fixtures/lod_lang_search_enesfrde.rdf.xml +60 -0
  62. data/spec/fixtures/lod_lang_search_sv.rdf.xml +42 -0
  63. data/spec/fixtures/lod_loc_term_found.rdf.xml +5 -0
  64. data/spec/lib/authorities/discogs/generic_authority_spec.rb +235 -0
  65. data/spec/lib/authorities/discogs_spec.rb +17 -0
  66. data/spec/lib/authorities/linked_data/config_spec.rb +68 -5
  67. data/spec/lib/authorities/linked_data/find_term_spec.rb +298 -3
  68. data/spec/lib/authorities/linked_data/generic_authority_spec.rb +46 -485
  69. data/spec/lib/authorities/linked_data/search_config_spec.rb +154 -3
  70. data/spec/lib/authorities/linked_data/search_query_spec.rb +240 -3
  71. data/spec/lib/authorities/linked_data/term_config_spec.rb +193 -5
  72. data/spec/lib/configuration_spec.rb +18 -0
  73. data/spec/models/linked_data/config/context_property_map_spec.rb +3 -31
  74. data/spec/services/iri_template_service_spec.rb +54 -12
  75. data/spec/{lib/authorities → services}/linked_data/authority_service_spec.rb +47 -0
  76. data/spec/services/linked_data/language_service_spec.rb +52 -11
  77. data/spec/services/linked_data/ldpath_service_spec.rb +61 -0
  78. data/spec/services/linked_data/mapper/graph_ldpath_mapper_service_spec.rb +118 -0
  79. data/spec/services/linked_data/mapper/graph_predicate_mapper_service_spec.rb +110 -0
  80. data/spec/services/linked_data/mapper/term_results_mapper_service_spec.rb +94 -0
  81. data/spec/spec_helper.rb +1 -1
  82. data/spec/support/matchers/include_hash.rb +5 -0
  83. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -0
  84. metadata +73 -5
  85. data/lib/qa/authorities/linked_data/rdf_helper.rb +0 -49
@@ -0,0 +1,49 @@
1
+ # Provide service for mapping predicates to object values.
2
+ module Qa
3
+ module LinkedData
4
+ module Mapper
5
+ class GraphLdpathMapperService
6
+ class_attribute :ldpath_service
7
+ self.ldpath_service = Qa::LinkedData::LdpathService
8
+
9
+ # Extract values for ldpath specified in the ldpath_map from the graph and return as a value map for a single subject URI.
10
+ # @param graph [RDF::Graph] the graph from which to extract result values
11
+ # @param prefixes [Hash<Symbol><String>] URL map of prefixes to use with ldpaths
12
+ # @example prefixes
13
+ # {
14
+ # locid: 'http://id.loc.gov/vocabulary/identifiers/',
15
+ # skos: 'http://www.w3.org/2004/02/skos/core#',
16
+ # vivo: 'http://vivoweb.org/ontology/core#'
17
+ # }
18
+ # @param ldpath [Hash<Symbol><String||Symbol>] value either maps to a ldpath in the graph or is :subject_uri indicating to use the subject uri as the value
19
+ # @example ldpath map
20
+ # {
21
+ # uri: :subject_uri,
22
+ # id: 'locid:lccn :: xsd::string',
23
+ # label: 'skos:prefLabel :: xsd::string',
24
+ # altlabel: 'skos:altLabel :: xsd::string',
25
+ # sort: 'vivo:rank :: xsd::integer'
26
+ # }
27
+ # @param subject_uri [RDF::URI] the subject within the graph for which the values are being extracted
28
+ # @return [<Hash<Symbol><Array<Object>>] mapped result values with hash of map key = array of object values identified by the ldpath map.
29
+ # @example value map for a single result
30
+ # {:uri=>[#<RDF::URI:0x3fcff54a829c URI:http://id.loc.gov/authorities/names/n2010043281>],
31
+ # :id=>[#<RDF::Literal:0x3fcff4a367b4("n2010043281")>],
32
+ # :label=>[#<RDF::Literal:0x3fcff54a9a98("Valli, Sabrina"@en)>],
33
+ # :altlabel=>[],
34
+ # :sort=>[#<RDF::Literal:0x3fcff54b4c18("2")>]}
35
+ def self.map_values(graph:, ldpath_map:, subject_uri:, prefixes: {})
36
+ value_map = {}
37
+ ldpath_map.each do |key, ldpath|
38
+ next value_map[key] = [subject_uri] if ldpath == :subject_uri
39
+ ldpath_program = ldpath_service.ldpath_program(ldpath: ldpath, prefixes: prefixes)
40
+ values = ldpath_service.ldpath_evaluate(program: ldpath_program, graph: graph, subject_uri: subject_uri)
41
+ value_map[key] = values
42
+ end
43
+ value_map = yield value_map if block_given?
44
+ value_map
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -3,9 +3,6 @@ module Qa
3
3
  module LinkedData
4
4
  module Mapper
5
5
  class GraphMapperService
6
- class_attribute :graph_service
7
- self.graph_service = Qa::LinkedData::GraphService
8
-
9
6
  # Extract predicates specified in the predicate_map from the graph and return as a value map for a single subject URI.
10
7
  # @param graph [RDF::Graph] the graph from which to extract result values
11
8
  # @param predicate_map [Hash<Symbol><String||Symbol>] value either maps to a predicate in the graph or is :subject_uri indicating to use the subject uri as the value
@@ -25,14 +22,9 @@ module Qa
25
22
  # :label=>[#<RDF::Literal:0x3fcff54a9a98("Valli, Sabrina"@en)>],
26
23
  # :altlabel=>[],
27
24
  # :sort=>[#<RDF::Literal:0x3fcff54b4c18("2")>]}
28
- def self.map_values(graph:, predicate_map:, subject_uri:)
29
- value_map = {}
30
- predicate_map.each do |key, predicate|
31
- values = predicate == :subject_uri ? [subject_uri] : graph_service.object_values(graph: graph, subject: subject_uri, predicate: predicate)
32
- value_map[key] = values
33
- end
34
- value_map = yield value_map if block_given?
35
- value_map
25
+ def self.map_values(graph:, predicate_map:, subject_uri:, &block)
26
+ Qa.deprecation_warning(msg: "`Qa::LinkedData::Mapper::GraphMapperService` is deprecated; update to `Qa::LinkedData::Mapper::GraphPredicateMapperService`.")
27
+ Qa::LinkedData::Mapper::GraphPredicateMapperService.map_values(graph: graph, predicate_map: predicate_map, subject_uri: subject_uri, &block)
36
28
  end
37
29
  end
38
30
  end
@@ -0,0 +1,40 @@
1
+ # Provide service for mapping predicates to object values.
2
+ module Qa
3
+ module LinkedData
4
+ module Mapper
5
+ class GraphPredicateMapperService
6
+ class_attribute :graph_service
7
+ self.graph_service = Qa::LinkedData::GraphService
8
+
9
+ # Extract predicates specified in the predicate_map from the graph and return as a value map for a single subject URI.
10
+ # @param graph [RDF::Graph] the graph from which to extract result values
11
+ # @param predicate_map [Hash<Symbol><String||Symbol>] value either maps to a predicate in the graph or is :subject_uri indicating to use the subject uri as the value
12
+ # @example predicate_map
13
+ # {
14
+ # uri: :subject_uri,
15
+ # id: [#<RDF::URI URI:http://id.loc.gov/vocabulary/identifiers/lccn>],
16
+ # label: [#<RDF::URI URI:http://www.w3.org/2004/02/skos/core#prefLabel>],
17
+ # altlabel: [#<RDF::URI URI:http://www.w3.org/2004/02/skos/core#altLabel>],
18
+ # sort: [#<RDF::URI URI:http://vivoweb.org/ontology/core#rank>]'
19
+ # }
20
+ # @param subject_uri [RDF::URI] the subject within the graph for which the values are being extracted
21
+ # @return [<Hash<Symbol><Array<Object>>] mapped result values with hash of map key = array of object values for predicates identified in predicate_map.
22
+ # @example value map for a single result
23
+ # {:uri=>[#<RDF::URI:0x3fcff54a829c URI:http://id.loc.gov/authorities/names/n2010043281>],
24
+ # :id=>[#<RDF::Literal:0x3fcff4a367b4("n2010043281")>],
25
+ # :label=>[#<RDF::Literal:0x3fcff54a9a98("Valli, Sabrina"@en)>],
26
+ # :altlabel=>[],
27
+ # :sort=>[#<RDF::Literal:0x3fcff54b4c18("2")>]}
28
+ def self.map_values(graph:, predicate_map:, subject_uri:)
29
+ value_map = {}
30
+ predicate_map.each do |key, predicate|
31
+ values = predicate == :subject_uri ? [subject_uri] : graph_service.object_values(graph: graph, subject: subject_uri, predicate: predicate)
32
+ value_map[key] = values
33
+ end
34
+ value_map = yield value_map if block_given?
35
+ value_map
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -3,8 +3,9 @@ module Qa
3
3
  module LinkedData
4
4
  module Mapper
5
5
  class SearchResultsMapperService
6
- class_attribute :graph_mapper_service, :deep_sort_service, :context_mapper_service
7
- self.graph_mapper_service = Qa::LinkedData::Mapper::GraphMapperService
6
+ class_attribute :graph_ldpath_mapper_service, :graph_predicate_mapper_service, :deep_sort_service, :context_mapper_service
7
+ self.graph_ldpath_mapper_service = Qa::LinkedData::Mapper::GraphLdpathMapperService
8
+ self.graph_predicate_mapper_service = Qa::LinkedData::Mapper::GraphPredicateMapperService
8
9
  self.deep_sort_service = Qa::LinkedData::DeepSortService
9
10
  self.context_mapper_service = Qa::LinkedData::Mapper::ContextMapperService
10
11
 
@@ -12,6 +13,22 @@ module Qa
12
13
  # Extract predicates specified in the predicate_map from the graph and return as an array of value maps for each search result subject URI.
13
14
  # If a sort key is present, a subject will only be included in the results if it has a statement with the sort predicate.
14
15
  # @param graph [RDF::Graph] the graph from which to extract result values
16
+ # @param prefixes [Hash<Symbol><String>] URL map of prefixes to use with ldpaths
17
+ # @example prefixes
18
+ # {
19
+ # locid: 'http://id.loc.gov/vocabulary/identifiers/',
20
+ # skos: 'http://www.w3.org/2004/02/skos/core#',
21
+ # vivo: 'http://vivoweb.org/ontology/core#'
22
+ # }
23
+ # @param ldpath [Hash<Symbol><String||Symbol>] value either maps to a ldpath in the graph or is :subject_uri indicating to use the subject uri as the value
24
+ # @example ldpath map
25
+ # {
26
+ # uri: :subject_uri,
27
+ # id: 'locid:lccn :: xsd::string',
28
+ # label: 'skos:prefLabel :: xsd::string',
29
+ # altlabel: 'skos:altLabel :: xsd::string',
30
+ # sort: 'vivo:rank :: xsd::integer'
31
+ # }
15
32
  # @param predicate_map [Hash<Symbol><String||Symbol>] value either maps to a predicate in the graph or is :subject_uri indicating to use the subject uri as the value
16
33
  # @example predicate map
17
34
  # {
@@ -22,24 +39,38 @@ module Qa
22
39
  # sort: 'http://vivoweb.org/ontology/core#rank'
23
40
  # }
24
41
  # @param sort_key [Symbol] the key in the predicate map for the value on which to sort
42
+ # @param preferred_language [Array<Symbol>] sort multiple literals for a value with preferred language first
25
43
  # @param context_map [Qa::LinkedData::Config::ContextMap] map of additional context to include in the results
26
44
  # @return [Array<Hash<Symbol><Array<Object>>>] mapped result values with each result as an element in the array
27
45
  # with hash of map key = array of object values for predicates identified in map parameter.
28
46
  # @example value map for a single result
29
47
  # [
30
- # {:uri=>[#<RDF::URI:0x3fcff54a829c URI:http://id.loc.gov/authorities/names/n2010043281>],
31
- # :id=>[#<RDF::Literal:0x3fcff4a367b4("n 2010043281")>],
32
- # :label=>[#<RDF::Literal:0x3fcff54a9a98("Valli, Sabrina"@en)>],
33
- # :altlabel=>[],
34
- # :sort=>[#<RDF::Literal:0x3fcff54b4c18("2")>]}
48
+ # { "uri":"http://id.loc.gov/authorities/genreForms/gf2011026181","id":"gf2011026181","label":"Stop-motion animation films",
49
+ # "context":[
50
+ # { "property":"Authoritative Label","values":["Stop-motion animation films"],"selectable":true,"drillable":false },
51
+ # { "property":"Variant Label","values":["Object animation films, Frame-by-frame animation films"],"selectable":false,"drillable":false },
52
+ # { "group":"Hierarchy","property":"Narrower: ",
53
+ # "values":[
54
+ # { "uri":"http://id.loc.gov/authorities/genreForms/gf2011026140","id":"gf2011026140","label":"Clay animation films"}
55
+ # ],
56
+ # "selectable":true,"drillable":true },
57
+ # { "group":"Hierarchy","property":"Broader: ",
58
+ # "values":[
59
+ # { "uri":"http://id.loc.gov/authorities/genreForms/gf2011026049","id":"gf2011026049","label":"Animated films"}
60
+ # ],
61
+ # "selectable":true,"drillable":true }
62
+ # ]
63
+ # }
35
64
  # ]
36
- def map_values(graph:, predicate_map:, sort_key:, preferred_language: nil, context_map: nil)
65
+ def map_values(graph:, prefixes: {}, ldpath_map: nil, predicate_map: nil, sort_key:, preferred_language: nil, context_map: nil) # rubocop:disable Metrics/ParameterLists
37
66
  search_matches = []
38
67
  graph.subjects.each do |subject|
39
68
  next if subject.anonymous? # skip blank nodes
40
- values = graph_mapper_service.map_values(graph: graph, predicate_map: predicate_map, subject_uri: subject) do |value_map|
41
- map_context(graph, sort_key, context_map, value_map, subject)
42
- end
69
+ values = if ldpath_map.present?
70
+ map_values_with_ldpath_map(graph: graph, ldpath_map: ldpath_map, prefixes: prefixes, subject_uri: subject, sort_key: sort_key, context_map: context_map)
71
+ else
72
+ map_values_with_predicate_map(graph: graph, predicate_map: predicate_map, subject_uri: subject, sort_key: sort_key, context_map: context_map)
73
+ end
43
74
  search_matches << values if result_subject? values, sort_key
44
75
  end
45
76
  search_matches = deep_sort_service.new(search_matches, sort_key, preferred_language).sort
@@ -63,6 +94,22 @@ module Qa
63
94
  value_map[:context] = context
64
95
  value_map
65
96
  end
97
+
98
+ def map_values_with_ldpath_map(graph:, ldpath_map:, prefixes:, subject_uri:, sort_key:, context_map:) # rubocop:disable Metrics/ParameterLists
99
+ graph_ldpath_mapper_service.map_values(graph: graph, ldpath_map: ldpath_map, prefixes: prefixes, subject_uri: subject_uri) do |value_map|
100
+ map_context(graph, sort_key, context_map, value_map, subject_uri)
101
+ end
102
+ end
103
+
104
+ def map_values_with_predicate_map(graph:, predicate_map:, subject_uri:, sort_key:, context_map:)
105
+ Qa.deprecation_warning(
106
+ in_msg: 'Qa::LinkedData::Mapper::SearchResultsMapperService',
107
+ msg: 'predicate_map is deprecated; update to use ldpath_map'
108
+ )
109
+ graph_predicate_mapper_service.map_values(graph: graph, predicate_map: predicate_map, subject_uri: subject_uri) do |value_map|
110
+ map_context(graph, sort_key, context_map, value_map, subject_uri)
111
+ end
112
+ end
66
113
  end
67
114
  end
68
115
  end
@@ -0,0 +1,80 @@
1
+ # Provide service for mapping graph to json limited to configured fields and context.
2
+ module Qa
3
+ module LinkedData
4
+ module Mapper
5
+ class TermResultsMapperService
6
+ class_attribute :graph_ldpath_mapper_service, :graph_predicate_mapper_service
7
+ self.graph_ldpath_mapper_service = Qa::LinkedData::Mapper::GraphLdpathMapperService
8
+ self.graph_predicate_mapper_service = Qa::LinkedData::Mapper::GraphPredicateMapperService
9
+
10
+ class << self
11
+ # Extract predicates specified in the predicate_map from the graph and return as an array of value maps for each search result subject URI.
12
+ # If a sort key is present, a subject will only be included in the results if it has a statement with the sort predicate.
13
+ # @param graph [RDF::Graph] the graph from which to extract result values
14
+ # @param subject_uri [RDF::URI] the uri of the term represented by the graph
15
+ # @param prefixes [Hash<Symbol><String>] URL map of prefixes to use with ldpaths
16
+ # @example prefixes
17
+ # {
18
+ # locid: 'http://id.loc.gov/vocabulary/identifiers/',
19
+ # skos: 'http://www.w3.org/2004/02/skos/core#',
20
+ # }
21
+ # @param ldpath [Hash<Symbol><String||Symbol>] value either maps to a ldpath in the graph or is :subject_uri indicating to use the subject uri as the value
22
+ # @example ldpath map
23
+ # {
24
+ # uri: :subject_uri,
25
+ # id: 'locid:lccn :: xsd::string',
26
+ # label: 'skos:prefLabel :: xsd::string',
27
+ # altlabel: 'skos:altLabel :: xsd::string',
28
+ # broader: 'skos:broader :: xsd::anyURI',
29
+ # narrower: 'skos:narrower :: xsd::anyURI',
30
+ # sameas: 'skos:exactMatch :: xsd::anyURI'
31
+ # }
32
+ # @param predicate_map [Hash<Symbol><String||Symbol>] value either maps to a predicate in the graph or is :subject_uri indicating to use the subject uri as the value
33
+ # @example predicate map
34
+ # {
35
+ # uri: :subject_uri,
36
+ # id_predicate: 'http://id.loc.gov/vocabulary/identifiers/lccn',
37
+ # label_predicate: 'http://www.w3.org/2004/02/skos/core#prefLabel',
38
+ # altlabel_predicate: 'http://www.w3.org/2004/02/skos/core#altLabel',
39
+ # broader_predicate: 'http://www.w3.org/2004/02/skos/core#broader',
40
+ # narrower_predicate: 'http://www.w3.org/2004/02/skos/core#narrower',
41
+ # sameas_predicate: 'http://www.w3.org/2004/02/skos/core#exactMatch'
42
+ # }
43
+ # @return [Hash<Symbol><Array<Object>>] mapped result values for the term
44
+ # with hash of map key = array of object values for predicates identified in map parameter.
45
+ # @example value map
46
+ # [
47
+ # {:uri=>[#<RDF::URI:0x3fcff54a829c URI:http://id.loc.gov/authorities/genreForms/gf2011026559>],
48
+ # :id=>[#<RDF::Literal:0x3fcff4a367b4("gf2011026559")>],
49
+ # :label=>[#<RDF::Literal:0x3fcff54a9a98("Science Fiction"@en)>],
50
+ # :altlabel=>[#<RDF::Literal:0x3fcff54a9a98("Sci-fi"@en)>],
51
+ # :broader=>[#<RDF::URI:0x3fcff54a8234 URI:http://id.loc.gov/authorities/genreForms/gf2014026339>],
52
+ # :narrower=>[#<RDF::URI:0x3fcff54a8283 URI:http://id.loc.gov/authorities/genreForms/gf2014026551>],
53
+ # :sameas=>[#<RDF::URI:0x3fcff54a8248 URI:http://id.loc.gov/authorities/names/n2010043281>]}
54
+ # ]
55
+ def map_values(graph:, subject_uri:, prefixes: nil, ldpath_map: nil, predicate_map: nil)
56
+ if ldpath_map.present?
57
+ map_values_with_ldpath_map(graph: graph, ldpath_map: ldpath_map, prefixes: prefixes, subject_uri: subject_uri)
58
+ else
59
+ map_values_with_predicate_map(graph: graph, predicate_map: predicate_map, subject_uri: subject_uri)
60
+ end
61
+ end
62
+
63
+ private
64
+
65
+ def map_values_with_ldpath_map(graph:, ldpath_map:, prefixes:, subject_uri:)
66
+ graph_ldpath_mapper_service.map_values(graph: graph, ldpath_map: ldpath_map, prefixes: prefixes, subject_uri: subject_uri)
67
+ end
68
+
69
+ def map_values_with_predicate_map(graph:, predicate_map:, subject_uri:)
70
+ Qa.deprecation_warning(
71
+ in_msg: 'Qa::LinkedData::Mapper::TermResultsMapperService',
72
+ msg: 'predicate_map is deprecated; update to use ldpath_map'
73
+ )
74
+ graph_predicate_mapper_service.map_values(graph: graph, predicate_map: predicate_map, subject_uri: subject_uri)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -1,5 +1,11 @@
1
1
  {
2
- "QA_CONFIG_VERSION": "2.0",
2
+ "QA_CONFIG_VERSION": "2.1",
3
+ "prefixes": {
4
+ "loc": "http://id.loc.gov/vocabulary/identifiers/",
5
+ "skos": "http://www.w3.org/2004/02/skos/core#",
6
+ "madsrdf": "http://www.loc.gov/mads/rdf/v1#",
7
+ "owl": "http://www.w3.org/2002/07/owl#"
8
+ },
3
9
  "term": {
4
10
  "url": {
5
11
  "@context": "http://www.w3.org/ns/hydra/context.jsonld",
@@ -29,12 +35,12 @@
29
35
  "term_id": "ID",
30
36
  "language": ["en"],
31
37
  "results": {
32
- "id_predicate": "http://id.loc.gov/vocabulary/identifiers/lccn",
33
- "label_predicate": "http://www.w3.org/2004/02/skos/core#prefLabel",
34
- "altlabel_predicate": "http://www.w3.org/2004/02/skos/core#altLabel",
35
- "sameas_predicate": "http://www.w3.org/2004/02/skos/core#exactMatch",
36
- "narrower_predicate": "http://www.loc.gov/mads/rdf/v1#hasNarrowerAuthority",
37
- "broader_predicate": "http://www.loc.gov/mads/rdf/v1#hasBroaderAuthority"
38
+ "id_ldpath": "loc:lccn",
39
+ "label_ldpath": "skos:prefLabel :: xsd:string",
40
+ "altlabel_ldpath": "skos:altLabel :: xsd:string",
41
+ "sameas_ldpath": "skos:exactMatch | owl:sameAs :: xsd:anyURI",
42
+ "narrower_ldpath": "madsrdf:hasNarrowerAuthority :: xsd:anyURI",
43
+ "broader_ldpath": "madsrdf:hasBroaderAuthority :: xsd:anyURI"
38
44
  },
39
45
  "subauthorities": {
40
46
  "subjects": "subjects",
@@ -1,5 +1,10 @@
1
1
  {
2
- "QA_CONFIG_VERSION": "2.0",
2
+ "QA_CONFIG_VERSION": "2.1",
3
+ "prefixes": {
4
+ "dcterms": "http://purl.org/dc/terms/",
5
+ "skos": "http://www.w3.org/2004/02/skos/core#",
6
+ "schema": "http://schema.org/"
7
+ },
3
8
  "term": {
4
9
  "url": {
5
10
  "@context": "http://www.w3.org/ns/hydra/context.jsonld",
@@ -20,10 +25,10 @@
20
25
  },
21
26
  "term_id": "ID",
22
27
  "results": {
23
- "id_predicate": "http://purl.org/dc/terms/identifier",
24
- "label_predicate": "http://www.w3.org/2004/02/skos/core#prefLabel",
25
- "altlabel_predicate": "http://www.w3.org/2004/02/skos/core#altLabel",
26
- "sameas_predicate": "http://schema.org/sameAs"
28
+ "id_ldpath": "dcterms:identifier",
29
+ "label_ldpath": "skos:prefLabel",
30
+ "altlabel_ldpath": "skos:altLabel",
31
+ "sameas_ldpath": "schema:sameAs"
27
32
  }
28
33
  },
29
34
  "search": {
@@ -60,9 +65,9 @@
60
65
  "subauth": "subauth"
61
66
  },
62
67
  "results": {
63
- "id_predicate": "http://purl.org/dc/terms/identifier",
64
- "label_predicate": "http://www.w3.org/2004/02/skos/core#prefLabel",
65
- "sort_predicate": "http://www.w3.org/2004/02/skos/core#prefLabel"
68
+ "id_ldpath": "dcterms:identifier",
69
+ "label_ldpath": "skos:prefLabel",
70
+ "sort_ldpath": "skos:prefLabel"
66
71
  },
67
72
  "subauthorities": {
68
73
  "topic": "oclc.topic",
@@ -0,0 +1,10 @@
1
+ Description:
2
+ This generator adds three discogs config files for that authority.
3
+
4
+ Example:
5
+ rails generate qa:discogs
6
+
7
+ This will create:
8
+ config/discogs-formats.yml
9
+ config/discogs-genres.yml
10
+
@@ -0,0 +1,12 @@
1
+ class Qa::DiscogsGenerator < Rails::Generators::Base
2
+ source_root File.expand_path('../templates', __FILE__)
3
+
4
+ desc """
5
+ This generator makes the following change to your application:
6
+ 1. Adds the Discogs authority configuration
7
+ """
8
+ def copy_discogs_configs
9
+ copy_file "config/discogs-formats.yml", "config/discogs-formats.yml"
10
+ copy_file "config/discogs-genres.yml", "config/discogs-genres.yml"
11
+ end
12
+ end
@@ -0,0 +1,346 @@
1
+ # carriers
2
+ 4-TrackCartridge:
3
+ type: carrier
4
+ label: audio cartridge
5
+ uri: http://id.loc.gov/vocabulary/carriers/sg
6
+ 8-TrackCartridge:
7
+ type: carrier
8
+ label: audio cartridge
9
+ uri: http://id.loc.gov/vocabulary/carriers/sg
10
+ Acetate:
11
+ type: carrier
12
+ label: other audio carrier
13
+ uri: http://id.loc.gov/vocabulary/carriers/sz
14
+ AllMedia:
15
+ type: carrier
16
+ label: other audio carrier
17
+ uri: http://id.loc.gov/vocabulary/carriers/sz
18
+ Betacam:
19
+ type: carrier
20
+ label: videocassette
21
+ uri: http://id.loc.gov/vocabulary/carriers/vf
22
+ BetacamSP:
23
+ type: carrier
24
+ label: videocassette
25
+ uri: http://id.loc.gov/vocabulary/carriers/vf
26
+ Betamax:
27
+ type: carrier
28
+ label: videocassette
29
+ uri: http://id.loc.gov/vocabulary/carriers/vf
30
+ Blu-ray:
31
+ type: carrier
32
+ label: videodisc
33
+ uri: http://id.loc.gov/vocabulary/carriers/vd
34
+ Blu-ray-R:
35
+ type: carrier
36
+ label: videodisc
37
+ uri: http://id.loc.gov/vocabulary/carriers/vd
38
+ Cassette:
39
+ type: carrier
40
+ label: audiocassette
41
+ uri: http://id.loc.gov/vocabulary/carriers/ss
42
+ CD:
43
+ type: carrier
44
+ label: audio disc
45
+ uri: http://id.loc.gov/vocabulary/carriers/sd
46
+ CDr:
47
+ type: carrier
48
+ label: audio disc
49
+ uri: http://id.loc.gov/vocabulary/carriers/sd
50
+ CDV:
51
+ type: carrier
52
+ label: videodisc
53
+ uri: http://id.loc.gov/vocabulary/carriers/vd
54
+ Cylinder:
55
+ type: carrier
56
+ label: audio cylinder
57
+ uri: http://id.loc.gov/vocabulary/carriers/se
58
+ DAT:
59
+ type: carrier
60
+ label: audiocassette
61
+ uri: http://id.loc.gov/vocabulary/carriers/ss
62
+ DCC:
63
+ type: carrier
64
+ label: computer tape cassette
65
+ uri: http://id.loc.gov/vocabulary/carriers/cf
66
+ DVD:
67
+ type: carrier
68
+ label: videodisc
69
+ uri: http://id.loc.gov/vocabulary/carriers/vd
70
+ DVDr:
71
+ type: carrier
72
+ label: videodisc
73
+ uri: http://id.loc.gov/vocabulary/carriers/vd
74
+ EdisonDisc:
75
+ type: carrier
76
+ label: audio disc
77
+ uri: http://id.loc.gov/vocabulary/carriers/sd
78
+ Elcaset:
79
+ type: carrier
80
+ label: audiocassette
81
+ uri: http://id.loc.gov/vocabulary/carriers/ss
82
+ File:
83
+ type: carrier
84
+ label: other computer carrier
85
+ uri: http://id.loc.gov/vocabulary/carriers/cz
86
+ Flexi-disc:
87
+ type: carrier
88
+ label: audio disc
89
+ uri: http://id.loc.gov/vocabulary/carriers/sd
90
+ FloppyDisk:
91
+ type: carrier
92
+ label: computer disc
93
+ uri: http://id.loc.gov/vocabulary/carriers/cd
94
+ HDDVD:
95
+ type: carrier
96
+ label: videodisc
97
+ uri: http://id.loc.gov/vocabulary/carriers/vd
98
+ HDDVD-R:
99
+ type: carrier
100
+ label: videodisc
101
+ uri: http://id.loc.gov/vocabulary/carriers/vd
102
+ Hybrid:
103
+ type: carrier
104
+ label: other audio carrier
105
+ uri: http://id.loc.gov/vocabulary/carriers/sz
106
+ Laserdisc:
107
+ type: carrier
108
+ label: videodisc
109
+ uri: http://id.loc.gov/vocabulary/carriers/vd
110
+ LatheCut:
111
+ type: carrier
112
+ label: audio disc
113
+ uri: http://id.loc.gov/vocabulary/carriers/sd
114
+ MemoryStick:
115
+ type: carrier
116
+ label: other computer carrier
117
+ uri: http://id.loc.gov/vocabulary/carriers/cz
118
+ Microcassette:
119
+ type: carrier
120
+ label: audiocassette
121
+ uri: http://id.loc.gov/vocabulary/carriers/ss
122
+ Minidisc:
123
+ type: carrier
124
+ label: audio disc
125
+ uri: http://id.loc.gov/vocabulary/carriers/sd
126
+ MiniDV:
127
+ type: carrier
128
+ label: videocassette
129
+ uri: http://id.loc.gov/vocabulary/carriers/vf
130
+ MVD:
131
+ type: carrier
132
+ label: audio disc
133
+ uri: http://id.loc.gov/vocabulary/carriers/sd
134
+ PathéDisc:
135
+ type: carrier
136
+ label: audio disc
137
+ uri: http://id.loc.gov/vocabulary/carriers/sd
138
+ PlayTape:
139
+ type: carrier
140
+ label: audio cartridge
141
+ uri: http://id.loc.gov/vocabulary/carriers/sg
142
+ RCATapeCartridge:
143
+ type: carrier
144
+ label: audio cartridge
145
+ uri: http://id.loc.gov/vocabulary/carriers/sg
146
+ Reel-To-Reel:
147
+ type: carrier
148
+ label: audiotape reel
149
+ uri: http://id.loc.gov/vocabulary/carriers/st
150
+ SACD:
151
+ type: carrier
152
+ label: audiodisc
153
+ uri: http://id.loc.gov/vocabulary/carriers/sd
154
+ SelectaVision:
155
+ type: carrier
156
+ label: videocassette
157
+ uri: http://id.loc.gov/vocabulary/carriers/vf
158
+ Shellac:
159
+ type: carrier
160
+ label: audio disc
161
+ uri: http://id.loc.gov/vocabulary/carriers/sd
162
+ Tefifon:
163
+ type: carrier
164
+ label: audio cartridge
165
+ uri: http://id.loc.gov/vocabulary/carriers/sg
166
+ U-matic:
167
+ type: carrier
168
+ label: videocassette
169
+ uri: http://id.loc.gov/vocabulary/carriers/vf
170
+ UMD:
171
+ type: carrier
172
+ label: computer disc
173
+ uri: http://id.loc.gov/vocabulary/carriers/cd
174
+ VHD:
175
+ type: carrier
176
+ label: computer disc
177
+ uri: http://id.loc.gov/vocabulary/carriers/cd
178
+ VHS:
179
+ type: carrier
180
+ label: videocassette
181
+ uri: http://id.loc.gov/vocabulary/carriers/vf
182
+ Video2000:
183
+ type: carrier
184
+ label: videocassette
185
+ uri: http://id.loc.gov/vocabulary/carriers/vf
186
+ Video8:
187
+ type: carrier
188
+ label: videocassette
189
+ uri: http://id.loc.gov/vocabulary/carriers/vf
190
+ Vinyl:
191
+ type: carrier
192
+ label: audio disc
193
+ uri: http://id.loc.gov/vocabulary/carriers/sd
194
+ WireRecording:
195
+ type: carrier
196
+ label: other audio carrier
197
+ uri: http://id.loc.gov/vocabulary/carriers/sz
198
+ # playback channels
199
+ Stereo:
200
+ type: playbackChannel
201
+ label: stereo
202
+ uri: http://id.loc.gov/vocabulary/mplayback/ste
203
+ Mono:
204
+ type: playbackChannel
205
+ label: mono
206
+ uri: http://id.loc.gov/vocabulary/mplayback/mon
207
+ Quadraphonic:
208
+ type: playbackChannel
209
+ label: surround
210
+ uri: http://id.loc.gov/vocabulary/mplayback/mul
211
+ 4-TrackStereo:
212
+ type: playbackChannel
213
+ label: stereo
214
+ uri: http://id.loc.gov/vocabulary/mplayback/ste
215
+ 2-TrackStereo:
216
+ type: playbackChannel
217
+ label: stereo
218
+ uri: http://id.loc.gov/vocabulary/mplayback/ste
219
+ 2-TrackMono:
220
+ type: playbackChannel
221
+ label: mono
222
+ uri: http://id.loc.gov/vocabulary/mplayback/mon
223
+ 4-TrackMono:
224
+ type: playbackChannel
225
+ label: mono
226
+ uri: http://id.loc.gov/vocabulary/mplayback/mon
227
+ Dolby5.1:
228
+ type: playbackChannel
229
+ label: surround
230
+ uri: http://id.loc.gov/vocabulary/mplayback/mul
231
+ # dimensions
232
+ 10":
233
+ type: dimension
234
+ label: 10 inches
235
+ 11":
236
+ type: dimension
237
+ label: 11 inches
238
+ 12":
239
+ type: dimension
240
+ label: 12 inches
241
+ 16":
242
+ type: dimension
243
+ label: 16 inches
244
+ 2":
245
+ type: dimension
246
+ label: 2 inches
247
+ 21cm:
248
+ type: dimension
249
+ label: 21cm
250
+ 25cm:
251
+ type: dimension
252
+ label: 25cm
253
+ 27cm:
254
+ type: dimension
255
+ label: 27cm
256
+ 29cm:
257
+ type: dimension
258
+ label: 29cm
259
+ 3":
260
+ type: dimension
261
+ label: 3 inches
262
+ 3.5":
263
+ type: dimension
264
+ label: 3.5 inches
265
+ 35cm:
266
+ type: dimension
267
+ label: 35cm
268
+ 3½":
269
+ type: dimension
270
+ label: 3 1/2 inches
271
+ 4":
272
+ type: dimension
273
+ label: 4 inches
274
+ 5":
275
+ type: dimension
276
+ label: 5 inches
277
+ 5.25":
278
+ type: dimension
279
+ label: 5.25 inches
280
+ 5½":
281
+ type: dimension
282
+ label: 5 1/2 inches
283
+ 6":
284
+ type: dimension
285
+ label: 6 inches
286
+ 6½":
287
+ type: dimension
288
+ label: 6 1/2 inches
289
+ 7":
290
+ type: dimension
291
+ label: 7 inches
292
+ 8":
293
+ type: dimension
294
+ label: 8 inches
295
+ 9":
296
+ type: dimension
297
+ label: 9 inches
298
+ ⅛":
299
+ type: dimension
300
+ label: 1/8 inches
301
+ ¼":
302
+ type: dimension
303
+ label: 1/4 inches
304
+ ½":
305
+ type: dimension
306
+ label: 1/2 inches
307
+ # playing speeds
308
+ 1⅞ips:
309
+ type: playingSpeed
310
+ label: 1 7/8 ips
311
+ 15ips:
312
+ type: playingSpeed
313
+ label: 15 ips
314
+ 15/16ips:
315
+ type: playingSpeed
316
+ label: 15/16 ips
317
+ 16⅔RPM:
318
+ type: playingSpeed
319
+ label: 16 2/3 RPM
320
+ 3¾ips:
321
+ type: playingSpeed
322
+ label: 3 3/4 ips
323
+ 30ips:
324
+ type: playingSpeed
325
+ label: 30 ips
326
+ 33⅓RPM:
327
+ type: playingSpeed
328
+ label: 33 1/3 RPM
329
+ 45RPM:
330
+ type: playingSpeed
331
+ label: 45 RPM
332
+ 7½ips:
333
+ type: playingSpeed
334
+ label: 7 1/2 ips
335
+ 78RPM:
336
+ type: playingSpeed
337
+ label: 78 RPM
338
+ 8⅓RPM:
339
+ type: playingSpeed
340
+ label: 8 1/3 RPM
341
+ 80RPM:
342
+ type: playingSpeed
343
+ label: 80 RPM
344
+ 90RPM:
345
+ type: playingSpeed
346
+ label: 90 RPM