bolognese 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/lib/bolognese/datacite_utils.rb +23 -23
  4. data/lib/bolognese/metadata.rb +5 -1
  5. data/lib/bolognese/metadata_utils.rb +10 -14
  6. data/lib/bolognese/readers/bibtex_reader.rb +9 -9
  7. data/lib/bolognese/readers/citeproc_reader.rb +12 -12
  8. data/lib/bolognese/readers/codemeta_reader.rb +12 -12
  9. data/lib/bolognese/readers/crossref_reader.rb +27 -29
  10. data/lib/bolognese/readers/datacite_json_reader.rb +19 -28
  11. data/lib/bolognese/readers/datacite_reader.rb +37 -37
  12. data/lib/bolognese/readers/ris_reader.rb +9 -9
  13. data/lib/bolognese/readers/schema_org_reader.rb +37 -32
  14. data/lib/bolognese/utils.rb +31 -34
  15. data/lib/bolognese/version.rb +1 -1
  16. data/lib/bolognese/writers/codemeta_writer.rb +1 -1
  17. data/lib/bolognese/writers/crosscite_writer.rb +1 -1
  18. data/lib/bolognese/writers/datacite_json_writer.rb +10 -10
  19. data/lib/bolognese/writers/jats_writer.rb +1 -1
  20. data/lib/bolognese/writers/ris_writer.rb +1 -1
  21. data/lib/bolognese/writers/schema_org_writer.rb +6 -6
  22. data/spec/datacite_utils_spec.rb +1 -1
  23. data/spec/fixtures/crosscite.json +8 -8
  24. data/spec/fixtures/datacite.json +22 -22
  25. data/spec/readers/bibtex_reader_spec.rb +6 -6
  26. data/spec/readers/citeproc_reader_spec.rb +2 -2
  27. data/spec/readers/codemeta_reader_spec.rb +8 -8
  28. data/spec/readers/crosscite_reader_spec.rb +4 -4
  29. data/spec/readers/crossref_reader_spec.rb +56 -59
  30. data/spec/readers/datacite_json_reader_spec.rb +7 -7
  31. data/spec/readers/datacite_reader_spec.rb +193 -194
  32. data/spec/readers/ris_reader_spec.rb +5 -5
  33. data/spec/readers/schema_org_reader_spec.rb +31 -32
  34. data/spec/utils_spec.rb +4 -4
  35. data/spec/writers/crosscite_writer_spec.rb +10 -13
  36. data/spec/writers/datacite_json_writer_spec.rb +9 -9
  37. data/spec/writers/datacite_writer_spec.rb +24 -26
  38. data/spec/writers/schema_org_writer_spec.rb +2 -2
  39. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb41752abec17479d1f11b7b7f0f7a4c5aad50698eae00d55e0e8adc71d2b5ce
4
- data.tar.gz: d5b6df042eccfd780f2af437d79a12c26a28d99e6c740a06644f84a651cc458d
3
+ metadata.gz: b10b2f30664bc415fa1bcc606b4c2db35132391c72294cc4d20ec10652906c3c
4
+ data.tar.gz: ad15c83b54c9d02b3af165d44c83bb20029e30f33e902c5ba8c61f5356b66171
5
5
  SHA512:
6
- metadata.gz: 54669b2f390738ea6232ffde8866b4e57d829784b96168f5d0fde43b7672250be828e4c62cab815670cbac7056569e012338539022a78b0ef8979c4a05f8a52b
7
- data.tar.gz: fc73f2fd0a8306c71458b0eff727f6b338d65623c5bf58079bb08eb711a02d90e57895599ba2b499a9fbf23f8a22f22e02490f12cf2a2c6af4afadcd8857d018
6
+ metadata.gz: 62fb8fa37d0b75f493410e74335b76d3a1cd7c8d31331478c4da873355059bc50831e4a71f05f8f0021fe7c72628c687107155c79e05b0d9cb97ba17fddcdd71
7
+ data.tar.gz: ab4a88be3953d2303ab47b17efe90e59e4aee8624b62f91566652a3bf37856d370237cf11cb438d0266af8d46181b59b0271ff90019b53cc34f6b114b39453eb
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bolognese (1.0.7)
4
+ bolognese (1.0.8)
5
5
  activesupport (>= 4.2.5, < 6)
