bolognese 1.0.7 → 1.0.8
Sign up to get free protection for your applications and to get access to all the features.
- 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
|