bolognese 0.8.13 → 0.9
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 +53 -8
- data/README.md +22 -1
- data/bolognese.gemspec +5 -1
- data/lib/bolognese.rb +5 -0
- data/lib/bolognese/citeproc.rb +6 -2
- data/lib/bolognese/codemeta.rb +6 -2
- data/lib/bolognese/crossref.rb +1 -1
- data/lib/bolognese/datacite.rb +2 -2
- data/lib/bolognese/datacite_json.rb +9 -5
- data/lib/bolognese/datacite_utils.rb +1 -1
- data/lib/bolognese/metadata.rb +32 -10
- data/lib/bolognese/schema_org.rb +9 -4
- data/lib/bolognese/version.rb +1 -1
- data/resources/schema_org/jsonldcontext.json +6640 -0
- data/spec/bibtex_spec.rb +18 -0
- data/spec/citeproc_spec.rb +18 -0
- data/spec/codemeta_spec.rb +20 -0
- data/spec/crossref_spec.rb +44 -0
- data/spec/datacite_json_spec.rb +41 -0
- data/spec/datacite_spec.rb +35 -0
- data/spec/datacite_utils_spec.rb +15 -15
- data/spec/fixtures/datacite_software_missing_comma.json +18 -0
- data/spec/fixtures/datacite_software_overlapping_keys.json +18 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Bibtex/get_metadata_as_rdf_xml/Crossref_DOI.yml +9163 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Bibtex/get_metadata_as_turtle/Crossref_DOI.yml +5303 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Citeproc/get_metadata_as_rdf_xml/BlogPosting.yml +9163 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Citeproc/get_metadata_as_turtle/BlogPosting.yml +4583 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Codemeta/get_metadata_as_rdf_xml/maremma.yml +9260 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Codemeta/get_metadata_as_turtle/maremma.yml +9260 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata_as_rdf_xml/journal_article.yml +5303 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata_as_rdf_xml/with_pages.yml +4950 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata_as_turtle/journal_article.yml +5303 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Crossref/get_metadata_as_turtle/with_pages.yml +9530 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_microdata/BlogPosting.yml +4735 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_rdf/xml/BlogPosting.yml +4735 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_rdf/xml/Dataset.yml +4753 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_rdf_xml/BlogPosting.yml +4735 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_rdfa/BlogPosting.yml +4735 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_rdfxml/BlogPosting.yml +9315 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_turtle/BlogPosting.yml +4735 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Datacite/get_metadata_as_turtle/Dataset.yml +4753 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_DataciteJson/BlogPosting.yml +4735 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_DataciteJson/get_metadata_as_rdf_xml/BlogPosting.yml +4735 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_DataciteJson/get_metadata_as_turtle/BlogPosting.yml +4583 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_SchemaOrg/get_metadata_as_rdf_xml/BlogPosting.yml +5233 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_SchemaOrg/get_metadata_as_turtle/BlogPosting.yml +5233 -0
- data/spec/metadata_spec.rb +20 -0
- data/spec/schema_org_spec.rb +26 -1
- metadata +94 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 290c7cb9287a0b5e018ff3392821d45d41af4360
|
|
4
|
+
data.tar.gz: 9e687bbe98ed2bafc223bb49044b8fc2ea2a44d3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2dcaac0f7918491a15d02f08154e94130cdd2c5579c65669e04bce2ec27643f3a4376c70537a700ea61ce3bc18d634bab3de152555d6c68ac5110ccfa43bf96e
|
|
7
|
+
data.tar.gz: 2add919c630f4c2f211337d36366a556b3e9e00c6b41e5a82cf145064c8bf7ca1ad815eeaae155fd20d7fcee3d431af34fd4ed024726cf43a64e3278cc89bc55
|
data/Gemfile.lock
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
bolognese (0.
|
|
4
|
+
bolognese (0.9)
|
|
5
5
|
activesupport (~> 4.2, >= 4.2.5)
|
|
6
6
|
bibtex-ruby (~> 4.1)
|
|
7
7
|
builder (~> 3.2, >= 3.2.2)
|
|
8
8
|
colorize (~> 0.8.1)
|
|
9
|
+
json-ld (~> 2.1, >= 2.1.2)
|
|
10
|
+
jsonlint (~> 0.2.0)
|
|
9
11
|
loofah (~> 2.0, >= 2.0.3)
|
|
10
12
|
maremma (~> 3.5)
|
|
11
13
|
namae (~> 0.10.2)
|
|
12
|
-
nokogiri (~> 1.
|
|
14
|
+
nokogiri (~> 1.6, >= 1.6.8)
|
|
13
15
|
postrank-uri (~> 1.0, >= 1.0.18)
|
|
16
|
+
rdf-rdfxml (~> 2.0)
|
|
17
|
+
rdf-turtle (~> 2.2)
|
|
14
18
|
thor (~> 0.19)
|
|
15
19
|
|
|
16
20
|
GEM
|
|
@@ -29,10 +33,14 @@ GEM
|
|
|
29
33
|
codeclimate-test-reporter (1.0.8)
|
|
30
34
|
simplecov (<= 0.13)
|
|
31
35
|
colorize (0.8.1)
|
|
36
|
+
concurrent-ruby (1.0.5)
|
|
32
37
|
crack (0.4.3)
|
|
33
38
|
safe_yaml (~> 1.0.0)
|
|
34
39
|
diff-lcs (1.3)
|
|
35
40
|
docile (1.1.5)
|
|
41
|
+
ebnf (1.1.0)
|
|
42
|
+
rdf (~> 2.0)
|
|
43
|
+
sxp (~> 1.0)
|
|
36
44
|
excon (0.45.4)
|
|
37
45
|
faraday (0.9.2)
|
|
38
46
|
multipart-post (>= 1.2, < 3)
|
|
@@ -40,14 +48,26 @@ GEM
|
|
|
40
48
|
faraday
|
|
41
49
|
faraday_middleware (0.10.1)
|
|
42
50
|
faraday (>= 0.7.4, < 1.0)
|
|
51
|
+
haml (4.0.7)
|
|
52
|
+
tilt
|
|
53
|
+
hamster (3.0.0)
|
|
54
|
+
concurrent-ruby (~> 1.0)
|
|
43
55
|
hashdiff (0.3.2)
|
|
56
|
+
htmlentities (4.3.4)
|
|
44
57
|
i18n (0.8.1)
|
|
45
|
-
json (2.0.
|
|
58
|
+
json (2.0.4)
|
|
59
|
+
json-ld (2.1.2)
|
|
60
|
+
multi_json (~> 1.12)
|
|
61
|
+
rdf (~> 2.1)
|
|
62
|
+
jsonlint (0.2.0)
|
|
63
|
+
oj (~> 2)
|
|
64
|
+
trollop (~> 2)
|
|
46
65
|
latex-decode (0.2.2)
|
|
47
66
|
unicode (~> 0.4)
|
|
67
|
+
link_header (0.0.8)
|
|
48
68
|
loofah (2.0.3)
|
|
49
69
|
nokogiri (>= 1.5.9)
|
|
50
|
-
maremma (3.5.
|
|
70
|
+
maremma (3.5.6)
|
|
51
71
|
activesupport (~> 4.2, >= 4.2.5)
|
|
52
72
|
addressable (>= 2.3.6)
|
|
53
73
|
builder (~> 3.2, >= 3.2.2)
|
|
@@ -55,12 +75,12 @@ GEM
|
|
|
55
75
|
faraday (~> 0.9.2)
|
|
56
76
|
faraday-encoding (~> 0.0.1)
|
|
57
77
|
faraday_middleware (~> 0.10.0)
|
|
58
|
-
multi_json (~> 1.
|
|
59
|
-
nokogiri (~> 1.
|
|
78
|
+
multi_json (~> 1.12)
|
|
79
|
+
nokogiri (~> 1.6, >= 1.6.8)
|
|
60
80
|
oj (~> 2.18, >= 2.18.1)
|
|
61
81
|
mini_portile2 (2.1.0)
|
|
62
82
|
minitest (5.10.1)
|
|
63
|
-
multi_json (1.
|
|
83
|
+
multi_json (1.12.1)
|
|
64
84
|
multipart-post (2.0.0)
|
|
65
85
|
namae (0.10.2)
|
|
66
86
|
nokogiri (1.7.1)
|
|
@@ -75,6 +95,27 @@ GEM
|
|
|
75
95
|
rack-test (0.6.3)
|
|
76
96
|
rack (>= 1.0)
|
|
77
97
|
rake (12.0.0)
|
|
98
|
+
rdf (2.2.5)
|
|
99
|
+
hamster (~> 3.0)
|
|
100
|
+
link_header (~> 0.0, >= 0.0.8)
|
|
101
|
+
rdf-aggregate-repo (2.2.0)
|
|
102
|
+
rdf (~> 2.0)
|
|
103
|
+
rdf-rdfa (2.1.1)
|
|
104
|
+
haml (~> 4.0)
|
|
105
|
+
htmlentities (~> 4.3)
|
|
106
|
+
rdf (~> 2.0)
|
|
107
|
+
rdf-aggregate-repo (~> 2.0)
|
|
108
|
+
rdf-xsd (~> 2.0)
|
|
109
|
+
rdf-rdfxml (2.0.0)
|
|
110
|
+
htmlentities (~> 4.3)
|
|
111
|
+
rdf (~> 2.0)
|
|
112
|
+
rdf-rdfa (~> 2.0)
|
|
113
|
+
rdf-xsd (~> 2.0)
|
|
114
|
+
rdf-turtle (2.2.0)
|
|
115
|
+
ebnf (~> 1.1)
|
|
116
|
+
rdf (~> 2.2)
|
|
117
|
+
rdf-xsd (2.1.0)
|
|
118
|
+
rdf (~> 2.1)
|
|
78
119
|
rspec (3.5.0)
|
|
79
120
|
rspec-core (~> 3.5.0)
|
|
80
121
|
rspec-expectations (~> 3.5.0)
|
|
@@ -97,8 +138,12 @@ GEM
|
|
|
97
138
|
json (>= 1.8, < 3)
|
|
98
139
|
simplecov-html (~> 0.10.0)
|
|
99
140
|
simplecov-html (0.10.0)
|
|
141
|
+
sxp (1.0.0)
|
|
142
|
+
rdf (~> 2.0)
|
|
100
143
|
thor (0.19.4)
|
|
101
144
|
thread_safe (0.3.6)
|
|
145
|
+
tilt (2.0.7)
|
|
146
|
+
trollop (2.1.2)
|
|
102
147
|
tzinfo (1.2.3)
|
|
103
148
|
thread_safe (~> 0.1)
|
|
104
149
|
unicode (0.4.4.4)
|
|
@@ -124,4 +169,4 @@ DEPENDENCIES
|
|
|
124
169
|
webmock (~> 1.22, >= 1.22.3)
|
|
125
170
|
|
|
126
171
|
BUNDLED WITH
|
|
127
|
-
1.
|
|
172
|
+
1.12.5
|
data/README.md
CHANGED
|
@@ -51,6 +51,20 @@ Bolognese reads and/or writes these metadata formats:
|
|
|
51
51
|
<td>Yes</td>
|
|
52
52
|
<td>Yes</td>
|
|
53
53
|
</tr>
|
|
54
|
+
<tr>
|
|
55
|
+
<td><a href='http://www.w3.org/TR/rdf-syntax-grammar/'>RDF XML</a></td>
|
|
56
|
+
<td>rdf_xml</td>
|
|
57
|
+
<td>application/rdf+xml</td>
|
|
58
|
+
<td>No</td>
|
|
59
|
+
<td>Yes</td>
|
|
60
|
+
</tr>
|
|
61
|
+
<tr>
|
|
62
|
+
<td><a href='http://www.w3.org/TeamSubmission/turtle/'>RDF Turtle</a></td>
|
|
63
|
+
<td>turtle</td>
|
|
64
|
+
<td>text/turtle</td>
|
|
65
|
+
<td>No</td>
|
|
66
|
+
<td>Yes</td>
|
|
67
|
+
</tr>
|
|
54
68
|
<tr>
|
|
55
69
|
<td><a href='http://gsl-nagoya-u.net/http/pub/citeproc-doc.html'>Citeproc JSON</a></td>
|
|
56
70
|
<td>citeproc</td>
|
|
@@ -61,8 +75,15 @@ Bolognese reads and/or writes these metadata formats:
|
|
|
61
75
|
<tr>
|
|
62
76
|
<td><a href='https://codemeta.github.io/'>Codemeta</a></td>
|
|
63
77
|
<td>codemeta</td>
|
|
64
|
-
<td>application/ld+json</td>
|
|
78
|
+
<td>application/vnd.codemeta.ld+json</td>
|
|
79
|
+
<td>Yes</td>
|
|
65
80
|
<td>Yes</td>
|
|
81
|
+
</tr>
|
|
82
|
+
<tr>
|
|
83
|
+
<td><a href='https://github.com/scholix/schema'>Scholix</a></td>
|
|
84
|
+
<td>scholix</td>
|
|
85
|
+
<td>application/vnd.scholix+json</td>
|
|
86
|
+
<td>No</td>
|
|
66
87
|
<td>Yes</td>
|
|
67
88
|
</tr>
|
|
68
89
|
<tr>
|
data/bolognese.gemspec
CHANGED
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
|
16
16
|
|
|
17
17
|
# Declary dependencies here, rather than in the Gemfile
|
|
18
18
|
s.add_dependency 'maremma', '~> 3.5'
|
|
19
|
-
s.add_dependency 'nokogiri', '~> 1.
|
|
19
|
+
s.add_dependency 'nokogiri', '~> 1.6', '>= 1.6.8'
|
|
20
20
|
s.add_dependency 'loofah', '~> 2.0', '>= 2.0.3'
|
|
21
21
|
s.add_dependency 'builder', '~> 3.2', '>= 3.2.2'
|
|
22
22
|
s.add_dependency 'activesupport', '~> 4.2', '>= 4.2.5'
|
|
@@ -25,6 +25,10 @@ Gem::Specification.new do |s|
|
|
|
25
25
|
s.add_dependency 'colorize', '~> 0.8.1'
|
|
26
26
|
s.add_dependency 'namae', '~> 0.10.2'
|
|
27
27
|
s.add_dependency 'postrank-uri', '~> 1.0', '>= 1.0.18'
|
|
28
|
+
s.add_dependency 'json-ld', '~> 2.1', '>= 2.1.2'
|
|
29
|
+
s.add_dependency 'jsonlint', '~> 0.2.0'
|
|
30
|
+
s.add_dependency 'rdf-turtle', '~> 2.2'
|
|
31
|
+
s.add_dependency 'rdf-rdfxml', '~> 2.0'
|
|
28
32
|
s.add_development_dependency 'bundler', '~> 1.0'
|
|
29
33
|
s.add_development_dependency 'rspec', '~> 3.4'
|
|
30
34
|
s.add_development_dependency 'rspec-xsd', '~> 0.1.0'
|
data/lib/bolognese.rb
CHANGED
data/lib/bolognese/citeproc.rb
CHANGED
|
@@ -15,15 +15,19 @@ module Bolognese
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def metadata
|
|
18
|
-
@metadata ||= raw.present? ? Maremma.from_json(raw) : {}
|
|
18
|
+
@metadata ||= raw.present? && valid? ? Maremma.from_json(raw) : {}
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def exists?
|
|
22
22
|
metadata.present?
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
def errors
|
|
26
|
+
jsonlint(raw)
|
|
27
|
+
end
|
|
28
|
+
|
|
25
29
|
def valid?
|
|
26
|
-
|
|
30
|
+
errors.empty?
|
|
27
31
|
end
|
|
28
32
|
|
|
29
33
|
def doi
|
data/lib/bolognese/codemeta.rb
CHANGED
|
@@ -13,15 +13,19 @@ module Bolognese
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def metadata
|
|
16
|
-
@metadata ||= raw.present? ? Maremma.from_json(raw) : {}
|
|
16
|
+
@metadata ||= raw.present? && valid? ? Maremma.from_json(raw) : {}
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def exists?
|
|
20
20
|
metadata.present?
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
def errors
|
|
24
|
+
jsonlint(raw)
|
|
25
|
+
end
|
|
26
|
+
|
|
23
27
|
def valid?
|
|
24
|
-
|
|
28
|
+
errors.empty?
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
def doi
|
data/lib/bolognese/crossref.rb
CHANGED
|
@@ -68,7 +68,7 @@ module Bolognese
|
|
|
68
68
|
elsif id.present?
|
|
69
69
|
response = Maremma.get(id, accept: "application/vnd.crossref.unixref+xml", host: true, raw: true)
|
|
70
70
|
@raw = response.body.fetch("data", nil)
|
|
71
|
-
@raw = Nokogiri::XML(@raw, &:noblanks).to_s if @raw.present?
|
|
71
|
+
@raw = Nokogiri::XML(@raw, nil, 'UTF-8', &:noblanks).to_s if @raw.present?
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|
data/lib/bolognese/datacite.rb
CHANGED
|
@@ -11,7 +11,7 @@ module Bolognese
|
|
|
11
11
|
elsif id.present?
|
|
12
12
|
response = Maremma.get(id, accept: "application/vnd.datacite.datacite+xml", raw: true)
|
|
13
13
|
@raw = response.body.fetch("data", nil)
|
|
14
|
-
@raw = Nokogiri::XML(@raw, &:noblanks).to_s if @raw.present?
|
|
14
|
+
@raw = Nokogiri::XML(@raw, nil, 'UTF-8', &:noblanks).to_s if @raw.present?
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
@should_passthru = !regenerate
|
|
@@ -35,7 +35,7 @@ module Bolognese
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def errors
|
|
38
|
-
schema.validate(Nokogiri::XML(raw)).map { |error| error.to_s }.unwrap
|
|
38
|
+
schema.validate(Nokogiri::XML(raw, nil, 'UTF-8')).map { |error| error.to_s }.unwrap
|
|
39
39
|
rescue Nokogiri::XML::SyntaxError => e
|
|
40
40
|
e.message
|
|
41
41
|
end
|
|
@@ -8,11 +8,15 @@ module Bolognese
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def metadata
|
|
11
|
-
@metadata ||= raw.present? ? Maremma.from_json(raw) : {}
|
|
11
|
+
@metadata ||= raw.present? && valid? ? Maremma.from_json(raw) : {}
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def errors
|
|
15
|
+
jsonlint(raw)
|
|
12
16
|
end
|
|
13
17
|
|
|
14
18
|
def valid?
|
|
15
|
-
|
|
19
|
+
errors.empty?
|
|
16
20
|
end
|
|
17
21
|
|
|
18
22
|
def datacite
|
|
@@ -32,11 +36,11 @@ module Bolognese
|
|
|
32
36
|
end
|
|
33
37
|
|
|
34
38
|
def type
|
|
35
|
-
DC_TO_SO_TRANSLATIONS[resource_type_general.to_s.dasherize] || "CreativeWork"
|
|
39
|
+
DC_TO_SO_TRANSLATIONS[resource_type_general.to_s.dasherize] || valid?.presence && "CreativeWork"
|
|
36
40
|
end
|
|
37
41
|
|
|
38
42
|
def citeproc_type
|
|
39
|
-
DC_TO_CP_TRANSLATIONS[resource_type_general.to_s.dasherize] || "other"
|
|
43
|
+
DC_TO_CP_TRANSLATIONS[resource_type_general.to_s.dasherize] || valid?.presence && "other"
|
|
40
44
|
end
|
|
41
45
|
|
|
42
46
|
def ris_type
|
|
@@ -204,7 +208,7 @@ module Bolognese
|
|
|
204
208
|
end
|
|
205
209
|
|
|
206
210
|
def publisher
|
|
207
|
-
metadata.fetch("publisher")
|
|
211
|
+
metadata.fetch("publisher", nil)
|
|
208
212
|
end
|
|
209
213
|
|
|
210
214
|
alias_method :container_title, :publisher
|
|
@@ -19,7 +19,7 @@ module Bolognese
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def datacite_errors
|
|
22
|
-
@datacite_errors ||= schema.validate(Nokogiri::XML(datacite)).map { |error| error.to_s }
|
|
22
|
+
@datacite_errors ||= schema.validate(Nokogiri::XML(datacite, nil, 'UTF-8')).map { |error| error.to_s }
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def insert_work(xml)
|
data/lib/bolognese/metadata.rb
CHANGED
|
@@ -237,8 +237,8 @@ module Bolognese
|
|
|
237
237
|
"isBasedOn" => Array.wrap(is_supplement_to).map { |r| { "@id" => r["id"] }}.unwrap }.compact
|
|
238
238
|
end
|
|
239
239
|
|
|
240
|
-
def
|
|
241
|
-
|
|
240
|
+
def schema_hsh
|
|
241
|
+
{
|
|
242
242
|
"@context" => id.present? ? "http://schema.org" : nil,
|
|
243
243
|
"@type" => type,
|
|
244
244
|
"@id" => id,
|
|
@@ -266,13 +266,28 @@ module Bolognese
|
|
|
266
266
|
"predecessor_of" => is_previous_version_of,
|
|
267
267
|
"successor_of" => is_new_version_of,
|
|
268
268
|
"citation" => Array.wrap(references).map { |r| r.except("relationType").merge("@type" => "CreativeWork") }.unwrap,
|
|
269
|
-
"@reverse" => reverse,
|
|
269
|
+
"@reverse" => reverse.presence,
|
|
270
270
|
"schemaVersion" => schema_version,
|
|
271
|
-
"publisher" => { "@type" => "Organization", "name" => publisher },
|
|
271
|
+
"publisher" => publisher.present? ? { "@type" => "Organization", "name" => publisher } : nil,
|
|
272
272
|
"funder" => funder,
|
|
273
|
-
"provider" => { "@type" => "Organization", "name" => provider }
|
|
274
|
-
}.compact
|
|
275
|
-
|
|
273
|
+
"provider" => provider.present? ? { "@type" => "Organization", "name" => provider } : nil
|
|
274
|
+
}.compact.presence
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def schema_org
|
|
278
|
+
JSON.pretty_generate schema_hsh
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def graph
|
|
282
|
+
RDF::Graph.new << JSON::LD::API.toRdf(schema_hsh)
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def turtle
|
|
286
|
+
graph.dump(:ttl, prefixes: { schema: "http://schema.org/" })
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
def rdf_xml
|
|
290
|
+
graph.dump(:rdfxml, prefixes: { schema: "http://schema.org/" })
|
|
276
291
|
end
|
|
277
292
|
|
|
278
293
|
def datacite_json
|
|
@@ -309,7 +324,7 @@ module Bolognese
|
|
|
309
324
|
"schemaVersion" => schema_version,
|
|
310
325
|
"provider" => provider
|
|
311
326
|
}.compact
|
|
312
|
-
JSON.pretty_generate hsh
|
|
327
|
+
JSON.pretty_generate hsh.presence
|
|
313
328
|
end
|
|
314
329
|
|
|
315
330
|
def citeproc
|
|
@@ -333,7 +348,7 @@ module Bolognese
|
|
|
333
348
|
"version" => version,
|
|
334
349
|
"volume" => volume
|
|
335
350
|
}.compact
|
|
336
|
-
JSON.pretty_generate hsh
|
|
351
|
+
JSON.pretty_generate hsh.presence
|
|
337
352
|
end
|
|
338
353
|
|
|
339
354
|
def codemeta
|
|
@@ -353,7 +368,7 @@ module Bolognese
|
|
|
353
368
|
"dateModified" => date_modified,
|
|
354
369
|
"publisher" => publisher
|
|
355
370
|
}.compact
|
|
356
|
-
JSON.pretty_generate hsh
|
|
371
|
+
JSON.pretty_generate hsh.presence
|
|
357
372
|
end
|
|
358
373
|
|
|
359
374
|
def bibtex
|
|
@@ -394,5 +409,12 @@ module Bolognese
|
|
|
394
409
|
"ER" => ""
|
|
395
410
|
}.compact.map { |k, v| v.is_a?(Array) ? v.map { |vi| "#{k} - #{vi}" }.join("\r\n") : "#{k} - #{v}" }.join("\r\n")
|
|
396
411
|
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
|
|
397
419
|
end
|
|
398
420
|
end
|
data/lib/bolognese/schema_org.rb
CHANGED
|
@@ -17,21 +17,26 @@ module Bolognese
|
|
|
17
17
|
@raw = string
|
|
18
18
|
elsif id.present?
|
|
19
19
|
response = Maremma.get(id)
|
|
20
|
-
doc = Nokogiri::XML(response.body.fetch("data", nil))
|
|
20
|
+
doc = Nokogiri::XML(response.body.fetch("data", nil), nil, 'UTF-8')
|
|
21
21
|
@raw = doc.at_xpath('//script[@type="application/ld+json"]')
|
|
22
|
+
@raw = @raw.text if @raw.present?
|
|
22
23
|
end
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
def metadata
|
|
26
|
-
@metadata ||= raw.present? ? Maremma.from_json(raw) : {}
|
|
27
|
+
@metadata ||= raw.present? && valid? ? Maremma.from_json(raw) : {}
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
def exists?
|
|
30
31
|
metadata.present?
|
|
31
32
|
end
|
|
32
33
|
|
|
34
|
+
def errors
|
|
35
|
+
jsonlint(raw)
|
|
36
|
+
end
|
|
37
|
+
|
|
33
38
|
def valid?
|
|
34
|
-
|
|
39
|
+
errors.empty?
|
|
35
40
|
end
|
|
36
41
|
|
|
37
42
|
def doi
|
|
@@ -61,7 +66,7 @@ module Bolognese
|
|
|
61
66
|
def ris_type
|
|
62
67
|
SO_TO_RIS_TRANSLATIONS[resource_type_general.to_s.dasherize] || "GEN"
|
|
63
68
|
end
|
|
64
|
-
|
|
69
|
+
|
|
65
70
|
def additional_type
|
|
66
71
|
metadata.fetch("additionalType", nil)
|
|
67
72
|
end
|