6
6
  benchmark_methods (~> 0.7)
7
7
  bibtex-ruby (~> 4.1)
@@ -58,7 +58,7 @@ module Bolognese
58
58
 
59
59
  xml.contributors do
60
60
  Array.wrap(contributor).each do |con|
61
- xml.contributor("contributorType" => con["contributor_type"] || "Other") do
61
+ xml.contributor("contributorType" => con["contributorType"] || "Other") do
62
62
  insert_person(xml, con, "contributor")
63
63
  end
64
64
  end
@@ -85,7 +85,7 @@ module Bolognese
85
85
  t["title"] = title
86
86
  end
87
87
 
88
- attributes = { 'titleType' => t["title_type"], 'lang' => t["lang"] }.compact
88
+ attributes = { 'titleType' => t["titleType"], 'lang' => t["lang"] }.compact
89
89
  xml.title(t["title"], attributes)
90
90
  end
91
91
  end
@@ -100,10 +100,10 @@ module Bolognese
100
100
  end
101
101
 
102
102
  def insert_resource_type(xml)
103
- return xml unless types["type"].present?
103
+ return xml unless types["schemaOrg"].present?
104
104
 
105
- xml.resourceType(types["resource_type"] || types["type"],
106
- 'resourceTypeGeneral' => types["resource_type_general"] || Metadata::SO_TO_DC_TRANSLATIONS[types["type"]] || "Other")
105
+ xml.resourceType(types["resourceType"] || types["schemaOrg"],
106
+ 'resourceTypeGeneral' => types["resourceTypeGeneral"] || Metadata::SO_TO_DC_TRANSLATIONS[types["schemaOrg"]] || "Other")
107
107
  end
108
108
 
109
109
  def insert_alternate_identifiers(xml)
@@ -111,7 +111,7 @@ module Bolognese
111
111
 
112
112
  xml.alternateIdentifiers do
113
113
  Array.wrap(alternate_identifiers).each do |alternate_identifier|
114
- xml.alternateIdentifier(alternate_identifier["alternate_identifier"], 'alternateIdentifierType' => alternate_identifier["alternate_identifier_type"])
114
+ xml.alternateIdentifier(alternate_identifier["alternateIdentifier"], 'alternateIdentifierType' => alternate_identifier["alternateIdentifierType"])
115
115
  end
116
116
  end
117
117
  end
@@ -121,7 +121,7 @@ module Bolognese
121
121
 
122
122
  xml.dates do
123
123
  Array.wrap(dates).each do |date|
124
- attributes = { 'dateType' => date["date_type"] || "Issued", 'dateInformation' => date["date_information"] }.compact
124
+ attributes = { 'dateType' => date["dateType"] || "Issued", 'dateInformation' => date["dateInformation"] }.compact
125
125
  xml.date(date["date"], attributes)
126
126
  end
127
127
  end
@@ -133,10 +133,10 @@ module Bolognese
133
133
  xml.fundingReferences do
134
134
  Array.wrap(funding_references).each do |funding_reference|
135
135
  xml.fundingReference do
136
- xml.funderName(funding_reference["funder_name"])
137
- xml.funderIdentifier(funding_reference["funder_identifier"], { "funderIdentifierType" => funding_reference["funder_identifier_type"] }.compact) if funding_reference["funder_identifier"].present?
138
- xml.awardNumber(funding_reference["award_number"], { "awardURI" => funding_reference["award_uri"] }.compact) if funding_reference["award_number"].present? || funding_reference["award_uri"].present?
139
- xml.awardTitle(funding_reference["award_title"]) if funding_reference["award_title"].present?
136
+ xml.funderName(funding_reference["funderName"])
137
+ xml.funderIdentifier(funding_reference["funderIdentifier"], { "funderIdentifierType" => funding_reference["funderIdentifierType"] }.compact) if funding_reference["funderIdentifier"].present?
138
+ xml.awardNumber(funding_reference["awardNumber"], { "awardURI" => funding_reference["awardUri"] }.compact) if funding_reference["awardNumber"].present? || funding_reference["awardUri"].present?
139
+ xml.awardTitle(funding_reference["awardTitle"]) if funding_reference["awardTitle"].present?
140
140
  end
141
141
  end
142
142
  end
@@ -154,7 +154,7 @@ module Bolognese
154
154
  s["subject"] = subject
