Module: Qa::Authorities::Discogs::DiscogsTranslation
- Includes:
- DiscogsInstanceBuilder, DiscogsUtils, DiscogsWorksBuilder
- Included in:
- GenericAuthority
- Defined in:
- lib/qa/authorities/discogs/discogs_translation.rb
Constant Summary
Constants included from DiscogsUtils
Qa::Authorities::Discogs::DiscogsUtils::DISCOGS_FORMATS_MAPPING, Qa::Authorities::Discogs::DiscogsUtils::DISCOGS_GENRE_MAPPING
Instance Method Summary collapse
-
#build_graph(response, subauthority = "", format: :jsonld) ⇒ Array, String
Returns modified Discogs data in json-ld format.
-
#build_instance_statements(response) ⇒ Array
Rdf statements.
-
#build_master_statements(response) ⇒ Array
Rdf statements.
-
#compile_rdf_statements(response, subauthority) ⇒ Array
Rdf statements.
-
#get_primary_artists_stmts(response) ⇒ Array
Rdf statements.
-
#get_primary_instance_definition(response) ⇒ Array
Rdf statements.
-
#get_primary_work_definition(response) ⇒ Array
Rdf statements.
-
#master_only(response, subauthority) ⇒ Boolean
Returns true if the subauthority is “master” or the response contains a master.
Methods included from DiscogsInstanceBuilder
#build_base_materials, #build_format_characteristics, #build_format_desc_stmts, #build_format_name_stmts, #build_provision_activity_stmts, #get_format_stmts, #get_identifiers_stmts, #get_labels_stmts
Methods included from DiscogsUtils
#bf_agent_predicate, #bf_agent_type_object, #bf_main_title_predicate, #bf_role_predicate, #bf_role_type_object, #build_playing_speed_stmts, #build_role_stmts, #build_year_statements, #check_for_msg_response, #contruct_stmt_literal_object, #contruct_stmt_uri_object, #discogs_formats, #discogs_genres, #format, #graph_format?, #jsonld?, #n3?, #ntriples?, #rdf_type_predicate, #rdfs_label_predicate
Methods included from DiscogsWorksBuilder
#build_artist_array, #build_genres, #build_secondary_works, #build_track_artists, #build_track_extraartists, #get_extra_artists_stmts, #get_genres_stmts, #get_tracklist_artists_stmts
Instance Method Details
#build_graph(response, subauthority = "", format: :jsonld) ⇒ Array, String
Returns modified Discogs data in json-ld format. The data is first structured as RDF statements that use the BIBFRAME ontology. Where applicable, Discogs terms are mapped to the URIs of corresponding objects in the Library of Congress vocabulary.
15 16 17 18 19 20 21 22 |
# File 'lib/qa/authorities/discogs/discogs_translation.rb', line 15 def build_graph(response, = "", format: :jsonld) graph = RDF::Graph.new rdf_statements = compile_rdf_statements(response, ) graph.insert_statements(rdf_statements) graph.dump(format, standard_prefixes: true) end |
#build_instance_statements(response) ⇒ Array
Returns rdf statements.
70 71 72 73 74 75 76 |
# File 'lib/qa/authorities/discogs/discogs_translation.rb', line 70 def build_instance_statements(response) # get the statements that define the instance instance_stmts = get_primary_instance_definition(response) instance_stmts.concat(get_format_stmts(response)) instance_stmts.concat(get_labels_stmts(response)) instance_stmts.concat(get_identifiers_stmts(response)) end |
#build_master_statements(response) ⇒ Array
Returns rdf statements.
58 59 60 61 62 63 64 65 66 |
# File 'lib/qa/authorities/discogs/discogs_translation.rb', line 58 def build_master_statements(response) # get the statements that define the primary work master_stmts = get_primary_work_definition(response) master_stmts.concat(get_primary_artists_stmts(response)) master_stmts.concat(get_extra_artists_stmts(response)) master_stmts.concat(get_genres_stmts(response)) # get the statements that define the secondary works by converting the tracklist master_stmts.concat(get_tracklist_artists_stmts(response)) end |
#compile_rdf_statements(response, subauthority) ⇒ Array
Returns rdf statements.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/qa/authorities/discogs/discogs_translation.rb', line 27 def compile_rdf_statements(response, ) complete_rdf_stmts = [] # The necessary statements depend on the subauthority. If the subauthority is master, # all we need is a work and not an instance. If there's no subauthority, we can determine # if the discogs record is a master because it will have a main_release field. if master_only(response, ) self.work_uri = response["uri"].present? ? response["uri"] : response["resource_url"] complete_rdf_stmts.concat(build_master_statements(response)) else # If the subauthority is "release," we need to define an instance as well as a # work. If the discogs record has a master_id, fetch that and use the results to # build the statements for the work. master_resp = response["master_id"].present? ? json("https://api.discogs.com/masters/#{response['master_id']}") : response complete_rdf_stmts.concat(build_master_statements(master_resp)) # Now do the statements for the release/instance. self.instance_uri = response["uri"].present? ? response["uri"] : response["resource_url"] complete_rdf_stmts.concat(build_instance_statements(response)) end end |
#get_primary_artists_stmts(response) ⇒ Array
Returns rdf statements.
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/qa/authorities/discogs/discogs_translation.rb', line 108 def get_primary_artists_stmts(response) stmts = [] # can have multiple artists as primary contributors to the work; need to distinguish among them count = 1 # for secondary contributors to the work if response["artists"].present? response["artists"].each do |artist| # we need the primary artists later when we loop through the track list, so build this array primary_artists << artist stmts << contruct_stmt_uri_object(work_uri, "http://id.loc.gov/ontologies/bibframe/contribution", "contrbn#{count}") stmts << contruct_stmt_uri_object("contrbn#{count}", rdf_type_predicate, "http://id.loc.gov/ontologies/bflc/PrimaryContribution") stmts << contruct_stmt_uri_object("contrbn#{count}", bf_agent_predicate, "agentn#{count}") stmts << contruct_stmt_uri_object("agentn#{count}", rdf_type_predicate, bf_agent_type_object) stmts << contruct_stmt_literal_object("agentn#{count}", rdfs_label_predicate, artist["name"]) count += 1 end end stmts end |
#get_primary_instance_definition(response) ⇒ Array
Returns rdf statements.
93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/qa/authorities/discogs/discogs_translation.rb', line 93 def get_primary_instance_definition(response) stmts = [] stmts << contruct_stmt_uri_object(instance_uri, "http://id.loc.gov/ontologies/bibframe/instanceOf", work_uri) stmts << contruct_stmt_uri_object(instance_uri, rdf_type_predicate, "http://id.loc.gov/ontologies/bibframe/Instance") stmts << contruct_stmt_uri_object(instance_uri, "http://id.loc.gov/ontologies/bibframe/title", "titlen2") stmts << contruct_stmt_literal_object("titlen2", bf_main_title_predicate, response["title"]) stmts << contruct_stmt_uri_object("titlen2", rdf_type_predicate, "http://id.loc.gov/ontologies/bibframe/Title") stmts << contruct_stmt_uri_object(instance_uri, "http://id.loc.gov/ontologies/bibframe/identifiedBy", "widn1") stmts << contruct_stmt_uri_object("widn1", rdf_type_predicate, "http://id.loc.gov/ontologies/bibframe/Identifier") stmts << contruct_stmt_literal_object("widn1", "http://www.w3.org/1999/02/22-rdf-syntax-ns#value", response["id"]) stmts # w/out this line, building the graph throws an undefined method `graph_name=' error end |
#get_primary_work_definition(response) ⇒ Array
Returns rdf statements.
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/qa/authorities/discogs/discogs_translation.rb', line 80 def get_primary_work_definition(response) stmts = [] stmts << contruct_stmt_uri_object(work_uri, rdf_type_predicate, "http://id.loc.gov/ontologies/bibframe/Work") stmts << contruct_stmt_uri_object(work_uri, "http://id.loc.gov/ontologies/bibframe/title", "titlen1") stmts << contruct_stmt_literal_object("titlen1", bf_main_title_predicate, response["title"]) stmts << contruct_stmt_uri_object("titlen1", rdf_type_predicate, "http://id.loc.gov/ontologies/bibframe/Title") stmts << contruct_stmt_uri_object(work_uri, rdf_type_predicate, "http://id.loc.gov/ontologies/bibframe/Audio") stmts << contruct_stmt_literal_object(work_uri, "http://id.loc.gov/ontologies/bibframe/originDate", response["year"].to_s) if response["year"].present? stmts # w/out this line, building the graph throws an undefined method `graph_name=' error end |
#master_only(response, subauthority) ⇒ Boolean
Returns true if the subauthority is “master” or the response contains a master
50 51 52 53 54 |
# File 'lib/qa/authorities/discogs/discogs_translation.rb', line 50 def master_only(response, ) return true if == "master" return true if response["main_release"].present? false end |