bolognese 1.0.7 → 1.0.8

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 (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