155
155
  end
156
156
 
157
- attributes = { "subjectScheme" => s["subject_scheme"], "schemeURI" => s["scheme_uri"], "valueURI" => s["value_uri"], "lang" => s["lang"] }.compact
157
+ attributes = { "subjectScheme" => s["subjectScheme"], "schemeURI" => s["schemeUri"], "valueURI" => s["valueUri"], "lang" => s["lang"] }.compact
158
158
 
159
159
  xml.subject(s["subject"], attributes)
160
160
  end
@@ -173,15 +173,15 @@ module Bolognese
173
173
  xml.relatedIdentifiers do
174
174
  related_identifiers.each do |related_identifier|
175
175
  attributes = {
176
- 'relatedIdentifierType' => related_identifier["related_identifier_type"],
177
- 'relationType' => related_identifier["relation_type"],
178
- 'resourceTypeGeneral' => related_identifier["resource_type_general"] }.compact
176
+ 'relatedIdentifierType' => related_identifier["relatedIdentifierType"],
177
+ 'relationType' => related_identifier["relationType"],
178
+ 'resourceTypeGeneral' => related_identifier["resourceTypeGeneral"] }.compact
179
179
 
180
- attributes.merge({ 'relatedMetadataScheme' => related_identifier["related_metadata_schema"],
181
- 'schemeURI' => related_identifier["scheme_uri"],
182
- 'schemeType' => related_identifier["scheme_type"]}.compact) if %w(HasMetadata IsMetadataFor).include?(related_identifier["relation_type"])
180
+ attributes.merge({ 'relatedMetadataScheme' => related_identifier["relatedMetadataSchema"],
181
+ 'schemeURI' => related_identifier["schemeUri"],
182
+ 'schemeType' => related_identifier["schemeType"]}.compact) if %w(HasMetadata IsMetadataFor).include?(related_identifier["relationType"])
183
183
 
184
- xml.relatedIdentifier(related_identifier["related_identifier"], attributes)
184
+ xml.relatedIdentifier(related_identifier["relatedIdentifier"], attributes)
185
185
  end
186
186
  end
187
187
  end
@@ -196,10 +196,10 @@ module Bolognese
196
196
  else
197
197
  r = {}
198
198
  r["rights"] = rights
199
- r["rights_uri"] = normalize_id(rights)
199
+ r["rightsUri"] = normalize_id(rights)
200
200
  end
201
201
 
202
- attributes = { 'rightsURI' => r["rights_uri"], 'lang' => r["lang"] }.compact
202
+ attributes = { 'rightsURI' => r["rightsUri"], 'lang' => r["lang"] }.compact
203
203
 
204
204
  xml.rights(r["rights"], attributes)
205
205
  end
@@ -220,10 +220,10 @@ module Bolognese
220
220
  else
221
221
  d = {}
222
222
  d["description"] = description
223
- d["description_type"] = "Abstract"
223
+ d["descriptionType"] = "Abstract"
224
224
  end
225
225
 
226
- attributes = { 'lang' => d["lang"], 'descriptionType' => d["description_type"] || "Abstract" }.compact
226
+ attributes = { 'lang' => d["lang"], 'descriptionType' => d["descriptionType"] || "Abstract" }.compact
227
227
 
228
228
  xml.description(d["description"], attributes)
229
229
  end
@@ -9,7 +9,7 @@ module Bolognese
9
9
  attr_writer :id, :provider_id, :client_id, :doi, :identifier, :creator, :contributor, :titles, :publisher,
10
10
  :rights_list, :dates, :publication_year, :volume, :first_page, :last_page, :url, :version,
11
11
  :subjects, :contributor, :descriptions, :alternate_identifiers, :language, :sizes,
12
- :formats, :schema_version, :meta, :periodical,
12
+ :formats, :schema_version, :meta, :periodical, :source,
13
13
  :format, :funding_references, :state, :geo_locations,
14
14
  :types, :content_url, :related_identifiers
15
15
 
@@ -176,6 +176,10 @@ module Bolognese
176
176
  @content_url ||= meta.fetch("content_url", nil)
177
177
  end
178
178
 
179
+ def source
180
+ @source ||= meta.fetch("source", nil)
181
+ end
182
+
179
183
  def state
180
184
  @state ||= meta.fetch("state", nil)
181
185
  end
