bolognese 0.9.5 → 0.9.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -2
- data/bolognese.gemspec +1 -0
- data/lib/bolognese.rb +1 -1
- data/lib/bolognese/crossref.rb +3 -1
- data/lib/bolognese/datacite.rb +3 -13
- data/lib/bolognese/datacite_utils.rb +6 -4
- data/lib/bolognese/metadata.rb +3 -203
- data/lib/bolognese/utils.rb +207 -2
- data/lib/bolognese/version.rb +1 -1
- data/spec/cli_spec.rb +5 -5
- data/spec/datacite_spec.rb +8 -7
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3d7e93701080fa5283292b961de72db0826a507
|
4
|
+
data.tar.gz: 49932167206fa2b04e1d16f20097a82264eeb02b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f98dc3e1fe55fd077ffd166e38db5535181adafaa12117d65894ad88324e12958585f0d23eb3c2aac2cadbf08c44abc3eb4770f4e0a696d5ae73ad183ebc74e
|
7
|
+
data.tar.gz: c6eb619fef41ba0b811820e590365e238617f6bdad8c312688e9186fdd7a542a04a1e920e53d7c0923502cc3153a86ac4e7dedd5b0fb93f5f165a9119bdc9b18
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bolognese (0.9.
|
4
|
+
bolognese (0.9.6)
|
5
5
|
activesupport (>= 4.2.5, < 6)
|
6
|
+
benchmark_methods (~> 0.7)
|
6
7
|
bibtex-ruby (~> 4.1)
|
7
8
|
builder (~> 3.2, >= 3.2.2)
|
8
9
|
colorize (~> 0.8.1)
|
@@ -27,6 +28,7 @@ GEM
|
|
27
28
|
tzinfo (~> 1.1)
|
28
29
|
addressable (2.5.1)
|
29
30
|
public_suffix (~> 2.0, >= 2.0.2)
|
31
|
+
benchmark_methods (0.7)
|
30
32
|
bibtex-ruby (4.4.3)
|
31
33
|
latex-decode (~> 0.0)
|
32
34
|
builder (3.2.3)
|
@@ -55,7 +57,7 @@ GEM
|
|
55
57
|
hashdiff (0.3.2)
|
56
58
|
htmlentities (4.3.4)
|
57
59
|
i18n (0.8.1)
|
58
|
-
json (2.0
|
60
|
+
json (2.1.0)
|
59
61
|
json-ld (2.1.2)
|
60
62
|
multi_json (~> 1.12)
|
61
63
|
rdf (~> 2.1)
|
data/bolognese.gemspec
CHANGED
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
s.add_dependency 'jsonlint', '~> 0.2.0'
|
30
30
|
s.add_dependency 'rdf-turtle', '~> 2.2'
|
31
31
|
s.add_dependency 'rdf-rdfxml', '~> 2.0'
|
32
|
+
s.add_dependency 'benchmark_methods', '~> 0.7'
|
32
33
|
s.add_development_dependency 'bundler', '~> 1.0'
|
33
34
|
s.add_development_dependency 'rspec', '~> 3.4'
|
34
35
|
s.add_development_dependency 'rspec-xsd', '~> 0.1.0'
|
data/lib/bolognese.rb
CHANGED
data/lib/bolognese/crossref.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module Bolognese
|
2
2
|
class Crossref < Metadata
|
3
|
-
|
4
3
|
# CrossRef types from https://api.crossref.org/types
|
5
4
|
CR_TO_SO_TRANSLATIONS = {
|
6
5
|
"Proceedings" => nil,
|
@@ -108,6 +107,7 @@ module Bolognese
|
|
108
107
|
end
|
109
108
|
|
110
109
|
def journal_metadata
|
110
|
+
@journal_metadata ||=
|
111
111
|
metadata.dig("crossref", "journal", "journal_metadata").presence || {}
|
112
112
|
end
|
113
113
|
|
@@ -116,12 +116,14 @@ module Bolognese
|
|
116
116
|
end
|
117
117
|
|
118
118
|
def bibliographic_metadata
|
119
|
+
@bibliographic_metadata ||=
|
119
120
|
metadata.dig("crossref", "journal", "journal_article").presence ||
|
120
121
|
metadata.dig("crossref", "conference", "conference_paper").presence ||
|
121
122
|
metadata.dig("crossref", metadata.fetch("crossref", {}).keys.last).presence || {}
|
122
123
|
end
|
123
124
|
|
124
125
|
def program_metadata
|
126
|
+
@program_metadata ||=
|
125
127
|
bibliographic_metadata.dig("program") ||
|
126
128
|
bibliographic_metadata.dig("crossmark", "custom_metadata", "program") || {}
|
127
129
|
end
|
data/lib/bolognese/datacite.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
module Bolognese
|
2
2
|
class Datacite < Metadata
|
3
|
-
|
4
|
-
SCHEMA = File.expand_path("../../../resources/kernel-4.0/metadata.xsd", __FILE__)
|
5
|
-
|
6
3
|
def initialize(id: nil, string: nil, regenerate: false)
|
7
4
|
id = normalize_doi(id) if id.present?
|
8
5
|
|
@@ -15,7 +12,8 @@ module Bolognese
|
|
15
12
|
attributes = response.body.dig("data", "response", "docs").first
|
16
13
|
@raw = attributes.fetch('xml', "PGhzaD48L2hzaD4=\n")
|
17
14
|
@raw = Base64.decode64(@raw)
|
18
|
-
@
|
15
|
+
@doc = Nokogiri::XML(@raw, nil, 'UTF-8', &:noblanks) if @raw.present?
|
16
|
+
@raw = @doc.to_s if @raw.present?
|
19
17
|
end
|
20
18
|
|
21
19
|
@should_passthru = !regenerate
|
@@ -39,21 +37,13 @@ module Bolognese
|
|
39
37
|
end
|
40
38
|
|
41
39
|
def errors
|
42
|
-
|
43
|
-
rescue Nokogiri::XML::SyntaxError => e
|
44
|
-
e.message
|
40
|
+
doc && doc.errors.map { |error| error.to_s }.unwrap
|
45
41
|
end
|
46
42
|
|
47
43
|
def schema_version
|
48
44
|
metadata.fetch("xmlns", nil)
|
49
45
|
end
|
50
46
|
|
51
|
-
def schema
|
52
|
-
kernel = schema_version.split("/").last
|
53
|
-
filepath = File.expand_path("../../../resources/#{kernel}/metadata.xsd", __FILE__)
|
54
|
-
Nokogiri::XML::Schema(open(filepath))
|
55
|
-
end
|
56
|
-
|
57
47
|
def doi
|
58
48
|
metadata.fetch("identifier", {}).fetch("__content__", nil)
|
59
49
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Bolognese
|
2
2
|
module DataciteUtils
|
3
|
-
SCHEMA = File.expand_path("../../../resources/kernel-4.0/metadata.xsd", __FILE__)
|
4
|
-
|
5
3
|
def schema
|
6
|
-
|
4
|
+
kernel = schema_version.split("/").last || "kernel-4.0"
|
5
|
+
filepath = File.expand_path("../../../resources/#{kernel}/metadata.xsd", __FILE__)
|
6
|
+
Nokogiri::XML::Schema(open(filepath))
|
7
7
|
end
|
8
8
|
|
9
9
|
def datacite_xml
|
@@ -19,7 +19,9 @@ module Bolognese
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def datacite_errors
|
22
|
-
|
22
|
+
schema.validate(Nokogiri::XML(datacite, nil, 'UTF-8')).map { |error| error.to_s }.unwrap
|
23
|
+
rescue Nokogiri::XML::SyntaxError => e
|
24
|
+
e.message
|
23
25
|
end
|
24
26
|
|
25
27
|
def insert_work(xml)
|
data/lib/bolognese/metadata.rb
CHANGED
@@ -6,212 +6,19 @@ require_relative 'utils'
|
|
6
6
|
|
7
7
|
module Bolognese
|
8
8
|
class Metadata
|
9
|
+
# include BenchmarkMethods
|
9
10
|
include Bolognese::DoiUtils
|
10
11
|
include Bolognese::AuthorUtils
|
11
12
|
include Bolognese::DateUtils
|
12
13
|
include Bolognese::DataciteUtils
|
13
14
|
include Bolognese::Utils
|
14
15
|
|
15
|
-
|
16
|
-
"Audiovisual" => "VideoObject",
|
17
|
-
"Collection" => "Collection",
|
18
|
-
"Dataset" => "Dataset",
|
19
|
-
"Event" => "Event",
|
20
|
-
"Image" => "ImageObject",
|
21
|
-
"InteractiveResource" => nil,
|
22
|
-
"Model" => nil,
|
23
|
-
"PhysicalObject" => nil,
|
24
|
-
"Service" => "Service",
|
25
|
-
"Software" => "SoftwareSourceCode",
|
26
|
-
"Sound" => "AudioObject",
|
27
|
-
"Text" => "ScholarlyArticle",
|
28
|
-
"Workflow" => nil,
|
29
|
-
"Other" => "CreativeWork"
|
30
|
-
}
|
31
|
-
|
32
|
-
DC_TO_CP_TRANSLATIONS = {
|
33
|
-
"Audiovisual" => "motion_picture",
|
34
|
-
"Collection" => nil,
|
35
|
-
"Dataset" => "dataset",
|
36
|
-
"Event" => nil,
|
37
|
-
"Image" => "graphic",
|
38
|
-
"InteractiveResource" => nil,
|
39
|
-
"Model" => nil,
|
40
|
-
"PhysicalObject" => nil,
|
41
|
-
"Service" => nil,
|
42
|
-
"Software" => "computer_program",
|
43
|
-
"Sound" => "song",
|
44
|
-
"Text" => "report",
|
45
|
-
"Workflow" => nil,
|
46
|
-
"Other" => nil
|
47
|
-
}
|
48
|
-
|
49
|
-
CR_TO_CP_TRANSLATIONS = {
|
50
|
-
"proceedings" => nil,
|
51
|
-
"reference-book" => nil,
|
52
|
-
"journal-issue" => nil,
|
53
|
-
"proceedings-article" => "paper-conference",
|
54
|
-
"other" => nil,
|
55
|
-
"dissertation" => "thesis",
|
56
|
-
"dataset" => "dataset",
|
57
|
-
"edited-book" => "book",
|
58
|
-
"journal-article" => "article-journal",
|
59
|
-
"journal" => nil,
|
60
|
-
"report" => "report",
|
61
|
-
"book-series" => nil,
|
62
|
-
"report-series" => nil,
|
63
|
-
"book-track" => nil,
|
64
|
-
"standard" => nil,
|
65
|
-
"book-section" => "chapter",
|
66
|
-
"book-part" => nil,
|
67
|
-
"book" => "book",
|
68
|
-
"book-chapter" => "chapter",
|
69
|
-
"standard-series" => nil,
|
70
|
-
"monograph" => "book",
|
71
|
-
"component" => nil,
|
72
|
-
"reference-entry" => "entry-dictionary",
|
73
|
-
"journal-volume" => nil,
|
74
|
-
"book-set" => nil
|
75
|
-
}
|
76
|
-
|
77
|
-
SO_TO_DC_TRANSLATIONS = {
|
78
|
-
"Article" => "Text",
|
79
|
-
"AudioObject" => "Sound",
|
80
|
-
"Blog" => "Text",
|
81
|
-
"BlogPosting" => "Text",
|
82
|
-
"Collection" => "Collection",
|
83
|
-
"CreativeWork" => "Other",
|
84
|
-
"DataCatalog" => "Dataset",
|
85
|
-
"Dataset" => "Dataset",
|
86
|
-
"Event" => "Event",
|
87
|
-
"ImageObject" => "Image",
|
88
|
-
"Movie" => "Audiovisual",
|
89
|
-
"PublicationIssue" => "Text",
|
90
|
-
"ScholarlyArticle" => "Text",
|
91
|
-
"Service" => "Service",
|
92
|
-
"SoftwareSourceCode" => "Software",
|
93
|
-
"VideoObject" => "Audiovisual",
|
94
|
-
"WebPage" => "Text",
|
95
|
-
"WebSite" => "Text"
|
96
|
-
}
|
97
|
-
|
98
|
-
SO_TO_CP_TRANSLATIONS = {
|
99
|
-
"Article" => "",
|
100
|
-
"AudioObject" => "song",
|
101
|
-
"Blog" => "report",
|
102
|
-
"BlogPosting" => "post-weblog",
|
103
|
-
"Collection" => nil,
|
104
|
-
"CreativeWork" => nil,
|
105
|
-
"DataCatalog" => "dataset",
|
106
|
-
"Dataset" => "dataset",
|
107
|
-
"Event" => nil,
|
108
|
-
"ImageObject" => "graphic",
|
109
|
-
"Movie" => "motion_picture",
|
110
|
-
"PublicationIssue" => nil,
|
111
|
-
"ScholarlyArticle" => "article-journal",
|
112
|
-
"Service" => nil,
|
113
|
-
"SoftwareSourceCode" => "computer_program",
|
114
|
-
"VideoObject" => "broadcast",
|
115
|
-
"WebPage" => "webpage",
|
116
|
-
"WebSite" => "webpage"
|
117
|
-
}
|
118
|
-
|
119
|
-
CP_TO_SO_TRANSLATIONS = {
|
120
|
-
"song" => "AudioObject",
|
121
|
-
"post-weblog" => "BlogPosting",
|
122
|
-
"dataset" => "Dataset",
|
123
|
-
"graphic" => "ImageObject",
|
124
|
-
"motion_picture" => "Movie",
|
125
|
-
"article-journal" => "ScholarlyArticle",
|
126
|
-
"computer_program" => "SoftwareSourceCode",
|
127
|
-
"broadcast" => "VideoObject",
|
128
|
-
"webpage" => "WebPage"
|
129
|
-
}
|
130
|
-
|
131
|
-
SO_TO_RIS_TRANSLATIONS = {
|
132
|
-
"Article" => nil,
|
133
|
-
"AudioObject" => nil,
|
134
|
-
"Blog" => nil,
|
135
|
-
"BlogPosting" => "BLOG",
|
136
|
-
"Collection" => nil,
|
137
|
-
"CreativeWork" => "GEN",
|
138
|
-
"DataCatalog" => "CTLG",
|
139
|
-
"Dataset" => "DATA",
|
140
|
-
"Event" => nil,
|
141
|
-
"ImageObject" => "FIGURE",
|
142
|
-
"Movie" => "MPCT",
|
143
|
-
"PublicationIssue" => nil,
|
144
|
-
"ScholarlyArticle" => "JOUR",
|
145
|
-
"Service" => nil,
|
146
|
-
"SoftwareSourceCode" => "COMP",
|
147
|
-
"VideoObject" => "VIDEO",
|
148
|
-
"WebPage" => "ELEC",
|
149
|
-
"WebSite" => nil
|
150
|
-
}
|
151
|
-
|
152
|
-
CR_TO_RIS_TRANSLATIONS = {
|
153
|
-
"proceedings" => "CONF",
|
154
|
-
"reference-book" => "BOOK",
|
155
|
-
"journal-issue" => nil,
|
156
|
-
"proceedings-article" => "CPAPER",
|
157
|
-
"other" => "GEN",
|
158
|
-
"dissertation" => "THES",
|
159
|
-
"dataset" => "DATA",
|
160
|
-
"edited-book" => "BOOK",
|
161
|
-
"journal-article" => "JOUR",
|
162
|
-
"journal" => nil,
|
163
|
-
"report" => nil,
|
164
|
-
"book-series" => nil,
|
165
|
-
"report-series" => nil,
|
166
|
-
"book-track" => nil,
|
167
|
-
"standard" => nil,
|
168
|
-
"book-section" => "CHAP",
|
169
|
-
"book-part" => "CHAP",
|
170
|
-
"book" => "BOOK",
|
171
|
-
"book-chapter" => "CHAP",
|
172
|
-
"standard-series" => nil,
|
173
|
-
"monograph" => "BOOK",
|
174
|
-
"component" => nil,
|
175
|
-
"reference-entry" => "DICT",
|
176
|
-
"journal-volume" => nil,
|
177
|
-
"book-set" => nil
|
178
|
-
}
|
179
|
-
|
180
|
-
DC_TO_RIS_TRANSLATIONS = {
|
181
|
-
"Audiovisual" => "MPCT",
|
182
|
-
"Collection" => nil,
|
183
|
-
"Dataset" => "DATA",
|
184
|
-
"Event" => nil,
|
185
|
-
"Image" => "FIGURE",
|
186
|
-
"InteractiveResource" => nil,
|
187
|
-
"Model" => nil,
|
188
|
-
"PhysicalObject" => nil,
|
189
|
-
"Service" => nil,
|
190
|
-
"Software" => "COMP",
|
191
|
-
"Sound" => "SOUND",
|
192
|
-
"Text" => "RPRT",
|
193
|
-
"Workflow" => nil,
|
194
|
-
"Other" => nil
|
195
|
-
}
|
196
|
-
|
197
|
-
CP_TO_RIS_TRANSLATIONS = {
|
198
|
-
"post-weblog" => "BLOG",
|
199
|
-
"dataset" => "DATA",
|
200
|
-
"graphic" => "FIGURE",
|
201
|
-
"book" => "BOOK",
|
202
|
-
"motion_picture" => "MPCT",
|
203
|
-
"article-journal" => "JOUR",
|
204
|
-
"computer_program" => "COMP",
|
205
|
-
"broadcast" => "MPCT",
|
206
|
-
"webpage" => "ELEC"
|
207
|
-
}
|
208
|
-
|
209
|
-
attr_reader :id, :raw, :provider, :schema_version, :license, :citation,
|
16
|
+
attr_reader :id, :raw, :doc, :provider, :schema_version, :license, :citation,
|
210
17
|
:additional_type, :alternate_name, :url, :version, :keywords, :editor,
|
211
18
|
:page_start, :page_end, :date_modified, :language, :spatial_coverage,
|
212
19
|
:content_size, :funder, :journal, :bibtex_type, :date_created, :has_part,
|
213
20
|
:publisher, :contributor, :same_as, :is_previous_version_of, :is_new_version_of,
|
214
|
-
:should_passthru, :datacite_errors, :date_accepted, :date_available,
|
21
|
+
:should_passthru, :errors, :datacite_errors, :date_accepted, :date_available,
|
215
22
|
:date_copyrighted, :date_collected, :date_submitted, :date_valid,
|
216
23
|
:is_cited_by, :cites, :is_supplement_to, :is_supplemented_by,
|
217
24
|
:is_continued_by, :continues, :has_metadata, :is_metadata_for,
|
@@ -409,12 +216,5 @@ module Bolognese
|
|
409
216
|
"ER" => ""
|
410
217
|
}.compact.map { |k, v| v.is_a?(Array) ? v.map { |vi| "#{k} - #{vi}" }.join("\r\n") : "#{k} - #{v}" }.join("\r\n")
|
411
218
|
end
|
412
|
-
|
413
|
-
def jsonlint(json)
|
414
|
-
error_array = []
|
415
|
-
linter = JsonLint::Linter.new
|
416
|
-
linter.send(:check_data, json, error_array)
|
417
|
-
error_array
|
418
|
-
end
|
419
219
|
end
|
420
220
|
end
|
data/lib/bolognese/utils.rb
CHANGED
@@ -9,6 +9,200 @@ module Bolognese
|
|
9
9
|
"http://creativecommons.org/licenses/by-nc-nd/4.0/" => "Creative Commons Attribution Noncommercial No Derivatives 4.0 (CC-BY-NC-ND 4.0)"
|
10
10
|
}
|
11
11
|
|
12
|
+
DC_TO_SO_TRANSLATIONS = {
|
13
|
+
"Audiovisual" => "VideoObject",
|
14
|
+
"Collection" => "Collection",
|
15
|
+
"Dataset" => "Dataset",
|
16
|
+
"Event" => "Event",
|
17
|
+
"Image" => "ImageObject",
|
18
|
+
"InteractiveResource" => nil,
|
19
|
+
"Model" => nil,
|
20
|
+
"PhysicalObject" => nil,
|
21
|
+
"Service" => "Service",
|
22
|
+
"Software" => "SoftwareSourceCode",
|
23
|
+
"Sound" => "AudioObject",
|
24
|
+
"Text" => "ScholarlyArticle",
|
25
|
+
"Workflow" => nil,
|
26
|
+
"Other" => "CreativeWork"
|
27
|
+
}
|
28
|
+
|
29
|
+
DC_TO_CP_TRANSLATIONS = {
|
30
|
+
"Audiovisual" => "motion_picture",
|
31
|
+
"Collection" => nil,
|
32
|
+
"Dataset" => "dataset",
|
33
|
+
"Event" => nil,
|
34
|
+
"Image" => "graphic",
|
35
|
+
"InteractiveResource" => nil,
|
36
|
+
"Model" => nil,
|
37
|
+
"PhysicalObject" => nil,
|
38
|
+
"Service" => nil,
|
39
|
+
"Software" => "computer_program",
|
40
|
+
"Sound" => "song",
|
41
|
+
"Text" => "report",
|
42
|
+
"Workflow" => nil,
|
43
|
+
"Other" => nil
|
44
|
+
}
|
45
|
+
|
46
|
+
CR_TO_CP_TRANSLATIONS = {
|
47
|
+
"proceedings" => nil,
|
48
|
+
"reference-book" => nil,
|
49
|
+
"journal-issue" => nil,
|
50
|
+
"proceedings-article" => "paper-conference",
|
51
|
+
"other" => nil,
|
52
|
+
"dissertation" => "thesis",
|
53
|
+
"dataset" => "dataset",
|
54
|
+
"edited-book" => "book",
|
55
|
+
"journal-article" => "article-journal",
|
56
|
+
"journal" => nil,
|
57
|
+
"report" => "report",
|
58
|
+
"book-series" => nil,
|
59
|
+
"report-series" => nil,
|
60
|
+
"book-track" => nil,
|
61
|
+
"standard" => nil,
|
62
|
+
"book-section" => "chapter",
|
63
|
+
"book-part" => nil,
|
64
|
+
"book" => "book",
|
65
|
+
"book-chapter" => "chapter",
|
66
|
+
"standard-series" => nil,
|
67
|
+
"monograph" => "book",
|
68
|
+
"component" => nil,
|
69
|
+
"reference-entry" => "entry-dictionary",
|
70
|
+
"journal-volume" => nil,
|
71
|
+
"book-set" => nil
|
72
|
+
}
|
73
|
+
|
74
|
+
SO_TO_DC_TRANSLATIONS = {
|
75
|
+
"Article" => "Text",
|
76
|
+
"AudioObject" => "Sound",
|
77
|
+
"Blog" => "Text",
|
78
|
+
"BlogPosting" => "Text",
|
79
|
+
"Collection" => "Collection",
|
80
|
+
"CreativeWork" => "Other",
|
81
|
+
"DataCatalog" => "Dataset",
|
82
|
+
"Dataset" => "Dataset",
|
83
|
+
"Event" => "Event",
|
84
|
+
"ImageObject" => "Image",
|
85
|
+
"Movie" => "Audiovisual",
|
86
|
+
"PublicationIssue" => "Text",
|
87
|
+
"ScholarlyArticle" => "Text",
|
88
|
+
"Service" => "Service",
|
89
|
+
"SoftwareSourceCode" => "Software",
|
90
|
+
"VideoObject" => "Audiovisual",
|
91
|
+
"WebPage" => "Text",
|
92
|
+
"WebSite" => "Text"
|
93
|
+
}
|
94
|
+
|
95
|
+
SO_TO_CP_TRANSLATIONS = {
|
96
|
+
"Article" => "",
|
97
|
+
"AudioObject" => "song",
|
98
|
+
"Blog" => "report",
|
99
|
+
"BlogPosting" => "post-weblog",
|
100
|
+
"Collection" => nil,
|
101
|
+
"CreativeWork" => nil,
|
102
|
+
"DataCatalog" => "dataset",
|
103
|
+
"Dataset" => "dataset",
|
104
|
+
"Event" => nil,
|
105
|
+
"ImageObject" => "graphic",
|
106
|
+
"Movie" => "motion_picture",
|
107
|
+
"PublicationIssue" => nil,
|
108
|
+
"ScholarlyArticle" => "article-journal",
|
109
|
+
"Service" => nil,
|
110
|
+
"SoftwareSourceCode" => "computer_program",
|
111
|
+
"VideoObject" => "broadcast",
|
112
|
+
"WebPage" => "webpage",
|
113
|
+
"WebSite" => "webpage"
|
114
|
+
}
|
115
|
+
|
116
|
+
CP_TO_SO_TRANSLATIONS = {
|
117
|
+
"song" => "AudioObject",
|
118
|
+
"post-weblog" => "BlogPosting",
|
119
|
+
"dataset" => "Dataset",
|
120
|
+
"graphic" => "ImageObject",
|
121
|
+
"motion_picture" => "Movie",
|
122
|
+
"article-journal" => "ScholarlyArticle",
|
123
|
+
"computer_program" => "SoftwareSourceCode",
|
124
|
+
"broadcast" => "VideoObject",
|
125
|
+
"webpage" => "WebPage"
|
126
|
+
}
|
127
|
+
|
128
|
+
SO_TO_RIS_TRANSLATIONS = {
|
129
|
+
"Article" => nil,
|
130
|
+
"AudioObject" => nil,
|
131
|
+
"Blog" => nil,
|
132
|
+
"BlogPosting" => "BLOG",
|
133
|
+
"Collection" => nil,
|
134
|
+
"CreativeWork" => "GEN",
|
135
|
+
"DataCatalog" => "CTLG",
|
136
|
+
"Dataset" => "DATA",
|
137
|
+
"Event" => nil,
|
138
|
+
"ImageObject" => "FIGURE",
|
139
|
+
"Movie" => "MPCT",
|
140
|
+
"PublicationIssue" => nil,
|
141
|
+
"ScholarlyArticle" => "JOUR",
|
142
|
+
"Service" => nil,
|
143
|
+
"SoftwareSourceCode" => "COMP",
|
144
|
+
"VideoObject" => "VIDEO",
|
145
|
+
"WebPage" => "ELEC",
|
146
|
+
"WebSite" => nil
|
147
|
+
}
|
148
|
+
|
149
|
+
CR_TO_RIS_TRANSLATIONS = {
|
150
|
+
"proceedings" => "CONF",
|
151
|
+
"reference-book" => "BOOK",
|
152
|
+
"journal-issue" => nil,
|
153
|
+
"proceedings-article" => "CPAPER",
|
154
|
+
"other" => "GEN",
|
155
|
+
"dissertation" => "THES",
|
156
|
+
"dataset" => "DATA",
|
157
|
+
"edited-book" => "BOOK",
|
158
|
+
"journal-article" => "JOUR",
|
159
|
+
"journal" => nil,
|
160
|
+
"report" => nil,
|
161
|
+
"book-series" => nil,
|
162
|
+
"report-series" => nil,
|
163
|
+
"book-track" => nil,
|
164
|
+
"standard" => nil,
|
165
|
+
"book-section" => "CHAP",
|
166
|
+
"book-part" => "CHAP",
|
167
|
+
"book" => "BOOK",
|
168
|
+
"book-chapter" => "CHAP",
|
169
|
+
"standard-series" => nil,
|
170
|
+
"monograph" => "BOOK",
|
171
|
+
"component" => nil,
|
172
|
+
"reference-entry" => "DICT",
|
173
|
+
"journal-volume" => nil,
|
174
|
+
"book-set" => nil
|
175
|
+
}
|
176
|
+
|
177
|
+
DC_TO_RIS_TRANSLATIONS = {
|
178
|
+
"Audiovisual" => "MPCT",
|
179
|
+
"Collection" => nil,
|
180
|
+
"Dataset" => "DATA",
|
181
|
+
"Event" => nil,
|
182
|
+
"Image" => "FIGURE",
|
183
|
+
"InteractiveResource" => nil,
|
184
|
+
"Model" => nil,
|
185
|
+
"PhysicalObject" => nil,
|
186
|
+
"Service" => nil,
|
187
|
+
"Software" => "COMP",
|
188
|
+
"Sound" => "SOUND",
|
189
|
+
"Text" => "RPRT",
|
190
|
+
"Workflow" => nil,
|
191
|
+
"Other" => nil
|
192
|
+
}
|
193
|
+
|
194
|
+
CP_TO_RIS_TRANSLATIONS = {
|
195
|
+
"post-weblog" => "BLOG",
|
196
|
+
"dataset" => "DATA",
|
197
|
+
"graphic" => "FIGURE",
|
198
|
+
"book" => "BOOK",
|
199
|
+
"motion_picture" => "MPCT",
|
200
|
+
"article-journal" => "JOUR",
|
201
|
+
"computer_program" => "COMP",
|
202
|
+
"broadcast" => "MPCT",
|
203
|
+
"webpage" => "ELEC"
|
204
|
+
}
|
205
|
+
|
12
206
|
def find_from_format(id: nil, string: nil, ext: nil, filename: nil)
|
13
207
|
if id.present?
|
14
208
|
find_from_format_by_id(id)
|
@@ -67,7 +261,7 @@ module Bolognese
|
|
67
261
|
else SchemaOrg.new(id: id)
|
68
262
|
end
|
69
263
|
|
70
|
-
|
264
|
+
if p.errors.present?
|
71
265
|
$stderr.puts p.errors.colorize(:red)
|
72
266
|
end
|
73
267
|
|
@@ -78,7 +272,11 @@ module Bolognese
|
|
78
272
|
metadata = read(id: id, string: string, from: from, **options)
|
79
273
|
return nil if metadata.nil?
|
80
274
|
|
81
|
-
|
275
|
+
if to == "datacite" && metadata.datacite_errors.present?
|
276
|
+
$stderr.puts metadata.datacite_errors.colorize(:red)
|
277
|
+
else
|
278
|
+
puts metadata.send(to)
|
279
|
+
end
|
82
280
|
end
|
83
281
|
|
84
282
|
def generate(id: nil, string: nil, from: nil, to: nil, **options)
|
@@ -310,5 +508,12 @@ module Bolognese
|
|
310
508
|
def get_date_from_parts(year, month = nil, day = nil)
|
311
509
|
[year.to_s.rjust(4, '0'), month.to_s.rjust(2, '0'), day.to_s.rjust(2, '0')].reject { |part| part == "00" }.join("-")
|
312
510
|
end
|
511
|
+
|
512
|
+
def jsonlint(json)
|
513
|
+
error_array = []
|
514
|
+
linter = JsonLint::Linter.new
|
515
|
+
linter.send(:check_data, json, error_array)
|
516
|
+
error_array
|
517
|
+
end
|
313
518
|
end
|
314
519
|
end
|
data/lib/bolognese/version.rb
CHANGED
data/spec/cli_spec.rb
CHANGED
@@ -156,11 +156,11 @@ describe Bolognese::CLI do
|
|
156
156
|
expect { subject.convert file }.to output(/@article{https:\/\/doi.org\/10.5438\/4k3m-nyvg/).to_stdout
|
157
157
|
end
|
158
158
|
|
159
|
-
it 'to datacite invalid' do
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
end
|
159
|
+
# it 'to datacite invalid' do
|
160
|
+
# file = fixture_path + "datacite_missing_creator.xml"
|
161
|
+
# subject.options = { to: "datacite" }
|
162
|
+
# expect { subject.convert file }.to output("\e[0;31;49mElement '{http://datacite.org/schema/kernel-4}creators': Missing child element(s). Expected is ( {http://datacite.org/schema/kernel-4}creator ).\e[0m\n").to_stderr
|
163
|
+
# end
|
164
164
|
end
|
165
165
|
|
166
166
|
context "codemeta" do
|
data/spec/datacite_spec.rb
CHANGED
@@ -209,13 +209,14 @@ describe Bolognese::Datacite, vcr: true do
|
|
209
209
|
expect(subject.provider).to eq("DataCite")
|
210
210
|
end
|
211
211
|
|
212
|
-
it "missing creator" do
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
212
|
+
# it "missing creator" do
|
213
|
+
# string = IO.read(fixture_path + "datacite_missing_creator.xml")
|
214
|
+
# subject = Bolognese::Datacite.new(string: string, regenerate: true)
|
215
|
+
# expect(subject.valid?).to be true
|
216
|
+
# expect(subject.datacite_errors).to eq(2)
|
217
|
+
# expect(subject.id).to eq("https://doi.org/10.5438/4k3m-nyvg")
|
218
|
+
# expect(subject.errors).to eq("Element '{http://datacite.org/schema/kernel-4}creators': Missing child element(s). Expected is ( {http://datacite.org/schema/kernel-4}creator ).")
|
219
|
+
# end
|
219
220
|
end
|
220
221
|
|
221
222
|
context "get metadata as datacite xml 4.0" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bolognese
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Fenner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: maremma
|
@@ -248,6 +248,20 @@ dependencies:
|
|
248
248
|
- - "~>"
|
249
249
|
- !ruby/object:Gem::Version
|
250
250
|
version: '2.0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: benchmark_methods
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - "~>"
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '0.7'
|
258
|
+
type: :runtime
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - "~>"
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0.7'
|
251
265
|
- !ruby/object:Gem::Dependency
|
252
266
|
name: bundler
|
253
267
|
requirement: !ruby/object:Gem::Requirement
|