bolognese 0.6.2 → 0.6.3
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/README.md +85 -24
- data/bin/bolognese +5 -1
- data/lib/bolognese/bibtex.rb +5 -1
- data/lib/bolognese/cli.rb +22 -23
- data/lib/bolognese/metadata.rb +3 -21
- data/lib/bolognese/utils.rb +38 -21
- data/lib/bolognese/version.rb +1 -1
- data/spec/bibtex_spec.rb +3 -0
- data/spec/cli_spec.rb +94 -43
- data/spec/fixtures/crossref.bib +3 -1
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/crossref/as_bibtex.yml +7 -7
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/crossref/as_crossref.yml +7 -7
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/crossref/as_datacite.yml +7 -723
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/crossref/as_schema_org.yml +7 -723
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/crossref/default.yml +7 -7
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_bibtex.yml +760 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_crossref.yml +760 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_datacite.yml +760 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/crossref/to_schema_org.yml +760 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/datacite/as_bibtex.yml +9 -9
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/datacite/as_datacite.yml +9 -9
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/datacite/as_schema_org.yml +9 -179
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/datacite/default.yml +9 -9
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_bibtex.yml +214 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_datacite.yml +214 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/datacite/to_schema_org.yml +214 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/schema_org/as_bibtex.yml +10 -10
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/schema_org/as_datacite.yml +10 -10
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/schema_org/as_schema_org.yml +10 -10
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/{read → convert_from_id}/schema_org/default.yml +10 -10
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/schema_org/to_bibtex.yml +653 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/schema_org/to_datacite.yml +653 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_CLI/convert_from_id/schema_org/to_schema_org.yml +653 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_PID_provider_by_ID/crossref.yml +44 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_PID_provider_by_ID/crossref_doi_not_url.yml +44 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_PID_provider_by_ID/datacite.yml +44 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_PID_provider_by_ID/datacite_doi_http.yml +44 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/crossref.yml +44 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/crossref_doi_not_url.yml +44 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/datacite.yml +44 -0
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/find_from_format_by_ID/datacite_doi_http.yml +44 -0
- data/spec/metadata_spec.rb +27 -7
- metadata +32 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 019af5df5c06f424579440313912c3841dd717ae
|
4
|
+
data.tar.gz: 9cd1726770f9685335c7bc5afb7b053e618a1c4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35f06b9c7e9e3960a54614fdc9c16da563da9cf9496b95279c5cb4258cc042d8fcd67214147f857f242e967be4eff83cb57e0143edbf2931e22e33572779ed20
|
7
|
+
data.tar.gz: 429b51e24ff0db4669d6f0d2a6e6c7aee00e7a7d35ba6e2b09f784b1da63533c1bcf83f4bd8907c03802073c53391d3cf71fd547abb201ee95d69775bd13a0ff
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -4,24 +4,58 @@
|
|
4
4
|
|
5
5
|
# Bolognese
|
6
6
|
|
7
|
-
Ruby gem and command-line utility for conversion of DOI metadata from and to [schema.org](https://schema.org)
|
7
|
+
Ruby gem and command-line utility for conversion of DOI metadata from and to different metadata formats, including [schema.org](https://schema.org).
|
8
8
|
|
9
9
|
## Features
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
Bolognese reads and writes these metadata formats.
|
12
|
+
|
13
|
+
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides" class="table table-bordered table-striped">
|
14
|
+
<thead>
|
15
|
+
<tr>
|
16
|
+
<th>Format</th>
|
17
|
+
<th>Name</th>
|
18
|
+
<th>Content Type</th>
|
19
|
+
<th>Read</th>
|
20
|
+
<th>Write</th>
|
21
|
+
</tr>
|
22
|
+
</thead>
|
23
|
+
<tbody>
|
24
|
+
<tr>
|
25
|
+
<td><a href='https://www.crossref.org/schema/documentation/unixref1.1/unixref1.1.html'>CrossRef Unixref XML</a></td>
|
26
|
+
<td>crossref</td>
|
27
|
+
<td>application/vnd.crossref.unixref+xml</td>
|
28
|
+
<td>Yes</td>
|
29
|
+
<td>No</td>
|
30
|
+
</tr>
|
31
|
+
<tr>
|
32
|
+
<td><a href='https://schema.datacite.org/'>DataCite XML</a></td>
|
33
|
+
<td>datacite</td>
|
34
|
+
<td>application/vnd.datacite.datacite+xml</td>
|
35
|
+
<td>Yes</td>
|
36
|
+
<td>Yes</td>
|
37
|
+
</tr>
|
38
|
+
<tr>
|
39
|
+
<td><a href='http://schema.org/'>Schema.org in JSON-LD</a></td>
|
40
|
+
<td>schema_org</td>
|
41
|
+
<td>application/vnd.schemaorg.ld+json</td>
|
42
|
+
<td>Yes</td>
|
43
|
+
<td>Yes</td>
|
44
|
+
</tr>
|
45
|
+
<tr>
|
46
|
+
<td><a href='http://en.wikipedia.org/wiki/BibTeX'>BibTeX</a></td>
|
47
|
+
<td>bibtex</td>
|
48
|
+
<td>application/x-bibtex</td>
|
49
|
+
<td>Yes</td>
|
50
|
+
<td>Yes</td>
|
51
|
+
</tr>
|
52
|
+
</tbody>
|
53
|
+
</table>
|
20
54
|
|
21
55
|
## Installation
|
22
56
|
|
23
|
-
|
24
|
-
|
57
|
+
Requires Ruby 2.2 or later. Then add the following to your `Gemfile` to install the
|
58
|
+
latest version:
|
25
59
|
|
26
60
|
```ruby
|
27
61
|
gem 'bolognese'
|
@@ -37,14 +71,41 @@ gem install bolognese
|
|
37
71
|
|
38
72
|
## Commands
|
39
73
|
|
40
|
-
|
41
|
-
|
74
|
+
Run the `bolognese` command with either an identifier (DOI or URL) or filename:
|
75
|
+
|
76
|
+
```
|
77
|
+
bolognese https://doi.org/10.7554/elife.01567
|
78
|
+
```
|
79
|
+
|
80
|
+
```
|
81
|
+
bolognese example.xml
|
82
|
+
```
|
83
|
+
|
84
|
+
Bolognese can read BibTeX files (file extension `.bib`) and Crossref or DataCite
|
85
|
+
XML files (file extension `.xml`).
|
86
|
+
|
87
|
+
The input format (e.g. Crossref XML or BibteX) is automatically detected, but
|
88
|
+
you can also provide the format with the `--from` or `-f` flag. The supported
|
89
|
+
input formats are listed in the table above.
|
90
|
+
|
91
|
+
The output format is determined by the `--to` or `-t` flag, and defaults to `schema_org`.
|
92
|
+
|
93
|
+
Show all commands with `bolognese help`:
|
94
|
+
|
95
|
+
```
|
96
|
+
Commands:
|
97
|
+
bolognese --version, -v # print the version
|
98
|
+
bolognese help [COMMAND] # Describe available commands or one specific command
|
99
|
+
bolognese open file # read metadata from file
|
100
|
+
bolognese read id # read metadata for ID
|
101
|
+
```
|
42
102
|
|
43
103
|
## Examples
|
44
104
|
|
45
105
|
Read Crossref XML:
|
106
|
+
|
46
107
|
```
|
47
|
-
bolognese
|
108
|
+
bolognese https://doi.org/10.7554/elife.01567 -t crossref
|
48
109
|
|
49
110
|
<?xml version="1.0" encoding="UTF-8"?>
|
50
111
|
<doi_records>
|
@@ -167,7 +228,7 @@ bolognese read https://doi.org/10.7554/elife.01567 --as crossref
|
|
167
228
|
|
168
229
|
Convert Crossref XML to schema.org/JSON-LD:
|
169
230
|
```
|
170
|
-
bolognese
|
231
|
+
bolognese https://doi.org/10.7554/elife.01567
|
171
232
|
|
172
233
|
{
|
173
234
|
"@context": "http://schema.org",
|
@@ -364,7 +425,7 @@ bolognese read https://doi.org/10.7554/elife.01567
|
|
364
425
|
|
365
426
|
Convert Crossref XML to DataCite XML:
|
366
427
|
```
|
367
|
-
bolognese
|
428
|
+
bolognese https://doi.org/10.7554/elife.01567 -t datacite
|
368
429
|
|
369
430
|
<?xml version="1.0" encoding="UTF-8"?>
|
370
431
|
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://datacite.org/schema/kernel-4" xsi:schemaLocation="http://datacite.org/schema/kernel-4 http://schema.datacite.org/meta/kernel-4/metadata.xsd">
|
@@ -458,7 +519,7 @@ bolognese read https://doi.org/10.7554/elife.01567 --as datacite
|
|
458
519
|
Convert Crossref XML to BibTeX:
|
459
520
|
|
460
521
|
```
|
461
|
-
bolognese
|
522
|
+
bolognese https://doi.org/10.7554/elife.01567 -t bibtex
|
462
523
|
|
463
524
|
@article{https://doi.org/10.7554/elife.01567,
|
464
525
|
doi = {10.7554/eLife.01567},
|
@@ -472,7 +533,7 @@ bolognese read https://doi.org/10.7554/elife.01567 --as bibtex
|
|
472
533
|
|
473
534
|
Read DataCite XML:
|
474
535
|
```
|
475
|
-
bolognese
|
536
|
+
bolognese 10.5061/DRYAD.8515 -t datacite
|
476
537
|
|
477
538
|
<?xml version="1.0" encoding="UTF-8"?>
|
478
539
|
<resource
|
@@ -543,7 +604,7 @@ bolognese read 10.5061/DRYAD.8515 --as datacite
|
|
543
604
|
|
544
605
|
Convert DataCite XML to schema.org/JSON-LD:
|
545
606
|
```sh
|
546
|
-
bolognese
|
607
|
+
bolognese 10.5061/DRYAD.8515
|
547
608
|
|
548
609
|
{
|
549
610
|
"@context": "http://schema.org",
|
@@ -614,7 +675,7 @@ bolognese read 10.5061/DRYAD.8515
|
|
614
675
|
|
615
676
|
Convert DataCite XML to schema version 4.0:
|
616
677
|
```
|
617
|
-
bolognese
|
678
|
+
bolognese 10.5061/DRYAD.8515 -t datacite --schema_version http://datacite.org/schema/kernel-4
|
618
679
|
|
619
680
|
<?xml version="1.0" encoding="UTF-8"?>
|
620
681
|
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://datacite.org/schema/kernel-4" xsi:schemaLocation="http://datacite.org/schema/kernel-4 http://schema.datacite.org/meta/kernel-4/metadata.xsd">
|
@@ -697,7 +758,7 @@ bolognese read 10.5061/DRYAD.8515 --as datacite --schema_version http://datacite
|
|
697
758
|
Convert DataCite XML to BibTeX:
|
698
759
|
|
699
760
|
```
|
700
|
-
bolognese
|
761
|
+
bolognese 10.5061/DRYAD.8515 -t bibtex
|
701
762
|
|
702
763
|
@misc{https://doi.org/10.5061/dryad.8515,
|
703
764
|
doi = {10.5061/DRYAD.8515},
|
@@ -712,7 +773,7 @@ bolognese read 10.5061/DRYAD.8515 --as bibtex
|
|
712
773
|
Convert schema.org/JSON-LD to DataCite XML:
|
713
774
|
|
714
775
|
```
|
715
|
-
bolognese
|
776
|
+
bolognese https://blog.datacite.org/eating-your-own-dog-food -t datacite
|
716
777
|
|
717
778
|
<?xml version="1.0" encoding="UTF-8"?>
|
718
779
|
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://datacite.org/schema/kernel-4" xsi:schemaLocation="http://datacite.org/schema/kernel-4 http://schema.datacite.org/meta/kernel-4/metadata.xsd">
|
@@ -763,7 +824,7 @@ bolognese read https://blog.datacite.org/eating-your-own-dog-food --as datacite
|
|
763
824
|
Convert schema.org/JSON-LD to BibTeX:
|
764
825
|
|
765
826
|
```
|
766
|
-
bolognese
|
827
|
+
bolognese https://blog.datacite.org/eating-your-own-dog-food -t bibtex
|
767
828
|
|
768
829
|
@article{https://doi.org/10.5438/4k3m-nyvg,
|
769
830
|
doi = {10.5438/4k3m-nyvg},
|
data/bin/bolognese
CHANGED
data/lib/bolognese/bibtex.rb
CHANGED
@@ -95,7 +95,11 @@ module Bolognese
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def description
|
98
|
-
metadata.
|
98
|
+
metadata.field?(:abstract) && metadata.abstract.to_s.presence
|
99
|
+
end
|
100
|
+
|
101
|
+
def license
|
102
|
+
metadata.field?(:copyright) && metadata.copyright.to_s.presence
|
99
103
|
end
|
100
104
|
end
|
101
105
|
end
|
data/lib/bolognese/cli.rb
CHANGED
@@ -10,10 +10,8 @@ module Bolognese
|
|
10
10
|
include Bolognese::DoiUtils
|
11
11
|
include Bolognese::Utils
|
12
12
|
|
13
|
-
default_task :open
|
14
|
-
|
15
13
|
def self.exit_on_failure?
|
16
|
-
|
14
|
+
false
|
17
15
|
end
|
18
16
|
|
19
17
|
# from http://stackoverflow.com/questions/22809972/adding-a-version-option-to-a-ruby-thor-cli
|
@@ -24,30 +22,31 @@ module Bolognese
|
|
24
22
|
puts Bolognese::VERSION
|
25
23
|
end
|
26
24
|
|
27
|
-
desc "
|
28
|
-
method_option :
|
29
|
-
method_option :
|
30
|
-
def read(id)
|
31
|
-
id = normalize_id(id)
|
32
|
-
provider = find_provider(id)
|
33
|
-
|
34
|
-
set_metadata(id: id, provider: provider, as: options[:as], schema_version: options[:schema_version])
|
35
|
-
end
|
36
|
-
|
37
|
-
desc "open file", "read metadata from file"
|
38
|
-
method_option :as, default: "schema_org"
|
25
|
+
desc "", "convert metadata"
|
26
|
+
method_option :from, aliases: "-f"
|
27
|
+
method_option :to, aliases: "-t", default: "schema_org"
|
39
28
|
method_option :schema_version
|
40
|
-
def
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
29
|
+
def convert(input)
|
30
|
+
id = normalize_id(input)
|
31
|
+
|
32
|
+
if id.present?
|
33
|
+
from = options[:from] || find_from_format(id: id)
|
34
|
+
else
|
35
|
+
ext = File.extname(input)
|
36
|
+
if %w(.bib .xml).include? ext
|
37
|
+
string = IO.read(input)
|
38
|
+
else
|
39
|
+
$stderr.puts "File type #{ext} not supported"
|
40
|
+
exit 1
|
41
|
+
end
|
42
|
+
from = options[:from] || find_from_format(string: string, ext: ext)
|
45
43
|
end
|
46
44
|
|
47
|
-
|
48
|
-
provider = "bibtex"
|
45
|
+
to = options[:to] || "schema_org"
|
49
46
|
|
50
|
-
|
47
|
+
write(id: id, string: string, from: from, to: to, schema_version: options[:schema_version])
|
51
48
|
end
|
49
|
+
|
50
|
+
default_task :convert
|
52
51
|
end
|
53
52
|
end
|
data/lib/bolognese/metadata.rb
CHANGED
@@ -15,7 +15,8 @@ module Bolognese
|
|
15
15
|
attr_reader :id, :raw, :provider, :schema_version, :license, :citation,
|
16
16
|
:additional_type, :alternate_name, :url, :version, :keywords, :editor,
|
17
17
|
:page_start, :page_end, :date_modified, :language, :spatial_coverage,
|
18
|
-
:content_size, :funder, :journal, :bibtex_type
|
18
|
+
:content_size, :funder, :journal, :bibtex_type, :date_created, :has_part,
|
19
|
+
:publisher, :contributor, :schema_version
|
19
20
|
|
20
21
|
alias_method :datacite, :as_datacite
|
21
22
|
|
@@ -23,30 +24,10 @@ module Bolognese
|
|
23
24
|
date_published && date_published[0..3]
|
24
25
|
end
|
25
26
|
|
26
|
-
def date_created
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
27
|
def pagination
|
31
28
|
[page_start, page_end].compact.join("-").presence
|
32
29
|
end
|
33
30
|
|
34
|
-
def has_part
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
def publisher
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def contributor
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
def schema_version
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
31
|
def author_string
|
51
32
|
author.map { |a| [a["familyName"], a["givenName"]].join(", ") }
|
52
33
|
.join(" and ").presence
|
@@ -96,6 +77,7 @@ module Bolognese
|
|
96
77
|
url: url,
|
97
78
|
author: author_string,
|
98
79
|
keywords: keywords,
|
80
|
+
language: language,
|
99
81
|
title: name,
|
100
82
|
journal: journal,
|
101
83
|
pages: pagination,
|
data/lib/bolognese/utils.rb
CHANGED
@@ -1,22 +1,51 @@
|
|
1
1
|
module Bolognese
|
2
2
|
module Utils
|
3
|
-
def set_metadata(id: nil, string: nil, provider: nil, **options)
|
4
|
-
output = options[:as] || "schema_org"
|
5
3
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
def find_from_format(id: nil, string: nil, ext: nil)
|
5
|
+
if id.present?
|
6
|
+
find_from_format_by_id(id)
|
7
|
+
elsif string.present?
|
8
|
+
find_from_format_by_string(string, ext: ext)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def find_from_format_by_id(id)
|
13
|
+
id = normalize_id(id)
|
14
|
+
|
15
|
+
if /\A(?:(http|https):\/\/(dx\.)?doi.org\/)?(doi:)?(10\.\d{4,5}\/.+)\z/.match(id)
|
16
|
+
get_doi_ra(id).fetch("id", nil)
|
17
|
+
elsif /\A(?:(http|https):\/\/orcid\.org\/)?(\d{4}-\d{4}-\d{4}-\d{3}[0-9X]+)\z/.match(id)
|
18
|
+
"orcid"
|
19
|
+
else
|
20
|
+
"schema_org"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def find_from_format_by_string(string, options={})
|
25
|
+
if options[:ext] == ".bib"
|
26
|
+
"bibtex"
|
27
|
+
elsif Maremma.from_xml(string).dig("doi_records", "doi_record", "crossref")
|
28
|
+
"crossref"
|
29
|
+
elsif Maremma.from_xml(string).dig("resource", "xmlns") == "http://datacite.org/schema/kernel-4"
|
30
|
+
"datacite"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def write(id: nil, string: nil, from: nil, to: nil, **options)
|
35
|
+
if from.present?
|
36
|
+
p = case from
|
37
|
+
when "crossref" then Crossref.new(id: id, string: string)
|
38
|
+
when "datacite" then Datacite.new(id: id, string: string, schema_version: options[:schema_version])
|
10
39
|
when "bibtex" then Bibtex.new(string: string)
|
11
40
|
else SchemaOrg.new(id: id)
|
12
41
|
end
|
13
42
|
|
14
|
-
puts p.send(
|
43
|
+
puts p.send(to)
|
15
44
|
else
|
16
45
|
puts "not implemented"
|
17
46
|
end
|
18
47
|
end
|
19
|
-
|
48
|
+
|
20
49
|
def orcid_from_url(url)
|
21
50
|
Array(/\Ahttp:\/\/orcid\.org\/(.+)/.match(url)).last
|
22
51
|
end
|
@@ -61,22 +90,10 @@ module Bolognese
|
|
61
90
|
end
|
62
91
|
end
|
63
92
|
|
64
|
-
def find_provider(id)
|
65
|
-
id = normalize_id(id)
|
66
|
-
|
67
|
-
if /\A(?:(http|https):\/\/(dx\.)?doi.org\/)?(doi:)?(10\.\d{4,5}\/.+)\z/.match(id)
|
68
|
-
get_doi_ra(id).fetch("id", nil)
|
69
|
-
elsif /\A(?:(http|https):\/\/orcid\.org\/)?(\d{4}-\d{4}-\d{4}-\d{3}[0-9X]+)\z/.match(id)
|
70
|
-
"orcid"
|
71
|
-
else
|
72
|
-
"schema_org"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
93
|
def normalize_id(id)
|
77
94
|
return nil unless id.present?
|
78
95
|
|
79
|
-
normalize_doi(id) || PostRank::URI.clean(id)
|
96
|
+
normalize_doi(id) || Addressable::URI.parse(id).host && PostRank::URI.clean(id)
|
80
97
|
end
|
81
98
|
|
82
99
|
def normalize_orcid(orcid)
|
data/lib/bolognese/version.rb
CHANGED
data/spec/bibtex_spec.rb
CHANGED
@@ -17,6 +17,8 @@ describe Bolognese::Bibtex, vcr: true do
|
|
17
17
|
{"@type"=>"Person", "givenName"=>"Ioannis", "familyName"=>"Xenarios"},
|
18
18
|
{"@type"=>"Person", "givenName"=>"Christian S", "familyName"=>"Hardtke"}])
|
19
19
|
expect(subject.name).to eq("Automated quantitative histology reveals vascular morphodynamics during Arabidopsis hypocotyl secondary growth")
|
20
|
+
expect(subject.description).to start_with("Among various advantages, their small size makes model organisms preferred subjects of investigation.")
|
21
|
+
expect(subject.license).to eq("http://creativecommons.org/licenses/by/3.0/")
|
20
22
|
expect(subject.date_published).to eq("2014")
|
21
23
|
expect(subject.is_part_of).to eq("@type"=>"Periodical", "name"=>"eLife", "issn"=>"2050-084X")
|
22
24
|
end
|
@@ -28,6 +30,7 @@ describe Bolognese::Bibtex, vcr: true do
|
|
28
30
|
datacite = Maremma.from_xml(subject.as_datacite).fetch("resource", {})
|
29
31
|
expect(datacite.dig("resourceType", "resourceTypeGeneral")).to eq("Text")
|
30
32
|
expect(datacite.dig("titles", "title")).to eq("Automated quantitative histology reveals vascular morphodynamics during Arabidopsis hypocotyl secondary growth")
|
33
|
+
expect(datacite.dig("descriptions", "description", "__content__")).to start_with("Among various advantages, their small size makes model organisms preferred subjects of investigation.")
|
31
34
|
expect(datacite.dig("creators", "creator").count).to eq(5)
|
32
35
|
expect(datacite.dig("creators", "creator").first).to eq("creatorName"=>"Sankar, Martial", "givenName"=>"Martial", "familyName"=>"Sankar")
|
33
36
|
end
|