@@ -62,7 +62,7 @@ module Bolognese
62
62
  include Bolognese::Writers::TurtleWriter
63
63
 
64
64
  attr_accessor :string, :from, :sandbox, :meta, :regenerate, :issue
65
- attr_reader :doc, :service_provider, :page_start, :page_end, :reverse, :name_detector
65
+ attr_reader :doc, :page_start, :page_end, :reverse, :name_detector
66
66
  attr_writer :style, :locale
67
67
 
68
68
  # replace DOI in XML if provided in options
@@ -80,10 +80,6 @@ module Bolognese
80
80
  (from == "datacite") && regenerate.blank? && raw.present?
81
81
  end
82
82
 
83
- def service_provider
84
- @service_provider ||= meta.fetch("service_provider", nil)
85
- end
86
-
87
83
  def volume
88
84
  @volume ||= meta.fetch("volume", nil)
89
85
  end
@@ -102,15 +98,15 @@ module Bolognese
102
98
  end
103
99
 
104
100
  def reverse
105
- { "citation" => Array.wrap(related_identifiers).select { |ri| ri["relation_type"] == "IsReferencedBy" }.map do |r|
106
- { "@id" => normalize_doi(r["related_identifier"]),
107
- "@type" => r["resource_type_general"] || "CreativeWork",
108
- "identifier" => r["related_identifier_type"] == "DOI" ? nil : to_identifier(r) }.compact
101
+ { "citation" => Array.wrap(related_identifiers).select { |ri| ri["relationType"] == "IsReferencedBy" }.map do |r|
102
+ { "@id" => normalize_doi(r["relatedIdentifier"]),
103
+ "@type" => r["resourceTypeGeneral"] || "CreativeWork",
104
+ "identifier" => r["relatedIdentifierType"] == "DOI" ? nil : to_identifier(r) }.compact
109
105
  end.unwrap,
110
- "isBasedOn" => Array.wrap(related_identifiers).select { |ri| ri["relation_type"] == "IsSupplementTo" }.map do |r|
111
- { "@id" => normalize_doi(r["related_identifier"]),
112
- "@type" => r["resource_type_general"] || "CreativeWork",
113
- "identifier" => r["related_identifier_type"] == "DOI" ? nil : to_identifier(r) }.compact
106
+ "isBasedOn" => Array.wrap(related_identifiers).select { |ri| ri["relationType"] == "IsSupplementTo" }.map do |r|
107
+ { "@id" => normalize_doi(r["relatedIdentifier"]),
108
+ "@type" => r["resourceTypeGeneral"] || "CreativeWork",
109
+ "identifier" => r["relatedIdentifierType"] == "DOI" ? nil : to_identifier(r) }.compact
114
110
  end.unwrap }.compact
115
111
  end
116
112
 
@@ -127,7 +123,7 @@ module Bolognese
127
123
  "author" => to_citeproc(creator),
128
124
  "contributor" => to_citeproc(contributor),
129
125
  "issued" => get_date(dates, "Issued") ? get_date_parts(get_date(dates, "Issued")) : nil,
130
- "submitted" => Array.wrap(dates).find { |d| d["type"] == "Submitted" }.to_h.fetch("__content__", nil),
126
+ "submitted" => Array.wrap(dates).find { |d| d["dateType"] == "Submitted" }.to_h.fetch("__content__", nil),
131
127
  "abstract" => parse_attributes(descriptions, content: "description", first: true),
132
128
  "container-title" => periodical && periodical["title"],
133
129
  "DOI" => doi,
@@ -29,11 +29,11 @@ module Bolognese
29
29
  def read_bibtex(string: nil, **options)
30
30
  meta = string.present? ? BibTeX.parse(string).first : OpenStruct.new
31
31
 
32
- type = BIB_TO_SO_TRANSLATIONS[meta.try(:type).to_s] || "ScholarlyArticle"
32
+ schema_org = BIB_TO_SO_TRANSLATIONS[meta.try(:type).to_s] || "ScholarlyArticle"
33
33
  types = {
34
- "type" => type,
35
- "resource_type_general" => Metadata::SO_TO_DC_TRANSLATIONS[type],
34
+ "resourceTypeGeneral" => Metadata::SO_TO_DC_TRANSLATIONS[schema_org],
36
35
  "resource_type" => Bolognese::Utils::BIB_TO_CR_TRANSLATIONS[meta.try(:type).to_s] || meta.try(:type).to_s,
36
+ "schemaOrg" => schema_org,
37
37
  "bibtex" => meta.type.to_s,
38
38
  "citeproc" => BIB_TO_CP_TRANSLATIONS[meta.try(:type).to_s] || "misc",
39
39
  "ris" => BIB_TO_RIS_TRANSLATIONS[meta.try(:type).to_s] || "GEN"
@@ -49,10 +49,10 @@ module Bolognese
49
49
 
50
50
  related_identifiers = if meta.try(:journal).present? && meta.try(:issn).to_s.presence
51
51
  [{ "type" => "Periodical",
52
- "relation_type" => "IsPartOf",
53
- "related_identifier_type" => "ISSN",
52
+ "relationType" => "IsPartOf",
53
+ "relatedIdentifierType" => "ISSN",
54
54
  "title" => meta.journal.to_s,
55
- "related_identifier" => meta.try(:issn).to_s.presence }.compact]
55
+ "relatedIdentifier" => meta.try(:issn).to_s.presence }.compact]
56
56
  else
