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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/bolognese/datacite_utils.rb +23 -23
- data/lib/bolognese/metadata.rb +5 -1
- data/lib/bolognese/metadata_utils.rb +10 -14
- data/lib/bolognese/readers/bibtex_reader.rb +9 -9
- data/lib/bolognese/readers/citeproc_reader.rb +12 -12
- data/lib/bolognese/readers/codemeta_reader.rb +12 -12
- data/lib/bolognese/readers/crossref_reader.rb +27 -29
- data/lib/bolognese/readers/datacite_json_reader.rb +19 -28
- data/lib/bolognese/readers/datacite_reader.rb +37 -37
- data/lib/bolognese/readers/ris_reader.rb +9 -9
- data/lib/bolognese/readers/schema_org_reader.rb +37 -32
- data/lib/bolognese/utils.rb +31 -34
- data/lib/bolognese/version.rb +1 -1
- data/lib/bolognese/writers/codemeta_writer.rb +1 -1
- data/lib/bolognese/writers/crosscite_writer.rb +1 -1
- data/lib/bolognese/writers/datacite_json_writer.rb +10 -10
- data/lib/bolognese/writers/jats_writer.rb +1 -1
- data/lib/bolognese/writers/ris_writer.rb +1 -1
- data/lib/bolognese/writers/schema_org_writer.rb +6 -6
- data/spec/datacite_utils_spec.rb +1 -1
- data/spec/fixtures/crosscite.json +8 -8
- data/spec/fixtures/datacite.json +22 -22
- data/spec/readers/bibtex_reader_spec.rb +6 -6
- data/spec/readers/citeproc_reader_spec.rb +2 -2
- data/spec/readers/codemeta_reader_spec.rb +8 -8
- data/spec/readers/crosscite_reader_spec.rb +4 -4
- data/spec/readers/crossref_reader_spec.rb +56 -59
- data/spec/readers/datacite_json_reader_spec.rb +7 -7
- data/spec/readers/datacite_reader_spec.rb +193 -194
- data/spec/readers/ris_reader_spec.rb +5 -5
- data/spec/readers/schema_org_reader_spec.rb +31 -32
- data/spec/utils_spec.rb +4 -4
- data/spec/writers/crosscite_writer_spec.rb +10 -13
- data/spec/writers/datacite_json_writer_spec.rb +9 -9
- data/spec/writers/datacite_writer_spec.rb +24 -26
- data/spec/writers/schema_org_writer_spec.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b10b2f30664bc415fa1bcc606b4c2db35132391c72294cc4d20ec10652906c3c
|
4
|
+
data.tar.gz: ad15c83b54c9d02b3af165d44c83bb20029e30f33e902c5ba8c61f5356b66171
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62fb8fa37d0b75f493410e74335b76d3a1cd7c8d31331478c4da873355059bc50831e4a71f05f8f0021fe7c72628c687107155c79e05b0d9cb97ba17fddcdd71
|
7
|
+
data.tar.gz: ab4a88be3953d2303ab47b17efe90e59e4aee8624b62f91566652a3bf37856d370237cf11cb438d0266af8d46181b59b0271ff90019b53cc34f6b114b39453eb
|
data/Gemfile.lock
CHANGED
@@ -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["
|
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["
|
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["
|
103
|
+
return xml unless types["schemaOrg"].present?
|
104
104
|
|
105
|
-
xml.resourceType(types["
|
106
|
-
'resourceTypeGeneral' => types["
|
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["
|
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["
|
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["
|
137
|
-
xml.funderIdentifier(funding_reference["
|
138
|
-
xml.awardNumber(funding_reference["
|
139
|
-
xml.awardTitle(funding_reference["
|
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["
|
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["
|
177
|
-
'relationType' => related_identifier["
|
178
|
-
'resourceTypeGeneral' => related_identifier["
|
176
|
+
'relatedIdentifierType' => related_identifier["relatedIdentifierType"],
|
177
|
+
'relationType' => related_identifier["relationType"],
|
178
|
+
'resourceTypeGeneral' => related_identifier["resourceTypeGeneral"] }.compact
|
179
179
|
|
180
|
-
attributes.merge({ 'relatedMetadataScheme' => related_identifier["
|
181
|
-
'schemeURI' => related_identifier["
|
182
|
-
'schemeType' => related_identifier["
|
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["
|
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["
|
199
|
+
r["rightsUri"] = normalize_id(rights)
|
200
200
|
end
|
201
201
|
|
202
|
-
attributes = { 'rightsURI' => r["
|
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["
|
223
|
+
d["descriptionType"] = "Abstract"
|
224
224
|
end
|
225
225
|
|
226
|
-
attributes = { 'lang' => d["lang"], 'descriptionType' => d["
|
226
|
+
attributes = { 'lang' => d["lang"], 'descriptionType' => d["descriptionType"] || "Abstract" }.compact
|
227
227
|
|
228
228
|
xml.description(d["description"], attributes)
|
229
229
|
end
|
data/lib/bolognese/metadata.rb
CHANGED
@@ -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, :
|
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["
|
106
|
-
{ "@id" => normalize_doi(r["
|
107
|
-
"@type" => r["
|
108
|
-
"identifier" => r["
|
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["
|
111
|
-
{ "@id" => normalize_doi(r["
|
112
|
-
"@type" => r["
|
113
|
-
"identifier" => r["
|
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["
|
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
|
-
|
32
|
+
schema_org = BIB_TO_SO_TRANSLATIONS[meta.try(:type).to_s] || "ScholarlyArticle"
|
33
33
|
types = {
|
34
|
-
"
|
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
|
-
"
|
53
|
-
"
|
52
|
+
"relationType" => "IsPartOf",
|
53
|
+
"relatedIdentifierType" => "ISSN",
|
54
54
|
"title" => meta.journal.to_s,
|
55
|
-
"
|
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
|
-
"
|
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" => [{ "
|
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
|
-
|
37
|
+
schema_org = CP_TO_SO_TRANSLATIONS[citeproc_type] || "CreativeWork"
|
38
38
|
types = {
|
39
|
-
"
|
40
|
-
"
|
41
|
-
"
|
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[
|
44
|
-
"ris" => CP_TO_RIS_TRANSLATIONS[
|
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
|
-
"
|
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
|
-
[{ "
|
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
|
-
"
|
64
|
-
"
|
63
|
+
"relationType" => "IsPartOf",
|
64
|
+
"relatedIdentifierType" => "ISSN",
|
65
65
|
"title" => meta.fetch("container-title", nil),
|
66
|
-
"
|
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"), "
|
28
|
-
dates << { "date" => meta.fetch("dateCreated"), "
|
29
|
-
dates << { "date" => meta.fetch("dateModified"), "
|
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
|
-
|
33
|
+
schema_org = meta.fetch("@type", nil)
|
34
34
|
types = {
|
35
|
-
"
|
36
|
-
"
|
37
|
-
"
|
38
|
-
"citeproc" => Bolognese::Utils::SO_TO_CP_TRANSLATIONS[
|
39
|
-
"bibtex" => Bolognese::Utils::SO_TO_BIB_TRANSLATIONS[
|
40
|
-
"ris" => Bolognese::Utils::SO_TO_RIS_TRANSLATIONS[
|
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" => [{ "
|
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
|
-
|
74
|
+
schema_org = Bolognese::Utils::CR_TO_SO_TRANSLATIONS[resource_type] || "ScholarlyArticle"
|
75
75
|
types = {
|
76
|
-
"
|
77
|
-
"
|
78
|
-
"
|
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
|
-
"
|
89
|
+
"dateType" => "Issued" },
|
90
90
|
{ "date" => Time.zone.parse(meta.fetch("timestamp", "2018-01-01")).utc.iso8601,
|
91
|
-
"
|
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
|
-
"
|
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
|
-
{ "
|
138
|
-
"
|
137
|
+
{ "alternateIdentifier" => parse_attributes(bibliographic_metadata.dig("publisher_item", "item_number")),
|
138
|
+
"alternateIdentifierType" => "Publisher ID" }
|
139
139
|
else
|
140
|
-
{ "
|
141
|
-
"
|
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
|
-
{ "
|
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
|
-
{ "
|
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
|
-
{ "
|
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
|
-
{ "
|
189
|
-
"
|
190
|
-
"
|
191
|
-
"
|
192
|
-
"
|
193
|
-
"
|
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
|
-
{ "
|
210
|
-
"
|
211
|
-
"
|
212
|
-
"
|
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
|
-
{ "
|
224
|
-
"
|
225
|
-
"
|
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
|