57
57
  nil
58
58
  end
@@ -69,7 +69,7 @@ module Bolognese
69
69
  state = doi.present? ? "findable" : "not_found"
70
70
  dates = if meta.try(:date).present?
71
71
  [{ "date" => meta.date.to_s,
72
- "date_type" => "Issued" }]
72
+ "dateType" => "Issued" }]
73
73
  else
74
74
  nil
75
75
  end
@@ -89,8 +89,8 @@ module Bolognese
89
89
  "volume" => meta.try(:volume).to_s.presence,
90
90
  "page_first" => page_first,
91
91
  "page_last" => page_last,
92
- "descriptions" => [{ "description" => meta.try(:abstract) && sanitize(meta.abstract.to_s).presence }],
93
- "rights_list" => [{ "rights_uri" => meta.try(:copyright).to_s.presence }.compact],
92
+ "descriptions" => [{ "description" => meta.try(:abstract) && sanitize(meta.abstract.to_s).presence, "descriptionType" => "Abstract" }],
93
+ "rights_list" => [{ "rightsUri" => meta.try(:copyright).to_s.presence }.compact],
94
94
  "state" => state
95
95
  }
96
96
  end
@@ -34,36 +34,36 @@ module Bolognese
34
34
  meta = string.present? ? Maremma.from_json(string) : {}
35
35
 
36
36
  citeproc_type = meta.fetch("type", nil)
37
- type = CP_TO_SO_TRANSLATIONS[citeproc_type] || "CreativeWork"
37
+ schema_org = CP_TO_SO_TRANSLATIONS[citeproc_type] || "CreativeWork"
38
38
  types = {
39
- "type" => type,
40
- "resource_type_general" => Bolognese::Utils::SO_TO_DC_TRANSLATIONS[type],
41
- "reource_type" => meta.fetch("additionalType", nil),
39
+ "resourceTypeGeneral" => Bolognese::Utils::SO_TO_DC_TRANSLATIONS[schema_org],
40
+ "reourceType" => meta.fetch("additionalType", nil),
41
+ "schemaOrg" => schema_org,
42
42
  "citeproc" => citeproc_type,
43
- "bibtex" => Bolognese::Utils::SO_TO_BIB_TRANSLATIONS[type] || "misc",
44
- "ris" => CP_TO_RIS_TRANSLATIONS[type] || "GEN"
43
+ "bibtex" => Bolognese::Utils::SO_TO_BIB_TRANSLATIONS[schema_org] || "misc",
44
+ "ris" => CP_TO_RIS_TRANSLATIONS[schema_org] || "GEN"
45
45
  }.compact
46
46
  doi = normalize_doi(meta.fetch("DOI", nil))
47
47
  creator = get_authors(from_citeproc(Array.wrap(meta.fetch("author", nil))))
48
48
  contributor = get_authors(from_citeproc(Array.wrap(meta.fetch("editor", nil))))
49
49
  dates = if meta.fetch("issued", nil).present?
50
50
  [{ "date" => get_date_from_date_parts(meta.fetch("issued", nil)),
51
- "date_type" => "Issued" }]
51
+ "dateType" => "Issued" }]
52
52
  else
53
53
  nil
54
54
  end
55
55
  publication_year = get_date_from_date_parts(meta.fetch("issued", nil)).to_s[0..3]
56
56
  rights_list = if meta.fetch("copyright", nil)
57
- [{ "rights_uri" => normalize_url(meta.fetch("copyright")) }.compact]
57
+ [{ "rightsUri" => normalize_url(meta.fetch("copyright")) }.compact]
58
58
  else
59
59
  nil
60
60
  end
61
61
  related_identifiers = if meta.fetch("container-title", nil).present? && meta.fetch("ISSN", nil).present?
62
62
  [{ "type" => "Periodical",
63
- "relation_type" => "IsPartOf",
64
- "related_identifier_type" => "ISSN",
63
+ "relationType" => "IsPartOf",
64
+ "relatedIdentifierType" => "ISSN",
65
65
  "title" => meta.fetch("container-title", nil),
66
- "id" => meta.fetch("ISSN", nil) }.compact]
66
+ "relatedIdentifier" => meta.fetch("ISSN", nil) }.compact]
67
67
  else
68
68
  nil
69
69
  end
@@ -94,7 +94,7 @@ module Bolognese
94
94
  "publication_year" => publication_year,
95
95
  "volume" => meta.fetch("volume", nil),
96
96
  #{}"pagination" => meta.pages.to_s.presence,
97
- "descriptions" => meta.fetch("abstract", nil).present? ? [{ "description" => sanitize(meta.fetch("abstract")) }] : [],
97
+ "descriptions" => meta.fetch("abstract", nil).present? ? [{ "description" => sanitize(meta.fetch("abstract")), "descriptionType" => "Abstract" }] : [],
98
98
  "rights_list" => rights_list,
99
99
  "version" => meta.fetch("version", nil),
100
100
  "subjects" => subjects,
@@ -24,20 +24,20 @@ module Bolognese
24
24
  author = get_authors(from_schema_org(Array.wrap(meta.fetch("agents", nil))))
25
25
  contributor = get_authors(from_schema_org(Array.wrap(meta.fetch("editor", nil))))
26
26
  dates = []
27
- dates << { "date" => meta.fetch("datePublished"), "date_type" => "Issued" } if meta.fetch("datePublished", nil).present?
28
- dates << { "date" => meta.fetch("dateCreated"), "date_type" => "Created" } if meta.fetch("dateCreated", nil).present?
29
- dates << { "date" => meta.fetch("dateModified"), "date_type" => "Updated" } if meta.fetch("dateModified", nil).present?
27
+ dates << { "date" => meta.fetch("datePublished"), "dateType" => "Issued" } if meta.fetch("datePublished", nil).present?
28
+ dates << { "date" => meta.fetch("dateCreated"), "dateType" => "Created" } if meta.fetch("dateCreated", nil).present?
29
+ dates << { "date" => meta.fetch("dateModified"), "dateType" => "Updated" } if meta.fetch("dateModified", nil).present?
30
30
  publication_year = meta.fetch("datePublished")[0..3] if meta.fetch("datePublished", nil).present?
31
31
  publisher = meta.fetch("publisher", nil)
32
32
  state = meta.present? ? "findable" : "not_found"
33
- type = meta.fetch("@type", nil)
33
+ schema_org = meta.fetch("@type", nil)
34
34
  types = {
35
- "type" => type,
36
- "resource_type_general" => Bolognese::Utils::SO_TO_DC_TRANSLATIONS[type],
37
- "resource_type" => meta.fetch("additionalType", nil),
38
- "citeproc" => Bolognese::Utils::SO_TO_CP_TRANSLATIONS[type] || "article-journal",
39
- "bibtex" => Bolognese::Utils::SO_TO_BIB_TRANSLATIONS[type] || "misc",
40
- "ris" => Bolognese::Utils::SO_TO_RIS_TRANSLATIONS[type] || "GEN"
35
+ "resourceTypeGeneral" => Bolognese::Utils::SO_TO_DC_TRANSLATIONS[schema_org],
36
+ "resourceType" => meta.fetch("additionalType", nil),
37
+ "schemaOrg" => schema_org,
38
+ "citeproc" => Bolognese::Utils::SO_TO_CP_TRANSLATIONS[schema_org] || "article-journal",
39
+ "bibtex" => Bolognese::Utils::SO_TO_BIB_TRANSLATIONS[schema_org] || "misc",
40
+ "ris" => Bolognese::Utils::SO_TO_RIS_TRANSLATIONS[schema_org] || "GEN"
41
41
  }.compact
42
42
  subjects = Array.wrap(meta.fetch("tags", nil)).map do |s|
43
43
  { "subject" => s }
@@ -55,8 +55,8 @@ module Bolognese
55
55
  #{}"is_part_of" => is_part_of,
56
56
  "dates" => dates,
57
57
  "publication_year" => publication_year,
58
- "descriptions" => meta.fetch("description", nil).present? ? [{ "description" => sanitize(meta.fetch("description")) }] : nil,
59
- "rights_list" => [{ "rights_uri" => meta.fetch("license", nil) }.compact],
58
+ "descriptions" => meta.fetch("description", nil).present? ? [{ "description" => sanitize(meta.fetch("description")), "descriptionType" => "Abstract" }] : nil,
59
+ "rights_list" => [{ "rightsUri" => meta.fetch("license", nil) }.compact],
60
60
  "version" => meta.fetch("version", nil),
61
61
  "subjects" => subjects,
62
62
  "state" => state
@@ -71,11 +71,11 @@ module Bolognese
71
71
  end
72
72
 
73
73
  resource_type = (resource_type || model).to_s.underscore.camelize.presence
74
- type = Bolognese::Utils::CR_TO_SO_TRANSLATIONS[resource_type] || "ScholarlyArticle"
74
+ schema_org = Bolognese::Utils::CR_TO_SO_TRANSLATIONS[resource_type] || "ScholarlyArticle"
75
75
  types = {
76
- "type" => type,
77
- "resource_type_general" => Bolognese::Utils::SO_TO_DC_TRANSLATIONS[type],
78
- "resource_type" => resource_type,
76
+ "resourceTypeGeneral" => Bolognese::Utils::SO_TO_DC_TRANSLATIONS[schema_org],
77
+ "resourceType" => resource_type,
78
+ "schemaOrg" => schema_org,
79
79
  "citeproc" => Bolognese::Utils::CR_TO_CP_TRANSLATIONS[resource_type] || "article-journal",
80
80
  "bibtex" => Bolognese::Utils::CR_TO_BIB_TRANSLATIONS[resource_type] || "misc",
81
81
  "ris" => Bolognese::Utils::CR_TO_RIS_TRANSLATIONS[resource_type] || "JOUR"
@@ -86,9 +86,9 @@ module Bolognese
86
86
  Time.zone = 'Eastern Time (US & Canada)'
87
87
  dates = [
88
88
  { "date" => crossref_date_published(bibliographic_metadata),
89
- "date_type" => "Issued" },
89
+ "dateType" => "Issued" },
90
90
  { "date" => Time.zone.parse(meta.fetch("timestamp", "2018-01-01")).utc.iso8601,
91
- "date_type" => "Updated" }
91
+ "dateType" => "Updated" }
92
92
  ]
93
93
  publication_year = crossref_date_published(bibliographic_metadata).present? ? crossref_date_published(bibliographic_metadata)[0..3] : nil
94
94
  state = meta.present? ? "findable" : "not_found"
@@ -113,7 +113,7 @@ module Bolognese
113
113
  "funding_references" => crossref_funding_reference(program_metadata),
114
114
  "publisher" => publisher,
115
115
  "periodical" => periodical,
116
- "service_provider" => "Crossref",
116
+ "source" => "Crossref",
117
117
  "related_identifiers" => related_identifiers,
118
118
  "dates" => dates,
119
119
  "publication_year" => publication_year,
@@ -134,21 +134,21 @@ module Bolognese
134
134
 
135
135
  def crossref_alternate_identifiers(bibliographic_metadata)
136
136
  if bibliographic_metadata.fetch("publisher_item", nil).present?
137
- { "alternate_identifier" => parse_attributes(bibliographic_metadata.dig("publisher_item", "item_number")),
138
- "alternate_identifier_type" => "Publisher ID" }
137
+ { "alternateIdentifier" => parse_attributes(bibliographic_metadata.dig("publisher_item", "item_number")),
138
+ "alternateIdentifierType" => "Publisher ID" }
139
139
  else
140
- { "alternate_identifier" => parse_attributes(bibliographic_metadata.fetch("item_number", nil)),
141
- "alternate_identifier_type" => "Publisher ID" }
140
+ { "alternateIdentifier" => parse_attributes(bibliographic_metadata.fetch("item_number", nil)),
141
+ "alternateIdentifierType" => "Publisher ID" }
142
142
  end
143
143
  end
144
144
 
145
145
  def crossref_description(bibliographic_metadata)
146
146
  abstract = Array.wrap(bibliographic_metadata.dig("abstract")).map do |r|
147
- { "description_type" => "Abstract", "description" => sanitize(parse_attributes(r, content: 'p')) }.compact
147
+ { "descriptionType" => "Abstract", "description" => sanitize(parse_attributes(r, content: 'p')) }.compact
148
148
  end
149
149
 
150
150
  description = Array.wrap(bibliographic_metadata.dig("description")).map do |r|
151
- { "description_type" => "Other", "description" => sanitize(parse_attributes(r)) }.compact
151
+ { "descriptionType" => "Other", "description" => sanitize(parse_attributes(r)) }.compact
152
152
  end
153
153
 
154
154
  (abstract + description)
@@ -158,7 +158,7 @@ module Bolognese
158
158
  access_indicator = Array.wrap(program_metadata).find { |m| m["name"] == "AccessIndicators" }
159
159
  if access_indicator.present?
160
160
  Array.wrap(access_indicator["license_ref"]).map do |license|
161
- { "rights_uri" => normalize_url(parse_attributes(license)) }
161
+ { "rightsUri" => normalize_url(parse_attributes(license)) }
162
162
  end.uniq
163
163
  else
164
164
  nil
@@ -185,12 +185,12 @@ module Bolognese
185
185
  funder_identifier_type = funder_identifier.present? ? "Crossref Funder ID" : nil
186
186
  award_title = f.fetch("awardTitle", nil).present? ? f.fetch("awardTitle") : nil
187
187
 
188
- { "funder_identifier" => funder_identifier,
189
- "funder_identifier_type" => funder_identifier_type,
190
- "funder_name" => f.fetch("__content__", "").strip,
191
- "award_title" => award_title,
192
- "award_number" => f.dig("awardNumber", "__content__"),
193
- "award_uri" => f.dig("awardNumber", "awardURI") }.compact
188
+ { "funderIdentifier" => funder_identifier,
189
+ "funderIdentifierType" => funder_identifier_type,
190
+ "funderName" => f.fetch("__content__", "").strip,
191
+ "awardTitle" => award_title,
192
+ "awardNumber" => f.dig("awardNumber", "__content__"),
193
+ "awardUri" => f.dig("awardNumber", "awardURI") }.compact
194
194
  end
195
195
  end
196
196
 
@@ -206,11 +206,10 @@ module Bolognese
206
206
 
207
207
  def crossref_is_part_of(model_metadata)
208
208
  if model_metadata.present? && model_metadata.fetch("issn", nil).present?
209
- { "related_identifier" => parse_attributes(model_metadata.fetch("issn", nil), first: true),
210
- "relation_type" => "IsPartOf",
211
- "related_identifier_type" => "ISSN",
212
- "type" => "Periodical",
213
- "title" => model_metadata["full_title"] }.compact
209
+ { "relatedIdentifier" => parse_attributes(model_metadata.fetch("issn", nil), first: true),
210
+ "relationType" => "IsPartOf",
211
+ "relatedIdentifierType" => "ISSN",
212
+ "resourceTypeGeneral" => "Collection" }.compact
214
213
  else
215
214
  nil
216
215
  end
@@ -220,10 +219,9 @@ module Bolognese
220
219
  refs = bibliographic_metadata.dig("citation_list", "citation")
221
220
  Array.wrap(refs).select { |a| a["doi"].present? }.map do |c|
222
221
  if c["doi"].present?
223
- { "related_identifier" => parse_attributes(c["doi"]).downcase,
224
- "relation_type" => "References",
225
- "related_identifier_type" => "DOI",
226
- "title" => c["article_title"] }.compact
222
+ { "relatedIdentifier" => parse_attributes(c["doi"]).downcase,
223
+ "relationType" => "References",
224
+ "relatedIdentifierType" => "DOI" }.compact
227
225
  else
228
226
  nil
229
227
  end